diff --git a/client/keyring/key_config.go b/client/keyring/key_config.go index 79b74ef2..51bb7b45 100644 --- a/client/keyring/key_config.go +++ b/client/keyring/key_config.go @@ -19,7 +19,7 @@ type KeyConfigOpt func(c *cosmosKeyConfig) error // WithKeyFrom sets the key name to use for signing. Must exist in the provided keyring. func WithKeyFrom(v string) KeyConfigOpt { return func(c *cosmosKeyConfig) error { - if len(v) > 0 { + if v != "" { c.KeyFrom = v } @@ -31,7 +31,7 @@ func WithKeyFrom(v string) KeyConfigOpt { // The package will fallback to os.Stdin if this option was not provided, but pass is required. func WithKeyPassphrase(v string) KeyConfigOpt { return func(c *cosmosKeyConfig) error { - if len(v) > 0 { + if v != "" { c.KeyPassphrase = v } @@ -43,7 +43,7 @@ func WithKeyPassphrase(v string) KeyConfigOpt { // The package will create a virtual keyring holding that key, to meet all the interfaces. func WithPrivKeyHex(v string) KeyConfigOpt { return func(c *cosmosKeyConfig) error { - if len(v) > 0 { + if v != "" { c.PrivKeyHex = v } @@ -55,7 +55,7 @@ func WithPrivKeyHex(v string) KeyConfigOpt { // The package will create a virtual keyring to derive the keys and meet all the interfaces. func WithMnemonic(v string) KeyConfigOpt { return func(c *cosmosKeyConfig) error { - if len(v) > 0 { + if v != "" { if !bip39.IsMnemonicValid(v) { err := errors.New("provided mnemonic is not a valid BIP39 mnemonic") return err diff --git a/client/keyring/keyring.go b/client/keyring/keyring.go index d9052b7f..18fb8473 100644 --- a/client/keyring/keyring.go +++ b/client/keyring/keyring.go @@ -44,7 +44,7 @@ func NewCosmosKeyring(cdc codec.Codec, opts ...ConfigOpt) (sdk.AccAddress, cosmk for keyIdx, keyConfig := range config.Keys { switch { - case len(keyConfig.Mnemonic) > 0: + case keyConfig.Mnemonic != "": if usingRealKeyring { return emptyCosmosAddress, nil, ErrMultipleKeysWithDifferentSecurity } else if kb == nil { @@ -65,7 +65,7 @@ func NewCosmosKeyring(cdc codec.Codec, opts ...ConfigOpt) (sdk.AccAddress, cosmk firstKey = &addr } - case len(keyConfig.PrivKeyHex) > 0: + case keyConfig.PrivKeyHex != "": if usingRealKeyring { return emptyCosmosAddress, nil, ErrMultipleKeysWithDifferentSecurity } else if kb == nil { @@ -86,7 +86,7 @@ func NewCosmosKeyring(cdc codec.Codec, opts ...ConfigOpt) (sdk.AccAddress, cosmk firstKey = &addr } - case len(keyConfig.KeyFrom) > 0: + case keyConfig.KeyFrom != "": if kb != nil { return emptyCosmosAddress, nil, ErrMultipleKeysWithDifferentSecurity } else { @@ -117,7 +117,7 @@ func NewCosmosKeyring(cdc codec.Codec, opts ...ConfigOpt) (sdk.AccAddress, cosmk } if realKB != nil { - if len(config.DefaultKey) > 0 { + if config.DefaultKey != "" { defaultKeyAddr, err := findKeyInKeyring(realKB, config, config.DefaultKey) if err != nil { return emptyCosmosAddress, nil, err @@ -129,7 +129,7 @@ func NewCosmosKeyring(cdc codec.Codec, opts ...ConfigOpt) (sdk.AccAddress, cosmk return *firstKey, realKB, nil } - if len(config.DefaultKey) > 0 { + if config.DefaultKey != "" { defaultKeyAddr, err := findKeyInKeyring(kb, config, config.DefaultKey) if err != nil { return emptyCosmosAddress, nil, err @@ -157,9 +157,11 @@ func fromPrivkeyHex( keyName := keyConfig.Name // check that if cosmos 'From' specified separately, it must match the provided privkey - if len(keyConfig.KeyFrom) > 0 { + if keyConfig.KeyFrom != "" { addressFrom, err := sdk.AccAddressFromBech32(keyConfig.KeyFrom) - if err == nil { + + switch { + case err == nil: if !bytes.Equal(addressFrom.Bytes(), addressFromPk.Bytes()) { err = errors.Wrapf( ErrUnexpectedAddress, @@ -169,19 +171,22 @@ func fromPrivkeyHex( return emptyCosmosAddress, err } - } else if len(keyName) == 0 { + + case keyName == "": // use it as a name then keyName = keyConfig.KeyFrom - } else if keyName != keyConfig.KeyFrom { + + case keyName != keyConfig.KeyFrom: err := errors.Errorf( "key 'from' opt is a name, but doesn't match given key name: %s != %s", keyConfig.KeyFrom, keyName, ) + return emptyCosmosAddress, err } } - if len(keyName) == 0 { + if keyName == "" { keyName = defaultKeyringKeyName } @@ -216,9 +221,10 @@ func fromMnemonic( keyName := keyConfig.Name // check that if cosmos 'From' specified separately, it must match the derived privkey - if len(keyConfig.KeyFrom) > 0 { + if keyConfig.KeyFrom != "" { addressFrom, err := sdk.AccAddressFromBech32(keyConfig.KeyFrom) - if err == nil { + switch { + case err == nil: if !bytes.Equal(addressFrom.Bytes(), addressFromPk.Bytes()) { err = errors.Wrapf( ErrUnexpectedAddress, @@ -228,10 +234,10 @@ func fromMnemonic( return emptyCosmosAddress, err } - } else if len(keyName) == 0 { + case keyName == "": // use it as a name then keyName = keyConfig.KeyFrom - } else if keyName != keyConfig.KeyFrom { + case keyName != keyConfig.KeyFrom: err := errors.Errorf( "key 'from' opt is a name, but doesn't match given key name: %s != %s", keyConfig.KeyFrom, keyName, @@ -241,13 +247,13 @@ func fromMnemonic( } // check that if 'PrivKeyHex' specified separately, it must match the derived privkey too - if len(keyConfig.PrivKeyHex) > 0 { + if keyConfig.PrivKeyHex != "" { if err := checkPrivkeyHexMatchesMnemonic(keyConfig.PrivKeyHex, pkBytes); err != nil { return emptyCosmosAddress, err } } - if len(keyName) == 0 { + if keyName == "" { keyName = defaultKeyringKeyName } @@ -286,7 +292,7 @@ func fromCosmosKeyring( fromIsAddress bool, ) (sdk.AccAddress, cosmkeyring.Keyring, error) { var passReader io.Reader = os.Stdin - if len(keyConfig.KeyPassphrase) > 0 { + if keyConfig.KeyPassphrase != "" { passReader = newPassReader(keyConfig.KeyPassphrase) } @@ -318,7 +324,7 @@ func fromCosmosKeyring( keyRecord, err = kb.KeyByAddress(fromAddress) } else { keyName := keyConfig.Name - if len(keyName) > 0 && keyConfig.KeyFrom != keyName { + if keyName != "" && keyConfig.KeyFrom != keyName { err := errors.Errorf( "key 'from' opt is a name, but doesn't match given key name: %s != %s", keyConfig.KeyFrom, keyName, diff --git a/client/keyring/keyring_config.go b/client/keyring/keyring_config.go index 42ac4cbc..ebf3e74b 100644 --- a/client/keyring/keyring_config.go +++ b/client/keyring/keyring_config.go @@ -32,7 +32,7 @@ const ( // WithKeyringDir option sets keyring path in the filesystem, useful when keyring backend is `file`. func WithKeyringDir(v string) ConfigOpt { return func(c *cosmosKeyringConfig) error { - if len(v) > 0 { + if v != "" { c.KeyringDir = v } @@ -43,7 +43,7 @@ func WithKeyringDir(v string) ConfigOpt { // WithKeyringAppName option sets keyring application name (used by Cosmos to separate keyrings). func WithKeyringAppName(v string) ConfigOpt { return func(c *cosmosKeyringConfig) error { - if len(v) > 0 { + if v != "" { c.KeyringAppName = v } @@ -111,7 +111,7 @@ func WithNamedKey(name string, opts ...KeyConfigOpt) ConfigOpt { // This key must exist in specified keys. func WithDefaultKey(v string) ConfigOpt { return func(c *cosmosKeyringConfig) error { - if len(v) > 0 { + if v != "" { c.DefaultKey = v } diff --git a/go.mod b/go.mod index 25c1e09d..411a8b43 100644 --- a/go.mod +++ b/go.mod @@ -123,7 +123,6 @@ require ( 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/orderedcode v0.0.1 // indirect github.com/gorilla/handlers v1.5.2 // indirect github.com/gorilla/mux v1.8.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect @@ -137,7 +136,6 @@ require ( github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-plugin v1.5.2 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect - github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.1.0 // indirect @@ -152,14 +150,12 @@ require ( github.com/klauspost/compress v1.17.7 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect - github.com/lib/pq v1.10.7 // indirect github.com/linxGnu/grocksdb v1.8.14 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect - github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect diff --git a/go.sum b/go.sum index 20ae5357..a9b25d4b 100644 --- a/go.sum +++ b/go.sum @@ -37,8 +37,6 @@ github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMb github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= -github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= -github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= 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/wasmvm/v2 v2.0.0 h1:IqNCI2G0mvs7K6ej17/I28805rVqnu+Y1cWDqIdwb08= @@ -89,8 +87,6 @@ github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= @@ -101,8 +97,6 @@ github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= 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/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= 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= @@ -176,7 +170,6 @@ github.com/bugsnag/panicwrap v1.3.4/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywR github.com/bytedance/sonic v1.10.0 h1:qtNZduETEIWJVIyDl01BeNxur2rW9OwTQ/yBqFRkKEk= github.com/bytedance/sonic v1.10.0/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= 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= @@ -231,8 +224,6 @@ github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1: github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/cometbft/cometbft-db v0.9.1 h1:MIhVX5ja5bXNHF8EYrThkG9F7r9kSfv8BX4LWaxWJ4M= github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= -github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= 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= @@ -296,10 +287,6 @@ github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WA 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/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= -github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= 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= @@ -741,10 +728,6 @@ github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdM 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/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= -github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= 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= @@ -755,8 +738,6 @@ github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxS 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/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/outcaste-io/ristretto v0.2.3 h1:AK4zt/fJ76kjlYObOeNwh4T3asEuaCmp26pOvUOL9w0= github.com/outcaste-io/ristretto v0.2.3/go.mod h1:W8HywhmtlopSB1jeMg3JtdIhf+DYkLAr0VN/s4+MHac= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= @@ -1100,7 +1081,6 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h 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-20190130150945-aca44879d564/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=