diff --git a/gache.go b/gache.go index 2533bbe..853f771 100644 --- a/gache.go +++ b/gache.go @@ -13,8 +13,6 @@ import ( "github.com/kpango/fastime" "github.com/zeebo/xxh3" "golang.org/x/sync/singleflight" - // "github.com/klauspost/compress/s2" - // "github.com/pierrec/lz4" ) type ( @@ -405,9 +403,7 @@ func (g *gache) Write(ctx context.Context, w io.Writer) error { }) gob.Register(map[string]interface{}{}) - // return gob.NewEncoder(s2.NewWriter(w)).Encode(&m) return gob.NewEncoder(w).Encode(&m) - // return gob.NewEncoder(lz4.NewWriter(w)).Encode(&m) } // Write writes all cached data to writer @@ -419,9 +415,7 @@ func Write(ctx context.Context, w io.Writer) error { func (g *gache) Read(r io.Reader) error { var m map[string]interface{} gob.Register(map[string]interface{}{}) - // err := gob.NewDecoder(s2.NewReader(r)).Decode(&m) err := gob.NewDecoder(r).Decode(&m) - // err := gob.NewDecoder(lz4.NewReader(r)).Decode(&m) if err != nil { return err } diff --git a/gache_bench_test.go b/gache_bench_test.go deleted file mode 100644 index 4628bdd..0000000 --- a/gache_bench_test.go +++ /dev/null @@ -1,625 +0,0 @@ -package gache - -import ( - "math/rand" - "sync" - "testing" - "time" - - mcache "github.com/OrlovEvgeny/go-mcache" - "github.com/VictoriaMetrics/fastcache" - "github.com/allegro/bigcache" - "github.com/bluele/gcache" - "github.com/coocood/freecache" - "github.com/hlts2/gocache" - cache "github.com/patrickmn/go-cache" - "github.com/prologic/bitcask" -) - -type DefaultMap struct { - mu sync.RWMutex - data map[interface{}]interface{} -} - -func NewDefault() *DefaultMap { - return &DefaultMap{ - data: make(map[interface{}]interface{}), - } -} - -func (m *DefaultMap) Get(key interface{}) (interface{}, bool) { - m.mu.RLock() - defer m.mu.RUnlock() - v, ok := m.data[key] - return v, ok -} - -func (m *DefaultMap) Set(key, val interface{}) { - m.mu.Lock() - defer m.mu.Unlock() - m.data[key] = val -} - -var ( - bigData = map[string]string{} - bigDataLen = 10000 - - smallData = map[string]string{ - "string": "aaaa", - "int": "123", - "float": "99.99", - "struct": "struct{}{}", - } -) - -func init() { - for i := 0; i < bigDataLen; i++ { - bigData[randStr(bigDataLen)] = randStr(bigDataLen) - } -} - -var randSrc = rand.NewSource(time.Now().UnixNano()) - -const ( - rs6Letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - rs6LetterIdxBits = 6 - rs6LetterIdxMask = 1<= 0; { - if remain == 0 { - cache, remain = randSrc.Int63(), rs6LetterIdxMax - } - idx := int(cache & rs6LetterIdxMask) - if idx < len(rs6Letters) { - b[i] = rs6Letters[idx] - i-- - } - cache >>= rs6LetterIdxBits - remain-- - } - return string(b) -} - -func BenchmarkGacheWithSmallDataset(b *testing.B) { - GetGache() - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range smallData { - Set(k, v) - val, ok := Get(k) - if !ok { - b.Errorf("Gache Get failed key: %v\tval: %v\n", k, v) - } - if val != v { - b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} - -func BenchmarkGacheWithBigDataset(b *testing.B) { - GetGache() - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range bigData { - Set(k, v) - val, ok := Get(k) - if !ok { - b.Errorf("Gache Get failed key: %v\tval: %v\n", k, v) - } - if val != v { - b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} - -func BenchmarkGocacheWithSmallDataset(b *testing.B) { - gc := gocache.New() - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range smallData { - gc.Set(k, v) - val, ok := gc.Get(k) - if !ok { - b.Errorf("GoCache Get failed key: %v\tval: %v\n", k, v) - } - if val != v { - b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} - -func BenchmarkGocacheWithBigDataset(b *testing.B) { - gc := gocache.New() - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range bigData { - gc.Set(k, v) - val, ok := gc.Get(k) - if !ok { - b.Errorf("GoCache Get failed key: %v\tval: %v\n", k, v) - } - if val != v { - b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} - -func BenchmarkFastCacheWithSmallDataset(b *testing.B) { - fc := fastcache.New(20) - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range smallData { - fc.Set([]byte(k), []byte(v)) - var val []byte - val = fc.Get(val, []byte(k)) - if val == nil { - b.Errorf("fastcache Get failed key: %v\tval: %v\n", k, v) - } - if string(val) != v { - b.Errorf("expect %v but got %v", v, string(val)) - } - } - } - }) -} - -func BenchmarkFastCacheWithBigDataset(b *testing.B) { - fc := fastcache.New(10000) - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range bigData { - fc.SetBig([]byte(k), []byte(v)) - var val []byte - val = fc.GetBig(val, []byte(k)) - if val == nil { - // XXX: fastcache has a problem to store big data - // b.Errorf("fastcache Get failed key: %v\tval: %v\n", k, v) - } - if string(val) != v { - // b.Errorf("expect %v but got %v", v, string(val)) - } - } - } - }) -} - -func BenchmarkBigCacheWithSmallDataset(b *testing.B) { - cfg := bigcache.DefaultConfig(10 * time.Minute) - cfg.Verbose = false - c, _ := bigcache.NewBigCache(cfg) - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range smallData { - c.Set(k, []byte(v)) - val, err := c.Get(k) - if err != nil { - b.Errorf("BigCahce Get failed key: %v\tval: %v\n", k, v) - } - if string(val) != v { - b.Errorf("expect %v but got %v", v, string(val)) - } - } - } - }) -} - -func BenchmarkBigCacheWithBigDataset(b *testing.B) { - cfg := bigcache.DefaultConfig(10 * time.Minute) - cfg.Verbose = false - c, _ := bigcache.NewBigCache(cfg) - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range bigData { - c.Set(k, []byte(v)) - val, err := c.Get(k) - if err != nil { - b.Errorf("BigCahce Get failed key: %v\tval: %v\n", k, v) - } - if string(val) != v { - b.Errorf("expect %v but got %v", v, string(val)) - } - } - } - }) -} - -func BenchmarkFreeCacheWithSmallDataset(b *testing.B) { - fc := freecache.NewCache(100 * 1024 * 1024) - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range smallData { - fc.Set([]byte(k), []byte(v), 0) - val, err := fc.Get([]byte(k)) - if err != nil { - b.Errorf("FreeCache Get failed key: %v\tval: %v\n", k, v) - b.Error(err) - } - - if string(val) != v { - b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} - -// func BenchmarkFreeCacheWithBigDataset(b *testing.B) { -// fc := freecache.NewCache(100 * 1024 * 1024) -// b.SetParallelism(10000) -// b.ResetTimer() -// b.ReportAllocs() -// b.RunParallel(func(pb *testing.PB) { -// for pb.Next() { -// for k, v := range bigData { -// fc.Set([]byte(k), []byte(v), 0) -// val, err := fc.Get([]byte(k)) -// if err != nil { -// b.Errorf("FreeCache Get failed key: %v\tval: %v\n", k, v) -// b.Error(err) -// } -// -// if string(val) != v { -// b.Errorf("expect %v but got %v", v, val) -// } -// } -// } -// }) -// } - -func BenchmarkGoCacheWithSmallDataset(b *testing.B) { - c := cache.New(5*time.Minute, 10*time.Minute) - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range smallData { - c.Set(k, v, cache.DefaultExpiration) - val, ok := c.Get(k) - if !ok { - b.Errorf("Go-Cache Get failed key: %v\tval: %v\n", k, v) - } - if val != v { - b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} - -func BenchmarkGoCacheWithBigDataset(b *testing.B) { - c := cache.New(5*time.Minute, 10*time.Minute) - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range bigData { - c.Set(k, v, cache.DefaultExpiration) - val, ok := c.Get(k) - if !ok { - b.Errorf("Go-Cache Get failed key: %v\tval: %v\n", k, v) - } - if val != v { - b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} - -func BenchmarkMapWithSmallDataset(b *testing.B) { - m := NewDefault() - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range smallData { - m.Set(k, v) - - val, ok := m.Get(k) - if !ok { - b.Errorf("Map Get failed key: %v\tval: %v\n", k, v) - } - if val != v { - b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} - -func BenchmarkMapWithBigDataset(b *testing.B) { - m := NewDefault() - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range bigData { - m.Set(k, v) - - val, ok := m.Get(k) - if !ok { - b.Errorf("Map Get failed key: %v\tval: %v\n", k, v) - } - if val != v { - b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} - -func BenchmarkGCacheLRUWithSmallDataset(b *testing.B) { - gc := gcache.New(20). - LRU(). - Build() - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range smallData { - gc.SetWithExpire(k, v, time.Second*30) - val, err := gc.Get(k) - if err != nil { - // XXX gcache has a problem . it cannot get long keyname - // b.Errorf("GCache Get failed key: %v\tval: %v\n", k, v) - } - if val != v { - // b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} - -func BenchmarkGCacheLRUWithBigDataset(b *testing.B) { - gc := gcache.New(20). - LRU(). - Build() - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range bigData { - gc.SetWithExpire(k, v, time.Second*30) - val, err := gc.Get(k) - if err != nil { - // XXX gcache has a problem . it cannot get long keyname - // b.Errorf("GCache Get failed key: %v\tval: %v\n", k, v) - } - if val != v { - // b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} - -func BenchmarkGCacheLFUWithSmallDataset(b *testing.B) { - gc := gcache.New(20). - LFU(). - Build() - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range smallData { - gc.SetWithExpire(k, v, time.Second*30) - val, err := gc.Get(k) - if err != nil { - // XXX gcache has a problem . it cannot get long keyname - // b.Errorf("GCache Get failed key: %v\tval: %v\n", k, v) - } - if val != v { - // b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} - -func BenchmarkGCacheLFUWithBigDataset(b *testing.B) { - gc := gcache.New(20). - LFU(). - Build() - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range bigData { - gc.SetWithExpire(k, v, time.Second*30) - val, err := gc.Get(k) - if err != nil { - // XXX gcache has a problem . it cannot get long keyname - // b.Errorf("GCache Get failed key: %v\tval: %v\n", k, v) - } - if val != v { - // b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} - -func BenchmarkGCacheARCWithSmallDataset(b *testing.B) { - gc := gcache.New(20). - ARC(). - Build() - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range smallData { - gc.SetWithExpire(k, v, time.Second*30) - val, err := gc.Get(k) - if err != nil { - // XXX gcache has a problem . it cannot get long keyname - // b.Errorf("GCache Get failed key: %v\tval: %v\n", k, v) - } - if val != v { - // b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} - -func BenchmarkGCacheARCWithBigDataset(b *testing.B) { - gc := gcache.New(20). - ARC(). - Build() - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range bigData { - gc.SetWithExpire(k, v, time.Second*30) - val, err := gc.Get(k) - if err != nil { - // XXX gcache has a problem . it cannot get long keyname - // b.Errorf("GCache Get failed key: %v\tval: %v\n", k, v) - } - if val != v { - // b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} - -func BenchmarkMCacheWithSmallDataset(b *testing.B) { - mc := mcache.StartInstance() - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range smallData { - mc.SetPointer(k, v, time.Second*30) - val, ok := mc.GetPointer(k) - if !ok { - b.Errorf("mcache Get failed key: %v\tval: %v\n", k, v) - } - if val.(string) != v { - b.Errorf("expect %v but got %v", v, val.(string)) - } - } - } - }) -} - -func BenchmarkMCacheWithBigDataset(b *testing.B) { - mc := mcache.StartInstance() - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range bigData { - mc.SetPointer(k, v, time.Second*30) - val, ok := mc.GetPointer(k) - if !ok { - b.Errorf("mcache Get failed key: %v\tval: %v\n", k, v) - } - if val.(string) != v { - b.Errorf("expect %v but got %v", v, val.(string)) - } - } - } - }) -} - -func BenchmarkBitcaskWithSmallDataset(b *testing.B) { - bc, _ := bitcask.Open("/tmp/db") - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range smallData { - bk := []byte(k) - bc.Put(bk, []byte(v)) - val, err := bc.Get(bk) - if err != nil { - // XXX bitcask has a problem . it cannot get long keyname - // b.Errorf("Bitcask Get failed key: %v\tval: %v\n", k, v) - } - if string(val) != v { - // b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} - -func BenchmarkBitcaskWithBigDataset(b *testing.B) { - bc, _ := bitcask.Open("/tmp/db") - b.SetParallelism(10000) - b.ResetTimer() - b.ReportAllocs() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - for k, v := range bigData { - bk := []byte(k) - bc.Put(bk, []byte(v)) - val, err := bc.Get(bk) - if err != nil { - // XXX bitcask has a problem . it cannot get long keyname - // b.Errorf("Bitcask Get failed key: %v\tval: %v\n", k, v) - } - if string(val) != v { - // b.Errorf("expect %v but got %v", v, val) - } - } - } - }) -} diff --git a/go.mod b/go.mod index 66543d2..b57debb 100644 --- a/go.mod +++ b/go.mod @@ -1,18 +1,10 @@ module github.com/kpango/gache -go 1.13 +go 1.14 require ( - github.com/OrlovEvgeny/go-mcache v0.0.0-20200121124330-1a8195b34f3a - github.com/VictoriaMetrics/fastcache v1.5.7 - github.com/allegro/bigcache v1.2.1 - github.com/bluele/gcache v0.0.0-20190518031135-bc40bd653833 - github.com/coocood/freecache v1.1.0 - github.com/hlts2/gocache v0.0.0-20190217073200-8b772e486b6e github.com/kpango/fastime v1.0.16 - github.com/kpango/glg v1.5.0 - github.com/patrickmn/go-cache v2.1.0+incompatible - github.com/prologic/bitcask v0.3.5 + github.com/kpango/glg v1.5.1 github.com/zeebo/xxh3 v0.0.0-20191227220208-65f423c10688 golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a ) diff --git a/go.sum b/go.sum index 92eedb1..99dce9c 100644 --- a/go.sum +++ b/go.sum @@ -1,208 +1,72 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OrlovEvgeny/go-mcache v0.0.0-20181113222421-bed69649df7d/go.mod h1:HyURA1Z5rjNkt9E7XyiegZk1ZBvvB+1vYzkeu52goIc= -github.com/OrlovEvgeny/go-mcache v0.0.0-20200121124330-1a8195b34f3a h1:Cf4CrDeyrIcuIiJZEZJAH5dapqQ6J3OmP/vHPbDjaFA= -github.com/OrlovEvgeny/go-mcache v0.0.0-20200121124330-1a8195b34f3a/go.mod h1:ig6eVXkYn/9dz0Vm8UdLf+E0u1bE6kBSn3n2hqk6jas= -github.com/VictoriaMetrics/fastcache v1.5.7 h1:4y6y0G8PRzszQUYIQHHssv/jgPHAb5qQuuDNdCbyAgw= -github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/allegro/bigcache v1.1.0/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= -github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/bluele/gcache v0.0.0-20171010155617-472614239ac7/go.mod h1:8c4/i2VlovMO2gBnHGQPN5EJw+H0lx1u/5p+cgsXtCk= -github.com/bluele/gcache v0.0.0-20190518031135-bc40bd653833 h1:yCfXxYaelOyqnia8F/Yng47qhmfC9nKTRIbYRrRueq4= -github.com/bluele/gcache v0.0.0-20190518031135-bc40bd653833/go.mod h1:8c4/i2VlovMO2gBnHGQPN5EJw+H0lx1u/5p+cgsXtCk= -github.com/bouk/monkey v1.0.1/go.mod h1:PG/63f4XEUlVyW1ttIeOJmJhhe1+t9EC/je3eTjvFhE= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/coocood/freecache v1.0.1/go.mod h1:ePwxCDzOYvARfHdr1pByNct1at3CoKnsipOHwKlNbzI= -github.com/coocood/freecache v1.1.0 h1:ENiHOsWdj1BrrlPwblhbn4GdAsMymK3pZORJ+bJGAjA= -github.com/coocood/freecache v1.1.0/go.mod h1:ePwxCDzOYvARfHdr1pByNct1at3CoKnsipOHwKlNbzI= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gofrs/flock v0.7.1 h1:DP+LD/t0njgoPBvT5MJLeliUIVQR03hiKR6vezdwHlc= -github.com/gofrs/flock v0.7.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hlts2/gocache v0.0.0-20181007125314-e9a99e525ba1/go.mod h1:u/v6wO8kS57bViN/degQAjOX3zGWVx3VW2HOClP2Vcc= -github.com/hlts2/gocache v0.0.0-20190217073200-8b772e486b6e h1:DbBkW74dsFK7w8ggFtenRoBriAGejhhDFGVfvDdpG5o= -github.com/hlts2/gocache v0.0.0-20190217073200-8b772e486b6e/go.mod h1:F4tUovaw56AzbV8K7ET39ZhQLFP8c8bLXRIuVvHAHUg= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kpango/fastime v1.0.0/go.mod h1:Y5XY5bLG5yc7g2XmMUzc22XYV1XaH+KgUOHkDvLp4SA= github.com/kpango/fastime v1.0.16 h1:1prFG/3pTjzcDeCTxt98VB4IvjxcySLs0ldCEhZg0R8= github.com/kpango/fastime v1.0.16/go.mod h1:lVqUTcXmQnk1wriyvq5DElbRSRDC0XtqbXQRdz0Eo+g= -github.com/kpango/gache v1.1.0/go.mod h1:BHKRCYnJ2pRFFIJNc61KTJb3KXSzlrt/ITfgfCQJAJw= -github.com/kpango/glg v1.5.0 h1:7yfjdAuQe0oaNwFTpb3cd/EMLwNmpTKHvrcBp8iPeR8= -github.com/kpango/glg v1.5.0/go.mod h1:eUUoPU3sF2SXafbroz56mZN0Cakh6f4IVe7re4TrCjs= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kpango/glg v1.5.1 h1:ecOOgdPMt7OdDUYjoUZ9dbnY8MVwUUMc6D5ZN3exLNM= +github.com/kpango/glg v1.5.1/go.mod h1:xIbZZSoRgDaYrXYmBK4wccGHkHK3qk61H/pK3R4qyE8= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= -github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/plar/go-adaptive-radix-tree v1.0.1 h1:J+2qrXaKWLACw59s8SlTVYYxWjlUr/BlCsfkAzn96/0= -github.com/plar/go-adaptive-radix-tree v1.0.1/go.mod h1:Ot8d28EII3i7Lv4PSvBlF8ejiD/CtRYDuPsySJbSaK8= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prologic/bitcask v0.3.5 h1:o5PekS/LTRXQvLmY/5oQxIgjdT5bwcxPLsrGmnyo3Yo= -github.com/prologic/bitcask v0.3.5/go.mod h1:gl5FAhs5GhvmV6tEIQWwk9d/FD9vc8NC8Hs24/zU/4w= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/tidwall/redcon v1.0.0/go.mod h1:bdYBm4rlcWpst2XMwKVzWDF9CoUxEbUmM7CQrKeOZas= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/vmihailenco/msgpack v4.0.1+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/zeebo/xxh3 v0.0.0-20191227220208-65f423c10688 h1:C5YYdD+oJh6KoLMePMeA/+PPy2vgsEb6UBBMIy4ug+s= github.com/zeebo/xxh3 v0.0.0-20191227220208-65f423c10688/go.mod h1:e/zZObEJWtkq6f+bAzme0xQJSGI75oxoeqS+f2I7YVI= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +go.uber.org/atomic v1.5.0 h1:OI5t8sDa1Or+q8AeE+yKeB/SDYioSHAgcVljj9JIETY= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/multierr v1.3.0 h1:sFPn2GLc3poCkfrpIXGhBD2X0CMIo4Q/zSULXrj/+uc= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.14.0 h1:/pduUoebOeeJzTDFuoMgC6nRkiasr1sBCIEorly7m4o= +go.uber.org/zap v1.14.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56 h1:estk1glOnSVeJ9tdEZZc5mAMDZk5lNJNyJ6DvrBkTEU= -golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 h1:ng0gs1AKnRRuEMZoTLLlbOd+C17zUDepwGQBb/n+JVg= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=