From 3cd6e7f082242d00a01d3c3fcbe5a1f57120bf31 Mon Sep 17 00:00:00 2001 From: "dementii.priadko" <45518657+DEMNERD@users.noreply.github.com> Date: Tue, 16 Sep 2025 18:36:43 +0300 Subject: [PATCH 01/10] Added wal-g exporter to prometheus --- exporter/.golangci.yml | 39 +++ exporter/README.md | 251 +++++++++++++++++++ exporter/exporter.go | 435 ++++++++++++++++++++++++++++++++ exporter/go.mod | 18 ++ exporter/go.sum | 545 +++++++++++++++++++++++++++++++++++++++++ exporter/main.go | 95 +++++++ exporter/mock-wal-g | 63 +++++ exporter/pitr.go | 50 ++++ exporter/wal_lag.go | 55 +++++ exporter/wrapper.sh | 18 ++ 10 files changed, 1569 insertions(+) create mode 100644 exporter/.golangci.yml create mode 100644 exporter/README.md create mode 100644 exporter/exporter.go create mode 100644 exporter/go.mod create mode 100644 exporter/go.sum create mode 100644 exporter/main.go create mode 100755 exporter/mock-wal-g create mode 100644 exporter/pitr.go create mode 100644 exporter/wal_lag.go create mode 100755 exporter/wrapper.sh diff --git a/exporter/.golangci.yml b/exporter/.golangci.yml new file mode 100644 index 000000000..dd2e61290 --- /dev/null +++ b/exporter/.golangci.yml @@ -0,0 +1,39 @@ +run: + timeout: 5m + modules-download-mode: readonly + +linters: + enable: + - gofmt + - goimports + - govet + - ineffassign + - misspell + - revive + - staticcheck + - unused + disable: + - errcheck + - gosec + - gosimple + +linters-settings: + revive: + rules: + - name: unused-parameter + disabled: true + - name: exported + disabled: true + +issues: + exclude-use-default: false + max-issues-per-linter: 0 + max-same-issues: 0 + + exclude-rules: + - text: "should have comment" + linters: + - revive + - text: "comment on exported" + linters: + - revive \ No newline at end of file diff --git a/exporter/README.md b/exporter/README.md new file mode 100644 index 000000000..cf9e1c70d --- /dev/null +++ b/exporter/README.md @@ -0,0 +1,251 @@ +# WAL-G Prometheus Exporter + +A Prometheus exporter for WAL-G backup and WAL metrics for PostgreSQL databases. + +## Features + +- **Backup lag monitoring**: Track time since last backup-push (full and delta backups) +- **WAL lag monitoring**: Monitor time since last wal-push operation +- **LSN delta lag**: Calculate LSN lag in bytes between current and archived WAL +- **PITR window**: Monitor point-in-time recovery window size +- **Error monitoring**: Track WAL-G operation errors +- **WAL integrity**: Monitor WAL segment integrity status per timeline + +## Metrics + +The exporter provides the following metrics: + +### Backup Metrics +- `walg_backup_lag_seconds{backup_type}` - Time since last backup-push in seconds +- `walg_backup_count{backup_type}` - Number of backups (full/delta) +- `walg_backup_timestamp{backup_type}` - Timestamp of last backup + +### WAL Metrics +- `walg_wal_lag_seconds{timeline}` - Time since last wal-push in seconds +- `walg_lsn_lag_bytes{timeline}` - LSN delta lag in bytes +- `walg_wal_integrity_status{timeline}` - WAL integrity status (1 = OK, 0 = ERROR) + +### PITR Metrics +- `walg_pitr_window_seconds` - Point-in-time recovery window size in seconds + +### Error Metrics +- `walg_errors_total{operation,error_type}` - Total number of WAL-G errors + +### Exporter Metrics +- `walg_scrape_duration_seconds` - Duration of the last scrape +- `walg_scrape_errors_total` - Total number of scrape errors + +## Installation + +### From Source + +```bash +cd exporter +go build -o walg-exporter . +``` + +### Using Docker + +```bash +docker build -t walg-exporter . +docker run -p 9351:9351 walg-exporter +``` + +## Usage + +### Command Line Options + +```bash +./walg-exporter [flags] +``` + +**Flags:** +- `--web.listen-address` - Address to listen on (default: `:9351`) +- `--web.telemetry-path` - Path for metrics endpoint (default: `/metrics`) +- `--walg.path` - Path to wal-g binary (default: `wal-g`) +- `--scrape.interval` - Scrape interval (default: `60s`) +- `--log.level` - Log level (default: `info`) + +### Example + +```bash +# Basic usage +./walg-exporter + +# Custom configuration +./walg-exporter \ + --web.listen-address=":8080" \ + --walg.path="/usr/local/bin/wal-g" \ + --scrape.interval="30s" +``` + +## Configuration + +The exporter requires WAL-G to be properly configured and accessible. Ensure that: + +1. WAL-G is installed and in PATH (or specify with `--walg.path`) +2. WAL-G configuration is properly set up (environment variables, config file) +3. The exporter has access to execute WAL-G commands + +### WAL-G Commands Used + +The exporter executes the following WAL-G commands: +- `wal-g backup-list --detail --json` - Get backup information +- `wal-g wal-show --detailed-json` - Get WAL segment information + +## Prometheus Configuration + +Add the following to your Prometheus configuration: + +```yaml +scrape_configs: + - job_name: 'walg-exporter' + static_configs: + - targets: ['localhost:9351'] + scrape_interval: 60s + metrics_path: /metrics +``` + +## Grafana Dashboard + +Example Grafana queries: + +### Backup Lag +```promql +walg_backup_lag_seconds{backup_type="full"} +``` + +### WAL Lag +```promql +walg_wal_lag_seconds +``` + +### PITR Window (in hours) +```promql +walg_pitr_window_seconds / 3600 +``` + +### Error Rate +```promql +rate(walg_errors_total[5m]) +``` + +## Development + +### Running Tests + +```bash +go test -v ./... +``` + +### Running Benchmarks + +```bash +go test -bench=. -benchmem ./... +``` + +### Mock Testing + +The exporter includes comprehensive tests with mock WAL-G commands: + +```bash +# Create a mock wal-g script +cat > mock-wal-g << 'EOF' +#!/bin/bash +case "$1" in + "backup-list") + echo '[{"backup_name":"test","time":"2024-01-01T12:00:00Z","is_full":true}]' + ;; + "wal-show") + echo '{"integrity":{"status":"OK","details":[{"timeline_id":1,"status":"FOUND"}]}}' + ;; +esac +EOF +chmod +x mock-wal-g + +# Test with mock +./walg-exporter --walg.path=./mock-wal-g +``` + +## Architecture + +The exporter consists of several components: + +- **main.go**: HTTP server and command-line interface +- **exporter.go**: Core Prometheus collector implementation +- **wal_lag.go**: LSN parsing and WAL lag calculation +- **pitr.go**: PITR window calculation logic + +### LSN Parsing + +The exporter includes a full LSN parser that handles PostgreSQL LSN format: + +```go +lsn, err := ParseLSN("0/1A2B3C4D") +fmt.Println(lsn.String()) // "0/1A2B3C4D" +fmt.Println(lsn.Bytes()) // 439041101 +``` + +### Lag Calculation + +WAL and LSN lag calculations: + +```go +// Time-based lag +walLag := calculateWalLag(lastWalTime) + +// LSN-based lag in bytes +lsnLag := calculateLSNLag(currentLSN, lastArchivedLSN) +``` + +## Troubleshooting + +### Common Issues + +1. **WAL-G command not found** + - Ensure WAL-G is in PATH or specify with `--walg.path` + - Check that WAL-G is executable + +2. **Permission denied** + - Ensure the exporter has permission to execute WAL-G + - Check WAL-G configuration file permissions + +3. **No metrics** + - Verify WAL-G commands work manually + - Check exporter logs for errors + - Ensure WAL-G is properly configured + +### Debug Mode + +Enable debug logging: + +```bash +./walg-exporter --log.level=debug +``` + +### Health Check + +The exporter provides a health endpoint: + +```bash +curl http://localhost:9351/ +``` + +## Contributing + +1. Fork the repository +2. Create a feature branch +3. Add tests for new functionality +4. Ensure all tests pass +5. Submit a pull request + +## License + +This project is licensed under the same license as WAL-G. + +## Support + +For issues and questions: +- Check the [WAL-G documentation](https://github.com/wal-g/wal-g) +- File an issue in the WAL-G repository +- Join the WAL-G community discussions \ No newline at end of file diff --git a/exporter/exporter.go b/exporter/exporter.go new file mode 100644 index 000000000..888325417 --- /dev/null +++ b/exporter/exporter.go @@ -0,0 +1,435 @@ +package main + +import ( + "context" + "encoding/json" + "fmt" + "log" + "os/exec" + "strconv" + "time" + + "github.com/prometheus/client_golang/prometheus" +) + +// WalgExporter implements the Prometheus Collector interface +type WalgExporter struct { + walgPath string + scrapeInterval time.Duration + + // Metrics + backupLag *prometheus.GaugeVec + walLag *prometheus.GaugeVec + lsnLag *prometheus.GaugeVec + pitrWindow prometheus.Gauge + errors *prometheus.CounterVec + walIntegrity *prometheus.GaugeVec + backupCount *prometheus.GaugeVec + backupTimestamp *prometheus.GaugeVec + scrapeDuration prometheus.Gauge + scrapeErrors prometheus.Counter + + // Storage aliveness metrics + storageAlive prometheus.Gauge + storageLatency prometheus.Gauge + + // Internal state + lastScrape time.Time +} + +// BackupInfo represents backup information from backup-list --detail --json +// Updated to match real wal-g output format +type BackupInfo struct { + BackupName string `json:"backup_name"` + Time time.Time `json:"time"` + WalFileName string `json:"wal_file_name"` + StorageName string `json:"storage_name"` + StartTime time.Time `json:"start_time"` + FinishTime time.Time `json:"finish_time"` + DateFmt string `json:"date_fmt"` + Hostname string `json:"hostname"` + DataDir string `json:"data_dir"` + PgVersion int `json:"pg_version"` + StartLSN uint64 `json:"start_lsn"` // Real wal-g returns this as number + FinishLSN uint64 `json:"finish_lsn"` // Real wal-g returns this as number + IsPermanent bool `json:"is_permanent"` + SystemIdentifier uint64 `json:"system_identifier"` + UncompressedSize int64 `json:"uncompressed_size"` + CompressedSize int64 `json:"compressed_size"` + UserData interface{} `json:"user_data,omitempty"` +} + +// Helper function to convert uint64 LSN to string format (X/Y) +func formatLSN(lsn uint64) string { + return fmt.Sprintf("%X/%X", uint32(lsn>>32), uint32(lsn)) +} + +// Helper method to get backup type +func (b *BackupInfo) GetBackupType() string { + // In real wal-g, determine backup type based on backup name or other fields + // For now, assume base backups start with "base_" and others are delta + if len(b.BackupName) >= 5 && b.BackupName[:5] == "base_" { + return "full" + } + return "delta" +} + +// Helper method to check if backup is full +func (b *BackupInfo) IsFullBackup() bool { + return b.GetBackupType() == "full" +} + +// TimelineInfo represents timeline information from wal-show --detailed-json +// This matches the actual structure returned by wal-g wal-show --detailed-json +type TimelineInfo struct { + ID uint32 `json:"id"` + ParentID uint32 `json:"parent_id"` + SwitchPointLsn uint64 `json:"switch_point_lsn"` // LSN is serialized as uint64 in JSON + StartSegment string `json:"start_segment"` + EndSegment string `json:"end_segment"` + SegmentsCount int `json:"segments_count"` + MissingSegments []string `json:"missing_segments"` + SegmentRangeSize uint64 `json:"segment_range_size"` + Status string `json:"status"` +} + +// NewWalgExporter creates a new WAL-G exporter +func NewWalgExporter(walgPath string, scrapeInterval time.Duration) (*WalgExporter, error) { + return &WalgExporter{ + walgPath: walgPath, + scrapeInterval: scrapeInterval, + + backupLag: prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "walg_backup_lag_seconds", + Help: "Time since backup-push in seconds", + }, + []string{"backup_name", "backup_type", "wal_file", "start_lsn", "finish_lsn", "permanent"}, + ), + + walLag: prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "walg_wal_lag_seconds", + Help: "Time since last wal-push in seconds", + }, + []string{"timeline"}, + ), + + lsnLag: prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "walg_lsn_lag_bytes", + Help: "LSN delta lag in bytes", + }, + []string{"timeline"}, + ), + + pitrWindow: prometheus.NewGauge( + prometheus.GaugeOpts{ + Name: "walg_pitr_window_seconds", + Help: "Point-in-time recovery window size in seconds", + }, + ), + + errors: prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "walg_errors_total", + Help: "Total number of WAL-G errors", + }, + []string{"operation", "error_type"}, + ), + + walIntegrity: prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "walg_wal_integrity_status", + Help: "WAL integrity status (1 = OK, 0 = ERROR)", + }, + []string{"timeline"}, + ), + + backupCount: prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "walg_backup_count", + Help: "Number of backups by type", + }, + []string{"backup_type"}, + ), + + backupTimestamp: prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "walg_backup_timestamp", + Help: "Timestamp of backup", + }, + []string{"backup_name", "backup_type", "wal_file", "start_lsn", "finish_lsn", "permanent"}, + ), + + scrapeDuration: prometheus.NewGauge( + prometheus.GaugeOpts{ + Name: "walg_scrape_duration_seconds", + Help: "Duration of the last scrape", + }, + ), + + scrapeErrors: prometheus.NewCounter( + prometheus.CounterOpts{ + Name: "walg_scrape_errors_total", + Help: "Total number of scrape errors", + }, + ), + + storageAlive: prometheus.NewGauge( + prometheus.GaugeOpts{ + Name: "walg_storage_alive", + Help: "Storage connectivity status (1 = alive, 0 = dead)", + }, + ), + + storageLatency: prometheus.NewGauge( + prometheus.GaugeOpts{ + Name: "walg_storage_latency_seconds", + Help: "Storage operation latency in seconds", + }, + ), + }, nil +} + +// Describe implements the Prometheus Collector interface +func (e *WalgExporter) Describe(ch chan<- *prometheus.Desc) { + e.backupLag.Describe(ch) + e.walLag.Describe(ch) + e.lsnLag.Describe(ch) + e.pitrWindow.Describe(ch) + e.errors.Describe(ch) + e.walIntegrity.Describe(ch) + e.backupCount.Describe(ch) + e.backupTimestamp.Describe(ch) + e.scrapeDuration.Describe(ch) + e.scrapeErrors.Describe(ch) + e.storageAlive.Describe(ch) + e.storageLatency.Describe(ch) +} + +// Collect implements the Prometheus Collector interface +func (e *WalgExporter) Collect(ch chan<- prometheus.Metric) { + e.backupLag.Collect(ch) + e.walLag.Collect(ch) + e.lsnLag.Collect(ch) + e.pitrWindow.Collect(ch) + e.errors.Collect(ch) + e.walIntegrity.Collect(ch) + e.backupCount.Collect(ch) + e.backupTimestamp.Collect(ch) + e.scrapeDuration.Collect(ch) + e.scrapeErrors.Collect(ch) + e.storageAlive.Collect(ch) + e.storageLatency.Collect(ch) +} + +// Start begins the metrics collection loop +func (e *WalgExporter) Start(ctx context.Context) { + ticker := time.NewTicker(e.scrapeInterval) + defer ticker.Stop() + + // Initial scrape + e.scrapeMetrics() + + for { + select { + case <-ctx.Done(): + log.Println("Exporter context cancelled, stopping metrics collection") + return + case <-ticker.C: + e.scrapeMetrics() + } + } +} + +// scrapeMetrics collects all metrics from WAL-G +func (e *WalgExporter) scrapeMetrics() { + start := time.Now() + defer func() { + e.scrapeDuration.Set(time.Since(start).Seconds()) + e.lastScrape = time.Now() + }() + + log.Printf("Scraping WAL-G metrics...") + + // Get backup information + backups, err := e.getBackupInfo() + if err != nil { + log.Printf("Error getting backup info: %v", err) + e.scrapeErrors.Inc() + e.errors.WithLabelValues("backup-list", "command_failed").Inc() + return + } + + // Get WAL information + timelineInfos, err := e.getWalInfo() + if err != nil { + log.Printf("Error getting WAL info: %v", err) + e.scrapeErrors.Inc() + e.errors.WithLabelValues("wal-show", "command_failed").Inc() + return + } + + // Check storage aliveness + e.checkStorageAliveness() + + // Update backup metrics + e.updateBackupMetrics(backups) + + // Update WAL metrics + e.updateWalMetrics(timelineInfos) + + // Calculate PITR window + e.updatePitrWindow(backups, timelineInfos) + + log.Printf("Metrics scrape completed in %v", time.Since(start)) +} + +// getBackupInfo executes wal-g backup-list --detail --json +func (e *WalgExporter) getBackupInfo() ([]BackupInfo, error) { + cmd := exec.Command(e.walgPath, "backup-list", "--detail", "--json") + output, err := cmd.Output() + if err != nil { + return nil, fmt.Errorf("failed to execute backup-list: %w", err) + } + + var backups []BackupInfo + if err := json.Unmarshal(output, &backups); err != nil { + return nil, fmt.Errorf("failed to parse backup-list output: %w", err) + } + + return backups, nil +} + +// getWalInfo executes wal-g wal-show --detailed-json +func (e *WalgExporter) getWalInfo() ([]TimelineInfo, error) { + cmd := exec.Command(e.walgPath, "wal-show", "--detailed-json") + output, err := cmd.Output() + if err != nil { + return nil, fmt.Errorf("failed to execute wal-show: %w", err) + } + + var timelineInfos []TimelineInfo + if err := json.Unmarshal(output, &timelineInfos); err != nil { + return nil, fmt.Errorf("failed to parse wal-show output: %w", err) + } + + return timelineInfos, nil +} + +// updateBackupMetrics updates backup-related metrics with detailed labels +func (e *WalgExporter) updateBackupMetrics(backups []BackupInfo) { + now := time.Now() + + // Reset metrics + e.backupCount.Reset() + e.backupTimestamp.Reset() + e.backupLag.Reset() + + fullCount, deltaCount := 0, 0 + + // Create detailed metrics for each backup + for _, backup := range backups { + backupType := backup.GetBackupType() + if backup.IsFullBackup() { + fullCount++ + } else { + deltaCount++ + } + + permanent := "false" + if backup.IsPermanent { + permanent = "true" + } + + // Labels for detailed backup information + labels := []string{ + backup.BackupName, + backupType, + backup.WalFileName, + formatLSN(backup.StartLSN), // Convert uint64 LSN to string format + formatLSN(backup.FinishLSN), // Convert uint64 LSN to string format + permanent, + } + + // Set timestamp for this specific backup + e.backupTimestamp.WithLabelValues(labels...).Set(float64(backup.Time.Unix())) + + // Set lag for this specific backup + e.backupLag.WithLabelValues(labels...).Set(now.Sub(backup.Time).Seconds()) + } + + // Set backup counts by type + e.backupCount.WithLabelValues("full").Set(float64(fullCount)) + e.backupCount.WithLabelValues("delta").Set(float64(deltaCount)) +} + +// updateWalMetrics updates WAL-related metrics +func (e *WalgExporter) updateWalMetrics(timelineInfos []TimelineInfo) { + // Reset metrics + e.walIntegrity.Reset() + + // Set WAL integrity status for each timeline + for _, timeline := range timelineInfos { + timelineStr := strconv.Itoa(int(timeline.ID)) + var status float64 + if timeline.Status == "OK" { + status = 1 + } else { + status = 0 + } + e.walIntegrity.WithLabelValues(timelineStr).Set(status) + } + + // TODO: Implement WAL lag and LSN lag calculations + // This requires more complex logic to determine the current WAL position + // and calculate the lag from the latest WAL segments +} + +// updatePitrWindow calculates and updates the PITR window size +func (e *WalgExporter) updatePitrWindow(backups []BackupInfo, timelineInfos []TimelineInfo) { + if len(backups) == 0 { + e.pitrWindow.Set(0) + return + } + + // Find the oldest backup + var oldestBackup time.Time + for _, backup := range backups { + if oldestBackup.IsZero() || backup.Time.Before(oldestBackup) { + oldestBackup = backup.Time + } + } + + // PITR window is from the oldest backup to now + // In a real implementation, this should be to the latest WAL segment + pitrWindow := time.Since(oldestBackup).Seconds() + e.pitrWindow.Set(pitrWindow) +} + +// checkStorageAliveness checks if the storage backend is accessible +func (e *WalgExporter) checkStorageAliveness() { + start := time.Now() + + // Set a reasonable timeout for storage check + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + // Try a simple WAL-G command to test storage connectivity + cmd := exec.CommandContext(ctx, e.walgPath, "st", "ls") + + err := cmd.Run() + latency := time.Since(start).Seconds() + + // Set latency regardless of success/failure + e.storageLatency.Set(latency) + + if err != nil { + log.Printf("Storage aliveness check failed: %v", err) + e.storageAlive.Set(0) + e.errors.WithLabelValues("storage-check", "connectivity_failed").Inc() + } else { + e.storageAlive.Set(1) + } +} diff --git a/exporter/go.mod b/exporter/go.mod new file mode 100644 index 000000000..206390bd9 --- /dev/null +++ b/exporter/go.mod @@ -0,0 +1,18 @@ +module github.com/wal-g/wal-g/exporter + +go 1.17 + +require github.com/prometheus/client_golang v1.17.0 + +require ( + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect + github.com/prometheus/common v0.44.0 // indirect + github.com/prometheus/procfs v0.11.1 // indirect + golang.org/x/sys v0.11.0 // indirect + google.golang.org/protobuf v1.31.0 // indirect +) diff --git a/exporter/go.sum b/exporter/go.sum new file mode 100644 index 000000000..5a9f88caa --- /dev/null +++ b/exporter/go.sum @@ -0,0 +1,545 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/alecthomas/kingpin/v2 v2.3.1/go.mod h1:oYL5vtsvEHZGHxU7DMp32Dvx+qL+ptGn6lWaot2vCNE= +github.com/alecthomas/kingpin/v2 v2.3.2/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM= +github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= +github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= +github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= +github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/xhit/go-str2duration v1.2.0/go.mod h1:3cPSlfZlUHVlneIVfePFWcJZsuwf+P1v2SRTV4cUmp4= +github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/exporter/main.go b/exporter/main.go new file mode 100644 index 000000000..c48f5948d --- /dev/null +++ b/exporter/main.go @@ -0,0 +1,95 @@ +package main + +import ( + "context" + "flag" + "fmt" + "log" + "net/http" + "os" + "os/signal" + "syscall" + "time" + + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promhttp" +) + +var ( + listenAddr = flag.String("web.listen-address", ":9351", "Address to listen on for web interface and telemetry.") + metricsPath = flag.String("web.telemetry-path", "/metrics", "Path under which to expose metrics.") + walgPath = flag.String("walg.path", "wal-g", "Path to the wal-g binary.") + scrapeInterval = flag.Duration("scrape.interval", 60*time.Second, "Interval between scrapes.") +) + +func main() { + flag.Parse() + + log.Printf("Starting WAL-G Prometheus exporter") + log.Printf("Listen address: %s", *listenAddr) + log.Printf("Metrics path: %s", *metricsPath) + log.Printf("WAL-G path: %s", *walgPath) + log.Printf("Scrape interval: %v", *scrapeInterval) + + // Create context for graceful shutdown + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + // Create and register the exporter + exporter, err := NewWalgExporter(*walgPath, *scrapeInterval) + if err != nil { + log.Fatalf("Failed to create exporter: %v", err) + } + + prometheus.MustRegister(exporter) + + // Start the exporter in a goroutine + go exporter.Start(ctx) + + // Set up HTTP server + mux := http.NewServeMux() + mux.Handle(*metricsPath, promhttp.Handler()) + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "text/html") + fmt.Fprintf(w, ` +
bIjvr!4=J$ zOvAB*F|&3b_x_{ZH2-E!IEI%t`0N{>+HtnV9G%r|t+n3^=Coi}hD0tku_)zo7gY8} zE-|scaO`c)-{U%RX*k9Js5vKWPB*>XH}ih(UCOf-&i8THZI3B#jt&g( z+(Fxq=pEV}Vgk*A!QcKwxBV#XUqt&++K*7iEU4;@3^K7V@$M Rx%VPRJ;&MQ6}@j~+}OJ(Sn*;c!^GNyA8k4Cuh!Z~MmW~o*LSJt*H?2*&(xr3 z_t7}*Dss)~Zp+Mk#xlFgLgr|N3BFpzwfgvsF*Apmh9Z+~H97T{I`s#wmS}L%&WtW= zZFnR!H)EUgt};jR_T)5Add^y#lN83{%r*D~7BQ6v&yEy$^3N=J zDE~L5O=V}w9$J!VPUi<47|Kp9e$ZquYsxdh)+(#_hXE5VY7d5Y*5vM8M`Y%7)ioQ| zl^Cl95245p>!fb*77POKlASM~NWdnzmbh^JD=_(Sk_tn$4~BpX!zN%T?H`8Kd6$Qe z6UDkClCfc(AC>|iEKj cYFJ<4)C~XU=s_%JoN6uCIt+pAWwQV7p<8 zIaO0p7Sp-**0LBh?->Zqml$(;2j>P8jx7y^V}96!moGZrP*>BtY;d5dB;{EIIf@2N z%W@CD1qRxDv}L65TM#Z1eyz`ki*g5tAN2ZZ-5f3|Ha_^Nlm4EL_m}d;X4svPOWpo^ z*DgN1{?&()`8i0v!C>zAX9B%H3=R&*I-q@fFxaX-9;9y-#_B2HTxzV=_F$m3;LP&X z4JOzW4F+2L{f*c>9%#9ZK9w7@Yx_T1YhU2l#*xJHW?1um&nEcF UGllQ{4A2KmYrp-_oEN=e3zvZjKhCOSU5`)#!rKhN9+M(WjNcoEJ^5)$FwA zo+HM&4!hTTQtqGg+$rzxM=HFdpsD)3k$x8oey+_>2Y&BdJk#7!sdAr1HdXHPTyu`s zn^NAm{TI%X+N(`|Pkl>zu6BI&p7R_yFZle%cX)pDxz7zU>!+zTGh8Gd_U>7qO}-Yq zl9lDqFbLn&z&AC}aEVL9D(Q1`L-P#_YHS(?q2ULyl|f@QGaeffghq^ohXkRaY y6+-cxZERp*901&{T}> z+Du=<$Ws#BwvGz64DU?nAL-pg>Ie4r74^gYvuGoUA8Nx3b0;M9u?O$ev}Ak+C?_~7 zCYU>y0)t=^jF*U}^reQr1l_*0)0YtKh_0p7U5Y*{{bcxf5dHeJ3G~R%C^c!V9q8Rg z?0jQ(+Ugq06!T2|tL(RbftJ@h=ua>W`UhG*oYL2?yL~<4>#Mr#z!rW`@L<>O5R9F` zS2K9UI>EQKA3fa0ecp`gU=MdXd-%yp!B5b|&l2#%#LdhQIB7KD2h(Wx1Tfct2k~O$D2)}p2AECP130t!RO)K!T?j0I_aDVP|>z>BXdk#Nu3wV3v?c(ua%15!A4lYW1 z1?%BX6ZbzQ3+XO@L{j*}gXfU#KP2F3z}7o@CZ|REOS0{+KaV!sgH~%HXTd1E)ZibN z;cu(}&aJuo)-3_fEx=h#UmAh4B4kcW7g?F$Y>{ ~5iN3IECI$0xsI zt-XO`c1nLXyZuR(*El^gq<<3qk)OZJWRCM_@?QHCOglea@Bxu^N1urvqHQ_%I-&2q z^f$e3woTuy(041iIRJgTTt4h{`EWM$U6$?PCeTy{ZrZ?28$2wZ)4@$LkN(HEt+l`5 z$N@JWO~KFST>Si`A9{P^@2OV^N6F*ww)rNOVIDbFY%+SLT_#^Xqvy(@W@g_lX}x{N z(-!o7Kh)cIZQ26S@C0_Fi++p0M@JU!eDyO{^VIs06S{19%4`{RX7WR;kb}Na=5(;H zZ{~L>r{8Tu%*;{X;3VZoQC@XP{<__|=2F*dW3A?<`cV@y( eBCLE;che9}N~oZ!s~!e&Qy^;KUKSi%qPn%)}0xjHXwon^+C)^-yOGb(UpO=M5&d zm-@z-%%=OT0ZsQ`WSSezlAWU8YrxX6#437ivWelNuQBH1=!b0EX9)e&THC&)q^Q;` z-r4zRS<%zzuH}Q5uZvE0#vLcK@dIx)F?^7s0>;7k>W+; KvJRQWCNkZkw9EHkqZyVsa$j$(USYtF2|?osDW z;n>sEvH9`FbsfYNHc)ntU7yCQp_cW&`r2*@$Cjm=UF|mr-e6CAx|!KAJscZuLake= z7h6NU_uBQIC=SOC0PEB6!1kZtyY3|TE4G3?@>z6Gw!7 J*VH`zU$VH3l?t;I)ewJaoo;9JSLf~l3cKX+8_b;ufg1(i~ zx9EHaW^^mK3bxF0`{n2)H)avc0EV=d0qwH&!In(-oNk|;@nuh&o@KU_SPjRzeZM>H z-x>D(Hs9}8?BBebgD-o3G5i>4=?H##=hhsvW@}@p`9wx|XLYdQ*zj6w?N5J5zv-95 zH)ETJ?BzPgoXTswvbk;G*LF(ZrM@fM@L}G4D&^fY-j!_FF_6Etc64kpMV*g2W8&(6 zrVomR{A~&M!`u%SWg+XH{+pUIo?Sx>?B pTS&ZMshljy! zDP#04gM&?*>#BQe7*D4`XMB#+S@>O>vG-fJ7vcSc&Gh0q4t^g3UoRHB_S3aL;{-1; zq+bE!#es0_H(N~ehQP%=OW*37`I`dMJS1RZ|LlYRByIWix8OfznJ17F!5<5wUxgdL zJ=*QHNz6z#`y(!ndb~DkoHnCp6K%f6GvoX7@Yi4a*90!y{x^N?w?Qw#(EF z`|iTA$p^=)E*xI_S@w7&VZYS>!L-k0=&pp%<@iZ{94zo)aPj^twGZA^zrXFhzP5!Q z4+UQPhiv>O;(KcU2>9Ov{xwE?=4{`?PP-26KbO+(kKA^JUq8Jq;+-D7U+0 )wpGuamzj=@NK5369llkjZ z5dIE0@+F<5@tN$Q;^l?1GeOf@Zu`^bg8sD1Cv=13$NguUS$ouj*_F?a3ubiK%N~z- z^6AqF|Kj6K@u _H)`%+(a=cue|&+#iqRL{@_si zfBRNK{!`;Sad?O&_19mI9y|K6H>a>S8b80EanzwvCyx48JFK;fIc9QrwwAer$McAz zj(^%`H{H2|zyGDHhnYJ#?(y3e*B<;Xp_5X_M;7oW#h1PKu`iySr&uX*qW A`pZ+QFbLski`IFdXfAtAp z7l`LRUfS@ gdv+pV>aaWrzI%FmpCI#+)7zxc-^KYwU>xW`Y=KeRlUPyIh94{yc( z?~#YbR~&hG=22_yNsc`nxg*UfcP@I3?8%m=&XtG2ACWwG`u#$7{vGYf1? O&oV%B}UV!|*0uEi5=$ibd z0uJWK=kCSM@O*b32e~eDy_`mW-jElM8*Rt$uZZVIlwQ+ttR&6L?=9<9tVHulnxlB( zn8RzQiHqeE?+J3yevb_g_$}bj{Jag%;PCDO4iBEZY~oKG%7?rVJUeW767vamt~U9} z<(89=93?-QWm#_iu{)pS!uO~PpEqA{x{Mq_^2c`!*BsHM@jgbF`(@sBh?n!Vbg DZg)|+Eheoe(-b9y>+ zCTS+Tdv^BMk8OK?>zhxT^tqeP^pUfW)AB9FqiCaJEOVjEJy#9r{UJ2!S(QV6Anyh_ z4 `b_p*@(pI{zWP&qF*zc{_MPYVJI}eElNB!N`-XML zUgnilwu|^>@#W_9Qs_c{!h+HFKXB|7lQq}UHDzCU+`3~E?fjVB-dW!*XTC3|<@?m% z^|UF{z1iG5@iEQ$=Cssu|3^J`-ue+UbUd;DMLS=59lBo295!_QCBIEB^XQ9)@$8 o;+qdLB37OPljT z4afGX9_F#5Bg3(ON~z~ZTtDHf=N{@2+?C%hkLg?m{NfeUV5kdzVt(@?@EE8hudXj+ z9C8*TC#$G{yvB0oOFIH)d=%P7$SKhLTND}_ #y96N54>J*0e|#k z;n+9$&9ftB(e=&IK*O=MT>mZQBh2eZ>0bo6%E%Q^KD#roG}V?( 5pS)24SuYvn(*{*oM$}0)Lz>_ZovTN^}T-PP|q{u!(?^eb6ods z0|(PTWSXke!m+9K^}Q7)t*3-}xkv&1WBxwM-1xYVS(|H_@sR@N?Oj@QLa!6_sq5)* zQ8)DKq&=? lMb9B&>os)!9muJfO-QeSyVy^$pM{C3TZ<7CVn&T9Q+L}#U`)TU{?Kn6} z>pA>yeMvZ~hWGttyMg^+3hZ0Z0WVYMOB@k9*C5dHhW-0%J74GgFZS l*^( zLzoujU*))S`O>*}9(8o?Pv1`XGK$f7`a5fYbX!7y?->aXH4Jagy^*yr)VG$oj H+j?9L0C>&O+0T|(RZj%m&)kNGca6z74QCvawd#G1mH^)k%; z#PV3f!Ww~C9=gX`z!{xntqR9}&0M z_vP9S$F|w?|KRvLk_q3R@ax%+Lj#lT$6KsBy63l7HrHGd-tpG=$rZZ9?6B{R{Fr^O z{h^E<5$;FH?@4QIrRg2# bu3MFWA*| ztmejle6!~E{co0~N8W5NOYe>FESj;{uJi5-)%ma~0-iPZyjASf*=2k%>Njv-; 27_}{nDZ8cf{>?B{?d& zxedp1b2q*zJlw;3l|i%HuiHeMoky&-{|DN5{C>!uk52Hre2#$YcT{1sSoaVs z9+uM0WI1-9>PA*WdLS9u(PpjoSVHo@$`lI#P09e6Ys zeZKkTtV@#RQGSK$D; x^PQQtO |QeYI_Zb*4WGoVAs!PjMKX{(5ZuWS3sxD zl&ztx);M)g*HX?kl#QIp7~clJ2OHo=jsX3VpZa;8X 0u%5o}n}y)&<@@?TqLHY8nZe5JN(Zk<}R z58U0bDEv_1%v-CL1g*L4_>9V%9d@R|zOK@E -+ki&@=VNU$@}%>Z_){YU&F# zM4t>%M}Rsk-X-_r3FVS`@A=CwQ+X48Qu(#YLDM_>tu}w0@}AnV|IWN}(5p+=^e^e! ztKaM2Tj)pncaZ+|`1)sGyZt-(9{bnp_U|D5JNPd8*X!%wLAQSgFVMftl>Q}Md;Jr> zg}=9gc`bp#Z%q*Xf@dl+tBti9{AH?s)#ER3)90F~zbv>(ly&g=N@kvKU7{Zr7vD+n zm=u0Xy-wx7)N2nuk6!N=Kfd4f{a5+hrO%TteO9^jvHANv^zoM!ed1+>e-B?C{okwn zq{<8QN|K+{>(uh8*B(3`zW* }%{Lqsx~B%WP{X!{BgiB8UAxV`SA!4)sivYnn?rRG)HOM_7YZb~j~rQ+93@ z nfe4hL?v#X-PoW`G=nKd~4Cgb{S~Q=t&OkTsCNqP&z)D!QFHn58I2sXe^NN(z=Uh&Wv=M@n<#io|MSclbFK8IXNZNX zO||8 RN}RYu!Ebjj;}t5ug1H $$&u-l!`^ z&6vVb$MFjFgy>h=pAVh!EIhZBLvfVSA>juD{4RrUmy@rp`a(nYZXXHXb}=@YlV+Y6 zZKWL^%~^GbZ%g4@Vkf(nxjZ) xjZ`@p4Gis qjW z$Pu4JoDm*>lJZaLUMG3mT3f5~o5h2L;RVAv#7BzvZFYH&I>dYS`VJ3wjF+zT%Y30> zJqxi&_PuPj*Z6|RATUn^-W=XN2tLz?gnKpCSxUda^^oOhgU1Dfnd88P%I%(XP54Qb ztwU~uL&8rkamxmC^*i0h$H#fkE=w$2WiuI%B$d4;yud3vLT$KpPaYgDQu$TzdQ$o9 zaFNzB3D=job*tPIWEps$^x)N+7S%Ng8J)~JJCzxw@#heyJ@qLVO4OC%)Mdlijeeo7 z1zuh3D%pyx*?et?4ST=m79wZx+;(s;-83g`j!vqZ)2p@)!ao_{ug}FvM%`R~J2;V^ zSyE|EYn|uBp?kOAR%wn-uDi{CFB5$;fcGja2k!&EsNc?e1E{0I%IMik-T0%I>fOn- zdwYX9I<4+@=Y8}|Ht%n6-_Pd#4etBdr}W!-KbyKXSOa>hs7taZd1SAYSR3P@_DjRD zlkKMYD?XWwKgX_UtaK8Yp6`49406JZpGE!?Co$_BW+pq?@*8hh|7uO(VC~(BCTb zOyN> Oo`cA0&6(2UwPyx3H=dbx93Ak4=1~++Q69SHOB%sL zXYi{#AK^XQW`L^=#yb57YaA2h!}c0Gy|*!B#&>ER)uLzDKZj0R@$)YqKS7N5z^HJn zdr{i@&PC6yUjhBJ2JUH-*;4>L+Zo4qFrHs7+|yn`18bsaleN691&yXC@-f9puVya6 zS@S=XT-FHl2b!ai&P=S6ozyG6_WNFMTu|7%6kVuw<%$6mBg3x(XO#G9XF)jjNanNa zI>GsthH#PM*NVppwyQJDTKPS-#A(6J^&QNUbTW@28UI^yC31 +iPqntJ_B{Nz!;Xht9_PQpq2Z!5`nbWQ%`JhaY@EY$ZJG~b-im!lV(s9hx_8O( zHe$>PIt5z3OMYcLeP=I+SSNT8tpfBX54;MW1JLF9yr+1VVBOF9{)$jqPhgOlIr6nd z$AybJaIxK(>%!n*1h~sYpN^vc>2)J}CsR)!<@4EZ%3t<+uj~T1?1GWK2Z-Mk%TC~% zJ%gNR?}KXkg}>5V4X;%<+P{xh!)tBmy9(%`SiMJ&O~8=j(xD1?^MIie8dTdfV0|RC zX=C1}{aT*U7BR7yMg8UAFAurVe8~#-BFbZot-cl`Kbw%BPH++gCv6Kx^lk-~r}2+h zV?QQQ$2ODRltEiw-@4!KyY6lB2lBx~_k!6r9^RxMYG 83QUWZBqY0KR@V@X;;lff&UF9a!l;*-R8=9N|mY0Erd9;|v$AZNf7nS!q zGU)K)3h-vnsespI_HWi0@_PxtQ+YJs$D_9<@o4gT1y5gQfh+%f%3r3;7ufvIT!{F8 zpjS6G>r_(RiTRn)=tF;fLHwV6_}TGT<4AaZ6>DECa~)%aHD 9hHsXoEjVV#)tb4yE*}!Jnh4Yhu^9F;3J4_ ze 9a68bUf(}nEQgl;#n zMtDYcP;@oOQRA5@$h VsnycIFb=|V%l9_qj^ivWK+x~Z1> zXI;ZQFJ+z`5?U{P+~~G*uSsjFp`9`_blf)L;Mzwn8cc_8!aMtu=LA2wa!x*nw=VV* z9`3L)-|vT?vaoS}`BMD89UKmUR_*X~4f&Qf&jPdhw~l=fl4$2^>r!7^-M+TuZ+Y~p zXI|#*LBrzqEP~yNVz=7xt2{a0sQKuhk80k;JpR2qk%zIsfF5rf-@hD3ps{p)8G4{b zb5yHLQ5m$~XIN*6Eb85m@?XHQ%1wk`6B+N7!xtOigEsjQlxe4azx*<$TC3cM71Wz% znd>9q#t&PCU;{@gvy?K#XO1nUZ3jOSdmWv7Zu{axKP*qXy2rCUj8%%#3ZGjyi9S5H zU{ )Z#0 zV}A$jJbK;tA<^q233?SnuQGUKx{2BH1^pyn*t-Wip~H!NX6FHX%2g)gaJrSw7 >5dZ8pmi1a{`-nkiK-IXEGLNtnW(c%SmkemB7Y?!nh7(qYJ*v1;+2Qh78~1i2Tu| z+Ivd82j6OJ{4dPG%a`@;tzbTEI6hHBT|sZu#Vu=*TU3v;cSNw|QMa#gU37`7i-6zL zMcaU74zSD#3?0`AEFHj7iB4FP0*h@QU08Ozuz2^%z)=CPgzNHpPXL4Rab%P8vP b#U+ZumAm^%hTw- z8_%PUM%(k@iFmT|<#KZ!+C|Z~&(lx&pSLo|6Yguk{T6)B2DgtT$f$fz;#)Soqx-C# z7H~T-C&!~-aN&vi joYOe{#AdHbURt(#@7Z3c%;bY-) zxyDt}Q Q8`IUFX5eifP+ptAWOTE}dS0z7l?g?+EpU@%M?j7DX7Fh8Zh3cz4HM zZeHUZF5b8Jc)-(dPX15Af1uu7@-c&){bQ^CY!kVAjCoz%0Z;eqWAZ%7E@h+Vh-rBK z=6Q8K__X&hp -?>X&>Egt!?!&d;{!jgY z?8&+O-d^U~6Zl&8q*V3 0|`BQuS<7Nz7D1M=f>F= zC-w|uE>FG!@L(G-`uQ`{CtG@63XcZhQRP5y1|OoU^1(D-Qx3~@$Uum*pHJVw2lC_~ zmpb;O$iN%$u>IVXf!q`sP`(NI*F6L957W>+TiIJvyg}@xCzr88JG>*GNAfvFdJj6- zegr(J7_8z-n&ZoX7px)ZH0ra4nAl6)lbzBSc$$m5UFVUPlPUhWY(M~5lrtkcrM$ Ynuapz{)w zIX92^cOJZ+XEK`dDAR!NrDuLRd+$6#dmY-lNVXAKZ?7@Cg{Ka9#qT%V0o~)Y0&nd# z;oZ_B8uMwq*9dHiv93fvY(+PCcF}8RU)}I03n(kNqM_h=$*^E!uj{6o?DDt_RU<#L zVe(}H&>;~U^o`S`I}6Ni(c!>;SB}u1_;I^8{Lj 5k zj~8_Ag6}08*tW;LxbTn2Z%_=f8{biJ;r6=WaoX(tePzX^&DrN%Ie|9oTp97`Gu582 z85$q2w%r5_w-8%EXKF9Pj$0f(DOvACFKFK6XT<$#Ww+^z{OuFL#XBdUx8%>s=e1*o zHGyV3u7mEgZ7}79gHqlRugVvfu9J?}KDsr;n2Pbq2|CT3MT{xkjWJo+jZR=tJX!OX zm9#A%P;)y`{0ptYXh+9KZerX{8*SK@t9tt$w#QP~mv(fz+UsN-r5M5r# x3Pf%xI|qHrBq(d^R{?d>8Q40Z$HdkAg>gP4XS7At!<1 zHefi3+;)vOoY~(Dz1lt2#70^A9ga=syoB5k?>()JVLW?uO8uPPksN*K4DXrn(}mBD zF65lk@+f2PSAe7SH+?e&mvSw-81H#7YA;+p&jp8Vz$h8tw+Mgd28UL&!1Ff24IPyK z`3kmrlkf=+g}+yR+xPHB#o=hnk00CSzXQ(v zs*kJw;k+@* sB+0{NxPVuifg}%tu|HR`)x}&5_OQ9vhDB zz&4G>ZjQF?W|kd0c$K|1r>8l15H7O8yUrWTz#i>Cr}a)J;q`9lDEf5?Kg9B!y*5KF ze+Qn7)}R!_$N0^P!*qZ@dmRcqro7oG*KN>S^C*&c#UQ}-^-;=d9HDuZOz8TfpW#z+ zPvbZ5el78s!VK1G)#cl<2*q_|J2j786$->-E8!&D?u_RZcft2_WDVRb!@jp6C)o42 z{#yJP`oM*~4L{j~U$$Iw-euRZ=cQ6?`V?D_W!g6VBr+j9c}HQI(>Ki(K7v2GlD P0Doy- zw}Wvrx$yRU*fRD)7A`dYR{S?|iMJQK<1ZR_zZT2h|LdaW@$46@^0urDqA$yxJv0B# z>(3x)!TkHreEq4n#{>QJ=OMGO^pj=B< o(+?JL=F0Vd~VFN_$mrW}oVbp9~*=+JxpV z$G;BKF7GakfG_EB#V7-#h!0Y4>0oQUbh`SfqXXZ%9AB z|C)Gt(!KCS%_q4R$J@1Lp?F}5hqG(L3!eaA7I`u97p2b)e;z*^>SsJ4eo)L__NqK6 z84brI-wn(|*meV3p*aV|Ww0~-&%yZO_`^L|u&>Ic_qVTocl#T^w-p0J8Dn_xq8Q EHJ9CziWt)GH!Jc(W$wK#Kqmvj^|k6t@G z&B|)+LO*ty0k(eZLI?1r#vxtwM`gN)jcm!V9NpQs$9i)k^U1Q^-Sl+;YdeMK3~N9< zF3?sCPnHQr^c%7!9iettp6%P!g=~#NU&yZYpl9czXXm14*?>2exp?6E%)A62sNQV$ zGro$k_NR%Z-B@4O`x<)n-1tCti~NQL;se?X_?%cPZF#ZQbLM@J=j3^x 2f6fdk` z>{kjeloB^pEJrZ`#XB9{;LQbT{@3$G+ 1+}?1Ue;U0$|YzLxg QiKNq>|f!?nnBM%@0ufikKtZ;0Gb X*p2W;7#w%2;F0NT9@ zeLhVY;pH*zJ#eOP*JIY6mmWi&W?b~?rspm4{di_SN4{Q(1@G94U6}G#-xJ;JL4GoL zQOhss|LfrQA6*%4p$++T(Ockw&%gt>!UGlRqa(vz@IyDUeG)$DfhPp-;kWvBy$Ua0 z1>JrPOg90;8^G`eZN35jKDKz!`o~ga`f=+6O&^Dje}PONssBRnsqv{Yt-Zqs+cIq= z)4-E7j|6|V0oTpgEj_EI?OHchw|Q{D_FXk*aCn9_Pqd|Z-WB*r$voq%Pd-Sjs~em% zep#p(4sq#)@}Gqx-CI7uTz3+EDc`tYad3Sn{S;5mM(2*C?njwJ>MVmVu65>+@;BSD zciVqks#qj^-BISuAx$SAL-y3Wmo$e&UxaVX-#BwfnvV{(eAw-0T(3!=4N14*@bucF z_~~`PvWhvR4&V?xmBb$VHYLL%8Ix|7ogU@F;@$In$Vz-jdu=puXdLG8k$lOrx)BrF z;E^&1S4UZcw~% zK%wocD&tZ$4-^=CI5B=d~MGw0-Ivm{l%=ZtTcO0ahem0UQ>?`wF4jO z`NNKnn^ixnmt31zuzq;2Jr;$hI^cc9$Nh7L>$cEu*(K;K-@F5Umk#c_#2KFrmtQ{w zJ{*?NjdS3|QP6*i6O&%!jvcQ1E^QaWZ=2AUd9?iqap_EOk!$B1WZ3-mHMc#rrFJav zhd*|db +sH{f+ Vxc1Y%p8mXw9-F#2YrV$Y znef0sE9>xFYd~wJHTrO-HPF_(nefDi#Y5moWljzo)skst+0SzJIzG{td43WceazLT zqj)zyW||DmrbA0)#~$-R%Pw%Ow(IbV#DAmVvmWZ#-Wb{N+x_TK`8yAwOJ5(v^Tijf zAB`?OSzzKaDZE~74Qv_b1iM{lZ)5baC1O>yg0?h1TLPG(*U@nM@L#rUaV z^5isL^X6Q<`Ia#JtsEuhAs4DI{xW&wwkP=68B03;h4VX=hp$cH;ahw>?2RW<^U31l zOZ1ZV!7e}#Ddt~;?NS`u&KHqR$dzvzZ25rt3BSbkusio)&jCY|HgFk4*Hy5_W(Tnd z=0X+*Le4j;^lb#jU)L>h$7m()7){@sTE-ZyoH5!46P&w`@mmRFG|7C*SSumRjI|zO zt};o!8Ebu=d!BqtZ~uCaBiDO;xbXZdTVLDb(?mXi)^joDT;t9AFN4;KZD4z2%4yJk z49t1&DuKq9&h)j|nA7(QX37MiSr9yGu1Yo~IuIV_J=N*O8NNWB$|05SUC1-#Ahe+` z0*rS*#TZ+;nYn{aOyB3Re>0CG{07J~&5w{Do5A=u*Qrxu<7(`>*7k^h{))QwTlI^U zf;oQ_d#W%el*|4R4nCbc1^;iGmym1WY?F&K(eei_-q6E#KO^pb+XmRZv8wH`f{&zY zWX^x>@n2R-K4YB!MuKDN6z^#)>*aHQ^*{O^ZX=&v@qk)nc@|~1(ig_^J$cBKVgaSx zkLTpUgHe11jlm+s8y(wzZVskhAMdUhL+%bXtP9!PIy7T_%_z>UKh=o*m%Dip5xZW0 zPM#AZX$yM(L}HH3%dxu2hsX2r-{>OQlSF=;a6qhPS1ogtp&)r)*ntqT7y4N557Q#y zBKw *{s@7m<=n5~ItUM`?i$_=!b7qj zMlrR|Uf#TyJ%6?%Hx55I;}r3$?Dk%K2I;ds%=JqS6dRZA&RJx3_{-;<3GK)kLmPsX zc2;majSj$8%uFvN7mD=;tl=R?FW5w$^- |E#v*_xpJz4$dB^Vf?Ut4tDZ11Fk!snyxVAR5^>!F z@Jk)@l{?@U<)hV+BcB0`UG%FjWWKiv8fovJV!mzoOpv%MHbUdsAn)5gK6sO^D1jy( zjaW+-Ya~}(Yek&g^?mDVpl>?(T>_2u{jwVH6m<1~^i})6_gyF4{4W=N!7Ds{6B+K7 z|4e*IZOiA{1kdO3ex5rvVSRMdRCv9b+${^ZY(ERQJU+0 3*8cvQ*P3Gd` z-N iAG@AlrlnerJ_mt?sMn#i`y;{E5y+sXpg7V7;Nv8LPMryJp?kJaDSJAl4UOT(_F zneUar-|`*1@YABffzUO*W&7I>Z)tA27FiI^YBV nvDo;={m10MLbRdenhPF2p&pBu<)_}F>)lX U)g_J_>_(J9ia3rtzNY=z#Y$f2X;bJana} z3zne^ln=NJUC<6qHEvdXy^1!Z7phY5UIN|~N2qf3LLqvgDnwcI0{s#{x_(FhdO`Up z7t#w6WLJL4Jz8^y@AGl?_VWA*t=aO=m*DF!Trpt@c5v_=2f^ub);HZp4BW9*j*aG< z@=4cz-=|t_xOvfC;MTZ*UVHc1 Y6@zoHyP< $=1PJf-TF+XljAKrXd3->*{*j;P>tD zQw?*J(vK=5+c*t=>So-p*p}v(e}q2MTzflkh*z{fo_sc~(czoAtI1 U3#v`yc0^WQbT zuVs9~SSA*P&JJxuEgyt_9mVJf_)fk &h{)A&bQ&5JT$FCOQXG6$mR&>`7-PAWZSw}`}KM9RU~r _PV71UQV#9~g akeZs3{f`a0Y3b(Fs_8Jd&t)wJKGx#oc6PdtiV?1J9P&;Oi9b8zC&+{w?6 zg0D7cDq4433ok&+F`_GHdp?Wj^4EoD#fjrIEpz75zT~4T@q&fg+fwrC#n0>c-e!OC za|_&REeiYh6=@Gjt`{ng4F6_f6gnEl=E(QLe}0jjE7-%%EEvk3iQ%2GUlB6|&aZIh z{u)#F=j>g#Waq!@K6oqg?vKf0|2g(A)P4GPE$2$@ulTKxkQ=>tXP55N$E&>Z8=ZQh zx<5I*aHLcIl*#@;a|wI&z0CECz@jmY#+XZ?t<8tXP(C!yF@c`#=)(v!{to5rwtnKY z^;6Y}e0-4e$A4+oKC60e!EV3{ZVc6)Bg@MUt&gHJqGb+WNN+g0(}|1zJ@4i5{w}=_ zO@e}fdZOqE)uUL9ZAalX@x^Knj(>6BXb~K|cZxa&acp+$(fhe|l@p@yfoOpo?G~?n z)qDTUwat0pV4dCv#}VFrNbime@21~(>_Jv?dV_c1r_TI>^Uf(V_^ReA-g$s`R&h_Z zZZ_xB9E}``J6ChI@sxX=UH>x5F6Q3nz5C_P{YBjW3ioWBG2RRy6XMBI<)^@(rSN?o z_HP;Xwvc*nr0g#_ZsVBBVYgA|)KyPiwcNAoB6g&@g0kJzM;v55JRGl2-zd(bKIQFe z&NXb%Ju6Mob$Wkgxac3i!(;ruS=YtXC3@hCS@>6~Uoeux_k{M}iz?25{`Kl8aO-%0 zI=;p4VqK$O?KR9TRJ?!zrd_Tg|r-eN8Y^Bbgy{sRcY@aP+CI#SWA8R@b z7~^6quP=ai%kWk6&`EmM9xSl^a`~;|fjn?qgAZN>9wP9RbXePTay{XZ%Uqq3hb%`P zGIq|E>_8cHdO7#9m6Ded)>&DFd)JlHP6=zBZJD9|vdhD(l~=6z7xl;2l(sY1AzAbL z4iUzQ#(cufzjFMEd+`-D*WJjm58I`f>NezRB<<|KJh=V & 2dT=&)K;oaiX6U=iff7W~U3Ngez%yon0Ap_l*Zk?66ntd&HeH%P^G1~iy&o(h{ zH<#G#PwVDB>AkPB_KB&mvgcapca8rl@yFk(Z>*h;``gNKgHF4Kv)4$4Nwe2a2K$P~ z$?wdCPv5C7TW=3@a$hq&-We9&{UujlD;_u6&aX=3i{!cd(%uih6o6mFiaUaZHos{6 zuYSt!(AqP`i~l8l@oaG!{1PnOXY)%baSHL2>aT@g#8c$VB=O5 D5IO}gi zF8@@*Kkv3qKOcRWJ^pPS1RweLKk@X>RNM9^)}L$|YIa3r-_V0?_n6(%K|x|08zuMd z8q`kBL1B;V^-lMMce7SCS ;h#eETsb^T zp3><8Y?ZxUm2wMw<=Sae_K?{55S?}HU;p!=-{5mn-wN7I(^^n`7C-z?2!8oelvzp{ z?2>Pts+&8)T<&+z5L=~;?OVBRYD}qpuLSFccUU8@7@ugn4SDeA91H?(#$LO+@uBcD z7ZUGlUO_BBz t5QKzUyw_IyE=pO7vzE{I6Vuf#^)l>)Uw<)HTBj$6g>0;SKT- zenuX`W7Z&BKPu-yIYJ(v{fz5RGmrI7IS5g{PnpA5J@ew#>qcMvz&hnUe%IBls`~-z z7&|5$dz|^N!5`#!n>>QWgV&!zx87X;#U$Oj#0<9AE)*aiHD*wJ>{Dh1n 2`xb$9oyXa%>a{>2`~ zcz;m;0{**@f1!DS_uyaHdB@@p9j<@TBmbfj8S&Gyzka3q7UB Eok2eEQ~s{siMQ z&!1@U?P+mz6Fi9>xBZD?d;!LCNqS}9yZ0w%oO*ZuM6Iu!zW z_a}7i`4b~H`uqu3XRqM92VNW@)t?w`=e{QV_oW{(3IF{(^7bFJktA>UMM?4&w363$ z;TxULf4}n$ ~ tnVygeOw`aVn}CX_t`XaeIaAf4a^z+ zjJ1Q_oSfEyYF@657=Jrs{v;i++|dDT)01O`slJ)!bIKWyE+_t@xsqDi(Rvs8yDQu{ zkod!~ryA3QTK*dOZZKw-(^qFc>WB?)k<72cbn`EO7pJMiNiaI8ZSot*ud9SZixe zOlFTI#?E!Xs`WMgcw-l_jxO-!#T`@E*J!P!_A%~atf+FSYiufsJC5dgw>xLwWinSk zO5E`v<5%VW``2F7v7SfkW~N)2O}D2x@d4p#3hQNbt}xm58pSU7xrew#ggFD{#(eQ) z-@}z!lZc-gmA+N%nmE6m+j*%o=c$~3#ZdK4FXeLPhP|=D`SE4*n7fX+=Lartv(Bl` z$J_q#!J&TmZIjDywJyJf(*I}qtssTpp2FAL2)`x#++=(t#s%(uAKzW+^4&RQ+;M2? z{r@TcyYdgre@D9C8~ bCn;Zz?VR=a$tc*f~6%l`i2eFd5`xg@cs{VOK6 zH_z;f%r~* mAW+o!E`8TbcJp_l`y{--ccuJvwdu0Oj~&KYGw(w=W*B{v`E}wwMF9 zvWaI7Y#nWlIXv3B$c}4j?Z<22O);61pHUe{pDNz@1>YL0tIxB>$|Alwk~LOc k~ zt+&6*jc=-rdg7b*S}E!t>su@3t&`H)sEgARI{Y~6qlBvs*2T6C*V?f+(Br?ZF|ku+ zCiZ$U`W#wEgO`w-k=^oE7knd~4qZea(WxCfr8)ji^t`>U=T_{^4bD2QSBa|$FY2>k zZR6ZtMhu;t2K+5=9q{!wU*qp~)G)6GZazZJj_xVvS-!XKduy4NvBsp0w#%?prNmn8 zIo8bJ`gZ!PIa~EdbF9iu7krw#Eu?H{F?)1UM)`7Dr} EHizWCZ{3NXl63h&LA7_bs3Q=i12pClWUDW#2axy?E<= zsqtO-Tx*dp ?T+)<=h625*opic3!ALi@;>GXBk-T{7L=>w#bNeH zH@flG`QXgI21fd@EU26|=?!;}VEE0}ANZ12(N}K{IaQCyFVsA;<^{DbOYbQDF8X@& zgZBIl{AlxhJZCA?^66Lm9^P!{rh9vbJGnaeh^%k$=9Zm%S`)u}t+jTKF;DdOTzj+q z1$0b}^~o>nxD-7^``gezlYw>r<)QT%=$~$6O#4utK= N-~EisiwR#QnI98AV1g%yz>^Ul zPo|a;Uw(W2{|sM#;*XRs+rWRBY!G~@y=+S1%l_AoUl{*>{``UV`F8VF{rk1s{$$Yg zCr8Mi91`~@qlIQyWDdG=F1m7lLRb3z$U^bv9OP;)b{qTIpRQCsYa7qc>pSxPW^|qM zwN$Pg9qFI{j{A<3d(u}f%JmiESI+IU?T=Nz2)}kvSA6ap|H%*cf5LMS?6%4*b^XSr zali4#Ue9kl#T>d|vfBW@ckMS~U+fqF`d_*})o+x}wEf1LlKn>c3XkApHImD&_jIfx zr``4~-|D;WHl82G&(J!3`2rL1BjvYAUuw_6F8p`x=W~uPiH?u^lC*gtUvfBYXpg5c zRyg+hurV! 138ee-buEf{0`-865p3J)64cxz=jP@5e&iOU; z`~$9Ec^`hI=q+ z&tnsQx;T6N{lpSHSaklnby3r=vGZDEIv< j!{yybEV7aBAJZ{L(qJIa%xM$2)86N2Ijp?VphW>^HgXdH0gm*wdEsH$7a- zcFJ~_*A+}?lTU=dN`COUYwW>I8UBHChs*F;r3;Yj>rYHimdnA&rH#kwss5_B-?Jl| z7xGsxUFY*x2Z1-{d%vuG&t3huuOEN)B;!;6`hWt~poKWJ#;B6@0bVX`HEZBr=t%Zc zrDxT~|90Ex@!9`;eD)y65)+uaiI^jK;R_2mDok)LYZ+z+z!&*x&U5_806E459QJcv zV;?CG9PD8RjFgWlpH0_$fh&Nn%;PBLI?6X-<@d yX-5|bUA&0IlT_cC$Z~HlL |xDF1ceGXmkr7z%2>nfb*Tn8h>JUCe2 zbhw6?z?OiCe}`E4x9n{k``^IJxO1HR&nj@L{H99I)wJ_hJTu-i_`rU~xtca^dWU|# zto_H~wL|pN>)+H->R G*36tamM@FB@48L|(;AFD9)uBZ^a_8`jLarxg06 z_52k26o*+m1ReA}IASbCovbIB6k^@yFHMnR5Q;r}F^cbqCK)ECHOAgL?cb^I$gMxl zJe;~FQP&C9q)eu+uH&XiIa%5#PI<4|D<+q^w0^+ {-JyPD~3D)9t9p~GJW5cogC{t{*dh`vi4)pqfy7~z{*u^E*fVmcM+(z5Qd>6BT zwc{H&uY$%W(Z8Ln8EibW0yskCGCFwsQ9JyWMhqmSP0hEbwtEuWpglpZJX`+Iw2N7P z!#;~+SO;0mx8q*@&%T+%O{i6CXR$@CBhKEdb#qOTF|11nhnhQ}ksZUpPW?0Mn>L!> zAEeSo`3HHtlS}{nG*r&F|2p-()N75QqKv^-l9T1E(;m=rxAL=~<8ASKX)W{Zd!d$D zoaM{(LEF_fjWc>ii^ljfS#@)uaav0;xOHe8>S?Ep_5`ao>;df3xV;}5cS7UU;&=Ef z42@;8f{gd(^h0BN9)a~$Cw>Wy@jp(wG@c5LH9z9eINe9%44cO7(6$d6PjP7so?AQ4 zG$zrw1RC#QUEeu0M*noWZE9}CZnqyAUkQ!b@3@sYoujPDYb`wM)bH`KC)+_+wj-wZ zhv%c^IkbAuw9T+-J2+0q0WD{h3j_WBowGylP)o0UFQetxoaHmvV-h!x)2zL`Ws{j_ z`GISb <&Vlh%3y zI&3|2?`rv!&+tsTsv{WQnfQK$YomA`r7o?3)3{ms&f#_UIlL!X{W<+m9nbXBpa1Ra z&-1R0^ZMiDt0&g)N8xGhtEPP d2yw5qXqH)*irqS8&dx{H>G|Y!UD*`1Ji9)~4?6WDUhDCT*^Kg9_kjM;?e@?{2eo zzmubRUt8b9Va0L5V-(r({6}=^ZeqB*yV$#0V>H2%(CyAz&j@pSs`qv1J_;OUp~G$i z&H=zV2{ %gsj=T5>S9!w346U6Hd zk2rlu$duQoEO;ifWwI>;`W ^pc^KcISL91n@qPLd{2Td-ZSc}Q z?$r#=ZoXkr_@U}EZ>?GqwB~l;PbvpAwah(dD(vS~;Ix|WpRecp!75uGFyrm^$`bAE zrQW=aLz?sWj(Lu;dX}=@%Puo{qP?!u9+PJeYTnB?oizUXxg$4gO!(uhPckv$Zfgv1 zN#-Nuzlkp+l3)6FzP57DY&a-a*BI)!#H|Auw0}y3++4+E_sAYb@|%?t9~tP>C)`ly zsj8>TWAOPd{jUCTxz;itEgNh#74oga&k?(?&JC+=%7s`XWp-8b%_Tp6wYPsH!>KdZ z-dEH4{X2XMubk-fJLJT>cKFE2v!47DZ{4wTE&VQjm?(b8z(;p=3w< |YZF54ns<|K*>|T4ULLJ@QpQO@4KKbJV4Y16ygY>JuCV!11aJ zLm; 4)#Pxu))MajqJm*ioF}|mrOhRxM)3kH~4SIS6ed5+8qk*Iaa&I zTlebfbywDYt-a2XF|B{|VAI)yZ- 1ni6OWPrMvId?EGAC1y z{jk5g;r8)%w~vS2KBAvanJ-?-`rO4f?|S_mjs5e}NByYSV@~gdPn2^sEBk?C!*Bo2 zn`u}5^v$%%U2kgK64iK(F>NE?x)EmoH-Fx|iJXc&la-XuexYab zA=04nB)(%mCp*2hE11#Rb!N#!C$iI5k6>N(Wcs{qL4L3HmZ$*lP4roO(SdGUzG&j{ z>fe0rcmQ7U_*XmvJZszWmxU*rPrzAw@SdH^;SE2(w81aSxF>rqIw$dsZx7QC3$Ly% z`>v0F{5t7yp; =ojhiK{F#+ABk^n`&qmJQ)VOKJRhM5i z?=jxnv0}%JPhBy5-gCV79Ph=S@m}KDNS=+H|4ifN88a@wdfxNAcX&n1jK8^J#Jv5y zx1aao&v-BKY$VS{&TntrGGqSbW9PlWdp#?@J>zRvjGT9X_YUx0{2A{ho{i+$$oU)T z-yrwBSMBx^aK@kUUgDVp=U)0Z#>GpM-ChFD_%q&1Jagb|qko@v@v_~ $nX&cWtuyxDyKP3-y^qewT)BP5 z=#@KWOk3G9WA4gt&&bW)aAP6ID2_24XKVQOFnY(cJ8}6%7X9+OY ;CeCeB}qZ_jxBT+t^1twxztmU$Qn!3l za`{94^22=Phq>h+N-qDDzkIQ;d~qmt>qPJ~?8e>FgEr278`zCa;d^j7&Gz+Y0{E-U zb2nV(T;CdSV-F?0o*!aCmv8xWiENTbpQ$!|6aG$kl>EU@HSZl`j^vr~&0i-*uD0dR zyuto?&b}Cl_eZDjhkWFV=})SD)BCUReky;Q`~H%h)_LB4;a$DIXy@r&{kQ+L?|nZ{ zmlY82!WOlsyeB+)e;&T-Q~Dd^J;h&T3tkxF`J=AS~l<_;B>QkAy zxgUl9XBy67?4)ewYY#J?#$M+db2#tWwa4~Od+g1;pa1O5O&^H7X^eF^`jz{SMeq3G zn^mv>>zgG5xVOk!@25c i)zni;J-K{8&R>rg zqrTnkQ|kD=pZ=W9%&m0$QyK5ilfQR=7VrGZ``Die=jqSM6#3BDNPff`d? _=BJuLpm$!yh&9M;ZK4 z$v2*zK9}42hW(;q7pmj$`>DgQ=ZC)z&B-KR2U{-xGO;pzORaU)K3npmmXeE #eolevh!U6I&v8v03p4#cPH03KQ%B-!t2Yff(kT#NYZR&MI)zKu*2G zN9XUKaz~a`Y95F&9=?<6T|!Lo3+UZ;^llq*k1%zXK%?kL6DwifE6SK)%#pr_bKlOe zzY(kPcL{NFH}CFFz3 klUsGZ=TBLo@KeahQ_Sm9PyR>MPHt|&N85B}Ul_0N4vgWmls`-P zvy`XaYPWn%zvVso&q|3`s9%~#7GG70pW$VV$${6#&t?DW$zrmN-`?Wr7cbu9)$hcU z67dl6r^dY-eDy2-D7~4_;py7XGOl!ZD7l@lyX|zR@XPPp9_v;5ZST%^Xpeax#s>-e zl1n`BGW6J2IS0{W`_N O!H*Yixp$=UmaHQ2wsPTh z&eVCJiOn7eE(ellMwwDGyg5u9Di@ubLp)?4^BxXeT>pk~+2>TASeISC;S-7S%)6(S zmmU7M9oAaqI(hiN&z8R=c#l*cFNrO~4z>sDcixlv%)08o4Xj^gyl*HwZRh4PPB}Ha zIWM!}*kW>YHtsU t zlpkfss=^;;|Iqf{Mr?)Vq~iC^R2 d^0?TZhUA!|XTjz9Tpqd8d|l8r^ql?REoAweCBCJy{w< z+VvCr9M?|&%UyV-qwH%J)^hKijakhFzP_pr?;XKao>JcH+b8Lp`jyAKQRZlE{54!` ze?Ri|YO~g2h?&QA6n|Uglz$!Ff-eluy}sQW-#I=fF}laiHKUuCrZpV<9dffrvB*W2 zHCtT&rzc0eC;s~syrJ0aqVvg5iajWyY?Sz)WXF~t;t;0cgUv%OBPYP7Q)Y9N_+R&O zhyVO#1`bQsscQdiU|0OwuQP+S *be>_XV$Yyo@uVcp5sC0r+yEd z(1!>zr*(kE%rD+2pNjE~?E5HwNAbOK$wyP{AAJy$9%+LvVYLaJ^}HQ@UJ3lB;RDV3 zmRx1FH;3TR$q&0H|0nJJK@;-GzMeJ?HiW~ctBD=Wni(!)UDO?`*hhE;W7@_=d)GG( zFi&)3H}Gxb$eT}VK6U``k*{F)6Mjk4m X^!;r#;Mw|H0at03=c95 Ki1v_zN+fX z`(OK 9&8blS-{0DMCz~T!r~l#e3Fn->*Y&wS z&wAEcCh*Uvhm7lFPYmb(w}Q*?BIT! wJI~xK9B(@3-c+wY+I8_RTPC`rJ6yTr6tIqJ zPtDcW*t0bc^E-vP)Uw~9iMgdh!y23R#*b%j;sNNXWxKO(Jh&bQp3^8h9v g*KeWaws?xA z#f9jMG}gY|{J7|jw^;K&XxF^c7M}p78MN=e`>kE;PFoBQ%{}O?b*s#_MA|Kq56atU zyaGJYhiqNp NGO!_5H|L=(+=ci+*;dkYAU=Z_UxW zYvAUdVs{O+4}1s@Utzv_Hdb>+Z)?ti!#H53wbF6GER8XZM^32Dc;rX=glJ*{av}x! zl?g172Z_uhCO>Tg`Gvqo{pr5ueqj1>+LxR-*gzfHK6nS8wB6bOF79y0rn0Ljo6fv% zr~CxU$8%{D9Q9vEc@M|BQ)&)4p6Qjz0M`>~GmG{zQuxkTPf&g$V@(IoCWUscGYRdj z^v8s(o{~ kw zc{hz(vA*FtWN0b64*YbbRa)9DUIT1_VH0zY=SImdN*&mUoYq)$j|w*1luf*I7>i`n zZeX(8g!4nch`RhnnQF>x24;h-l}lcB9yj^Bfm;|kCO`c5&{HS)<~+mp4*2CWb?_p6 zb&_AGe!M*JDGqb&qm69Z$YgG#+MprIG^B{{eSgB`L+O|Z?WX{z)ElEq_Hf^pa)vsg zlZUXwwdYai$twq_f;(R3gE#4!LdH_bZ^d7 Zy!e|&x2(Ry>0Y@57mW7*-Vqx-%At;xsnWwn_WYx=sC z)kjRt4Y4xH{FpL9UV80H^R_zQq0Tw&v`&q! Ay>hC_mF=D7QJzH; z-%83qlbsM;o0PpY9UjR-KB~RL^dIyY)aFaH`9?rjNDU0he{^~9{+1MIaX+$qEHH0; znH>EC?!Dg|iNAFK&+Y<~7z @0*qTB>UiA+R%5=TL}7 %H=JYB}o ziHs5qUb@}YA1a@Pyi&W`J0= (A&!4BrFxmX V?TC~ zSJRCQbo+K~VasR8V)cKOk0W9e$@c}j{_)%U&!hitXh!i9-6N^~M+W<)PuZ?*@6hjC zjUI2)?}hdUKba|h9FC7iuK~AHJ=}t0!S~ho;mb{h2as7gS95n3w8Ll1S#YnoLN$C* z2~S9VsC@NYw_Z2zZ{WRbgRu80+pBs6yv*FRJ~0D2$bt?8+cDrCUfe!(M;G%GUw87U z{lW{s=jssR)cE8s4J&4>_A6*(2L6ru|MhJyz6BrgqidfEkJx9_s{oc8T)y8f+bQ)g zXQ#~d+Fk*#%Z3oG rP?jfktmx62M0iw>@ZX78bn?2bIjkEQHbbg*>ESnyt- zF24=94BKhjb)VVG=tKOu#5C&Wscv4>)-S+LtH4g%@~1R>cz1j?uAR1hK6Y9UGE(Dz z5gTo}wb4=*_hNqu{(8Q_+Gi=&K3neDXL{d@eYS @z Lq0bq8}0JoFbwcBLQ>bv{t0#|MsL9p-&8EBlcz$f6xK-;#6H ui7ZR0qw{??Vm;e(2ev7 z@raXJLvZKl#{ZnCV{>Kot^=PB{e3j}UU1Vq)W7Bt2S&0p{C~;*DZYXypIzOM{2o5S zPV?6#-7cZF`m)6a!?nh6Grslktei@7W z<3enxKhTHtRW5gj4bdw4ssLKO(Ad9wfwAxP{OsiMx^o~#126f$_7z{VzV>$C*M1$E z*Elvuz!COD1X+@Tov{%+qZ1hBC>}Q6wJ8 LExvbX1)A*>hH~)pP3D)PcNtmy- zNebx)d+$|#TbNj0W6mMX+2Z6}cz1yR!k}MF**^=8=fTbC$tE#jujd=%8 vGSR@yT +;x#VuXxXw zpK{v~?Bdr(t 2Ea1JxgJ<(B2Tt;*uV)VD_|x!siRUYKf&Zup zTVMGb#1{QF9DMGMvqrv*wV&XdDVxB}HC|hx39b(#yvTo!LQj@1&-ymAD=Vx&>iL?P z%q4|-NwKOScq>+QDeVu%swn%mSQUNk247yR%Gz7#*eR)${qwV4tP0)i#;Q^-6sy|) zza6WZdHn27WZ{~&s>!il?A`cuWVU>F_@-;K>${KleD`G8bB?}kofdm(b&_w5Ub eX8p${{kG {ZE z?%um^ojHHI)4X YX)7@8H#qj!UV$0CKaM^pYY5A{w`oITP9+cvcUBpDY z(RpfLe&$T sHPU+ZNt`9r;)&)JWiuDx){W!?(-pS_;{sj_#RPP?UvcG`|y z7Hb2RsbMokF}Kv`?nxX+r?Dr0ZtC`X64)QRQg_~ym<0^AzeRJFj_zf=8 Mv I5IF}d(C=$s)0CgU;f4u$8JG?YYrNdKW4wr zD1930yT8MB{`PxyaboCsb=cawn}^`+${y#5s-r(7pGENU>Gfo_vFCL@XxD__H?(IU z{z=w7fY}LXRlW-hI$AV*;x6 T%rp>#nyE zyT}a<(Zs{h!3pS_yTKB7E_raU(8;LNd63$tD%#6{_H FnycwifQHKz#o&y7rEK&vN0ocjZB9dgVY6Zd4s*wY+4%=bI@ zTocn>opboD^9?liq49->$Jbl!#QLxm``L$7q_Hx#f**{u SVQ&Yp4FgGQbW{_@rzdh;lslV2vejIA?{yd-_PeGlv1@6vBj z9|rS51f%7Qx2TkL(lGg!@H6KG#Hzz?UgDFCsTx?9u!hRo;oP&8&Nc?kUf^r&KHhjP zaU=9lyx7>i!8Xq$4Y+Eq7ejL+{qeXk!=^uCj- zRDHN${ z5q-G&Jk-4QL(aN_8_mhP;m3mO%*irf6{5ZB=bk!R{M`3Wb$#~WsobZ2e@d__gP$X# zxX<|E6-U`;xOfk=6PXaruRmzMP|7*gDieaX^jXMnboP?!pRG8`@5RvQTzsVbk|X4R z^L;ht)UTuG7wE4;?WaduYOh~$bY|*S?QL9~MgE!EAA0wZ6-OJ}n(VtMwz}Sx@fo6C z^}nw;nmemWV_#f~Ong{ TX3P=8-raWrL|J6{W9_4h04Gwxu2*_wyu zdCAJ7xs=yDm$5(A_Q%{>@r!TNoTss0l d(l?9xGn`w!M=y; zJPdAnkjRb>&gPs+D$=>)7%BY{k*dO&)wG!&y{I%G+EzSvDk(T)HjDVhtM})!2)_ z_w}RuzV^LSx&QvNQ=4Duu{7!M4*9U-LVWR|VZM07JaBa^nJ<(NL~N-=@~!SBbTu|d zF@0r%*HXq(LCgu;z&^9KDCJ}mKSj TO w&bKB ^|cJ!&*C+n9=nG=-LVbp(Zf9J zU>rWao=mbg&Vr}21t$M2^cTOFKj}oipPg> @Iv%Zh*{`T#R2GJxsTjy{G;gtcNlJh6BIr9toHPt_R z; 97oS8 z3X0i3V@8*gi-<4rYQ18Lz*F&<1>moMz4?b3?}0^S)6Tw$&P2XQmb`~LT8r+2AA5kI z&e(L%HIm<*+Wa&2%5+S|hk(Ajfm;tUs~4K?geMgjlKxRUMffw=2Ao%82KFJBHW{bA zka5sfdx-PMT8)1vt}9#p7{3b-&rTqwB>u5<`#W+Pq1!*MaOu{MA>1Zh;L`=^*Y}$R zJN*+qoh%Mnf8@kyGxyEn$gBV7F9qA`L!9-M%O2}*NJiN;t6kaHoH^J~MXlpw@bqZe zCZAsf4{LtkV4kzV9dMRC{*a#YtQeRUj{^SFf&V@H!JFm&J7NXZ W|Gg6Lmo*8O=rW1q@%%E(uA z(8(Rp4m_36x=jalJ`S#{M7uXcc`iMKuf}|{nD0HzucLsn_b~=N10Hv3&iLrcGu{Y2 zbqHqn!CTs2r8AP$KkanVUNw2$ ;~w8JcY?D{YZ*!Jx0k;%HP$_{a>w1gKl4`Q zwzI_%yQe)FhAZ9yh8@69_a}67r@RNdBQ>|Wu(R+1eilB!Fi$uDhBLr_%`=n%hBJso z&IE@&f@2Vdf;VxYM&KA6+g{q}628FQOyq6j@7^D4f~NX_ML)EpIhKLHY;gRUq `t$ei-0StJ{W~YnL zopKI;SFp#fKF^%o#97asuRHl28|d$8;@zAR)mU|TtZ5Wy+Frf%*ycs$gZrWF9AZ1h z8T?T__THvEVpf!EWB &Rqz$abS18Idb06e 95U zH+orTAr_eQf#tF}q1h96Ir)O2WOWz1?d5UE2=<-mEUpRU5uUH#6L%HnizeOJKD_!k zIUvMb<}8{tEiQUs3}=zw8CTQCH%&rgDCls$un|47h4t#O;lUsI owk^{>b~cKiRNTAeEi&ZzH{`c@3fqH>N~&YFLCPnCtlg`@0|1ey^Kq^KjqT) z%8zlM3}@I(rVoAJi@YAeohVOz%)} CYJS%x`SeHyE z9(OVHc4>1KbR7qO=c6&{hW $o|}_d^PX;7QS29fY)~eo3A}_=zj(q z+WlLw>0e3i4f1|q^Mzsa4}#4~V6z$6Jo@fn^K0b6yMaw40GrYPZ2pn&y1(Im@AK34 z-4o<}nC5@5-y_YkS?=R|CN{Q>c`N64A%EDDf7F@p-r8i>!f5`k!1| zPwc|J9nT)$R`&Q_%f4YgzxyMz?sGi _%cfls$t_cZNBf!4Ex?r#hL@Gab3nGY?ZQ%I~_NdN TCP<2$ +h%HC$nW+U${Om8qRg;e$i7nVQd z`!)PMI8^>a?)X{jrR^o)Zpoh%pPXH_ $fv;iVGTxkttL*sbnYENV!}mLe%HCkhDu$(Y z+_o%iO9O2!OKR&0wFTVYN^0v-o xSBbcQ=^)j|AHK=cKkCQd=9U^81t8s^EDE z^{yIjYYFQ}OFkTE>;9y+KB=}oS+(RplG^$h&+n#Q>Tp|@FUJSkx+AHr8EOlj-J8_b z?L5z?o^s%Z;DyW?9cb(3q_%FdZABB`PipI0p4;_>U|aC16KE?ZsjX|&7CbC@8N}n2 zJinZJKO1f YIfws2$b-cEoQ(K;#7d-{X*2udC>V9Upy))?BGmi(_`)*Qu-&T9b zYtd7%Ey?e%QE&EeTUJl2JtO_iIOhl2U7>aumxB&hd(E`>1n;K~*SBM#uGO3W5UBg8 zHwNj@?^5q`yqie9j|9s6GiB`fjuaq&DtA1@Z`(hzNAVcib>m8&4Vr`8y^Z>|&ad1$ z|45xr@l0_m(Wl}UQ~WX>eCKK`o-7o7+xl_0{zvqVn1twS7WG`&J!eoprXOS4@*UTP zTAP$V{p5Mh|I~W6VvmY#zlZkXxyax#(Zpoh{~*6F;jbzWonhFIi_E>A=Mz*8Io)xE z #$9%E|5R0_+b>gFOID@>Syjb@2#ADPTiRH)aaa! zy{u(RU%j!z8wbxXqrVaK7mTyLLN1DLJIZEU 3r(>f< Cyb-&zLXlVc!w`COYnC z{nCWmO**(J;dj`yZ#=zhbvE^MH&h4XR17+caS8|DXPjCajsjfwRVljyylxC8NmUf|IC zD4)<^Z?#FRgeLp4u8s9oGOs#f8!LJDP4>~^>veA+7W_1^N&L3%&0c(r^QOA%Df_G& z2eI+BAA0e}2Z)`0pLe1K#+Ji46f65p4tqKul|N&e%>;Mv ?v2o=Fyjh6>z*8I6VrSTzX1rzLByve-nE80N=G|YK-b{_UiY)liKMK8Bfe @&zwr@M@W_WZj+Sfmq{@we+PS_l*%ZBYW;MF<~+sb^{^0VSE z-(JmFW&@W>cVC<4+X NY;9t%e;4e-tj<@%A zp4O9Q+cl=qV>dExzUPFEJ&S-?Q9}EuJCUCu@+zHCCb5Rtn~gVPOLpGJIN&SAmV2P% zUTC{-Au#}G_yqLu8uanUeJ1v1@wsv79{^9$P{$XeiH>4$i7djOv$5N*$u<^zvYWjc zt{l0?m6t=juloc-@VdV@!FvzS2*&pU<9J#$;pblozBZm|bA^W2H#Gm!x;gm`#E$Lv zZ_LS$Dvn(H)X|1lzIQ6V|7WKfzW)1D@vhKd73VMz2VWwZQ`|l%-?9`-8(~gfguf8a zWiI4&A+vU{H*@eM gmCcDw+ORPwA!cF_wr#|pWRsotye0Y2$tjkz)s%chU-@H-2ByMoWZ zQYV(wRwHf23rx#mo|`P{MW@CJId`YdYcE6fHMXTAq30)d)arRbRZE!9*QoPEQhPDl z%k1B;k=<@{JJXQh9$&Q!{8x`KUNYoCnq8wOIppz zZLAl#G^4$Hk> NQbk3w4U3=gxZ%Wen?ig4+c2!c5-JN`j5%6InEW zFoiR)wa(MU+_X-qz827zJ{LagelGg{j6?=~k8@HFXVCXV$2mOdiPR0_o@m>k^9sg0 zX@@gd|Cs1R4qwY1q~o7BupxuBkO@xu;S6%ZCpsyIuj5Yp2~Ql{P}F+vSPN;>$4v$8 z_}^=(Yg(BDIA4T)A~-Dr9>M*(8sj`~tfC|E&0UZYTTXB+=Ij{3QQzl*gH7O|6CCUX z2YOe?xiW&W-)HiA!Fk$GT&VrdJO1bGJE6fJDfbX^vNBxvPOu)vy%UP &f4tsaGe?9)Co@i)3N*dQu2Ho_Es==1pgwD3%#*E zy}jbCqC_{cSl{QLEn+W$`+Y&UIMI6rdpwcXWyl2G`_@IiS;u5_88Ma|^j+0NovAfB z_La-bIy*-4C@6cg^pfEE068qmr_k>T>gOT9b%s$lGPdV(>>ljwF6n-J!TIRR1?W$; zqkX7N INGSs|&6>AFUNqcrY zdc2xG)vnGi*i5^(c;i|Q4033 6rQa z-om-|>aU qSpx@>4aL|K(9Kz2OD z_?2fMd9OO9j~AXXHK8;1J7_RBm=MTWPHh}4lIe~^98I}cF5fVI93+CBijO8CBv@5;B3JdjNjlwm%+ zCldP&?gyxb_R8O=YT1`zZr(7PJoTT?wsb3+X*ykWtSyqty+El0@Y7ty#zn)M2P==2 z lOeYj^AxVRLp$j&83 z;Q5%d1~qo!O>{5X+zZVv2L?rtl?@i1J-f35e(x9`O^D|Hf)9{o$j^aS Fu%0AJH7(9ex+_JIY-#K1||M-Q1l9 z**V>;kz!Akd=;4?`)d0ou@2T?@8`FrclcDe-u$n$ht0ZC<6s`*Dao=tjY&A?Pxmf% zg~O9LyKl8 (a2%(E2c+{FDGjU&RW$)yg&q2W}{2;9in9NH0#9OQ=Jm5lF` z-hIU<#t7%b_Z3H|S9@ b#Emn-9hAe{8;8zp2e~ zVv3d28YebNpK%k@KG0hBV9WlgZFTG!$9gW_)Td;s-fKR!t@fM~yC+2ZME7Q~uadk^ z!D_2v-vMX6Eh0u>{rTc>e(!AL?sR+)=&esO99(ba?$0jdeR`>h_2ZZ5uH4u78{ki4 zLGHzV2kv|Eb6x}g?)vnIW}P{qoQ)pv*N1HHzn`@@(c41k$_WizgdhD1<0)`P40N)t z1FRAQ_&~2g=X=?A*7-@3C>oJbmwWPwV_nd1q4ft-o4-^BZqZGh_%~gjWY6uQO)tdh z`@c$gexFIq{V~4%U7}Iw{yxqdoaZQ3xT}LQx`Xy^-gm$+@nYIwe9}AJj8$XTnuT&= zu(4YdCr{9q;z6q4SzMgo#T;ISru2Oic?Y6r|EwFm6YQTMU&87$epkRVR-bW}XNY$y zqqTw`(ncXXa51{d`rW|Nm3!{pu|13h1rm!-A0A)47}&xi8gq#g8MqVqy_Y}1t76ne zb=o^P 7}tRr lIsq#)}^-9jy2XGzSfqw}M}IOnbI2 zr)+YcpHB7VvYTVq10Pl)8y0i7U $sY)jyTg|lCB_plPw%wlf#a+mv59Vb13L*Ox>kMHxWuA7p zL&-EpCjhIeQ0(~Q+`q-W>ng9 IR3Q2_%F1d jP3=Io+o$#k@ zfj6a#fu(&0z7*>Y%fndVJ~vd;rnuI*&>r0E5!De9EyL@ESU~J>z*6Mi)5ef zVk})>)P2}yiEA63d+rEuS)w`DX$+S~mx#ao`DP^bpXv2YJCoklH}NLhH+Saf?kDyA zE%iN}vo*;XKX2c}!PNI>)%V5GmgMuQT>tId^Qtx?o5N9L@Wtj9^`Z5J4s@ybCB$>V z|35#Ej#I2qx*2{QgI!hr?E3u58s`gl6F-%mT2We@82goP9-Z00{nY&X{`1t>lLM!) zo7)$RsXe;leLGK$`_0c!Er_2!wbG;>?k5(qa%tLzK9hd9qBNX1n`a(bhHMREKiAOK zO4{n7ZWCn>EZx7MX=&<)Hj{R^ma?*6kDJIt%aBbvhpH1g)EJAgPcxCluD&hJ--k}I z>o(q)t3L-!kbQbD9~d6GrGvgCf8IiWMNhwVkozL-d88Hw-n;wp=k>e{8j0f5>z+uR zSvpL6GX`bbNuRp3|L%VKeErfT?jAbni0Sx@uKjyQODF!X;>O8xGxil{-8ym)vf=GP z@wUffudii(N&ef!B!69eT#i1-y=3tD?(otbwM+MHXdGd7rDU0y)^qyE(K|aTJP_t= zU%^!8XFzMCQwll92K%_un3JqQ&+VsdBW=yZ*6*V|jl=r$*o3{v3+ah2`61LPC-%`z z?4#OnmoV+s;HOm*qo}^Ie!cXX$_S6;+)G)C{pkBFzx@KV4i4zw`VEC?+>^_gbBGh| zO*Okhj9Ke0o#9Y>$tY(a7y6N|kzJ%Q7e!4B|LoP>jQRJBc^2bcpz-2^wPD-0;kR8$ zxz5QpAK2QvjXYD`Cg!xC@4H#UnTJkpVr(l%rPQq=1~&oxFJClnumgLh1O4XW+||8t z;L-zb4pKkW39mj*{T%8ar2dnmQtMVPS~NI``m@0G%0&|f$E6s%=RkhpFRAyT3TNF- z{N2dk4g86ogF58P9*#TFfh#>(Dl^5GFLPK!3;K`pB`QX8A2@N}MtH90Qg97i+_k%u z_T3{Q1I5sYe8-OI;10g;1}BmO(qZx!dceUZ=F>49y#fF9%BB`iF@NQm-^u)J+=P5G z>4#V0vr^8#vgN7kmqlhAnUBoSoOUBOeuvzs<$V*pJ|4L-8@aI%xiKEO0k5|<== zZcIRKEJAJ^LRL&7jyaKd=0xYB!%fJ7g0bci2m3Y!xv_$_4yi3Ct-YVJ8N@cziE*Yo z8HW#0wh8=aI;jtVv$;LkFY=Y;=L%<9Z<; jQ|9k^ zwz=F{w~0TWW~2vR<1A>&gvSE35~LT-tc6~N*Jp^!+H*egE**TnHWI1pWv$|XWc4Lx zR~r1LJ qmqJHhc0yu{|p< zN{7dPA$jqB;T3r?1Nk91D;}h}E0~|+K=ttZCir1RdZfLHJ1i9k8V|o?U)VDb_aHCC z7kiNF=gN&p^Doz*D>vpzZltHSKQkh|J;Nb3@5zlh#6Qy<&ND!EWMr7cQRx8W#{uf+ zfd6d%vP1^~TF{vZqK5?@J?OlI;QhP4{LtD>aK97rlr`oK?lmT!axr>Gb5=WZY3C0C zni{Ha*HVY=iyY(+ag|sO^VS(%Gwz74T^4nk^G@G)tOgvaJ^v3oY+xhyU 1WA5`e%y-@Ovt4?Q{JqP69=$H6SmyWj9QpV)K1Z|9Y%Bd_ z34V8T=SkXEcf7ddT;2?OxcC8Z^x?OSHMO998kZiGtVJfcdeLeA#21})tzomv=9lo! z{N(e;%pK7k2AG-vOyy7Ff6jGb;l@hmF(%cM?Oww7QpL+&et)ck`&%kCe&+jLKD&AM zs5^e{YM2}=WbM9=@mC3Mqny|>=wYQlAJ4b=xz=6NqKTgc=JTNSABWFp5pIQ7owv~? zpC8#F+=c_VmCn)gAbxdkhJQbI_nEX?HsM#7M9j%n<|n)B&2RZWaM7S_G3K?#JT@X$ z$e#9pOd4mSH_r3k|4Tk?aR1G6=%N@Nt`CO?mJy30uPSjG8d9J4(Wl~>IoijH9+AAi zANx&m$fwe$GL~I zynVJ}C8CF2hO^Z_N&h;Jq=;vN#W1d2x(5bF%#2ifZot*RK(whlxH4%k$RFm&+N0+3 zhEv6~r+&)lC!02v4|5hjT=^54r{-4-{;JXKzX!)ryGDIwtPI+SB*FM@55|5zKoF*< zftBE@xS`faI%)e{nh?Cg%^?e~u+^t7O|Uj#d7eG^;9cu$K22;1nOl~zzeo1G@FDss z_TV;;`3Ociqg=RUFwZXlH{nu#&TZ`JuyG&k8gjMj#2boPhCH}#v^3_QofL%aG~&vY zJN7>Ye8i*hj`F*TFN8N}HVmx8z*@1bhiTX0x5IC(KX?7BSyvSryhS)DWz2^DtEeO2 zU3i$S91Gg_aX8W+H~nTA)1HZ)`wHu?*6yI3U?zBEGoAuqq1ajw?=!&VeBQ|xRL<2N zWUug`bA)=JTg971w=+Gu)p@jPQ_q8RJJZ91-Y &W4;G%jWkY!TcTO7KEV>zd!4o3y;=U(SQ7}XQ%pi ze){q^IX)2N|BdLzxEKGj{I52Ur8eHmoMkW1;*8IrytO>C#oeDhoiS&k?|gr)nmtsq z&4TfPZ8knItUrVOX8}W>X4U^>`hSo38oqRWb9W458AJTI$$wn$j{D~Wx^$Z*`Te_* zv21wuilp(Bc;oqh0r{PLe)#<}S;x=(D6|x^`4^d^oRjmA@r5(llW4ArWj$8 5wtsz&no3lR_WgP=#KyAJ^vz~4Wfbm>tcoE!TeIs z$47TO%;&A!%(|b`UaRKwi`>{A JC3v zHb(G3p9RlfJH)=ZpnqlYlfJB_e9Yif$+a?Uox*gdMRHBNq&NexaPtJJI;JUBt~rKI zm!xB}r2iJ1F2p*I^}nEJtv$T7&a69oHo~3r{2`yLp9$T?yI5~qW@DCX%KDbKD4s5P zToB=&OX5S>t@Z0WY%D})SP_5ZPdPEmoph~11ja&M*^M33v<{&hUGAnzpJyE8?U?iz z8IMc9u0JBXeIIug#gVTI1|MD97K!dS@QW|6JvjK)wP%qxsm_Y^YFpsMaNb0UiJMuv%1I!m{rwf;bgxvHuR!}6X%!SqWSg$C!IT8 z#XU3Sq3F~F=CK`r?-&*`X351at;@16dJBKEi1)Q|?okQrd4
D;`O^Y^BBBB5-%m!`*BTcRKqm8F#Zi-09sj;7)S<7HHMixkXb7 zi3b>RPeg~zoq5^0GhXQgjpghV$I|RWf&uiL13d@nP0v1%^b8(fWBxN7>p%v)_GNoU z@DcMnH_xt@-xmJpNcklnWIvyHb~Npqz`r5+p5))WBmaAC1^IuQUH=(gUl5<4hUXsV zemTVimIFt{PQq24mWJ(jXjr@@UJpmOC&{GW5{IA1BX^`fI)POYu#xRp#2s(emO#FK z4mjwY?1>6wjLv+hK(^?2Ilpt!pPPvhM!SphOX)XjOV!%wkYDM_-KgZ_12@{cM>e>y z+ireAo;vdX=_J@4=lo^CZa=W|;kC`ilZNego%d~J9&wgDVm32~*;Ej-$s=aNT6uc~ zF`F7!F_VayFXiEx~!nM%DW; z@7!{k&CtiqJ=BxU1rLtyrJqV{FO@Bae=6uFH!Hf9SZVX$JxA^gm@m7LKEC%&pTAsK zx?@gjUPxbx b=J6mdhmmJ3Pl;%Ij`OUq9aG(aXPx*TQC}&NPgI zqXzaYY?w_BN9An0hWspT8|zoQ{SZZJvZ|y)UW! zS9c8k&Lbb2bDH&gh(516*I&avSu?Nh?j__?ej)oxGuQGZ_f-~Mfxl>qPEKIYX-On{ zGE6Q(G5l0w!mnvBr!Du(LeBkgpY0(Jr^MWQ@ +|7G5hK((aUqFFTcH*ag}2qRbU_0oAi@qT6g8{qXy_+_Z1HQlUeut zDEu$_DjgpJ4#Vrh%5x@{axS+24(W4$FN*WPr;cTt&+L%SFQuMoO^tmh2YHOla1?Js z59HuOXpJz-i=k&Rzbt3)`OMSgsx!7S>Sf2%VgukXo4mH{hA}bS%_%-L=8d(>(9PKm z_8iWGF2A^TB=YMGb1!*d7h!L)?$;{(K9^_hux0#K%*Vp?w;tSnTWEc $$trzPr(VcOUOQ>XtuZ?j;6; zuRo8zC-N*y<9XSQTg>s>fDXQ%)J75SZgb1OVcvA@^pDZTl}T+(3$*bBZB(iKRg+>H ziG$q4yLk9ZJHF3zBVE<+?nAnk=i`#v{xEGjNo{8b+Fszd-QdPp-f!D}c*nPs+8)jG zkx6am(srp}_Y>DI&E&U*!;Pb?y+4NE!mIRT1!sfbAinkfiJykf_xzxE>fG}^J4>Wr z!}-#8sdK81jx!CXQcY@I-@@pQK73}i+p%uJTJ4dN-Bb!~$p+mGy+-b=I+{oMDr4$G zRSie0W$(q`8~a>3a6{ILPCHBFvlr)g%a8sfd&a4!=Qc-YI_nZVZ#(^&V|~2Sx@>;| z{_Q0hb>>X{!3mt3q4Pp*4hVT3THopAjEsKjOyEod&a-&+_@X-oCcx*q=j*L#G`47D zVd5Y;s2aC;&51S~RW53=S$;HvT_gElpX;nEv~o1FnR5YmYTrppan;eW%%#?()HRUf z)j_|#H(+DoC#ye=;W%=mh 0JCf*grC&Z#@_(I(8(gBQ?VGH&$mftdug~f&Tb5TKI;w)!} zY?Qr9T)hjqS`KW*JLS;5);io6;&7YS(q BC+VD7q34T= z9s9o2d#^q-owR|z)>Z2>v5Ud)+)m<;v2U?AjPb=;E75rEIK8G2VV;LkVLoM_1T( z3miN4<=AHSH|?JQrWs4d53Ybl)s}u&^WBv}{u!ug$l&zmjDJ=9CB69yKC8rk+~-!P z{J$?buKyUl*2a17=XX?myVI2wpX9gV<{jaOcAO?RgSu}R?nv&S?!COz`S`Pun`26W z^X6Ihb5Y%_1Z&pqq8s;ls{8)wS&0K)*#%Fh61U4}w(E_8?^Nz8Kn@?wisqj%PJ5 U$M%qyEVRPVgy=}WRhIfcEH zA8#`13ZTnvz^|XU_CwIboi~rMxselqZ6>hY%)1HTd9~hc48<}eQ_zj+-ur&euu9La zUr*gP?mUwgyOZw+;mv~i(Nm7%K+w&v**ogOz>jyibZKeunQ$zd_J2yOzJD_Lip9Wx zyh-!{n`K+9{#ax3+%g-H
z?ATLG=5jv9Ue)Ne%RCWt*QrRqf`u^=cm*F(<7bcU4F8mnZFib^V*+ z_>Btz{8+84&R}1qd=~UZ zJHEkc l&ppPcxV-ecFOkDwhQ z8V>$G7ayLj;==&F*A$q)Xx(`K)&LLXyFF;vUxxi1*;>+h2AjWYv729F$IUn&e~UO9 zpJOC5tM9P)q>8TH-|2Rp`w{MCP#M{Pik+&i{yxidcigUBu6hOd&f53tpkt&P9N@(H z^#`+AKUJMS56M5bj&FzWB5y!`+s}jZx!9f0ljywQ`fkqE(PJf9A*-L1AKOvw |5&H%po}Tb{yJy&2!3 zaz|UE<*6mYEBnWnT*Pm9?uhw(uD##)r+N>*B7Ek;Q$M19R6IFjqP0g4lYeD@f7jTv z3)}eJMPHrtRp*!OckR<>)fRo&zNSZ)yiR+;zBYS(o#1&oe;cUZARdmpG4Aivw&JYL zW#}XFxkLlPd54#;`iCc7ymyeVS`)y%NZR+04w1JV#D6t#_hJe5j90}I^vtd^y 4x0OSTV>$9b{N(bFi|^X&$RlCQ2Tbd4`p7pri*JD=JNKE==n`^4>N0MN z9&3hv3Y?1;cQOw2Y^>nD=8-+LeJ$@woQoHi@?HM8a_E)Q)RuQ(eLC;dRvUgw6L+0# zD}|;!`fP$Go1oXN%&G0_^bH~EslK0ALac75;y;3uculzy8(CMriuk |=Dz3Ua`!fS3BvZ}Dj-XTm5hx%>9;e>5@ArbT9n@U?*4 zm08M7QM<$d#2 3md7TY zyNNQgABlU4hlkox8^W7tYK4cl1>mjT!&^0YV=lMkf;aLD6WDlmeaKzQ&TRe=dcJ}8 zzT6hPmdQ?_54G*~>z-#9#JA0fVvoLjnVZB1(rM+KrQ`8|PyY{co>eej|M${=W_;wy zJAgw9wBK;L_*iBnbTWrn!nm2lirM3}f5c3?zf^WaO61a48&1zYmf0OXxtDXwXW{#| znM-4BSI?~5Z@BXq8LW80CSnk7{i|YaS~r2_`_Kb@KQ#G$Kje(rNJ?{-$|A2r#Njp| zqid1TjpT-Jh1UC__4LbHf0OCBw7v}*$l$JoNzm-G(7I?^v_1)1FY##oZr*Vxf~9rE zkwxn|@2@ZK;QEQYQ(Jw|`c`PY8Cu^8t&117LhGWFXQ1`ItPD%*s^5i8(~bUE==n+7 zZ_?T2 pZT*;SYyf8JoXx%4a>SM<@ercm@dr3W1( zd-pPAU;KIC0ZsUADJM-f@A+td9Bt@)HPQZp+mOLYbycqxx^Fa2do47--=q2YLo}Z< zkOi(q@2<_8*1RZuZaZqjr~6uu?&rS)-B%^i{g*P|PWStGra7u@&D*7ScO6DL;OFFv zXnpHvd}e35zq3cVzcZnoAWwXjeR)1l+y+k!@q>+*4WE~-T-#cBSL-}#qn0`7nR2>n z;p zX9^*0lt-2#txUxRihaUaNC(BSW66F4I*?cN1#R(iDiFz P|5pz|1_)?FK_mIOXI(m+KiLhI2ZfP&P*$*A}Y0Vxw*7}X&0HWtE=(!KN?T424 zg7Xv5@{`cA8`Dp3{-?Fz#Vg+hT?X6i1MdCc{sjC`kmBmSZTO%QvrUY1&J*HQ+1|>d z5`D<${U>4u;;mZBr4W;-rQC(umCqu%lY_k$lsn>~6Ttt3r#~J #&Yl4sW@*O42dimkjBc9L`*vbpag{g7=!> zMVCLXiuHMV<~V#Q-6Wl|3cgGwPId4+e0ey)m#@47U)DR9{7t?*2w%3tmj^w*JP2PN zgf9;z@ulJizFrYO$~N%%u@9QuXn8Wyd;lNH*9U!~M|h*x@ zAS*#qvZGvafU}=2rH8KTm!@c9=UY z9dbOe%N@rgR>Fsem{T7yh?Vf7c_L-}zQksA2oZE)x;OnV(W1m$e@zvoEyq&ME5??V!we6n0lX4DkNzRC; za^WNKSvH^2SNbjf((h#cYF#nRU*x$C>8lf*`}x0Nzlo+~mx!+LCw7jta><-juAOXZ z={wmmlGC~)Ubf3U_^Zkz3q!MEXjORAKF(@zAHJLOzrcSk_?NGoc{linjzi$S6Iv6V zh5InL4|{U89J$(s40B~5d;NuP=u5Ed1eUVPE5LOPF%o25;$_b+slYBNXS|iHKenR# z6f2q`JO}IY%*XS)u}6aT_Q%eH;|887_S68Zv`1U(`kfxEI)O>&ZqD*#E* {RkN z8A}Dc^>T`t5@#-&({W?g4dusp_C+x=UC-jXqxmLmrWRvgl+#D~uzj(;9Qy)TZ`WNK zHLRC*GY;8%Y2fKMtjX(l9&p#QCh(y19JT;|oeR+j{8?wNtMGWQ7=5A`mFR5-eOF$< zpNunJ>58C^2-;Iu2I%wCLHbO}*VVYozwuN{n0xX%I0ryJa~U}6B9<@PI1_)_{r%M) z>HKCt&e}>~+eN&u8@QI68cUB|>~qmRfaTC!k(n5af^T 6?F%HMWE_UNbbCUA8)m8=lR(SnZ z&~GjM5(gUUx8il3mE+Xevad&U9>|)C19S3gpcDIjAK!@)$On|ICA=!HO>xG*7CLtC zaTk0jI`2@N5&p7qZQ!ApllE$8J^km`x^hH*bZu5~3%2}}25?=K6>iabyl`ICda>3a zxBpMhJgI_a9FJy}K{J^i%~WB7V0+p;iz;jo7aubQwH|G0Wh8nFfAnh}JQZX8o(EIk z{+@$B7R;|-#@Mq<*`IFAuG6&1`gS7cSHwh&Y0vqU;-!N>l8jw*gOC4nV}FmRuQYU2 z0C$Feet#!yKH+e_N)E9Y?Wc9~hMjh`oofnXip`doLg?_Hca&8vU%wOCrtuSRw&yz( z;SX6~p4@u7-h3S~vxbXfM{8Jnp^VDvj*}pb`t&u&g9rI9Z=)}4W8g77KKQ|t!BM-< z^fT;%I;Tx|T`->F%{%!%&}~Wl7`}jf*+;$tagObht;mPO(0A| |Czo8DVsdfH$;HVf7pKS& zb0-(4np~V*a&gMZ#o-K#!!y|LSG+X5LFZbOFP)|Rc`==DQEKM>Ti7i4w~E0p9jiG# z^40mTeD2tS7w$h+e)_Y=%11r1R{miXW%h8MOAh%v+4y_eRh-MXsQh&9WAjg&3G=R* zH*MZE+3EAHd7QIb=G|9#Cd(AD)UxmzGp+0z@nU*b=`|l={PFO@e{*QdmRnhPMs-Yj z*)@)N>>BbD?78}qRW|QK#LT~73{!Ung(30s*7sYw?J8#uisvFHI>3?iZ@k*rGv4kL zJfTgOhTK@8+8g4JB>IcOe}$AU0*}S;mGDeVXPxj`3O<9hC^~$E_LU3ouOG}winnIH z*XZ8aow>-9O5?nijXhqF9<_NT>%pPccr!U)V;*^BiV=2BWe&{mLVkqii4Cz+aoR0> z%6?BNTF#xJDRoxA0B6CPe30!XniKo@A6b960iI$`%E#*>rdGkbn$nz@)@W+c?VL}h zb8KG4c5Y{Vhj>WJ>NK8VN3bqicoG|YuHq# iV5!UNgh zO!b2Eyz)=(JT*t{|E!j+#u&-(89;Z=b^Y&9^GBC6X2F9!qg9kKl$pab)sdec9JBOB z`SHTU48~r~9QCR57`owYy;Gii3VLup-y7qX#+3WYU9s#H4iEHVD?vA-{dX@0_APKn ztlhVuGQHfX)B|o5Q}2bwfW_*Wz(+U}uI&C+=CmCe^I@PlHGq>+txFtn*95nG)|Dke zm>dK5S~H^D8|GJ|V`Z#IuBTj;ey_RS=2U-+-%-h=xVu+ot=CRapM8LJbzdft-)?2N z&p(HVB?R|&M1WBWb{ICSUHj_=&M&j}H;y$y#R2v~=c&Nb!jHU!G-!f7-gRx9$=bu- zW6l4pNf`(s$5TtA`NRTlk!{co-S nyzAKxgumDriS@_wmw$o|b)F zCR#0hUo6MO2hpi@vboNA4qo&;2b?JPS#5NqW8&!IIJ}8WX_+~O`O`-?_~-#gDZ&r3 z-=!5#|0A!?`K>iaZ_nM6)gJuVbGIW2ei_yt7}kGQx5)Ov&arxgIm+Hyvlsei3?JO* zuNw~AaQ^uipY!{Ho-Sk$WLSAOyuSJVq4v(TD;`i=$iGub<9#rxzT#1?4~YNzqCYmT zEpK1?9B*9yUJJypmA`(z5o 0ljl^ z>E)St^SHvB$E(03XtT&avi7R p#(x}3 z9=>7yOy^4O$G@n|a_^cMvP >WmDK( z#;CDtXQ9)@-z-VzUK(u3$I&zMOlmB`x?j wM5HFtt4zkk(ix9Ns!yzG>vG-`XeXEb4 zy