Bladeren bron

Merge pull request #156 from 9seconds/no-pools

Get rid of sync pools
tags/v1.0.6^2
Sergey Arkhipov 5 jaren geleden
bovenliggende
commit
5d17e264e6
No account linked to committer's email address
57 gewijzigde bestanden met toevoegingen van 473 en 304 verwijderingen
  1. 1
    0
      .gitignore
  2. 1
    1
      .golangci.toml
  3. 1
    0
      .travis.yml
  4. 5
    4
      Makefile
  5. 1
    2
      antireplay/init.go
  6. 2
    3
      cli/proxy.go
  7. 2
    0
      config/config.go
  8. 1
    1
      config/global_ips.go
  9. 2
    0
      conntypes/protocol.go
  10. 3
    1
      conntypes/type.go
  11. 5
    5
      faketls/client_protocol.go
  12. 3
    4
      faketls/cloak.go
  13. 0
    39
      faketls/pools.go
  14. 7
    7
      go.mod
  15. 307
    18
      go.sum
  16. 2
    2
      hub/connection.go
  17. 1
    0
      hub/connection_list.go
  18. 1
    2
      main.go
  19. 1
    1
      mtproto/protocol.go
  20. 1
    1
      mtproto/rpc/consts.go
  21. 4
    4
      mtproto/rpc/handshake_response.go
  22. 6
    6
      mtproto/rpc/nonce_response.go
  23. 3
    3
      ntp/ntp.go
  24. 1
    0
      obfuscated2/client_protocol.go
  25. 1
    1
      obfuscated2/frame.go
  26. 1
    2
      protocol/request.go
  27. 1
    2
      proxy/direct.go
  28. 6
    4
      proxy/middle.go
  29. 3
    3
      proxy/proxy.go
  30. 7
    4
      stats/stats_prometheus.go
  31. 5
    4
      stats/stats_statsd.go
  32. 5
    1
      telegram/api/api.go
  33. 4
    3
      telegram/base.go
  34. 1
    2
      telegram/middle.go
  35. 10
    6
      tlstypes/consts.go
  36. 5
    6
      tlstypes/handshake.go
  37. 0
    23
      tlstypes/pools.go
  38. 3
    4
      tlstypes/server_hello.go
  39. 2
    1
      utils/stream_cipher.go
  40. 4
    7
      wrappers/packet/mtproto_frame.go
  41. 0
    23
      wrappers/packet/pools.go
  42. 2
    5
      wrappers/packetack/client_abridged.go
  43. 1
    2
      wrappers/packetack/client_intermediate.go
  44. 4
    5
      wrappers/packetack/client_intermediate_secure.go
  45. 0
    23
      wrappers/packetack/pools.go
  46. 2
    1
      wrappers/packetack/proxy.go
  47. 1
    2
      wrappers/stream/blockcipher.go
  48. 5
    3
      wrappers/stream/conn.go
  49. 6
    2
      wrappers/stream/ctx.go
  50. 6
    6
      wrappers/stream/faketls.go
  51. 18
    18
      wrappers/stream/mtproto_cipher.go
  52. 4
    6
      wrappers/stream/obfuscated2.go
  53. 0
    23
      wrappers/stream/pools.go
  54. 2
    2
      wrappers/stream/rewind.go
  55. 1
    2
      wrappers/stream/stats_telegram.go
  56. 1
    2
      wrappers/stream/stats_traffic.go
  57. 1
    2
      wrappers/stream/timeout.go

+ 1
- 0
.gitignore Bestand weergeven

@@ -9,3 +9,4 @@ mtg
9 9
 vendor/
10 10
 version.go
11 11
 ccbuilds/
12
+.bin/

+ 1
- 1
.golangci.toml Bestand weergeven

@@ -10,4 +10,4 @@ format = "colored-line-number"
10 10
 
11 11
 [linters]
12 12
 enable-all = true
13
-disable = ["gochecknoglobals", "gomnd"]
13
+disable = ["gochecknoglobals", "gas", "gomnd", "goerr113"]

+ 1
- 0
.travis.yml Bestand weergeven

@@ -5,6 +5,7 @@ sudo: false
5 5
 dist: trusty
6 6
 
7 7
 go:
8
+  - 1.14.x
8 9
   - 1.13.x
9 10
   - master
10 11
 

+ 5
- 4
Makefile Bestand weergeven

@@ -4,7 +4,7 @@ APP_NAME     := $(IMAGE_NAME)
4 4
 
5 5
 CC_BINARIES  := $(shell bash -c "echo -n $(APP_NAME)-{linux,freebsd,openbsd}-{386,amd64} $(APP_NAME)-linux-{arm,arm64}")
6 6
 
7
-GOLANGCI_LINT_VERSION := v1.24.0
7
+GOLANGCI_LINT_VERSION := v1.30.0
8 8
 
9 9
 VERSION_GO         := $(shell go version)
10 10
 VERSION_DATE       := $(shell date -Ru)
@@ -53,7 +53,7 @@ crosscompile-dir:
53 53
 
54 54
 .PHONY: lint
55 55
 lint: vendor
56
-	@$(MOD_OFF) golangci-lint run
56
+	@$(MOD_OFF) "$(ROOT_DIR)/.bin/golangci-lint" run
57 57
 
58 58
 .PHONY: clean
59 59
 clean:
@@ -70,5 +70,6 @@ prepare: install-lint
70 70
 
71 71
 .PHONY: install-lint
72 72
 install-lint:
73
-	@curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh \
74
-		| $(MOD_OFF) bash -s -- -b $(GOPATH)/bin $(GOLANGCI_LINT_VERSION)
73
+	@mkdir -p ./bin || true && \
74
+		curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh \
75
+		| $(MOD_OFF) bash -s -- -b "$(ROOT_DIR)/.bin" $(GOLANGCI_LINT_VERSION)

+ 1
- 2
antireplay/init.go Bestand weergeven

@@ -3,9 +3,8 @@ package antireplay
3 3
 import (
4 4
 	"sync"
5 5
 
6
-	"github.com/VictoriaMetrics/fastcache"
7
-
8 6
 	"github.com/9seconds/mtg/config"
7
+	"github.com/VictoriaMetrics/fastcache"
9 8
 )
10 9
 
11 10
 type CacheInterface interface {

+ 2
- 3
cli/proxy.go Bestand weergeven

@@ -5,9 +5,6 @@ import (
5 5
 	"os"
6 6
 	"time"
7 7
 
8
-	"go.uber.org/zap"
9
-	"go.uber.org/zap/zapcore"
10
-
11 8
 	"github.com/9seconds/mtg/antireplay"
12 9
 	"github.com/9seconds/mtg/config"
13 10
 	"github.com/9seconds/mtg/faketls"
@@ -18,6 +15,8 @@ import (
18 15
 	"github.com/9seconds/mtg/stats"
19 16
 	"github.com/9seconds/mtg/telegram"
20 17
 	"github.com/9seconds/mtg/utils"
18
+	"go.uber.org/zap"
19
+	"go.uber.org/zap/zapcore"
21 20
 )
22 21
 
23 22
 func Proxy() error { // nolint: funlen

+ 2
- 0
config/config.go Bestand weergeven

@@ -22,6 +22,8 @@ func (s SecretMode) String() string {
22 22
 		return "simple"
23 23
 	case SecretModeSecured:
24 24
 		return "secured"
25
+	case SecretModeTLS:
26
+		return "tls"
25 27
 	}
26 28
 
27 29
 	return "tls"

+ 1
- 1
config/global_ips.go Bestand weergeven

@@ -60,7 +60,7 @@ func fetchIP(ctx context.Context, network string) (net.IP, error) {
60 60
 		return nil, fmt.Errorf("cannot perform a request: %w", err)
61 61
 	}
62 62
 
63
-	defer resp.Body.Close() // nolint: errcheck
63
+	defer resp.Body.Close()
64 64
 
65 65
 	respDataBytes, err := ioutil.ReadAll(resp.Body)
66 66
 	if err != nil {

+ 2
- 0
conntypes/protocol.go Bestand weergeven

@@ -8,6 +8,8 @@ func (c ConnectionProtocol) String() string {
8 8
 		return "any"
9 9
 	case ConnectionProtocolIPv4:
10 10
 		return "ipv4"
11
+	case ConnectionProtocolIPv6:
12
+		return "ipv6"
11 13
 	}
12 14
 
13 15
 	return "ipv6"

+ 3
- 1
conntypes/type.go Bestand weergeven

@@ -21,7 +21,9 @@ func (t ConnectionType) Tag() []byte {
21 21
 		return ConnectionTagAbridged
22 22
 	case ConnectionTypeIntermediate:
23 23
 		return ConnectionTagIntermediate
24
-	default:
24
+	case ConnectionTypeSecure, ConnectionTypeUnknown:
25 25
 		return ConnectionTagSecure
26 26
 	}
27
+
28
+	return ConnectionTagSecure
27 29
 }

+ 5
- 5
faketls/client_protocol.go Bestand weergeven

@@ -2,6 +2,7 @@ package faketls
2 2
 
3 3
 import (
4 4
 	"bufio"
5
+	"bytes"
5 6
 	"encoding/binary"
6 7
 	"errors"
7 8
 	"fmt"
@@ -48,8 +49,8 @@ func (c *ClientProtocol) Handshake(socket conntypes.StreamReadWriteCloser) (conn
48 49
 	}
49 50
 
50 51
 	conn := stream.NewFakeTLS(socket)
51
-	conn, err := c.ClientProtocol.Handshake(conn)
52 52
 
53
+	conn, err := c.ClientProtocol.Handshake(conn)
53 54
 	if err != nil {
54 55
 		return nil, err
55 56
 	}
@@ -63,9 +64,7 @@ func (c *ClientProtocol) tlsHandshake(conn io.ReadWriter) error {
63 64
 		return fmt.Errorf("cannot read initial record: %w", err)
64 65
 	}
65 66
 
66
-	buf := acquireBytesBuffer()
67
-	defer releaseBytesBuffer(buf)
68
-
67
+	buf := &bytes.Buffer{}
69 68
 	helloRecord.Data.WriteBytes(buf)
70 69
 
71 70
 	clientHello, err := tlstypes.ParseClientHello(buf.Bytes())
@@ -90,6 +89,7 @@ func (c *ClientProtocol) tlsHandshake(conn io.ReadWriter) error {
90 89
 
91 90
 	if antireplay.Cache.HasTLS(clientHello.Random[:]) {
92 91
 		stats.Stats.ReplayDetected()
92
+
93 93
 		return errors.New("replay attack is detected")
94 94
 	}
95 95
 
@@ -108,8 +108,8 @@ func (c *ClientProtocol) cloakHost(clientConn io.ReadWriteCloser) {
108 108
 	stats.Stats.CloakedRequest()
109 109
 
110 110
 	addr := net.JoinHostPort(config.C.CloakHost, strconv.Itoa(config.C.CloakPort))
111
-	hostConn, err := net.Dial("tcp", addr)
112 111
 
112
+	hostConn, err := net.Dial("tcp", addr)
113 113
 	if err != nil {
114 114
 		return
115 115
 	}

+ 3
- 4
faketls/cloak.go Bestand weergeven

@@ -53,9 +53,11 @@ func cloak(one, another io.ReadWriteCloser) {
53 53
 				return
54 54
 			case <-lastActivityTimer.C:
55 55
 				cancel()
56
+
56 57
 				return
57 58
 			case <-maxTimer.C:
58 59
 				cancel()
60
+
59 61
 				return
60 62
 			}
61 63
 		}
@@ -67,8 +69,5 @@ func cloak(one, another io.ReadWriteCloser) {
67 69
 func cloakPipe(one io.Writer, another io.Reader, wg *sync.WaitGroup) {
68 70
 	defer wg.Done()
69 71
 
70
-	buf := acquireCloakBuffer()
71
-	defer releaseCloakBuffer(buf)
72
-
73
-	io.CopyBuffer(one, another, *buf) // nolint: errcheck
72
+	io.Copy(one, another) // nolint: errcheck
74 73
 }

+ 0
- 39
faketls/pools.go Bestand weergeven

@@ -1,39 +0,0 @@
1
-package faketls
2
-
3
-import (
4
-	"bytes"
5
-	"sync"
6
-)
7
-
8
-const cloakBufferSize = 1024
9
-
10
-var (
11
-	poolBytesBuffer = sync.Pool{
12
-		New: func() interface{} {
13
-			return &bytes.Buffer{}
14
-		},
15
-	}
16
-	poolCloakBuffer = sync.Pool{
17
-		New: func() interface{} {
18
-			rv := make([]byte, cloakBufferSize)
19
-			return &rv
20
-		},
21
-	}
22
-)
23
-
24
-func acquireBytesBuffer() *bytes.Buffer {
25
-	return poolBytesBuffer.Get().(*bytes.Buffer)
26
-}
27
-
28
-func acquireCloakBuffer() *[]byte {
29
-	return poolCloakBuffer.Get().(*[]byte)
30
-}
31
-
32
-func releaseBytesBuffer(buf *bytes.Buffer) {
33
-	buf.Reset()
34
-	poolBytesBuffer.Put(buf)
35
-}
36
-
37
-func releaseCloakBuffer(buf *[]byte) {
38
-	poolCloakBuffer.Put(buf)
39
-}

+ 7
- 7
go.mod Bestand weergeven

@@ -6,16 +6,16 @@ require (
6 6
 	github.com/VictoriaMetrics/fastcache v1.5.7
7 7
 	github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d
8 8
 	github.com/beevik/ntp v0.3.0
9
-	github.com/golang/protobuf v1.3.5 // indirect
10
-	github.com/prometheus/client_golang v1.5.1
11
-	github.com/prometheus/procfs v0.0.11 // indirect
9
+	github.com/prometheus/client_golang v1.7.1
10
+	github.com/prometheus/common v0.11.1 // indirect
12 11
 	github.com/smira/go-statsd v1.3.1
13
-	go.uber.org/zap v1.14.1
14
-	golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59
12
+	go.uber.org/zap v1.15.0
13
+	golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de
15 14
 	golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect
16
-	golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e // indirect
17
-	golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775
15
+	golang.org/x/net v0.0.0-20200707034311-ab3426394381 // indirect
16
+	golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9
18 17
 	golang.org/x/tools v0.0.0-20200319210407-521f4a0cd458 // indirect
18
+	google.golang.org/protobuf v1.25.0 // indirect
19 19
 	gopkg.in/alecthomas/kingpin.v2 v2.2.6
20 20
 	honnef.co/go/tools v0.0.1-2020.1.3 // indirect
21 21
 )

+ 307
- 18
go.sum Bestand weergeven

@@ -1,7 +1,14 @@
1
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
2
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
1 3
 github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
2 4
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
5
+github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
6
+github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
7
+github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
3 8
 github.com/VictoriaMetrics/fastcache v1.5.7 h1:4y6y0G8PRzszQUYIQHHssv/jgPHAb5qQuuDNdCbyAgw=
4 9
 github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8=
10
+github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
11
+github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
5 12
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU=
6 13
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
7 14
 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
@@ -14,6 +21,15 @@ github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2c
14 21
 github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
15 22
 github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8=
16 23
 github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM=
24
+github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
25
+github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
26
+github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
27
+github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
28
+github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
29
+github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
30
+github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
31
+github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
32
+github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
17 33
 github.com/beevik/ntp v0.3.0 h1:xzVrPrE4ziasFXgBVBZJDP0Wg/KpMwk2KHJ4Ba8GrDw=
18 34
 github.com/beevik/ntp v0.3.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg=
19 35
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0=
@@ -22,85 +38,251 @@ github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
22 38
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
23 39
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
24 40
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
41
+github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
42
+github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
43
+github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
44
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
25 45
 github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
26 46
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
47
+github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
48
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
49
+github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
50
+github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
51
+github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
52
+github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
53
+github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
54
+github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
55
+github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
27 56
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
28 57
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
29 58
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
59
+github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
60
+github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
61
+github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
62
+github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
63
+github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
64
+github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
65
+github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
66
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
67
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
68
+github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
69
+github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
70
+github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
71
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
72
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
30 73
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
31 74
 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
75
+github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
32 76
 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
33 77
 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
78
+github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
79
+github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
34 80
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
81
+github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
35 82
 github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo=
36 83
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
84
+github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
85
+github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
86
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
87
+github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
88
+github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
89
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
37 90
 github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
38 91
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
39 92
 github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
40 93
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
41 94
 github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
42 95
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
43
-github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls=
44
-github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
96
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
97
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
98
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
99
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
100
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
101
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
102
+github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
103
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
104
+github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
45 105
 github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
46 106
 github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
107
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
108
+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
109
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
110
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
47 111
 github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
48 112
 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
49 113
 github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
50 114
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
115
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
116
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
51 117
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
52 118
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
119
+github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
120
+github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
121
+github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
122
+github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
123
+github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
124
+github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
125
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
126
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
127
+github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
128
+github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
129
+github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
130
+github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
131
+github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
132
+github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
133
+github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
134
+github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
135
+github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
136
+github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
137
+github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
138
+github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
139
+github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
140
+github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
141
+github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
142
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
143
+github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
144
+github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
145
+github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
146
+github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
147
+github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
148
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
149
+github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
150
+github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
151
+github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
152
+github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
153
+github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
154
+github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
53 155
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
54
-github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
156
+github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
157
+github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
158
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
159
+github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
55 160
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
161
+github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
162
+github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
56 163
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
57 164
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
165
+github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
58 166
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
59 167
 github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
60 168
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
61 169
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
62 170
 github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
63 171
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
172
+github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
173
+github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
174
+github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
175
+github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
176
+github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
177
+github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
178
+github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
64 179
 github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
65 180
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
181
+github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
182
+github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
183
+github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
184
+github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
185
+github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
186
+github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
187
+github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
188
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
66 189
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
67 190
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
68 191
 github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
69 192
 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
70 193
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
194
+github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
195
+github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
196
+github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
197
+github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=
198
+github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w=
199
+github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
200
+github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
201
+github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
202
+github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
203
+github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
204
+github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
205
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
206
+github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
207
+github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
208
+github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
209
+github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
210
+github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
211
+github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
212
+github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
213
+github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA=
214
+github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
215
+github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
216
+github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
217
+github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
218
+github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
219
+github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
220
+github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
221
+github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
222
+github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
71 223
 github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
72 224
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
73 225
 github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
74 226
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
227
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
228
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
229
+github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
75 230
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
76 231
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
232
+github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
77 233
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
234
+github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
78 235
 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
79
-github.com/prometheus/client_golang v1.5.1 h1:bdHYieyGlH+6OLEk2YQha8THib30KP0/yD0YH9m6xcA=
80
-github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
236
+github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
237
+github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA=
238
+github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
81 239
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8=
82 240
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
241
+github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
83 242
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE=
84 243
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
244
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
245
+github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
85 246
 github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
86 247
 github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
248
+github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
87 249
 github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
88 250
 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
89
-github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U=
90
-github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
251
+github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
252
+github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
253
+github.com/prometheus/common v0.11.1 h1:0ZISXCMRuCZcxF77aT1BXY5m74mX2vrGYl1dSwBI0Jo=
254
+github.com/prometheus/common v0.11.1/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
91 255
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d h1:GoAlyOgbOEIFdaDqxJVlbOQ1DtGmZWs/Qau0hIlk+WQ=
92 256
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
257
+github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
93 258
 github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
94 259
 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
95 260
 github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8=
96 261
 github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
97
-github.com/prometheus/procfs v0.0.11 h1:DhHlBtkHWPYi8O2y31JkK0TF+DGM+51OopZjH/Ia5qI=
98
-github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
262
+github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8=
263
+github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
264
+github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
265
+github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
99 266
 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
267
+github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
268
+github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
269
+github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
270
+github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
271
+github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
100 272
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
101 273
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
274
+github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
275
+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
276
+github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
102 277
 github.com/smira/go-statsd v1.3.1 h1:JalGiHNdK7GqVAPpg7j0Kwp2jZrz/fCg/B4ZuNuBY2w=
103 278
 github.com/smira/go-statsd v1.3.1/go.mod h1:1srXJ9/pbnN04G8f4F1jUzsGOnwkPKXciyqpewGlkC4=
279
+github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
280
+github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
281
+github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
282
+github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
283
+github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
284
+github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
285
+github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
104 286
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
105 287
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
106 288
 github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
@@ -109,22 +291,45 @@ github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0
109 291
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
110 292
 github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
111 293
 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
294
+github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
295
+github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
296
+github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
297
+github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
112 298
 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
299
+go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
300
+go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
301
+go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
302
+go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
303
+go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
304
+go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
305
+go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
113 306
 go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk=
114 307
 go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
308
+go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
309
+go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
115 310
 go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A=
116 311
 go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
117 312
 go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
118 313
 go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
119
-go.uber.org/zap v1.14.1 h1:nYDKopTbvAPq/NrUVZwT15y2lpROBiLLyoRTbXOYWOo=
120
-go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
314
+go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
315
+go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
316
+go.uber.org/zap v1.15.0 h1:ZZCA22JRF2gQE5FoNmhmrf7jeJJ2uhqDUNRYKm8dvmM=
317
+go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
121 318
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
319
+golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
122 320
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
123 321
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
124 322
 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
323
+golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
125 324
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
126
-golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59 h1:3zb4D3T4G8jdExgVU/95+vQXfpEPiMdCaZgmGVxjNHM=
127
-golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
325
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
326
+golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig=
327
+golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
328
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
329
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
330
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
331
+golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
332
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
128 333
 golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
129 334
 golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
130 335
 golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k=
@@ -134,38 +339,77 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee h1:WG0RUwxtNT4qqaXX3DPA8zH
134 339
 golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
135 340
 golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ=
136 341
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
342
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
343
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
344
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
345
+golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
137 346
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
347
+golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
348
+golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
349
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
350
+golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
351
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
138 352
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
139 353
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
354
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
140 355
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
141 356
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
357
+golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
142 358
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
143
-golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
144
-golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
359
+golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
360
+golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
361
+golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
362
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
363
+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
364
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
145 365
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
146 366
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
147 367
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
368
+golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
148 369
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
149 370
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
371
+golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
372
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
150 373
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
374
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
375
+golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
376
+golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
151 377
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
378
+golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
152 379
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
153 380
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
154 381
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
382
+golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
383
+golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
384
+golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
385
+golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
155 386
 golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
156
-golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
157 387
 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
158 388
 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
159
-golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775 h1:TC0v2RSO1u2kn1ZugjrFXkRZAEaqMN/RW+OTZkBzmLE=
160
-golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
389
+golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
390
+golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
391
+golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9 h1:yi1hN8dcqI9l8klZfy4B8mJvFmmAxJEePIQQFNSd7Cs=
392
+golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
161 393
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
394
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
395
+golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
396
+golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
397
+golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
398
+golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
399
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
400
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
401
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
162 402
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
403
+golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
404
+golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
405
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
163 406
 golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
164 407
 golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
165 408
 golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs=
166 409
 golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
167 410
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
168 411
 golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
412
+golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
169 413
 golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
170 414
 golang.org/x/tools v0.0.0-20200319210407-521f4a0cd458 h1:DgonIcqC7u+gVZX7lpuReBil5B/i8fvW/hAQdhT6/ao=
171 415
 golang.org/x/tools v0.0.0-20200319210407-521f4a0cd458/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
@@ -173,6 +417,37 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
173 417
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
174 418
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
175 419
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
420
+google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
421
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
422
+google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
423
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
424
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
425
+google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
426
+google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
427
+google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
428
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
429
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
430
+google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
431
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
432
+google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
433
+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
434
+google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
435
+google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
436
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
437
+google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
438
+google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
439
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
440
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
441
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
442
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
443
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
444
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
445
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
446
+google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
447
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
448
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
449
+google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
450
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
176 451
 gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
177 452
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
178 453
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -180,7 +455,14 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33
180 455
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
181 456
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
182 457
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
458
+gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
183 459
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
460
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
461
+gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
462
+gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
463
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
464
+gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
465
+gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
184 466
 gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
185 467
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
186 468
 gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
@@ -188,7 +470,14 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
188 470
 gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
189 471
 gopkg.in/yaml.v2 v2.2.5 h1:ymVxjfMaHvXD8RqPRmzHHsB3VvucivSkIAvJFDI5O3c=
190 472
 gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
473
+gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
474
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
475
+honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
476
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
477
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
191 478
 honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
192 479
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
193 480
 honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U=
194 481
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
482
+sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
483
+sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=

+ 2
- 2
hub/connection.go Bestand weergeven

@@ -6,12 +6,11 @@ import (
6 6
 	"sync"
7 7
 	"time"
8 8
 
9
-	"go.uber.org/zap"
10
-
11 9
 	"github.com/9seconds/mtg/conntypes"
12 10
 	"github.com/9seconds/mtg/mtproto"
13 11
 	"github.com/9seconds/mtg/mtproto/rpc"
14 12
 	"github.com/9seconds/mtg/protocol"
13
+	"go.uber.org/zap"
15 14
 )
16 15
 
17 16
 const connectionTTL = time.Hour
@@ -90,6 +89,7 @@ func (c *connection) readLoop() {
90 89
 		response, err := rpc.ParseProxyResponse(packet)
91 90
 		if err != nil {
92 91
 			c.logger.Debugw("Failed response", "error", err)
92
+
93 93
 			continue
94 94
 		}
95 95
 

+ 1
- 0
hub/connection_list.go Bestand weergeven

@@ -25,6 +25,7 @@ func (c *connectionList) get(conn *ProxyConn) (*connection, error) {
25 25
 
26 26
 	if err = newConn.Attach(conn); err != nil {
27 27
 		newConn.Close()
28
+
28 29
 		return nil, fmt.Errorf("cannot attach to the newly created connection: %w", err)
29 30
 	}
30 31
 

+ 1
- 2
main.go Bestand weergeven

@@ -7,11 +7,10 @@ import (
7 7
 	"strings"
8 8
 	"time"
9 9
 
10
-	kingpin "gopkg.in/alecthomas/kingpin.v2"
11
-
12 10
 	"github.com/9seconds/mtg/cli"
13 11
 	"github.com/9seconds/mtg/config"
14 12
 	"github.com/9seconds/mtg/utils"
13
+	kingpin "gopkg.in/alecthomas/kingpin.v2"
15 14
 )
16 15
 
17 16
 var version = "dev" // has to be set by ldflags

+ 1
- 1
mtproto/protocol.go Bestand weergeven

@@ -19,8 +19,8 @@ func TelegramProtocol(req *protocol.TelegramRequest) (conntypes.PacketReadWriteC
19 19
 	}
20 20
 
21 21
 	rpcNonceConn := packet.NewMtprotoFrame(conn, rpc.SeqNoNonce)
22
-	rpcNonceReq, err := doRPCNonceRequest(rpcNonceConn)
23 22
 
23
+	rpcNonceReq, err := doRPCNonceRequest(rpcNonceConn)
24 24
 	if err != nil {
25 25
 		return nil, fmt.Errorf("cannot do nonce request: %w", err)
26 26
 	}

+ 1
- 1
mtproto/rpc/consts.go Bestand weergeven

@@ -7,7 +7,7 @@ const (
7 7
 	SeqNoHandshake = -1
8 8
 )
9 9
 
10
-// Different constants for RPC protocol
10
+// Different constants for RPC protocol.
11 11
 var (
12 12
 	TagCloseExt     = []byte{0xa2, 0x34, 0xb6, 0x5e}
13 13
 	TagProxyAns     = []byte{0x0d, 0xda, 0x03, 0x44}

+ 4
- 4
mtproto/rpc/handshake_response.go Bestand weergeven

@@ -17,10 +17,10 @@ type HandshakeResponse struct {
17 17
 func (r *HandshakeResponse) Bytes() []byte {
18 18
 	buf := &bytes.Buffer{}
19 19
 
20
-	buf.Write(r.Type)      // nolint: gosec
21
-	buf.Write(r.Flags)     // nolint: gosec
22
-	buf.Write(r.SenderPID) // nolint: gosec
23
-	buf.Write(r.PeerPID)   // nolint: gosec
20
+	buf.Write(r.Type)
21
+	buf.Write(r.Flags)
22
+	buf.Write(r.SenderPID)
23
+	buf.Write(r.PeerPID)
24 24
 
25 25
 	return buf.Bytes()
26 26
 }

+ 6
- 6
mtproto/rpc/nonce_response.go Bestand weergeven

@@ -15,13 +15,13 @@ type NonceResponse struct {
15 15
 
16 16
 // Bytes returns serialized form of the nonce response.
17 17
 func (r *NonceResponse) Bytes() []byte {
18
-	buf := &bytes.Buffer{}
18
+	buf := bytes.Buffer{}
19 19
 
20
-	buf.Write(r.Type)        // nolint: gosec
21
-	buf.Write(r.KeySelector) // nolint: gosec
22
-	buf.Write(r.Crypto)      // nolint: gosec
23
-	buf.Write(r.CryptoTS)    // nolint: gosec
24
-	buf.Write(r.Nonce)       // nolint: gosec
20
+	buf.Write(r.Type)
21
+	buf.Write(r.KeySelector)
22
+	buf.Write(r.Crypto)
23
+	buf.Write(r.CryptoTS)
24
+	buf.Write(r.Nonce)
25 25
 
26 26
 	return buf.Bytes()
27 27
 }

+ 3
- 3
ntp/ntp.go Bestand weergeven

@@ -5,17 +5,16 @@ import (
5 5
 	"math/rand"
6 6
 	"time"
7 7
 
8
+	"github.com/9seconds/mtg/config"
8 9
 	"github.com/beevik/ntp"
9 10
 	"go.uber.org/zap"
10
-
11
-	"github.com/9seconds/mtg/config"
12 11
 )
13 12
 
14 13
 const autoUpdatePeriod = time.Minute
15 14
 
16 15
 // Fetch fetches the data on time drift.
17 16
 func Fetch() (time.Duration, error) {
18
-	url := config.C.NTPServers[rand.Intn(len(config.C.NTPServers))]
17
+	url := config.C.NTPServers[rand.Intn(len(config.C.NTPServers))] // nolint: gosec
19 18
 
20 19
 	resp, err := ntp.Query(url)
21 20
 	if err != nil {
@@ -40,6 +39,7 @@ func AutoUpdate() {
40 39
 		diff, err := Fetch()
41 40
 		if err != nil {
42 41
 			logger.Debugw("Cannot fetch time from NTP", "error", err)
42
+
43 43
 			continue
44 44
 		}
45 45
 

+ 1
- 0
obfuscated2/client_protocol.go Bestand weergeven

@@ -84,6 +84,7 @@ func (c *ClientProtocol) Handshake(socket conntypes.StreamReadWriteCloser) (conn
84 84
 	replayKey := decryptedFrame.Unique()
85 85
 	if antireplay.Cache.HasObfuscated2(replayKey) {
86 86
 		stats.Stats.ReplayDetected()
87
+
87 88
 		return nil, errors.New("replay attack is detected")
88 89
 	}
89 90
 

+ 1
- 1
obfuscated2/frame.go Bestand weergeven

@@ -15,7 +15,7 @@ const (
15 15
 	frameLen = 64
16 16
 )
17 17
 
18
-// [frameOffsetFirst:frameOffsetKey:frameOffsetIV:frameOffsetMagic:frameOffsetDC:frameOffsetEnd]
18
+// [frameOffsetFirst:frameOffsetKey:frameOffsetIV:frameOffsetMagic:frameOffsetDC:frameOffsetEnd].
19 19
 type Frame struct {
20 20
 	data [frameLen]byte
21 21
 }

+ 1
- 2
protocol/request.go Bestand weergeven

@@ -3,9 +3,8 @@ package protocol
3 3
 import (
4 4
 	"context"
5 5
 
6
-	"go.uber.org/zap"
7
-
8 6
 	"github.com/9seconds/mtg/conntypes"
7
+	"go.uber.org/zap"
9 8
 )
10 9
 
11 10
 type TelegramRequest struct {

+ 1
- 2
proxy/direct.go Bestand weergeven

@@ -4,11 +4,10 @@ import (
4 4
 	"io"
5 5
 	"sync"
6 6
 
7
-	"go.uber.org/zap"
8
-
9 7
 	"github.com/9seconds/mtg/conntypes"
10 8
 	"github.com/9seconds/mtg/obfuscated2"
11 9
 	"github.com/9seconds/mtg/protocol"
10
+	"go.uber.org/zap"
12 11
 )
13 12
 
14 13
 const directPipeBufferSize = 1024

+ 6
- 4
proxy/middle.go Bestand weergeven

@@ -3,17 +3,17 @@ package proxy
3 3
 import (
4 4
 	"sync"
5 5
 
6
-	"go.uber.org/zap"
7
-
8 6
 	"github.com/9seconds/mtg/conntypes"
9 7
 	"github.com/9seconds/mtg/protocol"
10 8
 	"github.com/9seconds/mtg/wrappers/packetack"
9
+	"go.uber.org/zap"
11 10
 )
12 11
 
13 12
 func middleConnection(request *protocol.TelegramRequest) {
14 13
 	telegramConn, err := packetack.NewProxy(request)
15 14
 	if err != nil {
16 15
 		request.Logger.Debugw("Cannot dial to Telegram", "error", err)
16
+
17 17
 		return
18 18
 	}
19 19
 	defer telegramConn.Close()
@@ -27,7 +27,7 @@ func middleConnection(request *protocol.TelegramRequest) {
27 27
 		clientConn = packetack.NewClientIntermediate(request.ClientConn)
28 28
 	case conntypes.ConnectionTypeSecure:
29 29
 		clientConn = packetack.NewClientIntermediateSecure(request.ClientConn)
30
-	default:
30
+	case conntypes.ConnectionTypeUnknown:
31 31
 		panic("unknown connection type")
32 32
 	}
33 33
 
@@ -53,15 +53,17 @@ func middlePipe(dst conntypes.PacketAckWriteCloser,
53 53
 
54 54
 	for {
55 55
 		acks := conntypes.ConnectionAcks{}
56
-		packet, err := src.Read(&acks)
57 56
 
57
+		packet, err := src.Read(&acks)
58 58
 		if err != nil {
59 59
 			logger.Debugw("Cannot read packet", "error", err)
60
+
60 61
 			return
61 62
 		}
62 63
 
63 64
 		if err = dst.Write(packet, &acks); err != nil {
64 65
 			logger.Debugw("Cannot send packet", "error", err)
66
+
65 67
 			return
66 68
 		}
67 69
 	}

+ 3
- 3
proxy/proxy.go Bestand weergeven

@@ -4,14 +4,13 @@ import (
4 4
 	"context"
5 5
 	"net"
6 6
 
7
-	"go.uber.org/zap"
8
-
9 7
 	"github.com/9seconds/mtg/config"
10 8
 	"github.com/9seconds/mtg/conntypes"
11 9
 	"github.com/9seconds/mtg/protocol"
12 10
 	"github.com/9seconds/mtg/stats"
13 11
 	"github.com/9seconds/mtg/utils"
14 12
 	"github.com/9seconds/mtg/wrappers/stream"
13
+	"go.uber.org/zap"
15 14
 )
16 15
 
17 16
 type Proxy struct {
@@ -53,6 +52,7 @@ func (p *Proxy) accept(conn net.Conn) {
53 52
 
54 53
 	if err := utils.InitTCP(conn, config.C.ClientReadBuffer(), config.C.ClientWriteBuffer()); err != nil {
55 54
 		logger.Errorw("Cannot initialize client TCP connection", "error", err)
55
+
56 56
 		return
57 57
 	}
58 58
 
@@ -66,8 +66,8 @@ func (p *Proxy) accept(conn net.Conn) {
66 66
 	defer clientConn.Close()
67 67
 
68 68
 	clientProtocol := p.ClientProtocolMaker()
69
-	clientConn, err := clientProtocol.Handshake(clientConn)
70 69
 
70
+	clientConn, err := clientProtocol.Handshake(clientConn)
71 71
 	if err != nil {
72 72
 		stats.Stats.AuthenticationFailed()
73 73
 		logger.Warnw("Cannot perform client handshake", "error", err)

+ 7
- 4
stats/stats_prometheus.go Bestand weergeven

@@ -5,11 +5,10 @@ import (
5 5
 	"net/http"
6 6
 	"strconv"
7 7
 
8
-	"github.com/prometheus/client_golang/prometheus"
9
-	"github.com/prometheus/client_golang/prometheus/promhttp"
10
-
11 8
 	"github.com/9seconds/mtg/config"
12 9
 	"github.com/9seconds/mtg/conntypes"
10
+	"github.com/prometheus/client_golang/prometheus"
11
+	"github.com/prometheus/client_golang/prometheus/promhttp"
13 12
 )
14 13
 
15 14
 type statsPrometheus struct {
@@ -51,10 +50,14 @@ func (s *statsPrometheus) changeConnections(connectionType conntypes.ConnectionT
51 50
 		labels[0] = "abridged"
52 51
 	case conntypes.ConnectionTypeSecure:
53 52
 		labels[0] = "secured"
53
+	case conntypes.ConnectionTypeIntermediate:
54
+		labels[0] = "intermediate"
55
+	case conntypes.ConnectionTypeUnknown:
56
+		panic("unknown connection type")
54 57
 	}
55 58
 
56 59
 	if addr.IP.To4() == nil {
57
-		labels[1] = "ipv6" // nolint: goconst
60
+		labels[1] = "ipv6"
58 61
 	}
59 62
 
60 63
 	s.connections.WithLabelValues(labels[:]...).Add(increment)

+ 5
- 4
stats/stats_statsd.go Bestand weergeven

@@ -8,11 +8,10 @@ import (
8 8
 	"sync"
9 9
 	"time"
10 10
 
11
-	statsd "github.com/smira/go-statsd"
12
-	"go.uber.org/zap"
13
-
14 11
 	"github.com/9seconds/mtg/config"
15 12
 	"github.com/9seconds/mtg/conntypes"
13
+	statsd "github.com/smira/go-statsd"
14
+	"go.uber.org/zap"
16 15
 )
17 16
 
18 17
 var (
@@ -91,8 +90,10 @@ func (s *statsStatsd) changeConnections(connectionType conntypes.ConnectionType,
91 90
 		tags = append(tags, tagConnectionTypeAbridged)
92 91
 	case conntypes.ConnectionTypeIntermediate:
93 92
 		tags = append(tags, tagConnectionTypeIntermediate)
94
-	default:
93
+	case conntypes.ConnectionTypeSecure:
95 94
 		tags = append(tags, tagConnectionTypeSecured)
95
+	case conntypes.ConnectionTypeUnknown:
96
+		panic("Unknown connection type")
96 97
 	}
97 98
 
98 99
 	if addr.IP.To4() == nil {

+ 5
- 1
telegram/api/api.go Bestand weergeven

@@ -1,6 +1,7 @@
1 1
 package api
2 2
 
3 3
 import (
4
+	"context"
4 5
 	"fmt"
5 6
 	"io"
6 7
 	"io/ioutil"
@@ -18,7 +19,10 @@ var httpClient = http.Client{
18 19
 }
19 20
 
20 21
 func request(url string) (io.ReadCloser, error) {
21
-	req, err := http.NewRequest("GET", url, nil)
22
+	ctx, cancel := context.WithTimeout(context.Background(), apiHTTPTimeout)
23
+	defer cancel()
24
+
25
+	req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
22 26
 	if err != nil {
23 27
 		panic(err)
24 28
 	}

+ 4
- 3
telegram/base.go Bestand weergeven

@@ -5,12 +5,11 @@ import (
5 5
 	"math/rand"
6 6
 	"net"
7 7
 
8
-	"go.uber.org/zap"
9
-
10 8
 	"github.com/9seconds/mtg/config"
11 9
 	"github.com/9seconds/mtg/conntypes"
12 10
 	"github.com/9seconds/mtg/utils"
13 11
 	"github.com/9seconds/mtg/wrappers/stream"
12
+	"go.uber.org/zap"
14 13
 )
15 14
 
16 15
 type baseTelegram struct {
@@ -34,11 +33,13 @@ func (b *baseTelegram) dial(dc conntypes.DC,
34 33
 		conn, err := b.dialer.Dial("tcp", addr)
35 34
 		if err != nil {
36 35
 			b.logger.Infow("Cannot dial to Telegram", "address", addr, "error", err)
36
+
37 37
 			continue
38 38
 		}
39 39
 
40 40
 		if err := utils.InitTCP(conn, config.C.ProxyReadBuffer(), config.C.ProxyWriteBuffer()); err != nil {
41 41
 			b.logger.Infow("Cannot initialize TCP socket", "address", addr, "error", err)
42
+
42 43
 			continue
43 44
 		}
44 45
 
@@ -83,7 +84,7 @@ func (b *baseTelegram) chooseAddress(addresses map[conntypes.DC][]string,
83 84
 	case len(addrs) == 1:
84 85
 		return addrs[0]
85 86
 	case len(addrs) > 1:
86
-		return addrs[rand.Intn(len(addrs))]
87
+		return addrs[rand.Intn(len(addrs))] // nolint: gosec
87 88
 	}
88 89
 
89 90
 	return ""

+ 1
- 2
telegram/middle.go Bestand weergeven

@@ -5,10 +5,9 @@ import (
5 5
 	"sync"
6 6
 	"time"
7 7
 
8
-	"go.uber.org/zap"
9
-
10 8
 	"github.com/9seconds/mtg/conntypes"
11 9
 	"github.com/9seconds/mtg/telegram/api"
10
+	"go.uber.org/zap"
12 11
 )
13 12
 
14 13
 const middleTelegramBackgroundUpdateEvery = time.Hour

+ 10
- 6
tlstypes/consts.go Bestand weergeven

@@ -20,9 +20,9 @@ const (
20 20
 type CipherSuiteType uint8
21 21
 
22 22
 const (
23
-	CipherSuiteType_TLS_AES_128_GCM_SHA256       CipherSuiteType = iota // nolint: stylecheck, golint
24
-	CipherSuiteType_TLS_AES_256_GCM_SHA384                              // nolint: stylecheck, golint
25
-	CipherSuiteType_TLS_CHACHA20_POLY1305_SHA256                        // nolint: stylecheck, golint
23
+	CipherSuiteType_TLS_AES_128_GCM_SHA256       CipherSuiteType = iota // nolint: stylecheck,golint
24
+	CipherSuiteType_TLS_AES_256_GCM_SHA384                              // nolint: stylecheck,golint
25
+	CipherSuiteType_TLS_CHACHA20_POLY1305_SHA256                        // nolint: stylecheck,golint
26 26
 )
27 27
 
28 28
 func (c CipherSuiteType) Bytes() []byte {
@@ -31,6 +31,8 @@ func (c CipherSuiteType) Bytes() []byte {
31 31
 		return CipherSuiteType_TLS_AES_128_GCM_SHA256_Bytes
32 32
 	case CipherSuiteType_TLS_AES_256_GCM_SHA384:
33 33
 		return CipherSuiteType_TLS_AES_256_GCM_SHA384_Bytes
34
+	case CipherSuiteType_TLS_CHACHA20_POLY1305_SHA256:
35
+		return CipherSuiteType_TLS_CHACHA20_POLY1305_SHA256_Bytes
34 36
 	}
35 37
 
36 38
 	return CipherSuiteType_TLS_CHACHA20_POLY1305_SHA256_Bytes
@@ -46,6 +48,8 @@ func (v Version) Bytes() []byte {
46 48
 		return Version12Bytes
47 49
 	case Version11:
48 50
 		return Version11Bytes
51
+	case Version10, VersionUnknown:
52
+		return Version10Bytes
49 53
 	}
50 54
 
51 55
 	return Version10Bytes
@@ -65,9 +69,9 @@ var (
65 69
 	Version12Bytes = []byte{0x03, 0x03}
66 70
 	Version13Bytes = []byte{0x03, 0x04}
67 71
 
68
-	CipherSuiteType_TLS_AES_128_GCM_SHA256_Bytes       = []byte{0x13, 0x01} // nolint: stylecheck, golint
69
-	CipherSuiteType_TLS_AES_256_GCM_SHA384_Bytes       = []byte{0x13, 0x02} // nolint: stylecheck, golint
70
-	CipherSuiteType_TLS_CHACHA20_POLY1305_SHA256_Bytes = []byte{0x13, 0x03} // nolint; stylecheck, golint
72
+	CipherSuiteType_TLS_AES_128_GCM_SHA256_Bytes       = []byte{0x13, 0x01} // nolint: stylecheck,golint
73
+	CipherSuiteType_TLS_AES_256_GCM_SHA384_Bytes       = []byte{0x13, 0x02} // nolint: stylecheck,golint
74
+	CipherSuiteType_TLS_CHACHA20_POLY1305_SHA256_Bytes = []byte{0x13, 0x03} // nolint: stylecheck,golint
71 75
 )
72 76
 
73 77
 type Byter interface {

+ 5
- 6
tlstypes/handshake.go Bestand weergeven

@@ -1,6 +1,7 @@
1 1
 package tlstypes
2 2
 
3 3
 import (
4
+	"bytes"
4 5
 	"io"
5 6
 
6 7
 	"github.com/9seconds/mtg/utils"
@@ -15,8 +16,7 @@ type Handshake struct {
15 16
 }
16 17
 
17 18
 func (h *Handshake) WriteBytes(writer io.Writer) {
18
-	packetBuf := acquireBytesBuffer()
19
-	defer releaseBytesBuffer(packetBuf)
19
+	packetBuf := bytes.Buffer{}
20 20
 
21 21
 	writer.Write([]byte{byte(h.Type)}) // nolint: errcheck
22 22
 
@@ -24,7 +24,7 @@ func (h *Handshake) WriteBytes(writer io.Writer) {
24 24
 	packetBuf.Write(h.Random[:])
25 25
 	packetBuf.WriteByte(byte(len(h.SessionID)))
26 26
 	packetBuf.Write(h.SessionID)
27
-	h.Tail.WriteBytes(packetBuf)
27
+	h.Tail.WriteBytes(&packetBuf)
28 28
 
29 29
 	sizeUint24 := utils.ToUint24(uint32(packetBuf.Len()))
30 30
 	sizeUint24Bytes := sizeUint24[:]
@@ -35,10 +35,9 @@ func (h *Handshake) WriteBytes(writer io.Writer) {
35 35
 }
36 36
 
37 37
 func (h *Handshake) Len() int {
38
-	buf := acquireBytesBuffer()
39
-	defer releaseBytesBuffer(buf)
38
+	buf := bytes.Buffer{}
40 39
 
41
-	h.WriteBytes(buf)
40
+	h.WriteBytes(&buf)
42 41
 
43 42
 	return buf.Len()
44 43
 }

+ 0
- 23
tlstypes/pools.go Bestand weergeven

@@ -1,23 +0,0 @@
1
-package tlstypes
2
-
3
-import (
4
-	"bytes"
5
-	"sync"
6
-)
7
-
8
-var (
9
-	poolBytesBuffer = sync.Pool{
10
-		New: func() interface{} {
11
-			return &bytes.Buffer{}
12
-		},
13
-	}
14
-)
15
-
16
-func acquireBytesBuffer() *bytes.Buffer {
17
-	return poolBytesBuffer.Get().(*bytes.Buffer)
18
-}
19
-
20
-func releaseBytesBuffer(buf *bytes.Buffer) {
21
-	buf.Reset()
22
-	poolBytesBuffer.Put(buf)
23
-}

+ 3
- 4
tlstypes/server_hello.go Bestand weergeven

@@ -8,9 +8,8 @@ import (
8 8
 	"io"
9 9
 	mrand "math/rand"
10 10
 
11
-	"golang.org/x/crypto/curve25519"
12
-
13 11
 	"github.com/9seconds/mtg/config"
12
+	"golang.org/x/crypto/curve25519"
14 13
 )
15 14
 
16 15
 type ServerHello struct {
@@ -37,8 +36,8 @@ func (s ServerHello) WelcomePacket() []byte {
37 36
 	}
38 37
 	recChangeCipher.WriteBytes(buf)
39 38
 
40
-	hostCert := make([]byte, 1024+mrand.Intn(3092))
41
-	rand.Read(hostCert) // nolint: errcheck
39
+	hostCert := make([]byte, 1024+mrand.Intn(3092)) // nolint: gosec
40
+	rand.Read(hostCert)                             // nolint: errcheck
42 41
 
43 42
 	recData := Record{
44 43
 		Type:    RecordTypeApplicationData,

+ 2
- 1
utils/stream_cipher.go Bestand weergeven

@@ -6,6 +6,7 @@ import (
6 6
 )
7 7
 
8 8
 func MakeStreamCipher(key, iv []byte) cipher.Stream {
9
-	block, _ := aes.NewCipher(key) // nolint: gosec
9
+	block, _ := aes.NewCipher(key)
10
+
10 11
 	return cipher.NewCTR(block, iv)
11 12
 }

+ 4
- 7
wrappers/packet/mtproto_frame.go Bestand weergeven

@@ -10,9 +10,8 @@ import (
10 10
 	"io/ioutil"
11 11
 	"net"
12 12
 
13
-	"go.uber.org/zap"
14
-
15 13
 	"github.com/9seconds/mtg/conntypes"
14
+	"go.uber.org/zap"
16 15
 )
17 16
 
18 17
 const (
@@ -42,8 +41,7 @@ type wrapperMtprotoFrame struct {
42 41
 }
43 42
 
44 43
 func (w *wrapperMtprotoFrame) Read() (conntypes.Packet, error) { // nolint: funlen
45
-	buf := acquireMtprotoFrameBytesBuffer()
46
-	defer releaseMtprotoFrameBytesBuffer(buf)
44
+	buf := &bytes.Buffer{}
47 45
 
48 46
 	sum := crc32.NewIEEE()
49 47
 	writer := io.MultiWriter(buf, sum)
@@ -86,7 +84,7 @@ func (w *wrapperMtprotoFrame) Read() (conntypes.Packet, error) { // nolint: funl
86 84
 		return nil, fmt.Errorf("unexpected sequence number %d (wait for %d)", seqNo, w.readSeqNo)
87 85
 	}
88 86
 
89
-	data, _ := ioutil.ReadAll(buf) // nolint: gosec
87
+	data, _ := ioutil.ReadAll(buf)
90 88
 	buf.Reset()
91 89
 	// write to buf, not to writer. This is because we are going to fetch
92 90
 	// crc32 checksum.
@@ -114,8 +112,7 @@ func (w *wrapperMtprotoFrame) Write(p conntypes.Packet) error {
114 112
 	messageLength := 4 + 4 + len(p) + 4
115 113
 	paddingLength := (aes.BlockSize - messageLength%aes.BlockSize) % aes.BlockSize
116 114
 
117
-	buf := acquireMtprotoFrameBytesBuffer()
118
-	defer releaseMtprotoFrameBytesBuffer(buf)
115
+	buf := &bytes.Buffer{}
119 116
 
120 117
 	binary.Write(buf, binary.LittleEndian, uint32(messageLength)) // nolint: errcheck
121 118
 	binary.Write(buf, binary.LittleEndian, w.writeSeqNo)          // nolint: errcheck

+ 0
- 23
wrappers/packet/pools.go Bestand weergeven

@@ -1,23 +0,0 @@
1
-package packet
2
-
3
-import (
4
-	"bytes"
5
-	"sync"
6
-)
7
-
8
-var (
9
-	poolMtprotoFrameBytesBuffer = sync.Pool{
10
-		New: func() interface{} {
11
-			return &bytes.Buffer{}
12
-		},
13
-	}
14
-)
15
-
16
-func acquireMtprotoFrameBytesBuffer() *bytes.Buffer {
17
-	return poolMtprotoFrameBytesBuffer.Get().(*bytes.Buffer)
18
-}
19
-
20
-func releaseMtprotoFrameBytesBuffer(buf *bytes.Buffer) {
21
-	buf.Reset()
22
-	poolMtprotoFrameBytesBuffer.Put(buf)
23
-}

+ 2
- 5
wrappers/packetack/client_abridged.go Bestand weergeven

@@ -6,10 +6,9 @@ import (
6 6
 	"io"
7 7
 	"net"
8 8
 
9
-	"go.uber.org/zap"
10
-
11 9
 	"github.com/9seconds/mtg/conntypes"
12 10
 	"github.com/9seconds/mtg/utils"
11
+	"go.uber.org/zap"
13 12
 )
14 13
 
15 14
 const (
@@ -88,9 +87,7 @@ func (w *wrapperClientAbridged) Write(packet conntypes.Packet, acks *conntypes.C
88 87
 		return nil
89 88
 	case packetLength < clientAbridgedLargePacketLength:
90 89
 		length24 := utils.ToUint24(uint32(packetLength))
91
-
92
-		buf := acquireClientBytesBuffer()
93
-		defer releaseClientBytesBuffer(buf)
90
+		buf := bytes.Buffer{}
94 91
 
95 92
 		buf.WriteByte(byte(clientAbridgedSmallPacketLength))
96 93
 		buf.Write(length24[:])

+ 1
- 2
wrappers/packetack/client_intermediate.go Bestand weergeven

@@ -7,9 +7,8 @@ import (
7 7
 	"io"
8 8
 	"net"
9 9
 
10
-	"go.uber.org/zap"
11
-
12 10
 	"github.com/9seconds/mtg/conntypes"
11
+	"go.uber.org/zap"
13 12
 )
14 13
 
15 14
 const clientIntermediateQuickAckLength = 0x80000000

+ 4
- 5
wrappers/packetack/client_intermediate_secure.go Bestand weergeven

@@ -1,13 +1,13 @@
1 1
 package packetack
2 2
 
3 3
 import (
4
+	"bytes"
4 5
 	"encoding/binary"
5 6
 	"fmt"
6 7
 	"math/rand"
7 8
 
8
-	"go.uber.org/zap"
9
-
10 9
 	"github.com/9seconds/mtg/conntypes"
10
+	"go.uber.org/zap"
11 11
 )
12 12
 
13 13
 type wrapperClientIntermediateSecure struct {
@@ -34,10 +34,9 @@ func (w *wrapperClientIntermediateSecure) Write(packet conntypes.Packet, acks *c
34 34
 		return nil
35 35
 	}
36 36
 
37
-	buf := acquireClientBytesBuffer()
38
-	defer releaseClientBytesBuffer(buf)
37
+	buf := &bytes.Buffer{}
38
+	paddingLength := rand.Intn(4) // nolint: gosec
39 39
 
40
-	paddingLength := rand.Intn(4)
41 40
 	buf.Grow(4 + len(packet) + paddingLength)
42 41
 
43 42
 	binary.Write(buf, binary.LittleEndian, uint32(len(packet)+paddingLength)) // nolint: errcheck

+ 0
- 23
wrappers/packetack/pools.go Bestand weergeven

@@ -1,23 +0,0 @@
1
-package packetack
2
-
3
-import (
4
-	"bytes"
5
-	"sync"
6
-)
7
-
8
-var (
9
-	poolClientBytesBuffer = sync.Pool{
10
-		New: func() interface{} {
11
-			return &bytes.Buffer{}
12
-		},
13
-	}
14
-)
15
-
16
-func acquireClientBytesBuffer() *bytes.Buffer {
17
-	return poolClientBytesBuffer.Get().(*bytes.Buffer)
18
-}
19
-
20
-func releaseClientBytesBuffer(buf *bytes.Buffer) {
21
-	buf.Reset()
22
-	poolClientBytesBuffer.Put(buf)
23
-}

+ 2
- 1
wrappers/packetack/proxy.go Bestand weergeven

@@ -64,6 +64,7 @@ func (w *wrapperProxy) Read(acks *conntypes.ConnectionAcks) (conntypes.Packet, e
64 64
 
65 65
 func (w *wrapperProxy) Close() error {
66 66
 	w.proxy.Close()
67
+
67 68
 	return nil
68 69
 }
69 70
 
@@ -77,7 +78,7 @@ func NewProxy(request *protocol.TelegramRequest) (conntypes.PacketAckReadWriteCl
77 78
 		flags |= rpc.ProxyRequestFlagsIntermediate
78 79
 	case conntypes.ConnectionTypeSecure:
79 80
 		flags |= rpc.ProxyRequestFlagsIntermediate | rpc.ProxyRequestFlagsPad
80
-	default:
81
+	case conntypes.ConnectionTypeUnknown:
81 82
 		panic("unknown connection type")
82 83
 	}
83 84
 

+ 1
- 2
wrappers/stream/blockcipher.go Bestand weergeven

@@ -7,10 +7,9 @@ import (
7 7
 	"net"
8 8
 	"time"
9 9
 
10
-	"go.uber.org/zap"
11
-
12 10
 	"github.com/9seconds/mtg/conntypes"
13 11
 	"github.com/9seconds/mtg/utils"
12
+	"go.uber.org/zap"
14 13
 )
15 14
 
16 15
 type wrapperBlockCipher struct {

+ 5
- 3
wrappers/stream/conn.go Bestand weergeven

@@ -5,10 +5,9 @@ import (
5 5
 	"net"
6 6
 	"time"
7 7
 
8
-	"go.uber.org/zap"
9
-
10 8
 	"github.com/9seconds/mtg/config"
11 9
 	"github.com/9seconds/mtg/conntypes"
10
+	"go.uber.org/zap"
12 11
 )
13 12
 
14 13
 type connPurpose uint8
@@ -29,6 +28,7 @@ type wrapperConn struct {
29 28
 func (w *wrapperConn) WriteTimeout(p []byte, timeout time.Duration) (int, error) {
30 29
 	if err := w.parent.SetWriteDeadline(time.Now().Add(timeout)); err != nil {
31 30
 		w.Close()
31
+
32 32
 		return 0, fmt.Errorf("cannot set write deadline to the socket: %w", err)
33 33
 	}
34 34
 
@@ -40,7 +40,7 @@ func (w *wrapperConn) Write(p []byte) (int, error) {
40 40
 	w.logger.Debugw("write to stream", "bytes", n, "error", err)
41 41
 
42 42
 	if err != nil {
43
-		w.Close() // nolint: gosec
43
+		w.Close()
44 44
 	}
45 45
 
46 46
 	return n, err
@@ -49,6 +49,7 @@ func (w *wrapperConn) Write(p []byte) (int, error) {
49 49
 func (w *wrapperConn) ReadTimeout(p []byte, timeout time.Duration) (int, error) {
50 50
 	if err := w.parent.SetReadDeadline(time.Now().Add(timeout)); err != nil {
51 51
 		w.Close()
52
+
52 53
 		return 0, fmt.Errorf("cannot set read deadline to the socket: %w", err)
53 54
 	}
54 55
 
@@ -68,6 +69,7 @@ func (w *wrapperConn) Read(p []byte) (int, error) {
68 69
 
69 70
 func (w *wrapperConn) Close() error {
70 71
 	w.logger.Debugw("Close connection")
72
+
71 73
 	return w.parent.Close()
72 74
 }
73 75
 

+ 6
- 2
wrappers/stream/ctx.go Bestand weergeven

@@ -6,9 +6,8 @@ import (
6 6
 	"net"
7 7
 	"time"
8 8
 
9
-	"go.uber.org/zap"
10
-
11 9
 	"github.com/9seconds/mtg/conntypes"
10
+	"go.uber.org/zap"
12 11
 )
13 12
 
14 13
 type wrapperCtx struct {
@@ -21,6 +20,7 @@ func (w *wrapperCtx) WriteTimeout(p []byte, timeout time.Duration) (int, error)
21 20
 	select {
22 21
 	case <-w.ctx.Done():
23 22
 		w.Close()
23
+
24 24
 		return 0, fmt.Errorf("cannot write because context was closed: %w", w.ctx.Err())
25 25
 	default:
26 26
 		return w.parent.WriteTimeout(p, timeout)
@@ -31,6 +31,7 @@ func (w *wrapperCtx) Write(p []byte) (int, error) {
31 31
 	select {
32 32
 	case <-w.ctx.Done():
33 33
 		w.Close()
34
+
34 35
 		return 0, fmt.Errorf("cannot write because context was closed: %w", w.ctx.Err())
35 36
 	default:
36 37
 		return w.parent.Write(p)
@@ -41,6 +42,7 @@ func (w *wrapperCtx) ReadTimeout(p []byte, timeout time.Duration) (int, error) {
41 42
 	select {
42 43
 	case <-w.ctx.Done():
43 44
 		w.Close()
45
+
44 46
 		return 0, fmt.Errorf("cannot write because context was closed: %w", w.ctx.Err())
45 47
 	default:
46 48
 		return w.parent.ReadTimeout(p, timeout)
@@ -51,6 +53,7 @@ func (w *wrapperCtx) Read(p []byte) (int, error) {
51 53
 	select {
52 54
 	case <-w.ctx.Done():
53 55
 		w.Close()
56
+
54 57
 		return 0, fmt.Errorf("cannot write because context was closed: %w", w.ctx.Err())
55 58
 	default:
56 59
 		return w.parent.Read(p)
@@ -59,6 +62,7 @@ func (w *wrapperCtx) Read(p []byte) (int, error) {
59 62
 
60 63
 func (w *wrapperCtx) Close() error {
61 64
 	w.cancel()
65
+
62 66
 	return w.parent.Close()
63 67
 }
64 68
 

+ 6
- 6
wrappers/stream/faketls.go Bestand weergeven

@@ -7,10 +7,9 @@ import (
7 7
 	"net"
8 8
 	"time"
9 9
 
10
-	"go.uber.org/zap"
11
-
12 10
 	"github.com/9seconds/mtg/conntypes"
13 11
 	"github.com/9seconds/mtg/tlstypes"
12
+	"go.uber.org/zap"
14 13
 )
15 14
 
16 15
 type wrapperFakeTLS struct {
@@ -33,19 +32,18 @@ func (w *wrapperFakeTLS) WriteTimeout(p []byte, timeout time.Duration) (int, err
33 32
 		if elapsed > timeout {
34 33
 			return w.parent.WriteTimeout(b, timeout-elapsed)
35 34
 		}
35
+
36 36
 		return 0, errors.New("timeout")
37 37
 	})
38 38
 }
39 39
 
40 40
 func (w *wrapperFakeTLS) write(p []byte, writeFunc func([]byte) (int, error)) (int, error) {
41 41
 	sum := 0
42
-
43
-	buf := acquireBytesBuffer()
44
-	defer releaseBytesBuffer(buf)
42
+	buf := bytes.Buffer{}
45 43
 
46 44
 	for _, v := range tlstypes.MakeRecords(p) {
47 45
 		buf.Reset()
48
-		v.WriteBytes(buf)
46
+		v.WriteBytes(&buf)
49 47
 
50 48
 		_, err := writeFunc(buf.Bytes())
51 49
 		if err != nil {
@@ -97,6 +95,8 @@ func NewFakeTLS(socket conntypes.StreamReadWriteCloser) conntypes.StreamReadWrit
97 95
 				rec.Data.WriteBytes(buf)
98 96
 
99 97
 				return buf.Bytes(), nil
98
+			case tlstypes.RecordTypeHandshake:
99
+				return nil, errors.New("unsupported record type handshake")
100 100
 			default:
101 101
 				return nil, fmt.Errorf("unsupported record type %v", rec.Type)
102 102
 			}

+ 18
- 18
wrappers/stream/mtproto_cipher.go Bestand weergeven

@@ -1,10 +1,11 @@
1 1
 package stream
2 2
 
3 3
 import (
4
+	"bytes"
4 5
 	"crypto/aes"
5 6
 	"crypto/cipher"
6
-	"crypto/md5"  // nolint: gosec
7
-	"crypto/sha1" // nolint: gosec
7
+	"crypto/md5"
8
+	"crypto/sha1"
8 9
 	"encoding/binary"
9 10
 	"net"
10 11
 
@@ -53,12 +54,11 @@ func mtprotoDeriveKeys(purpose mtprotoCipherPurpose,
53 54
 	resp *rpc.NonceResponse,
54 55
 	client, remote *net.TCPAddr,
55 56
 	secret []byte) ([]byte, []byte) {
56
-	message := acquireBytesBuffer()
57
-	defer releaseBytesBuffer(message)
57
+	message := bytes.Buffer{}
58 58
 
59
-	message.Write(resp.Nonce)   // nolint: gosec
60
-	message.Write(req.Nonce)    // nolint: gosec
61
-	message.Write(req.CryptoTS) // nolint: gosec
59
+	message.Write(resp.Nonce)
60
+	message.Write(req.Nonce)
61
+	message.Write(req.CryptoTS)
62 62
 
63 63
 	clientIPv4 := mtprotoEmptyIP[:]
64 64
 	serverIPv4 := mtprotoEmptyIP[:]
@@ -68,34 +68,34 @@ func mtprotoDeriveKeys(purpose mtprotoCipherPurpose,
68 68
 		serverIPv4 = utils.ReverseBytes(remote.IP.To4())
69 69
 	}
70 70
 
71
-	message.Write(serverIPv4) // nolint: gosec
71
+	message.Write(serverIPv4)
72 72
 
73 73
 	var port [2]byte
74 74
 
75 75
 	binary.LittleEndian.PutUint16(port[:], uint16(client.Port))
76
-	message.Write(port[:]) // nolint: gosec
76
+	message.Write(port[:])
77 77
 
78 78
 	switch purpose {
79 79
 	case mtprotoCipherPurposeClient:
80
-		message.WriteString("CLIENT") // nolint: gosec
80
+		message.WriteString("CLIENT")
81 81
 	case mtprotoCipherPurposeServer:
82
-		message.WriteString("SERVER") // nolint: gosec
82
+		message.WriteString("SERVER")
83 83
 	default:
84 84
 		panic("Unexpected cipher purpose")
85 85
 	}
86 86
 
87
-	message.Write(clientIPv4) // nolint: gosec
87
+	message.Write(clientIPv4)
88 88
 	binary.LittleEndian.PutUint16(port[:], uint16(remote.Port))
89
-	message.Write(port[:])    // nolint: gosec
90
-	message.Write(secret)     // nolint: gosec
91
-	message.Write(resp.Nonce) // nolint: gosec
89
+	message.Write(port[:])
90
+	message.Write(secret)
91
+	message.Write(resp.Nonce)
92 92
 
93 93
 	if client.IP.To4() == nil {
94
-		message.Write(client.IP.To16()) // nolint: gosec
95
-		message.Write(remote.IP.To16()) // nolint: gosec
94
+		message.Write(client.IP.To16())
95
+		message.Write(remote.IP.To16())
96 96
 	}
97 97
 
98
-	message.Write(req.Nonce) // nolint: gosec
98
+	message.Write(req.Nonce)
99 99
 
100 100
 	data := message.Bytes()
101 101
 	md5sum := md5.Sum(data[1:]) // nolint: gas

+ 4
- 6
wrappers/stream/obfuscated2.go Bestand weergeven

@@ -1,14 +1,14 @@
1 1
 package stream
2 2
 
3 3
 import (
4
+	"bytes"
4 5
 	"crypto/cipher"
5 6
 	"fmt"
6 7
 	"net"
7 8
 	"time"
8 9
 
9
-	"go.uber.org/zap"
10
-
11 10
 	"github.com/9seconds/mtg/conntypes"
11
+	"go.uber.org/zap"
12 12
 )
13 13
 
14 14
 type wrapperObfuscated2 struct {
@@ -40,8 +40,7 @@ func (w *wrapperObfuscated2) Read(p []byte) (int, error) {
40 40
 }
41 41
 
42 42
 func (w *wrapperObfuscated2) WriteTimeout(p []byte, timeout time.Duration) (int, error) {
43
-	buffer := acquireBytesBuffer()
44
-	defer releaseBytesBuffer(buffer)
43
+	buffer := bytes.Buffer{}
45 44
 
46 45
 	buffer.Write(p)
47 46
 
@@ -53,8 +52,7 @@ func (w *wrapperObfuscated2) WriteTimeout(p []byte, timeout time.Duration) (int,
53 52
 }
54 53
 
55 54
 func (w *wrapperObfuscated2) Write(p []byte) (int, error) {
56
-	buffer := acquireBytesBuffer()
57
-	defer releaseBytesBuffer(buffer)
55
+	buffer := bytes.Buffer{}
58 56
 
59 57
 	buffer.Write(p)
60 58
 

+ 0
- 23
wrappers/stream/pools.go Bestand weergeven

@@ -1,23 +0,0 @@
1
-package stream
2
-
3
-import (
4
-	"bytes"
5
-	"sync"
6
-)
7
-
8
-var (
9
-	poolBytesBuffer = sync.Pool{
10
-		New: func() interface{} {
11
-			return &bytes.Buffer{}
12
-		},
13
-	}
14
-)
15
-
16
-func acquireBytesBuffer() *bytes.Buffer {
17
-	return poolBytesBuffer.Get().(*bytes.Buffer)
18
-}
19
-
20
-func releaseBytesBuffer(buf *bytes.Buffer) {
21
-	buf.Reset()
22
-	poolBytesBuffer.Put(buf)
23
-}

+ 2
- 2
wrappers/stream/rewind.go Bestand weergeven

@@ -7,9 +7,8 @@ import (
7 7
 	"sync"
8 8
 	"time"
9 9
 
10
-	"go.uber.org/zap"
11
-
12 10
 	"github.com/9seconds/mtg/conntypes"
11
+	"go.uber.org/zap"
13 12
 )
14 13
 
15 14
 type ReadWriteCloseRewinder interface {
@@ -88,6 +87,7 @@ func (w *wrapperRewind) RemoteAddr() *net.TCPAddr {
88 87
 
89 88
 func (w *wrapperRewind) Close() error {
90 89
 	w.buf.Reset()
90
+
91 91
 	return w.parent.Close()
92 92
 }
93 93
 

+ 1
- 2
wrappers/stream/stats_telegram.go Bestand weergeven

@@ -5,10 +5,9 @@ import (
5 5
 	"sync"
6 6
 	"time"
7 7
 
8
-	"go.uber.org/zap"
9
-
10 8
 	"github.com/9seconds/mtg/conntypes"
11 9
 	"github.com/9seconds/mtg/stats"
10
+	"go.uber.org/zap"
12 11
 )
13 12
 
14 13
 type wrapperTelegramStats struct {

+ 1
- 2
wrappers/stream/stats_traffic.go Bestand weergeven

@@ -4,10 +4,9 @@ import (
4 4
 	"net"
5 5
 	"time"
6 6
 
7
-	"go.uber.org/zap"
8
-
9 7
 	"github.com/9seconds/mtg/conntypes"
10 8
 	"github.com/9seconds/mtg/stats"
9
+	"go.uber.org/zap"
11 10
 )
12 11
 
13 12
 type wrapperTrafficStats struct {

+ 1
- 2
wrappers/stream/timeout.go Bestand weergeven

@@ -4,9 +4,8 @@ import (
4 4
 	"net"
5 5
 	"time"
6 6
 
7
-	"go.uber.org/zap"
8
-
9 7
 	"github.com/9seconds/mtg/conntypes"
8
+	"go.uber.org/zap"
10 9
 )
11 10
 
12 11
 const (

Laden…
Annuleren
Opslaan