Repository: jaegertracing/jaeger

Issue:
[chore]: Improve test coverage of remotesampling extension
### Requirement

We are aiming for 95% code coverage in the project

### Problem

https://app.codecov.io/gh/jaegertracing/jaeger/blob/main/cmd%2Fjaeger%2Finternal%2Fextension%2Fremotesampling%2Fextension.go

Lots of uncovered lines that could use extra tests. Also the Shutdown function does not need to wrap all errors, just append them to errors array, which will reduce the amount of uncovered (and hard to test) code.

### Proposal

_No response_

### Open questions

_No response_

Hints from issue comments:
@wololowarrior: @yurishkuro Added tests [here](https://github.com/jaegertracing/jaeger/pull/7441). But codecov seems to be failing @AnmolxSingh: @yurishkuro 
the expvar extension `cmd/jaeger/internal/extension/expvar/extension.go` also misses test coverage.
https://github.com/jaegertracing/jaeger/blob/fcbc43929eac38bdc5151e9af4655d54af5895d7/cmd/jaeger/internal/extension/expvar/extension.go#L67
The error branch is hard to test because `*http.Server.Shutdown` rarely returns an error in unit tests.

Would it make sense to apply a similar approach as in the above PR — i.e., removing the inner if — to help in achieving our goal of higher code cov?@yurishkuro: Yes@A-y-ush: Hi , is this issue still open to work ? 
@yurishkuro: it's open@A-y-ush: Great, i would like to work on it. 

Solution patch:
diff --git a/cmd/jaeger/internal/exporters/storageexporter/config.go b/cmd/jaeger/internal/exporters/storageexporter/config.go
index 68db9a8f..3d7b3875 100644
--- a/cmd/jaeger/internal/exporters/storageexporter/config.go
+++ b/cmd/jaeger/internal/exporters/storageexporter/config.go
@@ -6,6 +6,7 @@ package storageexporter
 import (
 	"github.com/asaskevich/govalidator"
 	"go.opentelemetry.io/collector/component"
+	"go.opentelemetry.io/collector/config/configoptional"
 	"go.opentelemetry.io/collector/config/configretry"
 	"go.opentelemetry.io/collector/confmap/xconfmap"
 	"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -18,9 +19,9 @@ var (
 
 // Config defines configuration for jaeger_storage_exporter.
 type Config struct {
-	TraceStorage string                          `mapstructure:"trace_storage" valid:"required"`
-	QueueConfig  exporterhelper.QueueBatchConfig `mapstructure:"queue" valid:"optional"`
-	RetryConfig  configretry.BackOffConfig       `mapstructure:"retry_on_failure"`
+	TraceStorage string                                                   `mapstructure:"trace_storage" valid:"required"`
+	QueueConfig  configoptional.Optional[exporterhelper.QueueBatchConfig] `mapstructure:"queue" valid:"optional"`
+	RetryConfig  configretry.BackOffConfig                                `mapstructure:"retry_on_failure"`
 }
 
 func (cfg *Config) Validate() error {
diff --git a/cmd/jaeger/internal/extension/jaegerquery/server.go b/cmd/jaeger/internal/extension/jaegerquery/server.go
index 4705774c..c82e46d4 100644
--- a/cmd/jaeger/internal/extension/jaegerquery/server.go
+++ b/cmd/jaeger/internal/extension/jaegerquery/server.go
@@ -12,6 +12,7 @@ import (
 	"go.opentelemetry.io/collector/extension"
 	"go.opentelemetry.io/collector/extension/extensioncapabilities"
 	"go.opentelemetry.io/otel/trace"
+	nooptrace "go.opentelemetry.io/otel/trace/noop"
 	"go.uber.org/zap"
 
 	"github.com/jaegertracing/jaeger/cmd/jaeger/internal/extension/jaegerstorage"
@@ -55,24 +56,24 @@ func (*server) Dependencies() []component.ID {
 }
 
 func (s *server) Start(ctx context.Context, host component.Host) error {
-	var tp trace.TracerProvider
+	var tp trace.TracerProvider = nooptrace.NewTracerProvider()
 	success := false
-	tp = jtracer.NoOp().OTEL
 	if s.config.EnableTracing {
 		// TODO OTel-collector does not initialize the tracer currently
 		// https://github.com/open-telemetry/opentelemetry-collector/issues/7532
 		//nolint
-		tracerProvider, err := jtracer.New("jaeger")
+		tracerProvider, tracerCloser, err := jtracer.NewProvider(ctx, "jaeger")
 		if err != nil {
 			return fmt.Errorf("could not initialize a tracer: %w", err)
 		}
-		tp = tracerProvider.OTEL
-		// make sure to close the tracer if subsequent code exists with error
+		tp = tracerProvider
+		// Store closer for tracer if this function exists successfully,
+		// otherwise call the closer right away.
 		defer func(ctx context.Context) {
 			if success {
-				s.closeTracer = tracerProvider.Close
+				s.closeTracer = tracerCloser
 			} else {
-				tracerProvider.Close(ctx)
+				tracerCloser(ctx)
 			}
 		}(ctx)
 	}
diff --git a/cmd/jaeger/internal/integration/trace_writer.go b/cmd/jaeger/internal/integration/trace_writer.go
index a2b2490b..6639aa58 100644
--- a/cmd/jaeger/internal/integration/trace_writer.go
+++ b/cmd/jaeger/internal/integration/trace_writer.go
@@ -11,8 +11,10 @@ import (
 
 	"go.opentelemetry.io/collector/component"
 	"go.opentelemetry.io/collector/component/componenttest"
+	"go.opentelemetry.io/collector/config/configoptional"
 	"go.opentelemetry.io/collector/config/configtls"
 	"go.opentelemetry.io/collector/exporter"
+	"go.opentelemetry.io/collector/exporter/exporterhelper"
 	"go.opentelemetry.io/collector/exporter/exportertest"
 	"go.opentelemetry.io/collector/exporter/otlpexporter"
 	"go.opentelemetry.io/collector/pdata/ptrace"
@@ -43,7 +45,8 @@ func createTraceWriter(logger *zap.Logger, port int) (*traceWriter, error) {
 	cfg.ClientConfig.Endpoint = fmt.Sprintf("localhost:%d", port)
 	cfg.TimeoutConfig.Timeout = 30 * time.Second
 	cfg.RetryConfig.Enabled = false
-	cfg.QueueConfig.Enabled = false
+	// Disable queue by setting it to None (no value present)
+	cfg.QueueConfig = configoptional.None[exporterhelper.QueueBatchConfig]()
 	cfg.ClientConfig.TLS = configtls.ClientConfig{
 		Insecure: true,
 	}
diff --git a/cmd/query/app/grpc_handler.go b/cmd/query/app/grpc_handler.go
index f526ca26..dee22c83 100644
--- a/cmd/query/app/grpc_handler.go
+++ b/cmd/query/app/grpc_handler.go
@@ -16,7 +16,6 @@ import (
 	"github.com/jaegertracing/jaeger-idl/proto-gen/api_v2"
 	"github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
 	_ "github.com/jaegertracing/jaeger/internal/gogocodec" // force gogo codec registration
-	"github.com/jaegertracing/jaeger/internal/jtracer"
 	"github.com/jaegertracing/jaeger/internal/storage/v1/api/spanstore"
 )
 
@@ -35,14 +34,12 @@ var (
 type GRPCHandler struct {
 	queryService *querysvc.QueryService
 	logger       *zap.Logger
-	tracer       *jtracer.JTracer
 	nowFn        func() time.Time
 }
 
 // GRPCHandlerOptions contains optional members of GRPCHandler.
 type GRPCHandlerOptions struct {
 	Logger *zap.Logger
-	Tracer *jtracer.JTracer
 	NowFn  func() time.Time
 }
 
@@ -54,10 +51,6 @@ func NewGRPCHandler(queryService *querysvc.QueryService,
 		options.Logger = zap.NewNop()
 	}
 
-	if options.Tracer == nil {
-		options.Tracer = jtracer.NoOp()
-	}
-
 	if options.NowFn == nil {
 		options.NowFn = time.Now
 	}
@@ -65,7 +58,6 @@ func NewGRPCHandler(queryService *querysvc.QueryService,
 	return &GRPCHandler{
 		queryService: queryService,
 		logger:       options.Logger,
-		tracer:       options.Tracer,
 		nowFn:        options.NowFn,
 	}
 }
diff --git a/cmd/query/app/http_handler.go b/cmd/query/app/http_handler.go
index 4f81735e..d259b90a 100644
--- a/cmd/query/app/http_handler.go
+++ b/cmd/query/app/http_handler.go
@@ -19,13 +19,13 @@ import (
 	"github.com/gorilla/mux"
 	"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
 	"go.opentelemetry.io/otel/trace"
+	nooptrace "go.opentelemetry.io/otel/trace/noop"
 	"go.uber.org/zap"
 
 	"github.com/jaegertracing/jaeger-idl/model/v1"
 	deepdependencies "github.com/jaegertracing/jaeger/cmd/query/app/ddg"
 	"github.com/jaegertracing/jaeger/cmd/query/app/qualitymetrics"
 	"github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
-	"github.com/jaegertracing/jaeger/internal/jtracer"
 	"github.com/jaegertracing/jaeger/internal/proto-gen/api_v2/metrics"
 	"github.com/jaegertracing/jaeger/internal/storage/metricstore/disabled"
 	"github.com/jaegertracing/jaeger/internal/storage/v1/api/metricstore"
@@ -102,7 +102,7 @@ func NewAPIHandler(queryService *querysvc.QueryService, options ...HandlerOption
 		aH.logger = zap.NewNop()
 	}
 	if aH.tracer == nil {
-		aH.tracer = jtracer.NoOp().OTEL
+		aH.tracer = nooptrace.NewTracerProvider()
 	}
 	return aH
 }
diff --git a/go.mod b/go.mod
index a95ef6ff..aa6a58e7 100644
--- a/go.mod
+++ b/go.mod
@@ -22,72 +22,72 @@ require (
 	github.com/jaegertracing/jaeger-idl v0.6.0
 	github.com/kr/pretty v0.3.1
 	github.com/olivere/elastic/v7 v7.0.32
-	github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.141.0
-	github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.141.0
-	github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.141.0
-	github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension v0.141.0
-	github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckv2extension v0.141.0
-	github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.141.0
-	github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.141.0
-	github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.141.0
-	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.141.0
-	github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.141.0
-	github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.141.0
-	github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.141.0
-	github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.141.0
-	github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.141.0
-	github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.141.0
+	github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.142.0
+	github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.142.0
+	github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.142.0
+	github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension v0.142.0
+	github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckv2extension v0.142.0
+	github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.142.0
+	github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.142.0
+	github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.142.0
+	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.142.0
+	github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.142.0
+	github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.142.0
+	github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.142.0
+	github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.142.0
+	github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.142.0
+	github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.142.0
 	github.com/prometheus/client_golang v1.23.2
 	github.com/prometheus/client_model v0.6.2
 	github.com/prometheus/common v0.67.4
-	github.com/spf13/cobra v1.10.1
+	github.com/spf13/cobra v1.10.2
 	github.com/spf13/pflag v1.0.10
 	github.com/spf13/viper v1.21.0
 	github.com/stretchr/testify v1.11.1
 	github.com/uber/jaeger-client-go v2.30.0+incompatible
-	go.opentelemetry.io/collector/client v1.47.0
-	go.opentelemetry.io/collector/component v1.47.0
-	go.opentelemetry.io/collector/component/componentstatus v0.141.0
-	go.opentelemetry.io/collector/component/componenttest v0.141.0
-	go.opentelemetry.io/collector/config/configauth v1.47.0
-	go.opentelemetry.io/collector/config/configgrpc v0.141.0
-	go.opentelemetry.io/collector/config/confighttp v0.141.0
-	go.opentelemetry.io/collector/config/confighttp/xconfighttp v0.141.0
-	go.opentelemetry.io/collector/config/confignet v1.47.0
-	go.opentelemetry.io/collector/config/configoptional v1.47.0
-	go.opentelemetry.io/collector/config/configretry v1.47.0
-	go.opentelemetry.io/collector/config/configtls v1.47.0
-	go.opentelemetry.io/collector/confmap v1.47.0
-	go.opentelemetry.io/collector/confmap/provider/envprovider v1.47.0
-	go.opentelemetry.io/collector/confmap/provider/fileprovider v1.47.0
-	go.opentelemetry.io/collector/confmap/provider/httpprovider v1.47.0
-	go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.47.0
-	go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.47.0
-	go.opentelemetry.io/collector/confmap/xconfmap v0.141.0
-	go.opentelemetry.io/collector/connector v0.141.0
-	go.opentelemetry.io/collector/connector/forwardconnector v0.141.0
-	go.opentelemetry.io/collector/consumer v1.47.0
-	go.opentelemetry.io/collector/consumer/consumertest v0.141.0
-	go.opentelemetry.io/collector/exporter v1.47.0
-	go.opentelemetry.io/collector/exporter/debugexporter v0.141.0
-	go.opentelemetry.io/collector/exporter/exporterhelper v0.141.0
-	go.opentelemetry.io/collector/exporter/exportertest v0.141.0
-	go.opentelemetry.io/collector/exporter/nopexporter v0.141.0
-	go.opentelemetry.io/collector/exporter/otlpexporter v0.141.0
-	go.opentelemetry.io/collector/exporter/otlphttpexporter v0.141.0
-	go.opentelemetry.io/collector/extension v1.47.0
-	go.opentelemetry.io/collector/extension/zpagesextension v0.141.0
-	go.opentelemetry.io/collector/featuregate v1.47.0
-	go.opentelemetry.io/collector/otelcol v0.141.0
-	go.opentelemetry.io/collector/pdata v1.47.0
-	go.opentelemetry.io/collector/processor v1.47.0
-	go.opentelemetry.io/collector/processor/batchprocessor v0.141.0
-	go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.141.0
-	go.opentelemetry.io/collector/processor/processorhelper v0.141.0
-	go.opentelemetry.io/collector/processor/processortest v0.141.0
-	go.opentelemetry.io/collector/receiver v1.47.0
-	go.opentelemetry.io/collector/receiver/nopreceiver v0.141.0
-	go.opentelemetry.io/collector/receiver/otlpreceiver v0.141.0
+	go.opentelemetry.io/collector/client v1.48.0
+	go.opentelemetry.io/collector/component v1.48.0
+	go.opentelemetry.io/collector/component/componentstatus v0.142.0
+	go.opentelemetry.io/collector/component/componenttest v0.142.0
+	go.opentelemetry.io/collector/config/configauth v1.48.0
+	go.opentelemetry.io/collector/config/configgrpc v0.142.0
+	go.opentelemetry.io/collector/config/confighttp v0.142.0
+	go.opentelemetry.io/collector/config/confighttp/xconfighttp v0.142.0
+	go.opentelemetry.io/collector/config/confignet v1.48.0
+	go.opentelemetry.io/collector/config/configoptional v1.48.0
+	go.opentelemetry.io/collector/config/configretry v1.48.0
+	go.opentelemetry.io/collector/config/configtls v1.48.0
+	go.opentelemetry.io/collector/confmap v1.48.0
+	go.opentelemetry.io/collector/confmap/provider/envprovider v1.48.0
+	go.opentelemetry.io/collector/confmap/provider/fileprovider v1.48.0
+	go.opentelemetry.io/collector/confmap/provider/httpprovider v1.48.0
+	go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.48.0
+	go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.48.0
+	go.opentelemetry.io/collector/confmap/xconfmap v0.142.0
+	go.opentelemetry.io/collector/connector v0.142.0
+	go.opentelemetry.io/collector/connector/forwardconnector v0.142.0
+	go.opentelemetry.io/collector/consumer v1.48.0
+	go.opentelemetry.io/collector/consumer/consumertest v0.142.0
+	go.opentelemetry.io/collector/exporter v1.48.0
+	go.opentelemetry.io/collector/exporter/debugexporter v0.142.0
+	go.opentelemetry.io/collector/exporter/exporterhelper v0.142.0
+	go.opentelemetry.io/collector/exporter/exportertest v0.142.0
+	go.opentelemetry.io/collector/exporter/nopexporter v0.142.0
+	go.opentelemetry.io/collector/exporter/otlpexporter v0.142.0
+	go.opentelemetry.io/collector/exporter/otlphttpexporter v0.142.0
+	go.opentelemetry.io/collector/extension v1.48.0
+	go.opentelemetry.io/collector/extension/zpagesextension v0.142.0
+	go.opentelemetry.io/collector/featuregate v1.48.0
+	go.opentelemetry.io/collector/otelcol v0.142.0
+	go.opentelemetry.io/collector/pdata v1.48.0
+	go.opentelemetry.io/collector/processor v1.48.0
+	go.opentelemetry.io/collector/processor/batchprocessor v0.142.0
+	go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.142.0
+	go.opentelemetry.io/collector/processor/processorhelper v0.142.0
+	go.opentelemetry.io/collector/processor/processortest v0.142.0
+	go.opentelemetry.io/collector/receiver v1.48.0
+	go.opentelemetry.io/collector/receiver/nopreceiver v0.142.0
+	go.opentelemetry.io/collector/receiver/otlpreceiver v0.142.0
 	go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.64.0
 	go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.64.0
 	go.opentelemetry.io/contrib/samplers/jaegerremote v0.33.0
@@ -104,14 +104,14 @@ require (
 	go.uber.org/automaxprocs v1.6.0
 	go.uber.org/goleak v1.3.0
 	go.uber.org/zap v1.27.1
-	golang.org/x/net v0.47.0
+	golang.org/x/net v0.48.0
 	golang.org/x/sys v0.39.0
 	google.golang.org/grpc v1.77.0
 	google.golang.org/protobuf v1.36.10
 )
 
 require (
-	cloud.google.com/go/auth v0.16.5 // indirect
+	cloud.google.com/go/auth v0.17.0 // indirect
 	cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
 	cloud.google.com/go/compute/metadata v0.9.0 // indirect
 	github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.1 // indirect
@@ -132,21 +132,22 @@ require (
 	github.com/klauspost/cpuid/v2 v2.0.9 // indirect
 	github.com/kylelemons/godebug v1.1.0 // indirect
 	github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/internal/healthcheck v0.141.0 // indirect
+	github.com/open-telemetry/opentelemetry-collector-contrib/internal/healthcheck v0.142.0 // indirect
 	github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
+	github.com/prometheus/client_golang/exp v0.0.0-20250914183048-a974e0d45e0a // indirect
 	github.com/prometheus/otlptranslator v1.0.0 // indirect
-	github.com/prometheus/prometheus v0.307.3 // indirect
-	github.com/prometheus/sigv4 v0.2.1 // indirect
+	github.com/prometheus/prometheus v0.308.0 // indirect
+	github.com/prometheus/sigv4 v0.3.0 // indirect
 	github.com/tg123/go-htpasswd v1.2.4 // indirect
 	github.com/twmb/franz-go/pkg/kadm v1.17.1 // indirect
 	github.com/xdg-go/scram v1.2.0 // indirect
 	github.com/zeebo/xxh3 v1.0.2 // indirect
-	go.opentelemetry.io/collector/config/configopaque v1.47.0 // indirect
+	go.opentelemetry.io/collector/config/configopaque v1.48.0 // indirect
 	go.opentelemetry.io/collector/semconv v0.128.1-0.20250610090210-188191247685 // indirect
 	go.yaml.in/yaml/v2 v2.4.3 // indirect
 	golang.org/x/oauth2 v0.32.0 // indirect
 	golang.org/x/time v0.13.0 // indirect
-	google.golang.org/api v0.250.0 // indirect
+	google.golang.org/api v0.252.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	k8s.io/apimachinery v0.34.1 // indirect
 	k8s.io/client-go v0.34.1 // indirect
@@ -184,7 +185,7 @@ require (
 	github.com/eapache/go-resiliency v1.7.0 // indirect
 	github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 // indirect
 	github.com/eapache/queue v1.1.0 // indirect
-	github.com/ebitengine/purego v0.9.0 // indirect
+	github.com/ebitengine/purego v0.9.1 // indirect
 	github.com/elastic/elastic-transport-go/v8 v8.7.0 // indirect
 	github.com/elastic/go-grok v0.3.1 // indirect
 	github.com/elastic/lunes v0.2.0 // indirect
@@ -208,7 +209,7 @@ require (
 	github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect
 	github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect
 	github.com/hashicorp/go-uuid v1.0.3 // indirect
-	github.com/hashicorp/go-version v1.7.0 // indirect
+	github.com/hashicorp/go-version v1.8.0 // indirect
 	github.com/hashicorp/golang-lru v1.0.2 // indirect
 	github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
 	github.com/iancoleman/strcase v0.3.0 // indirect
@@ -221,7 +222,7 @@ require (
 	github.com/jonboulle/clockwork v0.5.0 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/klauspost/compress v1.18.1 // indirect
+	github.com/klauspost/compress v1.18.2 // indirect
 	github.com/knadh/koanf/maps v0.1.2 // indirect
 	github.com/knadh/koanf/providers/confmap v1.0.0 // indirect
 	github.com/knadh/koanf/v2 v2.3.0 // indirect
@@ -236,22 +237,21 @@ require (
 	github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
 	github.com/mostynb/go-grpc-compression v1.2.3 // indirect
 	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.141.0 // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.141.0 // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.141.0 // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.141.0 // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.141.0 // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.141.0 // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/core/xidutils v0.141.0 // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/kafka/configkafka v0.141.0 // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/kafka/topic v0.141.0 // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.141.0 // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.141.0 // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.141.0 // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/status v0.141.0 // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/azure v0.141.0 // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.141.0 // indirect
-	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.141.0 // indirect
+	github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.142.0 // indirect
+	github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.142.0 // indirect
+	github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.142.0 // indirect
+	github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.142.0 // indirect
+	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.142.0 // indirect
+	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/core/xidutils v0.142.0 // indirect
+	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/kafka/configkafka v0.142.0 // indirect
+	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/kafka/topic v0.142.0 // indirect
+	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.142.0 // indirect
+	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.142.0 // indirect
+	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.142.0 // indirect
+	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/status v0.142.0 // indirect
+	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/azure v0.142.0 // indirect
+	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.142.0 // indirect
+	github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.142.0 // indirect
 	github.com/opentracing/opentracing-go v1.2.0 // indirect
 	github.com/openzipkin/zipkin-go v0.4.3 // indirect
 	github.com/paulmach/orb v0.11.1 // indirect
@@ -268,15 +268,15 @@ require (
 	github.com/russross/blackfriday/v2 v2.1.0 // indirect
 	github.com/sagikazarmark/locafero v0.11.0 // indirect
 	github.com/segmentio/asm v1.2.1 // indirect
-	github.com/shirou/gopsutil/v4 v4.25.10 // indirect
+	github.com/shirou/gopsutil/v4 v4.25.11 // indirect
 	github.com/shopspring/decimal v1.4.0 // indirect
 	github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
 	github.com/spf13/afero v1.15.0 // indirect
 	github.com/spf13/cast v1.10.0 // indirect
 	github.com/stretchr/objx v0.5.2 // indirect
 	github.com/subosito/gotenv v1.6.0 // indirect
-	github.com/tklauser/go-sysconf v0.3.15 // indirect
-	github.com/tklauser/numcpus v0.10.0 // indirect
+	github.com/tklauser/go-sysconf v0.3.16 // indirect
+	github.com/tklauser/numcpus v0.11.0 // indirect
 	github.com/twmb/franz-go v1.20.5 // indirect
 	github.com/twmb/franz-go/pkg/kmsg v1.12.0 // indirect
 	github.com/twmb/franz-go/pkg/sasl/kerberos v1.1.0 // indirect
@@ -288,38 +288,38 @@ require (
 	github.com/xdg-go/stringprep v1.0.4 // indirect
 	github.com/yusufpapurcu/wmi v1.2.4 // indirect
 	go.opentelemetry.io/auto/sdk v1.2.1 // indirect
-	go.opentelemetry.io/collector v0.141.0 // indirect
-	go.opentelemetry.io/collector/config/configcompression v1.47.0 // indirect
-	go.opentelemetry.io/collector/config/configmiddleware v1.47.0
-	go.opentelemetry.io/collector/config/configtelemetry v0.141.0 // indirect
-	go.opentelemetry.io/collector/connector/connectortest v0.141.0 // indirect
-	go.opentelemetry.io/collector/connector/xconnector v0.141.0 // indirect
-	go.opentelemetry.io/collector/consumer/consumererror v0.141.0 // indirect
-	go.opentelemetry.io/collector/consumer/consumererror/xconsumererror v0.141.0 // indirect
-	go.opentelemetry.io/collector/consumer/xconsumer v0.141.0 // indirect
-	go.opentelemetry.io/collector/exporter/exporterhelper/xexporterhelper v0.141.0 // indirect
-	go.opentelemetry.io/collector/exporter/xexporter v0.141.0 // indirect
-	go.opentelemetry.io/collector/extension/extensionauth v1.47.0
-	go.opentelemetry.io/collector/extension/extensioncapabilities v0.141.0
-	go.opentelemetry.io/collector/extension/extensionmiddleware v0.141.0 // indirect
-	go.opentelemetry.io/collector/extension/extensiontest v0.141.0 // indirect
-	go.opentelemetry.io/collector/extension/xextension v0.141.0 // indirect
-	go.opentelemetry.io/collector/internal/fanoutconsumer v0.141.0 // indirect
-	go.opentelemetry.io/collector/internal/memorylimiter v0.141.0 // indirect
-	go.opentelemetry.io/collector/internal/sharedcomponent v0.141.0 // indirect
-	go.opentelemetry.io/collector/internal/telemetry v0.141.0 // indirect
-	go.opentelemetry.io/collector/pdata/pprofile v0.141.0 // indirect
-	go.opentelemetry.io/collector/pdata/testdata v0.141.0 // indirect
-	go.opentelemetry.io/collector/pdata/xpdata v0.141.0
-	go.opentelemetry.io/collector/pipeline v1.47.0 // indirect
-	go.opentelemetry.io/collector/pipeline/xpipeline v0.141.0 // indirect
-	go.opentelemetry.io/collector/processor/processorhelper/xprocessorhelper v0.141.0 // indirect
-	go.opentelemetry.io/collector/processor/xprocessor v0.141.0 // indirect
-	go.opentelemetry.io/collector/receiver/receiverhelper v0.141.0 // indirect
-	go.opentelemetry.io/collector/receiver/receivertest v0.141.0 // indirect
-	go.opentelemetry.io/collector/receiver/xreceiver v0.141.0 // indirect
-	go.opentelemetry.io/collector/service v0.141.0
-	go.opentelemetry.io/collector/service/hostcapabilities v0.141.0 // indirect
+	go.opentelemetry.io/collector v0.142.0 // indirect
+	go.opentelemetry.io/collector/config/configcompression v1.48.0 // indirect
+	go.opentelemetry.io/collector/config/configmiddleware v1.48.0
+	go.opentelemetry.io/collector/config/configtelemetry v0.142.0 // indirect
+	go.opentelemetry.io/collector/connector/connectortest v0.142.0 // indirect
+	go.opentelemetry.io/collector/connector/xconnector v0.142.0 // indirect
+	go.opentelemetry.io/collector/consumer/consumererror v0.142.0 // indirect
+	go.opentelemetry.io/collector/consumer/consumererror/xconsumererror v0.142.0 // indirect
+	go.opentelemetry.io/collector/consumer/xconsumer v0.142.0 // indirect
+	go.opentelemetry.io/collector/exporter/exporterhelper/xexporterhelper v0.142.0 // indirect
+	go.opentelemetry.io/collector/exporter/xexporter v0.142.0 // indirect
+	go.opentelemetry.io/collector/extension/extensionauth v1.48.0
+	go.opentelemetry.io/collector/extension/extensioncapabilities v0.142.0
+	go.opentelemetry.io/collector/extension/extensionmiddleware v0.142.0 // indirect
+	go.opentelemetry.io/collector/extension/extensiontest v0.142.0 // indirect
+	go.opentelemetry.io/collector/extension/xextension v0.142.0 // indirect
+	go.opentelemetry.io/collector/internal/fanoutconsumer v0.142.0 // indirect
+	go.opentelemetry.io/collector/internal/memorylimiter v0.142.0 // indirect
+	go.opentelemetry.io/collector/internal/sharedcomponent v0.142.0 // indirect
+	go.opentelemetry.io/collector/internal/telemetry v0.142.0 // indirect
+	go.opentelemetry.io/collector/pdata/pprofile v0.142.0 // indirect
+	go.opentelemetry.io/collector/pdata/testdata v0.142.0 // indirect
+	go.opentelemetry.io/collector/pdata/xpdata v0.142.0
+	go.opentelemetry.io/collector/pipeline v1.48.0 // indirect
+	go.opentelemetry.io/collector/pipeline/xpipeline v0.142.0 // indirect
+	go.opentelemetry.io/collector/processor/processorhelper/xprocessorhelper v0.142.0 // indirect
+	go.opentelemetry.io/collector/processor/xprocessor v0.142.0 // indirect
+	go.opentelemetry.io/collector/receiver/receiverhelper v0.142.0 // indirect
+	go.opentelemetry.io/collector/receiver/receivertest v0.142.0 // indirect
+	go.opentelemetry.io/collector/receiver/xreceiver v0.142.0 // indirect
+	go.opentelemetry.io/collector/service v0.142.0
+	go.opentelemetry.io/collector/service/hostcapabilities v0.142.0 // indirect
 	go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect
 	go.opentelemetry.io/contrib/otelconf v0.18.0 // indirect
 	go.opentelemetry.io/contrib/propagators/b3 v1.38.0 // indirect
@@ -330,15 +330,15 @@ require (
 	go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.38.0 // indirect
 	go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.14.0 // indirect
 	go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 // indirect
-	go.opentelemetry.io/otel/log v0.14.0 // indirect
+	go.opentelemetry.io/otel/log v0.15.0 // indirect
 	go.opentelemetry.io/otel/sdk/log v0.14.0 // indirect
 	go.opentelemetry.io/proto/otlp v1.9.0 // indirect
 	go.uber.org/atomic v1.11.0 // indirect
 	go.uber.org/multierr v1.11.0 // indirect
 	go.yaml.in/yaml/v3 v3.0.4
-	golang.org/x/crypto v0.45.0 // indirect
+	golang.org/x/crypto v0.46.0 // indirect
 	golang.org/x/exp v0.0.0-20251125195548-87e1e737ad39
-	golang.org/x/text v0.31.0 // indirect
+	golang.org/x/text v0.32.0 // indirect
 	gonum.org/v1/gonum v0.16.0 // indirect
 	google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect
 	google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
diff --git a/go.sum b/go.sum
index 0acc2f98..c21aa186 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,5 @@
-cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI=
-cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ=
+cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4=
+cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ=
 cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc=
 cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c=
 cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs=
@@ -73,14 +73,16 @@ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.14 h1:bOS19y6zlJwagBfHxs
 github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.14/go.mod h1:1ipeGBMAxZ0xcTm6y6paC2C/J6f6OO7LBODV9afuAyM=
 github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk=
 github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc=
-github.com/aws/aws-sdk-go-v2/service/ec2 v1.254.1 h1:7p9bJCZ/b3EJXXARW7JMEs2IhsnI4YFHpfXQfgMh0eg=
-github.com/aws/aws-sdk-go-v2/service/ec2 v1.254.1/go.mod h1:M8WWWIfXmxA4RgTXcI/5cSByxRqjgne32Sh0VIbrn0A=
+github.com/aws/aws-sdk-go-v2/service/ec2 v1.262.0 h1:5qBb1XV/D18qtCHd3bmmxoVglI+fZ4QWuS/EB8kIXYQ=
+github.com/aws/aws-sdk-go-v2/service/ec2 v1.262.0/go.mod h1:NDdDLLW5PtLLXN661gKcvJvqAH5OBXsfhMlmKVu1/pY=
+github.com/aws/aws-sdk-go-v2/service/ecs v1.67.2 h1:oeICOX/+D0XXV1aMYJPXVe3CO37zYr7fB6HFgxchleU=
+github.com/aws/aws-sdk-go-v2/service/ecs v1.67.2/go.mod h1:rrhqfkXfa2DSNq0RyFhnnFEAyI+yJB4+2QlZKeJvMjs=
 github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 h1:x2Ibm/Af8Fi+BH+Hsn9TXGdT+hKbDd5XOTZxTMxDk7o=
 github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3/go.mod h1:IW1jwyrQgMdhisceG8fQLmQIydcT/jWY21rFhzgaKwo=
 github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14 h1:FIouAnCE46kyYqyhs0XEBDFFSREtdnr8HQuLPQPLCrY=
 github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14/go.mod h1:UTwDc5COa5+guonQU8qBikJo1ZJ4ln2r1MkF7Dqag1E=
-github.com/aws/aws-sdk-go-v2/service/lightsail v1.49.1 h1:J1A0VJlt5HgUX6s11Obe9zrBDECeE2uhQc7Dwhdei9o=
-github.com/aws/aws-sdk-go-v2/service/lightsail v1.49.1/go.mod h1:WEOSRNyfIfvgrD9MuSIGrogKyuFahaVMziVq1pHI0NQ=
+github.com/aws/aws-sdk-go-v2/service/lightsail v1.50.4 h1:/1o2AYwHJojUDeMvQNyJiKZwcWCc3e4kQuTXqRLuThc=
+github.com/aws/aws-sdk-go-v2/service/lightsail v1.50.4/go.mod h1:Nn2xx6HojGuNMtUFxxz/nyNLSS+tHMRsMhe3+W3wB5k=
 github.com/aws/aws-sdk-go-v2/service/signin v1.0.1 h1:BDgIUYGEo5TkayOWv/oBLPphWwNm/A91AebUjAu5L5g=
 github.com/aws/aws-sdk-go-v2/service/signin v1.0.1/go.mod h1:iS6EPmNeqCsGo+xQmXv0jIMjyYtQfnwg36zl2FwEouk=
 github.com/aws/aws-sdk-go-v2/service/sso v1.30.4 h1:U//SlnkE1wOQiIImxzdY5PXat4Wq+8rlfVEw4Y7J8as=
@@ -130,12 +132,12 @@ github.com/dgraph-io/ristretto/v2 v2.2.0 h1:bkY3XzJcXoMuELV8F+vS8kzNgicwQFAaGINA
 github.com/dgraph-io/ristretto/v2 v2.2.0/go.mod h1:RZrm63UmcBAaYWC1DotLYBmTvgkrs0+XhBd7Npn7/zI=
 github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38=
 github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
-github.com/digitalocean/godo v1.165.1 h1:H37+W7TaGFOVH+HpMW4ZeW/hrq3AGNxg+B/K8/dZ9mQ=
-github.com/digitalocean/godo v1.165.1/go.mod h1:xQsWpVCCbkDrWisHA72hPzPlnC+4W5w/McZY5ij9uvU=
+github.com/digitalocean/godo v1.168.0 h1:mlORtUcPD91LQeJoznrH3XvfvgK3t8Wvrpph9giUT/Q=
+github.com/digitalocean/godo v1.168.0/go.mod h1:xQsWpVCCbkDrWisHA72hPzPlnC+4W5w/McZY5ij9uvU=
 github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
 github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
-github.com/docker/docker v28.5.1+incompatible h1:Bm8DchhSD2J6PsFzxC35TZo4TLGR2PdW/E69rU45NhM=
-github.com/docker/docker v28.5.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v28.5.2+incompatible h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM=
+github.com/docker/docker v28.5.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94=
 github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE=
 github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
@@ -148,8 +150,8 @@ github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 h1:Oy0F4A
 github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3/go.mod h1:YvSRo5mw33fLEx1+DlK6L2VV43tJt5Eyel9n9XBcR+0=
 github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=
 github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
-github.com/ebitengine/purego v0.9.0 h1:mh0zpKBIXDceC63hpvPuGLiJ8ZAa3DfrFTudmfi8A4k=
-github.com/ebitengine/purego v0.9.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
+github.com/ebitengine/purego v0.9.1 h1:a/k2f2HQU3Pi399RPW1MOaZyhKJL9w/xFpKAg4q1s0A=
+github.com/ebitengine/purego v0.9.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
 github.com/edsrzf/mmap-go v1.2.0 h1:hXLYlkbaPzt1SaQk+anYwKSRNhufIDCchSPkUD6dD84=
 github.com/edsrzf/mmap-go v1.2.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q=
 github.com/elastic/elastic-transport-go/v8 v8.7.0 h1:OgTneVuXP2uip4BA658Xi6Hfw+PeIOod2rY3GVMGoVE=
@@ -234,8 +236,8 @@ github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
 github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
 github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
 github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
-github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw=
-github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
+github.com/goccy/go-yaml v1.19.0 h1:EmkZ9RIsX+Uq4DYFowegAuJo8+xdX3T/2dwNPXbxEYE=
+github.com/goccy/go-yaml v1.19.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
 github.com/gocql/gocql v1.7.0 h1:O+7U7/1gSN7QTEAaMEsJc1Oq2QHXvCWoF3DFK9HDHus=
 github.com/gocql/gocql v1.7.0/go.mod h1:vnlvXyFZeLBF0Wy+RS8hrOdbn0UWsWtdg07XJnFxZ+4=
 github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0=
@@ -317,8 +319,8 @@ github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR3
 github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
 github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=
 github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
-github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
-github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4=
+github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
 github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
 github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
 github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
@@ -328,8 +330,8 @@ github.com/hashicorp/nomad/api v0.0.0-20250930071859-eaa0fe0e27af h1:ScAYf8O+9xT
 github.com/hashicorp/nomad/api v0.0.0-20250930071859-eaa0fe0e27af/go.mod h1:sldFTIgs+FsUeKU3LwVjviAIuksxD8TzDOn02MYwslE=
 github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY=
 github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
-github.com/hetznercloud/hcloud-go/v2 v2.25.1 h1:ib86acotlvgUSnKfFG5FJl0VFeYKe/Ht8nmikdUp+po=
-github.com/hetznercloud/hcloud-go/v2 v2.25.1/go.mod h1:uQdAWaW3d9TimiyOjQWY8HKShs0Nd6S4wNYqo0HjvIY=
+github.com/hetznercloud/hcloud-go/v2 v2.29.0 h1:LzNFw5XLBfftyu3WM1sdSLjOZBlWORtz2hgGydHaYV8=
+github.com/hetznercloud/hcloud-go/v2 v2.29.0/go.mod h1:XBU4+EDH2KVqu2KU7Ws0+ciZcX4ygukQl/J0L5GS8P8=
 github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
 github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
 github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
@@ -370,8 +372,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
 github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
-github.com/klauspost/compress v1.18.1 h1:bcSGx7UbpBqMChDtsF28Lw6v/G94LPrrbMbdC3JH2co=
-github.com/klauspost/compress v1.18.1/go.mod h1:ZQFFVG+MdnR0P+l6wpXgIL4NTtwiKIdBnrBd8Nrxr+0=
+github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk=
+github.com/klauspost/compress v1.18.2/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4=
 github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4=
 github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
 github.com/knadh/koanf/maps v0.1.2 h1:RBfmAW5CnZT+PJ1CVc1QSJKf4Xu9kxfQgYVQSu8hpbo=
@@ -393,8 +395,8 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
 github.com/lightstep/go-expohisto v1.0.0 h1:UPtTS1rGdtehbbAF7o/dhkWLTDI73UifG8LbfQI7cA4=
 github.com/lightstep/go-expohisto v1.0.0/go.mod h1:xDXD0++Mu2FOaItXtdDfksfgxfV0z1TMPa+e/EUd0cs=
-github.com/linode/linodego v1.59.0 h1:kYz6sQH9g0u21gbI1UUFjZmFLirtc39JPybygrW76Q0=
-github.com/linode/linodego v1.59.0/go.mod h1:1+Bt0oTz5rBnDOJbGhccxn7LYVytXTIIfAy7QYmijDs=
+github.com/linode/linodego v1.60.0 h1:SgsebJFRCi+lSmYy+C40wmKZeJllGGm+W12Qw4+yVdI=
+github.com/linode/linodego v1.60.0/go.mod h1:1+Bt0oTz5rBnDOJbGhccxn7LYVytXTIIfAy7QYmijDs=
 github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c h1:VtwQ41oftZwlMnOEbMWQtSEUgU64U4s+GHk7hZK+jtY=
 github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE=
 github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg=
@@ -441,78 +443,78 @@ github.com/oklog/ulid/v2 v2.1.1 h1:suPZ4ARWLOJLegGFiZZ1dFAkqzhMjL3J1TzI+5wHz8s=
 github.com/oklog/ulid/v2 v2.1.1/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ=
 github.com/olivere/elastic/v7 v7.0.32 h1:R7CXvbu8Eq+WlsLgxmKVKPox0oOwAE/2T9Si5BnvK6E=
 github.com/olivere/elastic/v7 v7.0.32/go.mod h1:c7PVmLe3Fxq77PIfY/bZmxY/TAamBhCzZ8xDOE09a9k=
-github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.141.0 h1:BKPI1YFjofRAf0Kf09S5DoBJEeOhrPUG6QlZZQgbpq8=
-github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.141.0/go.mod h1:YKdlcQq7s06qRk3jeT89wzuZHSzq5b417F/0MtKee5k=
-github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.141.0 h1:ovQ2SDusq7JxgVriZcn7U0dVibyLMl7xvIXBtTsrkxs=
-github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.141.0/go.mod h1:ixGfjvES0gOoWsKculo77+5AXEo6XpWd8N+PWADe5zk=
-github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.141.0 h1:hNsgOLxOZrWFxWM2vsmoyhwzBAkM5GeYpzNC8fNhraE=
-github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.141.0/go.mod h1:9xM9ZPfSCS+hAFYYJdMQBwCVhD6uTqCx8v4n/W9azmo=
-github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension v0.141.0 h1:DWL/bM8JFBfS02tFEvMxP+290fLEYKCUSYgp+gMH+uY=
-github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension v0.141.0/go.mod h1:HaE+e/ljdjI/6oh7wX9vW14/WDpPpagzx9T6IqnkEpU=
-github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckv2extension v0.141.0 h1:KJKs18RPNL4im4Vhm9ax2/If3+pOf4Kz6nIcGR5Zvsc=
-github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckv2extension v0.141.0/go.mod h1:9o8dLdqQle3NMwITkBSUjDsbYTF7AJ1FnjKPifHDl0o=
-github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.141.0 h1:WrZ/WX878ZbZz8if+4z4iH6PdUYkSK+9rhgLmcSWHMY=
-github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.141.0/go.mod h1:7JQdyPOZrXPPKax8vVMDx8KpK0JPLFUGSbVrc0NNlSM=
-github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.141.0 h1:VVXgD/PnfvO4Q13lDD7RGXMN1/7Fz+itc1mt+s2gX9I=
-github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.141.0/go.mod h1:pPGAQp0FG6zHbk96CKLZhY1dfM1ap59xZuYcuE96Mqw=
-github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.141.0 h1:FYJzu6paMilIRRsxkaiB/dmThfHlY9D+k4mh2udSCqA=
-github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.141.0/go.mod h1:0cqH13EB1owMBMW5w1VPtTcop7f8z1q+ycPnemroaKw=
-github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.141.0 h1:6gwdPMl80oNOMlPqmwVDMA+FxLY7eT7yhodMG3fO6nc=
-github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.141.0/go.mod h1:QaA5DvWjGF/jOzcKW2fzmmPs6NJNO470wWLXU6xnxM8=
-github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.141.0 h1:Qld0XhVUI81Fyx0y4lPRuKCYws9OpBqhyALteFAIwUU=
-github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.141.0/go.mod h1:7f7+goLrZ8HYMfm810sBxscn33kGaQJFWcLJgJ5tq5A=
-github.com/open-telemetry/opentelemetry-collector-contrib/internal/exp/metrics v0.141.0 h1:faF6pRSmxtLmHtHQR9MiStuF4qsTHETEMEoUkKGZHMc=
-github.com/open-telemetry/opentelemetry-collector-contrib/internal/exp/metrics v0.141.0/go.mod h1:Lfbwcn6JY7XgukcmE06RpJ9VxPUvINK7UJbrihuo32g=
-github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.141.0 h1:2CC05z0fpxFnEsB4XpVMpIaQa1hv0ZfJ5TsCjLPTOfM=
-github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.141.0/go.mod h1:QTceC+e3mAclBVDvBUuWvOvzRcIBikDr7jPJ4d/OgHs=
-github.com/open-telemetry/opentelemetry-collector-contrib/internal/healthcheck v0.141.0 h1:Ib8U2EOQq54eRDf33sAK8e2M7aA5UVWfnC5DSEdebk8=
-github.com/open-telemetry/opentelemetry-collector-contrib/internal/healthcheck v0.141.0/go.mod h1:SSQbMNwi8G+rrCMAQxan7lk6nyqLRZ4F7+9sIDXxyDc=
-github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.141.0 h1:sYXJ024Y/JNUJ6K5LMF/cAYgW580RicjwYvVIJJteFs=
-github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.141.0/go.mod h1:3oigZ5/keGzUF7TbiYFryKo9EnbwP4DJNE99gcIwMSM=
-github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.141.0 h1:3vdEzj8S8RYRfyi/gCVw+gfCI63Fa3aI2MHcXdCfTSE=
-github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.141.0/go.mod h1:2JPgEec8HYBfVx8IqpAISJKEYANI3y3g0Wfg63QqGaY=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.141.0 h1:wgOjeJkNwxS88cQtGU+u2jh6JOzr8rN5XhB7457vnA0=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.141.0/go.mod h1:k+wzyVlfNz81E5bD/NfvpcL9AxFqsIQ7HQj3rsZKMwU=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/core/xidutils v0.141.0 h1:tneAPUkYxvFRkAwvz3FlHHiDVDytWezjpKGmZGYTOOU=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/core/xidutils v0.141.0/go.mod h1:IZ9fs4fz0kcVn1VN9sT9Q/GQoo3BCCEaWEGt4q3zl44=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/kafka/configkafka v0.141.0 h1:oXKTbfbAg6O8garE/t9hkhMpLMUjypOUjT1cHJwJ80w=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/kafka/configkafka v0.141.0/go.mod h1:HP68DEQJ8eG5dAoVbbp8Z2oKaH+/8c7AW7f2Z0iNBPo=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/kafka/topic v0.141.0 h1:kkqsO+XOhXyopKbKtkhC5tEvWC/lW6ZJR+ezpfL6AFk=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/kafka/topic v0.141.0/go.mod h1:VV5wxeAH34HZdzBf0UJQ+bJlFaGcCmvFhzcIsZoC4vc=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.141.0 h1:3nlsF0fNlR5sp5SMcUJLUiaHyRIXTd4Cws87sDgqhdM=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.141.0/go.mod h1:a9zs/F71CSxdsV37GUQO8HJykDPA1TJyYSTztO2+x4U=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.141.0 h1:jy4EmUFaNUiY6NkyxjF8kHj6bal3O+D/r0XefaCh0bo=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.141.0/go.mod h1:sxSF8MmAnLHlXctRgT9s2fbl7uNR5g4uh4CMQsggJO4=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.141.0 h1:35xMzHfdAK4WFa+p6q+XgwY/Et7eHJD77p/kKj+F29s=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.141.0/go.mod h1:1MQ6n2yZtJHH59iIb4eU2RIJVt5nVCS2w82yL6wuRU4=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.141.0 h1:I9N4Oyxf0CqND+PwGu7f0EIxMNJoliIAbSDbdp+nifE=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.141.0/go.mod h1:mF0nNqBnrqAiRDGyr5eKv9YsIzFkzIUb9jcmO3s4cxU=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/status v0.141.0 h1:bsAO48ojRBMA0dk/RR7LIurkoYZfKTFxnrCQofiFNbI=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/status v0.141.0/go.mod h1:eVHnGSqQGxwjlF9svzO1LRRgmMWKLWVKXSCHKRzHfRM=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/azure v0.141.0 h1:s87GaaCxBAUZRNsuzEc1ytgZENlmO0tCHllRmOqwMgk=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/azure v0.141.0/go.mod h1:yz4PL34ed39URi4DBUtvoBAtOZHWI95eMuxW+0/bRIk=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.141.0 h1:G7LQ0plv/NYpPu0Cvym+nwtuiNP6F2vljZEMeUbs6Kk=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.141.0/go.mod h1:i7EaTsawrA0Ae+UJadAXThmP3WgH+29j4nXL4mTJ8go=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.141.0 h1:+QiCicV2AW48akQTn7eDjRh4xwjCkK7wC+U8TaEktC8=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.141.0/go.mod h1:RbRbltRdagN1XJi8RNzi5Kb1pPJrF2uXIz0njyaVEaY=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.141.0 h1:Br9HFrVM4DMa6ci0bTrU8HIgjltrRGIqDswIqjb8W20=
-github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.141.0/go.mod h1:uhMglOYBGv1UkZBOoN8eTzb4YUtdL0C2GY0FcLrV+Qo=
-github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.141.0 h1:bp4t6Vqo0WnRsYbljDZYTSeaoxAxMFktR9tCaIwHw4w=
-github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.141.0/go.mod h1:1sA/5eJpfCVfJUNpw/XpB1ja/MzKZxilPFxn5i3sAE4=
-github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatocumulativeprocessor v0.141.0 h1:czIcDtf+Jx/A6V7WnlMdQfRZh2VEnEd9etHS1sTQMx4=
-github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatocumulativeprocessor v0.141.0/go.mod h1:kMzVuBFzE+sE+BkWHJCylv3sKXQqPdtfwyQIU7TrQJM=
-github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.141.0 h1:OKRG4Wwg9zEN/BL7IGONrjgJ0YPwuLwrCXPG5Kcvj74=
-github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.141.0/go.mod h1:K+qndqUqnztWPyK8LAX9VpIBupoeHD4LnZoAwH4HmCs=
-github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.141.0 h1:ivIxbdHvOgGacw33vxoGNbVAOKTncKU4Jn63Gf1RqGc=
-github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.141.0/go.mod h1:SfhRpKlqe8DFtm/TyeFt9FWqX6aMjazJkx05mdEIAQU=
-github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.141.0 h1:bwaQsvyV3QdJjb6yO7/m0wpFOWv0YAlgik5uLjKRMRQ=
-github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.141.0/go.mod h1:7IoFY0oUmT6uugCbe7wtmyThxBlK3TEqtqqhzV087KY=
-github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.141.0 h1:ShgkdjJayMiuDwte6+uEA11T0e7wxNt8uWKQ/EXuWxA=
-github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.141.0/go.mod h1:QRx/PO5/tzmOzyFv6GQsYN3hjPbXyYle4Yh2CZpwNCI=
-github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.141.0 h1:QAp26NZ5shPw6S9wE68a7oYOZN9yup5RX2tHr4ssyPI=
-github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.141.0/go.mod h1:kVNkdv/3iEhcu34zPcbXqTD5tS3rxVj2T8KFaJteteo=
-github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.141.0 h1:xR5XseiN5t7/4cI+1okiXOZ7/QDBFiw08wq7YkWvJ8Y=
-github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.141.0/go.mod h1:Cphg96CQmmaKXc8JZvEsmWHGpyYHU6b/PE+lqGhX22w=
+github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.142.0 h1:36uZ/NP9YyGJULi+QjIVWD2cxSn5WKAeQ1IlY+X/v/o=
+github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.142.0/go.mod h1:MbRFpQ2fXFYznh7Yor11KdcPEb1shO5P9Feu7/9OX+M=
+github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.142.0 h1:2Oyq9ByheQ9mOQQPSPFbA9qoAZTKeKg6BjruxKgW0pM=
+github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.142.0/go.mod h1:NwM/2aS5uyRJqX0mvBHJb+XZQOlJ3tWVh3MqS9u06Fw=
+github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.142.0 h1:xOLDVjNd6psVtXPukDaplTdurhEO3Mcs782v6v7T5Co=
+github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.142.0/go.mod h1:gZP+QFBEa+43Np6/QQzL0rWfB53zpzzY9V/DyMVNm8g=
+github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension v0.142.0 h1:jKx7xwN2EQvhidEKV3fHpxd+aWWO/LvIThR/lgjbmIk=
+github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension v0.142.0/go.mod h1:tmyx7Fjbom6tYUnOaWeKbhWO8r5tyGvOxwoEcsXVvFQ=
+github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckv2extension v0.142.0 h1:D8g6j10qUsV+fxibhv/LPtSwKvvTilpuIF1y80lpijg=
+github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckv2extension v0.142.0/go.mod h1:o47ioeAP3tggrw2B8YAzjJDU6bUkruK3WrQTO2W/5Kc=
+github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.142.0 h1:ALJuFnSl/psitnJZepyNvh3vvaBSzYVZR68mG6M4+XQ=
+github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.142.0/go.mod h1:lTf1V8Bw5+zJZRDJpu88XIJvLjCFU4jZXiTc4lT0Nyc=
+github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.142.0 h1:WHmtbcnh1Gtw/VYFOlqi7Lh51tj/XVSVMQCwKuycEes=
+github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.142.0/go.mod h1:gczojcfVMsq3ww+efe8vh5MpykZsB9YLLuoFuejjl6M=
+github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.142.0 h1:8Nk9uWgwPFbz1ODgACKWKN3i1H0v9/CgvfovucycWjc=
+github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.142.0/go.mod h1:RJ+7KhqVXQvyW3/yDPK5t2R/9bmcxA67G7OwaYg8B2M=
+github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.142.0 h1:fC1yPxjl8bwbKaCXMw49E2xPNBTD5BcPAXvLxwonLVs=
+github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.142.0/go.mod h1:jg0mIqL3FJEGt53DZNx2jTeklKRjVfV4rgb2LEojNM8=
+github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.142.0 h1:opPgnpecX14LQ+5FQPjnh3J4kE5BL+0YYyG6I9HTUTI=
+github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.142.0/go.mod h1:CQ0QNfzurkpqCDtbDpXYJoDa3/RvmNfQc8NPtkmwV0Y=
+github.com/open-telemetry/opentelemetry-collector-contrib/internal/exp/metrics v0.142.0 h1:agYk41V3eIfV6aIMxIeRQ7SFhfaW5k2O96HEebpmPwM=
+github.com/open-telemetry/opentelemetry-collector-contrib/internal/exp/metrics v0.142.0/go.mod h1:ZmMdcBia20ih8NYia5b4dNhfNLT68xHgaqF+fNW+TLM=
+github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.142.0 h1:fAl09gr9B7LyZBvhBVsvNYMdm8sofMT4lgb3MHjfuRM=
+github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.142.0/go.mod h1:TL+PKrQbFZw9z5N/2egn0bV/UmOFWUnKq4m9Vh86IoM=
+github.com/open-telemetry/opentelemetry-collector-contrib/internal/healthcheck v0.142.0 h1:MXX7W+nwaPz0R7uvwvEj06zu6ex6Zgj8uAPja0Xr32o=
+github.com/open-telemetry/opentelemetry-collector-contrib/internal/healthcheck v0.142.0/go.mod h1:ugQkddTr3sOZC3j3mCsVTNor+02KED12uqQU5HFCKpI=
+github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.142.0 h1:MTAeMi2AjlWUhNR3vErmOl5H2RIkegHwIAonIRTog5c=
+github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.142.0/go.mod h1:5jvos+PuIgzL3US//cPUXxDIRoAQp/C5qWG3nRFXSgc=
+github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.142.0 h1:BO5dnA1qM6TtnbhpeyC24DmywElSH5yamm2SSmjGAFE=
+github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.142.0/go.mod h1:r0kPWGUm0J0WObQNZO6TB7a8GfLd4nxDpn1HQFnpoOk=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.142.0 h1:KOe14cCkTnCZjpo2whFI1cPD+5QQ18k2v6Z9C7n3VvE=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.142.0/go.mod h1:A6dyM7aAp61uo7G9m4Nz+uHbkhGzuSRF7XyOOo1Ebow=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/core/xidutils v0.142.0 h1:jTXmprD0ab4NJdh7Ck70IN84T7+5NIqzI3xta/FqCpE=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/core/xidutils v0.142.0/go.mod h1:jpvcWt3roQEeUZCZJvrUWV9EAbVdXOUPDBBCc3ExxcA=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/kafka/configkafka v0.142.0 h1:2/Z7Zxg911+2A/aMuOnNUzn6F+42PdJJc2XUX1ME39A=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/kafka/configkafka v0.142.0/go.mod h1:RZxm5mfJPo0eK7TbD6HkhjkoSzqfU8jybkOZBwqF3WY=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/kafka/topic v0.142.0 h1:bXwBC5gK94TblFAnq4Kh2JOJdDWCCmuZrL15I97RFi4=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/kafka/topic v0.142.0/go.mod h1:VV5wxeAH34HZdzBf0UJQ+bJlFaGcCmvFhzcIsZoC4vc=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.142.0 h1:+ECJBHPtMabbUgv1UhtALEbFeVLT5TMky3GNppGbJVc=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.142.0/go.mod h1:CQAv2XJaKey12eJm8Vlj/07+p89+cdgwhBMds6VW6GM=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.142.0 h1:yVQdTECRBDF31YbIS3B2KI1fQLP+COgSnexg6SQlHxM=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.142.0/go.mod h1:Wu/4rn2sFzW3u3DyHrkrq3l+A98hvjJ3Yt8cyZo8lBM=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.142.0 h1:bLp+Ii1UQ9cNr+Dm1jKzbcklhd0eBnPuIFQY6NPzkZ0=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.142.0/go.mod h1:6N36UrFd9Yiz2aYpXM5xiK7Eqp2RyAr3O8lUE+wK2Y8=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.142.0 h1:67xG97ED3JHXlPsjVUOiH8u3U5LBXPU4vKgPkgzYGm4=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.142.0/go.mod h1:kS1cJS2m9ECyrRmEDlhN0nQM+QuUovHRYTF6sUPvb1U=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/status v0.142.0 h1:Zj1cc4Nh08cz7OlC7qN7ZGEqpVx/1/rB+kuHeO3DNVY=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/status v0.142.0/go.mod h1:u/aUPt+3Nqx62XsKoPyEpZqvxyVsIXJtHIueukYLc8A=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/azure v0.142.0 h1:xuMQmo0W81JYXmic6dWSJZvqb6Gux75/CNkBtp1jXi0=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/azure v0.142.0/go.mod h1:qtc7AnTwY65qk3ejApKuIoMLDms8ieb3kDKSWCBhJ5A=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.142.0 h1:nfjIitNzAhs9VHJWIHXUrdjS1sdHNAJV3NzMw/Og0No=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.142.0/go.mod h1:pPRO8TydIsMuoPXISwb3dnrkK1Nf6K7gFpkETM/m0NE=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.142.0 h1:lRM1vdTLNlf5zdzcyVnBvT+BQudM75W+eFpA6PJKjk0=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.142.0/go.mod h1:KkTsTXx2Da0ejZkh3ldivRJlw2dljQbf8NIHxYWRQSo=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.142.0 h1:9yZTdgSz2zdxxjszjf1Xv/iDg3r+dafWMP2T2gXuX88=
+github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.142.0/go.mod h1:0guVg9cTJHN2w4egMmxaybQsZ5CABpj1iTZ9yZvSCF4=
+github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.142.0 h1:+kSCQPM3XpsFOXgJtCeWCbGHsyhWe6R69K49JfgUotI=
+github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.142.0/go.mod h1:KxITQ0XpAoqG0ZD76oD6DYEd1DSnmVTs4QCTV37Ll9M=
+github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatocumulativeprocessor v0.142.0 h1:fL8LBVeje+nbts2VIInvRa4T5LlsC0BZCI60wNGoS+Y=
+github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatocumulativeprocessor v0.142.0/go.mod h1:fSnKuTN91I68Ou1Lgfwe3Mt6BGl9kcA8PYCpnGkPnsY=
+github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.142.0 h1:4EdL6RK8VTCPyop0EZoG/lpidlDQqS5BIyAnhSG8E2k=
+github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.142.0/go.mod h1:w972rpLwATEI4AI7h6h5tbMRGRkEicaxxbgOTH9O/0Q=
+github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.142.0 h1:7mP0TbctBh1bBCgaeIKjLLTswMU+GBpq/JyVJyT/luA=
+github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.142.0/go.mod h1:nSm1ACoVxWAoVlkzMob7+gUyPt+INZRWWat1W78+xqo=
+github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.142.0 h1:asBjiVAEo6ik0egTb4GP8sc7LYZbLdihUmrVyLyy6kU=
+github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.142.0/go.mod h1:ZX7CH1laVXuItVht0eKCAk3tqh7xF0/neKKyIeOQFys=
+github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.142.0 h1:rQF6DcB7WKWbU0feTETzDLEpVZxWmakNRPt9h61FZ2g=
+github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.142.0/go.mod h1:H7t0+Ji05xim37uKQY9e2irbFxO9RKy8o1K3DEQ3gXo=
+github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.142.0 h1:3LWr0Y519vpqs487v2B/GhUT1necfmtYbMcaVzLIBFA=
+github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.142.0/go.mod h1:ClPuWTf0N81wynK60xQNpYIYi0vmVNymrF3oXIBNrHk=
+github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.142.0 h1:y2XBushudLZ3HE8b1VH/7GR8XPXKmqkIdSBtus0hJX0=
+github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.142.0/go.mod h1:wq6OxNbURHY+ONr9iwszE3TrUYmamWSmo+rF8hDl9i8=
 github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
 github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
@@ -549,6 +551,8 @@ github.com/prometheus/alertmanager v0.28.1 h1:BK5pCoAtaKg01BYRUJhEDV1tqJMEtYBGzP
 github.com/prometheus/alertmanager v0.28.1/go.mod h1:0StpPUDDHi1VXeM7p2yYfeZgLVi/PPlt39vo9LQUHxM=
 github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
 github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
+github.com/prometheus/client_golang/exp v0.0.0-20250914183048-a974e0d45e0a h1:RF1vfKM34/3DbGNis22BGd6sDDY3XBi0eM7pYqmOEO0=
+github.com/prometheus/client_golang/exp v0.0.0-20250914183048-a974e0d45e0a/go.mod h1:FGJuwvfcPY0V5enm+w8zF1RNS062yugQtPPQp1c4Io4=
 github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
 github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
 github.com/prometheus/common v0.67.4 h1:yR3NqWO1/UyO1w2PhUvXlGQs/PtFmoveVO0KZ4+Lvsc=
@@ -561,10 +565,10 @@ github.com/prometheus/otlptranslator v1.0.0 h1:s0LJW/iN9dkIH+EnhiD3BlkkP5QVIUVEo
 github.com/prometheus/otlptranslator v1.0.0/go.mod h1:vRYWnXvI6aWGpsdY/mOT/cbeVRBlPWtBNDb7kGR3uKM=
 github.com/prometheus/procfs v0.19.2 h1:zUMhqEW66Ex7OXIiDkll3tl9a1ZdilUOd/F6ZXw4Vws=
 github.com/prometheus/procfs v0.19.2/go.mod h1:M0aotyiemPhBCM0z5w87kL22CxfcH05ZpYlu+b4J7mw=
-github.com/prometheus/prometheus v0.307.3 h1:zGIN3EpiKacbMatcUL2i6wC26eRWXdoXfNPjoBc2l34=
-github.com/prometheus/prometheus v0.307.3/go.mod h1:sPbNW+KTS7WmzFIafC3Inzb6oZVaGLnSvwqTdz2jxRQ=
-github.com/prometheus/sigv4 v0.2.1 h1:hl8D3+QEzU9rRmbKIRwMKRwaFGyLkbPdH5ZerglRHY0=
-github.com/prometheus/sigv4 v0.2.1/go.mod h1:ySk6TahIlsR2sxADuHy4IBFhwEjRGGsfbbLGhFYFj6Q=
+github.com/prometheus/prometheus v0.308.0 h1:kVh/5m1n6m4cSK9HYTDEbMxzuzCWyEdPdKSxFRxXj04=
+github.com/prometheus/prometheus v0.308.0/go.mod h1:xXYKzScyqyFHihpS0UsXpC2F3RA/CygOs7wb4mpdusE=
+github.com/prometheus/sigv4 v0.3.0 h1:QIG7nTbu0JTnNidGI1Uwl5AGVIChWUACxn2B/BQ1kms=
+github.com/prometheus/sigv4 v0.3.0/go.mod h1:fKtFYDus2M43CWKMNtGvFNHGXnAJJEGZbiYCmVp/F8I=
 github.com/puzpuzpuz/xsync/v3 v3.5.1 h1:GJYJZwO6IdxN/IKbneznS6yPkVC+c3zyY/j19c++5Fg=
 github.com/puzpuzpuz/xsync/v3 v3.5.1/go.mod h1:VjzYrABPabuM4KyBh1Ftq6u8nhwY5tBPKP9jpmh0nnA=
 github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 h1:bsUq1dX0N8AOIL7EB/X911+m4EHsnWEHeJ0c+3TTBrg=
@@ -584,8 +588,8 @@ github.com/scaleway/scaleway-sdk-go v1.0.0-beta.35 h1:8xfn1RzeI9yoCUuEwDy08F+No6
 github.com/scaleway/scaleway-sdk-go v1.0.0-beta.35/go.mod h1:47B1d/YXmSAxlJxUJxClzHR6b3T4M1WyCvwENPQNBWc=
 github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0=
 github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
-github.com/shirou/gopsutil/v4 v4.25.10 h1:at8lk/5T1OgtuCp+AwrDofFRjnvosn0nkN2OLQ6g8tA=
-github.com/shirou/gopsutil/v4 v4.25.10/go.mod h1:+kSwyC8DRUD9XXEHCAFjK+0nuArFJM0lva+StQAcskM=
+github.com/shirou/gopsutil/v4 v4.25.11 h1:X53gB7muL9Gnwwo2evPSE+SfOrltMoR6V3xJAXZILTY=
+github.com/shirou/gopsutil/v4 v4.25.11/go.mod h1:EivAfP5x2EhLp2ovdpKSozecVXn1TmuG7SMzs/Wh4PU=
 github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
 github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
 github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c h1:aqg5Vm5dwtvL+YgDpBcK1ITf3o96N/K7/wsRXQnUTEs=
@@ -596,8 +600,8 @@ github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I=
 github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg=
 github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=
 github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo=
-github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s=
-github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0=
+github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
+github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
 github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
 github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
@@ -626,10 +630,10 @@ github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSW
 github.com/tg123/go-htpasswd v1.2.4 h1:HgH8KKCjdmo7jjXWN9k1nefPBd7Be3tFCTjc2jPraPU=
 github.com/tg123/go-htpasswd v1.2.4/go.mod h1:EKThQok9xHkun6NBMynNv6Jmu24A33XdZzzl4Q7H1+0=
 github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
-github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4=
-github.com/tklauser/go-sysconf v0.3.15/go.mod h1:Dmjwr6tYFIseJw7a3dRLJfsHAMXZ3nEnL/aZY+0IuI4=
-github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso=
-github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XVuEeem8LsQ=
+github.com/tklauser/go-sysconf v0.3.16 h1:frioLaCQSsF5Cy1jgRBrzr6t502KIIwQ0MArYICU0nA=
+github.com/tklauser/go-sysconf v0.3.16/go.mod h1:/qNL9xxDhc7tx3HSRsLWNnuzbVfh3e7gh/BmM179nYI=
+github.com/tklauser/numcpus v0.11.0 h1:nSTwhKH5e1dMNsCdVBukSZrURJRoHbSEQjdEbY+9RXw=
+github.com/tklauser/numcpus v0.11.0/go.mod h1:z+LwcLq54uWZTX0u/bGobaV34u6V7KNlTZejzM6/3MQ=
 github.com/twmb/franz-go v1.7.0/go.mod h1:PMze0jNfNghhih2XHbkmTFykbMF5sJqmNJB31DOOzro=
 github.com/twmb/franz-go v1.20.5 h1:Gj9jdkvlddf8pdrehvtDHLPult5JS8q65oITUff6dXo=
 github.com/twmb/franz-go v1.20.5/go.mod h1:gZmp2nTNfKuiKKND8qAsv28VdMlr/Gf4BIcsj99Bmtk=
@@ -681,168 +685,168 @@ go.mongodb.org/mongo-driver v1.17.4 h1:jUorfmVzljjr0FLzYQsGP8cgN/qzzxlY9Vh0C9KFX
 go.mongodb.org/mongo-driver v1.17.4/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ=
 go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
 go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
-go.opentelemetry.io/collector v0.141.0 h1:TrB5VlTVvWBPdx9Kvl4kigvkPr5RI2NhvXcN4CErrFY=
-go.opentelemetry.io/collector v0.141.0/go.mod h1:etSWqFxETgvoEjTINqGu+B/Lm+EbJiu3PZGW+bemo1A=
-go.opentelemetry.io/collector/client v1.47.0 h1:6CqobnsruBntfkSltCsKs8iiK1N+IwMr7fKhnIDXF0Y=
-go.opentelemetry.io/collector/client v1.47.0/go.mod h1:6Jzcja4/O5IffJtZjJ9YjnwPqJiDiwCQou4DioLFwpI=
-go.opentelemetry.io/collector/component v1.47.0 h1:wXvcjNhpWUU4OJph7KyxENkbfnGrfDURa+L/rvPTHyo=
-go.opentelemetry.io/collector/component v1.47.0/go.mod h1:Hz9fcIbc7tOA4hIjvW5bb1rJJc2TH0gtQEvDBaZLUUA=
-go.opentelemetry.io/collector/component/componentstatus v0.141.0 h1:WoMJdv2ofwHJDXzMP6DvYPqREaqOcGw+gkXG7S+PJvc=
-go.opentelemetry.io/collector/component/componentstatus v0.141.0/go.mod h1:upr5QxmYLEZ7PKMCZHImQcp3xNM4VXtZnAKuhhHopg4=
-go.opentelemetry.io/collector/component/componenttest v0.141.0 h1:dYdFbm52+e2DwrJ0bEoo7qVOPDuFXl9E/FfaqViIfPU=
-go.opentelemetry.io/collector/component/componenttest v0.141.0/go.mod h1:EI7SUBy8Grxso69j2KYf3BYv8rkJjFgxlmWf5ElcWdk=
-go.opentelemetry.io/collector/config/configauth v1.47.0 h1:aYSX3mD586qKiHRQYFBMIvujC1zUhYhw6nBLC7oIgvI=
-go.opentelemetry.io/collector/config/configauth v1.47.0/go.mod h1:o2GZwoeuCKzhZm6VDTMAKkVlTLKGqUi126sAN5Xjaa8=
-go.opentelemetry.io/collector/config/configcompression v1.47.0 h1:g6PL4dd8ng74XVI0YOyucIWUwQwF2BMFgHMyQ7f5Z7A=
-go.opentelemetry.io/collector/config/configcompression v1.47.0/go.mod h1:ZlnKaXFYL3HVMUNWVAo/YOLYoxNZo7h8SrQp3l7GV00=
-go.opentelemetry.io/collector/config/configgrpc v0.141.0 h1:iN+RBB3BifRHoH1jFqxCxcF3Ptpehiqh09nFVjMQyF0=
-go.opentelemetry.io/collector/config/configgrpc v0.141.0/go.mod h1:giRFp9C98N8FkvlBPaibHr7Jj4nDx92tyinbGXhiJSk=
-go.opentelemetry.io/collector/config/confighttp v0.141.0 h1:ukn0BvFqe2HBDqDYs9gllVLFrhDbgNrTTjEEWPJ0O3s=
-go.opentelemetry.io/collector/config/confighttp v0.141.0/go.mod h1:IbW7wb+rMuoh8WUNBsgblFvPuofZUGk6Lu9PvVDwnHo=
-go.opentelemetry.io/collector/config/confighttp/xconfighttp v0.141.0 h1:spe+41VYYlavMwhbNo//itI3brDFsHDuXJsGayD0FMI=
-go.opentelemetry.io/collector/config/confighttp/xconfighttp v0.141.0/go.mod h1:rs5d/RK53y0hYWPiznrETJtiw9CZwrYp63BonIIPx/A=
-go.opentelemetry.io/collector/config/configmiddleware v1.47.0 h1:0LKbWzew6Y8sU0zeXb9VQf3PE/Nqnn+2RcDFgxaypvM=
-go.opentelemetry.io/collector/config/configmiddleware v1.47.0/go.mod h1:QyWuy/D1fdURXxdnKPweX/5pT6uAsK8PxTDXMHKeLcI=
-go.opentelemetry.io/collector/config/confignet v1.47.0 h1:3T1qpFH1YsXTLeHpFboNDTCg2Ax871+MZZ6J/fvuuxM=
-go.opentelemetry.io/collector/config/confignet v1.47.0/go.mod h1:4jJWdoe1MmpqxMzxrIILcS5FK2JPocXYZGUvv5ZQVKE=
-go.opentelemetry.io/collector/config/configopaque v1.47.0 h1:eQpdM3vGB8/VbUscZ4MM6y4JI5YTog7qv/G/nWxUlmA=
-go.opentelemetry.io/collector/config/configopaque v1.47.0/go.mod h1:NtM24SOlXT84NxS9ry8Y2qOurLskTKOd7VS78WLkPuM=
-go.opentelemetry.io/collector/config/configoptional v1.47.0 h1:x/wxmHZe9bKdsfeOhfgNdpoMRZxi0x4rTTxbLFkpiz4=
-go.opentelemetry.io/collector/config/configoptional v1.47.0/go.mod h1:nlcEmR01MMD5Nla5f4weZ0OcCq1LSxPGwlAWG8GUCbw=
-go.opentelemetry.io/collector/config/configretry v1.47.0 h1:YlRON2zh88wldtSyqkxC24SzHjzBntuj2zEYokjEISM=
-go.opentelemetry.io/collector/config/configretry v1.47.0/go.mod h1:ZSTYqAJCq4qf+/4DGoIxCElDIl5yHt8XxEbcnpWBbMM=
-go.opentelemetry.io/collector/config/configtelemetry v0.141.0 h1:waUnWigFfXoiHNWjmOo5nj46H8xDLsLvBzJWzr0WTXg=
-go.opentelemetry.io/collector/config/configtelemetry v0.141.0/go.mod h1:Xjw2+DpNLjYtx596EHSWBy0dNQRiJ2H+BlWU907lO40=
-go.opentelemetry.io/collector/config/configtls v1.47.0 h1:uuXkdsHouWkDli/o/+1y9e8KaIGTCLNRMPxJLN2zXBs=
-go.opentelemetry.io/collector/config/configtls v1.47.0/go.mod h1:WfwC2ODU/ADiYI9tY4dWwH0S6k4iwKNqlEC55epQk5M=
-go.opentelemetry.io/collector/confmap v1.47.0 h1:iXx4Pm1VbGboQCuY442mbBgihPv6gNpEItsod4rkW04=
-go.opentelemetry.io/collector/confmap v1.47.0/go.mod h1:ipnIWHs3VdMOxkIjQnOw3Qou2hjXZELrphHuqjTh4QM=
-go.opentelemetry.io/collector/confmap/provider/envprovider v1.47.0 h1:PfAkFHDpt8ZbSk67LqZeXrQk9OARJNBTooXtt6CHSIw=
-go.opentelemetry.io/collector/confmap/provider/envprovider v1.47.0/go.mod h1:KSkJ7gCv5jQj7ulJV147rzUcBBuHdmpxIeDeGf7QDeo=
-go.opentelemetry.io/collector/confmap/provider/fileprovider v1.47.0 h1:wMEl2gzlhmFrBZdWr0AU7GSSiY23LN1PkNAm4C32o3g=
-go.opentelemetry.io/collector/confmap/provider/fileprovider v1.47.0/go.mod h1:0YkK2SdfQpX0lyIeDuLlrugpceEwEtgTGrOhzpHyFFs=
-go.opentelemetry.io/collector/confmap/provider/httpprovider v1.47.0 h1:ELoDa+l2eqQMGQN/b95/bPWSIIb2i1ADUb/EjDEFy1I=
-go.opentelemetry.io/collector/confmap/provider/httpprovider v1.47.0/go.mod h1:ByMAuG88B/RX7ZI4g8GqVVQ+l8XYyLE3ihnfF81k3p8=
-go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.47.0 h1:BlJu/lz7P4WGiKFp/uUQVtSXGuZnWCyUGGOKLODcaPo=
-go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.47.0/go.mod h1:zHW2C+9ja39/WTXLf//UMhOShPKLGJzpZCWPioQ77xU=
-go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.47.0 h1:NAQj5aS4CV7PeYT3k0wIAkgBpRCanNPVfYjFrjnqlXY=
-go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.47.0/go.mod h1:JXIONyK6xTJiLw3OobRZx2G4ogkNTCTdYDYFAtVfZ3k=
-go.opentelemetry.io/collector/confmap/xconfmap v0.141.0 h1:EhxPYLvUERsE4eThocTsmL1mDeSXn0AOX7Ta4GAjLNY=
-go.opentelemetry.io/collector/confmap/xconfmap v0.141.0/go.mod h1:c4f/AT97CxQ5fYaCclj9fGnD0E2+5hLvL4fNQ7YkEEo=
-go.opentelemetry.io/collector/connector v0.141.0 h1:kDxl66+nbB12HmMXS/Cl9bVxKiB0EKm3AW0G8dvXFUk=
-go.opentelemetry.io/collector/connector v0.141.0/go.mod h1:bSNiaIycyVBsz1JBcGSHMEl9Pw9Pba1fjMvNf8mMkSk=
-go.opentelemetry.io/collector/connector/connectortest v0.141.0 h1:s02SmglD5DUDVuUnYIEKAnt1bcBS3hJcepYWQaJSFis=
-go.opentelemetry.io/collector/connector/connectortest v0.141.0/go.mod h1:jrLSLEnYCgNNPS4+kWkEVn/fHU/P3sAi9KZlvhsk2cM=
-go.opentelemetry.io/collector/connector/forwardconnector v0.141.0 h1:qmJ8iCUdUNE6GcYr8UjTVx83i4yQlOaxuhLdZYPzug8=
-go.opentelemetry.io/collector/connector/forwardconnector v0.141.0/go.mod h1:eVgjcoWyN6xITZQDiGvLFKK0fItdL2HidznKRZvCfOo=
-go.opentelemetry.io/collector/connector/xconnector v0.141.0 h1:0FjMgtVhDbfm7jG5mzuz1XbHq0+tIGor2l8TeVOBblg=
-go.opentelemetry.io/collector/connector/xconnector v0.141.0/go.mod h1:fNdivTW1tvmUYzut9pcZ4MwVQ+JGMk5WXM2gGNIh5ok=
-go.opentelemetry.io/collector/consumer v1.47.0 h1:eriMvNAsityaea361luVfNe8wp6QKWJQoU4d4i3tyOA=
-go.opentelemetry.io/collector/consumer v1.47.0/go.mod h1:wBsF8koieun0CK4laZLN2MvGKNqad8gwQa+1jXWWn5k=
-go.opentelemetry.io/collector/consumer/consumererror v0.141.0 h1:lUgIRGDPQy+qwvGQOx+GJuf/cRUIp2Eve6BOoEN9vfY=
-go.opentelemetry.io/collector/consumer/consumererror v0.141.0/go.mod h1:DsO9l7yTeoxgWyk3psHMPepZ4Dv5gg/d7XFH3Teh8zc=
-go.opentelemetry.io/collector/consumer/consumererror/xconsumererror v0.141.0 h1:OWAE82H4ZWfnP+BudwmSjRemoaHuMXyMRdGTxm4QQno=
-go.opentelemetry.io/collector/consumer/consumererror/xconsumererror v0.141.0/go.mod h1:tVEZL9rOn3tqNmTY4quxxWTsrRGByIeI4oIQVvA5hm4=
-go.opentelemetry.io/collector/consumer/consumertest v0.141.0 h1:Q5X7rOI8I5xj35Q1NQiwGJsJ4OZx1n7szw3MbOfNgiM=
-go.opentelemetry.io/collector/consumer/consumertest v0.141.0/go.mod h1:yjSSOFx0oBjH2fouw0TTN/U82hYyJPq35ClIZrpz60g=
-go.opentelemetry.io/collector/consumer/xconsumer v0.141.0 h1:qR9H8tWo6NtPBDBv3fz8J8QBkqbnaU8vwUvtIO3QeZo=
-go.opentelemetry.io/collector/consumer/xconsumer v0.141.0/go.mod h1:Ud55EhQ0cgqDTtnvHQNjtktLGMeefOzF6SFk0bLheOc=
-go.opentelemetry.io/collector/exporter v1.47.0 h1:2RgIFPCTPlm8IPtx8VF7f/qeC4UywMGiAF2ffnCWN6Q=
-go.opentelemetry.io/collector/exporter v1.47.0/go.mod h1:rUn1GU8Hdz7TSDQQvv9iqfN0xaGWQrUAVIQgT5PdrYU=
-go.opentelemetry.io/collector/exporter/debugexporter v0.141.0 h1:hceGhWPM8CjXrtXC9syokef7fARTcfbPXOJ5l6Kl/4o=
-go.opentelemetry.io/collector/exporter/debugexporter v0.141.0/go.mod h1:hoeAcpNBWQabV347K9DmaKimXnMytZ2eO0zWn3+UGc0=
-go.opentelemetry.io/collector/exporter/exporterhelper v0.141.0 h1:448RLUk0k0Cq+JjqosyRr7lUSPPx3EZiomI2Fxg/KkA=
-go.opentelemetry.io/collector/exporter/exporterhelper v0.141.0/go.mod h1:BlNweRtWgwNqQKtImoZkdagNUn2vxkBlEbmJYdqIH9w=
-go.opentelemetry.io/collector/exporter/exporterhelper/xexporterhelper v0.141.0 h1:CW/dH2GIhTh0chgCkwfCkLXsZKfaR7sC51BnQj//a2o=
-go.opentelemetry.io/collector/exporter/exporterhelper/xexporterhelper v0.141.0/go.mod h1:FLX+t1XmNv529mkg0Wt6PjFFFvGM/BNVBw9PsNZlHCg=
-go.opentelemetry.io/collector/exporter/exportertest v0.141.0 h1:g52hJvBkseHeoAZzj0MlBmDxg7VOk9goa8dFojTr4fw=
-go.opentelemetry.io/collector/exporter/exportertest v0.141.0/go.mod h1:WD9liBCgGbW6M3m64XS+RSDUyT/aC3gfy4H1PD06x5A=
-go.opentelemetry.io/collector/exporter/nopexporter v0.141.0 h1:kdjjwjJ3m0uzFwA2zA3XzZVhPeTyJlA5/FQxGgrYMk4=
-go.opentelemetry.io/collector/exporter/nopexporter v0.141.0/go.mod h1:ZQaFuUQ6vjzoBY0hW+QK/QHR0v8trCoQTBD+Q/4vbaU=
-go.opentelemetry.io/collector/exporter/otlpexporter v0.141.0 h1:kMVzed7ujCPWhJVbkMfLxLER5To0TlJ8pdDkVWnToek=
-go.opentelemetry.io/collector/exporter/otlpexporter v0.141.0/go.mod h1:x6Baxh+n/3IItltaAHuf5U4E0qmEYaMfvBCbkmH0RCQ=
-go.opentelemetry.io/collector/exporter/otlphttpexporter v0.141.0 h1:i3tEZvFlZDdFpY0sIbo7xzetpcc9wnbUd09GCVVfqbY=
-go.opentelemetry.io/collector/exporter/otlphttpexporter v0.141.0/go.mod h1:NYiF8Q7+3+AaLQmgZOTuac+eVp9vPx/qsD/2m34XE8E=
-go.opentelemetry.io/collector/exporter/xexporter v0.141.0 h1:aGKacYq6uIEweIfw/at35XfjdCUqf/t6L4J2/4u6Fio=
-go.opentelemetry.io/collector/exporter/xexporter v0.141.0/go.mod h1:0QfPORq7Z2iKKg2pSEh7ARn09P30QNhJp+xnKhIGtDg=
-go.opentelemetry.io/collector/extension v1.47.0 h1:3tuOP79eXWHQvS1ITtSzipPqURK4JDHj1n8HFQQWe3A=
-go.opentelemetry.io/collector/extension v1.47.0/go.mod h1:Zfozkdo63ltydtPnuu1PotxWXJRsaX1wPamxuF3JbaQ=
-go.opentelemetry.io/collector/extension/extensionauth v1.47.0 h1:rF1nh638CY0Qi3RcyOnTuGYPrQv2U7CI/pjInkR8pFA=
-go.opentelemetry.io/collector/extension/extensionauth v1.47.0/go.mod h1:CtNVU6ivNIAcJoCL7GRxDGpuvSgWVpgmrRiGD7FQAyY=
-go.opentelemetry.io/collector/extension/extensionauth/extensionauthtest v0.141.0 h1:EoUYtxYqMosP9yIgUOK8QG61yvHIN+zSkSxwyQDekDc=
-go.opentelemetry.io/collector/extension/extensionauth/extensionauthtest v0.141.0/go.mod h1:PS6B7i383Ajj3dPhb2OiYYqSspgVkDqbVfJ1qQo9TKM=
-go.opentelemetry.io/collector/extension/extensioncapabilities v0.141.0 h1:yMHw735gpgxnwryu//gQ+AfRWA07zCmCQEU4iCz14Rs=
-go.opentelemetry.io/collector/extension/extensioncapabilities v0.141.0/go.mod h1:Ugk9jcz0/zHwJndOF61dKOzomOEIK1jFx0LvWrWPT1o=
-go.opentelemetry.io/collector/extension/extensionmiddleware v0.141.0 h1:dj/H1kBDgypI1oD8xMCc9Ha5NamYwN/AyrJP1M3rayc=
-go.opentelemetry.io/collector/extension/extensionmiddleware v0.141.0/go.mod h1:rdpsumcbndkZ00eDBaLL4Q5PNWYBOXqt4YR9wtk2sH0=
-go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmiddlewaretest v0.141.0 h1:ekuapTC9RPSuvbTIKyWClIduJ9RDCMt5ToLJuTQTaKI=
-go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmiddlewaretest v0.141.0/go.mod h1:BpzE+gqh/RlBhSBXVbKivYor4EZgcFTh90/+eX9tDPk=
-go.opentelemetry.io/collector/extension/extensiontest v0.141.0 h1:JjnCUMDk5+fgjgmg9az+CM4J4AJugarDT/PHWZNMQl4=
-go.opentelemetry.io/collector/extension/extensiontest v0.141.0/go.mod h1:w8PCvxBL1R1v1waezDZlNtm5Wmxtkfljjj+Vnj5cviU=
-go.opentelemetry.io/collector/extension/xextension v0.141.0 h1:VIDCodSJGeS/4fvwBSCvUSaXOYhpNHtwySlPffzv87o=
-go.opentelemetry.io/collector/extension/xextension v0.141.0/go.mod h1:bUUsO+CmZZQBhCljV+cxA10bazpsRXhAD/+mBSKasJ4=
-go.opentelemetry.io/collector/extension/zpagesextension v0.141.0 h1:x6PCZW0F6AnMhvwcZWA7yWsocme9cUcCC8iOn5scR5c=
-go.opentelemetry.io/collector/extension/zpagesextension v0.141.0/go.mod h1:sJ02ZaSx9fEZPsobwWlTurMAD+S/8BVKD7IAubzzV6A=
-go.opentelemetry.io/collector/featuregate v1.47.0 h1:LuJnDngViDzPKds5QOGxVYNL1QCCVWN/m61lHTV8Pf4=
-go.opentelemetry.io/collector/featuregate v1.47.0/go.mod h1:d0tiRzVYrytB6LkcYgz2ESFTv7OktRPQe0QEQcPt1L4=
-go.opentelemetry.io/collector/internal/fanoutconsumer v0.141.0 h1:XE0+2eJgixbDveL/pUqbfxJIIAVojYcTY2ZdaqTH3QQ=
-go.opentelemetry.io/collector/internal/fanoutconsumer v0.141.0/go.mod h1:vO7+na6RT/sKSOHuTRx/UbYvezvAQnjNQUA+P4d5H9M=
-go.opentelemetry.io/collector/internal/memorylimiter v0.141.0 h1:G4NOB9FgNEOGryNSdOrKEr3q+lm9rtCMVe4MgSxKwoQ=
-go.opentelemetry.io/collector/internal/memorylimiter v0.141.0/go.mod h1:brjlvjvPwG3U1x08UCWDGcyJb9mjGb1lsBw6jj+PcY8=
-go.opentelemetry.io/collector/internal/sharedcomponent v0.141.0 h1:amWZluSQZ+wCK1MB8lvQv8i3ZPorUaECR7VcxseAMx0=
-go.opentelemetry.io/collector/internal/sharedcomponent v0.141.0/go.mod h1:iBOHpV5ulGnq6bFzsTlQUV+Xh2E8WosLpZ+zc0z9iu4=
-go.opentelemetry.io/collector/internal/telemetry v0.141.0 h1:vHbH5YbBJGtsn1+PH99WZRJsODgkBD4g39zONslfti4=
-go.opentelemetry.io/collector/internal/telemetry v0.141.0/go.mod h1:5TOmlQDc4gE3TZuC+W0Ra44HiKXzVQiZzS6BCIncbCQ=
-go.opentelemetry.io/collector/internal/testutil v0.141.0 h1:/rUGApojPtUPMN3rFfApNgEjAt03rCGt2qxNxGGs/4A=
-go.opentelemetry.io/collector/internal/testutil v0.141.0/go.mod h1:YAD9EAkwh/l5asZNbEBEUCqEjoL1OKMjAMoPjPqH76c=
-go.opentelemetry.io/collector/otelcol v0.141.0 h1:4DdP20QvxLh+e/wOQZROB20WE98U15gQyk3sw81jT4o=
-go.opentelemetry.io/collector/otelcol v0.141.0/go.mod h1:uOM85bSEtiFZJsphjmYwFNyQlA5gcqZykiL8BaAKo+0=
-go.opentelemetry.io/collector/pdata v1.47.0 h1:4Mk0mo2RlKCUPomV8ISm+Yx/STFtuSn88yjiCePHkGA=
-go.opentelemetry.io/collector/pdata v1.47.0/go.mod h1:yMdjdWZBNA8wLFCQXOCLb0RfcpZOxp7exH+bN7udWO0=
-go.opentelemetry.io/collector/pdata/pprofile v0.141.0 h1:15lbbHKzPIG4aVT6hsJO7XZLvMrGll+i36es/FEgn7c=
-go.opentelemetry.io/collector/pdata/pprofile v0.141.0/go.mod h1:gUtWKniP3O0jXYVDISp1y3dCbYFIyglFw6B8ATyrrWs=
-go.opentelemetry.io/collector/pdata/testdata v0.141.0 h1:AfjNbZ/DUSr0aiP4H+z7pqrzTuBQFaT6oca0zaJ3gCA=
-go.opentelemetry.io/collector/pdata/testdata v0.141.0/go.mod h1:/KX316ZF30G4eUQadM+SPUqCCPoiAkhMxcvAu4uM72I=
-go.opentelemetry.io/collector/pdata/xpdata v0.141.0 h1:Bhpnwett0KhK7AjEwUhEBVYNlbMwBO5t9ASNIwrtqzY=
-go.opentelemetry.io/collector/pdata/xpdata v0.141.0/go.mod h1:Du2E8XK3Yl82TzWu08b5ShzZ36pPZNE0O0QrvbY8ZD4=
-go.opentelemetry.io/collector/pipeline v1.47.0 h1:Ql2cfIopfo/e0Y6r/Fw3mNorKYi8MAoA7zgouzAN8eI=
-go.opentelemetry.io/collector/pipeline v1.47.0/go.mod h1:xUrAqiebzYbrgxyoXSkk6/Y3oi5Sy3im2iCA51LwUAI=
-go.opentelemetry.io/collector/pipeline/xpipeline v0.141.0 h1:wiER5GXVTSq1orSYM1q847aGc8IaHpBjzO8rO3kXGaU=
-go.opentelemetry.io/collector/pipeline/xpipeline v0.141.0/go.mod h1:9u8hFIicFWVhi7rCJCpgVW7AR1OCNk1Pfv2dLrCJDh8=
-go.opentelemetry.io/collector/processor v1.47.0 h1:WA4AP+w+ohFItWx0eG5iGEvLCE70Le5wC2Uw7YVN1Vg=
-go.opentelemetry.io/collector/processor v1.47.0/go.mod h1:XaC3o+kNM5wq7ET+FJt+9hTnqqICmruylBpVerb+TZo=
-go.opentelemetry.io/collector/processor/batchprocessor v0.141.0 h1:tm2NRcrAETazsFU0F9Gs7N+FHG8GoG4pyEvljJG459c=
-go.opentelemetry.io/collector/processor/batchprocessor v0.141.0/go.mod h1:lKwRWLBU8BcouHvxf8xkCkhMFJ6lxaWXwLMjr1bC+3o=
-go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.141.0 h1:kBfKgTrse4fe/cBB08UN0QIR6D1ZZmYbniInfjzAp4Q=
-go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.141.0/go.mod h1:0eUNApxF3yPVFtSMPl9p4XnWu+VET8T4Mct+U9MR+fA=
-go.opentelemetry.io/collector/processor/processorhelper v0.141.0 h1:4NCArw4JJsJ8YNtbcJXYNOczQ9gon+m1yGV5VPh8Lwk=
-go.opentelemetry.io/collector/processor/processorhelper v0.141.0/go.mod h1:idjJbBjKlBmXnhWwiqKG8AYBJmdowNn82F36OhBcMwg=
-go.opentelemetry.io/collector/processor/processorhelper/xprocessorhelper v0.141.0 h1:Lvufz+Z0DTKgI4ju69kQaoIK5B6Xctn7LQRAm685WGY=
-go.opentelemetry.io/collector/processor/processorhelper/xprocessorhelper v0.141.0/go.mod h1:fd76xwfwfI7c9uAkhfF99Ev/PvZUN6pk3xIES9+ABSk=
-go.opentelemetry.io/collector/processor/processortest v0.141.0 h1:HY/o+CkKTU2Db96TfugwfMKkRFcaJb2vxPUHluS5/F8=
-go.opentelemetry.io/collector/processor/processortest v0.141.0/go.mod h1:n0QKOTH2m2vVbDGdIHvDmIEHU02LOQtuCzzN4BJgK5U=
-go.opentelemetry.io/collector/processor/xprocessor v0.141.0 h1:rlvqx4aW7dgrYqWrNTkq1+IDiWOKdX/DDZPxk1DQMVw=
-go.opentelemetry.io/collector/processor/xprocessor v0.141.0/go.mod h1:jSSsP1pFgkxN4MvVsyZA1MI5DKhN+kg9Y27Ev0lEwqs=
-go.opentelemetry.io/collector/receiver v1.47.0 h1:x9kofoR+PyoFktNVVPdfP1iw08SMNzNw6Z9qYdOV18U=
-go.opentelemetry.io/collector/receiver v1.47.0/go.mod h1:Uln4nIZB5qn+dyVQr32V7/5/t92o7o4Fo5sPjxcrdRM=
-go.opentelemetry.io/collector/receiver/nopreceiver v0.141.0 h1:6uVwMoBMHYwiISlffE4n5BbqrcnLhOvwHk6tItVMjf8=
-go.opentelemetry.io/collector/receiver/nopreceiver v0.141.0/go.mod h1:IkKM9B/tMjZAbrw73RFhmu/KnvJUw+6v7jo3vfETp1Q=
-go.opentelemetry.io/collector/receiver/otlpreceiver v0.141.0 h1:1AICSW4CXhtqRHXfYYvHajhv+u3WoJfpCRQ+6lJ3qYM=
-go.opentelemetry.io/collector/receiver/otlpreceiver v0.141.0/go.mod h1:gtSOtRUouwaebRAIP449kTscbIKxuO/vvu11QUub+Ig=
-go.opentelemetry.io/collector/receiver/receiverhelper v0.141.0 h1:x1w+UCeFcs8/18QcBQAAvyakCab5HhsWWpYR4ONcT8c=
-go.opentelemetry.io/collector/receiver/receiverhelper v0.141.0/go.mod h1:co9h8puOBRzUynrjbptkA7lvKTsM/ASMZGIxwaE0vbE=
-go.opentelemetry.io/collector/receiver/receivertest v0.141.0 h1:D5lRyj92ZekGRNxI8ufeQfdicQHRvgfISuZwxjaq1Go=
-go.opentelemetry.io/collector/receiver/receivertest v0.141.0/go.mod h1:w6sopQCUydOypIp1ym8Lytgt9C+QjrfEU3fN21z6NCU=
-go.opentelemetry.io/collector/receiver/xreceiver v0.141.0 h1:jvnSzS4gaGwbnG90t3e5keZVfcZChrXk7Ykn46gatgE=
-go.opentelemetry.io/collector/receiver/xreceiver v0.141.0/go.mod h1:HCGNAJHKHb1JB/So3tZnaCi+eUTxaothQ7BptRprjhg=
+go.opentelemetry.io/collector v0.142.0 h1:1PFBnYwphCN7wWXU85/G5SN08hzRua8AkEI1yPIvVMk=
+go.opentelemetry.io/collector v0.142.0/go.mod h1:etSWqFxETgvoEjTINqGu+B/Lm+EbJiu3PZGW+bemo1A=
+go.opentelemetry.io/collector/client v1.48.0 h1:/ycTq3gsP5NJ5ymDDkEWhem2z+7rH7cUMzifRGal6uQ=
+go.opentelemetry.io/collector/client v1.48.0/go.mod h1:ySz+QB/uo8zWI3lGVKOfLqyPP/NZj6oB+j0EjIPsF14=
+go.opentelemetry.io/collector/component v1.48.0 h1:0hZKOvT6fIlXoE+6t40UXbXOH7r/h9jyE3eIt0W19Qg=
+go.opentelemetry.io/collector/component v1.48.0/go.mod h1:Kmc9Z2CT53M2oRRf+WXHUHHgjCC+ADbiqfPO5mgZe3g=
+go.opentelemetry.io/collector/component/componentstatus v0.142.0 h1:a1KkLCtShI5SfhO2ga75VqWjjBRGgrerelt/2JXWLBI=
+go.opentelemetry.io/collector/component/componentstatus v0.142.0/go.mod h1:IRWKvFcUrFrkz1gJEV+cKAdE2ZBT128gk1sHt0OzKI4=
+go.opentelemetry.io/collector/component/componenttest v0.142.0 h1:a8XclEutO5dv4AnzThHK8dfqR4lDWjJKLtRNM2aVUFM=
+go.opentelemetry.io/collector/component/componenttest v0.142.0/go.mod h1:JhX/zKaEbjhFcsiV2ha2spzo24A6RL/jqNBS0svURD0=
+go.opentelemetry.io/collector/config/configauth v1.48.0 h1:WYXQLzW7VeUXGOEKXkIVaBe02m01h3qiyIMULygz4o4=
+go.opentelemetry.io/collector/config/configauth v1.48.0/go.mod h1:kewLALUSiJfa8Kr0/BkObqO/Wuu5PWLqozKuLrxq7Dc=
+go.opentelemetry.io/collector/config/configcompression v1.48.0 h1:fsJCQ6NHsD6QOaa9dUlW9KzoPh505cXZApg7gTs8UQA=
+go.opentelemetry.io/collector/config/configcompression v1.48.0/go.mod h1:ZlnKaXFYL3HVMUNWVAo/YOLYoxNZo7h8SrQp3l7GV00=
+go.opentelemetry.io/collector/config/configgrpc v0.142.0 h1:CV0W6Sh8rZJMH/aJoAHc/WH3isk35dGoUtiiCkWURnA=
+go.opentelemetry.io/collector/config/configgrpc v0.142.0/go.mod h1:WVaqPqwoF1ZdanMlVgdzZK/WdDLKB5judYkref2l2xI=
+go.opentelemetry.io/collector/config/confighttp v0.142.0 h1:FastUGaVj1X2ThqYil2kMtnpPij4fps+Ic8gYH6U0Zw=
+go.opentelemetry.io/collector/config/confighttp v0.142.0/go.mod h1:wNo/bNY8VDWfU1zXOHzCmb9JDH5UAlmtgkZMK2MjHo4=
+go.opentelemetry.io/collector/config/confighttp/xconfighttp v0.142.0 h1:RdrRxPQS/NKEOMnT8lGx/DNq4JBfX2HhjDpjPqMDmO0=
+go.opentelemetry.io/collector/config/confighttp/xconfighttp v0.142.0/go.mod h1:43+3Z0VRu8iXNwNTYijzuRQJ7DS0oQkC0WvIBmg0o9E=
+go.opentelemetry.io/collector/config/configmiddleware v1.48.0 h1:8b4f8NOI2Mr2QaWHcYlVekac8eoKraogzqHI587eWAs=
+go.opentelemetry.io/collector/config/configmiddleware v1.48.0/go.mod h1:pUiX9YcS0oWBLx+BbtmCk44bGeXV+6QY2ik8iTgdHuc=
+go.opentelemetry.io/collector/config/confignet v1.48.0 h1:17KMNfj9W39BOtAG1ICvg7SyMncTn1opVynhwWuYn+c=
+go.opentelemetry.io/collector/config/confignet v1.48.0/go.mod h1:4jJWdoe1MmpqxMzxrIILcS5FK2JPocXYZGUvv5ZQVKE=
+go.opentelemetry.io/collector/config/configopaque v1.48.0 h1:ST/hdVf8RsIfuxSbfYi2PTYdrwQgC6+4HubX4yKpkXI=
+go.opentelemetry.io/collector/config/configopaque v1.48.0/go.mod h1:QUbIsaQUTrfkx258rZcrvuBBx7JEA5aywnhRG2g1Zps=
+go.opentelemetry.io/collector/config/configoptional v1.48.0 h1:BjqC8qjg5A8QNHpQE9XdRnnXHw0EpRG9wzIN3SKtxHs=
+go.opentelemetry.io/collector/config/configoptional v1.48.0/go.mod h1:SrGxQQO3GABGHPvKG0eeSKNJKD2ECxewkFSTBVSoWlE=
+go.opentelemetry.io/collector/config/configretry v1.48.0 h1:tH4fU4nWv3PTUDU82fhMCG0tt33p2/wCkjmQcznLpPU=
+go.opentelemetry.io/collector/config/configretry v1.48.0/go.mod h1:ZSTYqAJCq4qf+/4DGoIxCElDIl5yHt8XxEbcnpWBbMM=
+go.opentelemetry.io/collector/config/configtelemetry v0.142.0 h1:hidlUz9WXTYhrcS1O1RtN4o8WKtYDAELiTCP4P453EI=
+go.opentelemetry.io/collector/config/configtelemetry v0.142.0/go.mod h1:Xjw2+DpNLjYtx596EHSWBy0dNQRiJ2H+BlWU907lO40=
+go.opentelemetry.io/collector/config/configtls v1.48.0 h1:+099UpRcmp1H+Y+kekr/WYDfZw9yWBGRfD84xA0+J+g=
+go.opentelemetry.io/collector/config/configtls v1.48.0/go.mod h1:qSbIUUcstn7Hsj//rBWdN4/sxurjl0970OcUQW2tBho=
+go.opentelemetry.io/collector/confmap v1.48.0 h1:vGhg25NEUX5DiYziJEw2siwdzsvtXBRZVuYyLVinFR8=
+go.opentelemetry.io/collector/confmap v1.48.0/go.mod h1:8tJHJowmvUkJ8AHzZ6SaH61dcWbdfRE9Sd/hwsKLgRE=
+go.opentelemetry.io/collector/confmap/provider/envprovider v1.48.0 h1:TeKwB3r/bCmwhIgiiCA80GNGfUNk1qhN2kRb8/hIw5k=
+go.opentelemetry.io/collector/confmap/provider/envprovider v1.48.0/go.mod h1:7cJK4GoBjyMdiBlS4fYRj+rPOaJ5VTyU3OQcLYqgnaw=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v1.48.0 h1:lGcgMXsucIvYbZCuW51lB/7cNQ2/ASk7KUa8noxV4QQ=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v1.48.0/go.mod h1:tRy+5rXYYHzDCDSpxdYHi3w35kY9n7y3rhPVn1uenAE=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v1.48.0 h1:MccK2zLJvxH6D9ZjiTQRIO7tS2kw1nXezrHIEGqWsTE=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v1.48.0/go.mod h1:B9CsZmgvAJ0Sy6puaERc+P4LGpiDeq2oZ7rGbbeo/nw=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.48.0 h1:BykpPdaMmnyZ1sJwvY4ijCfZVUBUa3x1Amk6kPpicrc=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.48.0/go.mod h1:+UeSVjJWqWzd/9gkyMd7HaSwWGm3P+AgiGwqrCXkBc0=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.48.0 h1:IoiZ3LKkEI0OJmxqowcQymdDsfkWmZBYNtdcw/d6SaY=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.48.0/go.mod h1:7My2M2iNrqoN4G0yrZUla1n3+ytTKaAeVb6lbVU/ZIg=
+go.opentelemetry.io/collector/confmap/xconfmap v0.142.0 h1:SNfuFP8TA0PmUkx6ryY63uNjLN2HMh5VeGO++IYdPgA=
+go.opentelemetry.io/collector/confmap/xconfmap v0.142.0/go.mod h1:FXuX6B8b7Ub7qkLqloWKanmPhADL18EEkaFptcd4eDQ=
+go.opentelemetry.io/collector/connector v0.142.0 h1:8IHsthuYBhOgdwdIsoc4X4/jyK2qcY/NmjH6w+iq0cw=
+go.opentelemetry.io/collector/connector v0.142.0/go.mod h1:GHxeYzlWol0ZYJRtcSU5JGwdeahaUpmtF/hjE67gjoE=
+go.opentelemetry.io/collector/connector/connectortest v0.142.0 h1:Cpvef+XP4wa8mWQVYzmYfc6iqcouS1hJE+TJ71yQEWk=
+go.opentelemetry.io/collector/connector/connectortest v0.142.0/go.mod h1:pweTOYtLDKdxaLXNoejLYxn5HW32zAac3WWey2D8LTU=
+go.opentelemetry.io/collector/connector/forwardconnector v0.142.0 h1:rq92ozhNWr5o8GSBsEevqRewmsKv8ZYQ6eD2TGijuvw=
+go.opentelemetry.io/collector/connector/forwardconnector v0.142.0/go.mod h1:7CWfXCiur726mZf4q+3ZbiFqORu1gBvF0kbZ9bNGYB8=
+go.opentelemetry.io/collector/connector/xconnector v0.142.0 h1:O0E9sDIN4A2ppydNzYNy9YjQ8L5C9y6anO6tgUpv8IA=
+go.opentelemetry.io/collector/connector/xconnector v0.142.0/go.mod h1:j7xWw0WEJO7QSWW/v1RxD9Qn8RDyqKGvgDM8S3xM8y8=
+go.opentelemetry.io/collector/consumer v1.48.0 h1:g1uroz2AA0cqnEsjqFTSZG+y8uH1gQBqqyzk8kd3QiM=
+go.opentelemetry.io/collector/consumer v1.48.0/go.mod h1:lC6PnVXBwI456SV5WtvJqE7vjCNN6DAUc8xjFQ9wUV4=
+go.opentelemetry.io/collector/consumer/consumererror v0.142.0 h1:2QnxUNL8ZQ42fz5uB1O1OKtfmVH/NcBYHIZ9gt/xqRE=
+go.opentelemetry.io/collector/consumer/consumererror v0.142.0/go.mod h1:/nrPOD+za/pWOiL13QzyqHSUNpY8IrHKE6cXQIK2p7k=
+go.opentelemetry.io/collector/consumer/consumererror/xconsumererror v0.142.0 h1:LzURVB3Yz1ByWpkH8ZJR8j9PbJzth15UJnCaOpsxuCY=
+go.opentelemetry.io/collector/consumer/consumererror/xconsumererror v0.142.0/go.mod h1:ol4kw1OqsjuGLyU2MIh18mGIBVIgY0OqNoNUJJ+V7j4=
+go.opentelemetry.io/collector/consumer/consumertest v0.142.0 h1:TRt8zR57Vk1PTjtqjHOwOAMbIl+IeloHxWAuF8sWdRw=
+go.opentelemetry.io/collector/consumer/consumertest v0.142.0/go.mod h1:yq2dhMxFUlCFkRN7LES3fzsTmUDw9VaunyRAka2TEaY=
+go.opentelemetry.io/collector/consumer/xconsumer v0.142.0 h1:qOoQnLZXQ9sRLexTkkmBx3qfaOmEgco9VBPmryg5UhA=
+go.opentelemetry.io/collector/consumer/xconsumer v0.142.0/go.mod h1:oPN0yJzEpovwlWvmSaiYgtDqGuOmMMLmmg352sqZdsE=
+go.opentelemetry.io/collector/exporter v1.48.0 h1:2NQ4VlkGdPTO+tw2cFdjElKzivWAtXm2zOIEjoTyvno=
+go.opentelemetry.io/collector/exporter v1.48.0/go.mod h1:AOcXxccg8g3R5khMm0DHLmKrr0pWOoGfr9uMbtOPJrg=
+go.opentelemetry.io/collector/exporter/debugexporter v0.142.0 h1:6hBSxek4M9xkWxqAw5TEoENM7So/2xDq9BQwdeR6rQA=
+go.opentelemetry.io/collector/exporter/debugexporter v0.142.0/go.mod h1:x0URtIF6vLcX3LXjLnvuQcpcU6cQ77ODiquOrxjdooE=
+go.opentelemetry.io/collector/exporter/exporterhelper v0.142.0 h1:7v8drPONUqXv7tXEFiy5OD1av3ruMsJ+XD62OU/U21E=
+go.opentelemetry.io/collector/exporter/exporterhelper v0.142.0/go.mod h1:8qsCgTqRzqIy0d9vFJPHqx14MkZZHTmHenlqxPepMyY=
+go.opentelemetry.io/collector/exporter/exporterhelper/xexporterhelper v0.142.0 h1:0IMYuAC1LdoLXVLEFrlmwn8Y1k0WbhcQWResYmwV/C0=
+go.opentelemetry.io/collector/exporter/exporterhelper/xexporterhelper v0.142.0/go.mod h1:f/v34PDtqDebl8lPHZn8RvH/m0hkMQEF9duvcKH7ldE=
+go.opentelemetry.io/collector/exporter/exportertest v0.142.0 h1:Qy/vEkgIwrsajKlrCgt/NXV/aoof0dPhBJcvz39l03A=
+go.opentelemetry.io/collector/exporter/exportertest v0.142.0/go.mod h1:HKitP6nu1DJDmic18t7HxhkBb3Is7nGnbSw4G1pLNNo=
+go.opentelemetry.io/collector/exporter/nopexporter v0.142.0 h1:pNkzgu4ftLfY52vFPLor7XSX9etUcRmM+zlBhpN02HU=
+go.opentelemetry.io/collector/exporter/nopexporter v0.142.0/go.mod h1:asXbFQs7Ds/mxo+v/8AUlL/pC2D5UuxdBHEPHPG7Yig=
+go.opentelemetry.io/collector/exporter/otlpexporter v0.142.0 h1:Upr0K8fHSg5iCV5swa3VO/MpMBNiFwd1dCIuDMGqzpQ=
+go.opentelemetry.io/collector/exporter/otlpexporter v0.142.0/go.mod h1:KFm2q64edLBppQFkP6ZQKe4qHpYH/dPkB8+Htc0+2Ms=
+go.opentelemetry.io/collector/exporter/otlphttpexporter v0.142.0 h1:k+VVfIcYAtq62Q4KdeAbyP9TJWbZwmF64eSYdZs0Frs=
+go.opentelemetry.io/collector/exporter/otlphttpexporter v0.142.0/go.mod h1:imGkIGfwVIdRkPpkBs60m/x5m9zoVTu9xLiFkHONxvo=
+go.opentelemetry.io/collector/exporter/xexporter v0.142.0 h1:AcToj72FFKtHvVaY43HYsPb0kI/cpsH+UHd16qd6kHk=
+go.opentelemetry.io/collector/exporter/xexporter v0.142.0/go.mod h1:jRGzj6P1jfpCxEl0VC0KZZv0ylhy7naJjl7VgBdxJBU=
+go.opentelemetry.io/collector/extension v1.48.0 h1:Q8Av/8Ap59eOzlX1fBSw5TcH5qzqtZOA1qlKbigIkt8=
+go.opentelemetry.io/collector/extension v1.48.0/go.mod h1:mKPlW1m7W3s8aRgkZk6ocukkBc4FnIc6GmikteazFXs=
+go.opentelemetry.io/collector/extension/extensionauth v1.48.0 h1:MU72qUj04g77Mjbp4H7XKBbwRM7L5gNwu1MDF2192Yo=
+go.opentelemetry.io/collector/extension/extensionauth v1.48.0/go.mod h1:CtNVU6ivNIAcJoCL7GRxDGpuvSgWVpgmrRiGD7FQAyY=
+go.opentelemetry.io/collector/extension/extensionauth/extensionauthtest v0.142.0 h1:IFQ7tIUd4rr+HG7OtRmAGqfLu7u+59Aq6owfQ8wlZto=
+go.opentelemetry.io/collector/extension/extensionauth/extensionauthtest v0.142.0/go.mod h1:eOAU/g111TZ9K2A+QJAHnwfCtCtfR/Tlcl09sfB1/n4=
+go.opentelemetry.io/collector/extension/extensioncapabilities v0.142.0 h1:a8CdWl6JI5zVrdT5O55193d75uGSPdG6mrlPOML9EJU=
+go.opentelemetry.io/collector/extension/extensioncapabilities v0.142.0/go.mod h1:lJ2TAjbqCAy8FQfUPtm9f+rXCsxLOTQqq1q4G+7rZOw=
+go.opentelemetry.io/collector/extension/extensionmiddleware v0.142.0 h1:/PlrYC8ITEKJnhRwij9nvWWehfT1TbDvrv7xqz5Y12E=
+go.opentelemetry.io/collector/extension/extensionmiddleware v0.142.0/go.mod h1:rdpsumcbndkZ00eDBaLL4Q5PNWYBOXqt4YR9wtk2sH0=
+go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmiddlewaretest v0.142.0 h1:veAJV0RIIkNUz2t9LEV/ockN4+OfwerdwDuAMBz2FG8=
+go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmiddlewaretest v0.142.0/go.mod h1:6WPuxGTBY+YlpWXIw7qMcvRqRowj685VwaMqWaiME+g=
+go.opentelemetry.io/collector/extension/extensiontest v0.142.0 h1:QfArQ1Pd2VpcYBljan/MLT1XUUMZmxmgTYA25R0ZILg=
+go.opentelemetry.io/collector/extension/extensiontest v0.142.0/go.mod h1:en+IIu8wEHpKeZ5O7FjcG0/vWK+OfPYaLSLLJq3GXYY=
+go.opentelemetry.io/collector/extension/xextension v0.142.0 h1:0h0nRM0XxCPFqsSJ/V9ZcwW3C3MznBVta+ROFyGOrIY=
+go.opentelemetry.io/collector/extension/xextension v0.142.0/go.mod h1:FI1aksqUe6meQJD02jBLRWOFxJRVVZB/SlGY/VUV8bU=
+go.opentelemetry.io/collector/extension/zpagesextension v0.142.0 h1:iDhkwn+vo8dE4kxivefZkojL/PdBRQhwPDcB23YNGzQ=
+go.opentelemetry.io/collector/extension/zpagesextension v0.142.0/go.mod h1:B+PGlULxRejmP3ArfLQc+Eh7MXqSVG60sxrejqqSd4M=
+go.opentelemetry.io/collector/featuregate v1.48.0 h1:jiGRcl93yzUFgZVDuskMAftFraE21jANdxXTQfSQScc=
+go.opentelemetry.io/collector/featuregate v1.48.0/go.mod h1:/1bclXgP91pISaEeNulRxzzmzMTm4I5Xih2SnI4HRSo=
+go.opentelemetry.io/collector/internal/fanoutconsumer v0.142.0 h1:eLGLhIj5UBg5wQfCUE8QUW2s34/z2OkHt00CT3ALunY=
+go.opentelemetry.io/collector/internal/fanoutconsumer v0.142.0/go.mod h1:xCrK+o5Pzy5J7fytpEgtrPUMzZdgxv9z20p1no+Qs54=
+go.opentelemetry.io/collector/internal/memorylimiter v0.142.0 h1:hKH7wLdDmTjvRu2WRkWBhC4ISKCWtwGo4z4zVio6XbM=
+go.opentelemetry.io/collector/internal/memorylimiter v0.142.0/go.mod h1:y0SeP5cvUSyHMwJbdfNOKgG4yqH8EDcbUlyy1OWD4cE=
+go.opentelemetry.io/collector/internal/sharedcomponent v0.142.0 h1:J0g5D0bfskMMy5pvRI6zJVMS7e1mqBeq5CUJNRp1mRA=
+go.opentelemetry.io/collector/internal/sharedcomponent v0.142.0/go.mod h1:OFUlJYh+UjyobbXUaVWhrZiaOzNkYVnGyNQZ/tlwPQA=
+go.opentelemetry.io/collector/internal/telemetry v0.142.0 h1:ALK9O2AYWuptSGSFzNW0BL6hFq7sf2lxwTrGQa45Nic=
+go.opentelemetry.io/collector/internal/telemetry v0.142.0/go.mod h1:Nuf7neseGamZJQjpf8f6yk4qrvb0YrSnuSzh5u0GwbQ=
+go.opentelemetry.io/collector/internal/testutil v0.142.0 h1:MHnAVRimQdsfYqYHC3YuJRkIUap4VmSpJkkIT2N7jJA=
+go.opentelemetry.io/collector/internal/testutil v0.142.0/go.mod h1:YAD9EAkwh/l5asZNbEBEUCqEjoL1OKMjAMoPjPqH76c=
+go.opentelemetry.io/collector/otelcol v0.142.0 h1:duJ0gjAL9tqclYqVDYnNuthcWzunJQ5nsPoea6EIEGI=
+go.opentelemetry.io/collector/otelcol v0.142.0/go.mod h1:ZE2NblF9dAq/xKbMPeEcsBXkbfoQHyPe3m5nM7WDsO0=
+go.opentelemetry.io/collector/pdata v1.48.0 h1:CKZ+9v/lGTX/cTGx2XVp8kp0E8R//60kHFCBdZudrTg=
+go.opentelemetry.io/collector/pdata v1.48.0/go.mod h1:jaf2JQGpfUreD1TOtGBPsq00ecOqM66NG15wALmdxKA=
+go.opentelemetry.io/collector/pdata/pprofile v0.142.0 h1:Ivyw7WY8SIIWqzXsnNmjEgz3ysVs/OkIf0KIpJUnuuo=
+go.opentelemetry.io/collector/pdata/pprofile v0.142.0/go.mod h1:94GAph54K4WDpYz9xirhroHB3ptNLuPiY02k8fyoNUI=
+go.opentelemetry.io/collector/pdata/testdata v0.142.0 h1:+jf9RyLWl8WyhIVjpg7yuH+bRdQH4mW20cPtCMlY1cI=
+go.opentelemetry.io/collector/pdata/testdata v0.142.0/go.mod h1:kgAu5ZLEcVuPH3RFiHDg23RGitgm1M0cUAVwiGX4SB8=
+go.opentelemetry.io/collector/pdata/xpdata v0.142.0 h1:xRpmhY12JnJ89E2kM2maOjG7C9QK6dSnTr03Ce8qfPA=
+go.opentelemetry.io/collector/pdata/xpdata v0.142.0/go.mod h1:0e/FY0Stzxx4M2sqELIRrXzeoTsAwjVPKT9mQvL4hmc=
+go.opentelemetry.io/collector/pipeline v1.48.0 h1:E4zyQ7+4FTGvdGS4pruUnItuyRTGhN0Qqk1CN71lfW0=
+go.opentelemetry.io/collector/pipeline v1.48.0/go.mod h1:xUrAqiebzYbrgxyoXSkk6/Y3oi5Sy3im2iCA51LwUAI=
+go.opentelemetry.io/collector/pipeline/xpipeline v0.142.0 h1:/Sj6qgwWUJtGmxiq6k1AqauxXjJYzRIJxQtUamAApPI=
+go.opentelemetry.io/collector/pipeline/xpipeline v0.142.0/go.mod h1:wDQUlMZLs57CNTfmoxQgiw+mwoqj8ZUChmwI6Ck6KCs=
+go.opentelemetry.io/collector/processor v1.48.0 h1:3Kttw79mnrf463QKJGoGZzFfiNzQuMWK0p2nHuvOhaQ=
+go.opentelemetry.io/collector/processor v1.48.0/go.mod h1:A3OsW6ga+a48J1mrnVNH5L5kB0v+n9nVFlmOQB5/Jwk=
+go.opentelemetry.io/collector/processor/batchprocessor v0.142.0 h1:7db0TbGwVaBQ2xNjr1JfTOGJiWEois5G0CwMkXo95D8=
+go.opentelemetry.io/collector/processor/batchprocessor v0.142.0/go.mod h1:dKn4oFvzxO/LOIF8cmnkwA2VJ4Z6BHQKcmPyQ0iB8CY=
+go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.142.0 h1:rRFHC+OQDBFwQ5A+PuA6mNgRIlc3FihLNqacsnkuyxA=
+go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.142.0/go.mod h1:FO5UxVEPfqNIP/tkxSdNYy8D7D8wmWqn7Qwodb4olyE=
+go.opentelemetry.io/collector/processor/processorhelper v0.142.0 h1:FNQv56skQ7R5se8cyuU8zc4hSvU7ZUyRYmp0XxOjIpU=
+go.opentelemetry.io/collector/processor/processorhelper v0.142.0/go.mod h1:31wwl1zprOZEf5c9mWPq2j0XMtHOSZuhC5c8o6lQ/PY=
+go.opentelemetry.io/collector/processor/processorhelper/xprocessorhelper v0.142.0 h1:0m6+vPZD5ji4xcVHbJRRPIDfrfGn1FwM8ofK1ZgQ1fY=
+go.opentelemetry.io/collector/processor/processorhelper/xprocessorhelper v0.142.0/go.mod h1:cpij0FM0F4mc7EWvTLAqidh8pXW4S8LrphdDlVh8kvE=
+go.opentelemetry.io/collector/processor/processortest v0.142.0 h1:wQnJeXDejBL6r8ov66AYAGf8Q0/JspjuqAjPVBdCUoI=
+go.opentelemetry.io/collector/processor/processortest v0.142.0/go.mod h1:QU5SWj0L+92MSvQxZDjwWCsKssNDm+nD6SHn7IvviUE=
+go.opentelemetry.io/collector/processor/xprocessor v0.142.0 h1:7a1Crxrd5iBMVnebTxkcqxVkRHAlOBUUmNTUVUTnlCU=
+go.opentelemetry.io/collector/processor/xprocessor v0.142.0/go.mod h1:LY/GS2DiJILJKS3ynU3eOLLWSP8CmN1FtdpAMsVV8AU=
+go.opentelemetry.io/collector/receiver v1.48.0 h1:2xGdkrHE98WPxnmhevsEz3n66yWj0O/cO0AzbUgtN8A=
+go.opentelemetry.io/collector/receiver v1.48.0/go.mod h1:fD0sfx2mTFlz5slMYao4zFcELz2g+FoF6ISF6elUIRk=
+go.opentelemetry.io/collector/receiver/nopreceiver v0.142.0 h1:Z1DJMjFgSma81HTpnk3e7DruXJPLLva56+lxRUDnq/I=
+go.opentelemetry.io/collector/receiver/nopreceiver v0.142.0/go.mod h1:qhmceHrEPDz0iG0Piz8+d4uVHFX20im4/IHQuyqzwMc=
+go.opentelemetry.io/collector/receiver/otlpreceiver v0.142.0 h1:JeIi6cMMIajqUZro1M2uaTbRKIehAihmscFL+FB9m1g=
+go.opentelemetry.io/collector/receiver/otlpreceiver v0.142.0/go.mod h1:OSpqBwLv69K4FmBSO11vMjgNjb/l7kzHU0s+EwrmvCk=
+go.opentelemetry.io/collector/receiver/receiverhelper v0.142.0 h1:GfoWfdCyILpRq7vgBGra0qR1eOS8f52+QLBVMh658Gc=
+go.opentelemetry.io/collector/receiver/receiverhelper v0.142.0/go.mod h1:yN7WC8y4HFA3FNQ6h1gKF+AkucJBivLw51Jo/4wFU/I=
+go.opentelemetry.io/collector/receiver/receivertest v0.142.0 h1:g8o86xp8hi3Uq4gkxMWmGuxOtm8H0tSVP0G9KLEwqpE=
+go.opentelemetry.io/collector/receiver/receivertest v0.142.0/go.mod h1:3y3gCAMiaLlXULJxHRxI9LeVF7rkAq5M2K1XGNiqDWY=
+go.opentelemetry.io/collector/receiver/xreceiver v0.142.0 h1:hrKh3IqPcgQHfbdcphsT0Rf4W3rCLOI+DAGyYbk74Q8=
+go.opentelemetry.io/collector/receiver/xreceiver v0.142.0/go.mod h1:8UWwgjW0ksDu29+oQEBSnSIstN263IhJbpwaEUiDuJw=
 go.opentelemetry.io/collector/semconv v0.128.1-0.20250610090210-188191247685 h1:XCN7qkZRNzRYfn6chsMZkbFZxoFcW6fZIsZs2aCzcbc=
 go.opentelemetry.io/collector/semconv v0.128.1-0.20250610090210-188191247685/go.mod h1:OPXer4l43X23cnjLXIZnRj/qQOjSuq4TgBLI76P9hns=
-go.opentelemetry.io/collector/service v0.141.0 h1:O44J7WXD+UbElR/KdadGJJFQfH1gGUH8ewJUrelxcQQ=
-go.opentelemetry.io/collector/service v0.141.0/go.mod h1:/Vnq/GIgiDk2TcDrNf1d6ZndLY6Ef/64sjwU5Xg7ry0=
-go.opentelemetry.io/collector/service/hostcapabilities v0.141.0 h1:bgyYFO++891ecFpoJQX13UHEqjt2z9RHIiULXkmA98M=
-go.opentelemetry.io/collector/service/hostcapabilities v0.141.0/go.mod h1:RxYWH5w6oAxqzLJ3QkNKuAKEUxS5OhwJMTOuWP2CrH0=
-go.opentelemetry.io/collector/service/telemetry/telemetrytest v0.141.0 h1:fE86k1S++PRslh6nubNWM/DQTkp2GFCY4mmwKqv8128=
-go.opentelemetry.io/collector/service/telemetry/telemetrytest v0.141.0/go.mod h1:yVBEDExr2C00N5D6hzf032I7NkbqSoibrQdvrhB61OM=
+go.opentelemetry.io/collector/service v0.142.0 h1:3p2V3E3v97bmjJB591VkHlZQ+ez/PjGDHDF247jImLo=
+go.opentelemetry.io/collector/service v0.142.0/go.mod h1:n75a5MCGU/xz3iAhM/tZYxAXCIkpWvN7QQftO0f9ulI=
+go.opentelemetry.io/collector/service/hostcapabilities v0.142.0 h1:/l/T3kWNrxy18pV+VfTKIRBw0JwPHiDVH4lPOyKjI78=
+go.opentelemetry.io/collector/service/hostcapabilities v0.142.0/go.mod h1:1Rm5SgOnwBKllAWBlPVcEDCBEtiHe7dv2Pfr4/HaiWo=
+go.opentelemetry.io/collector/service/telemetry/telemetrytest v0.142.0 h1:vl9QQPsPZVYzIn7sRjqNpScP+hEOAaoX+C3iGF7CkOM=
+go.opentelemetry.io/collector/service/telemetry/telemetrytest v0.142.0/go.mod h1:Sf8FQY4ig/+jIC9eGKOMcw97yCB2rR0aUGgchWM4tIo=
 go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 h1:aBKdhLVieqvwWe9A79UHI/0vgp2t/s2euY8X59pGRlw=
 go.opentelemetry.io/contrib/bridges/otelzap v0.13.0/go.mod h1:SYqtxLQE7iINgh6WFuVi2AI70148B8EI35DSk0Wr8m4=
 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.64.0 h1:RN3ifU8y4prNWeEnQp2kRRHz8UwonAEYZl8tUzHEXAk=
@@ -883,8 +887,8 @@ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 h1:wm/Q0GAAykXv83
 go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0/go.mod h1:ra3Pa40+oKjvYh+ZD3EdxFZZB0xdMfuileHAm4nNN7w=
 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.39.0 h1:8UPA4IbVZxpsD76ihGOQiFml99GPAEZLohDXvqHdi6U=
 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.39.0/go.mod h1:MZ1T/+51uIVKlRzGw1Fo46KEWThjlCBZKl2LzY5nv4g=
-go.opentelemetry.io/otel/log v0.14.0 h1:2rzJ+pOAZ8qmZ3DDHg73NEKzSZkhkGIua9gXtxNGgrM=
-go.opentelemetry.io/otel/log v0.14.0/go.mod h1:5jRG92fEAgx0SU/vFPxmJvhIuDU9E1SUnEQrMlJpOno=
+go.opentelemetry.io/otel/log v0.15.0 h1:0VqVnc3MgyYd7QqNVIldC3dsLFKgazR6P3P3+ypkyDY=
+go.opentelemetry.io/otel/log v0.15.0/go.mod h1:9c/G1zbyZfgu1HmQD7Qj84QMmwTp2QCQsZH1aeoWDE4=
 go.opentelemetry.io/otel/log/logtest v0.14.0 h1:BGTqNeluJDK2uIHAY8lRqxjVAYfqgcaTbVk1n3MWe5A=
 go.opentelemetry.io/otel/log/logtest v0.14.0/go.mod h1:IuguGt8XVP4XA4d2oEEDMVDBBCesMg8/tSGWDjuKfoA=
 go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0=
@@ -936,8 +940,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY
 golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
 golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
 golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
-golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
-golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
+golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
+golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
 golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -976,8 +980,8 @@ golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
 golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
 golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
 golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
-golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
+golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
+golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
 golang.org/x/oauth2 v0.32.0 h1:jsCblLleRMDrxMN29H3z/k1KliIvpLgCkE6R8FXXNgY=
 golang.org/x/oauth2 v0.32.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -990,8 +994,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
 golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
-golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
+golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1022,8 +1026,8 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
 golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
 golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
 golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
-golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
-golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q=
+golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -1035,8 +1039,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
 golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
-golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
+golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
+golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
 golang.org/x/time v0.13.0 h1:eUlYslOIt32DgYD6utsuUeHs4d7AsEYLuIAdg7FlYgI=
 golang.org/x/time v0.13.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
 golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -1062,8 +1066,8 @@ gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
 gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
 gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
 gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
-google.golang.org/api v0.250.0 h1:qvkwrf/raASj82UegU2RSDGWi/89WkLckn4LuO4lVXM=
-google.golang.org/api v0.250.0/go.mod h1:Y9Uup8bDLJJtMzJyQnu+rLRJLA0wn+wTtc6vTlOvfXo=
+google.golang.org/api v0.252.0 h1:xfKJeAJaMwb8OC9fesr369rjciQ704AjU/psjkKURSI=
+google.golang.org/api v0.252.0/go.mod h1:dnHOv81x5RAmumZ7BWLShB/u7JZNeyalImxHmtTHxqw=
 google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls=
 google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww=
diff --git a/internal/jtracer/jtracer.go b/internal/jtracer/jtracer.go
index 46a4b8d9..73fb277c 100644
--- a/internal/jtracer/jtracer.go
+++ b/internal/jtracer/jtracer.go
@@ -16,44 +16,26 @@ import (
 	"go.opentelemetry.io/otel/sdk/resource"
 	sdktrace "go.opentelemetry.io/otel/sdk/trace"
 	"go.opentelemetry.io/otel/trace"
-	nooptrace "go.opentelemetry.io/otel/trace/noop"
 
 	"github.com/jaegertracing/jaeger/internal/telemetry/otelsemconv"
 )
 
-type JTracer struct {
-	OTEL   trace.TracerProvider
-	closer func(ctx context.Context) error
-}
-
 var once sync.Once
 
-func New(serviceName string) (*JTracer, error) {
-	return newHelper(serviceName, initOTEL)
+func NewProvider(ctx context.Context, serviceName string) (trace.TracerProvider, func(ctx context.Context) error, error) {
+	return newProviderHelper(ctx, serviceName, initOTEL)
 }
 
-func newHelper(
+func newProviderHelper(
+	ctx context.Context,
 	serviceName string,
 	tracerProvider func(ctx context.Context, svc string) (*sdktrace.TracerProvider, error),
-) (*JTracer, error) {
-	ctx := context.Background()
+) (trace.TracerProvider, func(ctx context.Context) error, error) {
 	provider, err := tracerProvider(ctx, serviceName)
 	if err != nil {
-		return nil, err
-	}
-
-	return &JTracer{
-		OTEL: provider,
-		closer: func(ctx context.Context) error {
-			return provider.Shutdown(ctx)
-		},
-	}, nil
-}
-
-func NoOp() *JTracer {
-	return &JTracer{
-		OTEL: nooptrace.NewTracerProvider(),
+		return nil, nil, err
 	}
+	return provider, provider.Shutdown, nil
 }
 
 // initOTEL initializes OTEL Tracer
@@ -125,11 +107,3 @@ func otelExporter(ctx context.Context) (sdktrace.SpanExporter, error) {
 	)
 	return otlptrace.New(ctx, client)
 }
-
-// Shutdown the tracerProvider to clean up resources
-func (jt *JTracer) Close(ctx context.Context) error {
-	if jt.closer != nil {
-		return jt.closer(ctx)
-	}
-	return nil
-}
diff --git a/internal/storage/v1/cassandra/spanstore/dbmodel/model.go b/internal/storage/v1/cassandra/spanstore/dbmodel/model.go
index 127444d5..00df2166 100644
--- a/internal/storage/v1/cassandra/spanstore/dbmodel/model.go
+++ b/internal/storage/v1/cassandra/spanstore/dbmodel/model.go
@@ -7,6 +7,10 @@ package dbmodel
 import (
 	"bytes"
 	"encoding/binary"
+	"encoding/hex"
+	"sort"
+	"strconv"
+	"strings"
 
 	"github.com/jaegertracing/jaeger-idl/model/v1"
 )
@@ -53,6 +57,96 @@ type KeyValue struct {
 	ValueBinary  []byte  `cql:"value_binary"`
 }
 
+func (t *KeyValue) compareValues(that *KeyValue) int {
+	switch t.ValueType {
+	case stringType:
+		return strings.Compare(t.ValueString, that.ValueString)
+	case boolType:
+		if t.ValueBool != that.ValueBool {
+			if !t.ValueBool {
+				return -1
+			}
+			return 1
+		}
+	case int64Type:
+		return int(t.ValueInt64 - that.ValueInt64)
+	case float64Type:
+		if t.ValueFloat64 != that.ValueFloat64 {
+			if t.ValueFloat64 < that.ValueFloat64 {
+				return -1
+			}
+			return 1
+		}
+	case binaryType:
+		return bytes.Compare(t.ValueBinary, that.ValueBinary)
+	default:
+		return -1 // theoretical case, not stating them equal but placing the base pointer before other
+	}
+	return 0
+}
+
+func (t *KeyValue) Compare(that any) int {
+	if that == nil {
+		if t == nil {
+			return 0
+		}
+		return 1
+	}
+	that1, ok := that.(*KeyValue)
+	if !ok {
+		that2, ok := that.(KeyValue)
+		if !ok {
+			return 1
+		}
+		that1 = &that2
+	}
+	if that1 == nil {
+		if t == nil {
+			return 0
+		}
+		return 1
+	} else if t == nil {
+		return -1
+	}
+	if cmp := strings.Compare(t.Key, that1.Key); cmp != 0 {
+		return cmp
+	}
+	if cmp := strings.Compare(t.ValueType, that1.ValueType); cmp != 0 {
+		return cmp
+	}
+	return t.compareValues(that1)
+}
+
+func (t *KeyValue) Equal(that any) bool {
+	return t.Compare(that) == 0
+}
+
+func (t *KeyValue) AsString() string {
+	switch t.ValueType {
+	case stringType:
+		return t.ValueString
+	case boolType:
+		if t.ValueBool {
+			return "true"
+		}
+		return "false"
+	case int64Type:
+		return strconv.FormatInt(t.ValueInt64, 10)
+	case float64Type:
+		return strconv.FormatFloat(t.ValueFloat64, 'g', 10, 64)
+	case binaryType:
+		return hex.EncodeToString(t.ValueBinary)
+	default:
+		return "unknown type " + t.ValueType
+	}
+}
+
+func SortKVs(kvs []KeyValue) {
+	sort.Slice(kvs, func(i, j int) bool {
+		return kvs[i].Compare(kvs[j]) < 0
+	})
+}
+
 // Log is the UDT representation of a Jaeger Log.
 type Log struct {
 	Timestamp int64      `cql:"ts"` // microseconds since epoch
diff --git a/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter.go b/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter.go
index 31687515..31a5e060 100644
--- a/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter.go
+++ b/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter.go
@@ -4,15 +4,11 @@
 
 package dbmodel
 
-import (
-	"github.com/jaegertracing/jaeger-idl/model/v1"
-)
-
 // TagFilter filters out any tags that should not be indexed.
 type TagFilter interface {
-	FilterProcessTags(span *model.Span, processTags model.KeyValues) model.KeyValues
-	FilterTags(span *model.Span, tags model.KeyValues) model.KeyValues
-	FilterLogFields(span *model.Span, logFields model.KeyValues) model.KeyValues
+	FilterProcessTags(span *Span, processTags []KeyValue) []KeyValue
+	FilterTags(span *Span, tags []KeyValue) []KeyValue
+	FilterLogFields(span *Span, logFields []KeyValue) []KeyValue
 }
 
 // ChainedTagFilter applies multiple tag filters in serial fashion.
@@ -24,7 +20,7 @@ func NewChainedTagFilter(filters ...TagFilter) ChainedTagFilter {
 }
 
 // FilterProcessTags calls each FilterProcessTags.
-func (tf ChainedTagFilter) FilterProcessTags(span *model.Span, processTags model.KeyValues) model.KeyValues {
+func (tf ChainedTagFilter) FilterProcessTags(span *Span, processTags []KeyValue) []KeyValue {
 	for _, f := range tf {
 		processTags = f.FilterProcessTags(span, processTags)
 	}
@@ -32,7 +28,7 @@ func (tf ChainedTagFilter) FilterProcessTags(span *model.Span, processTags model
 }
 
 // FilterTags calls each FilterTags
-func (tf ChainedTagFilter) FilterTags(span *model.Span, tags model.KeyValues) model.KeyValues {
+func (tf ChainedTagFilter) FilterTags(span *Span, tags []KeyValue) []KeyValue {
 	for _, f := range tf {
 		tags = f.FilterTags(span, tags)
 	}
@@ -40,7 +36,7 @@ func (tf ChainedTagFilter) FilterTags(span *model.Span, tags model.KeyValues) mo
 }
 
 // FilterLogFields calls each FilterLogFields
-func (tf ChainedTagFilter) FilterLogFields(span *model.Span, logFields model.KeyValues) model.KeyValues {
+func (tf ChainedTagFilter) FilterLogFields(span *Span, logFields []KeyValue) []KeyValue {
 	for _, f := range tf {
 		logFields = f.FilterLogFields(span, logFields)
 	}
@@ -52,14 +48,14 @@ var DefaultTagFilter = tagFilterImpl{}
 
 type tagFilterImpl struct{}
 
-func (tagFilterImpl) FilterProcessTags(_ *model.Span, processTags model.KeyValues) model.KeyValues {
+func (tagFilterImpl) FilterProcessTags(_ *Span, processTags []KeyValue) []KeyValue {
 	return processTags
 }
 
-func (tagFilterImpl) FilterTags(_ *model.Span, tags model.KeyValues) model.KeyValues {
+func (tagFilterImpl) FilterTags(_ *Span, tags []KeyValue) []KeyValue {
 	return tags
 }
 
-func (tagFilterImpl) FilterLogFields(_ *model.Span, logFields model.KeyValues) model.KeyValues {
+func (tagFilterImpl) FilterLogFields(_ *Span, logFields []KeyValue) []KeyValue {
 	return logFields
 }
diff --git a/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_drop_all.go b/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_drop_all.go
index df192004..e3ac4782 100644
--- a/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_drop_all.go
+++ b/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_drop_all.go
@@ -3,10 +3,6 @@
 
 package dbmodel
 
-import (
-	"github.com/jaegertracing/jaeger-idl/model/v1"
-)
-
 // TagFilterDropAll filters all fields of a given type.
 type TagFilterDropAll struct {
 	dropTags        bool
@@ -24,25 +20,25 @@ func NewTagFilterDropAll(dropTags bool, dropProcessTags bool, dropLogs bool) *Ta
 }
 
 // FilterProcessTags implements TagFilter
-func (f *TagFilterDropAll) FilterProcessTags(_ *model.Span, processTags model.KeyValues) model.KeyValues {
+func (f *TagFilterDropAll) FilterProcessTags(_ *Span, processTags []KeyValue) []KeyValue {
 	if f.dropProcessTags {
-		return model.KeyValues{}
+		return []KeyValue{}
 	}
 	return processTags
 }
 
 // FilterTags implements TagFilter
-func (f *TagFilterDropAll) FilterTags(_ *model.Span, tags model.KeyValues) model.KeyValues {
+func (f *TagFilterDropAll) FilterTags(_ *Span, tags []KeyValue) []KeyValue {
 	if f.dropTags {
-		return model.KeyValues{}
+		return []KeyValue{}
 	}
 	return tags
 }
 
 // FilterLogFields implements TagFilter
-func (f *TagFilterDropAll) FilterLogFields(_ *model.Span, logFields model.KeyValues) model.KeyValues {
+func (f *TagFilterDropAll) FilterLogFields(_ *Span, logFields []KeyValue) []KeyValue {
 	if f.dropLogs {
-		return model.KeyValues{}
+		return []KeyValue{}
 	}
 	return logFields
 }
diff --git a/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_exact_match.go b/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_exact_match.go
index 1752ffd8..8942373b 100644
--- a/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_exact_match.go
+++ b/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_exact_match.go
@@ -3,10 +3,6 @@
 
 package dbmodel
 
-import (
-	"github.com/jaegertracing/jaeger-idl/model/v1"
-)
-
 // ExactMatchTagFilter filters out all tags in its tags slice
 type ExactMatchTagFilter struct {
 	tags        map[string]struct{}
@@ -38,22 +34,22 @@ func NewWhitelistFilter(tags []string) ExactMatchTagFilter {
 }
 
 // FilterProcessTags implements TagFilter
-func (tf ExactMatchTagFilter) FilterProcessTags(_ *model.Span, processTags model.KeyValues) model.KeyValues {
+func (tf ExactMatchTagFilter) FilterProcessTags(_ *Span, processTags []KeyValue) []KeyValue {
 	return tf.filter(processTags)
 }
 
 // FilterTags implements TagFilter
-func (tf ExactMatchTagFilter) FilterTags(_ *model.Span, tags model.KeyValues) model.KeyValues {
+func (tf ExactMatchTagFilter) FilterTags(_ *Span, tags []KeyValue) []KeyValue {
 	return tf.filter(tags)
 }
 
 // FilterLogFields implements TagFilter
-func (tf ExactMatchTagFilter) FilterLogFields(_ *model.Span, logFields model.KeyValues) model.KeyValues {
+func (tf ExactMatchTagFilter) FilterLogFields(_ *Span, logFields []KeyValue) []KeyValue {
 	return tf.filter(logFields)
 }
 
-func (tf ExactMatchTagFilter) filter(tags model.KeyValues) model.KeyValues {
-	var filteredTags model.KeyValues
+func (tf ExactMatchTagFilter) filter(tags []KeyValue) []KeyValue {
+	var filteredTags []KeyValue
 	for _, t := range tags {
 		if _, ok := tf.tags[t.Key]; ok == !tf.dropMatches {
 			filteredTags = append(filteredTags, t)
diff --git a/internal/storage/v1/cassandra/spanstore/dbmodel/unique_tags.go b/internal/storage/v1/cassandra/spanstore/dbmodel/unique_tags.go
index 4b5abb3b..2ab3ddaa 100644
--- a/internal/storage/v1/cassandra/spanstore/dbmodel/unique_tags.go
+++ b/internal/storage/v1/cassandra/spanstore/dbmodel/unique_tags.go
@@ -4,21 +4,17 @@
 
 package dbmodel
 
-import (
-	"github.com/jaegertracing/jaeger-idl/model/v1"
-)
-
 // GetAllUniqueTags creates a list of all unique tags from a set of filtered tags.
-func GetAllUniqueTags(span *model.Span, tagFilter TagFilter) []TagInsertion {
-	allTags := append(model.KeyValues{}, tagFilter.FilterProcessTags(span, span.Process.Tags)...)
+func GetAllUniqueTags(span *Span, tagFilter TagFilter) []TagInsertion {
+	allTags := append([]KeyValue{}, tagFilter.FilterProcessTags(span, span.Process.Tags)...)
 	allTags = append(allTags, tagFilter.FilterTags(span, span.Tags)...)
 	for _, log := range span.Logs {
 		allTags = append(allTags, tagFilter.FilterLogFields(span, log.Fields)...)
 	}
-	allTags.Sort()
+	SortKVs(allTags)
 	uniqueTags := make([]TagInsertion, 0, len(allTags))
 	for i := range allTags {
-		if allTags[i].VType == model.BinaryType {
+		if allTags[i].ValueType == binaryType {
 			continue // do not index binary tags
 		}
 		if i > 0 && allTags[i-1].Equal(&allTags[i]) {
diff --git a/internal/storage/v1/cassandra/spanstore/writer.go b/internal/storage/v1/cassandra/spanstore/writer.go
index 3eb2fc8d..fb2c5208 100644
--- a/internal/storage/v1/cassandra/spanstore/writer.go
+++ b/internal/storage/v1/cassandra/spanstore/writer.go
@@ -194,7 +194,7 @@ func (s *SpanWriter) writeIndexes(span *model.Span, ds *dbmodel.Span) error {
 		return nil // skipping expensive indexing
 	}
 
-	if err := s.indexByTags(span, ds); err != nil {
+	if err := s.indexByTags(ds); err != nil {
 		return s.logError(ds, err, "Failed to index tags", s.logger)
 	}
 
@@ -206,8 +206,8 @@ func (s *SpanWriter) writeIndexes(span *model.Span, ds *dbmodel.Span) error {
 	return nil
 }
 
-func (s *SpanWriter) indexByTags(span *model.Span, ds *dbmodel.Span) error {
-	for _, v := range dbmodel.GetAllUniqueTags(span, s.tagFilter) {
+func (s *SpanWriter) indexByTags(ds *dbmodel.Span) error {
+	for _, v := range dbmodel.GetAllUniqueTags(ds, s.tagFilter) {
 		// we should introduce retries or just ignore failures imo, retrying each individual tag insertion might be better
 		// we should consider bucketing.
 		if s.shouldIndexTag(v) {
diff --git a/internal/storage/v2/memory/tenant.go b/internal/storage/v2/memory/tenant.go
index 0368b881..d4541a22 100644
--- a/internal/storage/v2/memory/tenant.go
+++ b/internal/storage/v2/memory/tenant.go
@@ -223,7 +223,7 @@ func validTrace(td ptrace.Traces, query tracestore.TraceQueryParams) bool {
 		}
 		for _, scopeSpan := range resourceSpan.ScopeSpans().All() {
 			for _, span := range scopeSpan.Spans().All() {
-				if validSpan(resourceSpan.Resource().Attributes(), scopeSpan.Scope().Attributes(), span, query) {
+				if validSpan(resourceSpan.Resource().Attributes(), scopeSpan.Scope(), span, query) {
 					return true
 				}
 			}
@@ -236,18 +236,11 @@ func validResource(resource pcommon.Resource, query tracestore.TraceQueryParams)
 	return query.ServiceName == "" || query.ServiceName == getServiceNameFromResource(resource)
 }
 
-func validSpan(resourceAttributes, scopeAttributes pcommon.Map, span ptrace.Span, query tracestore.TraceQueryParams) bool {
-	if errAttribute, ok := query.Attributes.Get(errorAttribute); ok {
-		if errAttribute.Bool() && span.Status().Code() != ptrace.StatusCodeError {
-			return false
-		}
-		if !errAttribute.Bool() && span.Status().Code() != ptrace.StatusCodeOk {
-			return false
-		}
-	}
+func validSpan(resourceAttributes pcommon.Map, scope pcommon.InstrumentationScope, span ptrace.Span, query tracestore.TraceQueryParams) bool {
 	if query.OperationName != "" && query.OperationName != span.Name() {
 		return false
 	}
+
 	startTime := span.StartTimestamp().AsTime()
 	if !query.StartTimeMin.IsZero() && startTime.Before(query.StartTimeMin) {
 		return false
@@ -262,11 +255,64 @@ func validSpan(resourceAttributes, scopeAttributes pcommon.Map, span ptrace.Span
 	if query.DurationMax != 0 && duration > query.DurationMax {
 		return false
 	}
+
+	if errAttribute, ok := query.Attributes.Get(errorAttribute); ok {
+		if errAttribute.Bool() && span.Status().Code() != ptrace.StatusCodeError {
+			return false
+		}
+		if !errAttribute.Bool() && span.Status().Code() != ptrace.StatusCodeOk {
+			return false
+		}
+	}
+
+	if statusAttr, ok := query.Attributes.Get("span.status"); ok {
+		expectedStatus := spanStatusFromString(statusAttr.AsString())
+		if expectedStatus != span.Status().Code() {
+			return false
+		}
+	}
+
+	if kindAttr, ok := query.Attributes.Get("span.kind"); ok {
+		expectedKind := spanKindFromString(kindAttr.AsString())
+		if expectedKind != span.Kind() {
+			return false
+		}
+	}
+
+	if scopeNameAttr, ok := query.Attributes.Get("scope.name"); ok {
+		if scopeNameAttr.AsString() != scope.Name() {
+			return false
+		}
+	}
+
+	if scopeVersionAttr, ok := query.Attributes.Get("scope.version"); ok {
+		if scopeVersionAttr.AsString() != scope.Version() {
+			return false
+		}
+	}
+
 	for key, val := range query.Attributes.All() {
-		if key != errorAttribute && !findKeyValInTrace(key, val, resourceAttributes, scopeAttributes, span) {
+		if key == errorAttribute ||
+			key == "span.status" ||
+			key == "span.kind" ||
+			key == "scope.name" ||
+			key == "scope.version" {
+			continue
+		}
+
+		if strings.HasPrefix(key, "resource.") {
+			resourceKey := strings.TrimPrefix(key, "resource.")
+			if !matchAttributes(resourceKey, val, resourceAttributes) {
+				return false
+			}
+			continue
+		}
+
+		if !findKeyValInTrace(key, val, resourceAttributes, scope.Attributes(), span) {
 			return false
 		}
 	}
+
 	return true
 }
 
@@ -296,3 +342,31 @@ func fromOTELSpanKind(kind ptrace.SpanKind) string {
 	}
 	return strings.ToLower(kind.String())
 }
+
+func spanStatusFromString(statusStr string) ptrace.StatusCode {
+	switch strings.ToUpper(statusStr) {
+	case "OK":
+		return ptrace.StatusCodeOk
+	case "ERROR":
+		return ptrace.StatusCodeError
+	default:
+		return ptrace.StatusCodeUnset
+	}
+}
+
+func spanKindFromString(kindStr string) ptrace.SpanKind {
+	switch strings.ToUpper(kindStr) {
+	case "CLIENT":
+		return ptrace.SpanKindClient
+	case "SERVER":
+		return ptrace.SpanKindServer
+	case "PRODUCER":
+		return ptrace.SpanKindProducer
+	case "CONSUMER":
+		return ptrace.SpanKindConsumer
+	case "INTERNAL":
+		return ptrace.SpanKindInternal
+	default:
+		return ptrace.SpanKindUnspecified
+	}
+}



Test patch:
diff --git a/cmd/jaeger/internal/extension/remotesampling/extension_test.go b/cmd/jaeger/internal/extension/remotesampling/extension_test.go
index 983d28c1..903928b1 100644
--- a/cmd/jaeger/internal/extension/remotesampling/extension_test.go
+++ b/cmd/jaeger/internal/extension/remotesampling/extension_test.go
@@ -34,7 +34,13 @@ import (
 	"github.com/jaegertracing/jaeger-idl/proto-gen/api_v2"
 	"github.com/jaegertracing/jaeger/cmd/internal/storageconfig"
 	"github.com/jaegertracing/jaeger/cmd/jaeger/internal/extension/jaegerstorage"
+	"github.com/jaegertracing/jaeger/internal/distributedlock"
 	"github.com/jaegertracing/jaeger/internal/sampling/samplingstrategy/adaptive"
+	"github.com/jaegertracing/jaeger/internal/storage/v1"
+	"github.com/jaegertracing/jaeger/internal/storage/v1/api/samplingstore"
+	samplingstoremodel "github.com/jaegertracing/jaeger/internal/storage/v1/api/samplingstore/model"
+	"github.com/jaegertracing/jaeger/internal/storage/v2/api/tracestore"
+	tracestoremocks "github.com/jaegertracing/jaeger/internal/storage/v2/api/tracestore/mocks"
 	"github.com/jaegertracing/jaeger/internal/storage/v2/memory"
 )
 
@@ -70,6 +76,26 @@ func makeStorageExtension(t *testing.T, memstoreName string) component.Host {
 	return host
 }
 
+func makeStorageExtensionWithBadSamplingStore(storageName string) component.Host {
+	ext := &fakeStorageExtensionForTest{
+		storageName: storageName,
+		failOn:      "CreateSamplingStore",
+	}
+	host := storagetest.NewStorageHost()
+	host.WithExtension(jaegerstorage.ID, ext)
+	return host
+}
+
+func makeStorageExtensionWithBadLock(storageName string) component.Host {
+	ext := &fakeStorageExtensionForTest{
+		storageName: storageName,
+		failOn:      "CreateLock",
+	}
+	host := storagetest.NewStorageHost()
+	host.WithExtension(jaegerstorage.ID, ext)
+	return host
+}
+
 func makeRemoteSamplingExtension(t *testing.T, cfg component.Config) component.Host {
 	extensionFactory := NewFactory()
 	samplingExtension, err := extensionFactory.Create(
@@ -217,6 +243,45 @@ func TestStartAdaptiveStrategyProviderErrors(t *testing.T) {
 	require.ErrorContains(t, err, "failed to obtain sampling store factory")
 }
 
+func TestStartAdaptiveStrategyProviderCreateStoreError(t *testing.T) {
+	// storage extension has the requested store name but its factory fails on CreateSamplingStore
+	storageHost := makeStorageExtensionWithBadSamplingStore("failstore")
+
+	ext := &rsExtension{
+		cfg: &Config{
+			Adaptive: &AdaptiveConfig{
+				SamplingStore: "failstore",
+				Options: adaptive.Options{
+					AggregationBuckets: 10,
+				},
+			},
+		},
+		telemetry: componenttest.NewNopTelemetrySettings(),
+	}
+	err := ext.startAdaptiveStrategyProvider(storageHost)
+	require.Error(t, err)
+	require.Contains(t, err.Error(), "failed to create the sampling store")
+}
+
+func TestStartAdaptiveStrategyProviderCreateLockError(t *testing.T) {
+	storageHost := makeStorageExtensionWithBadLock("lockerror")
+
+	ext := &rsExtension{
+		cfg: &Config{
+			Adaptive: &AdaptiveConfig{
+				SamplingStore: "lockerror",
+				Options: adaptive.Options{
+					AggregationBuckets: 10,
+				},
+			},
+		},
+		telemetry: componenttest.NewNopTelemetrySettings(),
+	}
+	err := ext.startAdaptiveStrategyProvider(storageHost)
+	require.Error(t, err)
+	require.Contains(t, err.Error(), "failed to create the distributed lock")
+}
+
 func TestGetAdaptiveSamplingComponents(t *testing.T) {
 	// Success case
 	host := makeRemoteSamplingExtension(t, &Config{
@@ -244,6 +309,79 @@ type wrongExtension struct{}
 func (*wrongExtension) Start(context.Context, component.Host) error { return nil }
 func (*wrongExtension) Shutdown(context.Context) error              { return nil }
 
+type fakeStorageExtensionForTest struct {
+	storageName string
+	failOn      string
+}
+
+func (*fakeStorageExtensionForTest) Start(context.Context, component.Host) error { return nil }
+func (*fakeStorageExtensionForTest) Shutdown(context.Context) error              { return nil }
+
+func (f *fakeStorageExtensionForTest) TraceStorageFactory(name string) (tracestore.Factory, bool) {
+	if name == f.storageName {
+		return &fakeSamplingStoreFactory{failOn: f.failOn}, true
+	}
+	return nil, false
+}
+
+func (*fakeStorageExtensionForTest) MetricStorageFactory(string) (storage.MetricStoreFactory, bool) {
+	return nil, false
+}
+
+type fakeSamplingStoreFactory struct {
+	failOn string
+}
+
+func (*fakeSamplingStoreFactory) CreateTraceReader() (tracestore.Reader, error) {
+	return &tracestoremocks.Reader{}, nil
+}
+
+func (*fakeSamplingStoreFactory) CreateTraceWriter() (tracestore.Writer, error) {
+	return &tracestoremocks.Writer{}, nil
+}
+
+func (f *fakeSamplingStoreFactory) CreateSamplingStore(int) (samplingstore.Store, error) {
+	if f.failOn == "CreateSamplingStore" {
+		return nil, errors.New("mock error creating sampling store")
+	}
+	return &samplingStoreMock{}, nil
+}
+
+func (f *fakeSamplingStoreFactory) CreateLock() (distributedlock.Lock, error) {
+	if f.failOn == "CreateLock" {
+		return nil, errors.New("mock error creating lock")
+	}
+	return &lockMock{}, nil
+}
+
+type samplingStoreMock struct{}
+
+func (*samplingStoreMock) GetThroughput(time.Time, time.Time) ([]*samplingstoremodel.Throughput, error) {
+	return nil, nil
+}
+
+func (*samplingStoreMock) GetLatestProbabilities() (samplingstoremodel.ServiceOperationProbabilities, error) {
+	return nil, nil
+}
+
+func (*samplingStoreMock) InsertThroughput([]*samplingstoremodel.Throughput) error {
+	return nil
+}
+
+func (*samplingStoreMock) InsertProbabilitiesAndQPS(string, samplingstoremodel.ServiceOperationProbabilities, samplingstoremodel.ServiceOperationQPS) error {
+	return nil
+}
+
+type lockMock struct{}
+
+func (*lockMock) Acquire(string, time.Duration) (bool, error) {
+	return true, nil
+}
+
+func (*lockMock) Forfeit(string) (bool, error) {
+	return true, nil
+}
+
 func TestGetAdaptiveSamplingComponentsErrors(t *testing.T) {
 	host := makeRemoteSamplingExtension(t, &Config{})
 	_, err := GetAdaptiveSamplingComponents(host)
diff --git a/cmd/jaeger/internal/extension/remotestorage/server.go b/cmd/jaeger/internal/extension/remotestorage/server.go
index 8a089b0c..d650e126 100644
--- a/cmd/jaeger/internal/extension/remotestorage/server.go
+++ b/cmd/jaeger/internal/extension/remotestorage/server.go
@@ -41,22 +41,23 @@ func (s *server) Start(ctx context.Context, host component.Host) error {
 	// TODO OTel-collector does not initialize the tracer currently
 	// https://github.com/open-telemetry/opentelemetry-collector/issues/7532
 	//nolint
-	tracerProvider, err := jtracer.New("jaeger")
+	tracerProvider, tracerCloser, err := jtracer.NewProvider(ctx, "jaeger")
 	if err != nil {
 		return fmt.Errorf("could not initialize a tracer: %w", err)
 	}
-	// make sure to close the tracer if subsequent code exists with error
+	// Store closer for tracer if this function exists successfully,
+	// otherwise call the closer right away.
 	success := false
 	defer func(ctx context.Context) {
 		if success {
-			s.closeTracer = tracerProvider.Close
+			s.closeTracer = tracerCloser
 		} else {
-			tracerProvider.Close(ctx)
+			tracerCloser(ctx)
 		}
 	}(ctx)
 
 	telset := telemetry.FromOtelComponent(s.telset, host)
-	telset.TracerProvider = tracerProvider.OTEL
+	telset.TracerProvider = tracerProvider
 	telset.Metrics = telset.Metrics.
 		Namespace(metrics.NSOptions{Name: "jaeger"}).
 		Namespace(metrics.NSOptions{Name: "remote_storage"})
diff --git a/cmd/query/app/apiv3/http_gateway_test.go b/cmd/query/app/apiv3/http_gateway_test.go
index a73c91c6..d8ae9aa1 100644
--- a/cmd/query/app/apiv3/http_gateway_test.go
+++ b/cmd/query/app/apiv3/http_gateway_test.go
@@ -19,10 +19,10 @@ import (
 	"github.com/stretchr/testify/require"
 	"go.opentelemetry.io/collector/pdata/pcommon"
 	"go.opentelemetry.io/collector/pdata/ptrace"
+	nooptrace "go.opentelemetry.io/otel/trace/noop"
 	"go.uber.org/zap"
 
 	"github.com/jaegertracing/jaeger/cmd/query/app/querysvc/v2/querysvc"
-	"github.com/jaegertracing/jaeger/internal/jtracer"
 	"github.com/jaegertracing/jaeger/internal/storage/v1/api/spanstore"
 	dependencystoremocks "github.com/jaegertracing/jaeger/internal/storage/v2/api/depstore/mocks"
 	"github.com/jaegertracing/jaeger/internal/storage/v2/api/tracestore"
@@ -46,7 +46,7 @@ func setupHTTPGatewayNoServer(
 	hgw := &HTTPGateway{
 		QueryService: q,
 		Logger:       zap.NewNop(),
-		Tracer:       jtracer.NoOp().OTEL,
+		Tracer:       nooptrace.NewTracerProvider(),
 	}
 
 	gw.router = &mux.Router{}
diff --git a/cmd/query/app/grpc_handler_test.go b/cmd/query/app/grpc_handler_test.go
index 23676225..66de3ae6 100644
--- a/cmd/query/app/grpc_handler_test.go
+++ b/cmd/query/app/grpc_handler_test.go
@@ -24,7 +24,6 @@ import (
 	"github.com/jaegertracing/jaeger-idl/model/v1"
 	"github.com/jaegertracing/jaeger-idl/proto-gen/api_v2"
 	"github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
-	"github.com/jaegertracing/jaeger/internal/jtracer"
 	"github.com/jaegertracing/jaeger/internal/storage/v1/api/spanstore"
 	spanstoremocks "github.com/jaegertracing/jaeger/internal/storage/v1/api/spanstore/mocks"
 	"github.com/jaegertracing/jaeger/internal/storage/v2/api/depstore"
@@ -129,7 +128,7 @@ type grpcClient struct {
 	conn *grpc.ClientConn
 }
 
-func newGRPCServer(t *testing.T, q *querysvc.QueryService, logger *zap.Logger, tracer *jtracer.JTracer, tenancyMgr *tenancy.Manager) (*grpc.Server, net.Addr) {
+func newGRPCServer(t *testing.T, q *querysvc.QueryService, logger *zap.Logger, tenancyMgr *tenancy.Manager) (*grpc.Server, net.Addr) {
 	lis, _ := net.Listen("tcp", ":0")
 	var grpcOpts []grpc.ServerOption
 	if tenancyMgr.Enabled {
@@ -141,7 +140,6 @@ func newGRPCServer(t *testing.T, q *querysvc.QueryService, logger *zap.Logger, t
 	grpcServer := grpc.NewServer(grpcOpts...)
 	grpcHandler := NewGRPCHandler(q, GRPCHandlerOptions{
 		Logger: logger,
-		Tracer: tracer,
 		NowFn: func() time.Time {
 			return now
 		},
@@ -629,10 +627,7 @@ func initializeTenantedTestServerGRPC(t *testing.T, tm *tenancy.Manager) *grpcSe
 			ArchiveSpanWriter: archiveSpanWriter,
 		})
 
-	logger := zap.NewNop()
-	tracer := jtracer.NoOp()
-
-	server, addr := newGRPCServer(t, q, logger, tracer, tm)
+	server, addr := newGRPCServer(t, q, zap.NewNop(), tm)
 
 	return &grpcServer{
 		server:            server,
@@ -881,6 +876,5 @@ func TestNewGRPCHandlerWithEmptyOptions(t *testing.T) {
 	handler := NewGRPCHandler(q, GRPCHandlerOptions{})
 
 	assert.NotNil(t, handler.logger)
-	assert.NotNil(t, handler.tracer)
 	assert.NotNil(t, handler.nowFn)
 }
diff --git a/cmd/query/app/http_handler_test.go b/cmd/query/app/http_handler_test.go
index 15138a07..98fe500e 100644
--- a/cmd/query/app/http_handler_test.go
+++ b/cmd/query/app/http_handler_test.go
@@ -34,7 +34,6 @@ import (
 	deepdependencies "github.com/jaegertracing/jaeger/cmd/query/app/ddg"
 	"github.com/jaegertracing/jaeger/cmd/query/app/qualitymetrics"
 	"github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
-	"github.com/jaegertracing/jaeger/internal/jtracer"
 	"github.com/jaegertracing/jaeger/internal/proto-gen/api_v2/metrics"
 	"github.com/jaegertracing/jaeger/internal/storage/metricstore/disabled"
 	metricsmocks "github.com/jaegertracing/jaeger/internal/storage/v1/api/metricstore/mocks"
@@ -335,10 +334,11 @@ func TestGetTrace(t *testing.T) {
 				sdktrace.WithSyncer(exporter),
 				sdktrace.WithSampler(sdktrace.AlwaysSample()),
 			)
-			jTracer := jtracer.JTracer{OTEL: tracerProvider}
-			defer tracerProvider.Shutdown(context.Background())
+			t.Cleanup(func() {
+				require.NoError(t, tracerProvider.Shutdown(context.Background()))
+			})
 
-			ts := initializeTestServer(t, HandlerOptions.Tracer(jTracer.OTEL))
+			ts := initializeTestServer(t, HandlerOptions.Tracer(tracerProvider))
 
 			ts.spanReader.On("GetTrace", mock.AnythingOfType("*context.valueCtx"), spanstore.GetTraceParameters{TraceID: model.NewTraceID(0, 0x123456abc)}).
 				Return(makeMockTrace(t), nil).Once()
diff --git a/cmd/query/app/server_test.go b/cmd/query/app/server_test.go
index 7650534c..bfd52652 100644
--- a/cmd/query/app/server_test.go
+++ b/cmd/query/app/server_test.go
@@ -21,8 +21,10 @@ import (
 	"go.opentelemetry.io/collector/config/confignet"
 	"go.opentelemetry.io/collector/config/configoptional"
 	"go.opentelemetry.io/collector/config/configtls"
-	sdktrace "go.opentelemetry.io/otel/sdk/trace"
+	tracesdk "go.opentelemetry.io/otel/sdk/trace"
 	"go.opentelemetry.io/otel/sdk/trace/tracetest"
+	traceapi "go.opentelemetry.io/otel/trace"
+	nooptrace "go.opentelemetry.io/otel/trace/noop"
 	"go.uber.org/zap"
 	"go.uber.org/zap/zaptest"
 	"go.uber.org/zap/zaptest/observer"
@@ -37,7 +39,6 @@ import (
 	v2querysvc "github.com/jaegertracing/jaeger/cmd/query/app/querysvc/v2/querysvc"
 	"github.com/jaegertracing/jaeger/internal/grpctest"
 	"github.com/jaegertracing/jaeger/internal/healthcheck"
-	"github.com/jaegertracing/jaeger/internal/jtracer"
 	"github.com/jaegertracing/jaeger/internal/storage/v1/api/spanstore"
 	spanstoremocks "github.com/jaegertracing/jaeger/internal/storage/v1/api/spanstore/mocks"
 	depsmocks "github.com/jaegertracing/jaeger/internal/storage/v2/api/depstore/mocks"
@@ -49,10 +50,10 @@ import (
 
 var testCertKeyLocation = "../../../internal/config/tlscfg/testdata"
 
-func initTelSet(logger *zap.Logger, tracerProvider *jtracer.JTracer, hc *healthcheck.HealthCheck) telemetry.Settings {
+func initTelSet(logger *zap.Logger, tracerProvider traceapi.TracerProvider, hc *healthcheck.HealthCheck) telemetry.Settings {
 	telset := telemetry.NoopSettings()
 	telset.Logger = logger
-	telset.TracerProvider = tracerProvider.OTEL
+	telset.TracerProvider = tracerProvider
 	telset.ReportStatus = telemetry.HCAdapter(hc)
 	return telset
 }
@@ -75,7 +76,7 @@ func TestCreateTLSServerSinglePortError(t *testing.T) {
 			KeyFile:  testCertKeyLocation + "/example-server-key.pem",
 		},
 	}
-	telset := initTelSet(zaptest.NewLogger(t), jtracer.NoOp(), healthcheck.New())
+	telset := initTelSet(zaptest.NewLogger(t), nooptrace.NewTracerProvider(), healthcheck.New())
 	_, err := NewServer(context.Background(), &querysvc.QueryService{}, &v2querysvc.QueryService{}, nil,
 		&QueryOptions{
 			HTTP: confighttp.ServerConfig{Endpoint: ":8080", TLS: configoptional.Some(tlsCfg)},
@@ -93,7 +94,7 @@ func TestCreateTLSGrpcServerError(t *testing.T) {
 			KeyFile:  "invalid/path",
 		},
 	}
-	telset := initTelSet(zaptest.NewLogger(t), jtracer.NoOp(), healthcheck.New())
+	telset := initTelSet(zaptest.NewLogger(t), nooptrace.NewTracerProvider(), healthcheck.New())
 	_, err := NewServer(context.Background(), &querysvc.QueryService{}, &v2querysvc.QueryService{}, nil,
 		&QueryOptions{
 			HTTP: confighttp.ServerConfig{Endpoint: ":8080"},
@@ -111,7 +112,7 @@ func TestStartTLSHttpServerError(t *testing.T) {
 			KeyFile:  "invalid/path",
 		},
 	}
-	telset := initTelSet(zaptest.NewLogger(t), jtracer.NoOp(), healthcheck.New())
+	telset := initTelSet(zaptest.NewLogger(t), nooptrace.NewTracerProvider(), healthcheck.New())
 	s, err := NewServer(context.Background(), &querysvc.QueryService{}, &v2querysvc.QueryService{}, nil,
 		&QueryOptions{
 			HTTP: confighttp.ServerConfig{Endpoint: ":8080", TLS: configoptional.Some(tlsCfg)},
@@ -395,7 +396,7 @@ func TestServerHTTPTLS(t *testing.T) {
 			}
 			flagsSvc := flags.NewService(ports.RemoteStorageAdminHTTP)
 			flagsSvc.Logger = zaptest.NewLogger(t)
-			telset := initTelSet(flagsSvc.Logger, jtracer.NoOp(), flagsSvc.HC())
+			telset := initTelSet(flagsSvc.Logger, nooptrace.NewTracerProvider(), flagsSvc.HC())
 			querySvc := makeQuerySvc()
 			server, err := NewServer(context.Background(), querySvc.qs, &v2querysvc.QueryService{},
 				nil, serverOptions, tenancy.NewManager(&tenancy.Options{}),
@@ -505,7 +506,7 @@ func TestServerGRPCTLS(t *testing.T) {
 			flagsSvc.Logger = zaptest.NewLogger(t)
 
 			querySvc := makeQuerySvc()
-			telset := initTelSet(flagsSvc.Logger, jtracer.NoOp(), flagsSvc.HC())
+			telset := initTelSet(flagsSvc.Logger, nooptrace.NewTracerProvider(), flagsSvc.HC())
 			server, err := NewServer(context.Background(), querySvc.qs, &v2querysvc.QueryService{},
 				nil, serverOptions, tenancy.NewManager(&tenancy.Options{}),
 				telset)
@@ -547,7 +548,7 @@ func TestServerGRPCTLS(t *testing.T) {
 }
 
 func TestServerBadHostPort(t *testing.T) {
-	telset := initTelSet(zaptest.NewLogger(t), jtracer.NoOp(), healthcheck.New())
+	telset := initTelSet(zaptest.NewLogger(t), nooptrace.NewTracerProvider(), healthcheck.New())
 	_, err := NewServer(context.Background(), &querysvc.QueryService{}, &v2querysvc.QueryService{}, nil,
 		&QueryOptions{
 			BearerTokenPropagation: true,
@@ -589,7 +590,7 @@ func TestServerInUseHostPort(t *testing.T) {
 	conn, err := net.Listen("tcp", availableHostPort)
 	require.NoError(t, err)
 	defer func() { require.NoError(t, conn.Close()) }()
-	telset := initTelSet(zaptest.NewLogger(t), jtracer.NoOp(), healthcheck.New())
+	telset := initTelSet(zaptest.NewLogger(t), nooptrace.NewTracerProvider(), healthcheck.New())
 	testCases := []struct {
 		name         string
 		httpHostPort string
@@ -638,7 +639,7 @@ func TestServerGracefulExit(t *testing.T) {
 	httpHostPort := ports.PortToHostPort(ports.QueryHTTP)
 
 	querySvc := makeQuerySvc()
-	telset := initTelSet(flagsSvc.Logger, jtracer.NoOp(), flagsSvc.HC())
+	telset := initTelSet(flagsSvc.Logger, nooptrace.NewTracerProvider(), flagsSvc.HC())
 	server, err := NewServer(context.Background(), querySvc.qs, &v2querysvc.QueryService{}, nil,
 		&QueryOptions{
 			HTTP: confighttp.ServerConfig{
@@ -682,7 +683,7 @@ func TestServerHandlesPortZero(t *testing.T) {
 
 	querySvc := &querysvc.QueryService{}
 	v2QuerySvc := &v2querysvc.QueryService{}
-	telset := initTelSet(flagsSvc.Logger, jtracer.NoOp(), flagsSvc.HC())
+	telset := initTelSet(flagsSvc.Logger, nooptrace.NewTracerProvider(), flagsSvc.HC())
 	server, err := NewServer(context.Background(), querySvc, v2QuerySvc, nil,
 		&QueryOptions{
 			HTTP: confighttp.ServerConfig{
@@ -749,7 +750,7 @@ func TestServerHTTPTenancy(t *testing.T) {
 	tenancyMgr := tenancy.NewManager(&serverOptions.Tenancy)
 	querySvc := makeQuerySvc()
 	querySvc.spanReader.On("FindTraces", mock.Anything, mock.Anything).Return([]*model.Trace{mockTrace}, nil).Once()
-	telset := initTelSet(zaptest.NewLogger(t), jtracer.NoOp(), healthcheck.New())
+	telset := initTelSet(zaptest.NewLogger(t), nooptrace.NewTracerProvider(), healthcheck.New())
 	server, err := NewServer(context.Background(), querySvc.qs, &v2querysvc.QueryService{},
 		nil, serverOptions, tenancyMgr, telset)
 	require.NoError(t, err)
@@ -843,17 +844,18 @@ func TestServerHTTP_TracesRequest(t *testing.T) {
 			}
 
 			exporter := tracetest.NewInMemoryExporter()
-			tracerProvider := sdktrace.NewTracerProvider(
-				sdktrace.WithSyncer(exporter),
-				sdktrace.WithSampler(sdktrace.AlwaysSample()),
+			tracerProvider := tracesdk.NewTracerProvider(
+				tracesdk.WithSyncer(exporter),
+				tracesdk.WithSampler(tracesdk.AlwaysSample()),
 			)
-			tracer := jtracer.JTracer{OTEL: tracerProvider}
-
+			t.Cleanup(func() {
+				require.NoError(t, tracerProvider.Shutdown(context.Background()))
+			})
 			tenancyMgr := tenancy.NewManager(&serverOptions.Tenancy)
 			querySvc := makeQuerySvc()
 			querySvc.spanReader.On("GetTrace", mock.AnythingOfType("*context.valueCtx"), spanstore.GetTraceParameters{TraceID: model.NewTraceID(0, 0x123456abc)}).
 				Return(makeMockTrace(t), nil).Once()
-			telset := initTelSet(zaptest.NewLogger(t), &tracer, healthcheck.New())
+			telset := initTelSet(zaptest.NewLogger(t), tracerProvider, healthcheck.New())
 
 			server, err := NewServer(context.Background(), querySvc.qs, &v2querysvc.QueryService{},
 				nil, serverOptions, tenancyMgr, telset)
diff --git a/internal/jtracer/jtracer_test.go b/internal/jtracer/jtracer_test.go
index 38bc7d60..5c74233d 100644
--- a/internal/jtracer/jtracer_test.go
+++ b/internal/jtracer/jtracer_test.go
@@ -15,24 +15,18 @@ import (
 	"github.com/jaegertracing/jaeger/internal/testutils"
 )
 
-func TestNew(t *testing.T) {
-	jt, err := New("serviceName")
+func TestNewProvider(t *testing.T) {
+	p, c, err := NewProvider(t.Context(), "serviceName")
 	require.NoError(t, err)
-	require.NotNil(t, jt.OTEL, "Expected OTEL not to be nil")
-	require.NotNil(t, jt.closer, "Expected closer not to be nil")
-
-	jt.Close(context.Background())
-}
-
-func TestNoOp(t *testing.T) {
-	jt := NoOp()
-	require.NotNil(t, jt.OTEL)
-	jt.Close(context.Background())
+	require.NotNil(t, p, "Expected OTEL not to be nil")
+	require.NotNil(t, c, "Expected closer not to be nil")
+	c(t.Context())
 }
 
 func TestNewHelperProviderError(t *testing.T) {
 	fakeErr := errors.New("fakeProviderError")
-	_, err := newHelper(
+	_, _, err := newProviderHelper(
+		t.Context(),
 		"svc",
 		func(_ context.Context, _ /* svc */ string) (*sdktrace.TracerProvider, error) {
 			return nil, fakeErr
diff --git a/internal/storage/v1/cassandra/savetracetest/main.go b/internal/storage/v1/cassandra/savetracetest/main.go
index 0ed3d1ef..6051ae5e 100644
--- a/internal/storage/v1/cassandra/savetracetest/main.go
+++ b/internal/storage/v1/cassandra/savetracetest/main.go
@@ -41,15 +41,16 @@ func main() {
 	if err != nil {
 		logger.Fatal("Cannot create Cassandra session", zap.Error(err))
 	}
-	tracer, err := jtracer.New("savetracetest")
+	tracerProvider, tracerCloser, err := jtracer.NewProvider(context.Background(), "savetracetest")
 	if err != nil {
 		logger.Fatal("Failed to initialize tracer", zap.Error(err))
 	}
+	defer tracerCloser(context.Background())
 	spanStore, err := cspanstore.NewSpanWriter(cqlSession, time.Hour*12, noScope, logger)
 	if err != nil {
 		logger.Fatal("Failed to create span writer", zap.Error(err))
 	}
-	spanReader, err := cspanstore.NewSpanReader(cqlSession, noScope, logger, tracer.OTEL.Tracer("cspanstore.SpanReader"))
+	spanReader, err := cspanstore.NewSpanReader(cqlSession, noScope, logger, tracerProvider.Tracer("cspanstore.SpanReader"))
 	if err != nil {
 		logger.Fatal("Failed to create span reader", zap.Error(err))
 	}
diff --git a/internal/storage/v1/cassandra/spanstore/dbmodel/model_test.go b/internal/storage/v1/cassandra/spanstore/dbmodel/model_test.go
index f79ea19b..4bd68e24 100644
--- a/internal/storage/v1/cassandra/spanstore/dbmodel/model_test.go
+++ b/internal/storage/v1/cassandra/spanstore/dbmodel/model_test.go
@@ -5,6 +5,7 @@
 package dbmodel
 
 import (
+	"bytes"
 	"testing"
 
 	"github.com/stretchr/testify/assert"
@@ -21,3 +22,382 @@ func TestTraceIDString(t *testing.T) {
 	id := TraceIDFromDomain(model.NewTraceID(1, 1))
 	assert.Equal(t, "00000000000000010000000000000001", id.String())
 }
+
+func TestKeyValueCompare(t *testing.T) {
+	tests := []struct {
+		name   string
+		kv1    *KeyValue
+		kv2    any
+		result int
+	}{
+		{
+			name:   "BothNil",
+			kv1:    nil,
+			kv2:    nil,
+			result: 0,
+		},
+		{
+			name:   "Nil_vs_Value",
+			kv1:    nil,
+			kv2:    &KeyValue{Key: "k", ValueType: "string"},
+			result: -1,
+		},
+		{
+			name:   "Pointer_vs_Value",
+			kv1:    &KeyValue{Key: "k", ValueType: "string"},
+			kv2:    KeyValue{Key: "m", ValueType: "string"},
+			result: -1,
+		},
+		{
+			name:   "Value_vs_Nil",
+			kv1:    &KeyValue{Key: "k", ValueType: "string"},
+			kv2:    nil,
+			result: 1,
+		},
+		{
+			name:   "TypedNil_vs_Value",
+			kv1:    (*KeyValue)(nil),
+			kv2:    &KeyValue{Key: "k", ValueType: "string"},
+			result: -1,
+		},
+		{
+			name:   "TypedNil_vs_TypedNil",
+			kv1:    (*KeyValue)(nil),
+			kv2:    (*KeyValue)(nil),
+			result: 0,
+		},
+		{
+			name:   "Value_vs_TypedNil",
+			kv1:    &KeyValue{Key: "k", ValueType: "string"},
+			kv2:    (*KeyValue)(nil),
+			result: 1,
+		},
+		{
+			name:   "InvalidType",
+			kv1:    &KeyValue{Key: "k", ValueType: "string"},
+			kv2:    123,
+			result: 1,
+		},
+		{
+			name: "Equal",
+			kv1: &KeyValue{
+				Key:         "k",
+				ValueType:   "string",
+				ValueString: "hello",
+			},
+			kv2: &KeyValue{
+				Key:         "k",
+				ValueType:   "string",
+				ValueString: "hello",
+			},
+			result: 0,
+		},
+		{
+			name:   "KeyMismatch",
+			kv1:    &KeyValue{Key: "k", ValueType: "string"},
+			kv2:    &KeyValue{Key: "a", ValueType: "string"},
+			result: 1,
+		},
+		{
+			name:   "ValueTypeMismatch",
+			kv1:    &KeyValue{Key: "k", ValueType: "z"},
+			kv2:    &KeyValue{Key: "k", ValueType: "a"},
+			result: 1,
+		},
+		{
+			name:   "ValueStringMismatch",
+			kv1:    &KeyValue{Key: "k", ValueType: "string", ValueString: "zzz"},
+			kv2:    &KeyValue{Key: "k", ValueType: "string", ValueString: "aaa"},
+			result: 1,
+		},
+		{
+			name:   "ValueBoolMismatch_After",
+			kv1:    &KeyValue{Key: "k", ValueType: "bool", ValueBool: true},
+			kv2:    &KeyValue{Key: "k", ValueType: "bool", ValueBool: false},
+			result: 1,
+		},
+		{
+			name:   "ValueBoolMismatch_Before",
+			kv1:    &KeyValue{Key: "k", ValueType: "bool", ValueBool: false},
+			kv2:    &KeyValue{Key: "k", ValueType: "bool", ValueBool: true},
+			result: -1,
+		},
+		{
+			name:   "ValueInt64Mismatch_After",
+			kv1:    &KeyValue{Key: "k", ValueType: "int64", ValueInt64: 10},
+			kv2:    &KeyValue{Key: "k", ValueType: "int64", ValueInt64: 5},
+			result: 5,
+		},
+		{
+			name:   "ValueFloat64Mismatch_After",
+			kv1:    &KeyValue{Key: "k", ValueType: "float64", ValueFloat64: 1.5},
+			kv2:    &KeyValue{Key: "k", ValueType: "float64", ValueFloat64: 0.5},
+			result: 1,
+		},
+		{
+			name:   "ValueFloat64Mismatch_Before",
+			kv1:    &KeyValue{Key: "k", ValueType: "float64", ValueFloat64: 0.5},
+			kv2:    &KeyValue{Key: "k", ValueType: "float64", ValueFloat64: 1.5},
+			result: -1,
+		},
+		{
+			name:   "ValueBinaryMismatch",
+			kv1:    &KeyValue{Key: "k", ValueType: "binary", ValueBinary: []byte{1, 2, 3}},
+			kv2:    &KeyValue{Key: "k", ValueType: "binary", ValueBinary: []byte{1, 2, 4}},
+			result: bytes.Compare([]byte{1, 2, 3}, []byte{1, 2, 4}),
+		},
+		{
+			name:   "ValueBinaryEqual",
+			kv1:    &KeyValue{Key: "k", ValueType: "binary", ValueBinary: []byte{1, 2, 3}},
+			kv2:    &KeyValue{Key: "k", ValueType: "binary", ValueBinary: []byte{1, 2, 3}},
+			result: 0,
+		},
+		{
+			name:   "UnknownType",
+			kv1:    &KeyValue{Key: "k", ValueType: "random", ValueString: "hello"},
+			kv2:    &KeyValue{Key: "k", ValueType: "random", ValueString: "hellobig"},
+			result: -1,
+		},
+	}
+	for _, tc := range tests {
+		t.Run(tc.name, func(t *testing.T) {
+			assert.Equal(t, tc.result, tc.kv1.Compare(tc.kv2))
+		})
+	}
+}
+
+func TestKeyValueEqual(t *testing.T) {
+	tests := []struct {
+		name   string
+		kv1    *KeyValue
+		kv2    any
+		result bool
+	}{
+		{
+			name:   "BothNil",
+			kv1:    nil,
+			kv2:    nil,
+			result: true,
+		},
+		{
+			name:   "Nil_vs_Value",
+			kv1:    nil,
+			kv2:    &KeyValue{Key: "k", ValueType: "string"},
+			result: false,
+		},
+		{
+			name:   "Value_vs_Nil",
+			kv1:    &KeyValue{Key: "k", ValueType: "string"},
+			kv2:    nil,
+			result: false,
+		},
+		{
+			name:   "TypedNil_vs_Value",
+			kv1:    (*KeyValue)(nil),
+			kv2:    &KeyValue{Key: "k", ValueType: "string"},
+			result: false,
+		},
+		{
+			name:   "Value_vs_TypedNil",
+			kv1:    &KeyValue{Key: "k", ValueType: "string"},
+			kv2:    (*KeyValue)(nil),
+			result: false,
+		},
+		{
+			name:   "InvalidType",
+			kv1:    &KeyValue{Key: "k", ValueType: "string"},
+			kv2:    123,
+			result: false,
+		},
+		{
+			name: "Equal",
+			kv1: &KeyValue{
+				Key:         "k",
+				ValueType:   "string",
+				ValueString: "hello",
+			},
+			kv2: &KeyValue{
+				Key:         "k",
+				ValueType:   "string",
+				ValueString: "hello",
+			},
+			result: true,
+		},
+		{
+			name:   "KeyMismatch",
+			kv1:    &KeyValue{Key: "k", ValueType: "string"},
+			kv2:    &KeyValue{Key: "a", ValueType: "string"},
+			result: false,
+		},
+		{
+			name:   "ValueTypeMismatch",
+			kv1:    &KeyValue{Key: "k", ValueType: "z"},
+			kv2:    &KeyValue{Key: "k", ValueType: "a"},
+			result: false,
+		},
+		{
+			name:   "ValueStringMismatch",
+			kv1:    &KeyValue{Key: "k", ValueType: "string", ValueString: "zzz"},
+			kv2:    &KeyValue{Key: "k", ValueType: "string", ValueString: "aaa"},
+			result: false,
+		},
+		{
+			name:   "ValueBoolMismatch",
+			kv1:    &KeyValue{Key: "k", ValueType: "bool", ValueBool: true},
+			kv2:    &KeyValue{Key: "k", ValueType: "bool", ValueBool: false},
+			result: false,
+		},
+		{
+			name:   "ValueInt64Mismatch",
+			kv1:    &KeyValue{Key: "k", ValueType: "int64", ValueInt64: 10},
+			kv2:    &KeyValue{Key: "k", ValueType: "int64", ValueInt64: 5},
+			result: false,
+		},
+		{
+			name:   "ValueFloat64Mismatch",
+			kv1:    &KeyValue{Key: "k", ValueType: "float64", ValueFloat64: 1.5},
+			kv2:    &KeyValue{Key: "k", ValueType: "float64", ValueFloat64: 0.5},
+			result: false,
+		},
+		{
+			name:   "ValueBinaryMismatch",
+			kv1:    &KeyValue{Key: "k", ValueType: "binary", ValueBinary: []byte{1, 2, 3}},
+			kv2:    &KeyValue{Key: "k", ValueType: "binary", ValueBinary: []byte{1, 2, 4}},
+			result: false,
+		},
+		{
+			name:   "ValueBinaryEqual",
+			kv1:    &KeyValue{Key: "k", ValueType: "binary", ValueBinary: []byte{1, 2, 3}},
+			kv2:    &KeyValue{Key: "k", ValueType: "binary", ValueBinary: []byte{1, 2, 3}},
+			result: true,
+		},
+	}
+	for _, tc := range tests {
+		t.Run(tc.name, func(t *testing.T) {
+			assert.Equal(t, tc.result, tc.kv1.Equal(tc.kv2))
+		})
+	}
+}
+
+func TestKeyValueAsString(t *testing.T) {
+	tests := []struct {
+		name   string
+		kv     KeyValue
+		expect string
+	}{
+		{
+			name: "StringType",
+			kv: KeyValue{
+				Key:         "k",
+				ValueType:   stringType,
+				ValueString: "hello",
+			},
+			expect: "hello",
+		},
+		{
+			name: "BoolTrue",
+			kv: KeyValue{
+				Key:       "k",
+				ValueType: boolType,
+				ValueBool: true,
+			},
+			expect: "true",
+		},
+		{
+			name: "BoolFalse",
+			kv: KeyValue{
+				Key:       "k",
+				ValueType: boolType,
+				ValueBool: false,
+			},
+			expect: "false",
+		},
+		{
+			name: "Int64Type",
+			kv: KeyValue{
+				Key:        "k",
+				ValueType:  int64Type,
+				ValueInt64: 12345,
+			},
+			expect: "12345",
+		},
+		{
+			name: "Float64Type",
+			kv: KeyValue{
+				Key:          "k",
+				ValueType:    float64Type,
+				ValueFloat64: 12.34,
+			},
+			expect: "12.34",
+		},
+		{
+			name: "BinaryType",
+			kv: KeyValue{
+				Key:         "k",
+				ValueType:   binaryType,
+				ValueBinary: []byte{0xAB, 0xCD, 0xEF},
+			},
+			expect: "abcdef",
+		},
+		{
+			name: "UnknownType",
+			kv: KeyValue{
+				Key:       "k",
+				ValueType: "random-type",
+			},
+			expect: "unknown type random-type",
+		},
+	}
+
+	for _, tc := range tests {
+		t.Run(tc.name, func(t *testing.T) {
+			assert.Equal(t, tc.expect, tc.kv.AsString())
+		})
+	}
+}
+
+func TestSortKVs_WithKey(t *testing.T) {
+	kvs := []KeyValue{
+		{Key: "z", ValueType: "string", ValueString: "hello"},
+		{Key: "y", ValueType: "bool", ValueBool: true},
+		{Key: "x", ValueType: "int64", ValueInt64: 99},
+		{Key: "w", ValueType: "double", ValueFloat64: 1.23},
+		{Key: "v", ValueType: "binary", ValueBinary: []byte{1, 2, 3}},
+		{Key: "m", ValueType: "string", ValueString: "abc"},
+	}
+	SortKVs(kvs)
+	want := []string{"m", "v", "w", "x", "y", "z"}
+	for i, kv := range kvs {
+		assert.Equal(t, want[i], kv.Key)
+	}
+}
+
+func TestSortKVs_WithType(t *testing.T) {
+	kvs := []KeyValue{
+		{Key: "m", ValueType: "string", ValueString: "hello"},
+		{Key: "m", ValueType: "bool", ValueBool: true},
+		{Key: "m", ValueType: "int64", ValueInt64: 99},
+		{Key: "m", ValueType: "double", ValueFloat64: 1.23},
+		{Key: "m", ValueType: "binary", ValueBinary: []byte{1, 2, 3}},
+	}
+	SortKVs(kvs)
+	want := []string{"binary", "bool", "double", "int64", "string"}
+	for i, kv := range kvs {
+		assert.Equal(t, want[i], kv.ValueType)
+	}
+}
+
+func TestSortKVs_WithValue(t *testing.T) {
+	kvs := []KeyValue{
+		{Key: "m", ValueType: "string", ValueString: "a"},
+		{Key: "m", ValueType: "string", ValueString: "b"},
+		{Key: "m", ValueType: "string", ValueString: "c"},
+		{Key: "m", ValueType: "string", ValueString: "d"},
+		{Key: "m", ValueType: "string", ValueString: "e"},
+	}
+	SortKVs(kvs)
+	want := []string{"a", "b", "c", "d", "e"}
+	for i, kv := range kvs {
+		assert.Equal(t, want[i], kv.ValueString)
+	}
+}
diff --git a/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_drop_all_test.go b/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_drop_all_test.go
index 19f3df4c..00d6baa7 100644
--- a/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_drop_all_test.go
+++ b/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_drop_all_test.go
@@ -7,73 +7,63 @@ import (
 	"testing"
 
 	"github.com/stretchr/testify/assert"
-
-	"github.com/jaegertracing/jaeger-idl/model/v1"
 )
 
 var _ TagFilter = &TagFilterDropAll{} // Check API compliance
 
 func TestDropAll(t *testing.T) {
-	sampleTags := model.KeyValues{
-		model.String(someStringTagKey, someStringTagValue),
-		model.Bool(someBoolTagKey, someBoolTagValue),
-		model.Int64(someLongTagKey, someLongTagValue),
-		model.Float64(someDoubleTagKey, someDoubleTagValue),
-		model.Binary(someBinaryTagKey, someBinaryTagValue),
-	}
-
 	tt := []struct {
 		filter              *TagFilterDropAll
-		expectedTags        model.KeyValues
-		expectedProcessTags model.KeyValues
-		expectedLogs        model.KeyValues
+		expectedTags        []KeyValue
+		expectedProcessTags []KeyValue
+		expectedLogs        []KeyValue
 	}{
 		{
 			filter:              NewTagFilterDropAll(false, false, false),
-			expectedTags:        sampleTags,
-			expectedProcessTags: sampleTags,
-			expectedLogs:        sampleTags,
+			expectedTags:        someDBTags,
+			expectedProcessTags: someDBTags,
+			expectedLogs:        someDBTags,
 		},
 		{
 			filter:              NewTagFilterDropAll(true, false, false),
-			expectedTags:        model.KeyValues{},
-			expectedProcessTags: sampleTags,
-			expectedLogs:        sampleTags,
+			expectedTags:        []KeyValue{},
+			expectedProcessTags: someDBTags,
+			expectedLogs:        someDBTags,
 		},
 		{
 			filter:              NewTagFilterDropAll(false, true, false),
-			expectedTags:        sampleTags,
-			expectedProcessTags: model.KeyValues{},
-			expectedLogs:        sampleTags,
+			expectedTags:        someDBTags,
+			expectedProcessTags: []KeyValue{},
+			expectedLogs:        someDBTags,
 		},
 		{
 			filter:              NewTagFilterDropAll(false, false, true),
-			expectedTags:        sampleTags,
-			expectedProcessTags: sampleTags,
-			expectedLogs:        model.KeyValues{},
+			expectedTags:        someDBTags,
+			expectedProcessTags: someDBTags,
+			expectedLogs:        []KeyValue{},
 		},
 		{
 			filter:              NewTagFilterDropAll(true, false, true),
-			expectedTags:        model.KeyValues{},
-			expectedProcessTags: sampleTags,
-			expectedLogs:        model.KeyValues{},
+			expectedTags:        []KeyValue{},
+			expectedProcessTags: someDBTags,
+			expectedLogs:        []KeyValue{},
 		},
 		{
 			filter:              NewTagFilterDropAll(true, true, true),
-			expectedTags:        model.KeyValues{},
-			expectedProcessTags: model.KeyValues{},
-			expectedLogs:        model.KeyValues{},
+			expectedTags:        []KeyValue{},
+			expectedProcessTags: []KeyValue{},
+			expectedLogs:        []KeyValue{},
 		},
 	}
 
 	for _, test := range tt {
-		actualTags := test.filter.FilterTags(nil, sampleTags)
+		actualTags := test.filter.FilterTags(nil, someDBTags)
 		assert.Equal(t, test.expectedTags, actualTags)
 
-		actualProcessTags := test.filter.FilterProcessTags(nil, sampleTags)
+		actualProcessTags := test.filter.FilterProcessTags(nil, someDBTags)
 		assert.Equal(t, test.expectedProcessTags, actualProcessTags)
 
-		actualLogs := test.filter.FilterLogFields(nil, sampleTags)
+		actualLogs := test.filter.FilterLogFields(nil, someDBTags)
 		assert.Equal(t, test.expectedLogs, actualLogs)
 	}
 }
diff --git a/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_exact_match_test.go b/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_exact_match_test.go
index 142df8e2..5dfef02c 100644
--- a/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_exact_match_test.go
+++ b/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_exact_match_test.go
@@ -7,8 +7,6 @@ import (
 	"testing"
 
 	"github.com/stretchr/testify/assert"
-
-	"github.com/jaegertracing/jaeger-idl/model/v1"
 )
 
 func TestBlacklistFilter(t *testing.T) {
@@ -30,31 +28,31 @@ func TestBlacklistFilter(t *testing.T) {
 	}
 
 	for _, test := range tt {
-		var inputKVs model.KeyValues
+		var inputKVs []KeyValue
 		for _, i := range test.input {
-			inputKVs = append(inputKVs, model.String(i, ""))
+			inputKVs = append(inputKVs, KeyValue{Key: i, ValueType: stringType, ValueString: ""})
 		}
-		var expectedKVs model.KeyValues
+		var expectedKVs []KeyValue
 		for _, e := range test.expected {
-			expectedKVs = append(expectedKVs, model.String(e, ""))
+			expectedKVs = append(expectedKVs, KeyValue{Key: e, ValueType: stringType, ValueString: ""})
 		}
-		expectedKVs.Sort()
+		SortKVs(expectedKVs)
 
 		tf := NewBlacklistFilter(test.filter)
 		actualKVs := tf.filter(inputKVs)
-		actualKVs.Sort()
+		SortKVs(actualKVs)
 		assert.Equal(t, expectedKVs, actualKVs)
 
 		actualKVs = tf.FilterLogFields(nil, inputKVs)
-		actualKVs.Sort()
+		SortKVs(actualKVs)
 		assert.Equal(t, expectedKVs, actualKVs)
 
 		actualKVs = tf.FilterProcessTags(nil, inputKVs)
-		actualKVs.Sort()
+		SortKVs(actualKVs)
 		assert.Equal(t, expectedKVs, actualKVs)
 
 		actualKVs = tf.FilterTags(nil, inputKVs)
-		actualKVs.Sort()
+		SortKVs(actualKVs)
 		assert.Equal(t, expectedKVs, actualKVs)
 	}
 }
@@ -78,31 +76,31 @@ func TestWhitelistFilter(t *testing.T) {
 	}
 
 	for _, test := range tt {
-		var inputKVs model.KeyValues
+		var inputKVs []KeyValue
 		for _, i := range test.input {
-			inputKVs = append(inputKVs, model.String(i, ""))
+			inputKVs = append(inputKVs, KeyValue{Key: i, ValueType: stringType, ValueString: ""})
 		}
-		var expectedKVs model.KeyValues
+		var expectedKVs []KeyValue
 		for _, e := range test.expected {
-			expectedKVs = append(expectedKVs, model.String(e, ""))
+			expectedKVs = append(expectedKVs, KeyValue{Key: e, ValueType: stringType, ValueString: ""})
 		}
-		expectedKVs.Sort()
+		SortKVs(expectedKVs)
 
 		tf := NewWhitelistFilter(test.filter)
 		actualKVs := tf.filter(inputKVs)
-		actualKVs.Sort()
+		SortKVs(actualKVs)
 		assert.Equal(t, expectedKVs, actualKVs)
 
 		actualKVs = tf.FilterLogFields(nil, inputKVs)
-		actualKVs.Sort()
+		SortKVs(actualKVs)
 		assert.Equal(t, expectedKVs, actualKVs)
 
 		actualKVs = tf.FilterProcessTags(nil, inputKVs)
-		actualKVs.Sort()
+		SortKVs(actualKVs)
 		assert.Equal(t, expectedKVs, actualKVs)
 
 		actualKVs = tf.FilterTags(nil, inputKVs)
-		actualKVs.Sort()
+		SortKVs(actualKVs)
 		assert.Equal(t, expectedKVs, actualKVs)
 	}
 }
diff --git a/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_test.go b/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_test.go
index 807f79dc..76db3370 100644
--- a/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_test.go
+++ b/internal/storage/v1/cassandra/spanstore/dbmodel/tag_filter_test.go
@@ -9,13 +9,11 @@ import (
 
 	"github.com/kr/pretty"
 	"github.com/stretchr/testify/assert"
-
-	"github.com/jaegertracing/jaeger-idl/model/v1"
 )
 
 func TestDefaultTagFilter(t *testing.T) {
-	span := getTestJaegerSpan()
-	expectedTags := append(append(someTags, someTags...), someTags...)
+	span := getTestSpan()
+	expectedTags := append(append(someDBTags, someDBTags...), someDBTags...)
 	filteredTags := DefaultTagFilter.FilterProcessTags(span, span.Process.Tags)
 	filteredTags = append(filteredTags, DefaultTagFilter.FilterTags(span, span.Tags)...)
 	for _, log := range span.Logs {
@@ -26,40 +24,40 @@ func TestDefaultTagFilter(t *testing.T) {
 
 type onlyStringsFilter struct{}
 
-func (onlyStringsFilter) filterStringTags(tags model.KeyValues) model.KeyValues {
-	var ret model.KeyValues
+func (onlyStringsFilter) filterStringTags(tags []KeyValue) []KeyValue {
+	var ret []KeyValue
 	for _, tag := range tags {
-		if tag.VType == model.StringType {
+		if tag.ValueType == stringType {
 			ret = append(ret, tag)
 		}
 	}
 	return ret
 }
 
-func (f onlyStringsFilter) FilterProcessTags(_ *model.Span, processTags model.KeyValues) model.KeyValues {
+func (f onlyStringsFilter) FilterProcessTags(_ *Span, processTags []KeyValue) []KeyValue {
 	return f.filterStringTags(processTags)
 }
 
-func (f onlyStringsFilter) FilterTags(_ *model.Span, tags model.KeyValues) model.KeyValues {
+func (f onlyStringsFilter) FilterTags(_ *Span, tags []KeyValue) []KeyValue {
 	return f.filterStringTags(tags)
 }
 
-func (f onlyStringsFilter) FilterLogFields(_ *model.Span, logFields model.KeyValues) model.KeyValues {
+func (f onlyStringsFilter) FilterLogFields(_ *Span, logFields []KeyValue) []KeyValue {
 	return f.filterStringTags(logFields)
 }
 
 func TestChainedTagFilter(t *testing.T) {
-	expectedTags := model.KeyValues{model.String(someStringTagKey, someStringTagValue)}
+	expectedTags := []KeyValue{{Key: someStringTagKey, ValueType: stringType, ValueString: someStringTagValue}}
 	filter := NewChainedTagFilter(DefaultTagFilter, onlyStringsFilter{})
-	filteredTags := filter.FilterProcessTags(nil, someTags)
+	filteredTags := filter.FilterProcessTags(nil, someDBTags)
 	compareTags(t, expectedTags, filteredTags)
-	filteredTags = filter.FilterTags(nil, someTags)
+	filteredTags = filter.FilterTags(nil, someDBTags)
 	compareTags(t, expectedTags, filteredTags)
-	filteredTags = filter.FilterLogFields(nil, someTags)
+	filteredTags = filter.FilterLogFields(nil, someDBTags)
 	compareTags(t, expectedTags, filteredTags)
 }
 
-func compareTags(t *testing.T, expected, actual model.KeyValues) {
+func compareTags(t *testing.T, expected, actual []KeyValue) {
 	if !assert.Equal(t, expected, actual) {
 		for _, diff := range pretty.Diff(expected, actual) {
 			t.Log(diff)
diff --git a/internal/storage/v1/cassandra/spanstore/dbmodel/unique_tags_test.go b/internal/storage/v1/cassandra/spanstore/dbmodel/unique_tags_test.go
index ac3ec860..afb418cb 100644
--- a/internal/storage/v1/cassandra/spanstore/dbmodel/unique_tags_test.go
+++ b/internal/storage/v1/cassandra/spanstore/dbmodel/unique_tags_test.go
@@ -13,7 +13,7 @@ import (
 
 func TestGetUniqueTags(t *testing.T) {
 	expectedTags := getTestUniqueTags()
-	uniqueTags := GetAllUniqueTags(getTestJaegerSpan(), DefaultTagFilter)
+	uniqueTags := GetAllUniqueTags(getTestSpan(), DefaultTagFilter)
 	if !assert.Equal(t, expectedTags, uniqueTags) {
 		for _, diff := range pretty.Diff(expectedTags, uniqueTags) {
 			t.Log(diff)
diff --git a/internal/storage/v2/memory/memory_test.go b/internal/storage/v2/memory/memory_test.go
index b7bc1eb4..301e1f2f 100644
--- a/internal/storage/v2/memory/memory_test.go
+++ b/internal/storage/v2/memory/memory_test.go
@@ -814,3 +814,281 @@ func loadTraces(t *testing.T, name string) ptrace.Traces {
 	require.NoError(t, err)
 	return td
 }
+
+func TestFindTraces_OTLPFields(t *testing.T) {
+	store, err := NewStore(Configuration{
+		MaxTraces: 100,
+	})
+	require.NoError(t, err)
+
+	traceID1 := fromString(t, "00000000000000010000000000000000")
+	traceID2 := fromString(t, "00000000000000020000000000000000")
+	traceID3 := fromString(t, "00000000000000030000000000000000")
+	traceID4 := fromString(t, "00000000000000040000000000000000")
+	traceID5 := fromString(t, "00000000000000050000000000000000")
+
+	// Trace 1: ERROR status, SERVER kind, scope "my-scope" v1.0.0, resource.deployment.environment=production
+	td1 := ptrace.NewTraces()
+	rs1 := td1.ResourceSpans().AppendEmpty()
+	rs1.Resource().Attributes().PutStr(conventions.ServiceNameKey, "service1")
+	rs1.Resource().Attributes().PutStr("deployment.environment", "production")
+	ss1 := rs1.ScopeSpans().AppendEmpty()
+	ss1.Scope().SetName("my-scope")
+	ss1.Scope().SetVersion("1.0.0")
+	span1 := ss1.Spans().AppendEmpty()
+	span1.SetTraceID(traceID1)
+	span1.SetSpanID(spanIdFromString(t, "0000000000000001"))
+	span1.SetName("operation1")
+	span1.SetKind(ptrace.SpanKindServer)
+	span1.Status().SetCode(ptrace.StatusCodeError)
+	span1.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+	span1.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(time.Second)))
+
+	// Trace 2: OK status, CLIENT kind, scope "other-scope" v2.0.0, resource.deployment.environment=staging
+	td2 := ptrace.NewTraces()
+	rs2 := td2.ResourceSpans().AppendEmpty()
+	rs2.Resource().Attributes().PutStr(conventions.ServiceNameKey, "service2")
+	rs2.Resource().Attributes().PutStr("deployment.environment", "staging")
+	ss2 := rs2.ScopeSpans().AppendEmpty()
+	ss2.Scope().SetName("other-scope")
+	ss2.Scope().SetVersion("2.0.0")
+	span2 := ss2.Spans().AppendEmpty()
+	span2.SetTraceID(traceID2)
+	span2.SetSpanID(spanIdFromString(t, "0000000000000002"))
+	span2.SetName("operation2")
+	span2.SetKind(ptrace.SpanKindClient)
+	span2.Status().SetCode(ptrace.StatusCodeOk)
+	span2.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+	span2.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(time.Second)))
+
+	// Trace 3: PRODUCER kind with UNSET status
+	td3 := ptrace.NewTraces()
+	rs3 := td3.ResourceSpans().AppendEmpty()
+	rs3.Resource().Attributes().PutStr(conventions.ServiceNameKey, "service3")
+	ss3 := rs3.ScopeSpans().AppendEmpty()
+	span3 := ss3.Spans().AppendEmpty()
+	span3.SetTraceID(traceID3)
+	span3.SetSpanID(spanIdFromString(t, "0000000000000003"))
+	span3.SetName("operation3")
+	span3.SetKind(ptrace.SpanKindProducer)
+	span3.Status().SetCode(ptrace.StatusCodeUnset)
+	span3.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+	span3.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(time.Second)))
+
+	// Trace 4: CONSUMER kind with UNSET status
+	td4 := ptrace.NewTraces()
+	rs4 := td4.ResourceSpans().AppendEmpty()
+	rs4.Resource().Attributes().PutStr(conventions.ServiceNameKey, "service4")
+	ss4 := rs4.ScopeSpans().AppendEmpty()
+	span4 := ss4.Spans().AppendEmpty()
+	span4.SetTraceID(traceID4)
+	span4.SetSpanID(spanIdFromString(t, "0000000000000004"))
+	span4.SetName("operation4")
+	span4.SetKind(ptrace.SpanKindConsumer)
+	span4.Status().SetCode(ptrace.StatusCodeUnset)
+	span4.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+	span4.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(time.Second)))
+
+	// Trace 5: INTERNAL kind with UNSET status
+	td5 := ptrace.NewTraces()
+	rs5 := td5.ResourceSpans().AppendEmpty()
+	rs5.Resource().Attributes().PutStr(conventions.ServiceNameKey, "service5")
+	ss5 := rs5.ScopeSpans().AppendEmpty()
+	span5 := ss5.Spans().AppendEmpty()
+	span5.SetTraceID(traceID5)
+	span5.SetSpanID(spanIdFromString(t, "0000000000000005"))
+	span5.SetName("operation5")
+	span5.SetKind(ptrace.SpanKindInternal)
+	span5.Status().SetCode(ptrace.StatusCodeUnset)
+	span5.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+	span5.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(time.Second)))
+
+	// Write traces
+	err = store.WriteTraces(context.Background(), td1)
+	require.NoError(t, err)
+	err = store.WriteTraces(context.Background(), td2)
+	require.NoError(t, err)
+	err = store.WriteTraces(context.Background(), td3)
+	require.NoError(t, err)
+	err = store.WriteTraces(context.Background(), td4)
+	require.NoError(t, err)
+	err = store.WriteTraces(context.Background(), td5)
+	require.NoError(t, err)
+
+	tests := []struct {
+		name           string
+		queryAttrs     map[string]string
+		expectedTraces int
+		expectedIDs    []pcommon.TraceID
+	}{
+		{
+			name:           "Filter by span.status=ERROR",
+			queryAttrs:     map[string]string{"span.status": "ERROR"},
+			expectedTraces: 1,
+			expectedIDs:    []pcommon.TraceID{traceID1},
+		},
+		{
+			name:           "Filter by span.status=OK",
+			queryAttrs:     map[string]string{"span.status": "OK"},
+			expectedTraces: 1,
+			expectedIDs:    []pcommon.TraceID{traceID2},
+		},
+		{
+			name:           "Filter by span.status=UNSET",
+			queryAttrs:     map[string]string{"span.status": "UNSET"},
+			expectedTraces: 3,
+			expectedIDs:    []pcommon.TraceID{traceID5, traceID4, traceID3},
+		},
+		{
+			name:           "Filter by span.kind=SERVER",
+			queryAttrs:     map[string]string{"span.kind": "SERVER"},
+			expectedTraces: 1,
+			expectedIDs:    []pcommon.TraceID{traceID1},
+		},
+		{
+			name:           "Filter by span.kind=CLIENT",
+			queryAttrs:     map[string]string{"span.kind": "CLIENT"},
+			expectedTraces: 1,
+			expectedIDs:    []pcommon.TraceID{traceID2},
+		},
+		{
+			name:           "Filter by span.kind=PRODUCER",
+			queryAttrs:     map[string]string{"span.kind": "PRODUCER"},
+			expectedTraces: 1,
+			expectedIDs:    []pcommon.TraceID{traceID3},
+		},
+		{
+			name:           "Filter by span.kind=CONSUMER",
+			queryAttrs:     map[string]string{"span.kind": "CONSUMER"},
+			expectedTraces: 1,
+			expectedIDs:    []pcommon.TraceID{traceID4},
+		},
+		{
+			name:           "Filter by span.kind=INTERNAL",
+			queryAttrs:     map[string]string{"span.kind": "INTERNAL"},
+			expectedTraces: 1,
+			expectedIDs:    []pcommon.TraceID{traceID5},
+		},
+		{
+			name:           "Filter by span.kind=UNSPECIFIED (no match)",
+			queryAttrs:     map[string]string{"span.kind": "UNSPECIFIED"},
+			expectedTraces: 0,
+			expectedIDs:    []pcommon.TraceID{},
+		},
+		{
+			name:           "Filter by span.kind=INVALID (default/unknown)",
+			queryAttrs:     map[string]string{"span.kind": "INVALID"},
+			expectedTraces: 0,
+			expectedIDs:    []pcommon.TraceID{},
+		},
+		{
+			name:           "Filter by scope.name=my-scope",
+			queryAttrs:     map[string]string{"scope.name": "my-scope"},
+			expectedTraces: 1,
+			expectedIDs:    []pcommon.TraceID{traceID1},
+		},
+		{
+			name:           "Filter by scope.name=other-scope",
+			queryAttrs:     map[string]string{"scope.name": "other-scope"},
+			expectedTraces: 1,
+			expectedIDs:    []pcommon.TraceID{traceID2},
+		},
+		{
+			name:           "Filter by scope.name (no match)",
+			queryAttrs:     map[string]string{"scope.name": "nonexistent"},
+			expectedTraces: 0,
+			expectedIDs:    []pcommon.TraceID{},
+		},
+		{
+			name:           "Filter by scope.version=1.0.0",
+			queryAttrs:     map[string]string{"scope.version": "1.0.0"},
+			expectedTraces: 1,
+			expectedIDs:    []pcommon.TraceID{traceID1},
+		},
+		{
+			name:           "Filter by scope.version=2.0.0",
+			queryAttrs:     map[string]string{"scope.version": "2.0.0"},
+			expectedTraces: 1,
+			expectedIDs:    []pcommon.TraceID{traceID2},
+		},
+		{
+			name:           "Filter by scope.version (no match)",
+			queryAttrs:     map[string]string{"scope.version": "99.0.0"},
+			expectedTraces: 0,
+			expectedIDs:    []pcommon.TraceID{},
+		},
+		{
+			name:           "Filter by resource.deployment.environment=production",
+			queryAttrs:     map[string]string{"resource.deployment.environment": "production"},
+			expectedTraces: 1,
+			expectedIDs:    []pcommon.TraceID{traceID1},
+		},
+		{
+			name:           "Filter by resource.deployment.environment=staging",
+			queryAttrs:     map[string]string{"resource.deployment.environment": "staging"},
+			expectedTraces: 1,
+			expectedIDs:    []pcommon.TraceID{traceID2},
+		},
+		{
+			name:           "Filter by resource.deployment.environment (no match)",
+			queryAttrs:     map[string]string{"resource.deployment.environment": "development"},
+			expectedTraces: 0,
+			expectedIDs:    []pcommon.TraceID{},
+		},
+		{
+			name:           "Combined: span.status=ERROR AND span.kind=SERVER",
+			queryAttrs:     map[string]string{"span.status": "ERROR", "span.kind": "SERVER"},
+			expectedTraces: 1,
+			expectedIDs:    []pcommon.TraceID{traceID1},
+		},
+		{
+			name:           "No match: span.status=ERROR AND span.kind=CLIENT",
+			queryAttrs:     map[string]string{"span.status": "ERROR", "span.kind": "CLIENT"},
+			expectedTraces: 0,
+			expectedIDs:    []pcommon.TraceID{},
+		},
+		{
+			name:           "Combined: scope.name AND scope.version",
+			queryAttrs:     map[string]string{"scope.name": "my-scope", "scope.version": "1.0.0"},
+			expectedTraces: 1,
+			expectedIDs:    []pcommon.TraceID{traceID1},
+		},
+		{
+			name:           "No OTLP filters (backward compatibility)",
+			queryAttrs:     map[string]string{},
+			expectedTraces: 5,
+			expectedIDs:    []pcommon.TraceID{traceID5, traceID4, traceID3, traceID2, traceID1}, // Reverse chronological
+		},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			attrs := pcommon.NewMap()
+			for k, v := range tt.queryAttrs {
+				attrs.PutStr(k, v)
+			}
+
+			query := tracestore.TraceQueryParams{
+				Attributes:  attrs,
+				SearchDepth: 100,
+			}
+
+			iter := store.FindTraces(context.Background(), query)
+			var foundTraces []ptrace.Traces
+			for traces, err := range iter {
+				require.NoError(t, err)
+				foundTraces = append(foundTraces, traces...)
+			}
+
+			assert.Len(t, foundTraces, tt.expectedTraces,
+				"query: %v", tt.queryAttrs)
+
+			if tt.expectedTraces > 0 {
+				for i, expectedID := range tt.expectedIDs {
+					actualID := foundTraces[i].ResourceSpans().At(0).ScopeSpans().At(0).Spans().At(0).TraceID()
+					assert.Equal(t, expectedID, actualID)
+				}
+			}
+		})
+	}
+}