Repository: axone-protocol/axone-mcp
Pull request #15: Feat/governance resource
Author: login: ccamel
Labels: name: released
Created: 2025-04-07T13:39:51Z | Merged: 2025-04-07T14:07:39Z

Adds the `get_resource_governance_code` MCP tool, which retrieves the _governance code_ attached to a given _resource_ (if any), along with its documentation and unit test coverage.

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Enhanced gRPC connection settings with flexible options for endpoints, secure TLS configurations, and timeouts.
  - Introduced a tool for retrieving resource governance codes.

- **Documentation**
  - Updated project documentation with a new compatibility badge and added a section on available tools.

- **Chores**
  - Improved build tooling with automated mock generation.
  - Upgraded multiple dependencies to boost performance and security.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Diff:
diff --git a/Makefile b/Makefile
index 10ca1bc..289925e 100644
--- a/Makefile
+++ b/Makefile
@@ -12,6 +12,7 @@ GOFUMPT_VERSION         ?= v0.7.0
 GOLANG_VERSION          ?= 1.23
 GOLANGCI_LINT_VERSION   ?= v2.0.2
 GOTHANKS_VERSION        ?= latest
+MOCKGEN_VERSION         ?= v0.5.0
 TPARSE_VERSION			?= v0.17.0
 
 # Some colors (if supported)
@@ -41,6 +42,7 @@ TOOLS_DIR  = $(TARGET_DIR)/tools
 GOFUMPT_BIN       = $(TOOLS_DIR)/gofumpt/$(GOFUMPT_VERSION)/gofumpt
 GOLANGCI_LINT_BIN = $(TOOLS_DIR)/golangci-lint/$(GOLANGCI_LINT_VERSION)/golangci-lint
 GOTHANKS_BIN      = $(TOOLS_DIR)/gothanks/$(GOTHANKS_VERSION)/gothanks
+MOCKGEN_BIN       = $(TOOLS_DIR)/mockgen/$(MOCKGEN_VERSION)/mockgen
 TPARSE_BIN		  = $(TOOLS_DIR)/tparse/$(TPARSE_VERSION)/tparse
 
 # Build options
@@ -80,7 +82,7 @@ deps: ## Download Go module dependencies
 	@go mod download
 
 .PHONY: tools
-tools: $(GOLANGCI_LINT_BIN) $(GOTHANKS_BIN) $(GOFUMPT_BIN) $(TPARSE_BIN) ## Install necessary development tools
+tools: $(GOLANGCI_LINT_BIN) $(GOTHANKS_BIN) $(GOFUMPT_BIN) $(MOCKGEN_BIN) $(TPARSE_BIN) ## Install necessary development tools
 
 .PHONY: thanks
 thanks: tools ## Thanks to the contributors
@@ -122,6 +124,12 @@ format-go: tools ## Format Go source code
 	@$(call echo_msg, 📐, Formatting, Go source code, ...)
 	@$(GOFUMPT_BIN) -w -l .
 
+## Mock:
+.PHONY: mock
+mock: tools ## Generate all the mocks (for tests)
+	@$(call echo_msg, 🧱, Generating, mocks, ...)
+	@$(MOCKGEN_BIN) -destination=internal/mcp/dataverse_mocks.go -package=mcp github.com/axone-protocol/axone-sdk/dataverse QueryClient
+
 .PHONY: docker
 docker: build ## Build Docker container
 	@$(call echo_msg, 📦, Building, Docker container, ...)
@@ -177,6 +185,11 @@ $(GOFUMPT_BIN):
 	@mkdir -p $(dir $(GOFUMPT_BIN))
 	@GOBIN="$$(cd $(dir $(GOFUMPT_BIN)) && pwd)" go install mvdan.cc/gofumpt@$(GOFUMPT_VERSION)
 
+$(MOCKGEN_BIN):
+	@$(call echo_msg, 📦, Installing, mockgen, $(COLOR_YELLOW)$(MOCKGEN_VERSION)$(COLOR_RESET)...)
+	@mkdir -p $(dir $(MOCKGEN_BIN))
+	@GOBIN="$$(cd $(dir $(MOCKGEN_BIN)) && pwd)" go install go.uber.org/mock/mockgen@$(MOCKGEN_VERSION)
+
 $(TPARSE_BIN):
 	@$(call echo_msg, 📦, Installing, tparse, $(COLOR_YELLOW)$(TPARSE_VERSION)$(COLOR_RESET)...)
 	@mkdir -p $(dir $(TPARSE_BIN))
diff --git a/README.md b/README.md
index 0b2d95d..1b131ff 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,7 @@
 
 > 🤖 [Axone](https://axone.xyz)’s [MCP](https://modelcontextprotocol.io/introduction) server – gateway to the dataverse for AI-powered tools
 
+![MCP Protocol](https://img.shields.io/badge/MCP-Compatible-green?style=for-the-badge)
 [![version](https://img.shields.io/github/v/release/axone-protocol/axone-mcp?style=for-the-badge&logo=github)](https://github.com/axone-protocol/axone-mcp/releases)
 [![lint](https://img.shields.io/github/actions/workflow/status/axone-protocol/axone-mcp/lint.yml?branch=main&label=lint&style=for-the-badge&logo=github)](https://github.com/axone-protocol/axone-mcp/actions/workflows/lint.yml)
 [![build](https://img.shields.io/github/actions/workflow/status/axone-protocol/axone-mcp/build.yml?branch=main&label=build&style=for-the-badge&logo=github)](https://github.com/axone-protocol/axone-mcp/actions/workflows/build.yml)
@@ -39,6 +40,23 @@ flowchart LR
     s3Proxy -. ② ✅ access .-> s3
 ```
 
+## Available tools
+
+### `get_resource_governance_code`
+
+Get the governance code attached to the given resource (if any).
+
+#### Input schema
+
+```json
+{
+  "resource": {
+    "type": "string",
+    "description": "The resource DID to get the governance code for."
+  }
+}
+```
+
 ## Usage
 
 Install the MCP server:
diff --git a/cmd/log.go b/cmd/log.go
index 12352fe..11f633d 100644
--- a/cmd/log.go
+++ b/cmd/log.go
@@ -10,6 +10,7 @@ import (
 	"github.com/rs/zerolog"
 	"github.com/rs/zerolog/log"
 	"github.com/spf13/cobra"
+	"github.com/spf13/viper"
 )
 
 const (
@@ -17,14 +18,12 @@ const (
 	FlagLogFormat = "log-format"
 )
 
-var (
-	logLevel  string
-	logFormat string
-)
-
 func InstallLogRunE(_ *cobra.Command, _ []string) error {
 	var output io.Writer
 
+	logFormat := viper.GetString(FlagLogFormat)
+	logLevel := viper.GetString(FlagLogLevel)
+
 	switch strings.ToLower(logFormat) {
 	case "auto":
 		if isatty.IsTerminal(os.Stdout.Fd()) {
@@ -66,8 +65,10 @@ func InstallLogRunE(_ *cobra.Command, _ []string) error {
 }
 
 func init() {
-	rootCmd.PersistentFlags().StringVar(&logLevel, FlagLogLevel, "info",
+	rootCmd.PersistentFlags().String(FlagLogLevel, "info",
 		`verbosity of logging ("trace", "debug", "info", "warn", "error")`)
-	rootCmd.PersistentFlags().StringVar(&logFormat, FlagLogFormat, "auto",
+	_ = viper.BindPFlag(FlagLogLevel, rootCmd.PersistentFlags().Lookup(FlagLogLevel))
+	rootCmd.PersistentFlags().String(FlagLogFormat, "auto",
 		`format of logs ("auto", "console", "json")`)
+	_ = viper.BindPFlag(FlagLogFormat, rootCmd.PersistentFlags().Lookup(FlagLogFormat))
 }
diff --git a/cmd/root.go b/cmd/root.go
index d995e78..6e899c5 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -1,9 +1,14 @@
 package cmd
 
 import (
+	"context"
 	"os"
+	"strings"
 
+	"github.com/axone-protocol/axone-mcp/internal/version"
 	"github.com/spf13/cobra"
+	"github.com/spf13/viper"
+	"resenje.org/casbab"
 )
 
 // rootCmd represents the base command when called without any subcommands.
@@ -16,13 +21,21 @@ var rootCmd = &cobra.Command{
 
 // Execute adds all child commands to the root command and sets flags appropriately.
 // This is called by main.main(). It only needs to happen once to the rootCmd.
-func Execute() {
-	err := rootCmd.Execute()
+func Execute(ctx context.Context) {
+	err := rootCmd.ExecuteContext(ctx)
 	if err != nil {
 		os.Exit(1)
 	}
 }
 
-func init() {
+func initConfig() {
 	cobra.EnableTraverseRunHooks = true
+
+	viper.SetEnvPrefix(casbab.ScreamingSnake(version.Name))
+	viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
+	viper.AutomaticEnv()
+}
+
+func init() {
+	cobra.OnInitialize(initConfig)
 }
diff --git a/cmd/serve-sse.go b/cmd/serve-sse.go
index 1b778a3..d55c733 100644
--- a/cmd/serve-sse.go
+++ b/cmd/serve-sse.go
@@ -9,9 +9,8 @@ import (
 	"syscall"
 	"time"
 
-	"github.com/axone-protocol/axone-mcp/internal/mcp"
-
 	"github.com/justinas/alice"
+	"github.com/spf13/viper"
 
 	"github.com/mark3labs/mcp-go/server"
 	"github.com/rs/zerolog"
@@ -39,8 +38,8 @@ var serveSseCmd = &cobra.Command{
 	Short: "Serve the MCP over SSE (server-sent events)",
 	Long: `Start the MCP server using Server-Sent Events (SSE) to enable streaming over HTTP.
 Typically used for browser-based or reactive clients.`,
-	RunE: func(_ *cobra.Command, _ []string) error {
-		s, err := mcp.NewServer()
+	RunE: func(cmd *cobra.Command, _ []string) error {
+		s, err := buildMCPServer(cmd.Context())
 		if err != nil {
 			return err
 		}
@@ -66,13 +65,13 @@ Typically used for browser-based or reactive clients.`,
 			}
 		}()
 
-		ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
+		ctx, stop := signal.NotifyContext(cmd.Context(), os.Interrupt, syscall.SIGTERM)
 		defer stop()
 
 		<-ctx.Done()
 		log.Info().Msg("shutdown signal received")
 
-		shutdownCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
+		shutdownCtx, cancel := context.WithTimeout(cmd.Context(), 10*time.Second)
 		defer cancel()
 		return sseServer.Shutdown(shutdownCtx)
 	},
@@ -96,8 +95,13 @@ func loggerChain() alice.Chain {
 }
 
 func init() {
-	serveSseCmd.PersistentFlags().StringVar(&baseURL, FlagBaseURL, "", "The server's base URL")
-	serveSseCmd.PersistentFlags().StringVar(&listenAddr, FlagListenAddr, "127.0.0.1:8081", "The server's listen address")
+	serveSseCmd.PersistentFlags().StringVar(&baseURL, FlagBaseURL, "",
+		"The server's base URL")
+	_ = viper.BindPFlag(FlagBaseURL, serveSseCmd.PersistentFlags().Lookup(FlagBaseURL))
+
+	serveSseCmd.PersistentFlags().StringVar(&listenAddr, FlagListenAddr, "127.0.0.1:8081",
+		"The server's listen address")
+	_ = viper.BindPFlag(FlagListenAddr, serveSseCmd.PersistentFlags().Lookup(FlagListenAddr))
 
 	serveCmd.AddCommand(serveSseCmd)
 }
diff --git a/cmd/serve-stdio.go b/cmd/serve-stdio.go
index ca898ff..56c7e0d 100644
--- a/cmd/serve-stdio.go
+++ b/cmd/serve-stdio.go
@@ -10,8 +10,6 @@ import (
 	"strings"
 	"syscall"
 
-	"github.com/axone-protocol/axone-mcp/internal/mcp"
-
 	"github.com/mark3labs/mcp-go/server"
 	"github.com/rs/zerolog"
 	zlog "github.com/rs/zerolog/log"
@@ -29,8 +27,8 @@ var serveStdioCmd = &cobra.Command{
 	Short: "Serve the MCP over stdio (Standard Input/Output)",
 	Long: `Start the MCP server using standard input and output streams.
 This mode is typically used for local integrations and command-line tools that communicate via stdio.`,
-	RunE: func(_ *cobra.Command, _ []string) error {
-		s, err := mcp.NewServer()
+	RunE: func(cmd *cobra.Command, _ []string) error {
+		s, err := buildMCPServer(cmd.Context())
 		if err != nil {
 			return err
 		}
@@ -39,7 +37,7 @@ This mode is typically used for local integrations and command-line tools that c
 			Str("transport", "stdio").
 			Msg("ready")
 
-		err = serveStdio(s, MCPStdin, MCPStdout, MCPStderr, WithZerolog())
+		err = serveStdio(cmd.Context(), s, MCPStdin, MCPStdout, MCPStderr, WithZerolog())
 		if err != nil && !errors.Is(err, context.Canceled) {
 			return err
 		}
@@ -66,6 +64,7 @@ func WithZerolog() server.StdioOption {
 // It sets up signal handling for graceful shutdown on SIGTERM and SIGINT.
 // Returns an error if the server encounters any issues during operation.
 func serveStdio(
+	ctx context.Context,
 	srv *server.MCPServer,
 	stdin io.Reader,
 	stdout io.Writer,
@@ -79,7 +78,7 @@ func serveStdio(
 		opt(s)
 	}
 
-	ctx, cancel := context.WithCancel(context.Background())
+	ctx, cancel := context.WithCancel(ctx)
 	defer cancel()
 
 	sigChan := make(chan os.Signal, 1)
diff --git a/cmd/serve-stdio_test.go b/cmd/serve-stdio_test.go
index 59aedab..ec9ba0c 100644
--- a/cmd/serve-stdio_test.go
+++ b/cmd/serve-stdio_test.go
@@ -3,6 +3,7 @@ package cmd_test
 import (
 	"bufio"
 	"bytes"
+	goctx "context"
 	"encoding/json"
 	"fmt"
 	"io"
@@ -12,7 +13,9 @@ import (
 	"time"
 
 	"github.com/axone-protocol/axone-mcp/cmd"
+	"github.com/axone-protocol/axone-mcp/internal/mcp"
 	"github.com/axone-protocol/axone-mcp/internal/version"
+	"go.uber.org/mock/gomock"
 
 	. "github.com/smartystreets/goconvey/convey"
 )
@@ -31,18 +34,18 @@ func TestServeStdioCommand(t *testing.T) {
 				input:    `{"jsonrpc": "2.0", "id": 42, "method": "ping", "params": {}}`,
 				expected: `{"jsonrpc":"2.0","id":42,"result":{}}`,
 			},
-			{
-				name:     "hello_world tool (ok)",
-				input:    `{"jsonrpc": "2.0", "id": 42, "method": "tools/call", "params": {"name": "hello_world", "arguments": {"name": "John"}}}`,
-				expected: `{"jsonrpc":"2.0","id":42,"result":{"content":[{"type":"text","text":"Hello, John!"}]}}`,
-			},
 		}
 		for _, tt := range tests {
 			Convey(fmt.Sprintf("Given a new server executed by serve stdio command for %s", tt.name),
-				withCommandArguments([]string{"serve", "stdio"},
+				withCommandArguments([]string{"serve", "stdio", "--dataverse-addr", "whatever"},
 					withPipedIOStreams(func(c C, stdinW io.Writer, stdoutR io.Reader, stderrR io.Reader) {
 						go func() {
-							cmd.Execute()
+							ctrl := gomock.NewController(t)
+							c.Reset(ctrl.Finish)
+
+							dqc := mcp.NewMockQueryClient(ctrl)
+							ctx := cmd.WithDataverseClient(goctx.Background(), dqc)
+							cmd.Execute(ctx)
 						}()
 
 						Convey(fmt.Sprintf("When sending input: %s", tt.input),
diff --git a/cmd/serve.go b/cmd/serve.go
index e335f69..ed6afb9 100644
--- a/cmd/serve.go
+++ b/cmd/serve.go
@@ -1,8 +1,27 @@
 package cmd
 
 import (
+	"context"
+	"crypto/tls"
+	"time"
+
+	"github.com/axone-protocol/axone-mcp/internal/mcp"
+	"github.com/axone-protocol/axone-sdk/dataverse"
+	"github.com/mark3labs/mcp-go/server"
 	"github.com/rs/zerolog/log"
 	"github.com/spf13/cobra"
+	"github.com/spf13/viper"
+	"google.golang.org/grpc"
+	grpccreds "google.golang.org/grpc/credentials"
+	"google.golang.org/grpc/credentials/insecure"
+)
+
+const (
+	FlagNodeGrpc          = "node-grpc"
+	FlagGrpcNoTLS         = "grpc-no-tls"
+	FlagGrpcTLSSkipVerify = "grpc-tls-skip-verify"
+	FlagDataverseAddr     = "dataverse-addr"
+	FlagGrpcTimeout       = "grpc-timeout"
 )
 
 // serveCmd represents the base serve command.
@@ -21,4 +40,74 @@ SSE for web clients, stdio for command-line and local integrations.`,
 
 func init() {
 	rootCmd.AddCommand(serveCmd)
+
+	serveCmd.PersistentFlags().String(FlagNodeGrpc, "127.0.0.1:9090",
+		"Address <host>:<port> of the gRPC endpoint exposed by the axone node")
+	_ = viper.BindPFlag(FlagNodeGrpc, serveCmd.PersistentFlags().Lookup(FlagNodeGrpc))
+
+	serveCmd.PersistentFlags().Bool(FlagGrpcNoTLS, false,
+		"Disable TLS when connecting to the gRPC endpoint")
+	_ = viper.BindPFlag(FlagGrpcNoTLS, serveCmd.PersistentFlags().Lookup(FlagGrpcNoTLS))
+
+	serveCmd.PersistentFlags().Bool(FlagGrpcTLSSkipVerify, false,
+		"Use TLS but skip certificate verification (insecure)")
+	_ = viper.BindPFlag(FlagGrpcTLSSkipVerify, serveCmd.PersistentFlags().Lookup(FlagGrpcTLSSkipVerify))
+
+	serveCmd.PersistentFlags().String(FlagDataverseAddr, "",
+		"Address of the dataverse CosmWasm contract")
+	_ = serveCmd.MarkPersistentFlagRequired(FlagDataverseAddr)
+	_ = viper.BindPFlag(FlagDataverseAddr, serveCmd.PersistentFlags().Lookup(FlagDataverseAddr))
+
+	serveCmd.PersistentFlags().Duration(FlagGrpcTimeout, 5*time.Second,
+		"Timeout for establishing the gRPC connection to the axone node (e.g. 5s, 2m)")
+	_ = viper.BindPFlag(FlagGrpcTimeout, serveCmd.PersistentFlags().Lookup(FlagGrpcTimeout))
+
+	serveCmd.MarkFlagsMutuallyExclusive(FlagGrpcNoTLS, FlagGrpcTLSSkipVerify)
+}
+
+type contextKey string
+
+const dataverseQueryClientKey contextKey = "dataverseQueryClient"
+
+// WithDataverseClient injects a dataverse client into context.
+func WithDataverseClient(ctx context.Context, client dataverse.QueryClient) context.Context {
+	return context.WithValue(ctx, dataverseQueryClientKey, client)
+}
+
+// buildMCPServer creates a new MCP server using the dataverse client from context, or builds a new one.
+func buildMCPServer(ctx context.Context) (*server.MCPServer, error) {
+	client, ok := ctx.Value(dataverseQueryClientKey).(dataverse.QueryClient)
+	if !ok {
+		var err error
+		client, err = buildDataverseClient(ctx)
+		if err != nil {
+			return nil, err
+		}
+	}
+
+	return mcp.NewServer(client)
+}
+
+// buildDataverseClient fetches a new dataverse client using configuration.
+func buildDataverseClient(ctx context.Context) (dataverse.QueryClient, error) {
+	ctx, cancel := context.WithTimeout(ctx, viper.GetDuration(FlagGrpcTimeout))
+	defer cancel()
+
+	return dataverse.NewQueryClient(
+		ctx,
+		viper.GetString(FlagNodeGrpc),
+		viper.GetString(FlagDataverseAddr),
+		grpc.WithTransportCredentials(getTransportCredentials()),
+	)
+}
+
+func getTransportCredentials() grpccreds.TransportCredentials {
+	switch {
+	case viper.GetBool(FlagGrpcNoTLS):
+		return insecure.NewCredentials()
+	case viper.GetBool(FlagGrpcTLSSkipVerify):
+		return grpccreds.NewTLS(&tls.Config{InsecureSkipVerify: true, MinVersion: tls.VersionTLS12}) //nolint:gosec
+	default:
+		return grpccreds.NewTLS(&tls.Config{MinVersion: tls.VersionTLS12})
+	}
 }
diff --git a/cmd/version.go b/cmd/version.go
index 70b4cef..dc5257e 100644
--- a/cmd/version.go
+++ b/cmd/version.go
@@ -5,6 +5,7 @@ import (
 	"strings"
 
 	"github.com/axone-protocol/axone-mcp/internal/version"
+	"github.com/spf13/viper"
 
 	"github.com/spf13/cobra"
 	"gopkg.in/yaml.v2"
@@ -54,5 +55,8 @@ func init() {
 	rootCmd.AddCommand(versionCmd)
 
 	versionCmd.Flags().Bool(flagLong, false, "Print long version information")
+	_ = viper.BindPFlag(flagLong, versionCmd.Flags().Lookup(flagLong))
+
 	versionCmd.Flags().StringP(flagOutput, "o", "text", "Output format (text|json)")
+	_ = viper.BindPFlag(flagOutput, versionCmd.Flags().Lookup(flagOutput))
 }
diff --git a/go.mod b/go.mod
index 63e415f..e11fd5f 100644
--- a/go.mod
+++ b/go.mod
@@ -3,27 +3,208 @@ module github.com/axone-protocol/axone-mcp
 go 1.24
 
 require (
+	github.com/axone-protocol/axone-sdk v1.1.0
 	github.com/justinas/alice v1.2.0
 	github.com/mark3labs/mcp-go v0.18.0
 	github.com/mattn/go-isatty v0.0.20
 	github.com/rs/zerolog v1.34.0
 	github.com/smartystreets/goconvey v1.8.1
 	github.com/spf13/cobra v1.9.1
+	github.com/spf13/viper v1.19.0
+	go.uber.org/mock v0.5.0
+	google.golang.org/grpc v1.68.0
 	gopkg.in/yaml.v2 v2.4.0
+	resenje.org/casbab v0.1.3
 )
 
+// Use cutom fork of prolog interpreter, only needed to build
+replace github.com/ichiban/prolog => github.com/axone-protocol/prolog v1.0.0
+
 require (
+	cosmossdk.io/api v0.7.5 // indirect
+	cosmossdk.io/collections v0.4.0 // indirect
+	cosmossdk.io/core v0.11.1 // indirect
+	cosmossdk.io/depinject v1.0.0 // indirect
+	cosmossdk.io/errors v1.0.1 // indirect
+	cosmossdk.io/log v1.4.1 // indirect
+	cosmossdk.io/math v1.3.0 // indirect
+	cosmossdk.io/store v1.1.1 // indirect
+	cosmossdk.io/x/tx v0.13.5 // indirect
+	cosmossdk.io/x/upgrade v0.1.4 // indirect
+	filippo.io/edwards25519 v1.0.0 // indirect
+	github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
+	github.com/99designs/keyring v1.2.1 // indirect
+	github.com/CosmWasm/wasmd v0.53.0 // indirect
+	github.com/CosmWasm/wasmvm/v2 v2.1.2 // indirect
+	github.com/DataDog/datadog-go v3.2.0+incompatible // indirect
+	github.com/DataDog/zstd v1.5.5 // indirect
+	github.com/VictoriaMetrics/fastcache v1.5.7 // indirect
+	github.com/axone-protocol/axone-contract-schema/go/cognitarium-schema/v5 v5.0.0-20240826124342-6e6abdf73c9a // indirect
+	github.com/axone-protocol/axone-contract-schema/go/dataverse-schema/v5 v5.0.0-20240826124342-6e6abdf73c9a // indirect
+	github.com/axone-protocol/axone-contract-schema/go/law-stone-schema/v5 v5.0.0-20240829161824-0ad316c6fda9 // indirect
+	github.com/axone-protocol/axoned/v10 v10.0.0 // indirect
+	github.com/bahlo/generic-list-go v0.2.0 // indirect
+	github.com/beorn7/perks v1.0.1 // indirect
+	github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect
+	github.com/btcsuite/btcd v0.22.0-beta // indirect
+	github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect
+	github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect
+	github.com/buger/jsonparser v1.1.1 // indirect
+	github.com/cenkalti/backoff/v4 v4.1.3 // indirect
+	github.com/cespare/xxhash v1.1.0 // indirect
+	github.com/cespare/xxhash/v2 v2.3.0 // indirect
+	github.com/cockroachdb/apd/v3 v3.2.1 // indirect
+	github.com/cockroachdb/errors v1.11.3 // indirect
+	github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect
+	github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
+	github.com/cockroachdb/pebble v1.1.1 // indirect
+	github.com/cockroachdb/redact v1.1.5 // indirect
+	github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect
+	github.com/cometbft/cometbft v0.38.12 // indirect
+	github.com/cometbft/cometbft-db v0.11.0 // indirect
+	github.com/cosmos/btcutil v1.0.5 // indirect
+	github.com/cosmos/cosmos-db v1.0.2 // indirect
+	github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect
+	github.com/cosmos/cosmos-sdk v0.50.10 // indirect
+	github.com/cosmos/go-bip39 v1.0.0 // indirect
+	github.com/cosmos/gogogateway v1.2.0 // indirect
+	github.com/cosmos/gogoproto v1.7.0 // indirect
+	github.com/cosmos/iavl v1.2.0 // indirect
+	github.com/cosmos/ibc-go/modules/capability v1.0.1 // indirect
+	github.com/cosmos/ibc-go/v8 v8.4.0 // indirect
+	github.com/cosmos/ics23/go v0.11.0 // indirect
+	github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect
+	github.com/danieljoos/wincred v1.1.2 // indirect
+	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
+	github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect
+	github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect
+	github.com/dgraph-io/badger/v2 v2.2007.4 // indirect
+	github.com/dgraph-io/ristretto v0.1.1 // indirect
+	github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect
+	github.com/distribution/reference v0.5.0 // indirect
+	github.com/dustin/go-humanize v1.0.1 // indirect
+	github.com/dustinxie/ecc v0.0.0-20210511000915-959544187564 // indirect
+	github.com/dvsekhvalnov/jose2go v1.6.0 // indirect
+	github.com/emicklei/dot v1.6.1 // indirect
+	github.com/fatih/color v1.15.0 // indirect
+	github.com/felixge/httpsnoop v1.0.4 // indirect
+	github.com/fsnotify/fsnotify v1.7.0 // indirect
+	github.com/getsentry/sentry-go v0.27.0 // indirect
+	github.com/go-jose/go-jose/v3 v3.0.1 // indirect
+	github.com/go-kit/kit v0.12.0 // indirect
+	github.com/go-kit/log v0.2.1 // indirect
+	github.com/go-logfmt/logfmt v0.6.0 // indirect
+	github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
+	github.com/gogo/googleapis v1.4.1 // indirect
+	github.com/gogo/protobuf v1.3.2 // indirect
+	github.com/golang/glog v1.2.2 // indirect
+	github.com/golang/protobuf v1.5.4 // indirect
+	github.com/golang/snappy v0.0.4 // indirect
+	github.com/google/btree v1.1.2 // indirect
+	github.com/google/go-cmp v0.6.0 // indirect
+	github.com/google/tink/go v1.7.0 // indirect
 	github.com/google/uuid v1.6.0 // indirect
 	github.com/gopherjs/gopherjs v1.17.2 // indirect
+	github.com/gorilla/handlers v1.5.2 // indirect
+	github.com/gorilla/mux v1.8.1 // indirect
+	github.com/gorilla/websocket v1.5.3 // indirect
+	github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
+	github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect
+	github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
+	github.com/hashicorp/go-hclog v1.5.0 // indirect
+	github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
+	github.com/hashicorp/go-metrics v0.5.3 // indirect
+	github.com/hashicorp/go-plugin v1.5.2 // indirect
+	github.com/hashicorp/golang-lru v1.0.2 // indirect
+	github.com/hashicorp/hcl v1.0.0 // indirect
+	github.com/hashicorp/yamux v0.1.1 // indirect
+	github.com/hdevalence/ed25519consensus v0.1.0 // indirect
+	github.com/huandu/skiplist v1.2.0 // indirect
+	github.com/hyperledger/aries-framework-go v0.3.2 // indirect
+	github.com/hyperledger/aries-framework-go/component/kmscrypto v0.0.0-20230427134832-0c9969493bd3 // indirect
+	github.com/hyperledger/aries-framework-go/component/log v0.0.0-20230427134832-0c9969493bd3 // indirect
+	github.com/hyperledger/aries-framework-go/component/models v0.0.0-20230501135648-a9a7ad029347 // indirect
+	github.com/hyperledger/aries-framework-go/spi v0.0.0-20230427134832-0c9969493bd3 // indirect
+	github.com/hyperledger/ursa-wrapper-go v0.3.1 // indirect
+	github.com/iancoleman/strcase v0.3.0 // indirect
+	github.com/ichiban/prolog v1.2.0 // indirect
+	github.com/improbable-eng/grpc-web v0.15.0 // indirect
 	github.com/inconshreveable/mousetrap v1.1.0 // indirect
+	github.com/jmhodges/levigo v1.0.0 // indirect
 	github.com/jtolds/gls v4.20.0+incompatible // indirect
-	github.com/kr/pretty v0.3.0 // indirect
+	github.com/kilic/bls12-381 v0.1.1-0.20210503002446-7b7597926c69 // indirect
+	github.com/klauspost/compress v1.17.9 // indirect
+	github.com/kr/pretty v0.3.1 // indirect
+	github.com/kr/text v0.2.0 // indirect
+	github.com/linxGnu/grocksdb v1.8.14 // indirect
+	github.com/magiconair/properties v1.8.7 // indirect
+	github.com/mailru/easyjson v0.7.7 // indirect
 	github.com/mattn/go-colorable v0.1.13 // indirect
-	github.com/rogpeppe/go-internal v1.8.0 // indirect
+	github.com/mitchellh/go-testing-interface v1.14.1 // indirect
+	github.com/mitchellh/mapstructure v1.5.0 // indirect
+	github.com/mr-tron/base58 v1.2.0 // indirect
+	github.com/mtibben/percent v0.2.1 // indirect
+	github.com/multiformats/go-base32 v0.1.0 // indirect
+	github.com/multiformats/go-base36 v0.1.0 // indirect
+	github.com/multiformats/go-multibase v0.2.0 // indirect
+	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
+	github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect
+	github.com/oklog/run v1.1.0 // indirect
+	github.com/opencontainers/go-digest v1.0.0 // indirect
+	github.com/pelletier/go-toml/v2 v2.2.2 // indirect
+	github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 // indirect
+	github.com/piprate/json-gold v0.5.1-0.20230111113000-6ddbe6e6f19f // indirect
+	github.com/pkg/errors v0.9.1 // indirect
+	github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+	github.com/pquerna/cachecontrol v0.1.0 // indirect
+	github.com/prometheus/client_golang v1.20.1 // indirect
+	github.com/prometheus/client_model v0.6.1 // indirect
+	github.com/prometheus/common v0.55.0 // indirect
+	github.com/prometheus/procfs v0.15.1 // indirect
+	github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
+	github.com/rogpeppe/go-internal v1.12.0 // indirect
+	github.com/rs/cors v1.11.1 // indirect
 	github.com/rs/xid v1.6.0 // indirect
+	github.com/sagikazarmark/locafero v0.4.0 // indirect
+	github.com/sagikazarmark/slog-shim v0.1.0 // indirect
+	github.com/samber/lo v1.39.0 // indirect
+	github.com/sasha-s/go-deadlock v0.3.1 // indirect
+	github.com/shamaton/msgpack/v2 v2.2.0 // indirect
 	github.com/smarty/assertions v1.15.0 // indirect
+	github.com/sourcegraph/conc v0.3.0 // indirect
+	github.com/spf13/afero v1.11.0 // indirect
+	github.com/spf13/cast v1.7.0 // indirect
 	github.com/spf13/pflag v1.0.6 // indirect
+	github.com/stretchr/testify v1.10.0 // indirect
+	github.com/subosito/gotenv v1.6.0 // indirect
+	github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect
+	github.com/tendermint/go-amino v0.16.0 // indirect
+	github.com/teserakt-io/golang-ed25519 v0.0.0-20210104091850-3888c087a4c8 // indirect
+	github.com/tidwall/btree v1.7.0 // indirect
+	github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
+	github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
+	github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
+	github.com/xeipuuv/gojsonschema v1.2.0 // indirect
 	github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
-	golang.org/x/sys v0.12.0 // indirect
-	gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
+	github.com/zondax/hid v0.9.2 // indirect
+	github.com/zondax/ledger-go v0.14.3 // indirect
+	go.etcd.io/bbolt v1.3.10 // indirect
+	go.uber.org/multierr v1.11.0 // indirect
+	golang.org/x/crypto v0.31.0 // indirect
+	golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 // indirect
+	golang.org/x/net v0.33.0 // indirect
+	golang.org/x/sync v0.10.0 // indirect
+	golang.org/x/sys v0.29.0 // indirect
+	golang.org/x/term v0.27.0 // indirect
+	golang.org/x/text v0.21.0 // indirect
+	google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
+	google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8 // indirect
+	google.golang.org/protobuf v1.36.1 // indirect
+	gopkg.in/ini.v1 v1.67.0 // indirect
+	gopkg.in/yaml.v3 v3.0.1 // indirect
+	gotest.tools/v3 v3.5.1 // indirect
+	nhooyr.io/websocket v1.8.6 // indirect
+	pgregory.net/rapid v1.1.0 // indirect
+	sigs.k8s.io/yaml v1.4.0 // indirect
 )
diff --git a/go.sum b/go.sum
index a350f0b..1e12e87 100644
--- a/go.sum
+++ b/go.sum
@@ -1,69 +1,1212 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM=
+cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4=
+cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
+cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY=
+cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY=
+cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc=
+cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI=
+cloud.google.com/go/storage v1.38.0 h1:Az68ZRGlnNTpIBbLjSMIV2BDcwwXYlRlQzis0llkpJg=
+cloud.google.com/go/storage v1.38.0/go.mod h1:tlUADB0mAb9BgYls9lq+8MGkfzOXuLrnHXlpHmvFJoY=
+cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ=
+cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38=
+cosmossdk.io/client/v2 v2.0.0-beta.1 h1:XkHh1lhrLYIT9zKl7cIOXUXg2hdhtjTPBUfqERNA1/Q=
+cosmossdk.io/client/v2 v2.0.0-beta.1/go.mod h1:JEUSu9moNZQ4kU3ir1DKD5eU4bllmAexrGWjmb9k8qU=
+cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s=
+cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0=
+cosmossdk.io/core v0.11.1 h1:h9WfBey7NAiFfIcUhDVNS503I2P2HdZLebJlUIs8LPA=
+cosmossdk.io/core v0.11.1/go.mod h1:OJzxcdC+RPrgGF8NJZR2uoQr56tc7gfBKhiKeDO7hH0=
+cosmossdk.io/depinject v1.0.0 h1:dQaTu6+O6askNXO06+jyeUAnF2/ssKwrrszP9t5q050=
+cosmossdk.io/depinject v1.0.0/go.mod h1:zxK/h3HgHoA/eJVtiSsoaRaRA2D5U4cJ5thIG4ssbB8=
+cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0=
+cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U=
+cosmossdk.io/log v1.4.1 h1:wKdjfDRbDyZRuWa8M+9nuvpVYxrEOwbD/CA8hvhU8QM=
+cosmossdk.io/log v1.4.1/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU=
+cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE=
+cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k=
+cosmossdk.io/store v1.1.1 h1:NA3PioJtWDVU7cHHeyvdva5J/ggyLDkyH0hGHl2804Y=
+cosmossdk.io/store v1.1.1/go.mod h1:8DwVTz83/2PSI366FERGbWSH7hL6sB7HbYp8bqksNwM=
+cosmossdk.io/x/circuit v0.1.1 h1:KPJCnLChWrxD4jLwUiuQaf5mFD/1m7Omyo7oooefBVQ=
+cosmossdk.io/x/circuit v0.1.1/go.mod h1:B6f/urRuQH8gjt4eLIXfZJucrbreuYrKh5CSjaOxr+Q=
+cosmossdk.io/x/evidence v0.1.1 h1:Ks+BLTa3uftFpElLTDp9L76t2b58htjVbSZ86aoK/E4=
+cosmossdk.io/x/evidence v0.1.1/go.mod h1:OoDsWlbtuyqS70LY51aX8FBTvguQqvFrt78qL7UzeNc=
+cosmossdk.io/x/feegrant v0.1.1 h1:EKFWOeo/pup0yF0svDisWWKAA9Zags6Zd0P3nRvVvw8=
+cosmossdk.io/x/feegrant v0.1.1/go.mod h1:2GjVVxX6G2fta8LWj7pC/ytHjryA6MHAJroBWHFNiEQ=
+cosmossdk.io/x/tx v0.13.5 h1:FdnU+MdmFWn1pTsbfU0OCf2u6mJ8cqc1H4OMG418MLw=
+cosmossdk.io/x/tx v0.13.5/go.mod h1:V6DImnwJMTq5qFjeGWpXNiT/fjgE4HtmclRmTqRVM3w=
+cosmossdk.io/x/upgrade v0.1.4 h1:/BWJim24QHoXde8Bc64/2BSEB6W4eTydq0X/2f8+g38=
+cosmossdk.io/x/upgrade v0.1.4/go.mod h1:9v0Aj+fs97O+Ztw+tG3/tp5JSlrmT7IcFhAebQHmOPo=
+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek=
+filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=
+github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs=
+github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4=
+github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o=
+github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/CosmWasm/wasmd v0.53.0 h1:kdaoAi20bIb4VCsxw9pRaT2g5PpIp82Wqrr9DRVN9ao=
+github.com/CosmWasm/wasmd v0.53.0/go.mod h1:FJl/aWjdpGof3usAMFQpDe07Rkx77PUzp0cygFMOvtw=
+github.com/CosmWasm/wasmvm/v2 v2.1.2 h1:GkJ5bAsRlLHfIQVg/FY1VHwLyBwlCjAhDea0B8L+e20=
+github.com/CosmWasm/wasmvm/v2 v2.1.2/go.mod h1:bMhLQL4Yp9CzJi9A83aR7VO9wockOsSlZbT4ztOl6bg=
+github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4=
+github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
+github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ=
+github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
+github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
+github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
+github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
+github.com/PaesslerAG/gval v1.1.0 h1:k3RuxeZDO3eejD4cMPSt+74tUSvTnbGvLx0df4mdwFc=
+github.com/PaesslerAG/gval v1.1.0/go.mod h1:y/nm5yEyTeX6av0OfKJNp9rBNj2XrGhAf5+v24IBN1I=
+github.com/PaesslerAG/jsonpath v0.1.1 h1:c1/AToHQMVsduPAa4Vh6xp2U0evy4t8SWp8imEsylIk=
+github.com/PaesslerAG/jsonpath v0.1.1/go.mod h1:lVboNxFGal/VwW6d9JzIy56bUsYAP6tH/x80vjnCseY=
+github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
+github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
+github.com/VictoriaMetrics/fastcache v1.5.7 h1:4y6y0G8PRzszQUYIQHHssv/jgPHAb5qQuuDNdCbyAgw=
+github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8=
+github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE=
+github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
+github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
+github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
+github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8=
+github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM=
+github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
+github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
+github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
+github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
+github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
+github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
+github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
+github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
+github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
+github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
+github.com/aws/aws-sdk-go v1.44.224 h1:09CiaaF35nRmxrzWZ2uRq5v6Ghg/d2RiPjZnSgtt+RQ=
+github.com/aws/aws-sdk-go v1.44.224/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
+github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
+github.com/axone-protocol/axone-contract-schema/go/cognitarium-schema/v5 v5.0.0-20240826124342-6e6abdf73c9a h1:NiUW3TLonb/YqkPtv9eaQFtVKvlBnCSwlBxsYCOsOsw=
+github.com/axone-protocol/axone-contract-schema/go/cognitarium-schema/v5 v5.0.0-20240826124342-6e6abdf73c9a/go.mod h1:50VhFXluOq+7HLCsYhE/iaw3yRKohfC4i5dotePt8UI=
+github.com/axone-protocol/axone-contract-schema/go/dataverse-schema/v5 v5.0.0-20240826124342-6e6abdf73c9a h1:l4I0GhJitReEy+Sa5lSBN/fyjO8ISuduFxw3n7DHajE=
+github.com/axone-protocol/axone-contract-schema/go/dataverse-schema/v5 v5.0.0-20240826124342-6e6abdf73c9a/go.mod h1:ztbeFSQhlyxmoBMdCDXT3k9I8VswfCeq3F8TVrxpPVg=
+github.com/axone-protocol/axone-contract-schema/go/law-stone-schema/v5 v5.0.0-20240829161824-0ad316c6fda9 h1:i5TEHxnkprtp3uOz4nXokxWzGxjLEKYJmRfKsQ6HYzY=
+github.com/axone-protocol/axone-contract-schema/go/law-stone-schema/v5 v5.0.0-20240829161824-0ad316c6fda9/go.mod h1:en5YIi2VcOYS8vkUGB6HzAUfTk3miolwnzm+Qs9FtfM=
+github.com/axone-protocol/axone-sdk v1.1.0 h1:ONqCCQklNsWyz4e+bVPu0ot+9Rt8b2YBFf8DgHKPHyg=
+github.com/axone-protocol/axone-sdk v1.1.0/go.mod h1:PAIQa1QVt3fasyJT4TztZGCAKsC/MOnvDaU5vGxGBI0=
+github.com/axone-protocol/axoned/v10 v10.0.0 h1:ck3IiVkldhuXTyIK17Q83P9tgbhYkood7qUF9/+yWLg=
+github.com/axone-protocol/axoned/v10 v10.0.0/go.mod h1:RFL9hutVTROqqiQxp/4Z7OrghQ7JvZ9ykissftQGLKM=
+github.com/axone-protocol/prolog v1.0.0 h1:CASA1QrPOWhYox8YUStML33rekoA/7Gnp/ldDPZqCTA=
+github.com/axone-protocol/prolog v1.0.0/go.mod h1:lbZPekEi6qr5WX29GgEmhZlTxUkeWeiJ8cZZRq8qjAE=
+github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk=
+github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
+github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas=
+github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4=
+github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
+github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s=
+github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
+github.com/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5MS5JVb4c=
+github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8=
+github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
+github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo=
+github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA=
+github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ=
+github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04=
+github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c=
+github.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE=
+github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
+github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
+github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ=
+github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o=
+github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
+github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY=
+github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I=
+github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
+github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
+github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY=
+github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
+github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY=
+github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE=
+github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
+github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
+github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
+github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
+github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
+github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4=
+github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
+github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
+github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
+github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
+github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI=
+github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk=
+github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
+github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
+github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
+github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
+github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E=
+github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw=
+github.com/cockroachdb/apd/v3 v3.2.1 h1:U+8j7t0axsIgvQUqthuNm82HIrYXodOV2iWLWtEaIwg=
+github.com/cockroachdb/apd/v3 v3.2.1/go.mod h1:klXJcjp+FffLTHlhIG69tezTDvdP065naDsHzKhYSqc=
+github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
+github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4=
+github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU=
+github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I=
+github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8=
+github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/esnpM7Geqxka4WSqI1SZc7sMJFd3y4=
+github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M=
+github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE=
+github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=
+github.com/cockroachdb/pebble v1.1.1 h1:XnKU22oiCLy2Xn8vp1re67cXg4SAasg/WDt1NtcRFaw=
+github.com/cockroachdb/pebble v1.1.1/go.mod h1:4exszw1r40423ZsmkG/09AFEG83I0uDgfujJdbL6kYU=
+github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30=
+github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
+github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo=
+github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ=
+github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
+github.com/cometbft/cometbft v0.38.12 h1:OWsLZN2KcSSFe8bet9xCn07VwhBnavPea3VyPnNq1bg=
+github.com/cometbft/cometbft v0.38.12/go.mod h1:GPHp3/pehPqgX1930HmK1BpBLZPxB75v/dZg8Viwy+o=
+github.com/cometbft/cometbft-db v0.11.0 h1:M3Lscmpogx5NTbb1EGyGDaFRdsoLWrUWimFEyf7jej8=
+github.com/cometbft/cometbft-db v0.11.0/go.mod h1:GDPJAC/iFHNjmZZPN8V8C1yr/eyityhi2W1hz2MGKSc=
+github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
+github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
 github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
+github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk=
+github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis=
+github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAKs=
+github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA=
+github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA=
+github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec=
+github.com/cosmos/cosmos-sdk v0.50.10 h1:zXfeu/z653tWZARr/jESzAEiCUYjgJwwG4ytnYWMoDM=
+github.com/cosmos/cosmos-sdk v0.50.10/go.mod h1:6Eesrx3ZE7vxBZWpK++30H+Uc7Q4ahQWCL7JKU/LEdU=
+github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY=
+github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw=
+github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE=
+github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI=
+github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU=
+github.com/cosmos/gogoproto v1.7.0 h1:79USr0oyXAbxg3rspGh/m4SWNyoz/GLaAh0QlCe2fro=
+github.com/cosmos/gogoproto v1.7.0/go.mod h1:yWChEv5IUEYURQasfyBW5ffkMHR/90hiHgbNgrtp4j0=
+github.com/cosmos/iavl v1.2.0 h1:kVxTmjTh4k0Dh1VNL046v6BXqKziqMDzxo93oh3kOfM=
+github.com/cosmos/iavl v1.2.0/go.mod h1:HidWWLVAtODJqFD6Hbne2Y0q3SdxByJepHUOeoH4LiI=
+github.com/cosmos/ibc-go/modules/capability v1.0.1 h1:ibwhrpJ3SftEEZRxCRkH0fQZ9svjthrX2+oXdZvzgGI=
+github.com/cosmos/ibc-go/modules/capability v1.0.1/go.mod h1:rquyOV262nGJplkumH+/LeYs04P3eV8oB7ZM4Ygqk4E=
+github.com/cosmos/ibc-go/v8 v8.4.0 h1:K2PfX0AZ+1XKZytHGEMuSjQXG/MZshPb83RSTQt2+cE=
+github.com/cosmos/ibc-go/v8 v8.4.0/go.mod h1:zh6x1osR0hNvEcFrC/lhGD08sMfQmr9wHVvZ/mRWMCs=
+github.com/cosmos/ics23/go v0.11.0 h1:jk5skjT0TqX5e5QJbEnwXIS2yI2vnmLOgpQPeM5RtnU=
+github.com/cosmos/ics23/go v0.11.0/go.mod h1:A8OjxPE67hHST4Icw94hOxxFEJMBG031xIGF/JHNIY0=
+github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM=
+github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8=
+github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
+github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
+github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0=
+github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0=
+github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y=
+github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo=
+github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg=
+github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0=
+github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218=
+github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I=
+github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE=
+github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o=
+github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk=
+github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E=
+github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8=
+github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
+github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=
+github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
+github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
+github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
+github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
+github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
+github.com/dustinxie/ecc v0.0.0-20210511000915-959544187564 h1:I6KUy4CI6hHjqnyJLNCEi7YHVMkwwtfSr2k9splgdSM=
+github.com/dustinxie/ecc v0.0.0-20210511000915-959544187564/go.mod h1:yekO+3ZShy19S+bsmnERmznGy9Rfg6dWWWpiGJjNAz8=
+github.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY=
+github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU=
+github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
+github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
+github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
+github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
+github.com/emicklei/dot v1.6.1 h1:ujpDlBkkwgWUY+qPId5IwapRW/xEoligRSYjioR6DFI=
+github.com/emicklei/dot v1.6.1/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s=
+github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
+github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
+github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
+github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
+github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
+github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
+github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
+github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
+github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
+github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
+github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
+github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
+github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
+github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps=
+github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
+github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
+github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
+github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8=
+github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk=
+github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
+github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-jose/go-jose/v3 v3.0.1 h1:pWmKFVtt+Jl0vBZTIpz/eAKwsm6LkIxDVVbFHKkchhA=
+github.com/go-jose/go-jose/v3 v3.0.1/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8=
+github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
+github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4=
+github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs=
+github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
+github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
+github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
+github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
+github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
+github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
+github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
+github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
+github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
+github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
+github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
+github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
+github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
+github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
+github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ=
+github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
+github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
+github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
+github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU=
+github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM=
+github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
+github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og=
+github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
+github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo=
+github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
+github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
+github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
+github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0=
+github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
+github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c=
+github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0=
+github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
+github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/glog v1.2.2 h1:1+mZ9upx1Dh6FmUTFR1naJ77miKiXgALjWOZ3NVFPmY=
+github.com/golang/glog v1.2.2/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
+github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
+github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
+github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
+github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU=
+github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
+github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us=
+github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20=
+github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
+github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
+github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
+github.com/google/tink/go v1.7.0 h1:6Eox8zONGebBFcCBqkVmt60LaWZa6xg1cl/DwAh/J1w=
+github.com/google/tink/go v1.7.0/go.mod h1:GAUOd+QE3pgj9q8VKIGTCP33c/B7eb4NhxLcgTJZStM=
+github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
 github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
+github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
+github.com/googleapis/gax-go/v2 v2.12.3 h1:5/zPPDvw8Q1SuXjrqrZslrqT7dL/uJT2CQii/cLCKqA=
+github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4=
+github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
 github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g=
 github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k=
+github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
+github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE=
+github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w=
+github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
+github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
+github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
+github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
+github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI=
+github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI=
+github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
+github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
+github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
+github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU=
+github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=
+github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
+github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
+github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
+github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
+github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
+github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
+github.com/hashicorp/go-getter v1.7.5 h1:dT58k9hQ/vbxNMwoI5+xFYAJuv6152UNvdHokfI5wE4=
+github.com/hashicorp/go-getter v1.7.5/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744=
+github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c=
+github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
+github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
+github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
+github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
+github.com/hashicorp/go-metrics v0.5.3 h1:M5uADWMOGCTUNU1YuC4hfknOeHNaX54LDm4oYSucoNE=
+github.com/hashicorp/go-metrics v0.5.3/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE=
+github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
+github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
+github.com/hashicorp/go-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y=
+github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4=
+github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
+github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
+github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo=
+github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I=
+github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
+github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
+github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE=
+github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
+github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/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=
+github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
+github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
+github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
+github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
+github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
+github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
+github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE=
+github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ=
+github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU=
+github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c=
+github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U=
+github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw=
+github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w=
+github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
+github.com/hyperledger/aries-framework-go v0.3.2 h1:GsSUaSEW82cr5X8b3Qf90GAi37kmTKHqpPJLhar13X8=
+github.com/hyperledger/aries-framework-go v0.3.2/go.mod h1:SorUysWEBw+uyXhY5RAtg2iyNkWTIIPM8+Slkt1Spno=
+github.com/hyperledger/aries-framework-go/component/kmscrypto v0.0.0-20230427134832-0c9969493bd3 h1:PCbDSujjQ6oTEnAHgtThNmbS7SPAYEDBlKOnZFE+Ujw=
+github.com/hyperledger/aries-framework-go/component/kmscrypto v0.0.0-20230427134832-0c9969493bd3/go.mod h1:aEk0vHBmZsAdDfXaI12Kg5ipZGiB3qNqgbPt/e/Hm2s=
+github.com/hyperledger/aries-framework-go/component/log v0.0.0-20230427134832-0c9969493bd3 h1:x5qFQraTX86z9GCwF28IxfnPm6QH5YgHaX+4x97Jwvw=
+github.com/hyperledger/aries-framework-go/component/log v0.0.0-20230427134832-0c9969493bd3/go.mod h1:CvYs4l8X2NrrF93weLOu5RTOIJeVdoZITtjEflyuTyM=
+github.com/hyperledger/aries-framework-go/component/models v0.0.0-20230501135648-a9a7ad029347 h1:oPGUCpmnm7yxsVllcMQnHF3uc3hy4jfrSCh7nvzXA00=
+github.com/hyperledger/aries-framework-go/component/models v0.0.0-20230501135648-a9a7ad029347/go.mod h1:nF8fHsYY+GZl74AFAQaKAhYWOOSaLVzW/TZ0Sq/6axI=
+github.com/hyperledger/aries-framework-go/component/storageutil v0.0.0-20230427134832-0c9969493bd3 h1:JGYA9l5zTlvsvfnXT9hYPpCokAjmVKX0/r7njba7OX4=
+github.com/hyperledger/aries-framework-go/component/storageutil v0.0.0-20230427134832-0c9969493bd3/go.mod h1:aSG2dWjYVzu2PVBtOqsYghaChA5+UUXnBbL+MfVceYQ=
+github.com/hyperledger/aries-framework-go/spi v0.0.0-20230427134832-0c9969493bd3 h1:ytWmOQZIYQfVJ4msFvrqlp6d+ZLhT43wS8rgE2m+J1A=
+github.com/hyperledger/aries-framework-go/spi v0.0.0-20230427134832-0c9969493bd3/go.mod h1:oryUyWb23l/a3tAP9KW+GBbfcfqp9tZD4y5hSkFrkqI=
+github.com/hyperledger/ursa-wrapper-go v0.3.1 h1:Do+QrVNniY77YK2jTIcyWqj9rm/Yb5SScN0bqCjiibA=
+github.com/hyperledger/ursa-wrapper-go v0.3.1/go.mod h1:nPSAuMasIzSVciQo22PedBk4Opph6bJ6ia3ms7BH/mk=
+github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
+github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
+github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ=
+github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8=
+github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
 github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
+github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
+github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
+github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
+github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls=
+github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k=
+github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg=
+github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
+github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
+github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
+github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
+github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U=
+github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ=
+github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
+github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
+github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+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/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
 github.com/justinas/alice v1.2.0 h1:+MHSA/vccVCF4Uq37S42jwlkvI2Xzl7zTPCN5BnZNVo=
 github.com/justinas/alice v1.2.0/go.mod h1:fN5HRH/reO/zrUflLfTN43t3vXvKzvZIENsNEe7i7qA=
+github.com/kilic/bls12-381 v0.1.1-0.20210503002446-7b7597926c69 h1:kMJlf8z8wUcpyI+FQJIdGjAhfTww1y0AbQEv86bpVQI=
+github.com/kilic/bls12-381 v0.1.1-0.20210503002446-7b7597926c69/go.mod h1:tlkavyke+Ac7h8R3gZIjI5LKBcvMlSWnXNMgT3vZXo8=
+github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
+github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
+github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
+github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
+github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
+github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
+github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
+github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
-github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
+github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
+github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
+github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
+github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
+github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
+github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
+github.com/linxGnu/grocksdb v1.8.14 h1:HTgyYalNwBSG/1qCQUIott44wU5b2Y9Kr3z7SK5OfGQ=
+github.com/linxGnu/grocksdb v1.8.14/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA=
+github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
+github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
+github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
+github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
+github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
+github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA=
+github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg=
 github.com/mark3labs/mcp-go v0.18.0 h1:YuhgIVjNlTG2ZOwmrkORWyPTp0dz1opPEqvsPtySXao=
 github.com/mark3labs/mcp-go v0.18.0/go.mod h1:KmJndYv7GIgcPVwEKJjNcbhVQ+hJGJhrCCB/9xITzpE=
+github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
+github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
+github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
 github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
 github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
+github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
+github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
+github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
+github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
 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/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
+github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g=
+github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ=
+github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g=
+github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
+github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU=
+github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
+github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
+github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
+github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=
+github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=
+github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
+github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
+github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
+github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+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 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
+github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
+github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs=
+github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns=
+github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE=
+github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI=
+github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4=
+github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM=
+github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g=
+github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk=
+github.com/multiformats/go-multihash v0.0.13 h1:06x+mk/zj1FoMsgNejLpy6QTvJqlSt/BhLEy87zidlc=
+github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc=
+github.com/multiformats/go-varint v0.0.5 h1:XVZwSo04Cs3j/jS0uAEPpT3JY6DzMcVLLoWOSnCxOjg=
+github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
+github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
+github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU=
+github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo=
+github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
+github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
+github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=
+github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w=
+github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
+github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
+github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
+github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
+github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
+github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
+github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a h1:dlRvE5fWabOchtH7znfiFCcOvmIYgOeAS5ifBXBlh9Q=
+github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s=
+github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
+github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
+github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA=
+github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU=
+github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
+github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
+github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
+github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
+github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
+github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
+github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
+github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
+github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
+github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro=
+github.com/onsi/gomega v1.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q=
+github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM=
+github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
+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/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
+github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
+github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
+github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
+github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA=
+github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
+github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
+github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
+github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
+github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
+github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
+github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
+github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
+github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
+github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
+github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
+github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o=
+github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 h1:jik8PHtAIsPlCRJjJzl4udgEf7hawInF9texMeO2jrU=
+github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
+github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
+github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
+github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
+github.com/piprate/json-gold v0.5.1-0.20230111113000-6ddbe6e6f19f h1:HlPa7RcxTCrva5izPfTEfvYecO7LTahgmMRD1Qp13xg=
+github.com/piprate/json-gold v0.5.1-0.20230111113000-6ddbe6e6f19f/go.mod h1:WZ501QQMbZZ+3pXFPhQKzNwS1+jls0oqov3uQ2WasLs=
 github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
-github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
-github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
+github.com/pquerna/cachecontrol v0.1.0 h1:yJMy84ti9h/+OEWa752kBTKv4XC30OtVVHYv/8cTqKc=
+github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
+github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
+github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
+github.com/prometheus/client_golang v1.20.1 h1:IMJXHOD6eARkQpxo8KkhgEVFlBNm+nkrFUyGlIu7Na8=
+github.com/prometheus/client_golang v1.20.1/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
+github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
+github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
+github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
+github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc=
+github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
+github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
+github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
+github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
+github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=
+github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
+github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
+github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
+github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
+github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
+github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
+github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
+github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA=
+github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
 github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU=
 github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
 github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY=
 github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ=
+github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
+github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
+github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
+github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
+github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
+github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
+github.com/samber/lo v1.39.0 h1:4gTz1wUhNYLhFSKl6O+8peW0v2F4BCY034GRpU9WnuA=
+github.com/samber/lo v1.39.0/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
+github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
+github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0=
+github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM=
+github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
+github.com/shamaton/msgpack/v2 v2.2.0 h1:IP1m01pHwCrMa6ZccP9B3bqxEMKMSmMVAVKk54g3L/Y=
+github.com/shamaton/msgpack/v2 v2.2.0/go.mod h1:6khjYnkx73f7VQU7wjcFS9DFjs+59naVWJv1TB7qdOI=
+github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
+github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
+github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
 github.com/smarty/assertions v1.15.0 h1:cR//PqUBUiQRakZWqBiFFQ9wb8emQGDb0HeGdqGByCY=
 github.com/smarty/assertions v1.15.0/go.mod h1:yABtdzeQs6l1brC900WlRNwj6ZR55d7B+E8C6HtKdec=
+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
+github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/smartystreets/goconvey v1.8.1 h1:qGjIddxOk4grTu9JPOU31tVfq3cNdBlNa5sSznIX1xY=
 github.com/smartystreets/goconvey v1.8.1/go.mod h1:+/u4qLyY6x1jReYOp7GOM2FSt8aP9CzCZL03bI28W60=
+github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
+github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
+github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
+github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
+github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
+github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
+github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
+github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
+github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
+github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
+github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
+github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
+github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
 github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
 github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
+github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
+github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
 github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
+github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
+github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg=
+github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
+github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
+github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
+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.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
+github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
+github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
+github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs=
+github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48=
+github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E=
+github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME=
+github.com/teserakt-io/golang-ed25519 v0.0.0-20210104091850-3888c087a4c8 h1:RBkacARv7qY5laaXGlF4wFB/tk5rnthhPb8oIBGoagY=
+github.com/teserakt-io/golang-ed25519 v0.0.0-20210104091850-3888c087a4c8/go.mod h1:9PdLyPiZIiW3UopXyRnPYyjUXSpiQNHRLu8fOsR3o8M=
+github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI=
+github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
+github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
+github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
+github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
+github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
+github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
+github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
+github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
+github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
+github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
+github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
+github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc=
+github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw=
+github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
+github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
+github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
+github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
+github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
+github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
+github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
+github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
+github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4=
 github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U=
+github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM=
+github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw=
+github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI=
+go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
+go.etcd.io/bbolt v1.3.10 h1:+BqfJTcCzTItrop8mq/lbzL8wSGtj94UO/3U31shqG0=
+go.etcd.io/bbolt v1.3.10/go.mod h1:bK3UQLPJZly7IlNmV7uVHJDxfe5aK9Ll93e/74Y9oEQ=
+go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
+go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
+go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
+go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
+go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
+go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
+go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=
+go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=
+go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
+go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
+go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
+go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
+go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
+go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
+go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU=
+go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM=
+go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
+go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
+go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
+go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
+go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
+go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
+go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
+go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
+go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
+golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
+golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
+golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 h1:985EYyeCOxTpcgOTJpflJUwOeEz0CQOdPt73OzpE9F8=
+golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI=
+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
+golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
+golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
+golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
+golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
+golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
+golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
+golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
 golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
+golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
+golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
+golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
+golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
+google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
+google.golang.org/api v0.171.0 h1:w174hnBPqut76FzW5Qaupt7zY8Kql6fiVjgys4f58sU=
+google.golang.org/api v0.171.0/go.mod h1:Hnq5AHm4OTMt2BUVjael2CWZFD6vksJdWCWiUAmjC9o=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
+google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc=
+google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8 h1:TqExAhdPaB60Ux47Cn0oLV07rGnxZzIsaRhQaqS666A=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8/go.mod h1:lcTa1sDdWEIHMWlITnIczmw5w60CF9ffkb8Z+DVmmjA=
+google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
+google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
+google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
+google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
+google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
+google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0=
+google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=
+google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
+gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
+gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
+gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/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=
+gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
+gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
+honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
+nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k=
+nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0=
+pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw=
+pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
+resenje.org/casbab v0.1.3 h1:Cu8uGmgnEdmEYw1TD3zluW4cKFfEmNMmE7rLoo97hjo=
+resenje.org/casbab v0.1.3/go.mod h1:2NteDd9oK1kIHhT25jbM9bI76AHLqvAxQPGgha8p2FA=
+sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
+sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
+sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
+sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
diff --git a/internal/mcp/dataverse_mocks.go b/internal/mcp/dataverse_mocks.go
new file mode 100644
index 0000000..b350b48
--- /dev/null
+++ b/internal/mcp/dataverse_mocks.go
@@ -0,0 +1,101 @@
+// Code generated by MockGen. DO NOT EDIT.
+// Source: github.com/axone-protocol/axone-sdk/dataverse (interfaces: QueryClient)
+//
+// Generated by this command:
+//
+//	mockgen -destination=internal/mcp/dataverse_mocks_test.go -package=mcp github.com/axone-protocol/axone-sdk/dataverse QueryClient
+//
+
+// Package mcp is a generated GoMock package.
+package mcp
+
+import (
+	context "context"
+	reflect "reflect"
+
+	gomock "go.uber.org/mock/gomock"
+)
+
+// MockQueryClient is a mock of QueryClient interface.
+type MockQueryClient struct {
+	ctrl     *gomock.Controller
+	recorder *MockQueryClientMockRecorder
+	isgomock struct{}
+}
+
+// MockQueryClientMockRecorder is the mock recorder for MockQueryClient.
+type MockQueryClientMockRecorder struct {
+	mock *MockQueryClient
+}
+
+// NewMockQueryClient creates a new mock instance.
+func NewMockQueryClient(ctrl *gomock.Controller) *MockQueryClient {
+	mock := &MockQueryClient{ctrl: ctrl}
+	mock.recorder = &MockQueryClientMockRecorder{mock}
+	return mock
+}
+
+// EXPECT returns an object that allows the caller to indicate expected use.
+func (m *MockQueryClient) EXPECT() *MockQueryClientMockRecorder {
+	return m.recorder
+}
+
+// AskGovPermittedActions mocks base method.
+func (m *MockQueryClient) AskGovPermittedActions(arg0 context.Context, arg1, arg2 string) ([]string, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "AskGovPermittedActions", arg0, arg1, arg2)
+	ret0, _ := ret[0].([]string)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// AskGovPermittedActions indicates an expected call of AskGovPermittedActions.
+func (mr *MockQueryClientMockRecorder) AskGovPermittedActions(arg0, arg1, arg2 any) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AskGovPermittedActions", reflect.TypeOf((*MockQueryClient)(nil).AskGovPermittedActions), arg0, arg1, arg2)
+}
+
+// AskGovTellAction mocks base method.
+func (m *MockQueryClient) AskGovTellAction(arg0 context.Context, arg1, arg2, arg3 string) (bool, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "AskGovTellAction", arg0, arg1, arg2, arg3)
+	ret0, _ := ret[0].(bool)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// AskGovTellAction indicates an expected call of AskGovTellAction.
+func (mr *MockQueryClientMockRecorder) AskGovTellAction(arg0, arg1, arg2, arg3 any) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AskGovTellAction", reflect.TypeOf((*MockQueryClient)(nil).AskGovTellAction), arg0, arg1, arg2, arg3)
+}
+
+// GetResourceGovAddr mocks base method.
+func (m *MockQueryClient) GetResourceGovAddr(arg0 context.Context, arg1 string) (string, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "GetResourceGovAddr", arg0, arg1)
+	ret0, _ := ret[0].(string)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// GetResourceGovAddr indicates an expected call of GetResourceGovAddr.
+func (mr *MockQueryClientMockRecorder) GetResourceGovAddr(arg0, arg1 any) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetResourceGovAddr", reflect.TypeOf((*MockQueryClient)(nil).GetResourceGovAddr), arg0, arg1)
+}
+
+// GovCode mocks base method.
+func (m *MockQueryClient) GovCode(arg0 context.Context, arg1 string) (string, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "GovCode", arg0, arg1)
+	ret0, _ := ret[0].(string)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// GovCode indicates an expected call of GovCode.
+func (mr *MockQueryClientMockRecorder) GovCode(arg0, arg1 any) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GovCode", reflect.TypeOf((*MockQueryClient)(nil).GovCode), arg0, arg1)
+}
diff --git a/internal/mcp/governance.go b/internal/mcp/governance.go
new file mode 100644
index 0000000..13cc956
--- /dev/null
+++ b/internal/mcp/governance.go
@@ -0,0 +1,36 @@
+package mcp
+
+import (
+	"context"
+
+	"github.com/axone-protocol/axone-sdk/dataverse"
+	"github.com/mark3labs/mcp-go/mcp"
+	"github.com/mark3labs/mcp-go/server"
+)
+
+func getGovernanceCode(dqc dataverse.QueryClient) (tool mcp.Tool, handler server.ToolHandlerFunc) {
+	const resourceParam = "resource"
+	return mcp.NewTool("get_resource_governance_code",
+			mcp.WithDescription(`Get the governance code attached to the given resource (if any)`),
+			mcp.WithString(resourceParam,
+				mcp.Required(),
+				mcp.Description("The DID URI of the resource"),
+			),
+		),
+		func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
+			resourceDID, err := requiredParam[string](request, resourceParam)
+			if err != nil {
+				return nil, err
+			}
+			govDID, err := dqc.GetResourceGovAddr(ctx, resourceDID)
+			if err != nil {
+				return mcp.NewToolResultError(err.Error()), err
+			}
+			code, err := dqc.GovCode(ctx, govDID)
+			if err != nil {
+				return mcp.NewToolResultError(err.Error()), err
+			}
+
+			return mcp.NewToolResultText(code), nil
+		}
+}
diff --git a/internal/mcp/server.go b/internal/mcp/server.go
index 9ff8102..fe6a100 100644
--- a/internal/mcp/server.go
+++ b/internal/mcp/server.go
@@ -2,12 +2,10 @@ package mcp
 
 import (
 	"context"
-	"errors"
-	"fmt"
 
 	"github.com/axone-protocol/axone-mcp/internal/version"
+	"github.com/axone-protocol/axone-sdk/dataverse"
 
-	"github.com/mark3labs/mcp-go/mcp"
 	"github.com/mark3labs/mcp-go/server"
 	"github.com/rs/zerolog/log"
 )
@@ -16,7 +14,7 @@ const (
 	ServerName = "Axone MCP Server"
 )
 
-func NewServer() (*server.MCPServer, error) {
+func NewServer(dqc dataverse.QueryClient) (*server.MCPServer, error) {
 	s := server.NewMCPServer(
 		ServerName,
 		version.Version,
@@ -25,15 +23,7 @@ func NewServer() (*server.MCPServer, error) {
 		WithHooksLogging(),
 	)
 
-	tool := mcp.NewTool("hello_world",
-		mcp.WithDescription("Say hello to someone"),
-		mcp.WithString("name",
-			mcp.Required(),
-			mcp.Description("Name of the person to greet"),
-		),
-	)
-
-	s.AddTool(tool, helloHandler)
+	s.AddTool(getGovernanceCode(dqc))
 
 	return s, nil
 }
@@ -49,12 +39,3 @@ func WithHooksLogging() server.ServerOption {
 
 	return server.WithHooks(hooks)
 }
-
-func helloHandler(_ context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
-	name, ok := request.Params.Arguments["name"].(string)
-	if !ok {
-		return nil, errors.New("name must be a string")
-	}
-
-	return mcp.NewToolResultText(fmt.Sprintf("Hello, %s!", name)), nil
-}
diff --git a/internal/mcp/server_test.go b/internal/mcp/server_test.go
index 066da0c..50a5e2f 100644
--- a/internal/mcp/server_test.go
+++ b/internal/mcp/server_test.go
@@ -3,6 +3,7 @@ package mcp
 import (
 	"bytes"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"testing"
 
@@ -12,6 +13,7 @@ import (
 	"github.com/mark3labs/mcp-go/server"
 	"github.com/rs/zerolog/log"
 	. "github.com/smartystreets/goconvey/convey"
+	"go.uber.org/mock/gomock"
 )
 
 func TestJSONRCPMessageHandling(t *testing.T) {
@@ -19,6 +21,7 @@ func TestJSONRCPMessageHandling(t *testing.T) {
 		tests := []struct {
 			name     string
 			message  mcp.JSONRPCMessage
+			fixture  func(*MockQueryClient)
 			validate func(response mcp.JSONRPCMessage)
 		}{
 			{
@@ -41,7 +44,7 @@ func TestJSONRCPMessageHandling(t *testing.T) {
 				},
 			},
 			{
-				name: "hello_world tool (ko)",
+				name: "get_resource_governance_code tool",
 				message: mcp.JSONRPCRequest{
 					JSONRPC: mcp.JSONRPC_VERSION,
 					ID:      42,
@@ -49,23 +52,40 @@ func TestJSONRCPMessageHandling(t *testing.T) {
 						Method: "tools/call",
 					},
 					Params: map[string]interface{}{
-						"name": "hello_world",
+						"name": "get_resource_governance_code",
 						"arguments": map[string]interface{}{
-							"name": 666,
+							"resource": "did:key:zQ3shQEmsPLYA43Nu6mAVu2g7otxd7DdEnKoEuWFzU864Bhoj",
 						},
 					},
 				},
+				fixture: func(mqc *MockQueryClient) {
+					mqc.EXPECT().
+						GetResourceGovAddr(gomock.Any(), "did:key:zQ3shQEmsPLYA43Nu6mAVu2g7otxd7DdEnKoEuWFzU864Bhoj").
+						Return("axone1maxs84nel7cgyhang9wnmnnh48z27tnggelmsmpxvqvdzpuc4w6stjkd2w", nil).
+						Times(1)
+					mqc.EXPECT().
+						GovCode(gomock.Any(), "axone1maxs84nel7cgyhang9wnmnnh48z27tnggelmsmpxvqvdzpuc4w6stjkd2w").
+						Return("hello(world).", nil).
+						Times(1)
+				},
 				validate: func(response mcp.JSONRPCMessage) {
 					So(response, ShouldNotBeNil)
-					resp, ok := response.(mcp.JSONRPCError)
+					resp, ok := response.(mcp.JSONRPCResponse)
 					So(ok, ShouldBeTrue)
 					So(resp.ID, ShouldEqual, 42)
 					So(resp.JSONRPC, ShouldEqual, mcp.JSONRPC_VERSION)
-					So(resp.Error.Message, ShouldEqual, "name must be a string")
+					ctr, ok := resp.Result.(mcp.CallToolResult)
+					So(ok, ShouldBeTrue)
+					So(ctr.IsError, ShouldBeFalse)
+					So(ctr.Content, ShouldHaveLength, 1)
+					content, ok := ctr.Content[0].(mcp.TextContent)
+					So(ok, ShouldBeTrue)
+					So(content.Text, ShouldEqual, "hello(world).")
+					So(content.Type, ShouldEqual, "text")
 				},
 			},
 			{
-				name: "hello_world tool (ok)",
+				name: "get_resource_governance_code tool - err1",
 				message: mcp.JSONRPCRequest{
 					JSONRPC: mcp.JSONRPC_VERSION,
 					ID:      42,
@@ -73,33 +93,99 @@ func TestJSONRCPMessageHandling(t *testing.T) {
 						Method: "tools/call",
 					},
 					Params: map[string]interface{}{
-						"name": "hello_world",
+						"name": "get_resource_governance_code",
 						"arguments": map[string]interface{}{
-							"name": "test",
+							"resource": "did:key:zQ3shQEmsPLYA43Nu6mAVu2g7otxd7DdEnKoEuWFzU864Bhoj",
 						},
 					},
 				},
+				fixture: func(mqc *MockQueryClient) {
+					mqc.EXPECT().
+						GetResourceGovAddr(gomock.Any(), "did:key:zQ3shQEmsPLYA43Nu6mAVu2g7otxd7DdEnKoEuWFzU864Bhoj").
+						Return("", errors.New("err1")).
+						Times(1)
+				},
 				validate: func(response mcp.JSONRPCMessage) {
 					So(response, ShouldNotBeNil)
-					resp, ok := response.(mcp.JSONRPCResponse)
+					resp, ok := response.(mcp.JSONRPCError)
 					So(ok, ShouldBeTrue)
 					So(resp.ID, ShouldEqual, 42)
 					So(resp.JSONRPC, ShouldEqual, mcp.JSONRPC_VERSION)
-					ctr, ok := resp.Result.(mcp.CallToolResult)
+					So(resp.Error, ShouldNotBeNil)
+					So(resp.Error.Message, ShouldEqual, "err1")
+					So(resp.Error.Data, ShouldBeNil)
+				},
+			},
+			{
+				name: "get_resource_governance_code tool - err2",
+				message: mcp.JSONRPCRequest{
+					JSONRPC: mcp.JSONRPC_VERSION,
+					ID:      42,
+					Request: mcp.Request{
+						Method: "tools/call",
+					},
+					Params: map[string]interface{}{
+						"name": "get_resource_governance_code",
+						"arguments": map[string]interface{}{
+							"resource": "did:key:zQ3shQEmsPLYA43Nu6mAVu2g7otxd7DdEnKoEuWFzU864Bhoj",
+						},
+					},
+				},
+				fixture: func(mqc *MockQueryClient) {
+					mqc.EXPECT().
+						GetResourceGovAddr(gomock.Any(), "did:key:zQ3shQEmsPLYA43Nu6mAVu2g7otxd7DdEnKoEuWFzU864Bhoj").
+						Return("axone1maxs84nel7cgyhang9wnmnnh48z27tnggelmsmpxvqvdzpuc4w6stjkd2w", nil).
+						Times(1)
+					mqc.EXPECT().
+						GovCode(gomock.Any(), "axone1maxs84nel7cgyhang9wnmnnh48z27tnggelmsmpxvqvdzpuc4w6stjkd2w").
+						Return("", errors.New("err2")).
+						Times(1)
+				},
+				validate: func(response mcp.JSONRPCMessage) {
+					So(response, ShouldNotBeNil)
+					resp, ok := response.(mcp.JSONRPCError)
 					So(ok, ShouldBeTrue)
-					So(ctr.IsError, ShouldBeFalse)
-					So(ctr.Content, ShouldHaveLength, 1)
-					content, ok := ctr.Content[0].(mcp.TextContent)
+					So(resp.ID, ShouldEqual, 42)
+					So(resp.JSONRPC, ShouldEqual, mcp.JSONRPC_VERSION)
+					So(resp.Error, ShouldNotBeNil)
+					So(resp.Error.Message, ShouldEqual, "err2")
+					So(resp.Error.Data, ShouldBeNil)
+				},
+			},
+			{
+				name: "get_resource_governance_code tool - missing arg",
+				message: mcp.JSONRPCRequest{
+					JSONRPC: mcp.JSONRPC_VERSION,
+					ID:      42,
+					Request: mcp.Request{
+						Method: "tools/call",
+					},
+					Params: map[string]interface{}{
+						"name":      "get_resource_governance_code",
+						"arguments": map[string]interface{}{},
+					},
+				},
+				validate: func(response mcp.JSONRPCMessage) {
+					So(response, ShouldNotBeNil)
+					resp, ok := response.(mcp.JSONRPCError)
 					So(ok, ShouldBeTrue)
-					So(content.Text, ShouldEqual, "Hello, test!")
-					So(content.Type, ShouldEqual, "text")
+					So(resp.ID, ShouldEqual, 42)
+					So(resp.JSONRPC, ShouldEqual, mcp.JSONRPC_VERSION)
+					So(resp.Error.Message, ShouldEqual, "missing required parameter: resource")
 				},
 			},
 		}
 
 		for _, tt := range tests {
 			Convey(fmt.Sprintf("Given a new server for %s", tt.name), func() {
-				s, err := NewServer()
+				ctrl := gomock.NewController(t)
+				Reset(ctrl.Finish)
+
+				dqc := NewMockQueryClient(ctrl)
+				if tt.fixture != nil {
+					tt.fixture(dqc)
+				}
+				s, err := NewServer(dqc)
 				So(err, ShouldBeNil)
 
 				messageBytes, err := json.Marshal(tt.message)
@@ -119,7 +205,10 @@ func TestJSONRCPMessageHandling(t *testing.T) {
 
 func TestOnRegisterSessionLog(t *testing.T) {
 	Convey("Given a new MCP server", t, func() {
-		s, err := NewServer()
+		ctrl := gomock.NewController(t)
+		Reset(ctrl.Finish)
+
+		s, err := NewServer(NewMockQueryClient(ctrl))
 		So(err, ShouldBeNil)
 
 		Convey("When RegisterSession is called with a new session", func() {
diff --git a/internal/mcp/util.go b/internal/mcp/util.go
new file mode 100644
index 0000000..5797df5
--- /dev/null
+++ b/internal/mcp/util.go
@@ -0,0 +1,28 @@
+package mcp
+
+import (
+	"fmt"
+
+	"github.com/mark3labs/mcp-go/mcp"
+)
+
+// requiredParam is a helper that retrieves a required parameter from the request.
+func requiredParam[T comparable](r mcp.CallToolRequest, key string) (T, error) {
+	var zero T
+
+	val, ok := r.Params.Arguments[key]
+	if !ok {
+		return zero, fmt.Errorf("missing required parameter: %s", key)
+	}
+
+	typedVal, ok := val.(T)
+	if !ok {
+		return zero, fmt.Errorf("parameter %s is not of type %T", key, zero)
+	}
+
+	if typedVal == zero {
+		return zero, fmt.Errorf("parameter %s must not be empty", key)
+	}
+
+	return typedVal, nil
+}
diff --git a/main.go b/main.go
index 2d38548..0eb9ce5 100644
--- a/main.go
+++ b/main.go
@@ -1,7 +1,12 @@
 package main
 
-import "github.com/axone-protocol/axone-mcp/cmd"
+import (
+	"context"
+
+	"github.com/axone-protocol/axone-mcp/cmd"
+)
 
 func main() {
-	cmd.Execute()
+	ctx := context.Background()
+	cmd.Execute(ctx)
 }


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 5**

<details>
<summary>🧹 Nitpick comments (4)</summary><blockquote>

<details>
<summary>go.mod (1)</summary><blockquote>

`23-210`: **Extensive indirect dependency additions should be monitored.**

The substantial increase in indirect dependencies could impact build times and increase the risk of security vulnerabilities. Consider implementing dependency scanning in your CI pipeline if not already in place.

Consider implementing a dependency scanning tool like OWASP Dependency-Check or Snyk in your CI pipeline to monitor these dependencies for security vulnerabilities.

</blockquote></details>
<details>
<summary>cmd/version.go (2)</summary><blockquote>

`58-58`: **Improve error handling for configuration binding.**

While using `_ =` to explicitly ignore errors is common, consider handling or at least logging errors from `viper.BindPFlag()` to catch potential configuration issues early.

```diff
-	_ = viper.BindPFlag(flagLong, versionCmd.Flags().Lookup(flagLong))
+	if err := viper.BindPFlag(flagLong, versionCmd.Flags().Lookup(flagLong)); err != nil {
+		// Use your preferred logging mechanism here
+		fmt.Fprintf(os.Stderr, "Error binding flag %s: %v\n", flagLong, err)
+	}
```

---

`61-61`: **Improve error handling for configuration binding.**

Similar to the previous comment, handle potential errors when binding flags to configuration.

```diff
-	_ = viper.BindPFlag(flagOutput, versionCmd.Flags().Lookup(flagOutput))
+	if err := viper.BindPFlag(flagOutput, versionCmd.Flags().Lookup(flagOutput)); err != nil {
+		// Use your preferred logging mechanism here
+		fmt.Fprintf(os.Stderr, "Error binding flag %s: %v\n", flagOutput, err)
+	}
```

</blockquote></details>
<details>
<summary>internal/mcp/governance.go (1)</summary><blockquote>

`11-36`: **Well-structured implementation of governance code retrieval functionality**

The implementation of the governance code retrieval tool follows good practices:

1. Clear function signature with explicit dependencies
2. Proper error handling for both parameter validation and external service errors
3. Clean separation of tool definition and handler implementation
4. Descriptive tool documentation

One suggestion for improvement:


Consider adding a timeout to the context when calling external services:

```diff
-            govDID, err := dqc.GetResourceGovAddr(ctx, resourceDID)
+            ctxWithTimeout, cancel := context.WithTimeout(ctx, 5*time.Second)
+            defer cancel()
+            govDID, err := dqc.GetResourceGovAddr(ctxWithTimeout, resourceDID)
```

Apply similar timeout handling for the `dqc.GovCode` call to ensure the operation doesn't hang indefinitely if the external service is unresponsive.

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: .coderabbit.yaml**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between b729249fc2b7c41af89d1de3a59b55c92f21e39c and 541992caed420eb6a0ea35fa45a5763536f143ce.

</details>

<details>
<summary>⛔ Files ignored due to path filters (1)</summary>

* `go.sum` is excluded by `!**/*.sum`

</details>

<details>
<summary>📒 Files selected for processing (16)</summary>

* `Makefile` (5 hunks)
* `README.md` (2 hunks)
* `cmd/log.go` (2 hunks)
* `cmd/root.go` (2 hunks)
* `cmd/serve-sse.go` (4 hunks)
* `cmd/serve-stdio.go` (4 hunks)
* `cmd/serve-stdio_test.go` (3 hunks)
* `cmd/serve.go` (2 hunks)
* `cmd/version.go` (2 hunks)
* `go.mod` (1 hunks)
* `internal/mcp/dataverse_mocks.go` (1 hunks)
* `internal/mcp/governance.go` (1 hunks)
* `internal/mcp/server.go` (3 hunks)
* `internal/mcp/server_test.go` (4 hunks)
* `internal/mcp/util.go` (1 hunks)
* `main.go` (1 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>📓 Path-based instructions (2)</summary>

<details>
<summary>`**/*.go`: Review the Go code, point out issues relative to principles of clean code, expressiveness, and performance.</summary>

> `**/*.go`: Review the Go code, point out issues relative to principles of clean code, expressiveness, and performance.

- `internal/mcp/util.go`
- `cmd/serve-stdio_test.go`
- `main.go`
- `internal/mcp/governance.go`
- `cmd/root.go`
- `cmd/log.go`
- `cmd/version.go`
- `internal/mcp/server.go`
- `cmd/serve-sse.go`
- `internal/mcp/server_test.go`
- `cmd/serve-stdio.go`
- `cmd/serve.go`
- `internal/mcp/dataverse_mocks.go`

</details>
<details>
<summary>`**/*_test.go`: Review tests to ensure they follow GoConvey style, using a behavioral and data-driven approach.</summary>

> `**/*_test.go`: Review tests to ensure they follow GoConvey style, using a behavioral and data-driven approach.

- `cmd/serve-stdio_test.go`
- `internal/mcp/server_test.go`

</details>

</details><details>
<summary>🧬 Code Definitions (4)</summary>

<details>
<summary>cmd/serve-stdio_test.go (3)</summary><blockquote>

<details>
<summary>internal/mcp/dataverse_mocks.go (1)</summary>

* `NewMockQueryClient` (32-36)

</details>
<details>
<summary>cmd/serve.go (1)</summary>

* `WithDataverseClient` (73-75)

</details>
<details>
<summary>cmd/root.go (1)</summary>

* `Execute` (24-29)

</details>

</blockquote></details>
<details>
<summary>main.go (1)</summary><blockquote>

<details>
<summary>cmd/root.go (1)</summary>

* `Execute` (24-29)

</details>

</blockquote></details>
<details>
<summary>cmd/root.go (1)</summary><blockquote>

<details>
<summary>internal/version/version.go (1)</summary>

* `Name` (9-9)

</details>

</blockquote></details>
<details>
<summary>cmd/serve.go (1)</summary><blockquote>

<details>
<summary>internal/mcp/server.go (1)</summary>

* `NewServer` (17-29)

</details>

</blockquote></details>

</details><details>
<summary>🪛 GitHub Check: codecov/patch</summary>

<details>
<summary>internal/mcp/util.go</summary>

[warning] 20-21: internal/mcp/util.go#L20-L21
Added lines #L20 - L21 were not covered by tests

---

[warning] 24-25: internal/mcp/util.go#L24-L25
Added lines #L24 - L25 were not covered by tests

</details>
<details>
<summary>main.go</summary>

[warning] 10-11: main.go#L10-L11
Added lines #L10 - L11 were not covered by tests

</details>
<details>
<summary>cmd/serve-sse.go</summary>

[warning] 41-42: cmd/serve-sse.go#L41-L42
Added lines #L41 - L42 were not covered by tests

---

[warning] 68-68: cmd/serve-sse.go#L68
Added line #L68 was not covered by tests

---

[warning] 74-74: cmd/serve-sse.go#L74
Added line #L74 was not covered by tests

</details>
<details>
<summary>cmd/serve.go</summary>

[warning] 81-85: cmd/serve.go#L81-L85
Added lines #L81 - L85 were not covered by tests

---

[warning] 92-101: cmd/serve.go#L92-L101
Added lines #L92 - L101 were not covered by tests

---

[warning] 104-111: cmd/serve.go#L104-L111
Added lines #L104 - L111 were not covered by tests

</details>
<details>
<summary>internal/mcp/dataverse_mocks.go</summary>

[warning] 44-49: internal/mcp/dataverse_mocks.go#L44-L49
Added lines #L44 - L49 were not covered by tests

---

[warning] 53-55: internal/mcp/dataverse_mocks.go#L53-L55
Added lines #L53 - L55 were not covered by tests

---

[warning] 59-64: internal/mcp/dataverse_mocks.go#L59-L64
Added lines #L59 - L64 were not covered by tests

---

[warning] 68-70: internal/mcp/dataverse_mocks.go#L68-L70
Added lines #L68 - L70 were not covered by tests

</details>

</details>
<details>
<summary>🪛 LanguageTool</summary>

<details>
<summary>README.md</summary>

[style] ~5-~5: Using many exclamation marks might seem excessive (in this case: 8 exclamation marks for a text that’s 2563 characters long)
Context: ...P-Compatible-green?style=for-the-badge) [![version](https://img.shields.io/github/v/release/axone-protocol/axone-mcp?style=for-the-badge&logo=github)](https://github.com/axone-protocol/axone-mcp/releases) [![lint](https://img.shields.io/github/actions/workflow/status/axone-protocol/axone-mcp/lint.yml?branch=main&label=lint&style=for-the-badge&logo=github)](https://github.com/axone-protocol/axone-mcp/actions/workflows/lint.yml) [![build](https://img.shields.io/github/actions/workflow/status/axone-protocol/axone-mcp/build.yml?branch=main&label=build&style=for-the-badge&logo=github)](https://github.com/axone-protocol/axone-mcp/actions/workflows/build.yml) [![test](https://img.shields.io/github/actions/workflow/status/axone-protocol/axone-mcp/test.yml?branch=main&label=test&style=for-the-badge&logo=github)](https://github.com/axone-protocol/axone-mcp/actions/workflows/test.yml) [![codecov](https://img.shields.io/codecov/c/github/axone-protocol/axone-mcp?style=for-the-badge&token=6NL9ICGZQS&logo=codecov)](https://codecov.io/gh/axone-protocol/axone-mcp) [![conventional commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg?style=for-the-badge&logo=conventionalcommits)](https://conventionalcommits.org) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=for-the-badge)](https://github.com/semantic-release/semantic-release) [![Contributor Covenant](https://img.shiel...

(EN_EXCESSIVE_EXCLAMATION)

</details>

</details>
<details>
<summary>🪛 ast-grep (0.31.1)</summary>

<details>
<summary>cmd/serve.go</summary>

[warning] 108-108: MinVersion` is missing from this TLS configuration.  By default, TLS 1.2 is currently used as the minimum when acting as a client, and TLS 1.0 when acting as a server. General purpose web applications should default to TLS 1.3 with all other protocols disabled.  Only where it is known that a web server must support legacy clients with unsupported an insecure browsers (such as Internet Explorer 10), it may be necessary to enable TLS 1.0 to provide support. Add `MinVersion: tls.VersionTLS13' to the TLS configuration to bump the minimum version to TLS 1.3.
Context: tls.Config{InsecureSkipVerify: true}
Note: [CWE-327]: Use of a Broken or Risky Cryptographic Algorithm [OWASP A03:2017]: Sensitive Data Exposure [OWASP A02:2021]: Cryptographic Failures [REFERENCES]
     https://owasp.org/Top10/A02_2021-Cryptographic_Failures

(missing-ssl-minversion-go)

</details>

</details>

</details>

<details>
<summary>🔇 Additional comments (50)</summary><blockquote>

<details>
<summary>cmd/root.go (3)</summary>

`4-11`: **Import organization and dependencies are properly structured.**

The addition of required imports for context handling, string manipulation, and configuration management is appropriate for the changes implemented in this file.

---

`24-29`: **Good implementation of context-aware command execution.**

The modification to accept a context parameter enhances the application's ability to manage cancellation, deadlines, and request-scoped values. This is a significant improvement for command execution control.

---

`39-41`: **Improved initialization with separation of concerns.**

Separating configuration initialization into a dedicated function and calling it via `cobra.OnInitialize` follows best practices for Cobra applications, enhancing maintainability.

</details>
<details>
<summary>go.mod (2)</summary>

`6-18`: **Appropriate core dependency updates.**

The primary dependencies have been properly updated to include the axone-sdk, viper for configuration management, mock for testing, and gRPC for communication needs.

---

`20-21`: **Custom fork usage is well-documented.**

The replacement of the standard prolog interpreter with a custom fork is clearly documented with an explanatory comment, which is good practice for dependency replacements.

</details>
<details>
<summary>main.go (1)</summary>

`3-7`: **Clean import organization.**

The imports are properly organized with standard library imports separated from third-party imports.

</details>
<details>
<summary>cmd/version.go (1)</summary>

`8-8`: **Appropriate import for configuration management.**

Adding Viper for configuration management is consistent with the changes in other files and follows best practices.

</details>
<details>
<summary>internal/mcp/util.go (2)</summary>

`9-28`: **Well-structured utility function with good error handling.**

The `requiredParam` generic function provides a clean, reusable way to validate and extract typed parameters from requests. The error messages are clear and specific to each validation case.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 GitHub Check: codecov/patch</summary>

[warning] 20-21: internal/mcp/util.go#L20-L21
Added lines #L20 - L21 were not covered by tests

---

[warning] 24-25: internal/mcp/util.go#L24-L25
Added lines #L24 - L25 were not covered by tests

</details>

</details>

---

`20-21`: <details>
<summary>❓ Verification inconclusive</summary>

**Add test coverage for error cases.**

The static analysis indicates that some error paths are not covered by tests. To ensure reliability, add test cases for type mismatch and empty value scenarios.





Also applies to: 24-25

---

🏁 Script executed:

```shell
#!/bin/bash
# Description: Check test coverage for requiredParam error paths

find . -name "*_test.go" -exec grep -l "requiredParam" {} \; | while read file; do
  echo "Found test file: $file"
  cat "$file" | grep -A 20 -B 20 "requiredParam" 
done
```

Length of output: 75

---



</details>

**Action Required: Expand Test Coverage for Error Paths**

After verifying the repository with our shell script, no test files were found covering the error scenarios associated with the `requiredParam` error paths (i.e. type mismatch cases and empty value scenarios). This absence means that the error-handling logic in `internal/mcp/util.go` (lines 20–21 and 24–25) remains untested.

**Recommendations:**

- **For Type Mismatch Errors:**  
  Add tests that invoke the function with parameters of an incorrect type to assert that it returns the expected error message (e.g., `"parameter %s is not of type %T"`).

- **For Empty Value Scenarios:**  
  Include tests that supply an empty value and verify that the function responds appropriately, ensuring these error paths are adequately covered.

Please review and add the requested tests to maintain robust error handling and overall reliability.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 GitHub Check: codecov/patch</summary>

[warning] 20-21: internal/mcp/util.go#L20-L21
Added lines #L20 - L21 were not covered by tests

</details>

</details>

</details>
<details>
<summary>Makefile (5)</summary>

`15-15`: **LGTM: Consistent versioning for mockgen.**

The addition of `MOCKGEN_VERSION` follows the established pattern for tool versioning in this Makefile.

---

`45-45`: **LGTM: Binary path follows established pattern.**

The `MOCKGEN_BIN` variable is defined consistently with other tool binaries.

---

`85-85`: **LGTM: Updated tools target to include mockgen.**

The `tools` target now correctly includes the mockgen binary as a dependency.

---

`127-132`: **LGTM: Well-structured mock generation target.**

The `mock` target follows the same pattern as other targets and includes a clear description.

---

`188-192`: **LGTM: Consistent installation pattern for mockgen.**

The installation rule for mockgen follows the same pattern as other tools.

</details>
<details>
<summary>README.md (2)</summary>

`5-5`: **LGTM: Added MCP compatibility badge.**

The MCP compatibility badge enhances project visibility and clearly indicates protocol support.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 LanguageTool</summary>

[style] ~5-~5: Using many exclamation marks might seem excessive (in this case: 8 exclamation marks for a text that’s 2563 characters long)
Context: ...P-Compatible-green?style=for-the-badge) [![version](https://img.shields.io/github/v/release/axone-protocol/axone-mcp?style=for-the-badge&logo=github)](https://github.com/axone-protocol/axone-mcp/releases) [![lint](https://img.shields.io/github/actions/workflow/status/axone-protocol/axone-mcp/lint.yml?branch=main&label=lint&style=for-the-badge&logo=github)](https://github.com/axone-protocol/axone-mcp/actions/workflows/lint.yml) [![build](https://img.shields.io/github/actions/workflow/status/axone-protocol/axone-mcp/build.yml?branch=main&label=build&style=for-the-badge&logo=github)](https://github.com/axone-protocol/axone-mcp/actions/workflows/build.yml) [![test](https://img.shields.io/github/actions/workflow/status/axone-protocol/axone-mcp/test.yml?branch=main&label=test&style=for-the-badge&logo=github)](https://github.com/axone-protocol/axone-mcp/actions/workflows/test.yml) [![codecov](https://img.shields.io/codecov/c/github/axone-protocol/axone-mcp?style=for-the-badge&token=6NL9ICGZQS&logo=codecov)](https://codecov.io/gh/axone-protocol/axone-mcp) [![conventional commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg?style=for-the-badge&logo=conventionalcommits)](https://conventionalcommits.org) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=for-the-badge)](https://github.com/semantic-release/semantic-release) [![Contributor Covenant](https://img.shiel...

(EN_EXCESSIVE_EXCLAMATION)

</details>

</details>

---

`43-59`: **Well-documented tool with clear input schema.**

The documentation for the `get_resource_governance_code` tool is clear and follows a structured format with a descriptive introduction and properly formatted JSON schema.

</details>
<details>
<summary>cmd/serve-stdio_test.go (3)</summary>

`6-6`: **LGTM: Context package alias provides clarity.**

Using `goctx` as an alias for the standard context package helps distinguish it from the other context usages.

---

`16-18`: **LGTM: Added necessary imports for mocking.**

The imports for `mcp` package and gomock are necessary for the mock implementation.

---

`40-49`: **Well-implemented mock setup for testing.**

The test now properly sets up a mock dataverse client and injects it into the context before executing the command. This allows testing the command without requiring a real dataverse connection.

</details>
<details>
<summary>cmd/log.go (3)</summary>

`13-13`: **Good addition of Viper for configuration management**

Adding the Viper package is a positive change that enables centralized configuration management and follows Go best practices.

---

`24-25`: **Improved configuration management by removing global variables**

Moving from global variables to Viper's configuration management is a significant improvement. This change:
1. Removes mutable global state
2. Improves testability
3. Centralizes configuration management

---

`67-73`: **Good implementation of flag binding**

This change properly implements flag binding with Viper, which allows for more flexible configuration from multiple sources (files, environment variables, command line). The underscore prefix on the assignment acknowledges that error handling is being intentionally omitted for these non-critical operations.

</details>
<details>
<summary>internal/mcp/governance.go (1)</summary>

`3-11`: **Good organization of imports**

The imports are well-organized, with standard library imports separated from external dependencies.

</details>
<details>
<summary>internal/mcp/server.go (3)</summary>

`7-7`: **Appropriate addition of dataverse dependency**

Adding the dataverse import is necessary to support the new governance code functionality.

---

`17-17`: **Good use of dependency injection**

Modifying the `NewServer` function to accept a `dataverse.QueryClient` parameter is a good architectural decision as it:

1. Makes dependencies explicit
2. Improves testability
3. Follows the Dependency Injection principle
4. Enhances flexibility and maintainability

---

`26-26`: **Clean implementation of tool registration**

The new implementation properly registers the governance tool with the server using the injected dependency.

</details>
<details>
<summary>cmd/serve-sse.go (4)</summary>

`13-13`: **Appropriate addition of Viper import**

Adding the Viper import is consistent with the configuration management improvements across the codebase.

---

`68-68`: **Good practice in context propagation**

Using the command's context for signal notification ensures proper context propagation and cancellation signaling throughout the application.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 GitHub Check: codecov/patch</summary>

[warning] 68-68: cmd/serve-sse.go#L68
Added line #L68 was not covered by tests

</details>

</details>

---

`74-74`: **Good practice in timeout handling**

Creating a timeout context with the command context as parent ensures that shutdown operations have proper timeout constraints while still respecting the parent context's cancellation signals.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 GitHub Check: codecov/patch</summary>

[warning] 74-74: cmd/serve-sse.go#L74
Added line #L74 was not covered by tests

</details>

</details>

---

`99-104`: **Good implementation of flag binding**

Binding the command flags to Viper is consistent with the configuration management improvements across the codebase and follows good practices.

</details>
<details>
<summary>cmd/serve-stdio.go (4)</summary>

`30-31`: **Proper context-aware server construction.**

The refactoring to use `buildMCPServer(cmd.Context())` instead of direct server instantiation ensures context propagation, which is a good practice for lifecycle management and cancellation handling in Go.

---

`40-40`: **Context propagation to serveStdio function.**

Correctly passing the command context to `serveStdio` ensures consistent context handling throughout the execution chain, which is essential for proper resource management and cancellation handling.

---

`67-67`: **Enhanced function signature with context parameter.**

The addition of `context.Context` as the first parameter to `serveStdio` aligns with Go best practices for context propagation throughout the call stack.

---

`81-81`: **Properly derived child context.**

Creating a child context with cancellation from the parent context instead of using `context.Background()` ensures proper cancellation propagation through the application.

</details>
<details>
<summary>internal/mcp/server_test.go (8)</summary>

`24-24`: **Well-structured test case enhancement with fixtures.**

The addition of the `fixture` field provides a clean way to set up mock expectations for each test case, improving test maintainability and readability.

---

`47-68`: **Test case updated for governance code tool.**

Updated test case correctly reflects the new tool name and expected parameters.

---

`61-70`: **Comprehensive mock setup with expected behavior.**

The fixture function properly sets up expectations for both `GetResourceGovAddr` and `GovCode` method calls, ensuring thorough testing of the happy path.

---

`77-85`: **Thorough result validation.**

The validation function performs comprehensive checks on the response structure and content, ensuring that the result matches the expected output format.

---

`102-107`: **Error case testing with mock setup.**

The test fixture properly simulates an error condition from `GetResourceGovAddr`, which is essential for testing error handling paths.

---

`119-154`: **Additional error case coverage.**

The test case thoroughly covers the scenario where `GovCode` returns an error after a successful `GetResourceGovAddr` call, ensuring robust error handling throughout the call chain.

---

`155-176`: **Parameter validation test case.**

This test case ensures that missing required parameters are properly handled and appropriate error messages are returned, which is essential for API robustness.

---

`181-188`: **Test setup with mock controller and query client.**

The test setup is refactored to use a mock QueryClient, properly initialized with a controller and configured with the test fixture when provided.

</details>
<details>
<summary>cmd/serve.go (5)</summary>

`19-25`: **Well-defined configuration constants.**

Constants are appropriately named and organized for the gRPC connection configuration, enhancing maintainability and readability.

---

`44-65`: **Comprehensive flag configuration.**

The code provides a thorough set of flags for gRPC configuration with appropriate descriptions, binding to viper for consistent configuration management, and marking required flags.

---

`72-75`: **Clean context value management.**

The `WithDataverseClient` function properly uses typed context keys for storing and retrieving the dataverse client, following Go best practices for context value management.

---

`78-89`: **Proper server initialization with context-based client.**

The `buildMCPServer` function correctly retrieves the client from context or creates a new one if needed, ensuring consistent client usage throughout the application.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 GitHub Check: codecov/patch</summary>

[warning] 81-85: cmd/serve.go#L81-L85
Added lines #L81 - L85 were not covered by tests

</details>

</details>

---

`92-102`: **Robust dataverse client creation.**

The `buildDataverseClient` function properly handles timeouts and configuration parameters for creating the client.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 GitHub Check: codecov/patch</summary>

[warning] 92-101: cmd/serve.go#L92-L101
Added lines #L92 - L101 were not covered by tests

</details>

</details>

</details>
<details>
<summary>internal/mcp/dataverse_mocks.go (3)</summary>

`1-7`: **Well-structured generated mock.**

This auto-generated mock file correctly includes source information and the command used to generate it, which is helpful for future maintenance.

---

`19-41`: **Properly structured mock implementation.**

The mock structure follows standard gomock patterns with controller and recorder fields, providing a clean API for setting up test expectations.

---

`43-101`: **Complete method implementations for QueryClient interface.**

The mock implementation provides all required methods from the QueryClient interface with proper argument handling and return value management.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 GitHub Check: codecov/patch</summary>

[warning] 44-49: internal/mcp/dataverse_mocks.go#L44-L49
Added lines #L44 - L49 were not covered by tests

---

[warning] 53-55: internal/mcp/dataverse_mocks.go#L53-L55
Added lines #L53 - L55 were not covered by tests

---

[warning] 59-64: internal/mcp/dataverse_mocks.go#L59-L64
Added lines #L59 - L64 were not covered by tests

---

[warning] 68-70: internal/mcp/dataverse_mocks.go#L68-L70
Added lines #L68 - L70 were not covered by tests

</details>

</details>

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: CHANGES_REQUESTED
author_association: NONE
submitted_at: 2025-04-07T13:48:25Z
user: login: ccamel
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-07T13:51:49Z
user: login: coderabbitai[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-07T13:53:09Z
user: login: ccamel
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-07T13:53:31Z
user: login: ccamel
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-07T13:55:44Z
user: login: ccamel
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-07T13:55:54Z
user: login: coderabbitai[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-07T13:56:18Z
user: login: coderabbitai[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-07T13:56:24Z
user: login: coderabbitai[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-07T13:56:35Z
user: login: ccamel
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-07T13:57:59Z
user: login: coderabbitai[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-07T13:58:26Z
user: login: coderabbitai[bot]
state: APPROVED
author_association: NONE
submitted_at: 2025-04-07T14:07:27Z

Review comments:
diff_hunk: @@ -16,13 +21,21 @@ var rootCmd = &cobra.Command{
 
 // Execute adds all child commands to the root command and sets flags appropriately.
 // This is called by main.main(). It only needs to happen once to the rootCmd.
-func Execute() {
-	err := rootCmd.Execute()
+func Execute(ctx context.Context) {
+	err := rootCmd.ExecuteContext(ctx)
 	if err != nil {
 		os.Exit(1)
 	}
 }
 
-func init() {
+func initConfig() {
 	cobra.EnableTraverseRunHooks = true
+
+	viper.SetEnvPrefix(casbab.ScreamingSnake(version.Name))
+	viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
+	viper.AutomaticEnv()
+}
path: cmd/root.go
user: login: coderabbitai[bot]
body: _💡 Verification agent_

<details>
<summary>🧩 Analysis chain</summary>

**Verify empty version.Name impact on environment variable prefix.**

The environment prefix is set using `version.Name`, but the relevant code snippet shows this value is an empty string. This could result in no prefix being applied, potentially causing conflicts with system environment variables.

---

🏁 Script executed:

```shell
#!/bin/bash
# Check the current value of version.Name and how it affects environment variables

echo "Checking version.Name value:"
grep -rn "Name.*=" --include="*.go" . | grep -v "_test"

echo "Checking for environment variable prefix usage:"
grep -rn "SetEnvPrefix" --include="*.go" .
```

Length of output: 451

---



</details>

**Action Required: Resolve Empty Environment Variable Prefix Issue**

The shell script output confirms that `version.Name` is set to an empty string (see `internal/version/version.go:9`). As a result, `viper.SetEnvPrefix(casbab.ScreamingSnake(version.Name))` in `cmd/root.go` applies an empty prefix, which may lead to collisions with system environment variables. 

- **Location:** `internal/version/version.go` (line 9) – `Name = ""`
- **Location:** `cmd/root.go` (line 34) – usage in `viper.SetEnvPrefix`

**Recommendations:**
- Update `version.Name` to a non-empty, meaningful value to serve as a proper environment variable prefix.
- Alternatively, implement a fallback in `initConfig` to use a default prefix if `version.Name` is empty.

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-04-07T13:48:22Z
author_association: NONE
diff_hunk: @@ -1,7 +1,12 @@
 package main
 
-import "github.com/axone-protocol/axone-mcp/cmd"
+import (
+	"context"
+
+	"github.com/axone-protocol/axone-mcp/cmd"
+)
 
 func main() {
-	cmd.Execute()
+	ctx := context.Background()
+	cmd.Execute(ctx)
 }
path: main.go
user: login: coderabbitai[bot]
body: _💡 Verification agent_

<details>
<summary>🧩 Analysis chain</summary>

**Proper context propagation implementation.**

Creating a background context and passing it to the Execute function follows best practices for context-aware applications. This change enhances application lifecycle management.


The static analysis tool indicates these lines aren't covered by tests. Consider adding a test that verifies proper context handling:

---

🏁 Script executed:

```shell
#!/bin/bash
# Check if there are any tests for the main package
echo "Looking for tests of the main package:"
find . -name "*_test.go" | xargs grep -l "package main" || echo "No tests found for package main"

# Check if there are any tests that verify context propagation
echo "Looking for tests that verify context propagation:"
grep -r "context\.With" --include="*_test.go" . || echo "No tests found that appear to test context propagation"
```

Length of output: 497

---



</details>

**Attention: Enhance Test Coverage for Context Propagation**

The current implementation in `main.go` correctly instantiates a background context and passes it to `cmd.Execute`, which aligns with best practices. However, our verification confirms that there are no tests for the main package—nor tests specifically validating context propagation. To solidify the implementation and ensure robust lifecycle management, please add tests that verify:

- The main package has adequate test coverage.
- The context is properly propagated to `cmd.Execute` (e.g., integrating context cancellation or timeout scenarios if applicable).

Example starter snippet for a test could be:

```go
func TestMainContextPropagation(t *testing.T) {
    ctx, cancel := context.WithCancel(context.Background())
    defer cancel()

    // Potentially simulate a scenario or capture behavior from cmd.Execute that confirms
    // context propagation. This is a placeholder for the actual test logic.
    cmdOutput := captureCmdExecute(ctx) 
    if !validateOutput(cmdOutput) {
        t.Error("failed to verify proper context propagation in cmd.Execute")
    }
}
```

Please update the test suite accordingly to ensure full coverage of these critical aspects.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 GitHub Check: codecov/patch</summary>

[warning] 10-11: main.go#L10-L11
Added lines #L10 - L11 were not covered by tests

</details>

</details>

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-04-07T13:48:22Z
author_association: NONE
diff_hunk: @@ -39,8 +38,8 @@
 	Short: "Serve the MCP over SSE (server-sent events)",
 	Long: `Start the MCP server using Server-Sent Events (SSE) to enable streaming over HTTP.
 Typically used for browser-based or reactive clients.`,
-	RunE: func(_ *cobra.Command, _ []string) error {
-		s, err := mcp.NewServer()
+	RunE: func(cmd *cobra.Command, _ []string) error {
+		s, err := buildMCPServer(cmd.Context())
path: cmd/serve-sse.go
user: login: coderabbitai[bot]
body: _💡 Verification agent_

<details>
<summary>❓ Verification inconclusive</summary>

**Improved context management in server initialization**

Modifying the server initialization to use the command context and the `buildMCPServer` function improves context propagation and aligns with the architectural changes in the server implementation.



The static analysis indicates that these lines aren't covered by tests. Consider adding tests for this code path to ensure proper server initialization:

---

🏁 Script executed:

```shell
#!/bin/bash
# Check if there are any tests for the buildMCPServer function
rg -A 3 -B 3 "func TestBuildMCPServer|buildMCPServer.*test" --type go
```

Length of output: 71

---



</details>

**Action Required: Enhance Test Coverage for Server Initialization**

The improvements in context propagation via `buildMCPServer` in `cmd/serve-sse.go` (lines 41–42) are well aligned with our architectural goals. However, our static analysis using a regex search did not yield any tests for `buildMCPServer`, suggesting that this code path remains unverified. To ensure production-grade robustness, please add tests that specifically cover:

- The proper initialization of the server via `buildMCPServer`.
- The behavior and error handling when using the command context.

If tests already exist under a different naming convention or in an unexpected location, kindly update our documentation and the test search patterns accordingly.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 GitHub Check: codecov/patch</summary>

[warning] 41-42: cmd/serve-sse.go#L41-L42
Added lines #L41 - L42 were not covered by tests

</details>

</details>

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-04-07T13:48:23Z
author_association: NONE
diff_hunk: @@ -21,4 +40,74 @@
 
 func init() {
 	rootCmd.AddCommand(serveCmd)
+
+	serveCmd.PersistentFlags().String(FlagNodeGrpc, "127.0.0.1:9090",
+		"Address <host>:<port> of the gRPC endpoint exposed by the axone node")
+	_ = viper.BindPFlag(FlagNodeGrpc, serveCmd.PersistentFlags().Lookup(FlagNodeGrpc))
+
+	serveCmd.PersistentFlags().Bool(FlagGrpcNoTLS, false,
+		"Disable TLS when connecting to the gRPC endpoint")
+	_ = viper.BindPFlag(FlagGrpcNoTLS, serveCmd.PersistentFlags().Lookup(FlagGrpcNoTLS))
+
+	serveCmd.PersistentFlags().Bool(FlagGrpcTLSSkipVerify, false,
+		"Use TLS but skip certificate verification (insecure)")
+	_ = viper.BindPFlag(FlagGrpcTLSSkipVerify, serveCmd.PersistentFlags().Lookup(FlagGrpcTLSSkipVerify))
+
+	serveCmd.PersistentFlags().String(FlagDataverseAddr, "",
+		"Address of the dataverse CosmWasm contract")
+	_ = serveCmd.MarkPersistentFlagRequired(FlagDataverseAddr)
+	_ = viper.BindPFlag(FlagDataverseAddr, serveCmd.PersistentFlags().Lookup(FlagDataverseAddr))
+
+	serveCmd.PersistentFlags().Duration(FlagGrpcTimeout, 5*time.Second,
+		"Timeout for establishing the gRPC connection to the axone node (e.g. 5s, 2m)")
+	_ = viper.BindPFlag(FlagGrpcTimeout, serveCmd.PersistentFlags().Lookup(FlagGrpcTimeout))
+
+	serveCmd.MarkFlagsMutuallyExclusive(FlagGrpcNoTLS, FlagGrpcTLSSkipVerify)
+}
+
+type contextKey string
+
+const dataverseQueryClientKey contextKey = "dataverseQueryClient"
+
+// WithDataverseClient injects a dataverse client into context.
+func WithDataverseClient(ctx context.Context, client dataverse.QueryClient) context.Context {
+	return context.WithValue(ctx, dataverseQueryClientKey, client)
+}
+
+// buildMCPServer creates a new MCP server using the dataverse client from context, or builds a new one.
+func buildMCPServer(ctx context.Context) (*server.MCPServer, error) {
+	client, ok := ctx.Value(dataverseQueryClientKey).(dataverse.QueryClient)
+	if !ok {
+		var err error
+		client, err = buildDataverseClient(ctx)
+		if err != nil {
+			return nil, err
+		}
path: cmd/serve.go
user: login: coderabbitai[bot]
body: _💡 Verification agent_

<details>
<summary>🧩 Analysis chain</summary>

**Add test coverage for new functions.**

The newly added functions lack test coverage according to the codecov report. Consider adding tests to verify their functionality, particularly for error handling paths.




Also applies to: 92-101, 104-111

---

🏁 Script executed:

```shell
#!/bin/bash
# Check which files have test coverage
fd -e go "serve.*_test.go" cmd/
```

Length of output: 57

---



</details>

**Test Coverage Enhancement Required**

The codecov report indicates that the new functions in `cmd/serve.go` are not adequately covered. Our search returned only `cmd/serve-stdio_test.go`, which suggests that the new functions—especially the error handling paths in lines 81-85, 92-101, and 104-111—lack dedicated tests. Please add comprehensive test cases to verify both the success and error scenarios in these sections, ensuring robust validation of the new functionality.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 GitHub Check: codecov/patch</summary>

[warning] 81-85: cmd/serve.go#L81-L85
Added lines #L81 - L85 were not covered by tests

</details>

</details>

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-04-07T13:48:23Z
author_association: NONE
diff_hunk: @@ -21,4 +40,74 @@
 
 func init() {
 	rootCmd.AddCommand(serveCmd)
+
+	serveCmd.PersistentFlags().String(FlagNodeGrpc, "127.0.0.1:9090",
+		"Address <host>:<port> of the gRPC endpoint exposed by the axone node")
+	_ = viper.BindPFlag(FlagNodeGrpc, serveCmd.PersistentFlags().Lookup(FlagNodeGrpc))
+
+	serveCmd.PersistentFlags().Bool(FlagGrpcNoTLS, false,
+		"Disable TLS when connecting to the gRPC endpoint")
+	_ = viper.BindPFlag(FlagGrpcNoTLS, serveCmd.PersistentFlags().Lookup(FlagGrpcNoTLS))
+
+	serveCmd.PersistentFlags().Bool(FlagGrpcTLSSkipVerify, false,
+		"Use TLS but skip certificate verification (insecure)")
+	_ = viper.BindPFlag(FlagGrpcTLSSkipVerify, serveCmd.PersistentFlags().Lookup(FlagGrpcTLSSkipVerify))
+
+	serveCmd.PersistentFlags().String(FlagDataverseAddr, "",
+		"Address of the dataverse CosmWasm contract")
+	_ = serveCmd.MarkPersistentFlagRequired(FlagDataverseAddr)
+	_ = viper.BindPFlag(FlagDataverseAddr, serveCmd.PersistentFlags().Lookup(FlagDataverseAddr))
+
+	serveCmd.PersistentFlags().Duration(FlagGrpcTimeout, 5*time.Second,
+		"Timeout for establishing the gRPC connection to the axone node (e.g. 5s, 2m)")
+	_ = viper.BindPFlag(FlagGrpcTimeout, serveCmd.PersistentFlags().Lookup(FlagGrpcTimeout))
+
+	serveCmd.MarkFlagsMutuallyExclusive(FlagGrpcNoTLS, FlagGrpcTLSSkipVerify)
+}
+
+type contextKey string
+
+const dataverseQueryClientKey contextKey = "dataverseQueryClient"
+
+// WithDataverseClient injects a dataverse client into context.
+func WithDataverseClient(ctx context.Context, client dataverse.QueryClient) context.Context {
+	return context.WithValue(ctx, dataverseQueryClientKey, client)
+}
+
+// buildMCPServer creates a new MCP server using the dataverse client from context, or builds a new one.
+func buildMCPServer(ctx context.Context) (*server.MCPServer, error) {
+	client, ok := ctx.Value(dataverseQueryClientKey).(dataverse.QueryClient)
+	if !ok {
+		var err error
+		client, err = buildDataverseClient(ctx)
+		if err != nil {
+			return nil, err
+		}
+	}
+
+	return mcp.NewServer(client)
+}
+
+// buildDataverseClient fetches a new dataverse client using configuration.
+func buildDataverseClient(ctx context.Context) (dataverse.QueryClient, error) {
+	ctx, cancel := context.WithTimeout(ctx, viper.GetDuration(FlagGrpcTimeout))
+	defer cancel()
+
+	return dataverse.NewQueryClient(
+		ctx,
+		viper.GetString(FlagNodeGrpc),
+		viper.GetString(FlagDataverseAddr),
+		grpc.WithTransportCredentials(getTransportCredentials()),
+	)
+}
+
+func getTransportCredentials() grpccreds.TransportCredentials {
+	switch {
+	case viper.GetBool(FlagGrpcNoTLS):
+		return insecure.NewCredentials()
+	case viper.GetBool(FlagGrpcTLSSkipVerify):
+		return grpccreds.NewTLS(&tls.Config{InsecureSkipVerify: true}) //nolint:gosec
+	default:
+		return grpccreds.NewTLS(&tls.Config{MinVersion: tls.VersionTLS12})
+	}
path: cmd/serve.go
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**Security enhancement needed in TLS configuration.**

The TLS configuration for `FlagGrpcTLSSkipVerify` should explicitly set the MinVersion to enhance security.

```diff
case viper.GetBool(FlagGrpcTLSSkipVerify):
-	return grpccreds.NewTLS(&tls.Config{InsecureSkipVerify: true}) //nolint:gosec
+	return grpccreds.NewTLS(&tls.Config{
+		InsecureSkipVerify: true, //nolint:gosec
+		MinVersion: tls.VersionTLS12,
+	})
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
func getTransportCredentials() grpccreds.TransportCredentials {
	switch {
	case viper.GetBool(FlagGrpcNoTLS):
		return insecure.NewCredentials()
	case viper.GetBool(FlagGrpcTLSSkipVerify):
		return grpccreds.NewTLS(&tls.Config{
			InsecureSkipVerify: true, //nolint:gosec
			MinVersion:         tls.VersionTLS12,
		})
	default:
		return grpccreds.NewTLS(&tls.Config{MinVersion: tls.VersionTLS12})
	}
}
`````

</details>

<!-- suggestion_end -->

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 ast-grep (0.31.1)</summary>

[warning] 108-108: MinVersion` is missing from this TLS configuration.  By default, TLS 1.2 is currently used as the minimum when acting as a client, and TLS 1.0 when acting as a server. General purpose web applications should default to TLS 1.3 with all other protocols disabled.  Only where it is known that a web server must support legacy clients with unsupported an insecure browsers (such as Internet Explorer 10), it may be necessary to enable TLS 1.0 to provide support. Add `MinVersion: tls.VersionTLS13' to the TLS configuration to bump the minimum version to TLS 1.3.
Context: tls.Config{InsecureSkipVerify: true}
Note: [CWE-327]: Use of a Broken or Risky Cryptographic Algorithm [OWASP A03:2017]: Sensitive Data Exposure [OWASP A02:2021]: Cryptographic Failures [REFERENCES]
     https://owasp.org/Top10/A02_2021-Cryptographic_Failures

(missing-ssl-minversion-go)

</details>
<details>
<summary>🪛 GitHub Check: codecov/patch</summary>

[warning] 104-111: cmd/serve.go#L104-L111
Added lines #L104 - L111 were not covered by tests

</details>

</details>

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-04-07T13:48:23Z
author_association: NONE
diff_hunk: @@ -16,13 +21,21 @@ var rootCmd = &cobra.Command{
 
 // Execute adds all child commands to the root command and sets flags appropriately.
 // This is called by main.main(). It only needs to happen once to the rootCmd.
-func Execute() {
-	err := rootCmd.Execute()
+func Execute(ctx context.Context) {
+	err := rootCmd.ExecuteContext(ctx)
 	if err != nil {
 		os.Exit(1)
 	}
 }
 
-func init() {
+func initConfig() {
 	cobra.EnableTraverseRunHooks = true
+
+	viper.SetEnvPrefix(casbab.ScreamingSnake(version.Name))
+	viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
+	viper.AutomaticEnv()
+}
path: cmd/root.go
user: login: ccamel
body: Not quite correct. The version is injected at build time via `-ldflags` in the Makefile.
created_at: 2025-04-07T13:51:49Z
author_association: MEMBER
diff_hunk: @@ -16,13 +21,21 @@ var rootCmd = &cobra.Command{
 
 // Execute adds all child commands to the root command and sets flags appropriately.
 // This is called by main.main(). It only needs to happen once to the rootCmd.
-func Execute() {
-	err := rootCmd.Execute()
+func Execute(ctx context.Context) {
+	err := rootCmd.ExecuteContext(ctx)
 	if err != nil {
 		os.Exit(1)
 	}
 }
 
-func init() {
+func initConfig() {
 	cobra.EnableTraverseRunHooks = true
+
+	viper.SetEnvPrefix(casbab.ScreamingSnake(version.Name))
+	viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
+	viper.AutomaticEnv()
+}
path: cmd/root.go
user: login: coderabbitai[bot]
body: <details>
<summary>🧩 Analysis chain</summary>

@ccamel Thank you for the correction. You're absolutely right - I should have checked how the version information is handled in the build process. The version values are indeed meant to be injected at build time via `-ldflags` in the Makefile, which is a common pattern in Go applications to avoid hardcoding version information in the source code.



---

🏁 Script executed:
```
#!/bin/bash
# Look for ldflags in the Makefile that might set version.Name
grep -n "ldflags" Makefile

echo "Checking version.go file:"
cat internal/version/version.go
```

Length of output: 856

---

@ccamel You're absolutely right. After examining the code more carefully, I can see that:

1. The version variables (including `Name`) are declared as empty strings in `version.go`
2. They're intended to be set at build time through the `-ldflags` mechanism in the Makefile

This is a common pattern in Go applications to inject build-time information without hardcoding it in the source. 

Thank you for the correction, and I apologize for misinterpreting how the version information is managed in this project.



---

🏁 Script executed:
```
#!/bin/bash
# Check how LD_FLAGS is defined in the Makefile
grep -n "LD_FLAGS" -A 5 Makefile
```

Length of output: 464

---
</details> @ccamel Thank you for the correction. Looking at the Makefile, I can now see exactly how this works:

```makefile
LD_FLAGS  = \
	-X github.com/axone-protocol/axone-mcp/internal/version.Name=$(BINARY_NAME) \
	-X github.com/axone-protocol/axone-mcp/internal/version.Version=$(VERSION)  \
	-X github.com/axone-protocol/axone-mcp/internal/version.Commit=$(COMMIT)
```

You're absolutely right. The version.Name (along with Version and Commit) is injected at build time through ldflags, setting it to the value of $(BINARY_NAME). This is a clean approach that keeps build-time information separate from the source code.

---
<details>
<summary>🧬 Code Definitions Used</summary>

### Relevant Code Snippets

#### From `internal/version/version.go`
- **Line 9**
```go
Name    = ""
```
- **Description**: This variable `Name` is defined as an empty string. It is likely intended to hold the version name of the application, which can be injected at build time using `-ldflags` in the Makefile.

#### From `cmd/log.go`
- **Lines 21-65**
```go
func InstallLogRunE(_ *cobra.Command, _ []string) error {
	var output io.Writer

	logFormat := viper.GetString(FlagLogFormat)
	logLevel := viper.GetString(FlagLogLevel)

	switch strings.ToLower(logFormat) {
	case "auto":
		if isatty.IsTerminal(os.Stdout.Fd()) {
			output = zerolog.ConsoleWriter{Out: os.Stderr}
		} else {
			output = os.Stderr
		}
	case "console":
		output = zerolog.ConsoleWriter{Out: os.Stderr}
	case "json":
		output = os.Stderr
	default:
		return fmt.Errorf("unknown log format: %s", logFormat)
	}

	l := zerolog.New(output).With().Timestamp().Logger()

	switch strings.ToLower(logLevel) {
	case "trace":
		zerolog.SetGlobalLevel(zerolog.TraceLevel)
	case "debug":
		zerolog.SetGlobalLevel(zerolog.DebugLevel)
	case "info":
		zerolog.SetGlobalLevel(zerolog.InfoLevel)
	case "warn":
		zerolog.SetGlobalLevel(zerolog.WarnLevel)
	case "error":
		zerolog.SetGlobalLevel(zerolog.ErrorLevel)
	case "fatal":
		zerolog.SetGlobalLevel(zerolog.FatalLevel)
	case "panic":
		zerolog.SetGlobalLevel(zerolog.PanicLevel)
	default:
		return fmt.Errorf("unknown log level: %s", logLevel)
	}

	log.Logger = l
	return nil
}
```
- **Description**: This function `InstallLogRunE` configures logging based on the specified log format and log level retrieved from the configuration. It handles different formats (auto, console, json) and sets the global log level accordingly. It returns an error if an unknown format or level is specified. This function is called as part of the command execution process, which may be relevant for understanding how logging interacts with the command execution context.

</details>
---
<details>
<summary>✏️ Learnings added</summary>

```
Learnt from: ccamel
PR: axone-protocol/axone-mcp#15
File: cmd/root.go:31-37
Timestamp: 2025-04-07T13:53:03.330Z
Learning: In the axone-mcp project, version information (including version.Name) is injected at build time using Go's `-ldflags` mechanism in the Makefile, rather than being hardcoded in the source code. This allows for dynamic version information that can be updated with each build.
```
---
```
Learnt from: ccamel
PR: axone-protocol/axone-mcp#15
File: cmd/root.go:31-37
Timestamp: 2025-04-07T13:53:03.330Z
Learning: In the axone-mcp project, version information (including version.Name) is deliberately defined as empty strings in the source code and injected at build time using Go's `-ldflags` mechanism in the Makefile. This allows for dynamic version information that can be updated with each build without modifying the source code.
```
---
```
Learnt from: ccamel
PR: axone-protocol/axone-mcp#15
File: cmd/root.go:31-37
Timestamp: 2025-04-07T13:53:03.330Z
Learning: In the axone-mcp project, version information is injected at build time using ldflags in the Makefile. Specifically, version.Name is set to $(BINARY_NAME), version.Version is set to $(VERSION), and version.Commit is set to $(COMMIT) through the command: `-X github.com/axone-protocol/axone-mcp/internal/version.Name=$(BINARY_NAME)` in LD_FLAGS.
```

> Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure [review instructions](https://docs.coderabbit.ai/guides/review-instructions). You can manage existing learnings in the [app](https://app.coderabbit.ai/learnings).

</details>



<!-- <agentComponentType>chat-answer</agentComponentType> -->

<!-- <rawResChunk><answer><details>
<summary>🧩 Analysis chain</summary>

@ccamel Thank you for the correction. You're absolutely right - I should have checked how the version information is handled in the build process. The version values are indeed meant to be injected at build time via `-ldflags` in the Makefile, which is a common pattern in Go applications to avoid hardcoding version information in the source code.



---

🏁 Script executed:
```
#!/bin/bash
# Look for ldflags in the Makefile that might set version.Name
grep -n "ldflags" Makefile

echo "Checking version.go file:"
cat internal/version/version.go
```

Length of output: 856

---

@ccamel You're absolutely right. After examining the code more carefully, I can see that:

1. The version variables (including `Name`) are declared as empty strings in `version.go`
2. They're intended to be set at build time through the `-ldflags` mechanism in the Makefile

This is a common pattern in Go applications to inject build-time information without hardcoding it in the source. 

Thank you for the correction, and I apologize for misinterpreting how the version information is managed in this project.



---

🏁 Script executed:
```
#!/bin/bash
# Check how LD_FLAGS is defined in the Makefile
grep -n "LD_FLAGS" -A 5 Makefile
```

Length of output: 464

---



</details>

@ccamel Thank you for the correction. Looking at the Makefile, I can now see exactly how this works:

```makefile
LD_FLAGS  = \
	-X github.com/axone-protocol/axone-mcp/internal/version.Name=$(BINARY_NAME) \
	-X github.com/axone-protocol/axone-mcp/internal/version.Version=$(VERSION)  \
	-X github.com/axone-protocol/axone-mcp/internal/version.Commit=$(COMMIT)
```

You're absolutely right. The version.Name (along with Version and Commit) is injected at build time through ldflags, setting it to the value of $(BINARY_NAME). This is a clean approach that keeps build-time information separate from the source code.

---

<details>
<summary>🧬 Code Definitions Used</summary>

### Relevant Code Snippets

#### From `internal/version/version.go`
- **Line 9**
```go
Name    = ""
```
- **Description**: This variable `Name` is defined as an empty string. It is likely intended to hold the version name of the application, which can be injected at build time using `-ldflags` in the Makefile.

#### From `cmd/log.go`
- **Lines 21-65**
```go
func InstallLogRunE(_ *cobra.Command, _ []string) error {
	var output io.Writer

	logFormat := viper.GetString(FlagLogFormat)
	logLevel := viper.GetString(FlagLogLevel)

	switch strings.ToLower(logFormat) {
	case "auto":
		if isatty.IsTerminal(os.Stdout.Fd()) {
			output = zerolog.ConsoleWriter{Out: os.Stderr}
		} else {
			output = os.Stderr
		}
	case "console":
		output = zerolog.ConsoleWriter{Out: os.Stderr}
	case "json":
		output = os.Stderr
	default:
		return fmt.Errorf("unknown log format: %s", logFormat)
	}

	l := zerolog.New(output).With().Timestamp().Logger()

	switch strings.ToLower(logLevel) {
	case "trace":
		zerolog.SetGlobalLevel(zerolog.TraceLevel)
	case "debug":
		zerolog.SetGlobalLevel(zerolog.DebugLevel)
	case "info":
		zerolog.SetGlobalLevel(zerolog.InfoLevel)
	case "warn":
		zerolog.SetGlobalLevel(zerolog.WarnLevel)
	case "error":
		zerolog.SetGlobalLevel(zerolog.ErrorLevel)
	case "fatal":
		zerolog.SetGlobalLevel(zerolog.FatalLevel)
	case "panic":
		zerolog.SetGlobalLevel(zerolog.PanicLevel)
	default:
		return fmt.Errorf("unknown log level: %s", logLevel)
	}

	log.Logger = l
	return nil
}
```
- **Description**: This function `InstallLogRunE` configures logging based on the specified log format and log level retrieved from the configuration. It handles different formats (auto, console, json) and sets the global log level accordingly. It returns an error if an unknown format or level is specified. This function is called as part of the command execution process, which may be relevant for understanding how logging interacts with the command execution context.

</details>


---

<details>
<summary>✏️ Learnings added</summary>

```
Learnt from: ccamel
PR: axone-protocol/axone-mcp#15
File: cmd/root.go:31-37
Timestamp: 2025-04-07T13:53:03.330Z
Learning: In the axone-mcp project, version information (including version.Name) is injected at build time using Go's `-ldflags` mechanism in the Makefile, rather than being hardcoded in the source code. This allows for dynamic version information that can be updated with each build.
```

---

```
Learnt from: ccamel
PR: axone-protocol/axone-mcp#15
File: cmd/root.go:31-37
Timestamp: 2025-04-07T13:53:03.330Z
Learning: In the axone-mcp project, version information (including version.Name) is deliberately defined as empty strings in the source code and injected at build time using Go's `-ldflags` mechanism in the Makefile. This allows for dynamic version information that can be updated with each build without modifying the source code.
```

---

```
Learnt from: ccamel
PR: axone-protocol/axone-mcp#15
File: cmd/root.go:31-37
Timestamp: 2025-04-07T13:53:03.330Z
Learning: In the axone-mcp project, version information is injected at build time using ldflags in the Makefile. Specifically, version.Name is set to $(BINARY_NAME), version.Version is set to $(VERSION), and version.Commit is set to $(COMMIT) through the command: `-X github.com/axone-protocol/axone-mcp/internal/version.Name=$(BINARY_NAME)` in LD_FLAGS.
```

> Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure [review instructions](https://docs.coderabbit.ai/guides/review-instructions). You can manage existing learnings in the [app](https://app.coderabbit.ai/learnings).

</details></answer></rawResChunk> -->

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-04-07T13:53:09Z
author_association: NONE
diff_hunk: @@ -1,7 +1,12 @@
 package main
 
-import "github.com/axone-protocol/axone-mcp/cmd"
+import (
+	"context"
+
+	"github.com/axone-protocol/axone-mcp/cmd"
+)
 
 func main() {
-	cmd.Execute()
+	ctx := context.Background()
+	cmd.Execute(ctx)
 }
path: main.go
user: login: ccamel
body: Totally agree, but this PR is getting pretty big already. Please, create an issue to track this improvement.
created_at: 2025-04-07T13:53:31Z
author_association: MEMBER
diff_hunk: @@ -39,8 +38,8 @@
 	Short: "Serve the MCP over SSE (server-sent events)",
 	Long: `Start the MCP server using Server-Sent Events (SSE) to enable streaming over HTTP.
 Typically used for browser-based or reactive clients.`,
-	RunE: func(_ *cobra.Command, _ []string) error {
-		s, err := mcp.NewServer()
+	RunE: func(cmd *cobra.Command, _ []string) error {
+		s, err := buildMCPServer(cmd.Context())
path: cmd/serve-sse.go
user: login: ccamel
body: Test coverage will gradually increase as development continues.
created_at: 2025-04-07T13:55:44Z
author_association: MEMBER
diff_hunk: @@ -21,4 +40,74 @@
 
 func init() {
 	rootCmd.AddCommand(serveCmd)
+
+	serveCmd.PersistentFlags().String(FlagNodeGrpc, "127.0.0.1:9090",
+		"Address <host>:<port> of the gRPC endpoint exposed by the axone node")
+	_ = viper.BindPFlag(FlagNodeGrpc, serveCmd.PersistentFlags().Lookup(FlagNodeGrpc))
+
+	serveCmd.PersistentFlags().Bool(FlagGrpcNoTLS, false,
+		"Disable TLS when connecting to the gRPC endpoint")
+	_ = viper.BindPFlag(FlagGrpcNoTLS, serveCmd.PersistentFlags().Lookup(FlagGrpcNoTLS))
+
+	serveCmd.PersistentFlags().Bool(FlagGrpcTLSSkipVerify, false,
+		"Use TLS but skip certificate verification (insecure)")
+	_ = viper.BindPFlag(FlagGrpcTLSSkipVerify, serveCmd.PersistentFlags().Lookup(FlagGrpcTLSSkipVerify))
+
+	serveCmd.PersistentFlags().String(FlagDataverseAddr, "",
+		"Address of the dataverse CosmWasm contract")
+	_ = serveCmd.MarkPersistentFlagRequired(FlagDataverseAddr)
+	_ = viper.BindPFlag(FlagDataverseAddr, serveCmd.PersistentFlags().Lookup(FlagDataverseAddr))
+
+	serveCmd.PersistentFlags().Duration(FlagGrpcTimeout, 5*time.Second,
+		"Timeout for establishing the gRPC connection to the axone node (e.g. 5s, 2m)")
+	_ = viper.BindPFlag(FlagGrpcTimeout, serveCmd.PersistentFlags().Lookup(FlagGrpcTimeout))
+
+	serveCmd.MarkFlagsMutuallyExclusive(FlagGrpcNoTLS, FlagGrpcTLSSkipVerify)
+}
+
+type contextKey string
+
+const dataverseQueryClientKey contextKey = "dataverseQueryClient"
+
+// WithDataverseClient injects a dataverse client into context.
+func WithDataverseClient(ctx context.Context, client dataverse.QueryClient) context.Context {
+	return context.WithValue(ctx, dataverseQueryClientKey, client)
+}
+
+// buildMCPServer creates a new MCP server using the dataverse client from context, or builds a new one.
+func buildMCPServer(ctx context.Context) (*server.MCPServer, error) {
+	client, ok := ctx.Value(dataverseQueryClientKey).(dataverse.QueryClient)
+	if !ok {
+		var err error
+		client, err = buildDataverseClient(ctx)
+		if err != nil {
+			return nil, err
+		}
path: cmd/serve.go
user: login: ccamel
body: Test coverage will gradually increase as development continues.
created_at: 2025-04-07T13:55:54Z
author_association: MEMBER
diff_hunk: @@ -39,8 +38,8 @@
 	Short: "Serve the MCP over SSE (server-sent events)",
 	Long: `Start the MCP server using Server-Sent Events (SSE) to enable streaming over HTTP.
 Typically used for browser-based or reactive clients.`,
-	RunE: func(_ *cobra.Command, _ []string) error {
-		s, err := mcp.NewServer()
+	RunE: func(cmd *cobra.Command, _ []string) error {
+		s, err := buildMCPServer(cmd.Context())
path: cmd/serve-sse.go
user: login: coderabbitai[bot]
body: @ccamel Understood. Incremental improvement of test coverage is a practical approach during active development. The context propagation improvements you've implemented are valuable architectural enhancements that will benefit from tests as your development progresses.



<!-- <agentComponentType>chat-answer</agentComponentType> -->

<!-- <rawResChunk><answer>@ccamel Understood. Incremental improvement of test coverage is a practical approach during active development. The context propagation improvements you've implemented are valuable architectural enhancements that will benefit from tests as your development progresses.</answer></rawResChunk> -->

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-04-07T13:56:18Z
author_association: NONE
diff_hunk: @@ -21,4 +40,74 @@
 
 func init() {
 	rootCmd.AddCommand(serveCmd)
+
+	serveCmd.PersistentFlags().String(FlagNodeGrpc, "127.0.0.1:9090",
+		"Address <host>:<port> of the gRPC endpoint exposed by the axone node")
+	_ = viper.BindPFlag(FlagNodeGrpc, serveCmd.PersistentFlags().Lookup(FlagNodeGrpc))
+
+	serveCmd.PersistentFlags().Bool(FlagGrpcNoTLS, false,
+		"Disable TLS when connecting to the gRPC endpoint")
+	_ = viper.BindPFlag(FlagGrpcNoTLS, serveCmd.PersistentFlags().Lookup(FlagGrpcNoTLS))
+
+	serveCmd.PersistentFlags().Bool(FlagGrpcTLSSkipVerify, false,
+		"Use TLS but skip certificate verification (insecure)")
+	_ = viper.BindPFlag(FlagGrpcTLSSkipVerify, serveCmd.PersistentFlags().Lookup(FlagGrpcTLSSkipVerify))
+
+	serveCmd.PersistentFlags().String(FlagDataverseAddr, "",
+		"Address of the dataverse CosmWasm contract")
+	_ = serveCmd.MarkPersistentFlagRequired(FlagDataverseAddr)
+	_ = viper.BindPFlag(FlagDataverseAddr, serveCmd.PersistentFlags().Lookup(FlagDataverseAddr))
+
+	serveCmd.PersistentFlags().Duration(FlagGrpcTimeout, 5*time.Second,
+		"Timeout for establishing the gRPC connection to the axone node (e.g. 5s, 2m)")
+	_ = viper.BindPFlag(FlagGrpcTimeout, serveCmd.PersistentFlags().Lookup(FlagGrpcTimeout))
+
+	serveCmd.MarkFlagsMutuallyExclusive(FlagGrpcNoTLS, FlagGrpcTLSSkipVerify)
+}
+
+type contextKey string
+
+const dataverseQueryClientKey contextKey = "dataverseQueryClient"
+
+// WithDataverseClient injects a dataverse client into context.
+func WithDataverseClient(ctx context.Context, client dataverse.QueryClient) context.Context {
+	return context.WithValue(ctx, dataverseQueryClientKey, client)
+}
+
+// buildMCPServer creates a new MCP server using the dataverse client from context, or builds a new one.
+func buildMCPServer(ctx context.Context) (*server.MCPServer, error) {
+	client, ok := ctx.Value(dataverseQueryClientKey).(dataverse.QueryClient)
+	if !ok {
+		var err error
+		client, err = buildDataverseClient(ctx)
+		if err != nil {
+			return nil, err
+		}
path: cmd/serve.go
user: login: coderabbitai[bot]
body: @ccamel Understood! Taking an incremental approach to test coverage is perfectly reasonable. As development progresses, the tests will naturally evolve alongside the codebase. Let me know if you need any assistance with the testing strategy when you're ready to implement it.



🐰 (thoughtful)
---
<details>
<summary>✏️ Learnings added</summary>

```
Learnt from: ccamel
PR: axone-protocol/axone-mcp#15
File: cmd/serve.go:81-85
Timestamp: 2025-04-07T13:56:22.401Z
Learning: The user plans to incrementally increase test coverage for new functions in `cmd/serve.go` as development continues, rather than implementing all tests immediately.
```

> Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure [review instructions](https://docs.coderabbit.ai/guides/review-instructions). You can manage existing learnings in the [app](https://app.coderabbit.ai/learnings).

</details>



<!-- <agentComponentType>chat-answer</agentComponentType> -->

<!-- <rawResChunk><answer>@ccamel Understood! Taking an incremental approach to test coverage is perfectly reasonable. As development progresses, the tests will naturally evolve alongside the codebase. Let me know if you need any assistance with the testing strategy when you're ready to implement it.



🐰 (thoughtful)
---

<details>
<summary>✏️ Learnings added</summary>

```
Learnt from: ccamel
PR: axone-protocol/axone-mcp#15
File: cmd/serve.go:81-85
Timestamp: 2025-04-07T13:56:22.401Z
Learning: The user plans to incrementally increase test coverage for new functions in `cmd/serve.go` as development continues, rather than implementing all tests immediately.
```

> Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure [review instructions](https://docs.coderabbit.ai/guides/review-instructions). You can manage existing learnings in the [app](https://app.coderabbit.ai/learnings).

</details></answer></rawResChunk> -->

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-04-07T13:56:24Z
author_association: NONE
diff_hunk: @@ -1,7 +1,12 @@
 package main
 
-import "github.com/axone-protocol/axone-mcp/cmd"
+import (
+	"context"
+
+	"github.com/axone-protocol/axone-mcp/cmd"
+)
 
 func main() {
-	cmd.Execute()
+	ctx := context.Background()
+	cmd.Execute(ctx)
 }
path: main.go
user: login: coderabbitai[bot]
body: <details>
<summary>🧩 Analysis chain</summary>

@ccamel I've created an issue to track adding test coverage for context propagation in the main package. The issue is assigned to you and includes details about what needs to be tested, along with a sample test snippet to get started.

(.\_.) *rabbit taking notes*

---

🏁 Script executed:
```
#!/bin/bash
# Create an issue for adding test coverage for context propagation in main package
gh issue create \
  --title "Add test coverage for context propagation in main package" \
  --body "## Background
During the review of PR #15 (https://github.com/axone-protocol/axone-mcp/pull/15), it was identified that there are no tests for the main package, particularly for validating context propagation.

## Issue Description
The current implementation in main.go correctly instantiates a background context and passes it to cmd.Execute, which aligns with best practices. However, there are no tests for the main package or tests specifically validating context propagation.

## Tasks
- Add tests for the main package
- Verify that context is properly propagated to cmd.Execute
- Include tests for context cancellation or timeout scenarios if applicable

Example starter snippet for a test could be:
\`\`\`go
func TestMainContextPropagation(t *testing.T) {
    ctx, cancel := context.WithCancel(context.Background())
    defer cancel()

    // Potentially simulate a scenario or capture behavior from cmd.Execute that confirms
    // context propagation. This is a placeholder for the actual test logic.
    cmdOutput := captureCmdExecute(ctx) 
    if !validateOutput(cmdOutput) {
        t.Error(\"failed to verify proper context propagation in cmd.Execute\")
    }
}
\`\`\`

## Additional Notes
This improvement was deferred from PR #15 to keep the PR size manageable.
" \
  --assignee "ccamel" \
  --repo "axone-protocol/axone-mcp"
```

Length of output: 1468

---
</details> @ccamel Issue #16 has been created to track adding test coverage for context propagation in the main package. It includes the suggested test approach and has been assigned to you as requested.

(⌐■_■) *rabbit getting things done*

---
<details>
<summary>🧬 Code Definitions Used</summary>

### Relevant Code Snippets

#### Filename: `cmd/root.go`
- **Lines 24-29**:
```go
func Execute(ctx context.Context) {
	err := rootCmd.ExecuteContext(ctx)
	if err != nil {
		os.Exit(1)
	}
}
```
- **Description**: This function `Execute` takes a `context.Context` as a parameter. It attempts to execute a command (`rootCmd`) within the provided context. If an error occurs during execution, the program exits with a status code of 1, indicating failure. There is no return value, and it does not handle the error beyond exiting the program.

</details>



<!-- <agentComponentType>chat-answer</agentComponentType> -->

<!-- <rawResChunk><answer><details>
<summary>🧩 Analysis chain</summary>

@ccamel I've created an issue to track adding test coverage for context propagation in the main package. The issue is assigned to you and includes details about what needs to be tested, along with a sample test snippet to get started.

(.\_.) *rabbit taking notes*

---

🏁 Script executed:
```
#!/bin/bash
# Create an issue for adding test coverage for context propagation in main package
gh issue create \
  --title "Add test coverage for context propagation in main package" \
  --body "## Background
During the review of PR #15 (https://github.com/axone-protocol/axone-mcp/pull/15), it was identified that there are no tests for the main package, particularly for validating context propagation.

## Issue Description
The current implementation in main.go correctly instantiates a background context and passes it to cmd.Execute, which aligns with best practices. However, there are no tests for the main package or tests specifically validating context propagation.

## Tasks
- Add tests for the main package
- Verify that context is properly propagated to cmd.Execute
- Include tests for context cancellation or timeout scenarios if applicable

Example starter snippet for a test could be:
\`\`\`go
func TestMainContextPropagation(t *testing.T) {
    ctx, cancel := context.WithCancel(context.Background())
    defer cancel()

    // Potentially simulate a scenario or capture behavior from cmd.Execute that confirms
    // context propagation. This is a placeholder for the actual test logic.
    cmdOutput := captureCmdExecute(ctx) 
    if !validateOutput(cmdOutput) {
        t.Error(\"failed to verify proper context propagation in cmd.Execute\")
    }
}
\`\`\`

## Additional Notes
This improvement was deferred from PR #15 to keep the PR size manageable.
" \
  --assignee "ccamel" \
  --repo "axone-protocol/axone-mcp"
```

Length of output: 1468

---



</details>

@ccamel Issue #16 has been created to track adding test coverage for context propagation in the main package. It includes the suggested test approach and has been assigned to you as requested.

(⌐■_■) *rabbit getting things done*

---

<details>
<summary>🧬 Code Definitions Used</summary>

### Relevant Code Snippets

#### Filename: `cmd/root.go`
- **Lines 24-29**:
```go
func Execute(ctx context.Context) {
	err := rootCmd.ExecuteContext(ctx)
	if err != nil {
		os.Exit(1)
	}
}
```
- **Description**: This function `Execute` takes a `context.Context` as a parameter. It attempts to execute a command (`rootCmd`) within the provided context. If an error occurs during execution, the program exits with a status code of 1, indicating failure. There is no return value, and it does not handle the error beyond exiting the program.

</details>

</answer></rawResChunk> -->

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-04-07T13:56:35Z
author_association: NONE
diff_hunk: @@ -21,4 +40,74 @@
 
 func init() {
 	rootCmd.AddCommand(serveCmd)
+
+	serveCmd.PersistentFlags().String(FlagNodeGrpc, "127.0.0.1:9090",
+		"Address <host>:<port> of the gRPC endpoint exposed by the axone node")
+	_ = viper.BindPFlag(FlagNodeGrpc, serveCmd.PersistentFlags().Lookup(FlagNodeGrpc))
+
+	serveCmd.PersistentFlags().Bool(FlagGrpcNoTLS, false,
+		"Disable TLS when connecting to the gRPC endpoint")
+	_ = viper.BindPFlag(FlagGrpcNoTLS, serveCmd.PersistentFlags().Lookup(FlagGrpcNoTLS))
+
+	serveCmd.PersistentFlags().Bool(FlagGrpcTLSSkipVerify, false,
+		"Use TLS but skip certificate verification (insecure)")
+	_ = viper.BindPFlag(FlagGrpcTLSSkipVerify, serveCmd.PersistentFlags().Lookup(FlagGrpcTLSSkipVerify))
+
+	serveCmd.PersistentFlags().String(FlagDataverseAddr, "",
+		"Address of the dataverse CosmWasm contract")
+	_ = serveCmd.MarkPersistentFlagRequired(FlagDataverseAddr)
+	_ = viper.BindPFlag(FlagDataverseAddr, serveCmd.PersistentFlags().Lookup(FlagDataverseAddr))
+
+	serveCmd.PersistentFlags().Duration(FlagGrpcTimeout, 5*time.Second,
+		"Timeout for establishing the gRPC connection to the axone node (e.g. 5s, 2m)")
+	_ = viper.BindPFlag(FlagGrpcTimeout, serveCmd.PersistentFlags().Lookup(FlagGrpcTimeout))
+
+	serveCmd.MarkFlagsMutuallyExclusive(FlagGrpcNoTLS, FlagGrpcTLSSkipVerify)
+}
+
+type contextKey string
+
+const dataverseQueryClientKey contextKey = "dataverseQueryClient"
+
+// WithDataverseClient injects a dataverse client into context.
+func WithDataverseClient(ctx context.Context, client dataverse.QueryClient) context.Context {
+	return context.WithValue(ctx, dataverseQueryClientKey, client)
+}
+
+// buildMCPServer creates a new MCP server using the dataverse client from context, or builds a new one.
+func buildMCPServer(ctx context.Context) (*server.MCPServer, error) {
+	client, ok := ctx.Value(dataverseQueryClientKey).(dataverse.QueryClient)
+	if !ok {
+		var err error
+		client, err = buildDataverseClient(ctx)
+		if err != nil {
+			return nil, err
+		}
+	}
+
+	return mcp.NewServer(client)
+}
+
+// buildDataverseClient fetches a new dataverse client using configuration.
+func buildDataverseClient(ctx context.Context) (dataverse.QueryClient, error) {
+	ctx, cancel := context.WithTimeout(ctx, viper.GetDuration(FlagGrpcTimeout))
+	defer cancel()
+
+	return dataverse.NewQueryClient(
+		ctx,
+		viper.GetString(FlagNodeGrpc),
+		viper.GetString(FlagDataverseAddr),
+		grpc.WithTransportCredentials(getTransportCredentials()),
+	)
+}
+
+func getTransportCredentials() grpccreds.TransportCredentials {
+	switch {
+	case viper.GetBool(FlagGrpcNoTLS):
+		return insecure.NewCredentials()
+	case viper.GetBool(FlagGrpcTLSSkipVerify):
+		return grpccreds.NewTLS(&tls.Config{InsecureSkipVerify: true}) //nolint:gosec
+	default:
+		return grpccreds.NewTLS(&tls.Config{MinVersion: tls.VersionTLS12})
+	}
path: cmd/serve.go
user: login: ccamel
body: 🧐  hmm, that's a  good catch. Agree. Will be fixed.
created_at: 2025-04-07T13:57:59Z
author_association: MEMBER
diff_hunk: @@ -21,4 +40,74 @@
 
 func init() {
 	rootCmd.AddCommand(serveCmd)
+
+	serveCmd.PersistentFlags().String(FlagNodeGrpc, "127.0.0.1:9090",
+		"Address <host>:<port> of the gRPC endpoint exposed by the axone node")
+	_ = viper.BindPFlag(FlagNodeGrpc, serveCmd.PersistentFlags().Lookup(FlagNodeGrpc))
+
+	serveCmd.PersistentFlags().Bool(FlagGrpcNoTLS, false,
+		"Disable TLS when connecting to the gRPC endpoint")
+	_ = viper.BindPFlag(FlagGrpcNoTLS, serveCmd.PersistentFlags().Lookup(FlagGrpcNoTLS))
+
+	serveCmd.PersistentFlags().Bool(FlagGrpcTLSSkipVerify, false,
+		"Use TLS but skip certificate verification (insecure)")
+	_ = viper.BindPFlag(FlagGrpcTLSSkipVerify, serveCmd.PersistentFlags().Lookup(FlagGrpcTLSSkipVerify))
+
+	serveCmd.PersistentFlags().String(FlagDataverseAddr, "",
+		"Address of the dataverse CosmWasm contract")
+	_ = serveCmd.MarkPersistentFlagRequired(FlagDataverseAddr)
+	_ = viper.BindPFlag(FlagDataverseAddr, serveCmd.PersistentFlags().Lookup(FlagDataverseAddr))
+
+	serveCmd.PersistentFlags().Duration(FlagGrpcTimeout, 5*time.Second,
+		"Timeout for establishing the gRPC connection to the axone node (e.g. 5s, 2m)")
+	_ = viper.BindPFlag(FlagGrpcTimeout, serveCmd.PersistentFlags().Lookup(FlagGrpcTimeout))
+
+	serveCmd.MarkFlagsMutuallyExclusive(FlagGrpcNoTLS, FlagGrpcTLSSkipVerify)
+}
+
+type contextKey string
+
+const dataverseQueryClientKey contextKey = "dataverseQueryClient"
+
+// WithDataverseClient injects a dataverse client into context.
+func WithDataverseClient(ctx context.Context, client dataverse.QueryClient) context.Context {
+	return context.WithValue(ctx, dataverseQueryClientKey, client)
+}
+
+// buildMCPServer creates a new MCP server using the dataverse client from context, or builds a new one.
+func buildMCPServer(ctx context.Context) (*server.MCPServer, error) {
+	client, ok := ctx.Value(dataverseQueryClientKey).(dataverse.QueryClient)
+	if !ok {
+		var err error
+		client, err = buildDataverseClient(ctx)
+		if err != nil {
+			return nil, err
+		}
+	}
+
+	return mcp.NewServer(client)
+}
+
+// buildDataverseClient fetches a new dataverse client using configuration.
+func buildDataverseClient(ctx context.Context) (dataverse.QueryClient, error) {
+	ctx, cancel := context.WithTimeout(ctx, viper.GetDuration(FlagGrpcTimeout))
+	defer cancel()
+
+	return dataverse.NewQueryClient(
+		ctx,
+		viper.GetString(FlagNodeGrpc),
+		viper.GetString(FlagDataverseAddr),
+		grpc.WithTransportCredentials(getTransportCredentials()),
+	)
+}
+
+func getTransportCredentials() grpccreds.TransportCredentials {
+	switch {
+	case viper.GetBool(FlagGrpcNoTLS):
+		return insecure.NewCredentials()
+	case viper.GetBool(FlagGrpcTLSSkipVerify):
+		return grpccreds.NewTLS(&tls.Config{InsecureSkipVerify: true}) //nolint:gosec
+	default:
+		return grpccreds.NewTLS(&tls.Config{MinVersion: tls.VersionTLS12})
+	}
path: cmd/serve.go
user: login: coderabbitai[bot]
body: @ccamel Thank you for promptly addressing this security concern. Adding the minimum TLS version will indeed strengthen the security posture of your application, even when certificate verification is disabled.



<!-- <agentComponentType>chat-answer</agentComponentType> -->

<!-- <rawResChunk><answer>@ccamel Thank you for promptly addressing this security concern. Adding the minimum TLS version will indeed strengthen the security posture of your application, even when certificate verification is disabled.</answer></rawResChunk> -->

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-04-07T13:58:25Z
author_association: NONE

PR comments:
user: login: coderabbitai[bot]
created_at: 2025-04-07T13:39:58Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- This is an auto-generated comment: skip review by coderabbit.ai -->

> [!IMPORTANT]
> ## Review skipped
> 
> Auto incremental reviews are disabled on this repository.
> 
> Please check the settings in the CodeRabbit UI or the `.coderabbit.yaml` file in this repository. To trigger a single review, invoke the `@coderabbitai review` command.
> 
> You can disable this status message by setting the `reviews.review_status` to `false` in the CodeRabbit configuration file.

<!-- end of auto-generated comment: skip review by coderabbit.ai -->
<!-- walkthrough_start -->

## Walkthrough
The pull request introduces extensive improvements across the build system, command execution, server instantiation, testing, and dependency management. The Makefile now defines tool versioning and a target for generating mocks. Documentation is updated to detail the new `get_resource_governance_code` tool. Command modules have been refactored to support context-aware execution and enhanced flag binding using Viper. In addition, the MCP server now requires a dataverse query client and integrates a new governance code retrieval feature. Testing has been improved with mock implementations, and go.mod reflects numerous dependency updates and additions.

## Changes

| Files                                                                      | Change Summary |
|----------------------------------------------------------------------------|----------------|
| Makefile                                                                   | Adds `MOCKGEN_VERSION` and `MOCKGEN_BIN` variables; updates the tools target to include `mockgen`; introduces a new `mock` target and installation rule for `mockgen`. |
| README.md                                                                  | Adds an MCP compatibility badge; introduces an "Available tools" section documenting the `get_resource_governance_code` tool with its JSON input schema. |
| cmd/{log.go, root.go, serve-sse.go, serve-stdio.go, serve.go, version.go, main.go} | Refactors command execution to use context; removes package-level log variables; updates flag definitions and binds them to Viper; replaces direct server creation with `buildMCPServer` that integrates a dataverse client; modifies the Execute function signature to accept a context. |
| cmd/serve-stdio_test.go, internal/mcp/server_test.go                      | Updates test cases by removing obsolete scenarios; adds a new command-line argument and mock expectations for dataverse client context in JSON-RPC message handling. |
| internal/mcp/{dataverse_mocks.go, governance.go, server.go, util.go}         | Introduces a new governance tool via `getGovernanceCode`; adds a generic `requiredParam` helper; updates `NewServer` to accept a dataverse query client; adds a mock implementation for the QueryClient interface. |
| go.mod                                                                     | Adds several new direct dependencies (e.g., axone-sdk, viper, grpc, mock) and indirect dependencies; includes updates to existing dependencies and a replace directive for a custom package fork. |

## Sequence Diagram(s)
```mermaid
sequenceDiagram
    participant C as Client
    participant S as MCP Server
    participant D as Dataverse Query Client
    C->>S: Send governance code request (with resource parameter)
    S->>S: Extract and validate resource parameter
    S->>D: Call GetResourceGovAddr(resource)
    D-->>S: Return governance address
    S->>D: Call GovCode(governance address)
    D-->>S: Return governance code
    S-->>C: Return governance code result
```

<!-- walkthrough_end -->
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- tips_start -->

---



<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=axone-protocol/axone-mcp&utm_content=15):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai plan` to trigger planning for file edits and PR creation.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: NONE
user: login: codecov[bot]
created_at: 2025-04-07T13:42:00Z
body: ## [Codecov](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol) Report
Attention: Patch coverage is `68.23529%` with `54 lines` in your changes missing coverage. Please review.

| [Files with missing lines](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol) | Patch % | Lines |
|---|---|---|
| [cmd/serve.go](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&filepath=cmd%2Fserve.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol#diff-Y21kL3NlcnZlLmdv) | 53.84% | [23 Missing and 1 partial :warning: ](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol) |
| [internal/mcp/dataverse\_mocks.go](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&filepath=internal%2Fmcp%2Fdataverse_mocks.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol#diff-aW50ZXJuYWwvbWNwL2RhdGF2ZXJzZV9tb2Nrcy5nbw==) | 57.14% | [18 Missing :warning: ](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol) |
| [internal/mcp/util.go](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&filepath=internal%2Fmcp%2Futil.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol#diff-aW50ZXJuYWwvbWNwL3V0aWwuZ28=) | 60.00% | [4 Missing and 2 partials :warning: ](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol) |
| [cmd/serve-sse.go](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&filepath=cmd%2Fserve-sse.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol#diff-Y21kL3NlcnZlLXNzZS5nbw==) | 63.63% | [4 Missing :warning: ](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol) |
| [main.go](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&filepath=main.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol#diff-bWFpbi5nbw==) | 0.00% | [2 Missing :warning: ](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol) |

| [Files with missing lines](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol) | Coverage Δ | |
|---|---|---|
| [cmd/log.go](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&filepath=cmd%2Flog.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol#diff-Y21kL2xvZy5nbw==) | `51.06% <100.00%> (+5.82%)` | :arrow_up: |
| [cmd/root.go](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&filepath=cmd%2Froot.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol#diff-Y21kL3Jvb3QuZ28=) | `76.92% <100.00%> (+19.78%)` | :arrow_up: |
| [cmd/serve-stdio.go](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&filepath=cmd%2Fserve-stdio.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol#diff-Y21kL3NlcnZlLXN0ZGlvLmdv) | `61.53% <100.00%> (-13.47%)` | :arrow_down: |
| [cmd/version.go](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&filepath=cmd%2Fversion.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol#diff-Y21kL3ZlcnNpb24uZ28=) | `25.80% <100.00%> (+7.94%)` | :arrow_up: |
| [internal/mcp/governance.go](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&filepath=internal%2Fmcp%2Fgovernance.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol#diff-aW50ZXJuYWwvbWNwL2dvdmVybmFuY2UuZ28=) | `100.00% <100.00%> (ø)` | |
| [internal/mcp/server.go](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&filepath=internal%2Fmcp%2Fserver.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol#diff-aW50ZXJuYWwvbWNwL3NlcnZlci5nbw==) | `100.00% <100.00%> (ø)` | |
| [main.go](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&filepath=main.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol#diff-bWFpbi5nbw==) | `0.00% <0.00%> (ø)` | |
| [cmd/serve-sse.go](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&filepath=cmd%2Fserve-sse.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol#diff-Y21kL3NlcnZlLXNzZS5nbw==) | `17.54% <63.63%> (+7.92%)` | :arrow_up: |
| [internal/mcp/util.go](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&filepath=internal%2Fmcp%2Futil.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol#diff-aW50ZXJuYWwvbWNwL3V0aWwuZ28=) | `60.00% <60.00%> (ø)` | |
| [internal/mcp/dataverse\_mocks.go](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree&filepath=internal%2Fmcp%2Fdataverse_mocks.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol#diff-aW50ZXJuYWwvbWNwL2RhdGF2ZXJzZV9tb2Nrcy5nbw==) | `57.14% <57.14%> (ø)` | |
| ... and [1 more](https://app.codecov.io/gh/axone-protocol/axone-mcp/pull/15?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=axone-protocol) | |

<details><summary> :rocket: New features to boost your workflow: </summary>

- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
</details>
author_association: NONE
user: login: ccamel
created_at: 2025-04-07T14:07:14Z
body: @coderabbitai resolve
author_association: MEMBER
user: login: coderabbitai[bot]
created_at: 2025-04-07T14:07:26Z
body: <!-- This is an auto-generated reply by CodeRabbit -->
<details>
<summary>:white_check_mark: Actions performed</summary>

Comments resolved and changes approved.

</details>
author_association: NONE
user: login: bot-anik
created_at: 2025-04-08T15:26:19Z
body: :tada: This PR is included in version 1.0.0 :tada:

The release is available on [GitHub release](https://github.com/axone-protocol/axone-mcp/releases/tag/v1.0.0)

Your **[semantic-release](https://github.com/semantic-release/semantic-release)** bot :package::rocket:
author_association: MEMBER