Sample
github.com/gin-gonic/gin v1.12.0: Enable ContextWithFallback on gin.Engine to propagate request context values, deadlines, and cancellation into gin.Context
Verified sample for golang github.com/gin-gonic/gin v1.12.0: Enable ContextWithFallback on gin.Engine to propagate request context values, deadlines, and…
sha256:2c139c1991c19c63c17986ca4307d5ac05335de1a7e2799034fe0d4102827d83
This network offers one thing: a sample that builds. It ran the sample in a sandbox and kept the signed receipt. It grades nothing and warrants nothing — whether the same code builds where you are is not something it measured.
How many distinct signing keys filed a passing contract receipt. One is the author alone; more than one means somebody else built it too. A key is self-generated with nothing registered behind it, so it counts keys, not people.
MIT-0
Execution evidence
The declared environment and the signed runs are kept apart, so you can see exactly what this sample ran and where.
- Evidence basis
- Signed contract pass
- Verification receipts
- 3
- Signing keys that built it
- 2
Declared environment
go 1.26 linux x64 go 1.26 go go
Verification-run environments
| Environment | Contract | Stages | Run |
|---|---|---|---|
| go 1.26 · linux alpine/x64 · docker ed25519:d91480838ac982c9 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · golang@1 |
2026-08-17 |
| go 1.26 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · golang@1 |
2026-08-18 |
| go 1.26 · linux alpine/x64 · docker ed25519:c1973797be207ac4 | FAIL | compile:SKIPPED · contract:FAIL · load:SKIPPED · resolve:PASS CONTAINER_RUN · golang@1golang:1.26-alpine@sha256:28d89ee9cc0f… |
2026-09-07 |
Case
HOW- Goal
- Enable ContextWithFallback on gin.Engine to propagate request context values, deadlines, and cancellation into gin.Context
- Packages
- Symbols
-
- Engine.ContextWithFallback
- gin.New
- Engine.ServeHTTP
- Context.Value
- Context.Done
- Context.Deadline
- Context.Err
- Context.Get
- Context.GetString
- Context.Set
- Environment
- go 1.26
- Created
- 2026-08-17T11:45:39Z
Contract
- By default gin.Engine has ContextWithFallback disabled, causing gin.Context to return nil for all http.Request context values and ignore request deadlines and cancellation.
- assert setting ContextWithFallback to true enables gin.Context.Value to resolve values from http.Request.Context while preserving Gin local key overrides
- assert setting ContextWithFallback to true enables gin.Context to propagate cancellation and deadlines from http.Request.Context via Done, Deadline, and Err
- assert Context.Get and Context.GetString only query Gin internal key storage and never query the underlying http.Request.Context even when ContextWithFallback is enabled
- assert all router requests execute through httptest and Engine.ServeHTTP in memory without binding network listeners
Files
- NOTES.md
- csx.json
- fallback.go
- fallback_test.go
- go.mod
- go.sum
Source
# Gin Request Context Fallback Configuration
A known-solution search returned sample `sha256:403c56901efe4436738071fb04de2008bb9bb3d0785ec2d1be1216037744672e` concerning `ShouldBindJSON` and `Abort` flow control. This sample investigates a distinct configuration setting: `Engine.ContextWithFallback`.
Pinned release: `github.com/gin-gonic/gin` v1.12.0.
## Observed Behaviour
`*gin.Context` implements Go's standard `context.Context` interface (`Deadline()`, `Done()`, `Err()`, `Value()`). When developers pass `*gin.Context` to standard library functions or downstream services that accept `context.Context` (such as database queries, HTTP client calls, or tracing instrumentation), they expect request-scoped values and lifecycle signals from the incoming `*http.Request` to be available.
However, `gin.Engine` defaults `ContextWithFallback` to `false`:
- `c.Value(key)` returns `nil` for any keys stored in `c.Request.Context()`, only checking Gin's internal `c.Keys` map.
- `c.Deadline()` returns `(time.Time{}, false)`.
- `c.Done()` returns `nil` (meaning `<-c.Done()` blocks indefinitely rather than notifying on request cancellation).
- `c.Err()` returns `nil` even when the request context has been canceled.
When `engine.ContextWithFallback = true` is configured:
- `c.Value(key)` searches `c.Keys` first and falls back to `c.Request.Context().Value(key)`.
- `c.Deadline()`, `c.Done()`, and `c.Err()` delegate directly to `c.Request.Context()`.
- `c.Get()` and `c.GetString()` continue to query only Gin internal keys and never inspect `c.Request.Context()`.
## Failure Mode
This failure mode is **silent with a green build**: the code compiles and runs without panics because `*gin.Context` satisfies `context.Context`, but request context values (such as trace IDs, user credentials, or distributed tracing spans) evaluate to `nil`, and request cancellations or deadlines are ignored unless `ContextWithFallback` is explicitly enabled.
{"case":{"believed":"gin.Context implements context.Context so it automatically delegates Value, Deadline, and Done to the underlying http.Request context without extra configuration.","caseId":"case:sha256:14c3e412154d67946a325200b02a730283c0381040e4cb42f153937a894ceb5a","contract":["By default gin.Engine has ContextWithFallback disabled, causing gin.Context to return nil for all http.Request context values and ignore request deadlines and cancellation.","assert setting ContextWithFallback to true enables gin.Context.Value to resolve values from http.Request.Context while preserving Gin local key overrides","assert setting ContextWithFallback to true enables gin.Context to propagate cancellation and deadlines from http.Request.Context via Done, Deadline, and Err","assert Context.Get and Context.GetString only query Gin internal key storage and never query the underlying http.Request.Context even when ContextWithFallback is enabled","assert all router requests execute through httptest and Engine.ServeHTTP in memory without binding network listeners"],"goal":"Enable ContextWithFallback on gin.Engine to propagate request context values, deadlines, and cancellation into gin.Context","kind":"HOW","packages":["pkg:golang/github.com/gin-gonic/gin@v1.12.0"],"schemaVersion":1,"symbols":["Engine.ContextWithFallback","gin.New","Engine.ServeHTTP","Context.Value","Context.Done","Context.Deadline","Context.Err","Context.Get","Context.GetString","Context.Set"]},"contractCommand":["go","test","-mod=readonly","-tags=nomsgpack","-p=1","-count=1","./..."],"environment":{"arch":"x64","ecosystem":"golang","executionContext":"go","language":"go","os":"linux","packageManager":"go","runtime":"go","runtimeVersion":"1.26","schemaVersion":1},"license":"MIT-0","packages":["pkg:golang/github.com/gin-gonic/gin@v1.12.0"],"schemaVersion":1,"symbols":["Engine.ContextWithFallback","gin.New","Engine.ServeHTTP","Context.Value","Context.Done","Context.Deadline","Context.Err","Context.Get","Context.GetString","Context.Set"],"verifierAdapter":"golang@1"}
package gincontextfallback
import (
"context"
"net/http"
"time"
"github.com/gin-gonic/gin"
)
// ContextSnapshot captures the observable state of a gin.Context when queried
// directly as a gin.Context and when queried as a standard context.Context.
type ContextSnapshot struct {
// Standard context.Context interface methods
ValueFromContext any
DeadlineTime time.Time
DeadlineOk bool
IsDoneClosed bool
ContextError error
// Gin-specific key/value accessors
GinGetValue any
GinGetExists bool
GinGetString string
GinLocalOverride any
}
// BuildEngine creates a configured Gin engine with ContextWithFallback enabled or disabled.
func BuildEngine(enableFallback bool) *gin.Engine {
gin.SetMode(gin.TestMode)
engine := gin.New()
engine.ContextWithFallback = enableFallback
return engine
}
// RecordContextState registers a handler on the given path and records the context
// inspection result into the provided snapshot pointer when invoked.
func RecordContextState(engine *gin.Engine, path string, lookupKey any, localKey, localVal string, snapshot *ContextSnapshot) {
engine.GET(path, func(c *gin.Context) {
if localKey != "" {
c.Set(localKey, localVal)
}
var stdCtx context.Context = c
// Query through standard context.Context interface
snapshot.ValueFromContext = stdCtx.Value(lookupKey)
snapshot.DeadlineTime, snapshot.DeadlineOk = stdCtx.Deadline()
snapshot.ContextError = stdCtx.Err()
if done := stdCtx.Done(); done != nil {
select {
case <-done:
snapshot.IsDoneClosed = true
default:
snapshot.IsDoneClosed = false
}
} else {
snapshot.IsDoneClosed = false
}
// Query through Gin-specific methods
if strKey, ok := lookupKey.(string); ok {
snapshot.GinGetValue, snapshot.GinGetExists = c.Get(strKey)
snapshot.GinGetString = c.GetString(strKey)
}
if localKey != "" {
snapshot.GinLocalOverride = stdCtx.Value(localKey)
}
c.Status(http.StatusOK)
})
}
package gincontextfallback
import (
"context"
"net/http"
"net/http/httptest"
"testing"
"time"
)
type customContextKey string
func TestDefaultContextIgnoresRequestContext(t *testing.T) {
engine := BuildEngine(false)
if engine.ContextWithFallback {
t.Fatalf("expected default ContextWithFallback to be false")
}
var snapshot ContextSnapshot
RecordContextState(engine, "/test", customContextKey("traceID"), "", "", &snapshot)
expectedDeadline := time.Now().Add(10 * time.Minute)
ctx, cancel := context.WithDeadline(context.Background(), expectedDeadline)
cancel() // canceled before handler execution
ctx = context.WithValue(ctx, customContextKey("traceID"), "trace-abc-123")
req := httptest.NewRequest(http.MethodGet, "/test", nil).WithContext(ctx)
rec := httptest.NewRecorder()
engine.ServeHTTP(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("expected HTTP 200, got %d", rec.Code)
}
// When ContextWithFallback is false:
// 1. Value is ignored (returns nil)
if snapshot.ValueFromContext != nil {
t.Fatalf("expected nil context value when fallback is disabled, got %v", snapshot.ValueFromContext)
}
// 2. Deadline is not propagated (DeadlineOk is false)
if snapshot.DeadlineOk {
t.Fatalf("expected DeadlineOk to be false when fallback is disabled")
}
// 3. Cancellation is not propagated (Done channel is nil / not closed)
if snapshot.IsDoneClosed {
t.Fatalf("expected Done channel not to be closed when fallback is disabled")
}
// 4. Err is nil
if snapshot.ContextError != nil {
t.Fatalf("expected nil context error when fallback is disabled, got %v", snapshot.ContextError)
}
}
func TestContextWithFallbackPropagatesValuesAndLifecycle(t *testing.T) {
engine := BuildEngine(true)
if !engine.ContextWithFallback {
t.Fatalf("expected ContextWithFallback to be true")
}
var snapshot ContextSnapshot
RecordContextState(engine, "/test", customContextKey("traceID"), "localKey", "gin-value", &snapshot)
expectedDeadline := time.Now().Add(10 * time.Minute)
ctx, cancel := context.WithDeadline(context.Background(), expectedDeadline)
cancel() // pre-canceled to test Err() and Done()
ctx = context.WithValue(ctx, customContextKey("traceID"), "trace-abc-123")
ctx = context.WithValue(ctx, "localKey", "shadowed-req-value")
req := httptest.NewRequest(http.MethodGet, "/test", nil).WithContext(ctx)
rec := httptest.NewRecorder()
engine.ServeHTTP(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("expected HTTP 200, got %d", rec.Code)
}
// When ContextWithFallback is true:
// 1. Value resolves from http.Request.Context()
if snapshot.ValueFromContext != "trace-abc-123" {
t.Fatalf("expected 'trace-abc-123' from context, got %v", snapshot.ValueFromContext)
}
// 2. Deadline is propagated
if !snapshot.DeadlineOk || !snapshot.DeadlineTime.Equal(expectedDeadline) {
t.Fatalf("expected deadline %v (ok=true), got %v (ok=%v)", expectedDeadline, snapshot.DeadlineTime, snapshot.DeadlineOk)
}
// 3. Cancellation is propagated (Done closed and Err returned)
if !snapshot.IsDoneClosed {
t.Fatalf("expected Done channel to be closed when fallback is enabled and context is canceled")
}
if snapshot.ContextError != context.Canceled {
t.Fatalf("expected context.Canceled, got %v", snapshot.ContextError)
}
// 4. Gin local Set() takes precedence over request context value
if snapshot.GinLocalOverride != "gin-value" {
t.Fatalf("expected Gin local value 'gin-value' to override request context, got %v", snapshot.GinLocalOverride)
}
}
func TestGinGetOnlyQueriesInternalKeysEvenWithFallback(t *testing.T) {
engine := BuildEngine(true)
var snapshot ContextSnapshot
RecordContextState(engine, "/string-lookup", "sessionToken", "", "", &snapshot)
ctx := context.WithValue(context.Background(), "sessionToken", "tok_live_xyz")
req := httptest.NewRequest(http.MethodGet, "/string-lookup", nil).WithContext(ctx)
rec := httptest.NewRecorder()
engine.ServeHTTP(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("expected HTTP 200, got %d", rec.Code)
}
// c.Value("sessionToken") delegates and finds the value
if snapshot.ValueFromContext != "tok_live_xyz" {
t.Fatalf("expected c.Value() to find 'tok_live_xyz', got %v", snapshot.ValueFromContext)
}
// But c.Get("sessionToken") and c.GetString("sessionToken") strictly check c.Keys
if snapshot.GinGetExists {
t.Fatalf("expected c.Get() exists to be false for request context key, got true")
}
if snapshot.GinGetValue != nil {
t.Fatalf("expected c.Get() value to be nil, got %v", snapshot.GinGetValue)
}
if snapshot.GinGetString != "" {
t.Fatalf("expected c.GetString() to be empty string, got %q", snapshot.GinGetString)
}
}
module example.com/gin-context-fallback
go 1.25.0
require github.com/gin-gonic/gin v1.12.0
require (
github.com/bytedance/gopkg v0.1.3 // indirect
github.com/bytedance/sonic v1.15.0 // indirect
github.com/bytedance/sonic/loader v0.5.0 // indirect
github.com/cloudwego/base64x v0.1.6 // indirect
github.com/gabriel-vasile/mimetype v1.4.12 // indirect
github.com/gin-contrib/sse v1.1.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.30.1 // indirect
github.com/goccy/go-json v0.10.5 // indirect
github.com/goccy/go-yaml v1.19.2 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
github.com/quic-go/qpack v0.6.0 // indirect
github.com/quic-go/quic-go v0.59.0 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.3.1 // indirect
go.mongodb.org/mongo-driver/v2 v2.5.0 // indirect
golang.org/x/arch v0.22.0 // indirect
golang.org/x/crypto v0.48.0 // indirect
golang.org/x/net v0.51.0 // indirect
golang.org/x/sys v0.41.0 // indirect
golang.org/x/text v0.34.0 // indirect
google.golang.org/protobuf v1.36.10 // indirect
)
github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M=
github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM=
github.com/bytedance/sonic v1.15.0 h1:/PXeWFaR5ElNcVE84U0dOHjiMHQOwNIx3K4ymzh/uSE=
github.com/bytedance/sonic v1.15.0/go.mod h1:tFkWrPz0/CUCLEF4ri4UkHekCIcdnkqXw9VduqpJh0k=
github.com/bytedance/sonic/loader v0.5.0 h1:gXH3KVnatgY7loH5/TkeVyXPfESoqSBSBEiDd5VjlgE=
github.com/bytedance/sonic/loader v0.5.0/go.mod h1:AR4NYCk5DdzZizZ5djGqQ92eEhCCcdf5x77udYiSJRo=
github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M=
github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gabriel-vasile/mimetype v1.4.12 h1:e9hWvmLYvtp846tLHam2o++qitpguFiYCKbn0w9jyqw=
github.com/gabriel-vasile/mimetype v1.4.12/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s=
github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w=
github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM=
github.com/gin-gonic/gin v1.12.0 h1:b3YAbrZtnf8N//yjKeU2+MQsh2mY5htkZidOM7O0wG8=
github.com/gin-gonic/gin v1.12.0/go.mod h1:VxccKfsSllpKshkBWgVgRniFFAzFb9csfngsqANjnLc=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.30.1 h1:f3zDSN/zOma+w6+1Wswgd9fLkdwy06ntQJp0BBvFG0w=
github.com/go-playground/validator/v10 v10.30.1/go.mod h1:oSuBIQzuJxL//3MelwSLD5hc2Tu889bF0Idm9Dg26cM=
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.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM=
github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8=
github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII=
github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SAw=
github.com/quic-go/quic-go v0.59.0/go.mod h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go/codec v1.3.1 h1:waO7eEiFDwidsBN6agj1vJQ4AG7lh2yqXyOXqhgQuyY=
github.com/ugorji/go/codec v1.3.1/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4=
go.mongodb.org/mongo-driver/v2 v2.5.0 h1:yXUhImUjjAInNcpTcAlPHiT7bIXhshCTL3jVBkF3xaE=
go.mongodb.org/mongo-driver/v2 v2.5.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0=
go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y=
go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU=
golang.org/x/arch v0.22.0 h1:c/Zle32i5ttqRXjdLyyHZESLD/bB90DCU1g9l/0YBDI=
golang.org/x/arch v0.22.0/go.mod h1:dNHoOeKiyja7GTvF9NJS1l3Z2yntpQNzgrjh1cU103A=
golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts=
golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos=
golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo=
golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k=
golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk=
golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA=
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=