A container registry that uses the AT Protocol for manifest storage and S3 for blob storage.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

implement a POC for vulnerability scans using syft and grype

+5028 -185
+27
.env.hold.example
··· 112 112 HOLD_OWNER=did:plc:your-did-here 113 113 114 114 # ============================================================================== 115 + # Scanner Configuration (SBOM & Vulnerability Scanning) 116 + # ============================================================================== 117 + 118 + # Enable automatic SBOM generation and vulnerability scanning on image push 119 + # Default: true 120 + HOLD_SBOM_ENABLED=true 121 + 122 + # Number of concurrent scanner worker threads 123 + # Default: 2 124 + HOLD_SBOM_WORKERS=2 125 + 126 + # Enable vulnerability scanning with Grype 127 + # If false, only SBOM generation (Syft) will run 128 + # Default: true 129 + HOLD_VULN_ENABLED=true 130 + 131 + # Path to Grype vulnerability database 132 + # Database is auto-downloaded and cached at this location 133 + # Default: /var/lib/atcr-hold/grype-db 134 + # HOLD_VULN_DB_PATH=/var/lib/atcr-hold/grype-db 135 + 136 + # How often to update vulnerability database 137 + # Examples: 24h, 12h, 48h 138 + # Default: 24h 139 + # HOLD_VULN_DB_UPDATE_INTERVAL=24h 140 + 141 + # ============================================================================== 115 142 # Logging Configuration 116 143 # ============================================================================== 117 144
+6
cmd/appview/serve.go
··· 376 376 slog.Info("UI enabled", "home", "/", "settings", "/settings") 377 377 } 378 378 379 + // API endpoint for vulnerability details 380 + if uiSessionStore != nil { 381 + repoHandler := &uihandlers.RepositoryPageHandler{} 382 + mainRouter.Get("/api/vulnerabilities", repoHandler.HandleVulnerabilityDetails) 383 + } 384 + 379 385 // Mount OAuth endpoints 380 386 mainRouter.Get("/auth/oauth/authorize", oauthServer.ServeAuthorize) 381 387 mainRouter.Get("/auth/oauth/callback", oauthServer.ServeCallback)
+27 -1
cmd/hold/main.go
··· 13 13 "atcr.io/pkg/hold" 14 14 "atcr.io/pkg/hold/oci" 15 15 "atcr.io/pkg/hold/pds" 16 + "atcr.io/pkg/hold/scanner" 16 17 "atcr.io/pkg/logging" 17 18 "atcr.io/pkg/s3" 18 19 ··· 111 112 // Create PDS XRPC handler (ATProto endpoints) 112 113 xrpcHandler = pds.NewXRPCHandler(holdPDS, *s3Service, driver, broadcaster, nil) 113 114 115 + // Initialize scanner queue if scanning is enabled 116 + // Use interface type to ensure proper nil checking (avoid typed nil pointer issue) 117 + var scanQueue oci.ScanQueue 118 + if cfg.Scanner.Enabled { 119 + slog.Info("Initializing vulnerability scanner", 120 + "workers", cfg.Scanner.Workers, 121 + "vulnEnabled", cfg.Scanner.VulnEnabled, 122 + "vulnDBPath", cfg.Scanner.VulnDBPath) 123 + 124 + // Create scanner worker 125 + scanWorker := scanner.NewWorker(cfg, driver, holdPDS) 126 + 127 + // Create and start scanner queue (buffer size = workers * 2 for some headroom) 128 + bufferSize := cfg.Scanner.Workers * 2 129 + concreteQueue := scanner.NewQueue(cfg.Scanner.Workers, bufferSize) 130 + scanWorker.Start(concreteQueue) 131 + 132 + // Assign to interface variable (ensures proper nil behavior) 133 + scanQueue = concreteQueue 134 + 135 + slog.Info("Scanner queue initialized successfully") 136 + } else { 137 + slog.Info("SBOM/vulnerability scanning disabled") 138 + } 139 + 114 140 // Create OCI XRPC handler (multipart upload endpoints) 115 - ociHandler = oci.NewXRPCHandler(holdPDS, *s3Service, driver, cfg.Server.DisablePresignedURLs, cfg.Registration.EnableBlueskyPosts, nil) 141 + ociHandler = oci.NewXRPCHandler(holdPDS, *s3Service, driver, cfg.Server.DisablePresignedURLs, cfg.Registration.EnableBlueskyPosts, nil, scanQueue) 116 142 } 117 143 118 144 // Setup HTTP routes with chi router
+34
deploy/.env.prod.template
··· 101 101 HOLD_BLUESKY_POSTS_ENABLED=true 102 102 103 103 # ============================================================================== 104 + # Scanner Configuration (SBOM & Vulnerability Scanning) 105 + # ============================================================================== 106 + 107 + # Enable automatic SBOM generation and vulnerability scanning on image push 108 + # When enabled, the hold service will: 109 + # 1. Generate SBOM (Software Bill of Materials) using Syft 110 + # 2. Scan for vulnerabilities using Grype 111 + # 3. Store results as ORAS artifacts (OCI referrers pattern) 112 + # 4. Display vulnerability counts on repository pages in AppView 113 + # 114 + # Default: true 115 + HOLD_SBOM_ENABLED=true 116 + 117 + # Number of concurrent scanner worker threads 118 + # Increase for faster scanning on multi-core systems 119 + # Default: 2 120 + HOLD_SBOM_WORKERS=2 121 + 122 + # Enable vulnerability scanning with Grype 123 + # If false, only SBOM generation (Syft) will run 124 + # Default: true 125 + HOLD_VULN_ENABLED=true 126 + 127 + # Path to Grype vulnerability database 128 + # Database is auto-downloaded and cached at this location on first run 129 + # Default: /var/lib/atcr-hold/grype-db 130 + HOLD_VULN_DB_PATH=/var/lib/atcr-hold/grype-db 131 + 132 + # How often to update vulnerability database 133 + # Examples: 24h, 12h, 48h 134 + # Default: 24h 135 + HOLD_VULN_DB_UPDATE_INTERVAL=24h 136 + 137 + # ============================================================================== 104 138 # S3/UpCloud Object Storage Configuration 105 139 # ============================================================================== 106 140
+7
deploy/docker-compose.prod.yml
··· 114 114 S3_ENDPOINT: ${S3_ENDPOINT:-} 115 115 S3_REGION_ENDPOINT: ${S3_REGION_ENDPOINT:-} 116 116 117 + # Scanner configuration (SBOM & Vulnerability Scanning) 118 + HOLD_SBOM_ENABLED: ${HOLD_SBOM_ENABLED:-true} 119 + HOLD_SBOM_WORKERS: ${HOLD_SBOM_WORKERS:-2} 120 + HOLD_VULN_ENABLED: ${HOLD_VULN_ENABLED:-true} 121 + HOLD_VULN_DB_PATH: ${HOLD_VULN_DB_PATH:-/var/lib/atcr-hold/grype-db} 122 + HOLD_VULN_DB_UPDATE_INTERVAL: ${HOLD_VULN_DB_UPDATE_INTERVAL:-24h} 123 + 117 124 # Logging 118 125 ATCR_LOG_LEVEL: ${ATCR_LOG_LEVEL:-debug} 119 126 ATCR_LOG_FORMATTER: ${ATCR_LOG_FORMATTER:-text}
+4
docker-compose.yml
··· 50 50 # STORAGE_ROOT_DIR: /var/lib/atcr/hold 51 51 TEST_MODE: true 52 52 # DISABLE_PRESIGNED_URLS: true 53 + # Scanner configuration 54 + HOLD_SBOM_ENABLED: true 55 + HOLD_SBOM_WORKERS: 2 56 + HOLD_VULN_ENABLED: true 53 57 # Logging 54 58 ATCR_LOG_LEVEL: debug 55 59 # Storage config comes from env_file (STORAGE_DRIVER, AWS_*, S3_*)
+287 -35
go.mod
··· 1 1 module atcr.io 2 2 3 - go 1.24.7 3 + go 1.24.9 4 4 5 5 require ( 6 + github.com/anchore/grype v0.102.0 7 + github.com/anchore/syft v1.36.0 6 8 github.com/aws/aws-sdk-go v1.55.5 7 9 github.com/bluesky-social/indigo v0.0.0-20251021193747-543ab1124beb 8 10 github.com/distribution/distribution/v3 v3.0.0 ··· 23 25 github.com/microcosm-cc/bluemonday v1.0.27 24 26 github.com/multiformats/go-multihash v0.2.3 25 27 github.com/opencontainers/go-digest v1.0.0 26 - github.com/spf13/cobra v1.8.0 27 - github.com/stretchr/testify v1.10.0 28 + github.com/spf13/cobra v1.10.1 29 + github.com/stretchr/testify v1.11.1 28 30 github.com/whyrusleeping/cbor-gen v0.3.1 29 31 github.com/yuin/goldmark v1.7.13 30 - go.opentelemetry.io/otel v1.32.0 32 + go.opentelemetry.io/otel v1.37.0 31 33 go.yaml.in/yaml/v4 v4.0.0-rc.2 32 - golang.org/x/crypto v0.39.0 33 - golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 34 - gorm.io/gorm v1.25.9 34 + golang.org/x/crypto v0.43.0 35 + golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da 36 + gorm.io/gorm v1.31.0 35 37 ) 36 38 37 39 require ( 40 + cel.dev/expr v0.24.0 // indirect 41 + cloud.google.com/go v0.121.3 // indirect 42 + cloud.google.com/go/auth v0.16.2 // indirect 43 + cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect 44 + cloud.google.com/go/compute/metadata v0.7.0 // indirect 45 + cloud.google.com/go/iam v1.5.2 // indirect 46 + cloud.google.com/go/monitoring v1.24.2 // indirect 47 + cloud.google.com/go/storage v1.55.0 // indirect 48 + dario.cat/mergo v1.0.2 // indirect 49 + github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 // indirect 50 + github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20250520111509-a70c2aa677fa // indirect 51 + github.com/BurntSushi/toml v1.5.0 // indirect 52 + github.com/CycloneDX/cyclonedx-go v0.9.3 // indirect 53 + github.com/DataDog/zstd v1.5.7 // indirect 54 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 // indirect 55 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0 // indirect 56 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0 // indirect 57 + github.com/Intevation/gval v1.3.0 // indirect 58 + github.com/Intevation/jsonpath v0.2.1 // indirect 59 + github.com/Masterminds/goutils v1.1.1 // indirect 60 + github.com/Masterminds/semver/v3 v3.4.0 // indirect 61 + github.com/Masterminds/sprig/v3 v3.3.0 // indirect 62 + github.com/Microsoft/go-winio v0.6.2 // indirect 63 + github.com/Microsoft/hcsshim v0.13.0 // indirect 64 + github.com/OneOfOne/xxhash v1.2.8 // indirect 65 + github.com/ProtonMail/go-crypto v1.3.0 // indirect 38 66 github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b // indirect 67 + github.com/STARRY-S/zip v0.2.3 // indirect 68 + github.com/acobaugh/osrelease v0.1.0 // indirect 69 + github.com/adrg/xdg v0.5.3 // indirect 70 + github.com/agext/levenshtein v1.2.3 // indirect 71 + github.com/anchore/archiver/v3 v3.5.3-0.20241210171143-5b1d8d1c7c51 // indirect 72 + github.com/anchore/clio v0.0.0-20250715152405-a0fa658e5084 // indirect 73 + github.com/anchore/fangs v0.0.0-20250716230140-94c22408c232 // indirect 74 + github.com/anchore/go-collections v0.0.0-20251016125210-a3c352120e8c // indirect 75 + github.com/anchore/go-homedir v0.0.0-20250319154043-c29668562e4d // indirect 76 + github.com/anchore/go-logger v0.0.0-20250318195838-07ae343dd722 // indirect 77 + github.com/anchore/go-lzo v0.1.0 // indirect 78 + github.com/anchore/go-macholibre v0.0.0-20250320151634-807da7ad2331 // indirect 79 + github.com/anchore/go-rpmdb v0.0.0-20250516171929-f77691e1faec // indirect 80 + github.com/anchore/go-struct-converter v0.0.0-20250211213226-cce56d595160 // indirect 81 + github.com/anchore/go-sync v0.0.0-20250714163430-add63db73ad1 // indirect 82 + github.com/anchore/go-version v1.2.2-0.20210903204242-51efa5b487c4 // indirect 83 + github.com/anchore/packageurl-go v0.1.1-0.20250220190351-d62adb6e1115 // indirect 84 + github.com/anchore/stereoscope v0.1.11 // indirect 85 + github.com/andybalholm/brotli v1.2.0 // indirect 86 + github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect 87 + github.com/aquasecurity/go-pep440-version v0.0.1 // indirect 88 + github.com/aquasecurity/go-version v0.0.1 // indirect 89 + github.com/aws/aws-sdk-go-v2 v1.36.5 // indirect 90 + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 // indirect 91 + github.com/aws/aws-sdk-go-v2/config v1.29.17 // indirect 92 + github.com/aws/aws-sdk-go-v2/credentials v1.17.70 // indirect 93 + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.32 // indirect 94 + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.36 // indirect 95 + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.36 // indirect 96 + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect 97 + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 // indirect 98 + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.4 // indirect 99 + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2 // indirect 100 + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.17 // indirect 101 + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 // indirect 102 + github.com/aws/aws-sdk-go-v2/service/s3 v1.80.1 // indirect 103 + github.com/aws/aws-sdk-go-v2/service/sso v1.25.5 // indirect 104 + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3 // indirect 105 + github.com/aws/aws-sdk-go-v2/service/sts v1.34.0 // indirect 106 + github.com/aws/smithy-go v1.22.4 // indirect 107 + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect 39 108 github.com/aymerick/douceur v0.2.0 // indirect 109 + github.com/becheran/wildmatch-go v1.0.0 // indirect 40 110 github.com/beorn7/perks v1.0.1 // indirect 111 + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect 112 + github.com/bitnami/go-version v0.0.0-20250505154626-452e8c5ee607 // indirect 113 + github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb // indirect 114 + github.com/bmatcuk/doublestar/v2 v2.0.4 // indirect 115 + github.com/bmatcuk/doublestar/v4 v4.9.1 // indirect 116 + github.com/bodgit/plumbing v1.3.0 // indirect 117 + github.com/bodgit/sevenzip v1.6.1 // indirect 118 + github.com/bodgit/windows v1.0.1 // indirect 41 119 github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect 42 120 github.com/cenkalti/backoff/v4 v4.3.0 // indirect 43 121 github.com/cespare/xxhash/v2 v2.3.0 // indirect 122 + github.com/charmbracelet/colorprofile v0.3.1 // indirect 123 + github.com/charmbracelet/lipgloss v1.1.0 // indirect 124 + github.com/charmbracelet/x/ansi v0.10.1 // indirect 125 + github.com/charmbracelet/x/cellbuf v0.0.13 // indirect 126 + github.com/charmbracelet/x/term v0.2.1 // indirect 127 + github.com/cloudflare/circl v1.6.1 // indirect 128 + github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 // indirect 129 + github.com/containerd/cgroups/v3 v3.0.3 // indirect 130 + github.com/containerd/containerd v1.7.28 // indirect 131 + github.com/containerd/containerd/api v1.9.0 // indirect 132 + github.com/containerd/continuity v0.4.5 // indirect 133 + github.com/containerd/errdefs v1.0.0 // indirect 134 + github.com/containerd/errdefs/pkg v0.3.0 // indirect 135 + github.com/containerd/fifo v1.1.0 // indirect 136 + github.com/containerd/log v0.1.0 // indirect 137 + github.com/containerd/platforms v0.2.1 // indirect 138 + github.com/containerd/stargz-snapshotter/estargz v0.16.3 // indirect 139 + github.com/containerd/ttrpc v1.2.7 // indirect 140 + github.com/containerd/typeurl/v2 v2.2.3 // indirect 44 141 github.com/coreos/go-systemd/v22 v22.5.0 // indirect 45 - github.com/davecgh/go-spew v1.1.1 // indirect 142 + github.com/cyphar/filepath-securejoin v0.4.1 // indirect 143 + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect 144 + github.com/deitch/magic v0.0.0-20240306090643-c67ab88f10cb // indirect 46 145 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect 47 - github.com/docker/docker-credential-helpers v0.8.2 // indirect 48 - github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect 146 + github.com/diskfs/go-diskfs v1.7.0 // indirect 147 + github.com/docker/cli v28.5.1+incompatible // indirect 148 + github.com/docker/distribution v2.8.3+incompatible // indirect 149 + github.com/docker/docker v28.5.1+incompatible // indirect 150 + github.com/docker/docker-credential-helpers v0.9.3 // indirect 151 + github.com/docker/go-connections v0.6.0 // indirect 152 + github.com/docker/go-events v0.0.0-20250114142523-c867878c5e32 // indirect 49 153 github.com/docker/go-metrics v0.0.1 // indirect 154 + github.com/docker/go-units v0.5.0 // indirect 155 + github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707 // indirect 156 + github.com/dustin/go-humanize v1.0.1 // indirect 157 + github.com/elliotchance/phpserialize v1.4.0 // indirect 158 + github.com/emirpasic/gods v1.18.1 // indirect 159 + github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect 160 + github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect 161 + github.com/facebookincubator/nvdtools v0.1.5 // indirect 162 + github.com/fatih/color v1.18.0 // indirect 163 + github.com/felixge/fgprof v0.9.5 // indirect 50 164 github.com/felixge/httpsnoop v1.0.4 // indirect 165 + github.com/fsnotify/fsnotify v1.9.0 // indirect 166 + github.com/gabriel-vasile/mimetype v1.4.10 // indirect 167 + github.com/github/go-spdx/v2 v2.3.4 // indirect 168 + github.com/glebarez/go-sqlite v1.22.0 // indirect 169 + github.com/glebarez/sqlite v1.11.0 // indirect 170 + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect 171 + github.com/go-git/go-billy/v5 v5.6.2 // indirect 172 + github.com/go-git/go-git/v5 v5.16.3 // indirect 51 173 github.com/go-jose/go-jose/v4 v4.1.2 // indirect 52 - github.com/go-logr/logr v1.4.2 // indirect 174 + github.com/go-logr/logr v1.4.3 // indirect 53 175 github.com/go-logr/stdr v1.2.2 // indirect 176 + github.com/go-restruct/restruct v1.2.0-alpha // indirect 177 + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect 178 + github.com/goccy/go-yaml v1.18.0 // indirect 54 179 github.com/gocql/gocql v1.7.0 // indirect 180 + github.com/gocsaf/csaf/v3 v3.3.0 // indirect 55 181 github.com/gogo/protobuf v1.3.2 // indirect 56 - github.com/golang/snappy v0.0.4 // indirect 182 + github.com/gohugoio/hashstructure v0.6.0 // indirect 183 + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect 184 + github.com/golang/snappy v1.0.0 // indirect 57 185 github.com/google/go-cmp v0.7.0 // indirect 186 + github.com/google/go-containerregistry v0.20.6 // indirect 58 187 github.com/google/go-querystring v1.1.0 // indirect 188 + github.com/google/licensecheck v0.3.1 // indirect 189 + github.com/google/pprof v0.0.0-20250630185457-6e76a2b096b5 // indirect 190 + github.com/google/s2a-go v0.1.9 // indirect 191 + github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect 192 + github.com/googleapis/gax-go/v2 v2.15.0 // indirect 193 + github.com/gookit/color v1.6.0 // indirect 59 194 github.com/gorilla/css v1.0.1 // indirect 60 195 github.com/gorilla/handlers v1.5.2 // indirect 61 196 github.com/gorilla/mux v1.8.1 // indirect 62 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0 // indirect 197 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 // indirect 63 198 github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect 199 + github.com/hako/durafmt v0.0.0-20210608085754-5c1018a4e16b // indirect 200 + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.65 // indirect 201 + github.com/hashicorp/errwrap v1.1.0 // indirect 64 202 github.com/hashicorp/go-cleanhttp v0.5.2 // indirect 203 + github.com/hashicorp/go-getter v1.8.2 // indirect 204 + github.com/hashicorp/go-multierror v1.1.1 // indirect 65 205 github.com/hashicorp/go-retryablehttp v0.7.5 // indirect 206 + github.com/hashicorp/go-version v1.7.0 // indirect 66 207 github.com/hashicorp/golang-lru v1.0.2 // indirect 67 208 github.com/hashicorp/golang-lru/arc/v2 v2.0.6 // indirect 68 209 github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect 210 + github.com/hashicorp/hcl/v2 v2.24.0 // indirect 211 + github.com/huandu/xstrings v1.5.0 // indirect 212 + github.com/iancoleman/strcase v0.3.0 // indirect 69 213 github.com/inconshreveable/mousetrap v1.1.0 // indirect 70 214 github.com/ipfs/bbloom v0.0.4 // indirect 71 215 github.com/ipfs/go-blockservice v0.5.2 // indirect ··· 86 230 github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect 87 231 github.com/jackc/pgx/v5 v5.5.0 // indirect 88 232 github.com/jackc/puddle/v2 v2.2.1 // indirect 233 + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect 89 234 github.com/jbenet/goprocess v0.1.4 // indirect 235 + github.com/jinzhu/copier v0.4.0 // indirect 90 236 github.com/jinzhu/inflection v1.0.0 // indirect 91 237 github.com/jinzhu/now v1.1.5 // indirect 92 238 github.com/jmespath/go-jmespath v0.4.0 // indirect 239 + github.com/kastenhq/goversion v0.0.0-20230811215019-93b2f8823953 // indirect 240 + github.com/kevinburke/ssh_config v1.2.0 // indirect 93 241 github.com/klauspost/cpuid/v2 v2.2.7 // indirect 242 + github.com/klauspost/pgzip v1.2.6 // indirect 243 + github.com/knqyf263/go-apk-version v0.0.0-20200609155635-041fdbb8563f // indirect 244 + github.com/knqyf263/go-deb-version v0.0.0-20241115132648-6f4aee6ccd23 // indirect 245 + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect 246 + github.com/masahiro331/go-mvn-version v0.0.0-20250131095131-f4974fa13b8a // indirect 247 + github.com/mattn/go-colorable v0.1.14 // indirect 94 248 github.com/mattn/go-isatty v0.0.20 // indirect 249 + github.com/mattn/go-runewidth v0.0.16 // indirect 250 + github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect 251 + github.com/mholt/archives v0.1.5 // indirect 252 + github.com/mikelolasagasti/xz v1.0.1 // indirect 253 + github.com/minio/minlz v1.0.1 // indirect 95 254 github.com/minio/sha256-simd v1.0.1 // indirect 255 + github.com/mitchellh/copystructure v1.2.0 // indirect 256 + github.com/mitchellh/go-homedir v1.1.0 // indirect 257 + github.com/mitchellh/go-wordwrap v1.0.1 // indirect 258 + github.com/mitchellh/reflectwalk v1.0.2 // indirect 259 + github.com/moby/docker-image-spec v1.3.1 // indirect 260 + github.com/moby/locker v1.0.1 // indirect 261 + github.com/moby/sys/mountinfo v0.7.2 // indirect 262 + github.com/moby/sys/sequential v0.6.0 // indirect 263 + github.com/moby/sys/signal v0.7.1 // indirect 264 + github.com/moby/sys/user v0.4.0 // indirect 265 + github.com/moby/sys/userns v0.1.0 // indirect 96 266 github.com/mr-tron/base58 v1.2.0 // indirect 267 + github.com/muesli/termenv v0.16.0 // indirect 97 268 github.com/multiformats/go-base32 v0.1.0 // indirect 98 269 github.com/multiformats/go-base36 v0.2.0 // indirect 99 270 github.com/multiformats/go-multibase v0.2.0 // indirect 100 271 github.com/multiformats/go-varint v0.0.7 // indirect 101 272 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect 102 - github.com/opencontainers/image-spec v1.1.0 // indirect 273 + github.com/ncruces/go-strftime v0.1.9 // indirect 274 + github.com/nix-community/go-nix v0.0.0-20250101154619-4bdde671e0a1 // indirect 275 + github.com/nwaples/rardecode v1.1.3 // indirect 276 + github.com/nwaples/rardecode/v2 v2.2.0 // indirect 277 + github.com/olekukonko/errors v1.1.0 // indirect 278 + github.com/olekukonko/ll v0.0.9 // indirect 279 + github.com/olekukonko/tablewriter v1.1.0 // indirect 280 + github.com/opencontainers/image-spec v1.1.1 // indirect 281 + github.com/opencontainers/runtime-spec v1.2.1 // indirect 282 + github.com/opencontainers/selinux v1.12.0 // indirect 103 283 github.com/opentracing/opentracing-go v1.2.0 // indirect 104 - github.com/pmezard/go-difflib v1.0.0 // indirect 284 + github.com/openvex/go-vex v0.2.7 // indirect 285 + github.com/package-url/packageurl-go v0.1.3 // indirect 286 + github.com/pandatix/go-cvss v0.6.2 // indirect 287 + github.com/pborman/indent v1.2.1 // indirect 288 + github.com/pelletier/go-toml v1.9.5 // indirect 289 + github.com/pelletier/go-toml/v2 v2.2.4 // indirect 290 + github.com/pierrec/lz4/v4 v4.1.22 // indirect 291 + github.com/pjbgf/sha1cd v0.4.0 // indirect 292 + github.com/pkg/errors v0.9.1 // indirect 293 + github.com/pkg/profile v1.7.0 // indirect 294 + github.com/pkg/xattr v0.4.12 // indirect 295 + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect 296 + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect 105 297 github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f // indirect 106 298 github.com/prometheus/client_golang v1.20.5 // indirect 107 299 github.com/prometheus/client_model v0.6.1 // indirect ··· 110 302 github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5 // indirect 111 303 github.com/redis/go-redis/extra/redisotel/v9 v9.0.5 // indirect 112 304 github.com/redis/go-redis/v9 v9.7.3 // indirect 113 - github.com/sirupsen/logrus v1.9.3 // indirect 305 + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect 306 + github.com/rivo/uniseg v0.4.7 // indirect 307 + github.com/rust-secure-code/go-rustaudit v0.0.0-20250226111315-e20ec32e963c // indirect 308 + github.com/sagikazarmark/locafero v0.9.0 // indirect 309 + github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d // indirect 310 + github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 // indirect 311 + github.com/sassoftware/go-rpmutils v0.4.0 // indirect 312 + github.com/scylladb/go-set v1.0.3-0.20200225121959-cc7b2070d91e // indirect 313 + github.com/sergi/go-diff v1.4.0 // indirect 314 + github.com/shopspring/decimal v1.4.0 // indirect 315 + github.com/sirupsen/logrus v1.9.4-0.20230606125235-dd1b4c2e81af // indirect 316 + github.com/skeema/knownhosts v1.3.1 // indirect 317 + github.com/sorairolake/lzip-go v0.3.8 // indirect 318 + github.com/sourcegraph/conc v0.3.0 // indirect 114 319 github.com/spaolacci/murmur3 v1.1.0 // indirect 115 - github.com/spf13/pflag v1.0.5 // indirect 320 + github.com/spdx/gordf v0.0.0-20250128162952-000978ccd6fb // indirect 321 + github.com/spdx/tools-golang v0.5.5 // indirect 322 + github.com/spf13/afero v1.15.0 // indirect 323 + github.com/spf13/cast v1.9.2 // indirect 324 + github.com/spf13/pflag v1.0.9 // indirect 325 + github.com/spf13/viper v1.20.1 // indirect 326 + github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect 327 + github.com/subosito/gotenv v1.6.0 // indirect 328 + github.com/sylabs/sif/v2 v2.22.0 // indirect 329 + github.com/sylabs/squashfs v1.0.6 // indirect 330 + github.com/therootcompany/xz v1.0.1 // indirect 331 + github.com/ulikunitz/xz v0.5.15 // indirect 332 + github.com/vbatts/go-mtree v0.6.0 // indirect 333 + github.com/vbatts/tar-split v0.12.1 // indirect 334 + github.com/vifraa/gopom v1.0.0 // indirect 335 + github.com/wagoodman/go-partybus v0.0.0-20230516145632-8ccac152c651 // indirect 336 + github.com/wagoodman/go-progress v0.0.0-20230925121702-07e42b3cdba0 // indirect 337 + github.com/xanzy/ssh-agent v0.3.3 // indirect 338 + github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect 339 + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect 340 + github.com/zclconf/go-cty v1.16.3 // indirect 341 + github.com/zeebo/errs v1.4.0 // indirect 116 342 gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b // indirect 117 343 gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 // indirect 344 + go.etcd.io/bbolt v1.4.2 // indirect 345 + go.opencensus.io v0.24.0 // indirect 346 + go.opentelemetry.io/auto/sdk v1.1.0 // indirect 118 347 go.opentelemetry.io/contrib/bridges/prometheus v0.57.0 // indirect 348 + go.opentelemetry.io/contrib/detectors/gcp v1.37.0 // indirect 119 349 go.opentelemetry.io/contrib/exporters/autoexport v0.57.0 // indirect 120 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0 // indirect 350 + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.62.0 // indirect 351 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect 121 352 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0 // indirect 122 353 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0 // indirect 123 354 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.32.0 // indirect 124 355 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0 // indirect 125 - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0 // indirect 356 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 // indirect 126 357 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0 // indirect 127 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0 // indirect 358 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0 // indirect 128 359 go.opentelemetry.io/otel/exporters/prometheus v0.54.0 // indirect 129 360 go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.8.0 // indirect 130 - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.32.0 // indirect 361 + go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 // indirect 131 362 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.32.0 // indirect 132 363 go.opentelemetry.io/otel/log v0.8.0 // indirect 133 - go.opentelemetry.io/otel/metric v1.32.0 // indirect 134 - go.opentelemetry.io/otel/sdk v1.32.0 // indirect 364 + go.opentelemetry.io/otel/metric v1.37.0 // indirect 365 + go.opentelemetry.io/otel/sdk v1.37.0 // indirect 135 366 go.opentelemetry.io/otel/sdk/log v0.8.0 // indirect 136 - go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect 137 - go.opentelemetry.io/otel/trace v1.32.0 // indirect 138 - go.opentelemetry.io/proto/otlp v1.3.1 // indirect 367 + go.opentelemetry.io/otel/sdk/metric v1.37.0 // indirect 368 + go.opentelemetry.io/otel/trace v1.37.0 // indirect 369 + go.opentelemetry.io/proto/otlp v1.4.0 // indirect 139 370 go.uber.org/atomic v1.11.0 // indirect 140 371 go.uber.org/multierr v1.11.0 // indirect 141 372 go.uber.org/zap v1.26.0 // indirect 142 - golang.org/x/net v0.37.0 // indirect 143 - golang.org/x/sync v0.15.0 // indirect 144 - golang.org/x/sys v0.33.0 // indirect 145 - golang.org/x/text v0.26.0 // indirect 146 - golang.org/x/time v0.6.0 // indirect 147 - google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 // indirect 148 - google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect 149 - google.golang.org/grpc v1.68.0 // indirect 150 - google.golang.org/protobuf v1.35.1 // indirect 373 + go.yaml.in/yaml/v3 v3.0.4 // indirect 374 + go4.org v0.0.0-20230225012048-214862532bf5 // indirect 375 + golang.org/x/exp v0.0.0-20250711185948-6ae5c78190dc // indirect 376 + golang.org/x/mod v0.29.0 // indirect 377 + golang.org/x/net v0.46.0 // indirect 378 + golang.org/x/oauth2 v0.30.0 // indirect 379 + golang.org/x/sync v0.17.0 // indirect 380 + golang.org/x/sys v0.37.0 // indirect 381 + golang.org/x/term v0.36.0 // indirect 382 + golang.org/x/text v0.30.0 // indirect 383 + golang.org/x/time v0.14.0 // indirect 384 + golang.org/x/tools v0.38.0 // indirect 385 + google.golang.org/api v0.242.0 // indirect 386 + google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79 // indirect 387 + google.golang.org/genproto/googleapis/api v0.0.0-20250715232539-7130f93afb79 // indirect 388 + google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79 // indirect 389 + google.golang.org/grpc v1.74.0 // indirect 390 + google.golang.org/protobuf v1.36.6 // indirect 151 391 gopkg.in/inf.v0 v0.9.1 // indirect 392 + gopkg.in/warnings.v0 v0.1.2 // indirect 152 393 gopkg.in/yaml.v2 v2.4.0 // indirect 153 394 gopkg.in/yaml.v3 v3.0.1 // indirect 154 395 gorm.io/driver/postgres v1.5.7 // indirect 155 396 lukechampine.com/blake3 v1.2.1 // indirect 397 + modernc.org/libc v1.66.10 // indirect 398 + modernc.org/mathutil v1.7.1 // indirect 399 + modernc.org/memory v1.11.0 // indirect 400 + modernc.org/sqlite v1.39.1 // indirect 401 + ) 402 + 403 + // Pin OpenTelemetry SDK to v1.32.0 for compatibility with distribution/distribution 404 + replace ( 405 + go.opentelemetry.io/otel/sdk => go.opentelemetry.io/otel/sdk v1.32.0 406 + go.opentelemetry.io/otel/sdk/log => go.opentelemetry.io/otel/sdk/log v0.8.0 407 + go.opentelemetry.io/otel/sdk/metric => go.opentelemetry.io/otel/sdk/metric v1.32.0 156 408 )
+1367 -77
go.sum
··· 1 - github.com/AdaLogics/go-fuzz-headers v0.0.0-20221103172237-443f56ff4ba8 h1:d+pBUmsteW5tM87xmVXHZ4+LibHRFn40SPAoZJOg2ak= 2 - github.com/AdaLogics/go-fuzz-headers v0.0.0-20221103172237-443f56ff4ba8/go.mod h1:i9fr2JpcEcY/IHEvzCM3qXUZYOQHgR89dt4es1CgMhc= 1 + cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= 2 + cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= 3 + cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= 4 + cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= 5 + cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= 6 + cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= 7 + cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= 8 + cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= 9 + cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= 10 + cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= 11 + cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= 12 + cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= 13 + cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= 14 + cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= 15 + cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= 16 + cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= 17 + cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= 18 + cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= 19 + cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= 20 + cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= 21 + cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= 22 + cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= 23 + cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= 24 + cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= 25 + cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= 26 + cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= 27 + cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= 28 + cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= 29 + cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= 30 + cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= 31 + cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= 32 + cloud.google.com/go v0.121.3 h1:84RD+hQXNdY5Sw/MWVAx5O9Aui/rd5VQ9HEcdN19afo= 33 + cloud.google.com/go v0.121.3/go.mod h1:6vWF3nJWRrEUv26mMB3FEIU/o1MQNVPG1iHdisa2SJc= 34 + cloud.google.com/go/auth v0.16.2 h1:QvBAGFPLrDeoiNjyfVunhQ10HKNYuOwZ5noee0M5df4= 35 + cloud.google.com/go/auth v0.16.2/go.mod h1:sRBas2Y1fB1vZTdurouM0AzuYQBMZinrUYL8EufhtEA= 36 + cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= 37 + cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= 38 + cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= 39 + cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= 40 + cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= 41 + cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= 42 + cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= 43 + cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= 44 + cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU= 45 + cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo= 46 + cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= 47 + cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= 48 + cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= 49 + cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= 50 + cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= 51 + cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= 52 + cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= 53 + cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= 54 + cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= 55 + cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM= 56 + cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U= 57 + cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= 58 + cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= 59 + cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= 60 + cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= 61 + cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= 62 + cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= 63 + cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= 64 + cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= 65 + cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= 66 + cloud.google.com/go/storage v1.55.0 h1:NESjdAToN9u1tmhVqhXCaCwYBuvEhZLLv0gBr+2znf0= 67 + cloud.google.com/go/storage v1.55.0/go.mod h1:ztSmTTwzsdXe5syLVS0YsbFxXuvEmEyZj7v7zChEmuY= 68 + cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4= 69 + cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI= 70 + dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= 71 + dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= 72 + dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= 73 + github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk= 74 + github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= 75 + github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20250520111509-a70c2aa677fa h1:x6kFzdPgBoLbyoNkA/jny0ENpoEz4wqY8lPTQL2DPkg= 76 + github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20250520111509-a70c2aa677fa/go.mod h1:gCLVsLfv1egrcZu+GoJATN5ts75F2s62ih/457eWzOw= 77 + github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= 78 + github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= 3 79 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 80 + github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= 81 + github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= 82 + github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= 83 + github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= 84 + github.com/CycloneDX/cyclonedx-go v0.9.3 h1:Pyk/lwavPz7AaZNvugKFkdWOm93MzaIyWmBwmBo3aUI= 85 + github.com/CycloneDX/cyclonedx-go v0.9.3/go.mod h1:vcK6pKgO1WanCdd61qx4bFnSsDJQ6SbM2ZuMIgq86Jg= 86 + github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= 87 + github.com/DataDog/zstd v1.5.7 h1:ybO8RBeh29qrxIhCA9E8gKY6xfONU9T6G6aP9DTKfLE= 88 + github.com/DataDog/zstd v1.5.7/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= 89 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 h1:UQUsRi8WTzhZntp5313l+CHIAT95ojUI2lpP/ExlZa4= 90 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw= 91 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0 h1:owcC2UnmsZycprQ5RfRgjydWhuoxg71LUfyiQdijZuM= 92 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0/go.mod h1:ZPpqegjbE99EPKsu3iUWV22A04wzGPcAY/ziSIQEEgs= 93 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.53.0 h1:4LP6hvB4I5ouTbGgWtixJhgED6xdf67twf9PoY96Tbg= 94 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.53.0/go.mod h1:jUZ5LYlw40WMd07qxcQJD5M40aUxrfwqQX1g7zxYnrQ= 95 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0 h1:Ron4zCA/yk6U7WOBXhTJcDpsUBG9npumK6xw2auFltQ= 96 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0/go.mod h1:cSgYe11MCNYunTnRXrKiR/tHc0eoKjICUuWpNZoVCOo= 97 + github.com/Intevation/gval v1.3.0 h1:+Ze5sft5MmGbZrHj06NVUbcxCb67l9RaPTLMNr37mjw= 98 + github.com/Intevation/gval v1.3.0/go.mod h1:xmGyGpP5be12EL0P12h+dqiYG8qn2j3PJxIgkoOHO5o= 99 + github.com/Intevation/jsonpath v0.2.1 h1:rINNQJ0Pts5XTFEG+zamtdL7l9uuE1z0FBA+r55Sw+A= 100 + github.com/Intevation/jsonpath v0.2.1/go.mod h1:WnZ8weMmwAx/fAO3SutjYFU+v7DFreNYnibV7CiaYIw= 101 + github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= 102 + github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= 103 + github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= 104 + github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= 105 + github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs= 106 + github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0= 107 + github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= 108 + github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= 109 + github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= 110 + github.com/Microsoft/hcsshim v0.13.0 h1:/BcXOiS6Qi7N9XqUcv27vkIuVOkBEcWstd2pMlWSeaA= 111 + github.com/Microsoft/hcsshim v0.13.0/go.mod h1:9KWJ/8DgU+QzYGupX4tzMhRQE8h6w90lH6HAaclpEok= 112 + github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= 113 + github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8= 114 + github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= 115 + github.com/ProtonMail/go-crypto v1.3.0 h1:ILq8+Sf5If5DCpHQp4PbZdS1J7HDFRXz/+xKBiRGFrw= 116 + github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE= 4 117 github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b h1:5/++qT1/z812ZqBvqQt6ToRswSuPZ/B33m6xVHRzADU= 5 118 github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b/go.mod h1:4+EPqMRApwwE/6yo6CxiHoSnBzjRr3jsqer7frxP8y4= 119 + github.com/STARRY-S/zip v0.2.3 h1:luE4dMvRPDOWQdeDdUxUoZkzUIpTccdKdhHHsQJ1fm4= 120 + github.com/STARRY-S/zip v0.2.3/go.mod h1:lqJ9JdeRipyOQJrYSOtpNAiaesFO6zVDsE8GIGFaoSk= 121 + github.com/acobaugh/osrelease v0.1.0 h1:Yb59HQDGGNhCj4suHaFQQfBps5wyoKLSSX/J/+UifRE= 122 + github.com/acobaugh/osrelease v0.1.0/go.mod h1:4bFEs0MtgHNHBrmHCt67gNisnabCRAlzdVasCEGHTWY= 123 + github.com/adrg/xdg v0.5.3 h1:xRnxJXne7+oWDatRhR1JLnvuccuIeCoBu2rtuLqQB78= 124 + github.com/adrg/xdg v0.5.3/go.mod h1:nlTsY+NNiCBGCK2tpm09vRqfVzrc2fLmXGpBLF0zlTQ= 125 + github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= 126 + github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= 6 127 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= 128 + github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= 7 129 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= 130 + github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= 8 131 github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 h1:iW0a5ljuFxkLGPNem5Ui+KBjFJzKg4Fv2fnxe4dvzpM= 9 132 github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5/go.mod h1:Y2QMoi1vgtOIfc+6DhrMOGkLoGzqSV2rKp4Sm+opsyA= 133 + github.com/anchore/archiver/v3 v3.5.3-0.20241210171143-5b1d8d1c7c51 h1:yhk+P8lF3ZiROjmaVRao9WGTRo4b/wYjoKEiAHWrKwc= 134 + github.com/anchore/archiver/v3 v3.5.3-0.20241210171143-5b1d8d1c7c51/go.mod h1:nwuGSd7aZp0rtYt79YggCGafz1RYsclE7pi3fhLwvuw= 135 + github.com/anchore/clio v0.0.0-20250715152405-a0fa658e5084 h1:7DUAXEdAxoANPlDgxYiaSRKnWnTygvdrrWhnmvEjNLg= 136 + github.com/anchore/clio v0.0.0-20250715152405-a0fa658e5084/go.mod h1:42dWox8z4//b898OIELsQnSdYq9q1aCXkwp5fKF+BEU= 137 + github.com/anchore/fangs v0.0.0-20250716230140-94c22408c232 h1:aVC6r9h5wGNh8BYTW3CXxOdPoZzY/bBRWne1NvSTlO8= 138 + github.com/anchore/fangs v0.0.0-20250716230140-94c22408c232/go.mod h1:Zees1AEKNpXIRgdVAMYWITncarLFiPOtEQ7rl45V/h0= 139 + github.com/anchore/go-collections v0.0.0-20251016125210-a3c352120e8c h1:eoJXyC0n7DZ4YvySG/ETdYkTar2Due7eH+UmLK6FbrA= 140 + github.com/anchore/go-collections v0.0.0-20251016125210-a3c352120e8c/go.mod h1:1aiktV46ATCkuVg0O573ZrH56BUawTECPETbZyBcqT8= 141 + github.com/anchore/go-homedir v0.0.0-20250319154043-c29668562e4d h1:gT69osH9AsdpOfqxbRwtxcNnSZ1zg4aKy2BevO3ZBdc= 142 + github.com/anchore/go-homedir v0.0.0-20250319154043-c29668562e4d/go.mod h1:PhSnuFYknwPZkOWKB1jXBNToChBA+l0FjwOxtViIc50= 143 + github.com/anchore/go-logger v0.0.0-20250318195838-07ae343dd722 h1:2SqmFgE7h+Ql4VyBzhjLkRF/3gDrcpUBj8LjvvO6OOM= 144 + github.com/anchore/go-logger v0.0.0-20250318195838-07ae343dd722/go.mod h1:oFuE8YuTCM+spgMXhePGzk3asS94yO9biUfDzVTFqNw= 145 + github.com/anchore/go-lzo v0.1.0 h1:NgAacnzqPeGH49Ky19QKLBZEuFRqtTG9cdaucc3Vncs= 146 + github.com/anchore/go-lzo v0.1.0/go.mod h1:3kLx0bve2oN1iDwgM1U5zGku1Tfbdb0No5qp1eL1fIk= 147 + github.com/anchore/go-macholibre v0.0.0-20250320151634-807da7ad2331 h1:fWPHXkH3FQGVCyPkFMqNvMjQvdNMfkylBTsDqZC4lE4= 148 + github.com/anchore/go-macholibre v0.0.0-20250320151634-807da7ad2331/go.mod h1:DYvTRnWrlJ//6YOR83SiewmJiNFDEMRaOTnrzgco9FA= 149 + github.com/anchore/go-rpmdb v0.0.0-20250516171929-f77691e1faec h1:SjjPMOXTzpuU1ZME4XeoHyek+dry3/C7I8gzaCo02eg= 150 + github.com/anchore/go-rpmdb v0.0.0-20250516171929-f77691e1faec/go.mod h1:eQVa6QFGzKy0qMcnW2pez0XBczvgwSjw9vA23qifEyU= 151 + github.com/anchore/go-struct-converter v0.0.0-20221118182256-c68fdcfa2092/go.mod h1:rYqSE9HbjzpHTI74vwPvae4ZVYZd1lue2ta6xHPdblA= 152 + github.com/anchore/go-struct-converter v0.0.0-20250211213226-cce56d595160 h1:r8/1fxpbDMlQO6GgQiud1uL5eAu3p/NVUmfNx95/KY8= 153 + github.com/anchore/go-struct-converter v0.0.0-20250211213226-cce56d595160/go.mod h1:rYqSE9HbjzpHTI74vwPvae4ZVYZd1lue2ta6xHPdblA= 154 + github.com/anchore/go-sync v0.0.0-20250714163430-add63db73ad1 h1:UK1SWZf2xD5jq8QVeDdpt6wW31cO3RckBvPmGlDrTkg= 155 + github.com/anchore/go-sync v0.0.0-20250714163430-add63db73ad1/go.mod h1:hd0Ol9qFM8tRDdF50a+DpZEoB0HFNaEnCp/BSVyBRlg= 156 + github.com/anchore/go-testutils v0.0.0-20200925183923-d5f45b0d3c04 h1:VzprUTpc0vW0nnNKJfJieyH/TZ9UYAnTZs5/gHTdAe8= 157 + github.com/anchore/go-testutils v0.0.0-20200925183923-d5f45b0d3c04/go.mod h1:6dK64g27Qi1qGQZ67gFmBFvEHScy0/C8qhQhNe5B5pQ= 158 + github.com/anchore/go-version v1.2.2-0.20210903204242-51efa5b487c4 h1:rmZG77uXgE+o2gozGEBoUMpX27lsku+xrMwlmBZJtbg= 159 + github.com/anchore/go-version v1.2.2-0.20210903204242-51efa5b487c4/go.mod h1:Bkc+JYWjMCF8OyZ340IMSIi2Ebf3uwByOk6ho4wne1E= 160 + github.com/anchore/grype v0.102.0 h1:yf8YKGklukxIobObK2WQEYEp8mU3ofTnB4+cBR7S9vE= 161 + github.com/anchore/grype v0.102.0/go.mod h1:9EFzjrlx81aP37YKpxktXSbAhgJ8jNCm4jP9tim9jww= 162 + github.com/anchore/packageurl-go v0.1.1-0.20250220190351-d62adb6e1115 h1:ZyRCmiEjnoGJZ1+Ah0ZZ/mKKqNhGcUZBl0s7PTTDzvY= 163 + github.com/anchore/packageurl-go v0.1.1-0.20250220190351-d62adb6e1115/go.mod h1:KoYIv7tdP5+CC9VGkeZV4/vGCKsY55VvoG+5dadg4YI= 164 + github.com/anchore/stereoscope v0.1.11 h1:YP/XUNcJyMbOOPAWPkeZNCVlKKTRO2cnBTEeUW6I40Y= 165 + github.com/anchore/stereoscope v0.1.11/go.mod h1:G3PZlzPbxFhylj9pQwtqfVPaahuWmy/UCtv5FTIIMvg= 166 + github.com/anchore/syft v1.36.0 h1:vmrQz/eCPEdniHi2XRqEXxpvO3Q3wHL9o+YcE45XtUI= 167 + github.com/anchore/syft v1.36.0/go.mod h1:DdJMDHhI2V7pOjC/5FL98BKbG2DkbIT5zYmig6AORdU= 168 + github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= 169 + github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ= 170 + github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= 171 + github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= 172 + github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= 173 + github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= 174 + github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= 175 + github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= 176 + github.com/aquasecurity/go-pep440-version v0.0.1 h1:8VKKQtH2aV61+0hovZS3T//rUF+6GDn18paFTVS0h0M= 177 + github.com/aquasecurity/go-pep440-version v0.0.1/go.mod h1:3naPe+Bp6wi3n4l5iBFCZgS0JG8vY6FT0H4NGhFJ+i4= 178 + github.com/aquasecurity/go-version v0.0.1 h1:4cNl516agK0TCn5F7mmYN+xVs1E3S45LkgZk3cbaW2E= 179 + github.com/aquasecurity/go-version v0.0.1/go.mod h1:s1UU6/v2hctXcOa3OLwfj5d9yoXHa3ahf+ipSwEvGT0= 180 + github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= 181 + github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= 182 + github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= 183 + github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= 184 + github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= 185 + github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= 186 + github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= 187 + github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= 188 + github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= 10 189 github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= 11 190 github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= 191 + github.com/aws/aws-sdk-go-v2 v1.36.5 h1:0OF9RiEMEdDdZEMqF9MRjevyxAQcf6gY+E7vwBILFj0= 192 + github.com/aws/aws-sdk-go-v2 v1.36.5/go.mod h1:EYrzvCCN9CMUTa5+6lf6MM4tq3Zjp8UhSGR/cBsjai0= 193 + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 h1:zAybnyUQXIZ5mok5Jqwlf58/TFE7uvd3IAsa1aF9cXs= 194 + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10/go.mod h1:qqvMj6gHLR/EXWZw4ZbqlPbQUyenf4h82UQUlKc+l14= 195 + github.com/aws/aws-sdk-go-v2/config v1.29.17 h1:jSuiQ5jEe4SAMH6lLRMY9OVC+TqJLP5655pBGjmnjr0= 196 + github.com/aws/aws-sdk-go-v2/config v1.29.17/go.mod h1:9P4wwACpbeXs9Pm9w1QTh6BwWwJjwYvJ1iCt5QbCXh8= 197 + github.com/aws/aws-sdk-go-v2/credentials v1.17.70 h1:ONnH5CM16RTXRkS8Z1qg7/s2eDOhHhaXVd72mmyv4/0= 198 + github.com/aws/aws-sdk-go-v2/credentials v1.17.70/go.mod h1:M+lWhhmomVGgtuPOhO85u4pEa3SmssPTdcYpP/5J/xc= 199 + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.32 h1:KAXP9JSHO1vKGCr5f4O6WmlVKLFFXgWYAGoJosorxzU= 200 + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.32/go.mod h1:h4Sg6FQdexC1yYG9RDnOvLbW1a/P986++/Y/a+GyEM8= 201 + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.36 h1:SsytQyTMHMDPspp+spo7XwXTP44aJZZAC7fBV2C5+5s= 202 + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.36/go.mod h1:Q1lnJArKRXkenyog6+Y+zr7WDpk4e6XlR6gs20bbeNo= 203 + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.36 h1:i2vNHQiXUvKhs3quBR6aqlgJaiaexz/aNvdCktW/kAM= 204 + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.36/go.mod h1:UdyGa7Q91id/sdyHPwth+043HhmP6yP9MBHgbZM0xo8= 205 + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo= 206 + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= 207 + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcuz+RjeziUtNJackkM= 208 + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs= 209 + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.4 h1:CXV68E2dNqhuynZJPB80bhPQwAKqBWVer887figW6Jc= 210 + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.4/go.mod h1:/xFi9KtvBXP97ppCz1TAEvU1Uf66qvid89rbem3wCzQ= 211 + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2 h1:BCG7DCXEXpNCcpwCxg1oi9pkJWH2+eZzTn9MY56MbVw= 212 + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0= 213 + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.17 h1:t0E6FzREdtCsiLIoLCWsYliNsRBgyGD/MCK571qk4MI= 214 + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.17/go.mod h1:ygpklyoaypuyDvOM5ujWGrYWpAK3h7ugnmKCU/76Ys4= 215 + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 h1:moLQUoVq91LiqT1nbvzDukyqAlCv89ZmwaHw/ZFlFZg= 216 + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15/go.mod h1:ZH34PJUc8ApjBIfgQCFvkWcUDBtl/WTD+uiYHjd8igA= 217 + github.com/aws/aws-sdk-go-v2/service/s3 v1.80.1 h1:xYEAf/6QHiTZDccKnPMbsMwlau13GsDsTgdue3wmHGw= 218 + github.com/aws/aws-sdk-go-v2/service/s3 v1.80.1/go.mod h1:qbn305Je/IofWBJ4bJz/Q7pDEtnnoInw/dGt71v6rHE= 219 + github.com/aws/aws-sdk-go-v2/service/sso v1.25.5 h1:AIRJ3lfb2w/1/8wOOSqYb9fUKGwQbtysJ2H1MofRUPg= 220 + github.com/aws/aws-sdk-go-v2/service/sso v1.25.5/go.mod h1:b7SiVprpU+iGazDUqvRSLf5XmCdn+JtT1on7uNL6Ipc= 221 + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3 h1:BpOxT3yhLwSJ77qIY3DoHAQjZsc4HEGfMCE4NGy3uFg= 222 + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3/go.mod h1:vq/GQR1gOFLquZMSrxUK/cpvKCNVYibNyJ1m7JrU88E= 223 + github.com/aws/aws-sdk-go-v2/service/sts v1.34.0 h1:NFOJ/NXEGV4Rq//71Hs1jC/NvPs1ezajK+yQmkwnPV0= 224 + github.com/aws/aws-sdk-go-v2/service/sts v1.34.0/go.mod h1:7ph2tGpfQvwzgistp2+zga9f+bCjlQJPkPUmMgDSD7w= 225 + github.com/aws/smithy-go v1.22.4 h1:uqXzVZNuNexwc/xrh6Tb56u89WDlJY6HS+KC0S4QSjw= 226 + github.com/aws/smithy-go v1.22.4/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= 227 + github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= 228 + github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= 12 229 github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= 13 230 github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= 231 + github.com/becheran/wildmatch-go v1.0.0 h1:mE3dGGkTmpKtT4Z+88t8RStG40yN9T+kFEGj2PZFSzA= 232 + github.com/becheran/wildmatch-go v1.0.0/go.mod h1:gbMvj0NtVdJ15Mg/mH9uxk2R1QCistMyU7d9KFzroX4= 14 233 github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= 15 234 github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= 16 235 github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= ··· 18 237 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= 19 238 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= 20 239 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= 240 + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= 241 + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= 242 + github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= 21 243 github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY= 22 244 github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= 245 + github.com/bitnami/go-version v0.0.0-20250505154626-452e8c5ee607 h1:lBg3tHGquFySSblLi9zNi2iGNmVLRHBzVal2fqphCM8= 246 + github.com/bitnami/go-version v0.0.0-20250505154626-452e8c5ee607/go.mod h1:9iglf1GG4oNRJ39bZ5AZrjgAFD2RwQbXw6Qf7Cs47wo= 247 + github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb h1:m935MPodAbYS46DG4pJSv7WO+VECIWUQ7OJYSoTrMh4= 248 + github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= 23 249 github.com/bluesky-social/indigo v0.0.0-20251021193747-543ab1124beb h1:zzyqB1W/itfdIA5cnOZ7IFCJ6QtqwOsXltmLunL4sHw= 24 250 github.com/bluesky-social/indigo v0.0.0-20251021193747-543ab1124beb/go.mod h1:GuGAU33qKulpZCZNPcUeIQ4RW6KzNvOy7s8MSUXbAng= 251 + github.com/bmatcuk/doublestar/v2 v2.0.4 h1:6I6oUiT/sU27eE2OFcWqBhL1SwjyvQuOssxT4a1yidI= 252 + github.com/bmatcuk/doublestar/v2 v2.0.4/go.mod h1:QMmcs3H2AUQICWhfzLXz+IYln8lRQmTZRptLie8RgRw= 253 + github.com/bmatcuk/doublestar/v4 v4.9.1 h1:X8jg9rRZmJd4yRy7ZeNDRnM+T3ZfHv15JiBJ/avrEXE= 254 + github.com/bmatcuk/doublestar/v4 v4.9.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= 25 255 github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= 26 256 github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= 257 + github.com/bodgit/plumbing v1.3.0 h1:pf9Itz1JOQgn7vEOE7v7nlEfBykYqvUYioC61TwWCFU= 258 + github.com/bodgit/plumbing v1.3.0/go.mod h1:JOTb4XiRu5xfnmdnDJo6GmSbSbtSyufrsyZFByMtKEs= 259 + github.com/bodgit/sevenzip v1.6.1 h1:kikg2pUMYC9ljU7W9SaqHXhym5HyKm8/M/jd31fYan4= 260 + github.com/bodgit/sevenzip v1.6.1/go.mod h1:GVoYQbEVbOGT8n2pfqCIMRUaRjQ8F9oSqoBEqZh5fQ8= 261 + github.com/bodgit/windows v1.0.1 h1:tF7K6KOluPYygXa3Z2594zxlkbKPAOvqr97etrGNIz4= 262 + github.com/bodgit/windows v1.0.1/go.mod h1:a6JLwrB4KrTR5hBpp8FI9/9W9jJfeQ2h4XDXU74ZCdM= 263 + github.com/bradleyjkemp/cupaloy/v2 v2.8.0 h1:any4BmKE+jGIaMpnU8YgH/I2LPiLBufr6oMMlVBbn9M= 264 + github.com/bradleyjkemp/cupaloy/v2 v2.8.0/go.mod h1:bm7JXdkRd4BHJk9HpwqAI8BoAY1lps46Enkdqw6aRX0= 27 265 github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= 28 266 github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= 29 267 github.com/bsm/ginkgo/v2 v2.7.0/go.mod h1:AiKlXPm7ItEHNc/2+OkrNG4E0ITzojb9/xWzvQ9XZ9w= ··· 34 272 github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= 35 273 github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= 36 274 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 275 + github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= 276 + github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= 277 + github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= 278 + github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 279 + github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 37 280 github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 38 281 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= 39 282 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 283 + github.com/charmbracelet/bubbles v0.21.0 h1:9TdC97SdRVg/1aaXNVWfFH3nnLAwOXr8Fn6u6mfQdFs= 284 + github.com/charmbracelet/bubbles v0.21.0/go.mod h1:HF+v6QUR4HkEpz62dx7ym2xc71/KBHg+zKwJtMw+qtg= 285 + github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw= 286 + github.com/charmbracelet/bubbletea v1.3.10/go.mod h1:ORQfo0fk8U+po9VaNvnV95UPWA1BitP1E0N6xJPlHr4= 287 + github.com/charmbracelet/colorprofile v0.3.1 h1:k8dTHMd7fgw4bnFd7jXTLZrSU/CQrKnL3m+AxCzDz40= 288 + github.com/charmbracelet/colorprofile v0.3.1/go.mod h1:/GkGusxNs8VB/RSOh3fu0TJmQ4ICMMPApIIVn0KszZ0= 289 + github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= 290 + github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= 291 + github.com/charmbracelet/x/ansi v0.10.1 h1:rL3Koar5XvX0pHGfovN03f5cxLbCF2YvLeyz7D2jVDQ= 292 + github.com/charmbracelet/x/ansi v0.10.1/go.mod h1:3RQDQ6lDnROptfpWuUVIUG64bD2g2BgntdxH0Ya5TeE= 293 + github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k= 294 + github.com/charmbracelet/x/cellbuf v0.0.13/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs= 295 + github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= 296 + github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= 297 + github.com/chromedp/cdproto v0.0.0-20230802225258-3cf4e6d46a89/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs= 298 + github.com/chromedp/chromedp v0.9.2/go.mod h1:LkSXJKONWTCHAfQasKFUZI+mxqS4tZqhmtGzzhLsnLs= 299 + github.com/chromedp/sysutil v1.0.0/go.mod h1:kgWmDdq8fTzXYcKIBqIYvRRTnYb9aNS9moAV0xufSww= 300 + github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= 301 + github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= 302 + github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= 303 + github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= 304 + github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= 305 + github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= 306 + github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= 307 + github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= 308 + github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= 309 + github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0= 310 + github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= 311 + github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= 312 + github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= 313 + github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= 314 + github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= 315 + github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= 316 + github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= 317 + github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= 318 + github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= 319 + github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= 320 + github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= 321 + github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 h1:aQ3y1lwWyqYPiWZThqv1aFbZMiM9vblcSArJRf2Irls= 322 + github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= 323 + github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0= 324 + github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0= 325 + github.com/containerd/containerd v1.7.28 h1:Nsgm1AtcmEh4AHAJ4gGlNSaKgXiNccU270Dnf81FQ3c= 326 + github.com/containerd/containerd v1.7.28/go.mod h1:azUkWcOvHrWvaiUjSQH0fjzuHIwSPg1WL5PshGP4Szs= 327 + github.com/containerd/containerd/api v1.9.0 h1:HZ/licowTRazus+wt9fM6r/9BQO7S0vD5lMcWspGIg0= 328 + github.com/containerd/containerd/api v1.9.0/go.mod h1:GhghKFmTR3hNtyznBoQ0EMWr9ju5AqHjcZPsSpTKutI= 329 + github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4= 330 + github.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE= 331 + github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= 332 + github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= 333 + github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= 334 + github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= 335 + github.com/containerd/fifo v1.1.0 h1:4I2mbh5stb1u6ycIABlBw9zgtlK8viPI9QkQNRQEEmY= 336 + github.com/containerd/fifo v1.1.0/go.mod h1:bmC4NWMbXlt2EZ0Hc7Fx7QzTFxgPID13eH0Qu+MAb2o= 337 + github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= 338 + github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= 339 + github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= 340 + github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= 341 + github.com/containerd/stargz-snapshotter/estargz v0.16.3 h1:7evrXtoh1mSbGj/pfRccTampEyKpjpOnS3CyiV1Ebr8= 342 + github.com/containerd/stargz-snapshotter/estargz v0.16.3/go.mod h1:uyr4BfYfOj3G9WBVE8cOlQmXAbPN9VEQpBBeJIuOipU= 343 + github.com/containerd/ttrpc v1.2.7 h1:qIrroQvuOL9HQ1X6KHe2ohc7p+HP/0VE6XPU7elJRqQ= 344 + github.com/containerd/ttrpc v1.2.7/go.mod h1:YCXHsb32f+Sq5/72xHubdiJRQY9inL4a4ZQrAbN1q9o= 345 + github.com/containerd/typeurl/v2 v2.2.3 h1:yNA/94zxWdvYACdYO8zofhrTVuQY73fFU1y++dYSw40= 346 + github.com/containerd/typeurl/v2 v2.2.3/go.mod h1:95ljDnPfD3bAbDJRugOiShd/DlAAsxGtUBhJxIn7SCk= 347 + github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= 348 + github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= 40 349 github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= 41 350 github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= 42 351 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= 43 - github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= 352 + github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= 353 + github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= 44 354 github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0= 45 355 github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis= 46 - github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= 47 - github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= 356 + github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s= 357 + github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= 48 358 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 49 - github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 50 359 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 360 + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= 361 + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 51 362 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= 52 363 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= 364 + github.com/deitch/magic v0.0.0-20240306090643-c67ab88f10cb h1:4W/2rQ3wzEimF5s+J6OY3ODiQtJZ5W1sForSgogVXkY= 365 + github.com/deitch/magic v0.0.0-20240306090643-c67ab88f10cb/go.mod h1:B3tI9iGHi4imdLi4Asdha1Sc6feLMTfPLXh9IUYmysk= 366 + github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1/go.mod h1:+hnT3ywWDTAFrW5aE+u2Sa/wT555ZqwoCS+pk3p6ry4= 53 367 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= 54 368 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= 369 + github.com/diskfs/go-diskfs v1.7.0 h1:vonWmt5CMowXwUc79jWyGrf2DIMeoOjkLlMnQYGVOs8= 370 + github.com/diskfs/go-diskfs v1.7.0/go.mod h1:LhQyXqOugWFRahYUSw47NyZJPezFzB9UELwhpszLP/k= 55 371 github.com/distribution/distribution/v3 v3.0.0 h1:q4R8wemdRQDClzoNNStftB2ZAfqOiN6UX90KJc4HjyM= 56 372 github.com/distribution/distribution/v3 v3.0.0/go.mod h1:tRNuFoZsUdyRVegq8xGNeds4KLjwLCRin/tTo6i1DhU= 57 373 github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= 58 374 github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= 59 - github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= 60 - github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= 61 - github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= 62 - github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= 375 + github.com/djherbis/times v1.6.0 h1:w2ctJ92J8fBvWPxugmXIv7Nz7Q3iDMKNx9v5ocVH20c= 376 + github.com/djherbis/times v1.6.0/go.mod h1:gOHeRAz2h+VJNZ5Gmc/o7iD9k4wW7NMVqieYCY99oc0= 377 + github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= 378 + github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= 379 + github.com/docker/cli v28.5.1+incompatible h1:ESutzBALAD6qyCLqbQSEf1a/U8Ybms5agw59yGVc+yY= 380 + github.com/docker/cli v28.5.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= 381 + github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= 382 + github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= 383 + github.com/docker/docker v28.5.1+incompatible h1:Bm8DchhSD2J6PsFzxC35TZo4TLGR2PdW/E69rU45NhM= 384 + github.com/docker/docker v28.5.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= 385 + github.com/docker/docker-credential-helpers v0.9.3 h1:gAm/VtF9wgqJMoxzT3Gj5p4AqIjCBS4wrsOh9yRqcz8= 386 + github.com/docker/docker-credential-helpers v0.9.3/go.mod h1:x+4Gbw9aGmChi3qTLZj8Dfn0TD20M/fuWy0E5+WDeCo= 387 + github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94= 388 + github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= 389 + github.com/docker/go-events v0.0.0-20250114142523-c867878c5e32 h1:EHZfspsnLAz8Hzccd67D5abwLiqoqym2jz/jOS39mCk= 390 + github.com/docker/go-events v0.0.0-20250114142523-c867878c5e32/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= 63 391 github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= 64 392 github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= 393 + github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= 394 + github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= 395 + github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707 h1:2tV76y6Q9BB+NEBasnqvs7e49aEBFI8ejC89PSnWH+4= 396 + github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707/go.mod h1:qssHWj60/X5sZFNxpG4HBPDHVqxNm4DfnCKgrbZOT+s= 397 + github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= 398 + github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= 399 + github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= 65 400 github.com/earthboundkid/versioninfo/v2 v2.24.1 h1:SJTMHaoUx3GzjjnUO1QzP3ZXK6Ee/nbWyCm58eY3oUg= 66 401 github.com/earthboundkid/versioninfo/v2 v2.24.1/go.mod h1:VcWEooDEuyUJnMfbdTh0uFN4cfEIg+kHMuWB2CDCLjw= 402 + github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o= 403 + github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE= 404 + github.com/elliotchance/phpserialize v1.4.0 h1:cAp/9+KSnEbUC8oYCE32n2n84BeW8HOY3HMDI8hG2OY= 405 + github.com/elliotchance/phpserialize v1.4.0/go.mod h1:gt7XX9+ETUcLXbtTKEuyrqW3lcLUAeS/AnGZ2e49TZs= 406 + github.com/elliotwutingfeng/asciiset v0.0.0-20230602022725-51bbb787efab h1:h1UgjJdAAhj+uPL68n7XASS6bU+07ZX1WJvVS2eyoeY= 407 + github.com/elliotwutingfeng/asciiset v0.0.0-20230602022725-51bbb787efab/go.mod h1:GLo/8fDswSAniFG+BFIaiSPcK610jyzgEhWYPQwuQdw= 408 + github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= 409 + github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= 410 + github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= 411 + github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= 412 + github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= 413 + github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= 414 + github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= 415 + github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= 416 + github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= 417 + github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= 418 + github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= 419 + github.com/envoyproxy/go-control-plane v0.13.4 h1:zEqyPVyku6IvWCFwux4x9RxkLOMUL+1vC9xUFv5l2/M= 420 + github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA= 421 + github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A= 422 + github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= 423 + github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= 424 + github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= 425 + github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= 426 + github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= 427 + github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= 428 + github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= 429 + github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= 430 + github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= 431 + github.com/facebookincubator/flog v0.0.0-20190930132826-d2511d0ce33c/go.mod h1:QGzNH9ujQ2ZUr/CjDGZGWeDAVStrWNjHeEcjJL96Nuk= 432 + github.com/facebookincubator/nvdtools v0.1.5 h1:jbmDT1nd6+k+rlvKhnkgMokrCAzHoASWE5LtHbX2qFQ= 433 + github.com/facebookincubator/nvdtools v0.1.5/go.mod h1:Kh55SAWnjckS96TBSrXI99KrEKH4iB0OJby3N8GRJO4= 434 + github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= 435 + github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= 436 + github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= 437 + github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= 438 + github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= 439 + github.com/fatih/set v0.2.1 h1:nn2CaJyknWE/6txyUDGwysr3G5QC6xWB/PtVjPBbeaA= 440 + github.com/fatih/set v0.2.1/go.mod h1:+RKtMCH+favT2+3YecHGxcc0b4KyVWA1QWWJUs4E0CI= 441 + github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= 442 + github.com/felixge/fgprof v0.9.5 h1:8+vR6yu2vvSKn08urWyEuxx75NWPEvybbkBirEpsbVY= 443 + github.com/felixge/fgprof v0.9.5/go.mod h1:yKl+ERSa++RYOs32d8K6WEXCB4uXdLls4ZaZPpayhMM= 67 444 github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= 68 445 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= 69 446 github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= 70 447 github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= 448 + github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= 449 + github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= 450 + github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= 451 + github.com/gabriel-vasile/mimetype v1.4.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIpU+bX4+ZK0= 452 + github.com/gabriel-vasile/mimetype v1.4.10/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= 453 + github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= 454 + github.com/github/go-spdx/v2 v2.3.4 h1:6VNAsYWvQge+SOeoubTlH81MY21d5uekXNIRGfXMNXo= 455 + github.com/github/go-spdx/v2 v2.3.4/go.mod h1:7LYNCshU2Gj17qZ0heJ5CQUKWWmpd98K7o93K8fJSMk= 456 + github.com/glebarez/go-sqlite v1.22.0 h1:uAcMJhaA6r3LHMTFgP0SifzgXg46yJkgxqyuyec+ruQ= 457 + github.com/glebarez/go-sqlite v1.22.0/go.mod h1:PlBIdHe0+aUEFn+r2/uthrWq4FxbzugL0L8Li6yQJbc= 458 + github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw= 459 + github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ= 460 + github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= 461 + github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= 71 462 github.com/go-chi/chi/v5 v5.2.3 h1:WQIt9uxdsAbgIYgid+BpYc+liqQZGMHRaUwp0JUcvdE= 72 463 github.com/go-chi/chi/v5 v5.2.3/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= 464 + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= 465 + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= 466 + github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM= 467 + github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU= 468 + github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= 469 + github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= 470 + github.com/go-git/go-git/v5 v5.16.3 h1:Z8BtvxZ09bYm/yYNgPKCzgWtaRqDTgIKRgIRHBfU6Z8= 471 + github.com/go-git/go-git/v5 v5.16.3/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8= 472 + github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= 473 + github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= 474 + github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= 73 475 github.com/go-jose/go-jose/v4 v4.1.2 h1:TK/7NqRQZfgAh+Td8AlsrvtPoUyiHh0LqVvokh+1vHI= 74 476 github.com/go-jose/go-jose/v4 v4.1.2/go.mod h1:22cg9HWM1pOlnRiY+9cQYJ9XHmya1bYW8OeDM6Ku6Oo= 75 477 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= 478 + github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= 76 479 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= 77 480 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= 78 481 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= 79 - github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= 80 - github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 482 + github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= 483 + github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 81 484 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= 82 485 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 83 486 github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg= 84 487 github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= 488 + github.com/go-restruct/restruct v1.2.0-alpha h1:2Lp474S/9660+SJjpVxoKuWX09JsXHSrdV7Nv3/gkvc= 489 + github.com/go-restruct/restruct v1.2.0-alpha/go.mod h1:KqrpKpn4M8OLznErihXTGLlsXFGeLxHUrLRRI/1YjGk= 490 + github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= 85 491 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= 492 + github.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U= 493 + github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= 494 + github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= 495 + github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= 86 496 github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= 497 + github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= 498 + github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= 499 + github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= 500 + github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw= 501 + github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= 87 502 github.com/gocql/gocql v1.7.0 h1:O+7U7/1gSN7QTEAaMEsJc1Oq2QHXvCWoF3DFK9HDHus= 88 503 github.com/gocql/gocql v1.7.0/go.mod h1:vnlvXyFZeLBF0Wy+RS8hrOdbn0UWsWtdg07XJnFxZ+4= 504 + github.com/gocsaf/csaf/v3 v3.3.0 h1:zQwCgBJfMMM/Q5vuIuj8eo5fVLcCKpaBa3t5uw6ku1U= 505 + github.com/gocsaf/csaf/v3 v3.3.0/go.mod h1:cDvnE5tnrO37OcOGWJsOl3mgfZjA4/EuC7TlDVRLGos= 89 506 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= 90 507 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= 91 508 github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= 92 509 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= 510 + github.com/gohugoio/hashstructure v0.6.0 h1:7wMB/2CfXoThFYhdWRGv3u3rUM761Cq29CxUW+NltUg= 511 + github.com/gohugoio/hashstructure v0.6.0/go.mod h1:lapVLk9XidheHG1IQ4ZSbyYrXcaILU1ZEP/+vno5rBQ= 93 512 github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= 94 513 github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= 514 + github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= 515 + github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 516 + github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 517 + github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 518 + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 519 + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= 520 + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= 521 + github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= 522 + github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= 523 + github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= 524 + github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= 525 + github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= 526 + github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= 527 + github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= 528 + github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= 529 + github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= 95 530 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 96 531 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 97 532 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 533 + github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= 534 + github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= 535 + github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= 536 + github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= 537 + github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= 538 + github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= 539 + github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= 540 + github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= 541 + github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= 542 + github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= 543 + github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= 544 + github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= 545 + github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= 546 + github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= 98 547 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= 99 548 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= 100 549 github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= 101 - github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= 102 - github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= 550 + github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= 551 + github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= 552 + github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= 553 + github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= 554 + github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= 103 555 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 556 + github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 557 + github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 558 + github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 559 + github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 560 + github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 104 561 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 562 + github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 563 + github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 564 + github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 565 + github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 566 + github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 567 + github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 105 568 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= 106 569 github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= 570 + github.com/google/go-containerregistry v0.20.6 h1:cvWX87UxxLgaH76b4hIvya6Dzz9qHB31qAwjAohdSTU= 571 + github.com/google/go-containerregistry v0.20.6/go.mod h1:T0x8MuoAoKX/873bkeSfLD2FAkwCDf9/HZgsFJ02E2Y= 107 572 github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= 108 573 github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= 109 574 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= 110 575 github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= 111 576 github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= 577 + github.com/google/licensecheck v0.3.1 h1:QoxgoDkaeC4nFrtGN1jV7IPmDCHFNIVh54e5hSt6sPs= 578 + github.com/google/licensecheck v0.3.1/go.mod h1:ORkR35t/JjW+emNKtfJDII0zlciG9JgbT7SmsohlHmY= 579 + github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= 580 + github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= 581 + github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= 582 + github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= 583 + github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= 584 + github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= 585 + github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= 586 + github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= 587 + github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= 588 + github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 589 + github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 590 + github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 591 + github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 592 + github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 593 + github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 594 + github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 595 + github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 596 + github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 597 + github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 598 + github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 599 + github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 600 + github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= 601 + github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= 602 + github.com/google/pprof v0.0.0-20250630185457-6e76a2b096b5 h1:xhMrHhTJ6zxu3gA4enFM9MLn9AY7613teCdFnlUVbSQ= 603 + github.com/google/pprof v0.0.0-20250630185457-6e76a2b096b5/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA= 112 604 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= 605 + github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= 606 + github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= 607 + github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 113 608 github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 114 609 github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 610 + github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= 611 + github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= 612 + github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= 613 + github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= 614 + github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= 615 + github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= 616 + github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo= 617 + github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= 618 + github.com/gookit/assert v0.1.1 h1:lh3GcawXe/p+cU7ESTZ5Ui3Sm/x8JWpIis4/1aF0mY0= 619 + github.com/gookit/assert v0.1.1/go.mod h1:jS5bmIVQZTIwk42uXl4lyj4iaaxx32tqH16CFj0VX2E= 620 + github.com/gookit/color v1.2.5/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= 621 + github.com/gookit/color v1.6.0 h1:JjJXBTk1ETNyqyilJhkTXJYYigHG24TM9Xa2M1xAhRA= 622 + github.com/gookit/color v1.6.0/go.mod h1:9ACFc7/1IpHGBW8RwuDm/0YEnhg3dwwXpoMsmtyHfjs= 115 623 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= 116 624 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= 117 625 github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= ··· 122 630 github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= 123 631 github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= 124 632 github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= 125 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0 h1:ad0vkEBuk23VJzZR9nkLVG0YAoN9coASF1GusYX6AlU= 126 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0/go.mod h1:igFoXX2ELCW06bol23DWPB5BEWfZISOzSP5K2sbLea0= 633 + github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= 634 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 h1:TmHmbvxPmaegwhDubVz0lICL0J5Ka2vwTzhoePEXsGE= 635 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0/go.mod h1:qztMSjm835F2bXf+5HKAPIS5qsmQDqZna/PgVt4rWtI= 127 636 github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= 128 637 github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= 638 + github.com/hako/durafmt v0.0.0-20210608085754-5c1018a4e16b h1:wDUNC2eKiL35DbLvsDhiblTUXHxcOPwQSCzi7xpQUN4= 639 + github.com/hako/durafmt v0.0.0-20210608085754-5c1018a4e16b/go.mod h1:VzxiSdG6j1pi7rwGm/xYI5RbtpBgM8sARDXlvEvxlu0= 640 + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.65 h1:81+kWbE1yErFBMjME0I5k3x3kojjKsWtPYHEAutoPow= 641 + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.65/go.mod h1:WtMzv9T++tfWVea+qB2MXoaqxw33S8bpJslzUike2mQ= 642 + github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= 643 + github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= 644 + github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= 645 + github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= 646 + github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= 647 + github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= 648 + github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= 129 649 github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= 130 650 github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= 131 - github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= 651 + github.com/hashicorp/go-getter v1.8.2 h1:CGCK+bZQLl44PYiwJweVzfpjg7bBwtuXu3AGcLiod2o= 652 + github.com/hashicorp/go-getter v1.8.2/go.mod h1:CUTt9x2bCtJ/sV8ihgrITL3IUE+0BE1j/e4n5P/GIM4= 132 653 github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= 654 + github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= 655 + github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= 656 + github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= 657 + github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= 658 + github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= 659 + github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= 660 + github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= 661 + github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= 662 + github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= 663 + github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= 664 + github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= 665 + github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= 133 666 github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= 134 667 github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= 668 + github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= 669 + github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= 670 + github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= 671 + github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= 672 + github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= 673 + github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= 674 + github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= 675 + github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= 676 + github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= 677 + github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= 135 678 github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= 136 679 github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= 137 680 github.com/hashicorp/golang-lru/arc/v2 v2.0.6 h1:4NU7uP5vSoK6TbaMj3NtY478TTAWLso/vL1gpNrInHg= 138 681 github.com/hashicorp/golang-lru/arc/v2 v2.0.6/go.mod h1:cfdDIX05DWvYV6/shsxDfa/OVcRieOt+q4FnM8x+Xno= 139 682 github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= 140 683 github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 684 + github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= 685 + github.com/hashicorp/hcl/v2 v2.24.0 h1:2QJdZ454DSsYGoaE6QheQZjtKZSUs9Nh2izTWiwQxvE= 686 + github.com/hashicorp/hcl/v2 v2.24.0/go.mod h1:oGoO1FIQYfn/AgyOhlg9qLC6/nOJPX3qGbkZpYAcqfM= 687 + github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= 688 + github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= 689 + github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= 690 + github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= 691 + github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= 692 + github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= 693 + github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= 694 + github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI= 695 + github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= 141 696 github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= 142 697 github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= 698 + github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= 699 + github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= 700 + github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= 701 + github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= 702 + github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= 703 + github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= 704 + github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw= 705 + github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 143 706 github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= 144 707 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 145 708 github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs= ··· 216 779 github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= 217 780 github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= 218 781 github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= 782 + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= 783 + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= 219 784 github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= 220 785 github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= 786 + github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= 787 + github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= 221 788 github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= 222 789 github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= 223 790 github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= ··· 226 793 github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= 227 794 github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= 228 795 github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= 796 + github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= 229 797 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= 230 798 github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 799 + github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 800 + github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 801 + github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= 802 + github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= 803 + github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= 231 804 github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= 232 805 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= 233 806 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= 807 + github.com/kastenhq/goversion v0.0.0-20230811215019-93b2f8823953 h1:WdAeg/imY2JFPc/9CST4bZ80nNJbiBFCAdSZCSgrS5Y= 808 + github.com/kastenhq/goversion v0.0.0-20230811215019-93b2f8823953/go.mod h1:6o+UrvuZWc4UTyBhQf0LGjW9Ld7qJxLz/OqvSOWWlEc= 809 + github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= 810 + github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= 234 811 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= 235 812 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= 813 + github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= 236 814 github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= 237 815 github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= 816 + github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= 238 817 github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= 239 818 github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= 819 + github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= 820 + github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= 821 + github.com/knqyf263/go-apk-version v0.0.0-20200609155635-041fdbb8563f h1:GvCU5GXhHq+7LeOzx/haG7HSIZokl3/0GkoUFzsRJjg= 822 + github.com/knqyf263/go-apk-version v0.0.0-20200609155635-041fdbb8563f/go.mod h1:q59u9px8b7UTj0nIjEjvmTWekazka6xIt6Uogz5Dm+8= 823 + github.com/knqyf263/go-deb-version v0.0.0-20241115132648-6f4aee6ccd23 h1:dWzdsqjh1p2gNtRKqNwuBvKqMNwnLOPLzVZT1n6DK7s= 824 + github.com/knqyf263/go-deb-version v0.0.0-20241115132648-6f4aee6ccd23/go.mod h1:lUaIXCWzf7BRKTY5iEcrYy1TfgbYLYVIS/B2vPkJzOc= 240 825 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 241 826 github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8= 242 827 github.com/koron/go-ssdp v0.0.3/go.mod h1:b2MxI6yh02pKrsyNoQUsk4+YNikaGhe4894J+Q5lDvA= 828 + github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= 243 829 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= 244 830 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 831 + github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= 245 832 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= 246 833 github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= 247 834 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= ··· 250 837 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= 251 838 github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= 252 839 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= 840 + github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs= 253 841 github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= 254 842 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= 255 843 github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= ··· 268 856 github.com/libp2p/go-nat v0.1.0/go.mod h1:X7teVkwRHNInVNWQiO/tAiAVRwSr5zoRz4YSTC3uRBM= 269 857 github.com/libp2p/go-netroute v0.2.1 h1:V8kVrpD8GK0Riv15/7VN6RbUQ3URNZVosw7H2v9tksU= 270 858 github.com/libp2p/go-netroute v0.2.1/go.mod h1:hraioZr0fhBjG0ZRXJJ6Zj2IVEVNx6tDTFQfSmcq7mQ= 859 + github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= 860 + github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= 861 + github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= 862 + github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= 863 + github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= 864 + github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= 865 + github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= 866 + github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= 867 + github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= 868 + github.com/masahiro331/go-mvn-version v0.0.0-20250131095131-f4974fa13b8a h1:eLvAzVoRfHEOl64OxFhepPf3vj7SKvXY/tFc3BS0b7s= 869 + github.com/masahiro331/go-mvn-version v0.0.0-20250131095131-f4974fa13b8a/go.mod h1:jZ3F25l7DbD7l7DcA8aj7eo1EZ84nbzcQHBB4lCSrI8= 870 + github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= 871 + github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= 872 + github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= 873 + github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= 874 + github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= 875 + github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= 876 + github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= 877 + github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= 878 + github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= 879 + github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= 880 + github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= 881 + github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= 271 882 github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= 272 883 github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= 273 884 github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= 885 + github.com/mattn/go-localereader v0.0.2-0.20220822084749-2491eb6c1c75 h1:P8UmIzZMYDR+NGImiFvErt6VWfIRPuGM+vyjiEdkmIw= 886 + github.com/mattn/go-localereader v0.0.2-0.20220822084749-2491eb6c1c75/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= 887 + github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= 888 + github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= 274 889 github.com/mattn/go-sqlite3 v1.14.32 h1:JD12Ag3oLy1zQA+BNn74xRgaBbdhbNIDYvQUEuuErjs= 275 890 github.com/mattn/go-sqlite3 v1.14.32/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= 276 891 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 892 + github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= 893 + github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= 894 + github.com/mholt/archives v0.1.5 h1:Fh2hl1j7VEhc6DZs2DLMgiBNChUux154a1G+2esNvzQ= 895 + github.com/mholt/archives v0.1.5/go.mod h1:3TPMmBLPsgszL+1As5zECTuKwKvIfj6YcwWPpeTAXF4= 277 896 github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk= 278 897 github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA= 898 + github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= 899 + github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= 900 + github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= 279 901 github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= 280 902 github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= 903 + github.com/mikelolasagasti/xz v1.0.1 h1:Q2F2jX0RYJUG3+WsM+FJknv+6eVjsjXNDV0KJXZzkD0= 904 + github.com/mikelolasagasti/xz v1.0.1/go.mod h1:muAirjiOUxPRXwm9HdDtB3uoRPrGnL85XHtokL9Hcgc= 905 + github.com/minio/minlz v1.0.1 h1:OUZUzXcib8diiX+JYxyRLIdomyZYzHct6EShOKtQY2A= 906 + github.com/minio/minlz v1.0.1/go.mod h1:qT0aEB35q79LLornSzeDH75LBf3aH1MV+jB5w9Wasec= 281 907 github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= 282 908 github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= 909 + github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= 910 + github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= 911 + github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= 912 + github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= 913 + github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= 914 + github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= 915 + github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= 916 + github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= 917 + github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= 918 + github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= 919 + github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= 920 + github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= 921 + github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= 922 + github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= 923 + github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= 924 + github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= 925 + github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= 926 + github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw= 927 + github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs= 928 + github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= 929 + github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= 930 + github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= 931 + github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= 932 + github.com/moby/sys/signal v0.7.1 h1:PrQxdvxcGijdo6UXXo/lU/TvHUWyPhj7UOpSo8tuvk0= 933 + github.com/moby/sys/signal v0.7.1/go.mod h1:Se1VGehYokAkrSQwL4tDzHvETwUZlnY7S5XtQ50mQp8= 934 + github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs= 935 + github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= 936 + github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= 937 + github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= 938 + github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ= 939 + github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc= 283 940 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= 284 941 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= 285 942 github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= 286 943 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= 944 + github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= 945 + github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= 946 + github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= 287 947 github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= 288 948 github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= 949 + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= 950 + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= 951 + github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= 952 + github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= 953 + github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= 954 + github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= 289 955 github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= 290 956 github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= 291 957 github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= ··· 309 975 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= 310 976 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 311 977 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= 978 + github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= 979 + github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= 980 + github.com/nix-community/go-nix v0.0.0-20250101154619-4bdde671e0a1 h1:kpt9ZfKcm+EDG4s40hMwE//d5SBgDjUOrITReV2u4aA= 981 + github.com/nix-community/go-nix v0.0.0-20250101154619-4bdde671e0a1/go.mod h1:qgCw4bBKZX8qMgGeEZzGFVT3notl42dBjNqO2jut0M0= 982 + github.com/nsf/jsondiff v0.0.0-20210926074059-1e845ec5d249 h1:NHrXEjTNQY7P0Zfx1aMrNhpgxHmow66XQtm0aQLY0AE= 983 + github.com/nsf/jsondiff v0.0.0-20210926074059-1e845ec5d249/go.mod h1:mpRZBD8SJ55OIICQ3iWH0Yz3cjzA61JdqMLoWXeB2+8= 984 + github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= 985 + github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= 986 + github.com/nwaples/rardecode/v2 v2.2.0 h1:4ufPGHiNe1rYJxYfehALLjup4Ls3ck42CWwjKiOqu0A= 987 + github.com/nwaples/rardecode/v2 v2.2.0/go.mod h1:7uz379lSxPe6j9nvzxUZ+n7mnJNgjsRNb6IbvGVHRmw= 988 + github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM= 989 + github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= 990 + github.com/olekukonko/ll v0.0.9 h1:Y+1YqDfVkqMWuEQMclsF9HUR5+a82+dxJuL1HHSRpxI= 991 + github.com/olekukonko/ll v0.0.9/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g= 992 + github.com/olekukonko/tablewriter v1.1.0 h1:N0LHrshF4T39KvI96fn6GT8HEjXRXYNDrDjKFDB7RIY= 993 + github.com/olekukonko/tablewriter v1.1.0/go.mod h1:5c+EBPeSqvXnLLgkm9isDdzR3wjfBkHR9Nhfp3NWrzo= 994 + github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= 995 + github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= 312 996 github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= 313 997 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= 314 - github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= 315 - github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= 998 + github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= 999 + github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= 1000 + github.com/opencontainers/runtime-spec v1.2.1 h1:S4k4ryNgEpxW1dzyqffOmhI1BHYcjzU8lpJfSlR0xww= 1001 + github.com/opencontainers/runtime-spec v1.2.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= 1002 + github.com/opencontainers/selinux v1.12.0 h1:6n5JV4Cf+4y0KNXW48TLj5DwfXpvWlxXplUkdTrmPb8= 1003 + github.com/opencontainers/selinux v1.12.0/go.mod h1:BTPX+bjVbWGXw7ZZWUbdENt8w0htPSrlgOOysQaU62U= 316 1004 github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= 317 1005 github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= 1006 + github.com/openvex/go-vex v0.2.7 h1:/pN3bqvS4QOc6WkkL0hbKzJuAtsUD9vmvk9IZkzD3Zc= 1007 + github.com/openvex/go-vex v0.2.7/go.mod h1:ZyQC3NXl9jjS53JOpBG3LAUXySkW8IlJ/GIhsnf5D54= 1008 + github.com/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde/go.mod h1:nZgzbfBr3hhjoZnS66nKrHmduYNpc34ny7RK4z5/HM0= 1009 + github.com/package-url/packageurl-go v0.1.3 h1:4juMED3hHiz0set3Vq3KeQ75KD1avthoXLtmE3I0PLs= 1010 + github.com/package-url/packageurl-go v0.1.3/go.mod h1:nKAWB8E6uk1MHqiS/lQb9pYBGH2+mdJ2PJc2s50dQY0= 1011 + github.com/pandatix/go-cvss v0.6.2 h1:TFiHlzUkT67s6UkelHmK6s1INKVUG7nlKYiWWDTITGI= 1012 + github.com/pandatix/go-cvss v0.6.2/go.mod h1:jDXYlQBZrc8nvrMUVVvTG8PhmuShOnKrxP53nOFkt8Q= 1013 + github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= 1014 + github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= 1015 + github.com/pborman/indent v1.2.1 h1:lFiviAbISHv3Rf0jcuh489bi06hj98JsVMtIDZQb9yM= 1016 + github.com/pborman/indent v1.2.1/go.mod h1:FitS+t35kIYtB5xWTZAPhnmrxcciEEOdbyrrpz5K6Vw= 1017 + github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= 1018 + github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= 1019 + github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= 1020 + github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= 1021 + github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= 318 1022 github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 h1:1/WtZae0yGtPq+TI6+Tv1WTxkukpXeMlviSxvL7SRgk= 319 1023 github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9/go.mod h1:x3N5drFsm2uilKKuuYo6LdyD8vZAW55sH/9w+pbo1sw= 1024 + github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= 1025 + github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= 1026 + github.com/pjbgf/sha1cd v0.4.0 h1:NXzbL1RvjTUi6kgYZCX3fPwwl27Q1LJndxtUDVfJGRY= 1027 + github.com/pjbgf/sha1cd v0.4.0/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A= 320 1028 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 321 1029 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 322 - github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 1030 + github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 1031 + github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 1032 + github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA= 1033 + github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo= 1034 + github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= 1035 + github.com/pkg/xattr v0.4.12 h1:rRTkSyFNTRElv6pkA3zpjHpQ90p/OdHQC1GmGh1aTjM= 1036 + github.com/pkg/xattr v0.4.12/go.mod h1:di8WF84zAKk8jzR1UBTEWh9AUlIZZ7M/JNt8e9B6ktU= 1037 + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= 1038 + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= 323 1039 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 1040 + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= 1041 + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 324 1042 github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f h1:VXTQfuJj9vKR4TCkEuWIckKvdHFeJH/huIFJ9/cXOB0= 325 1043 github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f/go.mod h1:/zvteZs/GwLtCgZ4BL6CBsk9IKIlexP43ObX9AxTqTw= 1044 + github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= 1045 + github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= 326 1046 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= 327 1047 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= 328 1048 github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= 1049 + github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= 329 1050 github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= 330 1051 github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= 331 1052 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= 332 1053 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= 1054 + github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= 1055 + github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= 333 1056 github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= 334 1057 github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= 335 1058 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= 336 1059 github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= 1060 + github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= 337 1061 github.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPAaSc= 338 1062 github.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw= 339 1063 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= 340 1064 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= 341 1065 github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= 1066 + github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= 342 1067 github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= 343 1068 github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= 344 1069 github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5 h1:EaDatTxkdHG+U3Bk4EUr+DZ7fOGwTfezUiUJMaIcaho= ··· 348 1073 github.com/redis/go-redis/v9 v9.0.5/go.mod h1:WqMKv5vnQbRuZstUwxQI195wHy+t4PuXDOjzMvcuQHk= 349 1074 github.com/redis/go-redis/v9 v9.7.3 h1:YpPyAayJV+XErNsatSElgRZZVCwXX9QzkKYNvO7x0wM= 350 1075 github.com/redis/go-redis/v9 v9.7.3/go.mod h1:bGUrSggJ9X9GUmZpZNEOQKaANxSGgOEBRltRTZHSvrA= 1076 + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= 1077 + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= 1078 + github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= 1079 + github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= 1080 + github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= 1081 + github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= 351 1082 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= 352 - github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= 353 - github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= 1083 + github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= 1084 + github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= 354 1085 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 355 1086 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 1087 + github.com/rust-secure-code/go-rustaudit v0.0.0-20250226111315-e20ec32e963c h1:8gOLsYwaY2JwlTMT4brS5/9XJdrdIbmk2obvQ748CC0= 1088 + github.com/rust-secure-code/go-rustaudit v0.0.0-20250226111315-e20ec32e963c/go.mod h1:kwM/7r/rVluTE8qJbHAffduuqmSv4knVQT2IajGvSiA= 1089 + github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= 1090 + github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= 1091 + github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= 1092 + github.com/sagikazarmark/locafero v0.9.0 h1:GbgQGNtTrEmddYDSAH9QLRyfAHY12md+8YFTqyMTC9k= 1093 + github.com/sagikazarmark/locafero v0.9.0/go.mod h1:UBUyz37V+EdMS3hDF3QWIiVr/2dPrx49OMO0Bn0hJqk= 1094 + github.com/sahilm/fuzzy v0.1.1 h1:ceu5RHF8DGgoi+/dR5PsECjCDH1BE3Fnmpo7aVXOdRA= 1095 + github.com/sahilm/fuzzy v0.1.1/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y= 1096 + github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d h1:hrujxIzL1woJ7AwssoOcM/tq5JjjG2yYOc8odClEiXA= 1097 + github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU= 1098 + github.com/sanity-io/litter v1.5.8 h1:uM/2lKrWdGbRXDrIq08Lh9XtVYoeGtcQxk9rtQ7+rYg= 1099 + github.com/sanity-io/litter v1.5.8/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U= 1100 + github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 h1:KRzFb2m7YtdldCEkzs6KqmJw4nqEVZGK7IN2kJkjTuQ= 1101 + github.com/santhosh-tekuri/jsonschema/v6 v6.0.2/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU= 1102 + github.com/sassoftware/go-rpmutils v0.4.0 h1:ojND82NYBxgwrV+mX1CWsd5QJvvEZTKddtCdFLPWhpg= 1103 + github.com/sassoftware/go-rpmutils v0.4.0/go.mod h1:3goNWi7PGAT3/dlql2lv3+MSN5jNYPjT5mVcQcIsYzI= 1104 + github.com/scylladb/go-set v1.0.3-0.20200225121959-cc7b2070d91e h1:7q6NSFZDeGfvvtIRwBrU/aegEYJYmvev0cHAwo17zZQ= 1105 + github.com/scylladb/go-set v1.0.3-0.20200225121959-cc7b2070d91e/go.mod h1:DkpGd78rljTxKAnTDPFqXSGxvETQnJyuSOQwsHycqfs= 1106 + github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= 1107 + github.com/sebdah/goldie/v2 v2.7.1 h1:PkBHymaYdtvEkZV7TmyqKxdmn5/Vcj+8TpATWZjnG5E= 1108 + github.com/sebdah/goldie/v2 v2.7.1/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI= 1109 + github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= 1110 + github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= 1111 + github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw= 1112 + github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= 1113 + github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= 1114 + github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= 1115 + github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= 356 1116 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= 357 1117 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= 358 - github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= 359 - github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= 1118 + github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= 1119 + github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= 1120 + github.com/sirupsen/logrus v1.9.4-0.20230606125235-dd1b4c2e81af h1:Sp5TG9f7K39yfB+If0vjp97vuT74F72r8hfRpP8jLU0= 1121 + github.com/sirupsen/logrus v1.9.4-0.20230606125235-dd1b4c2e81af/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= 1122 + github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8= 1123 + github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY= 360 1124 github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs= 361 1125 github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= 362 1126 github.com/smartystreets/goconvey v1.7.2 h1:9RBaZCeXEQ3UselpuwUQHltGVXvdwm6cv1hgR6gDIPg= 363 1127 github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM= 1128 + github.com/sorairolake/lzip-go v0.3.8 h1:j5Q2313INdTA80ureWYRhX+1K78mUXfMoPZCw/ivWik= 1129 + github.com/sorairolake/lzip-go v0.3.8/go.mod h1:JcBqGMV0frlxwrsE9sMWXDjqn3EeVf0/54YPsw66qkU= 1130 + github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= 1131 + github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= 1132 + github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= 364 1133 github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= 365 1134 github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= 366 - github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= 367 - github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= 368 - github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= 1135 + github.com/spdx/gordf v0.0.0-20201111095634-7098f93598fb/go.mod h1:uKWaldnbMnjsSAXRurWqqrdyZen1R7kxl8TkmWk2OyM= 1136 + github.com/spdx/gordf v0.0.0-20250128162952-000978ccd6fb h1:7G2Czq97VORM5xNRrD8tSQdhoXPRs8s+Otlc7st9TS0= 1137 + github.com/spdx/gordf v0.0.0-20250128162952-000978ccd6fb/go.mod h1:uKWaldnbMnjsSAXRurWqqrdyZen1R7kxl8TkmWk2OyM= 1138 + github.com/spdx/tools-golang v0.5.5 h1:61c0KLfAcNqAjlg6UNMdkwpMernhw3zVRwDZ2x9XOmk= 1139 + github.com/spdx/tools-golang v0.5.5/go.mod h1:MVIsXx8ZZzaRWNQpUDhC4Dud34edUYJYecciXgrw5vE= 1140 + github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= 1141 + github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= 1142 + github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= 1143 + github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= 1144 + github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= 1145 + github.com/spf13/cast v1.9.2 h1:SsGfm7M8QOFtEzumm7UZrZdLLquNdzFYfIbEXntcFbE= 1146 + github.com/spf13/cast v1.9.2/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= 1147 + github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= 1148 + github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= 1149 + github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= 1150 + github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= 369 1151 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= 1152 + github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= 1153 + github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= 1154 + github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= 1155 + github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4= 1156 + github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4= 1157 + github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= 1158 + github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= 370 1159 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 371 1160 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 1161 + github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= 1162 + github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= 1163 + github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= 1164 + github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= 372 1165 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= 373 1166 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= 374 1167 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 1168 + github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= 1169 + github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 375 1170 github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 376 - github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= 377 - github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 1171 + github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 1172 + github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= 1173 + github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= 1174 + github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= 1175 + github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 1176 + github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= 1177 + github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= 1178 + github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= 1179 + github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= 1180 + github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= 1181 + github.com/sylabs/sif/v2 v2.22.0 h1:Y+xXufp4RdgZe02SR3nWEg7S6q4tPWN237WHYzkDSKA= 1182 + github.com/sylabs/sif/v2 v2.22.0/go.mod h1:W1XhWTmG1KcG7j5a3KSYdMcUIFvbs240w/MMVW627hs= 1183 + github.com/sylabs/squashfs v1.0.6 h1:PvJcDzxr+vIm2kH56mEMbaOzvGu79gK7P7IX+R7BDZI= 1184 + github.com/sylabs/squashfs v1.0.6/go.mod h1:DlDeUawVXLWAsSRa085Eo0ZenGzAB32JdAUFaB0LZfE= 1185 + github.com/terminalstatic/go-xsd-validate v0.1.6 h1:TenYeQ3eY631qNi1/cTmLH/s2slHPRKTTHT+XSHkepo= 1186 + github.com/terminalstatic/go-xsd-validate v0.1.6/go.mod h1:18lsvYFofBflqCrvo1umpABZ99+GneNTw2kEEc8UPJw= 1187 + github.com/therootcompany/xz v1.0.1 h1:CmOtsn1CbtmyYiusbfmhmkpAAETj0wBIH6kCYaX+xzw= 1188 + github.com/therootcompany/xz v1.0.1/go.mod h1:3K3UH1yCKgBneZYhuQUvJ9HPD19UEXEI0BWbMn8qNMY= 1189 + github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= 1190 + github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= 1191 + github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= 1192 + github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= 378 1193 github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= 1194 + github.com/vbatts/go-mtree v0.6.0 h1:n4r+Tweta4oH0+zWfv77VmfvWXrO69smspK37xvzgMI= 1195 + github.com/vbatts/go-mtree v0.6.0/go.mod h1:W7bcG9PCn6lFY+ljGlZxx9DONkxL3v8a7HyN+PrSrjA= 1196 + github.com/vbatts/tar-split v0.12.1 h1:CqKoORW7BUWBe7UL/iqTVvkTBOF8UvOMKOIZykxnnbo= 1197 + github.com/vbatts/tar-split v0.12.1/go.mod h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA= 1198 + github.com/vifraa/gopom v1.0.0 h1:L9XlKbyvid8PAIK8nr0lihMApJQg/12OBvMA28BcWh0= 1199 + github.com/vifraa/gopom v1.0.0/go.mod h1:oPa1dcrGrtlO37WPDBm5SqHAT+wTgF8An1Q71Z6Vv4o= 1200 + github.com/wagoodman/go-partybus v0.0.0-20230516145632-8ccac152c651 h1:jIVmlAFIqV3d+DOxazTR9v+zgj8+VYuQBzPgBZvWBHA= 1201 + github.com/wagoodman/go-partybus v0.0.0-20230516145632-8ccac152c651/go.mod h1:b26F2tHLqaoRQf8DywqzVaV1MQ9yvjb0OMcNl7Nxu20= 1202 + github.com/wagoodman/go-progress v0.0.0-20230925121702-07e42b3cdba0 h1:0KGbf+0SMg+UFy4e1A/CPVvXn21f1qtWdeJwxZFoQG8= 1203 + github.com/wagoodman/go-progress v0.0.0-20230925121702-07e42b3cdba0/go.mod h1:jLXFoL31zFaHKAAyZUh+sxiTDFe1L1ZHrcK2T1itVKA= 379 1204 github.com/warpfork/go-testmark v0.12.1 h1:rMgCpJfwy1sJ50x0M0NgyphxYYPMOODIJHhsXyEHU0s= 380 1205 github.com/warpfork/go-testmark v0.12.1/go.mod h1:kHwy7wfvGSPh1rQJYKayD4AbtNaeyZdcGi9tNJTaa5Y= 381 1206 github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0 h1:GDDkbFiaK8jsSDJfjId/PEGEShv6ugrt4kYsC5UIDaQ= ··· 384 1209 github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11/go.mod h1:Wlo/SzPmxVp6vXpGt/zaXhHH0fn4IxgqZc82aKg6bpQ= 385 1210 github.com/whyrusleeping/cbor-gen v0.3.1 h1:82ioxmhEYut7LBVGhGq8xoRkXPLElVuh5mV67AFfdv0= 386 1211 github.com/whyrusleeping/cbor-gen v0.3.1/go.mod h1:pM99HXyEbSQHcosHc0iW7YFmwnscr+t9Te4ibko05so= 1212 + github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= 1213 + github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= 1214 + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= 1215 + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= 1216 + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= 1217 + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= 1218 + github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= 1219 + github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= 1220 + github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= 1221 + github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= 1222 + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= 1223 + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= 1224 + github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= 1225 + github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= 1226 + github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 387 1227 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 1228 + github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 388 1229 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 389 1230 github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= 1231 + github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 390 1232 github.com/yuin/goldmark v1.7.13 h1:GPddIs617DnBLFFVJFgpo1aBfe/4xcvMc3SB5t/D0pA= 391 1233 github.com/yuin/goldmark v1.7.13/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= 1234 + github.com/zclconf/go-cty v1.16.3 h1:osr++gw2T61A8KVYHoQiFbFd1Lh3JOCXc/jFLJXKTxk= 1235 + github.com/zclconf/go-cty v1.16.3/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= 1236 + github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo= 1237 + github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM= 1238 + github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= 1239 + github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= 392 1240 gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b h1:CzigHMRySiX3drau9C6Q5CAbNIApmLdat5jPMqChvDA= 393 1241 gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b/go.mod h1:/y/V339mxv2sZmYYR64O07VuCpdNZqCTwO8ZcouTMI8= 394 1242 gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 h1:qwDnMxjkyLmAFgcfgTnfJrmYKWhHnci3GjDqcZp1M3Q= 395 1243 gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02/go.mod h1:JTnUj0mpYiAsuZLmKjTx/ex3AtMowcCgnE7YNyCEP0I= 1244 + go.etcd.io/bbolt v1.4.2 h1:IrUHp260R8c+zYx/Tm8QZr04CX+qWS5PGfPdevhdm1I= 1245 + go.etcd.io/bbolt v1.4.2/go.mod h1:Is8rSHO/b4f3XigBC0lL0+4FwAQv3HXEEIgFMuKHceM= 1246 + go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= 1247 + go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= 1248 + go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= 1249 + go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= 1250 + go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= 1251 + go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= 1252 + go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= 1253 + go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= 1254 + go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= 1255 + go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= 1256 + go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= 1257 + go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= 1258 + go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= 1259 + go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= 396 1260 go.opentelemetry.io/contrib/bridges/prometheus v0.57.0 h1:UW0+QyeyBVhn+COBec3nGhfnFe5lwB0ic1JBVjzhk0w= 397 1261 go.opentelemetry.io/contrib/bridges/prometheus v0.57.0/go.mod h1:ppciCHRLsyCio54qbzQv0E4Jyth/fLWDTJYfvWpcSVk= 1262 + go.opentelemetry.io/contrib/detectors/gcp v1.37.0 h1:B+WbN9RPsvobe6q4vP6KgM8/9plR/HNjgGBrfcOlweA= 1263 + go.opentelemetry.io/contrib/detectors/gcp v1.37.0/go.mod h1:K5zQ3TT7p2ru9Qkzk0bKtCql0RGkPj9pRjpXgZJZ+rU= 398 1264 go.opentelemetry.io/contrib/exporters/autoexport v0.57.0 h1:jmTVJ86dP60C01K3slFQa2NQ/Aoi7zA+wy7vMOKD9H4= 399 1265 go.opentelemetry.io/contrib/exporters/autoexport v0.57.0/go.mod h1:EJBheUMttD/lABFyLXhce47Wr6DPWYReCzaZiXadH7g= 400 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0 h1:DheMAlT6POBP+gh8RUH19EOTnQIor5QE0uSRPtzCpSw= 401 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0/go.mod h1:wZcGmeVO9nzP67aYSLDqXNWK87EZWhi7JWj1v7ZXf94= 402 - go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= 403 - go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg= 1266 + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.62.0 h1:rbRJ8BBoVMsQShESYZ0FkvcITu8X8QNwJogcLUmDNNw= 1267 + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.62.0/go.mod h1:ru6KHrNtNHxM4nD/vd6QrLVWgKhxPYgblq4VAtNawTQ= 1268 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/XLML9ElpiHVDNwvqI0hIFlzV8dgIr35kV1kRU= 1269 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY= 1270 + go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= 1271 + go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= 404 1272 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0 h1:WzNab7hOOLzdDF/EoWCt4glhrbMPVMOO5JYTmpz36Ls= 405 1273 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0/go.mod h1:hKvJwTzJdp90Vh7p6q/9PAOd55dI6WA6sWj62a/JvSs= 406 1274 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0 h1:S+LdBGiQXtJdowoJoQPEtI52syEP/JYBUpjO49EQhV8= ··· 409 1277 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.32.0/go.mod h1:WXbYJTUaZXAbYd8lbgGuvih0yuCfOFC5RJoYnoLcGz8= 410 1278 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0 h1:t/Qur3vKSkUCcDVaSumWF2PKHt85pc7fRvFuoVT8qFU= 411 1279 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0/go.mod h1:Rl61tySSdcOJWoEgYZVtmnKdA0GeKrSqkHC1t+91CH8= 412 - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0 h1:IJFEoHiytixx8cMiVAO+GmHR6Frwu+u5Ur8njpFO6Ac= 413 - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0/go.mod h1:3rHrKNtLIoS0oZwkY2vxi+oJcwFRWdtUyRII+so45p8= 1280 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 h1:Vh5HayB/0HHfOQA7Ctx69E/Y/DcQSMPpKANYVMQ7fBA= 1281 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0/go.mod h1:cpgtDBaqD/6ok/UG0jT15/uKjAY8mRA53diogHBg3UI= 414 1282 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0 h1:9kV11HXBHZAvuPUZxmMWrH8hZn/6UnHX4K0mu36vNsU= 415 1283 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0/go.mod h1:JyA0FHXe22E1NeNiHmVp7kFHglnexDQ7uRWDiiJ1hKQ= 416 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0 h1:cMyu9O88joYEaI47CnQkxO1XZdpoTF9fEnW2duIddhw= 417 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0/go.mod h1:6Am3rn7P9TVVeXYG+wtcGE7IE1tsQ+bP3AuWcKt/gOI= 1284 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0 h1:wpMfgF8E1rkrT1Z6meFh1NDtownE9Ii3n3X2GJYjsaU= 1285 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0/go.mod h1:wAy0T/dUbs468uOlkT31xjvqQgEVXv58BRFWEgn5v/0= 418 1286 go.opentelemetry.io/otel/exporters/prometheus v0.54.0 h1:rFwzp68QMgtzu9PgP3jm9XaMICI6TsofWWPcBDKwlsU= 419 1287 go.opentelemetry.io/otel/exporters/prometheus v0.54.0/go.mod h1:QyjcV9qDP6VeK5qPyKETvNjmaaEc7+gqjh4SS0ZYzDU= 420 1288 go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.8.0 h1:CHXNXwfKWfzS65yrlB2PVds1IBZcdsX8Vepy9of0iRU= 421 1289 go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.8.0/go.mod h1:zKU4zUgKiaRxrdovSS2amdM5gOc59slmo/zJwGX+YBg= 422 - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.32.0 h1:SZmDnHcgp3zwlPBS2JX2urGYe/jBKEIT6ZedHRUyCz8= 423 - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.32.0/go.mod h1:fdWW0HtZJ7+jNpTKUR0GpMEDP69nR8YBJQxNiVCE3jk= 1290 + go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= 1291 + go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= 424 1292 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.32.0 h1:cC2yDI3IQd0Udsux7Qmq8ToKAx1XCilTQECZ0KDZyTw= 425 1293 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.32.0/go.mod h1:2PD5Ex6z8CFzDbTdOlwyNIUywRr1DN0ospafJM1wJ+s= 426 1294 go.opentelemetry.io/otel/log v0.8.0 h1:egZ8vV5atrUWUbnSsHn6vB8R21G2wrKqNiDt3iWertk= 427 1295 go.opentelemetry.io/otel/log v0.8.0/go.mod h1:M9qvDdUTRCopJcGRKg57+JSQ9LgLBrwwfC32epk5NX8= 428 - go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M= 429 - go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8= 1296 + go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= 1297 + go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= 430 1298 go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4= 431 1299 go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU= 432 1300 go.opentelemetry.io/otel/sdk/log v0.8.0 h1:zg7GUYXqxk1jnGF/dTdLPrK06xJdrXgqgFLnI4Crxvs= 433 1301 go.opentelemetry.io/otel/sdk/log v0.8.0/go.mod h1:50iXr0UVwQrYS45KbruFrEt4LvAdCaWWgIrsN3ZQggo= 434 1302 go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU= 435 1303 go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ= 436 - go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM= 437 - go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8= 438 - go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= 439 - go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 1304 + go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= 1305 + go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= 1306 + go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= 1307 + go.opentelemetry.io/proto/otlp v1.4.0 h1:TA9WRvW6zMwP+Ssb6fLoUIuirti1gGbP28GcKG1jgeg= 1308 + go.opentelemetry.io/proto/otlp v1.4.0/go.mod h1:PPBWZIP98o2ElSqI35IHfu7hIhSwvc5N38Jw8pXuGFY= 440 1309 go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= 441 1310 go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= 442 1311 go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= ··· 450 1319 go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= 451 1320 go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= 452 1321 go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= 1322 + go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= 453 1323 go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= 454 1324 go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= 455 1325 go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= 1326 + go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= 1327 + go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= 456 1328 go.yaml.in/yaml/v4 v4.0.0-rc.2 h1:/FrI8D64VSr4HtGIlUtlFMGsm7H7pWTbj6vOLVZcA6s= 457 1329 go.yaml.in/yaml/v4 v4.0.0-rc.2/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= 1330 + go4.org v0.0.0-20230225012048-214862532bf5 h1:nifaUDeh+rPaBCMPMQHZmvJf+QdpLFnuQPwx+LxVmtc= 1331 + go4.org v0.0.0-20230225012048-214862532bf5/go.mod h1:F57wTi5Lrj6WLyswp5EYV1ncrEbFGHD4hhz6S1ZYeaU= 458 1332 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= 1333 + golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= 459 1334 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 460 1335 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 1336 + golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 1337 + golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 1338 + golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= 461 1339 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 462 1340 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 463 - golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= 464 - golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= 465 - golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= 466 - golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= 1341 + golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 1342 + golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 1343 + golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= 1344 + golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= 1345 + golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= 1346 + golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 1347 + golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 1348 + golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= 1349 + golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= 1350 + golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= 1351 + golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= 1352 + golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= 1353 + golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= 1354 + golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= 1355 + golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= 1356 + golang.org/x/exp v0.0.0-20250711185948-6ae5c78190dc h1:TS73t7x3KarrNd5qAipmspBDS1rkMcgVG/fS1aRb4Rc= 1357 + golang.org/x/exp v0.0.0-20250711185948-6ae5c78190dc/go.mod h1:A+z0yzpGtvnG90cToK5n2tu8UJVP2XUATh+r+sfOOOc= 1358 + golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= 1359 + golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= 1360 + golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 1361 + golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= 1362 + golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 1363 + golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 1364 + golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 1365 + golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 467 1366 golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 1367 + golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= 1368 + golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= 1369 + golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= 1370 + golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= 1371 + golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= 1372 + golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= 1373 + golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= 468 1374 golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= 1375 + golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= 1376 + golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= 1377 + golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= 469 1378 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 470 1379 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 1380 + golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 1381 + golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 471 1382 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 472 - golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= 473 - golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= 1383 + golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= 1384 + golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= 1385 + golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= 1386 + golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= 1387 + golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 1388 + golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 1389 + golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 474 1390 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 1391 + golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 1392 + golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 475 1393 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 476 1394 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 1395 + golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 1396 + golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 1397 + golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 477 1398 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 478 1399 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1400 + golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1401 + golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1402 + golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1403 + golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1404 + golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1405 + golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1406 + golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 479 1407 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1408 + golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 1409 + golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 1410 + golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 1411 + golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 1412 + golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 1413 + golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 1414 + golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 1415 + golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 1416 + golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 480 1417 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 1418 + golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 1419 + golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 1420 + golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 1421 + golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 1422 + golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 1423 + golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= 481 1424 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= 482 - golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= 483 - golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= 1425 + golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= 1426 + golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 1427 + golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 1428 + golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 1429 + golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 1430 + golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 1431 + golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= 1432 + golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= 1433 + golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= 1434 + golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 1435 + golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 1436 + golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 1437 + golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 1438 + golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1439 + golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1440 + golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1441 + golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1442 + golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1443 + golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1444 + golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1445 + golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1446 + golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1447 + golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1448 + golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1449 + golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 1450 + golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= 1451 + golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= 1452 + golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 484 1453 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 485 1454 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 1455 + golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 486 1456 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 487 1457 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 1458 + golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 1459 + golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 488 1460 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 1461 + golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 489 1462 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 490 - golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= 491 - golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= 1463 + golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 1464 + golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= 1465 + golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= 1466 + golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 1467 + golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 492 1468 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 1469 + golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 493 1470 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 494 1471 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 1472 + golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 1473 + golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 495 1474 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1475 + golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1476 + golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1477 + golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1478 + golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1479 + golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1480 + golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 496 1481 golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1482 + golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1483 + golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1484 + golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1485 + golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1486 + golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1487 + golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1488 + golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1489 + golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1490 + golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1491 + golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1492 + golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1493 + golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1494 + golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1495 + golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1496 + golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1497 + golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1498 + golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1499 + golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1500 + golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1501 + golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1502 + golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1503 + golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1504 + golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 497 1505 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 498 1506 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1507 + golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1508 + golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1509 + golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1510 + golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1511 + golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1512 + golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1513 + golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1514 + golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1515 + golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 499 1516 golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1517 + golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 1518 + golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 500 1519 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1520 + golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1521 + golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1522 + golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1523 + golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 501 1524 golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1525 + golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1526 + golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1527 + golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1528 + golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1529 + golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1530 + golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1531 + golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1532 + golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1533 + golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1534 + golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1535 + golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 502 1536 golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 1537 + golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 503 1538 golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 504 1539 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 505 - golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= 506 - golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= 1540 + golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= 1541 + golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= 507 1542 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 1543 + golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 1544 + golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 1545 + golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q= 1546 + golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= 1547 + golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 508 1548 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 1549 + golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 1550 + golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 509 1551 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 510 - golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= 511 - golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= 512 - golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= 513 - golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= 1552 + golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 1553 + golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 1554 + golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 1555 + golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= 1556 + golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 1557 + golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= 1558 + golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= 1559 + golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 1560 + golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 1561 + golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 1562 + golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= 1563 + golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= 514 1564 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 1565 + golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 1566 + golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= 515 1567 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 1568 + golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 1569 + golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 516 1570 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 1571 + golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= 1572 + golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= 1573 + golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= 1574 + golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 517 1575 golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 1576 + golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 1577 + golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 1578 + golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 1579 + golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 1580 + golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 518 1581 golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 519 1582 golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 1583 + golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 1584 + golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 520 1585 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 1586 + golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 1587 + golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 1588 + golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1589 + golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1590 + golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1591 + golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1592 + golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1593 + golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1594 + golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1595 + golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1596 + golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1597 + golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 1598 + golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= 1599 + golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= 1600 + golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= 1601 + golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 1602 + golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 1603 + golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 1604 + golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 521 1605 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 1606 + golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= 1607 + golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= 1608 + golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= 1609 + golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= 1610 + golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 1611 + golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 1612 + golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 1613 + golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 522 1614 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 1615 + golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= 1616 + golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 1617 + golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 1618 + golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 1619 + golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 523 1620 golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 524 - golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= 525 - golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= 1621 + golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 1622 + golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= 1623 + golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= 526 1624 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 527 1625 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 528 1626 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 529 1627 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 530 - golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= 531 - golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= 532 - google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 h1:M0KvPgPmDZHPlbRbaNU1APr28TvwvvdUPlSv7PUvy8g= 533 - google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:dguCy7UOdZhTvLzDyt15+rOrawrpM4q7DD9dQ1P11P4= 534 - google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 h1:XVhgTWWV3kGQlwJHR3upFWZeTsei6Oks1apkZSeonIE= 535 - google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= 536 - google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= 537 - google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= 538 - google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= 539 - google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 1628 + golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= 1629 + golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= 1630 + google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= 1631 + google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= 1632 + google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= 1633 + google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= 1634 + google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= 1635 + google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= 1636 + google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= 1637 + google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 1638 + google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 1639 + google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 1640 + google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 1641 + google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 1642 + google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= 1643 + google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= 1644 + google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= 1645 + google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= 1646 + google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= 1647 + google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= 1648 + google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= 1649 + google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= 1650 + google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= 1651 + google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= 1652 + google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= 1653 + google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= 1654 + google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= 1655 + google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= 1656 + google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= 1657 + google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= 1658 + google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= 1659 + google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= 1660 + google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= 1661 + google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= 1662 + google.golang.org/api v0.242.0 h1:7Lnb1nfnpvbkCiZek6IXKdJ0MFuAZNAJKQfA1ws62xg= 1663 + google.golang.org/api v0.242.0/go.mod h1:cOVEm2TpdAGHL2z+UwyS+kmlGr3bVWQQ6sYEqkKje50= 1664 + google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= 1665 + google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= 1666 + google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= 1667 + google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= 1668 + google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= 1669 + google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= 1670 + google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= 1671 + google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= 1672 + google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= 1673 + google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= 1674 + google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= 1675 + google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= 1676 + google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 1677 + google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 1678 + google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= 1679 + google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 1680 + google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 1681 + google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 1682 + google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 1683 + google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 1684 + google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 1685 + google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= 1686 + google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1687 + google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1688 + google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1689 + google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1690 + google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1691 + google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1692 + google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1693 + google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1694 + google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 1695 + google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= 1696 + google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= 1697 + google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= 1698 + google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1699 + google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1700 + google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1701 + google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1702 + google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1703 + google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1704 + google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1705 + google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1706 + google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1707 + google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1708 + google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1709 + google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 1710 + google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= 1711 + google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= 1712 + google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= 1713 + google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= 1714 + google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= 1715 + google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= 1716 + google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= 1717 + google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= 1718 + google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= 1719 + google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= 1720 + google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= 1721 + google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= 1722 + google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= 1723 + google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= 1724 + google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= 1725 + google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= 1726 + google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 1727 + google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 1728 + google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 1729 + google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 1730 + google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 1731 + google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 1732 + google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 1733 + google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 1734 + google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79 h1:Nt6z9UHqSlIdIGJdz6KhTIs2VRx/iOsA5iE8bmQNcxs= 1735 + google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79/go.mod h1:kTmlBHMPqR5uCZPBvwa2B18mvubkjyY3CRLI0c6fj0s= 1736 + google.golang.org/genproto/googleapis/api v0.0.0-20250715232539-7130f93afb79 h1:iOye66xuaAK0WnkPuhQPUFy8eJcmwUXqGGP3om6IxX8= 1737 + google.golang.org/genproto/googleapis/api v0.0.0-20250715232539-7130f93afb79/go.mod h1:HKJDgKsFUnv5VAGeQjz8kxcgDP0HoE0iZNp0OdZNlhE= 1738 + google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79 h1:1ZwqphdOdWYXsUHgMpU/101nCtf/kSp9hOrcvFsnl10= 1739 + google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= 1740 + google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= 1741 + google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= 1742 + google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= 1743 + google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= 1744 + google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= 1745 + google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= 1746 + google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= 1747 + google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= 1748 + google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= 1749 + google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= 1750 + google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= 1751 + google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= 1752 + google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= 1753 + google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= 1754 + google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= 1755 + google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= 1756 + google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= 1757 + google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= 1758 + google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= 1759 + google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= 1760 + google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= 1761 + google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= 1762 + google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= 1763 + google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= 1764 + google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= 1765 + google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= 1766 + google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= 1767 + google.golang.org/grpc v1.74.0 h1:sxRSkyLxlceWQiqDofxDot3d4u7DyoHPc7SBXMj8gGY= 1768 + google.golang.org/grpc v1.74.0/go.mod h1:NZUaK8dAMUfzhK6uxZ+9511LtOrk73UGWOFoNvz7z+s= 1769 + google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 1770 + google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= 1771 + google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= 1772 + google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= 1773 + google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= 1774 + google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= 1775 + google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= 1776 + google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= 1777 + google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= 1778 + google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= 1779 + google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= 1780 + google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= 1781 + google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= 1782 + google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= 1783 + google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= 1784 + google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= 540 1785 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= 541 1786 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 542 1787 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 1788 + gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 543 1789 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= 544 1790 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= 545 1791 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= 546 1792 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= 547 1793 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= 1794 + gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= 1795 + gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= 1796 + gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= 548 1797 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 549 1798 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 1799 + gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 1800 + gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 1801 + gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 550 1802 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 551 1803 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= 552 1804 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= ··· 556 1808 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 557 1809 gorm.io/driver/postgres v1.5.7 h1:8ptbNJTDbEmhdr62uReG5BGkdQyeasu/FZHxI0IMGnM= 558 1810 gorm.io/driver/postgres v1.5.7/go.mod h1:3e019WlBaYI5o5LIdNV+LyxCMNtLOQETBXL2h4chKpA= 559 - gorm.io/driver/sqlite v1.5.5 h1:7MDMtUZhV065SilG62E0MquljeArQZNfJnjd9i9gx3E= 560 - gorm.io/driver/sqlite v1.5.5/go.mod h1:6NgQ7sQWAIFsPrJJl1lSNSu2TABh0ZZ/zm5fosATavE= 561 - gorm.io/gorm v1.25.9 h1:wct0gxZIELDk8+ZqF/MVnHLkA1rvYlBWUMv2EdsK1g8= 562 - gorm.io/gorm v1.25.9/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= 1811 + gorm.io/driver/sqlite v1.6.0 h1:WHRRrIiulaPiPFmDcod6prc4l2VGVWHz80KspNsxSfQ= 1812 + gorm.io/driver/sqlite v1.6.0/go.mod h1:AO9V1qIQddBESngQUKWL9yoH93HIeA1X6V633rBwyT8= 1813 + gorm.io/gorm v1.31.0 h1:0VlycGreVhK7RF/Bwt51Fk8v0xLiiiFdbGDPIZQ7mJY= 1814 + gorm.io/gorm v1.31.0/go.mod h1:XyQVbO2k6YkOis7C2437jSit3SsDK72s7n7rsSHd+Gs= 1815 + gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= 1816 + gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= 1817 + honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 1818 + honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 1819 + honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 1820 + honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 563 1821 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= 1822 + honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 1823 + honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 564 1824 lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI= 565 1825 lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= 1826 + modernc.org/cc/v4 v4.26.5 h1:xM3bX7Mve6G8K8b+T11ReenJOT+BmVqQj0FY5T4+5Y4= 1827 + modernc.org/cc/v4 v4.26.5/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= 1828 + modernc.org/ccgo/v4 v4.28.1 h1:wPKYn5EC/mYTqBO373jKjvX2n+3+aK7+sICCv4Fjy1A= 1829 + modernc.org/ccgo/v4 v4.28.1/go.mod h1:uD+4RnfrVgE6ec9NGguUNdhqzNIeeomeXf6CL0GTE5Q= 1830 + modernc.org/fileutil v1.3.40 h1:ZGMswMNc9JOCrcrakF1HrvmergNLAmxOPjizirpfqBA= 1831 + modernc.org/fileutil v1.3.40/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= 1832 + modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= 1833 + modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= 1834 + modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= 1835 + modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= 1836 + modernc.org/libc v1.66.10 h1:yZkb3YeLx4oynyR+iUsXsybsX4Ubx7MQlSYEw4yj59A= 1837 + modernc.org/libc v1.66.10/go.mod h1:8vGSEwvoUoltr4dlywvHqjtAqHBaw0j1jI7iFBTAr2I= 1838 + modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= 1839 + modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= 1840 + modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= 1841 + modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= 1842 + modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= 1843 + modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= 1844 + modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= 1845 + modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= 1846 + modernc.org/sqlite v1.39.1 h1:H+/wGFzuSCIEVCvXYVHX5RQglwhMOvtHSv+VtidL2r4= 1847 + modernc.org/sqlite v1.39.1/go.mod h1:9fjQZ0mB1LLP0GYrp39oOJXx/I2sxEnZtzCmEQIKvGE= 1848 + modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= 1849 + modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= 1850 + modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= 1851 + modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= 1852 + rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= 1853 + rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= 1854 + rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= 1855 + sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
+17 -6
pkg/appview/db/models.go
··· 151 151 IsMultiArch bool 152 152 } 153 153 154 + // VulnerabilitySummary represents vulnerability counts by severity 155 + type VulnerabilitySummary struct { 156 + Critical int 157 + High int 158 + Medium int 159 + Low int 160 + Total int 161 + } 162 + 154 163 // ManifestWithMetadata extends Manifest with tags and platform information 155 164 type ManifestWithMetadata struct { 156 165 Manifest 157 - Tags []string 158 - Platforms []PlatformInfo 159 - PlatformCount int 160 - IsManifestList bool 161 - Reachable bool // Whether the hold endpoint is reachable 162 - Pending bool // Whether health check is still in progress 166 + Tags []string 167 + Platforms []PlatformInfo 168 + PlatformCount int 169 + IsManifestList bool 170 + Reachable bool // Whether the hold endpoint is reachable 171 + Pending bool // Whether health check is still in progress 172 + Vulnerabilities *VulnerabilitySummary 173 + HasVulnerabilities bool 163 174 }
+213
pkg/appview/handlers/repository.go
··· 3 3 import ( 4 4 "context" 5 5 "database/sql" 6 + "encoding/json" 7 + "fmt" 6 8 "html/template" 9 + "io" 7 10 "log/slog" 8 11 "net/http" 12 + "net/url" 13 + "strconv" 9 14 "sync" 10 15 "time" 11 16 ··· 30 35 ReadmeCache *readme.Cache 31 36 } 32 37 38 + // queryVulnerabilities queries the hold service for vulnerability scan results 39 + func (h *RepositoryPageHandler) queryVulnerabilities(ctx context.Context, holdEndpoint string, digest string) (*db.VulnerabilitySummary, error) { 40 + // Skip if no hold endpoint 41 + if holdEndpoint == "" { 42 + return nil, nil 43 + } 44 + 45 + // Query referrers endpoint for vulnerability scan results 46 + // Match the artifactType used by the scanner in pkg/hold/scanner/storage.go 47 + artifactType := "application/vnd.atcr.vulnerabilities+json" 48 + 49 + // Properly encode query parameters (especially the + in the media type) 50 + queryParams := url.Values{} 51 + queryParams.Set("digest", digest) 52 + queryParams.Set("artifactType", artifactType) 53 + requestURL := fmt.Sprintf("%s/xrpc/io.atcr.hold.getReferrers?%s", holdEndpoint, queryParams.Encode()) 54 + 55 + req, err := http.NewRequestWithContext(ctx, "GET", requestURL, nil) 56 + if err != nil { 57 + return nil, err 58 + } 59 + 60 + resp, err := http.DefaultClient.Do(req) 61 + if err != nil { 62 + return nil, err 63 + } 64 + defer resp.Body.Close() 65 + 66 + if resp.StatusCode == http.StatusNotFound { 67 + // No scan results found 68 + return nil, nil 69 + } 70 + 71 + if resp.StatusCode != http.StatusOK { 72 + body, _ := io.ReadAll(resp.Body) 73 + return nil, fmt.Errorf("failed to query referrers: %s - %s", resp.Status, string(body)) 74 + } 75 + 76 + // Parse response 77 + var result struct { 78 + Referrers []struct { 79 + Annotations map[string]string `json:"annotations"` 80 + } `json:"referrers"` 81 + } 82 + 83 + if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { 84 + return nil, fmt.Errorf("failed to decode referrers response: %w", err) 85 + } 86 + 87 + slog.Debug("Received referrers response", 88 + "digest", digest, 89 + "referrerCount", len(result.Referrers)) 90 + 91 + // Find the most recent vulnerability scan result 92 + if len(result.Referrers) == 0 { 93 + return nil, nil 94 + } 95 + 96 + // Parse vulnerability counts from annotations 97 + // Match the annotation keys used by the scanner in pkg/hold/scanner/storage.go 98 + annotations := result.Referrers[0].Annotations 99 + slog.Debug("First referrer annotations", 100 + "digest", digest, 101 + "annotations", annotations, 102 + "annotationsLen", len(annotations)) 103 + 104 + summary := &db.VulnerabilitySummary{} 105 + 106 + if critical, ok := annotations["io.atcr.vuln.critical"]; ok { 107 + summary.Critical, _ = strconv.Atoi(critical) 108 + } 109 + if high, ok := annotations["io.atcr.vuln.high"]; ok { 110 + summary.High, _ = strconv.Atoi(high) 111 + } 112 + if medium, ok := annotations["io.atcr.vuln.medium"]; ok { 113 + summary.Medium, _ = strconv.Atoi(medium) 114 + } 115 + if low, ok := annotations["io.atcr.vuln.low"]; ok { 116 + summary.Low, _ = strconv.Atoi(low) 117 + } 118 + if total, ok := annotations["io.atcr.vuln.total"]; ok { 119 + summary.Total, _ = strconv.Atoi(total) 120 + } 121 + 122 + // If Total is missing or 0, calculate from individual counts 123 + if summary.Total == 0 { 124 + summary.Total = summary.Critical + summary.High + summary.Medium + summary.Low 125 + } 126 + 127 + slog.Debug("Parsed vulnerability summary", 128 + "digest", digest, 129 + "critical", summary.Critical, 130 + "high", summary.High, 131 + "medium", summary.Medium, 132 + "low", summary.Low, 133 + "total", summary.Total) 134 + 135 + return summary, nil 136 + } 137 + 138 + // HandleVulnerabilityDetails returns the full vulnerability report for a manifest 139 + func (h *RepositoryPageHandler) HandleVulnerabilityDetails(w http.ResponseWriter, r *http.Request) { 140 + digest := r.URL.Query().Get("digest") 141 + holdEndpoint := r.URL.Query().Get("holdEndpoint") 142 + 143 + if digest == "" || holdEndpoint == "" { 144 + http.Error(w, "digest and holdEndpoint required", http.StatusBadRequest) 145 + return 146 + } 147 + 148 + // Query referrers to get the vulnerability report digest 149 + artifactType := "application/vnd.atcr.vulnerabilities+json" 150 + queryParams := url.Values{} 151 + queryParams.Set("digest", digest) 152 + queryParams.Set("artifactType", artifactType) 153 + requestURL := fmt.Sprintf("%s/xrpc/io.atcr.hold.getReferrers?%s", holdEndpoint, queryParams.Encode()) 154 + 155 + req, err := http.NewRequestWithContext(r.Context(), "GET", requestURL, nil) 156 + if err != nil { 157 + http.Error(w, err.Error(), http.StatusInternalServerError) 158 + return 159 + } 160 + 161 + resp, err := http.DefaultClient.Do(req) 162 + if err != nil { 163 + http.Error(w, err.Error(), http.StatusInternalServerError) 164 + return 165 + } 166 + defer resp.Body.Close() 167 + 168 + if resp.StatusCode == http.StatusNotFound { 169 + http.Error(w, "No vulnerability scan found", http.StatusNotFound) 170 + return 171 + } 172 + 173 + if resp.StatusCode != http.StatusOK { 174 + http.Error(w, "Failed to query referrers", resp.StatusCode) 175 + return 176 + } 177 + 178 + // Parse response - now includes the vulnerability report data directly 179 + var result struct { 180 + Referrers []struct { 181 + Digest string `json:"digest"` 182 + Annotations map[string]string `json:"annotations"` 183 + ReportData map[string]interface{} `json:"reportData"` // The actual vulnerability report 184 + } `json:"referrers"` 185 + } 186 + 187 + if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { 188 + http.Error(w, "Failed to decode referrers response", http.StatusInternalServerError) 189 + return 190 + } 191 + 192 + if len(result.Referrers) == 0 { 193 + http.Error(w, "No vulnerability scan found", http.StatusNotFound) 194 + return 195 + } 196 + 197 + // Check if reportData is included 198 + if result.Referrers[0].ReportData == nil { 199 + http.Error(w, "Vulnerability report data not available", http.StatusNotFound) 200 + return 201 + } 202 + 203 + // Return the vulnerability report JSON directly 204 + w.Header().Set("Content-Type", "application/json") 205 + json.NewEncoder(w).Encode(result.Referrers[0].ReportData) 206 + } 207 + 33 208 func (h *RepositoryPageHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { 34 209 handle := chi.URLParam(r, "handle") 35 210 repository := chi.URLParam(r, "repository") ··· 58 233 if err != nil { 59 234 http.Error(w, err.Error(), http.StatusInternalServerError) 60 235 return 236 + } 237 + 238 + // Query vulnerability scan results for each manifest (concurrent with 2s timeout) 239 + { 240 + ctx, cancel := context.WithTimeout(r.Context(), 2*time.Second) 241 + defer cancel() 242 + 243 + var wg sync.WaitGroup 244 + var mu sync.Mutex 245 + 246 + for i := range manifests { 247 + // Skip manifest lists - only query for image manifests 248 + if manifests[i].IsManifestList { 249 + continue 250 + } 251 + 252 + wg.Add(1) 253 + go func(idx int) { 254 + defer wg.Done() 255 + 256 + vulnerabilities, err := h.queryVulnerabilities(ctx, manifests[idx].Manifest.HoldEndpoint, manifests[idx].Manifest.Digest) 257 + if err != nil { 258 + slog.Warn("Failed to query vulnerabilities", 259 + "digest", manifests[idx].Manifest.Digest, 260 + "error", err) 261 + return 262 + } 263 + 264 + mu.Lock() 265 + if vulnerabilities != nil && vulnerabilities.Total > 0 { 266 + manifests[idx].Vulnerabilities = vulnerabilities 267 + manifests[idx].HasVulnerabilities = true 268 + } 269 + mu.Unlock() 270 + }(i) 271 + } 272 + 273 + wg.Wait() 61 274 } 62 275 63 276 // Check health status for each manifest's hold endpoint (concurrent with 1s timeout)
+9 -2
pkg/appview/jetstream/processor.go
··· 107 107 // Detect manifest type 108 108 isManifestList := len(manifestRecord.Manifests) > 0 109 109 110 + // Parse CreatedAt timestamp 111 + createdAt, err := time.Parse(time.RFC3339, manifestRecord.CreatedAt) 112 + if err != nil { 113 + // If parsing fails, use current time 114 + createdAt = time.Now() 115 + } 116 + 110 117 // Prepare manifest for insertion (WITHOUT annotation fields) 111 118 manifest := &db.Manifest{ 112 119 DID: did, 113 120 Repository: manifestRecord.Repository, 114 121 Digest: manifestRecord.Digest, 115 122 MediaType: manifestRecord.MediaType, 116 - SchemaVersion: manifestRecord.SchemaVersion, 123 + SchemaVersion: int(manifestRecord.SchemaVersion), 117 124 HoldEndpoint: manifestRecord.HoldEndpoint, 118 - CreatedAt: manifestRecord.CreatedAt, 125 + CreatedAt: createdAt, 119 126 // Annotations removed - stored separately in repository_annotations table 120 127 } 121 128
+4 -4
pkg/appview/jetstream/processor_test.go
··· 148 148 MediaType: "application/vnd.oci.image.manifest.v1+json", 149 149 SchemaVersion: 2, 150 150 HoldEndpoint: "did:web:hold01.atcr.io", 151 - CreatedAt: time.Now(), 151 + CreatedAt: time.Now().String(), 152 152 Config: &atproto.BlobReference{ 153 153 Digest: "sha256:config123", 154 154 Size: 1234, ··· 247 247 MediaType: "application/vnd.oci.image.index.v1+json", 248 248 SchemaVersion: 2, 249 249 HoldEndpoint: "did:web:hold01.atcr.io", 250 - CreatedAt: time.Now(), 250 + CreatedAt: time.Now().String(), 251 251 Manifests: []atproto.ManifestReference{ 252 252 { 253 253 Digest: "sha256:amd64manifest", ··· 471 471 MediaType: "application/vnd.oci.image.manifest.v1+json", 472 472 SchemaVersion: 2, 473 473 HoldEndpoint: "did:web:hold01.atcr.io", 474 - CreatedAt: time.Now(), 474 + CreatedAt: time.Now().String(), 475 475 } 476 476 477 477 // Marshal to bytes for ProcessManifest ··· 523 523 MediaType: "application/vnd.oci.image.manifest.v1+json", 524 524 SchemaVersion: 2, 525 525 HoldEndpoint: "did:web:hold01.atcr.io", 526 - CreatedAt: time.Now(), 526 + CreatedAt: time.Now().String(), 527 527 Annotations: nil, 528 528 } 529 529
+23 -5
pkg/appview/storage/manifest_store.go
··· 307 307 } 308 308 309 309 // Add layers if present 310 + slog.Debug("Preparing manifest notification", 311 + "repository", s.ctx.Repository, 312 + "tag", tag, 313 + "manifestLayers", len(manifestRecord.Layers)) 314 + 310 315 if len(manifestRecord.Layers) > 0 { 311 316 layers := make([]map[string]any, len(manifestRecord.Layers)) 312 317 for i, layer := range manifestRecord.Layers { ··· 317 322 } 318 323 } 319 324 manifestData["layers"] = layers 325 + slog.Debug("Added layers to notification", "layerCount", len(layers)) 326 + } else { 327 + slog.Warn("Manifest has no layers", 328 + "repository", s.ctx.Repository, 329 + "tag", tag, 330 + "digest", manifestDigest, 331 + "mediaType", manifestRecord.MediaType) 320 332 } 321 333 322 334 notifyReq := map[string]any{ 323 - "repository": s.ctx.Repository, 324 - "tag": tag, 325 - "userDid": s.ctx.DID, 326 - "userHandle": s.ctx.Handle, 327 - "manifest": manifestData, 335 + "repository": s.ctx.Repository, 336 + "tag": tag, 337 + "manifestDigest": manifestDigest, 338 + "userDid": s.ctx.DID, 339 + "userHandle": s.ctx.Handle, 340 + "manifest": manifestData, 328 341 } 342 + 343 + slog.Debug("Sending manifest notification", 344 + "repository", s.ctx.Repository, 345 + "holdEndpoint", holdEndpoint, 346 + "hasLayers", manifestData["layers"] != nil) 329 347 330 348 // Marshal request 331 349 reqBody, err := json.Marshal(notifyReq)
+251
pkg/appview/templates/pages/repository.html
··· 176 176 {{ else }} 177 177 <span class="manifest-type"><i data-lucide="file-text"></i> Image</span> 178 178 {{ end }} 179 + {{ if .HasVulnerabilities }} 180 + <div class="vuln-badges-link" 181 + onclick="showVulnerabilities('{{ .Manifest.Digest }}', '{{ .Manifest.HoldEndpoint }}')" 182 + style="cursor: pointer;" 183 + title="Click to view vulnerability details"> 184 + {{ if gt .Vulnerabilities.Critical 0 }} 185 + <span class="vuln-badge vuln-critical" title="Critical vulnerabilities"> 186 + <i data-lucide="alert-octagon"></i> {{ .Vulnerabilities.Critical }} Critical 187 + </span> 188 + {{ end }} 189 + {{ if gt .Vulnerabilities.High 0 }} 190 + <span class="vuln-badge vuln-high" title="High severity vulnerabilities"> 191 + <i data-lucide="alert-triangle"></i> {{ .Vulnerabilities.High }} High 192 + </span> 193 + {{ end }} 194 + {{ if gt .Vulnerabilities.Medium 0 }} 195 + <span class="vuln-badge vuln-medium" title="Medium severity vulnerabilities"> 196 + <i data-lucide="alert-circle"></i> {{ .Vulnerabilities.Medium }} Medium 197 + </span> 198 + {{ end }} 199 + {{ if gt .Vulnerabilities.Low 0 }} 200 + <span class="vuln-badge vuln-low" title="Low severity vulnerabilities"> 201 + <i data-lucide="info"></i> {{ .Vulnerabilities.Low }} Low 202 + </span> 203 + {{ end }} 204 + </div> 205 + {{ end }} 179 206 {{ if .Pending }} 180 207 <span class="checking-badge" 181 208 hx-get="/api/manifest-health?endpoint={{ .Manifest.HoldEndpoint | urlquery }}" ··· 242 269 <!-- Modal container for HTMX --> 243 270 <div id="modal"></div> 244 271 272 + <!-- Vulnerability Details Modal --> 273 + <div id="vuln-modal" class="modal-overlay" style="display: none;"> 274 + <div class="modal-dialog vuln-modal-dialog"> 275 + <div class="modal-header"> 276 + <h3>Vulnerability Report</h3> 277 + <button class="modal-close" onclick="closeVulnModal()">&times;</button> 278 + </div> 279 + <div class="modal-body" id="vuln-modal-body"> 280 + <div class="loading">Loading vulnerabilities...</div> 281 + </div> 282 + <div class="modal-footer"> 283 + <button class="btn btn-secondary" onclick="closeVulnModal()">Close</button> 284 + </div> 285 + </div> 286 + </div> 287 + 245 288 <!-- Manifest Delete Confirmation Modal --> 246 289 <div id="manifest-delete-modal" class="modal-overlay" style="display: none;"> 247 290 <div class="modal-dialog"> ··· 357 400 .btn-danger:hover { 358 401 background: #c82333; 359 402 } 403 + 404 + /* Vulnerability badges */ 405 + .vuln-badges-link { 406 + display: inline-flex; 407 + gap: 0.5rem; 408 + text-decoration: none; 409 + cursor: pointer; 410 + } 411 + 412 + .vuln-badges-link:hover .vuln-badge { 413 + opacity: 0.8; 414 + transform: translateY(-1px); 415 + transition: all 0.2s ease; 416 + } 417 + 418 + .vuln-badge { 419 + display: inline-flex; 420 + align-items: center; 421 + gap: 0.25rem; 422 + padding: 0.25rem 0.5rem; 423 + border-radius: 4px; 424 + font-size: 0.75rem; 425 + font-weight: 600; 426 + color: white; 427 + white-space: nowrap; 428 + } 429 + 430 + .vuln-badge svg { 431 + width: 14px; 432 + height: 14px; 433 + } 434 + 435 + .vuln-critical { 436 + background: #dc3545; 437 + border: 1px solid #bd2130; 438 + } 439 + 440 + .vuln-high { 441 + background: #fd7e14; 442 + border: 1px solid #dc6502; 443 + } 444 + 445 + .vuln-medium { 446 + background: #ffc107; 447 + border: 1px solid #e0a800; 448 + color: #000; 449 + } 450 + 451 + .vuln-low { 452 + background: #6c757d; 453 + border: 1px solid #5a6268; 454 + } 455 + 456 + /* Vulnerability modal specific styles */ 457 + .vuln-modal-dialog { 458 + max-width: 900px; 459 + max-height: 80vh; 460 + } 461 + 462 + .vuln-modal-dialog .modal-body { 463 + max-height: 60vh; 464 + overflow-y: auto; 465 + } 466 + 467 + .vuln-summary { 468 + display: flex; 469 + gap: 1rem; 470 + margin-bottom: 1.5rem; 471 + padding: 1rem; 472 + background: var(--bg-tertiary, #2a2a2a); 473 + border-radius: 4px; 474 + } 475 + 476 + .vuln-table { 477 + width: 100%; 478 + border-collapse: collapse; 479 + } 480 + 481 + .vuln-table th { 482 + text-align: left; 483 + padding: 0.75rem; 484 + background: var(--bg-tertiary, #2a2a2a); 485 + border-bottom: 2px solid var(--border-color, #333); 486 + font-weight: 600; 487 + } 488 + 489 + .vuln-table td { 490 + padding: 0.75rem; 491 + border-bottom: 1px solid var(--border-color, #333); 492 + } 493 + 494 + .vuln-table tr:hover { 495 + background: var(--bg-hover, #3a3a3a); 496 + } 497 + 498 + .vuln-id { 499 + font-family: monospace; 500 + font-weight: 600; 501 + } 502 + 503 + .vuln-severity-critical { 504 + color: #dc3545; 505 + font-weight: 600; 506 + } 507 + 508 + .vuln-severity-high { 509 + color: #fd7e14; 510 + font-weight: 600; 511 + } 512 + 513 + .vuln-severity-medium { 514 + color: #ffc107; 515 + font-weight: 600; 516 + } 517 + 518 + .vuln-severity-low { 519 + color: #6c757d; 520 + font-weight: 600; 521 + } 522 + 523 + .loading { 524 + text-align: center; 525 + padding: 2rem; 526 + color: var(--text-muted, #999); 527 + } 360 528 </style> 529 + 530 + <script> 531 + function showVulnerabilities(digest, holdEndpoint) { 532 + const modal = document.getElementById('vuln-modal'); 533 + const modalBody = document.getElementById('vuln-modal-body'); 534 + 535 + // Show modal with loading state 536 + modal.style.display = 'flex'; 537 + modalBody.innerHTML = '<div class="loading">Loading vulnerabilities...</div>'; 538 + 539 + // Fetch vulnerability data 540 + const url = `/api/vulnerabilities?digest=${encodeURIComponent(digest)}&holdEndpoint=${encodeURIComponent(holdEndpoint)}`; 541 + 542 + fetch(url) 543 + .then(response => { 544 + if (!response.ok) { 545 + throw new Error(`HTTP ${response.status}: ${response.statusText}`); 546 + } 547 + return response.json(); 548 + }) 549 + .then(data => { 550 + renderVulnerabilities(data, modalBody); 551 + }) 552 + .catch(error => { 553 + modalBody.innerHTML = `<div class="loading" style="color: #dc3545;">Failed to load vulnerabilities: ${error.message}</div>`; 554 + }); 555 + } 556 + 557 + function renderVulnerabilities(data, container) { 558 + const summary = data.summary || {}; 559 + const matches = data.matches || []; 560 + 561 + let html = ''; 562 + 563 + // Summary 564 + html += '<div class="vuln-summary">'; 565 + if (summary.critical > 0) html += `<span class="vuln-badge vuln-critical">${summary.critical} Critical</span>`; 566 + if (summary.high > 0) html += `<span class="vuln-badge vuln-high">${summary.high} High</span>`; 567 + if (summary.medium > 0) html += `<span class="vuln-badge vuln-medium">${summary.medium} Medium</span>`; 568 + if (summary.low > 0) html += `<span class="vuln-badge vuln-low">${summary.low} Low</span>`; 569 + html += `<span style="margin-left: auto;">Total: ${summary.total || matches.length}</span>`; 570 + html += '</div>'; 571 + 572 + // Vulnerabilities table 573 + if (matches.length === 0) { 574 + html += '<p>No vulnerabilities found.</p>'; 575 + } else { 576 + html += '<table class="vuln-table">'; 577 + html += '<thead><tr><th>CVE</th><th>Severity</th><th>Package</th><th>Installed</th><th>Fixed In</th></tr></thead>'; 578 + html += '<tbody>'; 579 + 580 + matches.forEach(match => { 581 + const vuln = match.Vulnerability || {}; 582 + const pkg = match.Package || {}; 583 + const severity = (vuln.Metadata?.Severity || 'Unknown').toLowerCase(); 584 + const severityClass = `vuln-severity-${severity}`; 585 + 586 + html += '<tr>'; 587 + html += `<td class="vuln-id">${vuln.ID || 'N/A'}</td>`; 588 + html += `<td class="${severityClass}">${vuln.Metadata?.Severity || 'Unknown'}</td>`; 589 + html += `<td>${pkg.Name || 'N/A'}</td>`; 590 + html += `<td>${pkg.Version || 'N/A'}</td>`; 591 + html += `<td>${vuln.Fix?.Versions?.join(', ') || 'No fix available'}</td>`; 592 + html += '</tr>'; 593 + }); 594 + 595 + html += '</tbody></table>'; 596 + } 597 + 598 + container.innerHTML = html; 599 + } 600 + 601 + function closeVulnModal() { 602 + document.getElementById('vuln-modal').style.display = 'none'; 603 + } 604 + 605 + // Close modal when clicking outside 606 + document.getElementById('vuln-modal')?.addEventListener('click', function(e) { 607 + if (e.target === this) { 608 + closeVulnModal(); 609 + } 610 + }); 611 + </script> 361 612 </body> 362 613 </html> 363 614 {{ end }}
+2189
pkg/atproto/cbor_gen.go
··· 1419 1419 1420 1420 return nil 1421 1421 } 1422 + func (t *ManifestRecord) MarshalCBOR(w io.Writer) error { 1423 + if t == nil { 1424 + _, err := w.Write(cbg.CborNull) 1425 + return err 1426 + } 1427 + 1428 + cw := cbg.NewCborWriter(w) 1429 + fieldCount := 18 1430 + 1431 + if t.HoldDID == "" { 1432 + fieldCount-- 1433 + } 1434 + 1435 + if t.HoldEndpoint == "" { 1436 + fieldCount-- 1437 + } 1438 + 1439 + if t.ArtifactType == "" { 1440 + fieldCount-- 1441 + } 1442 + 1443 + if t.OwnerDID == "" { 1444 + fieldCount-- 1445 + } 1446 + 1447 + if t.ScannedAt == "" { 1448 + fieldCount-- 1449 + } 1450 + 1451 + if t.ScannerVersion == "" { 1452 + fieldCount-- 1453 + } 1454 + 1455 + if t.Config == nil { 1456 + fieldCount-- 1457 + } 1458 + 1459 + if t.Layers == nil { 1460 + fieldCount-- 1461 + } 1462 + 1463 + if t.Manifests == nil { 1464 + fieldCount-- 1465 + } 1466 + 1467 + if t.Subject == nil { 1468 + fieldCount-- 1469 + } 1470 + 1471 + if t.ManifestBlob == nil { 1472 + fieldCount-- 1473 + } 1474 + 1475 + if _, err := cw.Write(cbg.CborEncodeMajorType(cbg.MajMap, uint64(fieldCount))); err != nil { 1476 + return err 1477 + } 1478 + 1479 + // t.Type (string) (string) 1480 + if len("$type") > 8192 { 1481 + return xerrors.Errorf("Value in field \"$type\" was too long") 1482 + } 1483 + 1484 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("$type"))); err != nil { 1485 + return err 1486 + } 1487 + if _, err := cw.WriteString(string("$type")); err != nil { 1488 + return err 1489 + } 1490 + 1491 + if len(t.Type) > 8192 { 1492 + return xerrors.Errorf("Value in field t.Type was too long") 1493 + } 1494 + 1495 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Type))); err != nil { 1496 + return err 1497 + } 1498 + if _, err := cw.WriteString(string(t.Type)); err != nil { 1499 + return err 1500 + } 1501 + 1502 + // t.Config (atproto.BlobReference) (struct) 1503 + if t.Config != nil { 1504 + 1505 + if len("config") > 8192 { 1506 + return xerrors.Errorf("Value in field \"config\" was too long") 1507 + } 1508 + 1509 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("config"))); err != nil { 1510 + return err 1511 + } 1512 + if _, err := cw.WriteString(string("config")); err != nil { 1513 + return err 1514 + } 1515 + 1516 + if err := t.Config.MarshalCBOR(cw); err != nil { 1517 + return err 1518 + } 1519 + } 1520 + 1521 + // t.Digest (string) (string) 1522 + if len("digest") > 8192 { 1523 + return xerrors.Errorf("Value in field \"digest\" was too long") 1524 + } 1525 + 1526 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("digest"))); err != nil { 1527 + return err 1528 + } 1529 + if _, err := cw.WriteString(string("digest")); err != nil { 1530 + return err 1531 + } 1532 + 1533 + if len(t.Digest) > 8192 { 1534 + return xerrors.Errorf("Value in field t.Digest was too long") 1535 + } 1536 + 1537 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Digest))); err != nil { 1538 + return err 1539 + } 1540 + if _, err := cw.WriteString(string(t.Digest)); err != nil { 1541 + return err 1542 + } 1543 + 1544 + // t.Layers ([]atproto.BlobReference) (slice) 1545 + if t.Layers != nil { 1546 + 1547 + if len("layers") > 8192 { 1548 + return xerrors.Errorf("Value in field \"layers\" was too long") 1549 + } 1550 + 1551 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("layers"))); err != nil { 1552 + return err 1553 + } 1554 + if _, err := cw.WriteString(string("layers")); err != nil { 1555 + return err 1556 + } 1557 + 1558 + if len(t.Layers) > 8192 { 1559 + return xerrors.Errorf("Slice value in field t.Layers was too long") 1560 + } 1561 + 1562 + if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len(t.Layers))); err != nil { 1563 + return err 1564 + } 1565 + for _, v := range t.Layers { 1566 + if err := v.MarshalCBOR(cw); err != nil { 1567 + return err 1568 + } 1569 + 1570 + } 1571 + } 1572 + 1573 + // t.HoldDID (string) (string) 1574 + if t.HoldDID != "" { 1575 + 1576 + if len("holdDid") > 8192 { 1577 + return xerrors.Errorf("Value in field \"holdDid\" was too long") 1578 + } 1579 + 1580 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("holdDid"))); err != nil { 1581 + return err 1582 + } 1583 + if _, err := cw.WriteString(string("holdDid")); err != nil { 1584 + return err 1585 + } 1586 + 1587 + if len(t.HoldDID) > 8192 { 1588 + return xerrors.Errorf("Value in field t.HoldDID was too long") 1589 + } 1590 + 1591 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.HoldDID))); err != nil { 1592 + return err 1593 + } 1594 + if _, err := cw.WriteString(string(t.HoldDID)); err != nil { 1595 + return err 1596 + } 1597 + } 1598 + 1599 + // t.Subject (atproto.BlobReference) (struct) 1600 + if t.Subject != nil { 1601 + 1602 + if len("subject") > 8192 { 1603 + return xerrors.Errorf("Value in field \"subject\" was too long") 1604 + } 1605 + 1606 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("subject"))); err != nil { 1607 + return err 1608 + } 1609 + if _, err := cw.WriteString(string("subject")); err != nil { 1610 + return err 1611 + } 1612 + 1613 + if err := t.Subject.MarshalCBOR(cw); err != nil { 1614 + return err 1615 + } 1616 + } 1617 + 1618 + // t.OwnerDID (string) (string) 1619 + if t.OwnerDID != "" { 1620 + 1621 + if len("ownerDid") > 8192 { 1622 + return xerrors.Errorf("Value in field \"ownerDid\" was too long") 1623 + } 1624 + 1625 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("ownerDid"))); err != nil { 1626 + return err 1627 + } 1628 + if _, err := cw.WriteString(string("ownerDid")); err != nil { 1629 + return err 1630 + } 1631 + 1632 + if len(t.OwnerDID) > 8192 { 1633 + return xerrors.Errorf("Value in field t.OwnerDID was too long") 1634 + } 1635 + 1636 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.OwnerDID))); err != nil { 1637 + return err 1638 + } 1639 + if _, err := cw.WriteString(string(t.OwnerDID)); err != nil { 1640 + return err 1641 + } 1642 + } 1643 + 1644 + // t.CreatedAt (string) (string) 1645 + if len("createdAt") > 8192 { 1646 + return xerrors.Errorf("Value in field \"createdAt\" was too long") 1647 + } 1648 + 1649 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("createdAt"))); err != nil { 1650 + return err 1651 + } 1652 + if _, err := cw.WriteString(string("createdAt")); err != nil { 1653 + return err 1654 + } 1655 + 1656 + if len(t.CreatedAt) > 8192 { 1657 + return xerrors.Errorf("Value in field t.CreatedAt was too long") 1658 + } 1659 + 1660 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.CreatedAt))); err != nil { 1661 + return err 1662 + } 1663 + if _, err := cw.WriteString(string(t.CreatedAt)); err != nil { 1664 + return err 1665 + } 1666 + 1667 + // t.Manifests ([]atproto.ManifestReference) (slice) 1668 + if t.Manifests != nil { 1669 + 1670 + if len("manifests") > 8192 { 1671 + return xerrors.Errorf("Value in field \"manifests\" was too long") 1672 + } 1673 + 1674 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("manifests"))); err != nil { 1675 + return err 1676 + } 1677 + if _, err := cw.WriteString(string("manifests")); err != nil { 1678 + return err 1679 + } 1680 + 1681 + if len(t.Manifests) > 8192 { 1682 + return xerrors.Errorf("Slice value in field t.Manifests was too long") 1683 + } 1684 + 1685 + if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len(t.Manifests))); err != nil { 1686 + return err 1687 + } 1688 + for _, v := range t.Manifests { 1689 + if err := v.MarshalCBOR(cw); err != nil { 1690 + return err 1691 + } 1692 + 1693 + } 1694 + } 1695 + 1696 + // t.MediaType (string) (string) 1697 + if len("mediaType") > 8192 { 1698 + return xerrors.Errorf("Value in field \"mediaType\" was too long") 1699 + } 1700 + 1701 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("mediaType"))); err != nil { 1702 + return err 1703 + } 1704 + if _, err := cw.WriteString(string("mediaType")); err != nil { 1705 + return err 1706 + } 1707 + 1708 + if len(t.MediaType) > 8192 { 1709 + return xerrors.Errorf("Value in field t.MediaType was too long") 1710 + } 1711 + 1712 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.MediaType))); err != nil { 1713 + return err 1714 + } 1715 + if _, err := cw.WriteString(string(t.MediaType)); err != nil { 1716 + return err 1717 + } 1718 + 1719 + // t.ScannedAt (string) (string) 1720 + if t.ScannedAt != "" { 1721 + 1722 + if len("scannedAt") > 8192 { 1723 + return xerrors.Errorf("Value in field \"scannedAt\" was too long") 1724 + } 1725 + 1726 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("scannedAt"))); err != nil { 1727 + return err 1728 + } 1729 + if _, err := cw.WriteString(string("scannedAt")); err != nil { 1730 + return err 1731 + } 1732 + 1733 + if len(t.ScannedAt) > 8192 { 1734 + return xerrors.Errorf("Value in field t.ScannedAt was too long") 1735 + } 1736 + 1737 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.ScannedAt))); err != nil { 1738 + return err 1739 + } 1740 + if _, err := cw.WriteString(string(t.ScannedAt)); err != nil { 1741 + return err 1742 + } 1743 + } 1744 + 1745 + // t.Repository (string) (string) 1746 + if len("repository") > 8192 { 1747 + return xerrors.Errorf("Value in field \"repository\" was too long") 1748 + } 1749 + 1750 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("repository"))); err != nil { 1751 + return err 1752 + } 1753 + if _, err := cw.WriteString(string("repository")); err != nil { 1754 + return err 1755 + } 1756 + 1757 + if len(t.Repository) > 8192 { 1758 + return xerrors.Errorf("Value in field t.Repository was too long") 1759 + } 1760 + 1761 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Repository))); err != nil { 1762 + return err 1763 + } 1764 + if _, err := cw.WriteString(string(t.Repository)); err != nil { 1765 + return err 1766 + } 1767 + 1768 + // t.Annotations (map[string]string) (map) 1769 + if len("annotations") > 8192 { 1770 + return xerrors.Errorf("Value in field \"annotations\" was too long") 1771 + } 1772 + 1773 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("annotations"))); err != nil { 1774 + return err 1775 + } 1776 + if _, err := cw.WriteString(string("annotations")); err != nil { 1777 + return err 1778 + } 1779 + 1780 + { 1781 + if len(t.Annotations) > 4096 { 1782 + return xerrors.Errorf("cannot marshal t.Annotations map too large") 1783 + } 1784 + 1785 + if err := cw.WriteMajorTypeHeader(cbg.MajMap, uint64(len(t.Annotations))); err != nil { 1786 + return err 1787 + } 1788 + 1789 + keys := make([]string, 0, len(t.Annotations)) 1790 + for k := range t.Annotations { 1791 + keys = append(keys, k) 1792 + } 1793 + sort.Strings(keys) 1794 + for _, k := range keys { 1795 + v := t.Annotations[k] 1796 + 1797 + if len(k) > 8192 { 1798 + return xerrors.Errorf("Value in field k was too long") 1799 + } 1800 + 1801 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(k))); err != nil { 1802 + return err 1803 + } 1804 + if _, err := cw.WriteString(string(k)); err != nil { 1805 + return err 1806 + } 1807 + 1808 + if len(v) > 8192 { 1809 + return xerrors.Errorf("Value in field v was too long") 1810 + } 1811 + 1812 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(v))); err != nil { 1813 + return err 1814 + } 1815 + if _, err := cw.WriteString(string(v)); err != nil { 1816 + return err 1817 + } 1818 + 1819 + } 1820 + } 1821 + 1822 + // t.ArtifactType (string) (string) 1823 + if t.ArtifactType != "" { 1824 + 1825 + if len("artifactType") > 8192 { 1826 + return xerrors.Errorf("Value in field \"artifactType\" was too long") 1827 + } 1828 + 1829 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("artifactType"))); err != nil { 1830 + return err 1831 + } 1832 + if _, err := cw.WriteString(string("artifactType")); err != nil { 1833 + return err 1834 + } 1835 + 1836 + if len(t.ArtifactType) > 8192 { 1837 + return xerrors.Errorf("Value in field t.ArtifactType was too long") 1838 + } 1839 + 1840 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.ArtifactType))); err != nil { 1841 + return err 1842 + } 1843 + if _, err := cw.WriteString(string(t.ArtifactType)); err != nil { 1844 + return err 1845 + } 1846 + } 1847 + 1848 + // t.HoldEndpoint (string) (string) 1849 + if t.HoldEndpoint != "" { 1850 + 1851 + if len("holdEndpoint") > 8192 { 1852 + return xerrors.Errorf("Value in field \"holdEndpoint\" was too long") 1853 + } 1854 + 1855 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("holdEndpoint"))); err != nil { 1856 + return err 1857 + } 1858 + if _, err := cw.WriteString(string("holdEndpoint")); err != nil { 1859 + return err 1860 + } 1861 + 1862 + if len(t.HoldEndpoint) > 8192 { 1863 + return xerrors.Errorf("Value in field t.HoldEndpoint was too long") 1864 + } 1865 + 1866 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.HoldEndpoint))); err != nil { 1867 + return err 1868 + } 1869 + if _, err := cw.WriteString(string(t.HoldEndpoint)); err != nil { 1870 + return err 1871 + } 1872 + } 1873 + 1874 + // t.ManifestBlob (atproto.ATProtoBlobRef) (struct) 1875 + if t.ManifestBlob != nil { 1876 + 1877 + if len("manifestBlob") > 8192 { 1878 + return xerrors.Errorf("Value in field \"manifestBlob\" was too long") 1879 + } 1880 + 1881 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("manifestBlob"))); err != nil { 1882 + return err 1883 + } 1884 + if _, err := cw.WriteString(string("manifestBlob")); err != nil { 1885 + return err 1886 + } 1887 + 1888 + if err := t.ManifestBlob.MarshalCBOR(cw); err != nil { 1889 + return err 1890 + } 1891 + } 1892 + 1893 + // t.SchemaVersion (int64) (int64) 1894 + if len("schemaVersion") > 8192 { 1895 + return xerrors.Errorf("Value in field \"schemaVersion\" was too long") 1896 + } 1897 + 1898 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("schemaVersion"))); err != nil { 1899 + return err 1900 + } 1901 + if _, err := cw.WriteString(string("schemaVersion")); err != nil { 1902 + return err 1903 + } 1904 + 1905 + if t.SchemaVersion >= 0 { 1906 + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.SchemaVersion)); err != nil { 1907 + return err 1908 + } 1909 + } else { 1910 + if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.SchemaVersion-1)); err != nil { 1911 + return err 1912 + } 1913 + } 1914 + 1915 + // t.ScannerVersion (string) (string) 1916 + if t.ScannerVersion != "" { 1917 + 1918 + if len("scannerVersion") > 8192 { 1919 + return xerrors.Errorf("Value in field \"scannerVersion\" was too long") 1920 + } 1921 + 1922 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("scannerVersion"))); err != nil { 1923 + return err 1924 + } 1925 + if _, err := cw.WriteString(string("scannerVersion")); err != nil { 1926 + return err 1927 + } 1928 + 1929 + if len(t.ScannerVersion) > 8192 { 1930 + return xerrors.Errorf("Value in field t.ScannerVersion was too long") 1931 + } 1932 + 1933 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.ScannerVersion))); err != nil { 1934 + return err 1935 + } 1936 + if _, err := cw.WriteString(string(t.ScannerVersion)); err != nil { 1937 + return err 1938 + } 1939 + } 1940 + return nil 1941 + } 1942 + 1943 + func (t *ManifestRecord) UnmarshalCBOR(r io.Reader) (err error) { 1944 + *t = ManifestRecord{} 1945 + 1946 + cr := cbg.NewCborReader(r) 1947 + 1948 + maj, extra, err := cr.ReadHeader() 1949 + if err != nil { 1950 + return err 1951 + } 1952 + defer func() { 1953 + if err == io.EOF { 1954 + err = io.ErrUnexpectedEOF 1955 + } 1956 + }() 1957 + 1958 + if maj != cbg.MajMap { 1959 + return fmt.Errorf("cbor input should be of type map") 1960 + } 1961 + 1962 + if extra > cbg.MaxLength { 1963 + return fmt.Errorf("ManifestRecord: map struct too large (%d)", extra) 1964 + } 1965 + 1966 + n := extra 1967 + 1968 + nameBuf := make([]byte, 14) 1969 + for i := uint64(0); i < n; i++ { 1970 + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) 1971 + if err != nil { 1972 + return err 1973 + } 1974 + 1975 + if !ok { 1976 + // Field doesn't exist on this type, so ignore it 1977 + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { 1978 + return err 1979 + } 1980 + continue 1981 + } 1982 + 1983 + switch string(nameBuf[:nameLen]) { 1984 + // t.Type (string) (string) 1985 + case "$type": 1986 + 1987 + { 1988 + sval, err := cbg.ReadStringWithMax(cr, 8192) 1989 + if err != nil { 1990 + return err 1991 + } 1992 + 1993 + t.Type = string(sval) 1994 + } 1995 + // t.Config (atproto.BlobReference) (struct) 1996 + case "config": 1997 + 1998 + { 1999 + 2000 + b, err := cr.ReadByte() 2001 + if err != nil { 2002 + return err 2003 + } 2004 + if b != cbg.CborNull[0] { 2005 + if err := cr.UnreadByte(); err != nil { 2006 + return err 2007 + } 2008 + t.Config = new(BlobReference) 2009 + if err := t.Config.UnmarshalCBOR(cr); err != nil { 2010 + return xerrors.Errorf("unmarshaling t.Config pointer: %w", err) 2011 + } 2012 + } 2013 + 2014 + } 2015 + // t.Digest (string) (string) 2016 + case "digest": 2017 + 2018 + { 2019 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2020 + if err != nil { 2021 + return err 2022 + } 2023 + 2024 + t.Digest = string(sval) 2025 + } 2026 + // t.Layers ([]atproto.BlobReference) (slice) 2027 + case "layers": 2028 + 2029 + maj, extra, err = cr.ReadHeader() 2030 + if err != nil { 2031 + return err 2032 + } 2033 + 2034 + if extra > 8192 { 2035 + return fmt.Errorf("t.Layers: array too large (%d)", extra) 2036 + } 2037 + 2038 + if maj != cbg.MajArray { 2039 + return fmt.Errorf("expected cbor array") 2040 + } 2041 + 2042 + if extra > 0 { 2043 + t.Layers = make([]BlobReference, extra) 2044 + } 2045 + 2046 + for i := 0; i < int(extra); i++ { 2047 + { 2048 + var maj byte 2049 + var extra uint64 2050 + var err error 2051 + _ = maj 2052 + _ = extra 2053 + _ = err 2054 + 2055 + { 2056 + 2057 + if err := t.Layers[i].UnmarshalCBOR(cr); err != nil { 2058 + return xerrors.Errorf("unmarshaling t.Layers[i]: %w", err) 2059 + } 2060 + 2061 + } 2062 + 2063 + } 2064 + } 2065 + // t.HoldDID (string) (string) 2066 + case "holdDid": 2067 + 2068 + { 2069 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2070 + if err != nil { 2071 + return err 2072 + } 2073 + 2074 + t.HoldDID = string(sval) 2075 + } 2076 + // t.Subject (atproto.BlobReference) (struct) 2077 + case "subject": 2078 + 2079 + { 2080 + 2081 + b, err := cr.ReadByte() 2082 + if err != nil { 2083 + return err 2084 + } 2085 + if b != cbg.CborNull[0] { 2086 + if err := cr.UnreadByte(); err != nil { 2087 + return err 2088 + } 2089 + t.Subject = new(BlobReference) 2090 + if err := t.Subject.UnmarshalCBOR(cr); err != nil { 2091 + return xerrors.Errorf("unmarshaling t.Subject pointer: %w", err) 2092 + } 2093 + } 2094 + 2095 + } 2096 + // t.OwnerDID (string) (string) 2097 + case "ownerDid": 2098 + 2099 + { 2100 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2101 + if err != nil { 2102 + return err 2103 + } 2104 + 2105 + t.OwnerDID = string(sval) 2106 + } 2107 + // t.CreatedAt (string) (string) 2108 + case "createdAt": 2109 + 2110 + { 2111 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2112 + if err != nil { 2113 + return err 2114 + } 2115 + 2116 + t.CreatedAt = string(sval) 2117 + } 2118 + // t.Manifests ([]atproto.ManifestReference) (slice) 2119 + case "manifests": 2120 + 2121 + maj, extra, err = cr.ReadHeader() 2122 + if err != nil { 2123 + return err 2124 + } 2125 + 2126 + if extra > 8192 { 2127 + return fmt.Errorf("t.Manifests: array too large (%d)", extra) 2128 + } 2129 + 2130 + if maj != cbg.MajArray { 2131 + return fmt.Errorf("expected cbor array") 2132 + } 2133 + 2134 + if extra > 0 { 2135 + t.Manifests = make([]ManifestReference, extra) 2136 + } 2137 + 2138 + for i := 0; i < int(extra); i++ { 2139 + { 2140 + var maj byte 2141 + var extra uint64 2142 + var err error 2143 + _ = maj 2144 + _ = extra 2145 + _ = err 2146 + 2147 + { 2148 + 2149 + if err := t.Manifests[i].UnmarshalCBOR(cr); err != nil { 2150 + return xerrors.Errorf("unmarshaling t.Manifests[i]: %w", err) 2151 + } 2152 + 2153 + } 2154 + 2155 + } 2156 + } 2157 + // t.MediaType (string) (string) 2158 + case "mediaType": 2159 + 2160 + { 2161 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2162 + if err != nil { 2163 + return err 2164 + } 2165 + 2166 + t.MediaType = string(sval) 2167 + } 2168 + // t.ScannedAt (string) (string) 2169 + case "scannedAt": 2170 + 2171 + { 2172 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2173 + if err != nil { 2174 + return err 2175 + } 2176 + 2177 + t.ScannedAt = string(sval) 2178 + } 2179 + // t.Repository (string) (string) 2180 + case "repository": 2181 + 2182 + { 2183 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2184 + if err != nil { 2185 + return err 2186 + } 2187 + 2188 + t.Repository = string(sval) 2189 + } 2190 + // t.Annotations (map[string]string) (map) 2191 + case "annotations": 2192 + 2193 + maj, extra, err = cr.ReadHeader() 2194 + if err != nil { 2195 + return err 2196 + } 2197 + if maj != cbg.MajMap { 2198 + return fmt.Errorf("expected a map (major type 5)") 2199 + } 2200 + if extra > 4096 { 2201 + return fmt.Errorf("t.Annotations: map too large") 2202 + } 2203 + 2204 + t.Annotations = make(map[string]string, extra) 2205 + 2206 + for i, l := 0, int(extra); i < l; i++ { 2207 + 2208 + var k string 2209 + 2210 + { 2211 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2212 + if err != nil { 2213 + return err 2214 + } 2215 + 2216 + k = string(sval) 2217 + } 2218 + 2219 + var v string 2220 + 2221 + { 2222 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2223 + if err != nil { 2224 + return err 2225 + } 2226 + 2227 + v = string(sval) 2228 + } 2229 + 2230 + t.Annotations[k] = v 2231 + 2232 + } 2233 + // t.ArtifactType (string) (string) 2234 + case "artifactType": 2235 + 2236 + { 2237 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2238 + if err != nil { 2239 + return err 2240 + } 2241 + 2242 + t.ArtifactType = string(sval) 2243 + } 2244 + // t.HoldEndpoint (string) (string) 2245 + case "holdEndpoint": 2246 + 2247 + { 2248 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2249 + if err != nil { 2250 + return err 2251 + } 2252 + 2253 + t.HoldEndpoint = string(sval) 2254 + } 2255 + // t.ManifestBlob (atproto.ATProtoBlobRef) (struct) 2256 + case "manifestBlob": 2257 + 2258 + { 2259 + 2260 + b, err := cr.ReadByte() 2261 + if err != nil { 2262 + return err 2263 + } 2264 + if b != cbg.CborNull[0] { 2265 + if err := cr.UnreadByte(); err != nil { 2266 + return err 2267 + } 2268 + t.ManifestBlob = new(ATProtoBlobRef) 2269 + if err := t.ManifestBlob.UnmarshalCBOR(cr); err != nil { 2270 + return xerrors.Errorf("unmarshaling t.ManifestBlob pointer: %w", err) 2271 + } 2272 + } 2273 + 2274 + } 2275 + // t.SchemaVersion (int64) (int64) 2276 + case "schemaVersion": 2277 + { 2278 + maj, extra, err := cr.ReadHeader() 2279 + if err != nil { 2280 + return err 2281 + } 2282 + var extraI int64 2283 + switch maj { 2284 + case cbg.MajUnsignedInt: 2285 + extraI = int64(extra) 2286 + if extraI < 0 { 2287 + return fmt.Errorf("int64 positive overflow") 2288 + } 2289 + case cbg.MajNegativeInt: 2290 + extraI = int64(extra) 2291 + if extraI < 0 { 2292 + return fmt.Errorf("int64 negative overflow") 2293 + } 2294 + extraI = -1 - extraI 2295 + default: 2296 + return fmt.Errorf("wrong type for int64 field: %d", maj) 2297 + } 2298 + 2299 + t.SchemaVersion = int64(extraI) 2300 + } 2301 + // t.ScannerVersion (string) (string) 2302 + case "scannerVersion": 2303 + 2304 + { 2305 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2306 + if err != nil { 2307 + return err 2308 + } 2309 + 2310 + t.ScannerVersion = string(sval) 2311 + } 2312 + 2313 + default: 2314 + // Field doesn't exist on this type, so ignore it 2315 + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { 2316 + return err 2317 + } 2318 + } 2319 + } 2320 + 2321 + return nil 2322 + } 2323 + func (t *BlobReference) MarshalCBOR(w io.Writer) error { 2324 + if t == nil { 2325 + _, err := w.Write(cbg.CborNull) 2326 + return err 2327 + } 2328 + 2329 + cw := cbg.NewCborWriter(w) 2330 + fieldCount := 5 2331 + 2332 + if t.URLs == nil { 2333 + fieldCount-- 2334 + } 2335 + 2336 + if _, err := cw.Write(cbg.CborEncodeMajorType(cbg.MajMap, uint64(fieldCount))); err != nil { 2337 + return err 2338 + } 2339 + 2340 + // t.Size (int64) (int64) 2341 + if len("size") > 8192 { 2342 + return xerrors.Errorf("Value in field \"size\" was too long") 2343 + } 2344 + 2345 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("size"))); err != nil { 2346 + return err 2347 + } 2348 + if _, err := cw.WriteString(string("size")); err != nil { 2349 + return err 2350 + } 2351 + 2352 + if t.Size >= 0 { 2353 + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Size)); err != nil { 2354 + return err 2355 + } 2356 + } else { 2357 + if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.Size-1)); err != nil { 2358 + return err 2359 + } 2360 + } 2361 + 2362 + // t.URLs ([]string) (slice) 2363 + if t.URLs != nil { 2364 + 2365 + if len("urls") > 8192 { 2366 + return xerrors.Errorf("Value in field \"urls\" was too long") 2367 + } 2368 + 2369 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("urls"))); err != nil { 2370 + return err 2371 + } 2372 + if _, err := cw.WriteString(string("urls")); err != nil { 2373 + return err 2374 + } 2375 + 2376 + if len(t.URLs) > 8192 { 2377 + return xerrors.Errorf("Slice value in field t.URLs was too long") 2378 + } 2379 + 2380 + if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len(t.URLs))); err != nil { 2381 + return err 2382 + } 2383 + for _, v := range t.URLs { 2384 + if len(v) > 8192 { 2385 + return xerrors.Errorf("Value in field v was too long") 2386 + } 2387 + 2388 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(v))); err != nil { 2389 + return err 2390 + } 2391 + if _, err := cw.WriteString(string(v)); err != nil { 2392 + return err 2393 + } 2394 + 2395 + } 2396 + } 2397 + 2398 + // t.Digest (string) (string) 2399 + if len("digest") > 8192 { 2400 + return xerrors.Errorf("Value in field \"digest\" was too long") 2401 + } 2402 + 2403 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("digest"))); err != nil { 2404 + return err 2405 + } 2406 + if _, err := cw.WriteString(string("digest")); err != nil { 2407 + return err 2408 + } 2409 + 2410 + if len(t.Digest) > 8192 { 2411 + return xerrors.Errorf("Value in field t.Digest was too long") 2412 + } 2413 + 2414 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Digest))); err != nil { 2415 + return err 2416 + } 2417 + if _, err := cw.WriteString(string(t.Digest)); err != nil { 2418 + return err 2419 + } 2420 + 2421 + // t.MediaType (string) (string) 2422 + if len("mediaType") > 8192 { 2423 + return xerrors.Errorf("Value in field \"mediaType\" was too long") 2424 + } 2425 + 2426 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("mediaType"))); err != nil { 2427 + return err 2428 + } 2429 + if _, err := cw.WriteString(string("mediaType")); err != nil { 2430 + return err 2431 + } 2432 + 2433 + if len(t.MediaType) > 8192 { 2434 + return xerrors.Errorf("Value in field t.MediaType was too long") 2435 + } 2436 + 2437 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.MediaType))); err != nil { 2438 + return err 2439 + } 2440 + if _, err := cw.WriteString(string(t.MediaType)); err != nil { 2441 + return err 2442 + } 2443 + 2444 + // t.Annotations (map[string]string) (map) 2445 + if len("annotations") > 8192 { 2446 + return xerrors.Errorf("Value in field \"annotations\" was too long") 2447 + } 2448 + 2449 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("annotations"))); err != nil { 2450 + return err 2451 + } 2452 + if _, err := cw.WriteString(string("annotations")); err != nil { 2453 + return err 2454 + } 2455 + 2456 + { 2457 + if len(t.Annotations) > 4096 { 2458 + return xerrors.Errorf("cannot marshal t.Annotations map too large") 2459 + } 2460 + 2461 + if err := cw.WriteMajorTypeHeader(cbg.MajMap, uint64(len(t.Annotations))); err != nil { 2462 + return err 2463 + } 2464 + 2465 + keys := make([]string, 0, len(t.Annotations)) 2466 + for k := range t.Annotations { 2467 + keys = append(keys, k) 2468 + } 2469 + sort.Strings(keys) 2470 + for _, k := range keys { 2471 + v := t.Annotations[k] 2472 + 2473 + if len(k) > 8192 { 2474 + return xerrors.Errorf("Value in field k was too long") 2475 + } 2476 + 2477 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(k))); err != nil { 2478 + return err 2479 + } 2480 + if _, err := cw.WriteString(string(k)); err != nil { 2481 + return err 2482 + } 2483 + 2484 + if len(v) > 8192 { 2485 + return xerrors.Errorf("Value in field v was too long") 2486 + } 2487 + 2488 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(v))); err != nil { 2489 + return err 2490 + } 2491 + if _, err := cw.WriteString(string(v)); err != nil { 2492 + return err 2493 + } 2494 + 2495 + } 2496 + } 2497 + return nil 2498 + } 2499 + 2500 + func (t *BlobReference) UnmarshalCBOR(r io.Reader) (err error) { 2501 + *t = BlobReference{} 2502 + 2503 + cr := cbg.NewCborReader(r) 2504 + 2505 + maj, extra, err := cr.ReadHeader() 2506 + if err != nil { 2507 + return err 2508 + } 2509 + defer func() { 2510 + if err == io.EOF { 2511 + err = io.ErrUnexpectedEOF 2512 + } 2513 + }() 2514 + 2515 + if maj != cbg.MajMap { 2516 + return fmt.Errorf("cbor input should be of type map") 2517 + } 2518 + 2519 + if extra > cbg.MaxLength { 2520 + return fmt.Errorf("BlobReference: map struct too large (%d)", extra) 2521 + } 2522 + 2523 + n := extra 2524 + 2525 + nameBuf := make([]byte, 11) 2526 + for i := uint64(0); i < n; i++ { 2527 + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) 2528 + if err != nil { 2529 + return err 2530 + } 2531 + 2532 + if !ok { 2533 + // Field doesn't exist on this type, so ignore it 2534 + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { 2535 + return err 2536 + } 2537 + continue 2538 + } 2539 + 2540 + switch string(nameBuf[:nameLen]) { 2541 + // t.Size (int64) (int64) 2542 + case "size": 2543 + { 2544 + maj, extra, err := cr.ReadHeader() 2545 + if err != nil { 2546 + return err 2547 + } 2548 + var extraI int64 2549 + switch maj { 2550 + case cbg.MajUnsignedInt: 2551 + extraI = int64(extra) 2552 + if extraI < 0 { 2553 + return fmt.Errorf("int64 positive overflow") 2554 + } 2555 + case cbg.MajNegativeInt: 2556 + extraI = int64(extra) 2557 + if extraI < 0 { 2558 + return fmt.Errorf("int64 negative overflow") 2559 + } 2560 + extraI = -1 - extraI 2561 + default: 2562 + return fmt.Errorf("wrong type for int64 field: %d", maj) 2563 + } 2564 + 2565 + t.Size = int64(extraI) 2566 + } 2567 + // t.URLs ([]string) (slice) 2568 + case "urls": 2569 + 2570 + maj, extra, err = cr.ReadHeader() 2571 + if err != nil { 2572 + return err 2573 + } 2574 + 2575 + if extra > 8192 { 2576 + return fmt.Errorf("t.URLs: array too large (%d)", extra) 2577 + } 2578 + 2579 + if maj != cbg.MajArray { 2580 + return fmt.Errorf("expected cbor array") 2581 + } 2582 + 2583 + if extra > 0 { 2584 + t.URLs = make([]string, extra) 2585 + } 2586 + 2587 + for i := 0; i < int(extra); i++ { 2588 + { 2589 + var maj byte 2590 + var extra uint64 2591 + var err error 2592 + _ = maj 2593 + _ = extra 2594 + _ = err 2595 + 2596 + { 2597 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2598 + if err != nil { 2599 + return err 2600 + } 2601 + 2602 + t.URLs[i] = string(sval) 2603 + } 2604 + 2605 + } 2606 + } 2607 + // t.Digest (string) (string) 2608 + case "digest": 2609 + 2610 + { 2611 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2612 + if err != nil { 2613 + return err 2614 + } 2615 + 2616 + t.Digest = string(sval) 2617 + } 2618 + // t.MediaType (string) (string) 2619 + case "mediaType": 2620 + 2621 + { 2622 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2623 + if err != nil { 2624 + return err 2625 + } 2626 + 2627 + t.MediaType = string(sval) 2628 + } 2629 + // t.Annotations (map[string]string) (map) 2630 + case "annotations": 2631 + 2632 + maj, extra, err = cr.ReadHeader() 2633 + if err != nil { 2634 + return err 2635 + } 2636 + if maj != cbg.MajMap { 2637 + return fmt.Errorf("expected a map (major type 5)") 2638 + } 2639 + if extra > 4096 { 2640 + return fmt.Errorf("t.Annotations: map too large") 2641 + } 2642 + 2643 + t.Annotations = make(map[string]string, extra) 2644 + 2645 + for i, l := 0, int(extra); i < l; i++ { 2646 + 2647 + var k string 2648 + 2649 + { 2650 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2651 + if err != nil { 2652 + return err 2653 + } 2654 + 2655 + k = string(sval) 2656 + } 2657 + 2658 + var v string 2659 + 2660 + { 2661 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2662 + if err != nil { 2663 + return err 2664 + } 2665 + 2666 + v = string(sval) 2667 + } 2668 + 2669 + t.Annotations[k] = v 2670 + 2671 + } 2672 + 2673 + default: 2674 + // Field doesn't exist on this type, so ignore it 2675 + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { 2676 + return err 2677 + } 2678 + } 2679 + } 2680 + 2681 + return nil 2682 + } 2683 + func (t *ManifestReference) MarshalCBOR(w io.Writer) error { 2684 + if t == nil { 2685 + _, err := w.Write(cbg.CborNull) 2686 + return err 2687 + } 2688 + 2689 + cw := cbg.NewCborWriter(w) 2690 + fieldCount := 5 2691 + 2692 + if t.Platform == nil { 2693 + fieldCount-- 2694 + } 2695 + 2696 + if _, err := cw.Write(cbg.CborEncodeMajorType(cbg.MajMap, uint64(fieldCount))); err != nil { 2697 + return err 2698 + } 2699 + 2700 + // t.Size (int64) (int64) 2701 + if len("size") > 8192 { 2702 + return xerrors.Errorf("Value in field \"size\" was too long") 2703 + } 2704 + 2705 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("size"))); err != nil { 2706 + return err 2707 + } 2708 + if _, err := cw.WriteString(string("size")); err != nil { 2709 + return err 2710 + } 2711 + 2712 + if t.Size >= 0 { 2713 + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Size)); err != nil { 2714 + return err 2715 + } 2716 + } else { 2717 + if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.Size-1)); err != nil { 2718 + return err 2719 + } 2720 + } 2721 + 2722 + // t.Digest (string) (string) 2723 + if len("digest") > 8192 { 2724 + return xerrors.Errorf("Value in field \"digest\" was too long") 2725 + } 2726 + 2727 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("digest"))); err != nil { 2728 + return err 2729 + } 2730 + if _, err := cw.WriteString(string("digest")); err != nil { 2731 + return err 2732 + } 2733 + 2734 + if len(t.Digest) > 8192 { 2735 + return xerrors.Errorf("Value in field t.Digest was too long") 2736 + } 2737 + 2738 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Digest))); err != nil { 2739 + return err 2740 + } 2741 + if _, err := cw.WriteString(string(t.Digest)); err != nil { 2742 + return err 2743 + } 2744 + 2745 + // t.Platform (atproto.Platform) (struct) 2746 + if t.Platform != nil { 2747 + 2748 + if len("platform") > 8192 { 2749 + return xerrors.Errorf("Value in field \"platform\" was too long") 2750 + } 2751 + 2752 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("platform"))); err != nil { 2753 + return err 2754 + } 2755 + if _, err := cw.WriteString(string("platform")); err != nil { 2756 + return err 2757 + } 2758 + 2759 + if err := t.Platform.MarshalCBOR(cw); err != nil { 2760 + return err 2761 + } 2762 + } 2763 + 2764 + // t.MediaType (string) (string) 2765 + if len("mediaType") > 8192 { 2766 + return xerrors.Errorf("Value in field \"mediaType\" was too long") 2767 + } 2768 + 2769 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("mediaType"))); err != nil { 2770 + return err 2771 + } 2772 + if _, err := cw.WriteString(string("mediaType")); err != nil { 2773 + return err 2774 + } 2775 + 2776 + if len(t.MediaType) > 8192 { 2777 + return xerrors.Errorf("Value in field t.MediaType was too long") 2778 + } 2779 + 2780 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.MediaType))); err != nil { 2781 + return err 2782 + } 2783 + if _, err := cw.WriteString(string(t.MediaType)); err != nil { 2784 + return err 2785 + } 2786 + 2787 + // t.Annotations (map[string]string) (map) 2788 + if len("annotations") > 8192 { 2789 + return xerrors.Errorf("Value in field \"annotations\" was too long") 2790 + } 2791 + 2792 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("annotations"))); err != nil { 2793 + return err 2794 + } 2795 + if _, err := cw.WriteString(string("annotations")); err != nil { 2796 + return err 2797 + } 2798 + 2799 + { 2800 + if len(t.Annotations) > 4096 { 2801 + return xerrors.Errorf("cannot marshal t.Annotations map too large") 2802 + } 2803 + 2804 + if err := cw.WriteMajorTypeHeader(cbg.MajMap, uint64(len(t.Annotations))); err != nil { 2805 + return err 2806 + } 2807 + 2808 + keys := make([]string, 0, len(t.Annotations)) 2809 + for k := range t.Annotations { 2810 + keys = append(keys, k) 2811 + } 2812 + sort.Strings(keys) 2813 + for _, k := range keys { 2814 + v := t.Annotations[k] 2815 + 2816 + if len(k) > 8192 { 2817 + return xerrors.Errorf("Value in field k was too long") 2818 + } 2819 + 2820 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(k))); err != nil { 2821 + return err 2822 + } 2823 + if _, err := cw.WriteString(string(k)); err != nil { 2824 + return err 2825 + } 2826 + 2827 + if len(v) > 8192 { 2828 + return xerrors.Errorf("Value in field v was too long") 2829 + } 2830 + 2831 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(v))); err != nil { 2832 + return err 2833 + } 2834 + if _, err := cw.WriteString(string(v)); err != nil { 2835 + return err 2836 + } 2837 + 2838 + } 2839 + } 2840 + return nil 2841 + } 2842 + 2843 + func (t *ManifestReference) UnmarshalCBOR(r io.Reader) (err error) { 2844 + *t = ManifestReference{} 2845 + 2846 + cr := cbg.NewCborReader(r) 2847 + 2848 + maj, extra, err := cr.ReadHeader() 2849 + if err != nil { 2850 + return err 2851 + } 2852 + defer func() { 2853 + if err == io.EOF { 2854 + err = io.ErrUnexpectedEOF 2855 + } 2856 + }() 2857 + 2858 + if maj != cbg.MajMap { 2859 + return fmt.Errorf("cbor input should be of type map") 2860 + } 2861 + 2862 + if extra > cbg.MaxLength { 2863 + return fmt.Errorf("ManifestReference: map struct too large (%d)", extra) 2864 + } 2865 + 2866 + n := extra 2867 + 2868 + nameBuf := make([]byte, 11) 2869 + for i := uint64(0); i < n; i++ { 2870 + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) 2871 + if err != nil { 2872 + return err 2873 + } 2874 + 2875 + if !ok { 2876 + // Field doesn't exist on this type, so ignore it 2877 + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { 2878 + return err 2879 + } 2880 + continue 2881 + } 2882 + 2883 + switch string(nameBuf[:nameLen]) { 2884 + // t.Size (int64) (int64) 2885 + case "size": 2886 + { 2887 + maj, extra, err := cr.ReadHeader() 2888 + if err != nil { 2889 + return err 2890 + } 2891 + var extraI int64 2892 + switch maj { 2893 + case cbg.MajUnsignedInt: 2894 + extraI = int64(extra) 2895 + if extraI < 0 { 2896 + return fmt.Errorf("int64 positive overflow") 2897 + } 2898 + case cbg.MajNegativeInt: 2899 + extraI = int64(extra) 2900 + if extraI < 0 { 2901 + return fmt.Errorf("int64 negative overflow") 2902 + } 2903 + extraI = -1 - extraI 2904 + default: 2905 + return fmt.Errorf("wrong type for int64 field: %d", maj) 2906 + } 2907 + 2908 + t.Size = int64(extraI) 2909 + } 2910 + // t.Digest (string) (string) 2911 + case "digest": 2912 + 2913 + { 2914 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2915 + if err != nil { 2916 + return err 2917 + } 2918 + 2919 + t.Digest = string(sval) 2920 + } 2921 + // t.Platform (atproto.Platform) (struct) 2922 + case "platform": 2923 + 2924 + { 2925 + 2926 + b, err := cr.ReadByte() 2927 + if err != nil { 2928 + return err 2929 + } 2930 + if b != cbg.CborNull[0] { 2931 + if err := cr.UnreadByte(); err != nil { 2932 + return err 2933 + } 2934 + t.Platform = new(Platform) 2935 + if err := t.Platform.UnmarshalCBOR(cr); err != nil { 2936 + return xerrors.Errorf("unmarshaling t.Platform pointer: %w", err) 2937 + } 2938 + } 2939 + 2940 + } 2941 + // t.MediaType (string) (string) 2942 + case "mediaType": 2943 + 2944 + { 2945 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2946 + if err != nil { 2947 + return err 2948 + } 2949 + 2950 + t.MediaType = string(sval) 2951 + } 2952 + // t.Annotations (map[string]string) (map) 2953 + case "annotations": 2954 + 2955 + maj, extra, err = cr.ReadHeader() 2956 + if err != nil { 2957 + return err 2958 + } 2959 + if maj != cbg.MajMap { 2960 + return fmt.Errorf("expected a map (major type 5)") 2961 + } 2962 + if extra > 4096 { 2963 + return fmt.Errorf("t.Annotations: map too large") 2964 + } 2965 + 2966 + t.Annotations = make(map[string]string, extra) 2967 + 2968 + for i, l := 0, int(extra); i < l; i++ { 2969 + 2970 + var k string 2971 + 2972 + { 2973 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2974 + if err != nil { 2975 + return err 2976 + } 2977 + 2978 + k = string(sval) 2979 + } 2980 + 2981 + var v string 2982 + 2983 + { 2984 + sval, err := cbg.ReadStringWithMax(cr, 8192) 2985 + if err != nil { 2986 + return err 2987 + } 2988 + 2989 + v = string(sval) 2990 + } 2991 + 2992 + t.Annotations[k] = v 2993 + 2994 + } 2995 + 2996 + default: 2997 + // Field doesn't exist on this type, so ignore it 2998 + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { 2999 + return err 3000 + } 3001 + } 3002 + } 3003 + 3004 + return nil 3005 + } 3006 + func (t *Platform) MarshalCBOR(w io.Writer) error { 3007 + if t == nil { 3008 + _, err := w.Write(cbg.CborNull) 3009 + return err 3010 + } 3011 + 3012 + cw := cbg.NewCborWriter(w) 3013 + fieldCount := 5 3014 + 3015 + if t.OSVersion == "" { 3016 + fieldCount-- 3017 + } 3018 + 3019 + if t.OSFeatures == nil { 3020 + fieldCount-- 3021 + } 3022 + 3023 + if t.Variant == "" { 3024 + fieldCount-- 3025 + } 3026 + 3027 + if _, err := cw.Write(cbg.CborEncodeMajorType(cbg.MajMap, uint64(fieldCount))); err != nil { 3028 + return err 3029 + } 3030 + 3031 + // t.OS (string) (string) 3032 + if len("os") > 8192 { 3033 + return xerrors.Errorf("Value in field \"os\" was too long") 3034 + } 3035 + 3036 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("os"))); err != nil { 3037 + return err 3038 + } 3039 + if _, err := cw.WriteString(string("os")); err != nil { 3040 + return err 3041 + } 3042 + 3043 + if len(t.OS) > 8192 { 3044 + return xerrors.Errorf("Value in field t.OS was too long") 3045 + } 3046 + 3047 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.OS))); err != nil { 3048 + return err 3049 + } 3050 + if _, err := cw.WriteString(string(t.OS)); err != nil { 3051 + return err 3052 + } 3053 + 3054 + // t.Variant (string) (string) 3055 + if t.Variant != "" { 3056 + 3057 + if len("variant") > 8192 { 3058 + return xerrors.Errorf("Value in field \"variant\" was too long") 3059 + } 3060 + 3061 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("variant"))); err != nil { 3062 + return err 3063 + } 3064 + if _, err := cw.WriteString(string("variant")); err != nil { 3065 + return err 3066 + } 3067 + 3068 + if len(t.Variant) > 8192 { 3069 + return xerrors.Errorf("Value in field t.Variant was too long") 3070 + } 3071 + 3072 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Variant))); err != nil { 3073 + return err 3074 + } 3075 + if _, err := cw.WriteString(string(t.Variant)); err != nil { 3076 + return err 3077 + } 3078 + } 3079 + 3080 + // t.OSVersion (string) (string) 3081 + if t.OSVersion != "" { 3082 + 3083 + if len("os.version") > 8192 { 3084 + return xerrors.Errorf("Value in field \"os.version\" was too long") 3085 + } 3086 + 3087 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("os.version"))); err != nil { 3088 + return err 3089 + } 3090 + if _, err := cw.WriteString(string("os.version")); err != nil { 3091 + return err 3092 + } 3093 + 3094 + if len(t.OSVersion) > 8192 { 3095 + return xerrors.Errorf("Value in field t.OSVersion was too long") 3096 + } 3097 + 3098 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.OSVersion))); err != nil { 3099 + return err 3100 + } 3101 + if _, err := cw.WriteString(string(t.OSVersion)); err != nil { 3102 + return err 3103 + } 3104 + } 3105 + 3106 + // t.OSFeatures ([]string) (slice) 3107 + if t.OSFeatures != nil { 3108 + 3109 + if len("os.features") > 8192 { 3110 + return xerrors.Errorf("Value in field \"os.features\" was too long") 3111 + } 3112 + 3113 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("os.features"))); err != nil { 3114 + return err 3115 + } 3116 + if _, err := cw.WriteString(string("os.features")); err != nil { 3117 + return err 3118 + } 3119 + 3120 + if len(t.OSFeatures) > 8192 { 3121 + return xerrors.Errorf("Slice value in field t.OSFeatures was too long") 3122 + } 3123 + 3124 + if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len(t.OSFeatures))); err != nil { 3125 + return err 3126 + } 3127 + for _, v := range t.OSFeatures { 3128 + if len(v) > 8192 { 3129 + return xerrors.Errorf("Value in field v was too long") 3130 + } 3131 + 3132 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(v))); err != nil { 3133 + return err 3134 + } 3135 + if _, err := cw.WriteString(string(v)); err != nil { 3136 + return err 3137 + } 3138 + 3139 + } 3140 + } 3141 + 3142 + // t.Architecture (string) (string) 3143 + if len("architecture") > 8192 { 3144 + return xerrors.Errorf("Value in field \"architecture\" was too long") 3145 + } 3146 + 3147 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("architecture"))); err != nil { 3148 + return err 3149 + } 3150 + if _, err := cw.WriteString(string("architecture")); err != nil { 3151 + return err 3152 + } 3153 + 3154 + if len(t.Architecture) > 8192 { 3155 + return xerrors.Errorf("Value in field t.Architecture was too long") 3156 + } 3157 + 3158 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Architecture))); err != nil { 3159 + return err 3160 + } 3161 + if _, err := cw.WriteString(string(t.Architecture)); err != nil { 3162 + return err 3163 + } 3164 + return nil 3165 + } 3166 + 3167 + func (t *Platform) UnmarshalCBOR(r io.Reader) (err error) { 3168 + *t = Platform{} 3169 + 3170 + cr := cbg.NewCborReader(r) 3171 + 3172 + maj, extra, err := cr.ReadHeader() 3173 + if err != nil { 3174 + return err 3175 + } 3176 + defer func() { 3177 + if err == io.EOF { 3178 + err = io.ErrUnexpectedEOF 3179 + } 3180 + }() 3181 + 3182 + if maj != cbg.MajMap { 3183 + return fmt.Errorf("cbor input should be of type map") 3184 + } 3185 + 3186 + if extra > cbg.MaxLength { 3187 + return fmt.Errorf("Platform: map struct too large (%d)", extra) 3188 + } 3189 + 3190 + n := extra 3191 + 3192 + nameBuf := make([]byte, 12) 3193 + for i := uint64(0); i < n; i++ { 3194 + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) 3195 + if err != nil { 3196 + return err 3197 + } 3198 + 3199 + if !ok { 3200 + // Field doesn't exist on this type, so ignore it 3201 + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { 3202 + return err 3203 + } 3204 + continue 3205 + } 3206 + 3207 + switch string(nameBuf[:nameLen]) { 3208 + // t.OS (string) (string) 3209 + case "os": 3210 + 3211 + { 3212 + sval, err := cbg.ReadStringWithMax(cr, 8192) 3213 + if err != nil { 3214 + return err 3215 + } 3216 + 3217 + t.OS = string(sval) 3218 + } 3219 + // t.Variant (string) (string) 3220 + case "variant": 3221 + 3222 + { 3223 + sval, err := cbg.ReadStringWithMax(cr, 8192) 3224 + if err != nil { 3225 + return err 3226 + } 3227 + 3228 + t.Variant = string(sval) 3229 + } 3230 + // t.OSVersion (string) (string) 3231 + case "os.version": 3232 + 3233 + { 3234 + sval, err := cbg.ReadStringWithMax(cr, 8192) 3235 + if err != nil { 3236 + return err 3237 + } 3238 + 3239 + t.OSVersion = string(sval) 3240 + } 3241 + // t.OSFeatures ([]string) (slice) 3242 + case "os.features": 3243 + 3244 + maj, extra, err = cr.ReadHeader() 3245 + if err != nil { 3246 + return err 3247 + } 3248 + 3249 + if extra > 8192 { 3250 + return fmt.Errorf("t.OSFeatures: array too large (%d)", extra) 3251 + } 3252 + 3253 + if maj != cbg.MajArray { 3254 + return fmt.Errorf("expected cbor array") 3255 + } 3256 + 3257 + if extra > 0 { 3258 + t.OSFeatures = make([]string, extra) 3259 + } 3260 + 3261 + for i := 0; i < int(extra); i++ { 3262 + { 3263 + var maj byte 3264 + var extra uint64 3265 + var err error 3266 + _ = maj 3267 + _ = extra 3268 + _ = err 3269 + 3270 + { 3271 + sval, err := cbg.ReadStringWithMax(cr, 8192) 3272 + if err != nil { 3273 + return err 3274 + } 3275 + 3276 + t.OSFeatures[i] = string(sval) 3277 + } 3278 + 3279 + } 3280 + } 3281 + // t.Architecture (string) (string) 3282 + case "architecture": 3283 + 3284 + { 3285 + sval, err := cbg.ReadStringWithMax(cr, 8192) 3286 + if err != nil { 3287 + return err 3288 + } 3289 + 3290 + t.Architecture = string(sval) 3291 + } 3292 + 3293 + default: 3294 + // Field doesn't exist on this type, so ignore it 3295 + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { 3296 + return err 3297 + } 3298 + } 3299 + } 3300 + 3301 + return nil 3302 + } 3303 + func (t *ATProtoBlobRef) MarshalCBOR(w io.Writer) error { 3304 + if t == nil { 3305 + _, err := w.Write(cbg.CborNull) 3306 + return err 3307 + } 3308 + 3309 + cw := cbg.NewCborWriter(w) 3310 + 3311 + if _, err := cw.Write([]byte{164}); err != nil { 3312 + return err 3313 + } 3314 + 3315 + // t.Ref (atproto.Link) (struct) 3316 + if len("ref") > 8192 { 3317 + return xerrors.Errorf("Value in field \"ref\" was too long") 3318 + } 3319 + 3320 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("ref"))); err != nil { 3321 + return err 3322 + } 3323 + if _, err := cw.WriteString(string("ref")); err != nil { 3324 + return err 3325 + } 3326 + 3327 + if err := t.Ref.MarshalCBOR(cw); err != nil { 3328 + return err 3329 + } 3330 + 3331 + // t.Size (int64) (int64) 3332 + if len("size") > 8192 { 3333 + return xerrors.Errorf("Value in field \"size\" was too long") 3334 + } 3335 + 3336 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("size"))); err != nil { 3337 + return err 3338 + } 3339 + if _, err := cw.WriteString(string("size")); err != nil { 3340 + return err 3341 + } 3342 + 3343 + if t.Size >= 0 { 3344 + if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Size)); err != nil { 3345 + return err 3346 + } 3347 + } else { 3348 + if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.Size-1)); err != nil { 3349 + return err 3350 + } 3351 + } 3352 + 3353 + // t.Type (string) (string) 3354 + if len("$type") > 8192 { 3355 + return xerrors.Errorf("Value in field \"$type\" was too long") 3356 + } 3357 + 3358 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("$type"))); err != nil { 3359 + return err 3360 + } 3361 + if _, err := cw.WriteString(string("$type")); err != nil { 3362 + return err 3363 + } 3364 + 3365 + if len(t.Type) > 8192 { 3366 + return xerrors.Errorf("Value in field t.Type was too long") 3367 + } 3368 + 3369 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Type))); err != nil { 3370 + return err 3371 + } 3372 + if _, err := cw.WriteString(string(t.Type)); err != nil { 3373 + return err 3374 + } 3375 + 3376 + // t.MimeType (string) (string) 3377 + if len("mimeType") > 8192 { 3378 + return xerrors.Errorf("Value in field \"mimeType\" was too long") 3379 + } 3380 + 3381 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("mimeType"))); err != nil { 3382 + return err 3383 + } 3384 + if _, err := cw.WriteString(string("mimeType")); err != nil { 3385 + return err 3386 + } 3387 + 3388 + if len(t.MimeType) > 8192 { 3389 + return xerrors.Errorf("Value in field t.MimeType was too long") 3390 + } 3391 + 3392 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.MimeType))); err != nil { 3393 + return err 3394 + } 3395 + if _, err := cw.WriteString(string(t.MimeType)); err != nil { 3396 + return err 3397 + } 3398 + return nil 3399 + } 3400 + 3401 + func (t *ATProtoBlobRef) UnmarshalCBOR(r io.Reader) (err error) { 3402 + *t = ATProtoBlobRef{} 3403 + 3404 + cr := cbg.NewCborReader(r) 3405 + 3406 + maj, extra, err := cr.ReadHeader() 3407 + if err != nil { 3408 + return err 3409 + } 3410 + defer func() { 3411 + if err == io.EOF { 3412 + err = io.ErrUnexpectedEOF 3413 + } 3414 + }() 3415 + 3416 + if maj != cbg.MajMap { 3417 + return fmt.Errorf("cbor input should be of type map") 3418 + } 3419 + 3420 + if extra > cbg.MaxLength { 3421 + return fmt.Errorf("ATProtoBlobRef: map struct too large (%d)", extra) 3422 + } 3423 + 3424 + n := extra 3425 + 3426 + nameBuf := make([]byte, 8) 3427 + for i := uint64(0); i < n; i++ { 3428 + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) 3429 + if err != nil { 3430 + return err 3431 + } 3432 + 3433 + if !ok { 3434 + // Field doesn't exist on this type, so ignore it 3435 + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { 3436 + return err 3437 + } 3438 + continue 3439 + } 3440 + 3441 + switch string(nameBuf[:nameLen]) { 3442 + // t.Ref (atproto.Link) (struct) 3443 + case "ref": 3444 + 3445 + { 3446 + 3447 + if err := t.Ref.UnmarshalCBOR(cr); err != nil { 3448 + return xerrors.Errorf("unmarshaling t.Ref: %w", err) 3449 + } 3450 + 3451 + } 3452 + // t.Size (int64) (int64) 3453 + case "size": 3454 + { 3455 + maj, extra, err := cr.ReadHeader() 3456 + if err != nil { 3457 + return err 3458 + } 3459 + var extraI int64 3460 + switch maj { 3461 + case cbg.MajUnsignedInt: 3462 + extraI = int64(extra) 3463 + if extraI < 0 { 3464 + return fmt.Errorf("int64 positive overflow") 3465 + } 3466 + case cbg.MajNegativeInt: 3467 + extraI = int64(extra) 3468 + if extraI < 0 { 3469 + return fmt.Errorf("int64 negative overflow") 3470 + } 3471 + extraI = -1 - extraI 3472 + default: 3473 + return fmt.Errorf("wrong type for int64 field: %d", maj) 3474 + } 3475 + 3476 + t.Size = int64(extraI) 3477 + } 3478 + // t.Type (string) (string) 3479 + case "$type": 3480 + 3481 + { 3482 + sval, err := cbg.ReadStringWithMax(cr, 8192) 3483 + if err != nil { 3484 + return err 3485 + } 3486 + 3487 + t.Type = string(sval) 3488 + } 3489 + // t.MimeType (string) (string) 3490 + case "mimeType": 3491 + 3492 + { 3493 + sval, err := cbg.ReadStringWithMax(cr, 8192) 3494 + if err != nil { 3495 + return err 3496 + } 3497 + 3498 + t.MimeType = string(sval) 3499 + } 3500 + 3501 + default: 3502 + // Field doesn't exist on this type, so ignore it 3503 + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { 3504 + return err 3505 + } 3506 + } 3507 + } 3508 + 3509 + return nil 3510 + } 3511 + func (t *Link) MarshalCBOR(w io.Writer) error { 3512 + if t == nil { 3513 + _, err := w.Write(cbg.CborNull) 3514 + return err 3515 + } 3516 + 3517 + cw := cbg.NewCborWriter(w) 3518 + 3519 + if _, err := cw.Write([]byte{161}); err != nil { 3520 + return err 3521 + } 3522 + 3523 + // t.Link (string) (string) 3524 + if len("$link") > 8192 { 3525 + return xerrors.Errorf("Value in field \"$link\" was too long") 3526 + } 3527 + 3528 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("$link"))); err != nil { 3529 + return err 3530 + } 3531 + if _, err := cw.WriteString(string("$link")); err != nil { 3532 + return err 3533 + } 3534 + 3535 + if len(t.Link) > 8192 { 3536 + return xerrors.Errorf("Value in field t.Link was too long") 3537 + } 3538 + 3539 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Link))); err != nil { 3540 + return err 3541 + } 3542 + if _, err := cw.WriteString(string(t.Link)); err != nil { 3543 + return err 3544 + } 3545 + return nil 3546 + } 3547 + 3548 + func (t *Link) UnmarshalCBOR(r io.Reader) (err error) { 3549 + *t = Link{} 3550 + 3551 + cr := cbg.NewCborReader(r) 3552 + 3553 + maj, extra, err := cr.ReadHeader() 3554 + if err != nil { 3555 + return err 3556 + } 3557 + defer func() { 3558 + if err == io.EOF { 3559 + err = io.ErrUnexpectedEOF 3560 + } 3561 + }() 3562 + 3563 + if maj != cbg.MajMap { 3564 + return fmt.Errorf("cbor input should be of type map") 3565 + } 3566 + 3567 + if extra > cbg.MaxLength { 3568 + return fmt.Errorf("Link: map struct too large (%d)", extra) 3569 + } 3570 + 3571 + n := extra 3572 + 3573 + nameBuf := make([]byte, 5) 3574 + for i := uint64(0); i < n; i++ { 3575 + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 8192) 3576 + if err != nil { 3577 + return err 3578 + } 3579 + 3580 + if !ok { 3581 + // Field doesn't exist on this type, so ignore it 3582 + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { 3583 + return err 3584 + } 3585 + continue 3586 + } 3587 + 3588 + switch string(nameBuf[:nameLen]) { 3589 + // t.Link (string) (string) 3590 + case "$link": 3591 + 3592 + { 3593 + sval, err := cbg.ReadStringWithMax(cr, 8192) 3594 + if err != nil { 3595 + return err 3596 + } 3597 + 3598 + t.Link = string(sval) 3599 + } 3600 + 3601 + default: 3602 + // Field doesn't exist on this type, so ignore it 3603 + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { 3604 + return err 3605 + } 3606 + } 3607 + } 3608 + 3609 + return nil 3610 + }
+5 -5
pkg/atproto/client.go
··· 266 266 // ATProtoBlobRef represents a reference to a blob in ATProto's native blob storage 267 267 // This is different from OCIBlobDescriptor which describes OCI image layers 268 268 type ATProtoBlobRef struct { 269 - Type string `json:"$type"` 270 - Ref Link `json:"ref"` 271 - MimeType string `json:"mimeType"` 272 - Size int64 `json:"size"` 269 + Type string `json:"$type" cborgen:"$type"` 270 + Ref Link `json:"ref" cborgen:"ref"` 271 + MimeType string `json:"mimeType" cborgen:"mimeType"` 272 + Size int64 `json:"size" cborgen:"size"` 273 273 } 274 274 275 275 // Link represents an IPFS link to blob content 276 276 type Link struct { 277 - Link string `json:"$link"` 277 + Link string `json:"$link" cborgen:"$link"` 278 278 } 279 279 280 280 // UploadBlob uploads binary data to the PDS and returns a blob reference
+6
pkg/atproto/endpoints.go
··· 45 45 // Request: {"repository": "...", "tag": "...", "userDid": "...", "userHandle": "...", "manifest": {...}} 46 46 // Response: {"success": true, "layersCreated": 5, "postCreated": true, "postUri": "at://..."} 47 47 HoldNotifyManifest = "/xrpc/io.atcr.hold.notifyManifest" 48 + 49 + // HoldGetReferrers queries for ORAS artifacts that reference a subject manifest (SBOM, signatures, scan reports). 50 + // Method: GET 51 + // Query: digest={sha256:...}&artifactType={optional-filter} 52 + // Response: {"referrers": [{"digest": "...", "artifactType": "...", "annotations": {...}}, ...]} 53 + HoldGetReferrers = "/xrpc/io.atcr.hold.getReferrers" 48 54 ) 49 55 50 56 // Hold service crew management endpoints (io.atcr.hold.*)
+7 -1
pkg/atproto/generate.go
··· 25 25 ) 26 26 27 27 func main() { 28 - // Generate map-style encoders for CrewRecord, CaptainRecord, LayerRecord, and TangledProfileRecord 28 + // Generate map-style encoders for all ATProto records and nested types 29 29 if err := cbg.WriteMapEncodersToFile("cbor_gen.go", "atproto", 30 30 atproto.CrewRecord{}, 31 31 atproto.CaptainRecord{}, 32 32 atproto.LayerRecord{}, 33 33 atproto.TangledProfileRecord{}, 34 + atproto.ManifestRecord{}, 35 + atproto.BlobReference{}, 36 + atproto.ManifestReference{}, 37 + atproto.Platform{}, 38 + atproto.ATProtoBlobRef{}, 39 + atproto.Link{}, 34 40 ); err != nil { 35 41 fmt.Printf("Failed to generate CBOR encoders: %v\n", err) 36 42 os.Exit(1)
+50 -32
pkg/atproto/lexicon.go
··· 53 53 // This follows the OCI image manifest specification but stored as an ATProto record 54 54 type ManifestRecord struct { 55 55 // Type should be "io.atcr.manifest" 56 - Type string `json:"$type"` 56 + Type string `json:"$type" cborgen:"$type"` 57 57 58 58 // Repository is the name of the repository (e.g., "myapp") 59 - Repository string `json:"repository"` 59 + Repository string `json:"repository" cborgen:"repository"` 60 60 61 61 // Digest is the content digest (e.g., "sha256:abc123...") 62 - Digest string `json:"digest"` 62 + Digest string `json:"digest" cborgen:"digest"` 63 63 64 64 // HoldDID is the DID of the hold service where blobs are stored 65 65 // This is the primary reference for hold resolution 66 66 // e.g., "did:web:hold01.atcr.io" 67 - HoldDID string `json:"holdDid,omitempty"` 67 + HoldDID string `json:"holdDid,omitempty" cborgen:"holdDid,omitempty"` 68 68 69 69 // HoldEndpoint is the hold service endpoint URL where blobs are stored (DEPRECATED) 70 70 // Kept for backward compatibility with manifests created before DID migration 71 71 // New manifests should use HoldDID instead 72 72 // This is a historical reference that doesn't change even if user's default hold changes 73 - HoldEndpoint string `json:"holdEndpoint,omitempty"` 73 + HoldEndpoint string `json:"holdEndpoint,omitempty" cborgen:"holdEndpoint,omitempty"` 74 74 75 75 // MediaType is the OCI media type (e.g., "application/vnd.oci.image.manifest.v1+json") 76 - MediaType string `json:"mediaType"` 76 + MediaType string `json:"mediaType" cborgen:"mediaType"` 77 + 78 + // ArtifactType distinguishes ORAS artifacts (SBOMs, signatures, scan reports) 79 + // e.g., "application/spdx+json", "application/vnd.atcr.vulnerabilities+json" 80 + // Empty for regular image manifests 81 + ArtifactType string `json:"artifactType,omitempty" cborgen:"artifactType,omitempty"` 82 + 83 + // OwnerDID is the DID of the user who owns this manifest (for multi-tenant holds) 84 + // Used for ORAS artifacts stored in hold's PDS to track ownership 85 + OwnerDID string `json:"ownerDid,omitempty" cborgen:"ownerDid,omitempty"` 86 + 87 + // ScannedAt is the timestamp when this artifact was scanned (for SBOM/vuln artifacts) 88 + ScannedAt string `json:"scannedAt,omitempty" cborgen:"scannedAt,omitempty"` 89 + 90 + // ScannerVersion is the version of the scanner that generated this artifact 91 + // e.g., "syft-v1.36.0", "grype-v0.102.0" 92 + ScannerVersion string `json:"scannerVersion,omitempty" cborgen:"scannerVersion,omitempty"` 77 93 78 94 // SchemaVersion is the OCI schema version (typically 2) 79 - SchemaVersion int `json:"schemaVersion"` 95 + SchemaVersion int64 `json:"schemaVersion" cborgen:"schemaVersion"` 80 96 81 97 // Config references the image configuration blob (for image manifests) 82 98 // Nil for manifest lists/indexes 83 - Config *BlobReference `json:"config,omitempty"` 99 + Config *BlobReference `json:"config,omitempty" cborgen:"config,omitempty"` 84 100 85 101 // Layers references the filesystem layers (for image manifests) 86 102 // Empty for manifest lists/indexes 87 - Layers []BlobReference `json:"layers,omitempty"` 103 + Layers []BlobReference `json:"layers,omitempty" cborgen:"layers,omitempty"` 88 104 89 105 // Manifests references other manifests (for manifest lists/indexes) 90 106 // Empty for image manifests 91 - Manifests []ManifestReference `json:"manifests,omitempty"` 107 + Manifests []ManifestReference `json:"manifests,omitempty" cborgen:"manifests,omitempty"` 92 108 93 109 // Annotations contains arbitrary metadata 94 - Annotations map[string]string `json:"annotations,omitempty"` 110 + Annotations map[string]string `json:"annotations,omitempty" cborgen:"annotations"` 95 111 96 112 // Subject references another manifest (for attestations, signatures, etc.) 97 - Subject *BlobReference `json:"subject,omitempty"` 113 + Subject *BlobReference `json:"subject,omitempty" cborgen:"subject,omitempty"` 98 114 99 115 // ManifestBlob is a reference to the manifest blob stored in ATProto blob storage 100 - ManifestBlob *ATProtoBlobRef `json:"manifestBlob,omitempty"` 116 + ManifestBlob *ATProtoBlobRef `json:"manifestBlob,omitempty" cborgen:"manifestBlob,omitempty"` 101 117 102 - // CreatedAt timestamp 103 - CreatedAt time.Time `json:"createdAt"` 118 + // CreatedAt timestamp (RFC3339) 119 + CreatedAt string `json:"createdAt" cborgen:"createdAt"` 104 120 } 105 121 106 122 // BlobReference represents a reference to a blob (layer or config) 107 123 // Blobs are stored in S3 and referenced by digest 108 124 type BlobReference struct { 109 125 // MediaType of the blob 110 - MediaType string `json:"mediaType"` 126 + MediaType string `json:"mediaType" cborgen:"mediaType"` 111 127 112 128 // Digest is the content digest (e.g., "sha256:abc123...") 113 - Digest string `json:"digest"` 129 + Digest string `json:"digest" cborgen:"digest"` 114 130 115 131 // Size in bytes 116 - Size int64 `json:"size"` 132 + Size int64 `json:"size" cborgen:"size"` 117 133 118 134 // URLs where the blob can be retrieved (S3 URLs) 119 - URLs []string `json:"urls,omitempty"` 135 + URLs []string `json:"urls,omitempty" cborgen:"urls,omitempty"` 120 136 121 137 // Annotations for the blob 122 - Annotations map[string]string `json:"annotations,omitempty"` 138 + Annotations map[string]string `json:"annotations,omitempty" cborgen:"annotations"` 123 139 } 124 140 125 141 // ManifestReference represents a reference to a manifest in a manifest list/index 126 142 type ManifestReference struct { 127 143 // MediaType of the referenced manifest 128 - MediaType string `json:"mediaType"` 144 + MediaType string `json:"mediaType" cborgen:"mediaType"` 129 145 130 146 // Digest is the content digest (e.g., "sha256:abc123...") 131 - Digest string `json:"digest"` 147 + Digest string `json:"digest" cborgen:"digest"` 132 148 133 149 // Size in bytes 134 - Size int64 `json:"size"` 150 + Size int64 `json:"size" cborgen:"size"` 135 151 136 152 // Platform describes the platform/architecture this manifest is for 137 - Platform *Platform `json:"platform,omitempty"` 153 + Platform *Platform `json:"platform,omitempty" cborgen:"platform,omitempty"` 138 154 139 155 // Annotations for the manifest reference 140 - Annotations map[string]string `json:"annotations,omitempty"` 156 + Annotations map[string]string `json:"annotations,omitempty" cborgen:"annotations"` 141 157 } 142 158 143 159 // Platform describes the platform (OS/architecture) for a manifest 144 160 type Platform struct { 145 161 // Architecture is the CPU architecture (e.g., "amd64", "arm64", "arm") 146 - Architecture string `json:"architecture"` 162 + Architecture string `json:"architecture" cborgen:"architecture"` 147 163 148 164 // OS is the operating system (e.g., "linux", "windows", "darwin") 149 - OS string `json:"os"` 165 + OS string `json:"os" cborgen:"os"` 150 166 151 167 // OSVersion is the optional OS version 152 - OSVersion string `json:"os.version,omitempty"` 168 + OSVersion string `json:"os.version,omitempty" cborgen:"os.version,omitempty"` 153 169 154 170 // OSFeatures is an optional list of OS features 155 - OSFeatures []string `json:"os.features,omitempty"` 171 + OSFeatures []string `json:"os.features,omitempty" cborgen:"os.features,omitempty"` 156 172 157 173 // Variant is the optional CPU variant (e.g., "v7" for ARM) 158 - Variant string `json:"variant,omitempty"` 174 + Variant string `json:"variant,omitempty" cborgen:"variant,omitempty"` 159 175 } 160 176 161 177 // NewManifestRecord creates a new manifest record from OCI manifest JSON ··· 164 180 var ociData struct { 165 181 SchemaVersion int `json:"schemaVersion"` 166 182 MediaType string `json:"mediaType"` 183 + ArtifactType string `json:"artifactType,omitempty"` 167 184 Config json.RawMessage `json:"config,omitempty"` 168 185 Layers []json.RawMessage `json:"layers,omitempty"` 169 186 Manifests []json.RawMessage `json:"manifests,omitempty"` ··· 195 212 Repository: repository, 196 213 Digest: digest, 197 214 MediaType: ociData.MediaType, 198 - SchemaVersion: ociData.SchemaVersion, 215 + ArtifactType: ociData.ArtifactType, 216 + SchemaVersion: int64(ociData.SchemaVersion), 199 217 Annotations: ociData.Annotations, 200 218 // ManifestBlob will be set by the caller after uploading to blob storage 201 - CreatedAt: time.Now(), 219 + CreatedAt: time.Now().Format(time.RFC3339), 202 220 } 203 221 204 222 if isManifestList {
+1 -1
pkg/atproto/lexicon_test.go
··· 146 146 if record.Annotations["org.opencontainers.image.created"] != "2025-01-01T00:00:00Z" { 147 147 t.Errorf("Annotations missing expected key") 148 148 } 149 - if record.CreatedAt.IsZero() { 149 + if record.CreatedAt == "0" { 150 150 t.Error("CreatedAt should not be zero") 151 151 } 152 152 if record.Subject != nil {
+40
pkg/hold/config.go
··· 22 22 Server ServerConfig `yaml:"server"` 23 23 Registration RegistrationConfig `yaml:"registration"` 24 24 Database DatabaseConfig `yaml:"database"` 25 + Scanner ScannerConfig `yaml:"scanner"` 25 26 } 26 27 27 28 // RegistrationConfig defines auto-registration settings ··· 85 86 KeyPath string `yaml:"key_path"` 86 87 } 87 88 89 + // ScannerConfig defines SBOM and vulnerability scanning settings 90 + type ScannerConfig struct { 91 + // Enabled controls whether SBOM scanning is enabled (from env: HOLD_SBOM_ENABLED) 92 + Enabled bool `yaml:"enabled"` 93 + 94 + // Workers is the number of concurrent scan workers (from env: HOLD_SBOM_WORKERS) 95 + Workers int `yaml:"workers"` 96 + 97 + // VulnEnabled controls whether vulnerability scanning is enabled (from env: HOLD_VULN_ENABLED) 98 + VulnEnabled bool `yaml:"vuln_enabled"` 99 + 100 + // VulnDBPath is the path to store Grype vulnerability database (from env: HOLD_VULN_DB_PATH) 101 + // Defaults to {DatabasePath}/grype-db 102 + VulnDBPath string `yaml:"vuln_db_path"` 103 + 104 + // VulnDBUpdateInterval is how often to update the vulnerability database (from env: HOLD_VULN_DB_UPDATE_INTERVAL) 105 + // Format: duration string (e.g., "24h", "1h30m") 106 + // Defaults to 24 hours 107 + VulnDBUpdateInterval time.Duration `yaml:"vuln_db_update_interval"` 108 + } 109 + 88 110 // LoadConfigFromEnv loads all configuration from environment variables 89 111 func LoadConfigFromEnv() (*Config, error) { 90 112 cfg := &Config{ ··· 119 141 if cfg.Database.KeyPath == "" && cfg.Database.Path != "" { 120 142 // Default: signing key in same directory as carstore 121 143 cfg.Database.KeyPath = filepath.Join(cfg.Database.Path, "signing.key") 144 + } 145 + 146 + // Scanner configuration (optional - enables SBOM/vulnerability scanning) 147 + cfg.Scanner.Enabled = os.Getenv("HOLD_SBOM_ENABLED") == "true" 148 + cfg.Scanner.Workers = 2 // Default 149 + if workersStr := os.Getenv("HOLD_SBOM_WORKERS"); workersStr != "" { 150 + var workersInt int 151 + if _, err := fmt.Sscanf(workersStr, "%d", &workersInt); err == nil && workersInt > 0 { 152 + cfg.Scanner.Workers = workersInt 153 + } 154 + } 155 + cfg.Scanner.VulnEnabled = os.Getenv("HOLD_VULN_ENABLED") == "true" 156 + cfg.Scanner.VulnDBPath = getEnvOrDefault("HOLD_VULN_DB_PATH", filepath.Join(cfg.Database.Path, "grype-db")) 157 + cfg.Scanner.VulnDBUpdateInterval = 24 * time.Hour // Default 158 + if intervalStr := os.Getenv("HOLD_VULN_DB_UPDATE_INTERVAL"); intervalStr != "" { 159 + if interval, err := time.ParseDuration(intervalStr); err == nil { 160 + cfg.Scanner.VulnDBUpdateInterval = interval 161 + } 122 162 } 123 163 124 164 // Storage configuration - build from env vars based on storage type
+134 -5
pkg/hold/oci/multipart.go
··· 4 4 "context" 5 5 "crypto/sha256" 6 6 "encoding/hex" 7 + "errors" 7 8 "fmt" 9 + "io" 8 10 "log/slog" 9 11 "sort" 10 12 "strings" ··· 387 389 } 388 390 slog.Debug("Source blob verified", "path", sourcePath) 389 391 390 - // Move from temp to final digest location using driver 391 - // Driver handles path management correctly (including S3 prefix) 392 - if err := h.driver.Move(ctx, sourcePath, destPath); err != nil { 393 - slog.Error("Failed to move blob", 392 + // Move from temp to final digest location 393 + // Strategy: Use S3 CopyObject directly instead of driver's Move() to avoid 394 + // UploadPartCopy issues with S3-compatible services (Storj, MinIO, etc.) 395 + // 396 + // Fallback order: 397 + // 1. S3 CopyObject (server-side, works up to 5GB, universally supported) 398 + // 2. Manual copy-and-delete (slower but works for any size/backend) 399 + // 400 + // Note: We skip driver.Move() because it uses UploadPartCopy for files >100MB, 401 + // which many S3-compatible services don't support (returns 501 Not Implemented) 402 + 403 + if err := h.s3CopyObject(ctx, sourcePath, destPath); err != nil { 404 + // S3 CopyObject failed (not S3, file too large, or other error) 405 + // Fall back to manual copy-and-delete 406 + slog.Warn("S3 CopyObject failed, attempting read/write fallback", 394 407 "source", sourcePath, 395 408 "dest", destPath, 396 409 "error", err) 397 - return fmt.Errorf("failed to move blob to final location: %w", err) 410 + 411 + if fallbackErr := h.copyAndDelete(ctx, sourcePath, destPath); fallbackErr != nil { 412 + slog.Error("All move strategies failed", 413 + "source", sourcePath, 414 + "dest", destPath, 415 + "s3CopyErr", err, 416 + "fallbackErr", fallbackErr) 417 + return fmt.Errorf("failed to move blob to final location: %w", fallbackErr) 418 + } 398 419 } 399 420 400 421 slog.Info("Moved blob to final location", ··· 498 519 } 499 520 // Add quotes 500 521 return fmt.Sprintf("\"%s\"", etag) 522 + } 523 + 524 + // s3CopyObject uses S3's CopyObject API directly for server-side copy. 525 + // This works for objects up to 5GB and is supported by most S3-compatible services. 526 + // Falls back to copyAndDelete if S3 is not available or the operation fails. 527 + func (h *XRPCHandler) s3CopyObject(ctx context.Context, sourcePath, destPath string) error { 528 + // Check if S3 is configured 529 + if h.s3Service.Client == nil { 530 + return fmt.Errorf("S3 not configured") 531 + } 532 + 533 + // Convert paths to S3 keys (remove leading slash and add prefix if configured) 534 + sourceKey := strings.TrimPrefix(sourcePath, "/") 535 + destKey := strings.TrimPrefix(destPath, "/") 536 + 537 + if h.s3Service.PathPrefix != "" { 538 + sourceKey = h.s3Service.PathPrefix + "/" + sourceKey 539 + destKey = h.s3Service.PathPrefix + "/" + destKey 540 + } 541 + 542 + // Construct the copy source (must be in format: bucket/key) 543 + copySource := h.s3Service.Bucket + "/" + sourceKey 544 + 545 + // Perform server-side copy using S3 CopyObject API 546 + // This works for objects up to 5GB in a single operation 547 + _, err := h.s3Service.Client.CopyObjectWithContext(ctx, &s3.CopyObjectInput{ 548 + Bucket: &h.s3Service.Bucket, 549 + Key: &destKey, 550 + CopySource: &copySource, 551 + }) 552 + if err != nil { 553 + return fmt.Errorf("S3 CopyObject failed: %w", err) 554 + } 555 + 556 + slog.Info("Successfully copied blob using S3 CopyObject (server-side)", 557 + "source", sourcePath, 558 + "dest", destPath) 559 + 560 + // Delete the source after successful copy 561 + if err := h.driver.Delete(ctx, sourcePath); err != nil { 562 + slog.Warn("Failed to delete source after S3 copy (destination created successfully)", 563 + "source", sourcePath, 564 + "error", err) 565 + // Don't return error - the copy succeeded, cleanup is best-effort 566 + } 567 + 568 + return nil 569 + } 570 + 571 + // copyAndDelete implements a fallback for Move() when the storage driver doesn't support 572 + // efficient server-side copy operations (e.g., S3 UploadPartCopy not available). 573 + // It reads from source, writes to destination, then deletes source. 574 + func (h *XRPCHandler) copyAndDelete(ctx context.Context, sourcePath, destPath string) error { 575 + // Read from source 576 + reader, err := h.driver.Reader(ctx, sourcePath, 0) 577 + if err != nil { 578 + return fmt.Errorf("failed to open source for reading: %w", err) 579 + } 580 + defer reader.Close() 581 + 582 + // Create writer for destination 583 + writer, err := h.driver.Writer(ctx, destPath, false) 584 + if err != nil { 585 + return fmt.Errorf("failed to create destination writer: %w", err) 586 + } 587 + 588 + // Copy data from source to destination 589 + // Use a buffered approach to avoid loading entire blob into memory 590 + buf := make([]byte, 32*1024*1024) // 32MB buffer 591 + var totalCopied int64 592 + for { 593 + n, readErr := reader.Read(buf) 594 + if n > 0 { 595 + written, writeErr := writer.Write(buf[:n]) 596 + if writeErr != nil { 597 + writer.Cancel(ctx) 598 + return fmt.Errorf("failed to write to destination: %w", writeErr) 599 + } 600 + totalCopied += int64(written) 601 + } 602 + if readErr != nil { 603 + if errors.Is(readErr, io.EOF) { 604 + break 605 + } 606 + writer.Cancel(ctx) 607 + return fmt.Errorf("failed to read from source: %w", readErr) 608 + } 609 + } 610 + 611 + // Commit the destination 612 + if err := writer.Commit(ctx); err != nil { 613 + return fmt.Errorf("failed to commit destination: %w", err) 614 + } 615 + 616 + // Delete the source 617 + if err := h.driver.Delete(ctx, sourcePath); err != nil { 618 + slog.Warn("Failed to delete source after copy (destination committed successfully)", 619 + "source", sourcePath, 620 + "error", err) 621 + // Don't return error - the copy succeeded, cleanup is best-effort 622 + } 623 + 624 + slog.Info("Successfully copied blob using fallback method", 625 + "source", sourcePath, 626 + "dest", destPath, 627 + "size", totalCopied) 628 + 629 + return nil 501 630 } 502 631 503 632 // blobPath converts a digest (e.g., "sha256:abc123...") or temp path to a storage path
+78 -10
pkg/hold/oci/xrpc.go
··· 9 9 10 10 "atcr.io/pkg/atproto" 11 11 "atcr.io/pkg/hold/pds" 12 + "atcr.io/pkg/hold/scanner" 12 13 "atcr.io/pkg/s3" 13 14 storagedriver "github.com/distribution/distribution/v3/registry/storage/driver" 14 15 "github.com/go-chi/chi/v5" ··· 23 24 pds *pds.HoldPDS 24 25 httpClient pds.HTTPClient 25 26 enableBlueskyPosts bool 27 + scanQueue ScanQueue // Scanner queue interface (nil if scanning disabled) 28 + } 29 + 30 + // ScanQueue is an interface for enqueuing scan jobs 31 + // This allows us to pass in a scanner queue without importing the scanner package (avoiding circular deps) 32 + type ScanQueue interface { 33 + Enqueue(job any) error 26 34 } 27 35 28 36 // NewXRPCHandler creates a new OCI XRPC handler 29 - func NewXRPCHandler(holdPDS *pds.HoldPDS, s3Service s3.S3Service, driver storagedriver.StorageDriver, disablePresignedURLs bool, enableBlueskyPosts bool, httpClient pds.HTTPClient) *XRPCHandler { 37 + func NewXRPCHandler(holdPDS *pds.HoldPDS, s3Service s3.S3Service, driver storagedriver.StorageDriver, disablePresignedURLs bool, enableBlueskyPosts bool, httpClient pds.HTTPClient, scanQueue ScanQueue) *XRPCHandler { 30 38 return &XRPCHandler{ 31 39 driver: driver, 32 40 disablePresignedURLs: disablePresignedURLs, ··· 35 43 pds: holdPDS, 36 44 httpClient: httpClient, 37 45 enableBlueskyPosts: enableBlueskyPosts, 46 + scanQueue: scanQueue, 38 47 } 39 48 } 40 49 ··· 215 224 216 225 // Parse request 217 226 var req struct { 218 - Repository string `json:"repository"` 219 - Tag string `json:"tag"` 220 - UserDID string `json:"userDid"` 221 - UserHandle string `json:"userHandle"` 222 - Manifest struct { 227 + Repository string `json:"repository"` 228 + Tag string `json:"tag"` 229 + ManifestDigest string `json:"manifestDigest"` 230 + UserDID string `json:"userDid"` 231 + UserHandle string `json:"userHandle"` 232 + Manifest struct { 223 233 MediaType string `json:"mediaType"` 224 234 Config struct { 225 235 Digest string `json:"digest"` ··· 237 247 RespondError(w, http.StatusBadRequest, err.Error()) 238 248 return 239 249 } 250 + 251 + slog.Info("Received manifest notification", 252 + "repository", req.Repository, 253 + "tag", req.Tag, 254 + "layerCount", len(req.Manifest.Layers), 255 + "hasConfig", req.Manifest.Config.Digest != "") 240 256 241 257 // Verify user DID matches token 242 258 if req.UserDID != validatedUser.DID { ··· 287 303 var postURI string 288 304 postCreated := false 289 305 if postsEnabled { 290 - // Extract manifest digest from first layer (or use config digest as fallback) 291 - manifestDigest := req.Manifest.Config.Digest 292 - if len(req.Manifest.Layers) > 0 { 293 - manifestDigest = req.Manifest.Layers[0].Digest 306 + // Use the actual manifest digest from the request 307 + manifestDigest := req.ManifestDigest 308 + if manifestDigest == "" { 309 + // Fallback to config digest for backward compatibility (shouldn't happen with updated AppView) 310 + manifestDigest = req.Manifest.Config.Digest 294 311 } 295 312 296 313 postURI, err = h.pds.CreateManifestPost( ··· 306 323 slog.Error("Failed to create manifest post", "error", err) 307 324 } else { 308 325 postCreated = true 326 + } 327 + } 328 + 329 + // Enqueue vulnerability scan if scanner is enabled 330 + if h.scanQueue != nil { 331 + // Use the actual manifest digest from the request 332 + manifestDigest := req.ManifestDigest 333 + if manifestDigest == "" { 334 + // Fallback to config digest for backward compatibility (shouldn't happen with updated AppView) 335 + manifestDigest = req.Manifest.Config.Digest 336 + slog.Warn("Manifest digest not provided in notification, using config digest as fallback", 337 + "repository", req.Repository, "configDigest", manifestDigest) 338 + } 339 + 340 + // Convert request layers to atproto.BlobReference 341 + layers := make([]atproto.BlobReference, len(req.Manifest.Layers)) 342 + for i, layer := range req.Manifest.Layers { 343 + layers[i] = atproto.BlobReference{ 344 + Digest: layer.Digest, 345 + Size: layer.Size, 346 + MediaType: layer.MediaType, 347 + } 348 + } 349 + 350 + // Create properly typed scan job 351 + scanJob := &scanner.ScanJob{ 352 + ManifestDigest: manifestDigest, 353 + Repository: req.Repository, 354 + Tag: req.Tag, 355 + UserDID: req.UserDID, 356 + UserHandle: req.UserHandle, 357 + Config: atproto.BlobReference{ 358 + Digest: req.Manifest.Config.Digest, 359 + Size: req.Manifest.Config.Size, 360 + MediaType: "application/vnd.oci.image.config.v1+json", 361 + }, 362 + Layers: layers, 363 + } 364 + 365 + slog.Info("Enqueueing scan job", 366 + "repository", req.Repository, 367 + "layersInJob", len(layers)) 368 + 369 + if err := h.scanQueue.Enqueue(scanJob); err != nil { 370 + slog.Error("Failed to enqueue scan job", "error", err, "repository", req.Repository) 371 + } else { 372 + slog.Info("Enqueued vulnerability scan", 373 + "repository", req.Repository, 374 + "tag", req.Tag, 375 + "digest", manifestDigest, 376 + "layers", len(req.Manifest.Layers)) 309 377 } 310 378 } 311 379
+1 -1
pkg/hold/oci/xrpc_test.go
··· 127 127 128 128 // Create OCI handler with buffered mode (no S3) 129 129 mockS3 := s3.S3Service{} 130 - handler := NewXRPCHandler(holdPDS, mockS3, driver, true, false, mockClient) 130 + handler := NewXRPCHandler(holdPDS, mockS3, driver, true, false, mockClient, nil) 131 131 132 132 return handler, ctx 133 133 }
+6
pkg/hold/pds/server.go
··· 267 267 return result, nil 268 268 } 269 269 270 + // CreateManifestRecord creates a manifest record with a specific rkey 271 + // Used by the scanner to store ORAS artifacts (SBOMs, vulnerability reports) 272 + func (p *HoldPDS) CreateManifestRecord(ctx context.Context, record *atproto.ManifestRecord, rkey string) (string, cid.Cid, error) { 273 + return p.repomgr.PutRecord(ctx, p.uid, atproto.ManifestCollection, rkey, record) 274 + } 275 + 270 276 // Close closes the carstore 271 277 func (p *HoldPDS) Close() error { 272 278 // TODO: Close session properly
+235
pkg/hold/pds/xrpc.go
··· 5 5 "context" 6 6 "encoding/json" 7 7 "fmt" 8 + "sort" 8 9 9 10 "atcr.io/pkg/atproto" 10 11 "atcr.io/pkg/s3" ··· 171 172 r.Get(atproto.IdentityResolveHandle, h.HandleResolveHandle) 172 173 r.Get(atproto.ActorGetProfile, h.HandleGetProfile) 173 174 r.Get(atproto.ActorGetProfiles, h.HandleGetProfiles) 175 + 176 + // ORAS/Scanner endpoints 177 + r.Get(atproto.HoldGetReferrers, h.HandleGetReferrers) 174 178 }) 175 179 176 180 // Blob read endpoints (conditional auth based on captain.public) ··· 1415 1419 // Clients should use multipart upload flow via com.atproto.repo.uploadBlob 1416 1420 return "" 1417 1421 } 1422 + 1423 + // HandleGetReferrers queries for ORAS artifacts (SBOMs, signatures, scan reports) that reference a subject manifest 1424 + // GET /xrpc/io.atcr.hold.getReferrers?digest=sha256:abc123&artifactType=application/vnd.atcr.vulnerabilities+json 1425 + func (h *XRPCHandler) HandleGetReferrers(w http.ResponseWriter, r *http.Request) { 1426 + ctx := r.Context() 1427 + 1428 + // Parse query parameters 1429 + digest := r.URL.Query().Get("digest") 1430 + artifactType := r.URL.Query().Get("artifactType") 1431 + 1432 + if digest == "" { 1433 + http.Error(w, "digest parameter required", http.StatusBadRequest) 1434 + return 1435 + } 1436 + 1437 + slog.Info("Querying referrers", "digest", digest, "artifactType", artifactType) 1438 + 1439 + // Query all manifest records from the hold's PDS using carstore 1440 + session, err := h.pds.carstore.ReadOnlySession(h.pds.uid) 1441 + if err != nil { 1442 + slog.Error("Failed to create session", "error", err) 1443 + http.Error(w, fmt.Sprintf("failed to create session: %v", err), http.StatusInternalServerError) 1444 + return 1445 + } 1446 + 1447 + head, err := h.pds.carstore.GetUserRepoHead(ctx, h.pds.uid) 1448 + if err != nil { 1449 + slog.Error("Failed to get repo head", "error", err) 1450 + http.Error(w, fmt.Sprintf("failed to get repo head: %v", err), http.StatusInternalServerError) 1451 + return 1452 + } 1453 + 1454 + if !head.Defined() { 1455 + // Empty repo, return empty referrers list 1456 + slog.Info("Empty repo, no referrers found") 1457 + response := map[string]interface{}{ 1458 + "referrers": []interface{}{}, 1459 + } 1460 + w.Header().Set("Content-Type", "application/json") 1461 + json.NewEncoder(w).Encode(response) 1462 + return 1463 + } 1464 + 1465 + repoHandle, err := repo.OpenRepo(ctx, session, head) 1466 + if err != nil { 1467 + slog.Error("Failed to open repo", "error", err) 1468 + http.Error(w, fmt.Sprintf("failed to open repo: %v", err), http.StatusInternalServerError) 1469 + return 1470 + } 1471 + 1472 + // Filter for referrers with matching subject 1473 + referrers := []map[string]interface{}{} 1474 + totalManifests := 0 1475 + 1476 + // Iterate over all records in the manifest collection 1477 + err = repoHandle.ForEach(ctx, atproto.ManifestCollection, func(k string, v cid.Cid) error { 1478 + totalManifests++ 1479 + 1480 + // Get the record bytes directly from the repo 1481 + _, recBytes, err := repoHandle.GetRecordBytes(ctx, k) 1482 + if err != nil { 1483 + slog.Warn("Failed to get record", "key", k, "error", err) 1484 + return nil // Skip this record 1485 + } 1486 + 1487 + // Unmarshal the CBOR bytes into our concrete type 1488 + var manifest atproto.ManifestRecord 1489 + if err := manifest.UnmarshalCBOR(bytes.NewReader(*recBytes)); err != nil { 1490 + slog.Warn("Failed to unmarshal ManifestRecord", "key", k, "error", err) 1491 + return nil // Skip this record 1492 + } 1493 + 1494 + // Debug: log what we found 1495 + slog.Debug("Checking manifest", 1496 + "key", k, 1497 + "digest", manifest.Digest, 1498 + "hasSubject", manifest.Subject != nil, 1499 + "subjectDigest", func() string { 1500 + if manifest.Subject != nil { 1501 + return manifest.Subject.Digest 1502 + } 1503 + return "none" 1504 + }(), 1505 + "artifactType", manifest.ArtifactType, 1506 + "mediaType", manifest.MediaType) 1507 + 1508 + // Check if this manifest has a subject that matches the requested digest 1509 + if manifest.Subject != nil && manifest.Subject.Digest == digest { 1510 + // If artifactType filter is specified, only include matching artifacts 1511 + if artifactType != "" && manifest.ArtifactType != artifactType { 1512 + slog.Debug("Skipping referrer due to artifactType mismatch", 1513 + "key", k, 1514 + "digest", manifest.Digest, 1515 + "wantArtifactType", artifactType, 1516 + "gotArtifactType", manifest.ArtifactType) 1517 + return nil // Skip this record 1518 + } 1519 + 1520 + // Build referrer response 1521 + referrer := map[string]interface{}{ 1522 + "digest": manifest.Digest, 1523 + "mediaType": manifest.MediaType, 1524 + "size": 0, // We don't track manifest size currently 1525 + "artifactType": manifest.ArtifactType, 1526 + "annotations": manifest.Annotations, 1527 + } 1528 + 1529 + // Add scanner metadata if available 1530 + if manifest.ScannedAt != "" { 1531 + referrer["scannedAt"] = manifest.ScannedAt 1532 + } 1533 + if manifest.ScannerVersion != "" { 1534 + referrer["scannerVersion"] = manifest.ScannerVersion 1535 + } 1536 + if manifest.OwnerDID != "" { 1537 + referrer["ownerDid"] = manifest.OwnerDID 1538 + } 1539 + 1540 + // Fetch the actual vulnerability report blob data 1541 + // manifest.Digest is the ORAS manifest digest, we need to: 1542 + // 1. Fetch the ORAS manifest blob 1543 + // 2. Parse it to get layers[0].digest (the actual vulnerability report) 1544 + // 3. Fetch that blob 1545 + 1546 + // Step 1: Fetch ORAS manifest 1547 + orasManifestPath := fmt.Sprintf("/docker/registry/v2/blobs/sha256/%s/%s/data", 1548 + manifest.Digest[7:9], // First 2 chars after "sha256:" 1549 + manifest.Digest[7:]) // Full hex after "sha256:" 1550 + 1551 + orasManifestData, err := h.storageDriver.GetContent(ctx, orasManifestPath) 1552 + if err != nil { 1553 + slog.Warn("Failed to fetch ORAS manifest blob", 1554 + "digest", manifest.Digest, 1555 + "path", orasManifestPath, 1556 + "error", err) 1557 + // Continue without the blob data 1558 + } else { 1559 + // Step 2: Parse ORAS manifest to get vulnerability report digest 1560 + var orasManifest struct { 1561 + Layers []struct { 1562 + Digest string `json:"digest"` 1563 + } `json:"layers"` 1564 + } 1565 + if err := json.Unmarshal(orasManifestData, &orasManifest); err != nil { 1566 + slog.Warn("Failed to parse ORAS manifest JSON", 1567 + "digest", manifest.Digest, 1568 + "error", err) 1569 + } else if len(orasManifest.Layers) > 0 { 1570 + // Step 3: Fetch the vulnerability report blob from layers[0] 1571 + vulnReportDigest := orasManifest.Layers[0].Digest 1572 + vulnReportPath := fmt.Sprintf("/docker/registry/v2/blobs/sha256/%s/%s/data", 1573 + vulnReportDigest[7:9], 1574 + vulnReportDigest[7:]) 1575 + 1576 + vulnReportData, err := h.storageDriver.GetContent(ctx, vulnReportPath) 1577 + if err != nil { 1578 + slog.Warn("Failed to fetch vulnerability report blob", 1579 + "digest", vulnReportDigest, 1580 + "path", vulnReportPath, 1581 + "error", err) 1582 + } else { 1583 + // Parse and include the vulnerability report 1584 + var reportData map[string]interface{} 1585 + if err := json.Unmarshal(vulnReportData, &reportData); err != nil { 1586 + slog.Warn("Failed to parse vulnerability report JSON", 1587 + "digest", vulnReportDigest, 1588 + "error", err) 1589 + } else { 1590 + referrer["reportData"] = reportData 1591 + slog.Debug("Included vulnerability report data in referrer", 1592 + "orasDigest", manifest.Digest, 1593 + "reportDigest", vulnReportDigest, 1594 + "reportSize", len(vulnReportData)) 1595 + } 1596 + } 1597 + } 1598 + } 1599 + 1600 + slog.Debug("Found matching referrer", 1601 + "key", k, 1602 + "digest", manifest.Digest, 1603 + "artifactType", manifest.ArtifactType, 1604 + "annotations", manifest.Annotations, 1605 + "annotationsLen", len(manifest.Annotations)) 1606 + 1607 + referrers = append(referrers, referrer) 1608 + } 1609 + 1610 + return nil // Continue iteration 1611 + }) 1612 + 1613 + if err != nil && err != repo.ErrDoneIterating && !strings.Contains(err.Error(), "done iterating") { 1614 + slog.Error("Failed to iterate records", "error", err) 1615 + http.Error(w, fmt.Sprintf("failed to iterate records: %v", err), http.StatusInternalServerError) 1616 + return 1617 + } 1618 + 1619 + // Sort referrers by scannedAt timestamp (descending, most recent first) 1620 + // This ensures the AppView gets the latest scan result when it takes the first referrer 1621 + sort.Slice(referrers, func(i, j int) bool { 1622 + iScanned, iOk := referrers[i]["scannedAt"].(string) 1623 + jScanned, jOk := referrers[j]["scannedAt"].(string) 1624 + // If both have scannedAt, compare timestamps (reverse order for descending) 1625 + if iOk && jOk { 1626 + return iScanned > jScanned 1627 + } 1628 + // If only one has scannedAt, prefer that one 1629 + if iOk { 1630 + return true 1631 + } 1632 + if jOk { 1633 + return false 1634 + } 1635 + // Neither has scannedAt, maintain original order 1636 + return false 1637 + }) 1638 + 1639 + slog.Info("Found referrers", 1640 + "count", len(referrers), 1641 + "totalManifests", totalManifests, 1642 + "digest", digest, 1643 + "artifactType", artifactType) 1644 + 1645 + // Return response 1646 + response := map[string]interface{}{ 1647 + "referrers": referrers, 1648 + } 1649 + 1650 + w.Header().Set("Content-Type", "application/json") 1651 + json.NewEncoder(w).Encode(response) 1652 + }