├── .travis.yml ├── LICENSE ├── README.md ├── codecov.yml ├── deprecated.go ├── go.mod └── go.sum /.travis.yml: -------------------------------------------------------------------------------- 1 | os: 2 | - linux 3 | 4 | language: go 5 | 6 | go: 7 | - 1.11.x 8 | 9 | env: 10 | global: 11 | - GOTFLAGS="-race" 12 | matrix: 13 | - BUILD_DEPTYPE=gomod 14 | 15 | 16 | # disable travis install 17 | install: 18 | - true 19 | 20 | script: 21 | - bash <(curl -s https://raw.githubusercontent.com/ipfs/ci-helpers/master/travis-ci/run-standard-tests.sh) 22 | 23 | 24 | cache: 25 | directories: 26 | - $GOPATH/pkg/mod 27 | - $HOME/.cache/go-build 28 | 29 | notifications: 30 | email: false 31 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016-2018 Protocol Labs 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # go-libp2p-net 2 | 3 | [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) 4 | [![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](https://libp2p.io) 5 | [![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) 6 | [![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) 7 | 8 | > Network interfaces for go-libp2p 9 | 10 | The libp2p Network package handles all of the peer-to-peer networking. It connects to other hosts, it encrypts communications, it muxes messages between the network's client services and target hosts. It has multiple subcomponents: 11 | 12 | - `Conn` - a connection to a single Peer 13 | - `MultiConn` - a set of connections to a single Peer 14 | - `SecureConn` - an encrypted (tls-like) connection 15 | - `Swarm` - holds connections to Peers, multiplexes from/to each `MultiConn` 16 | - `Muxer` - multiplexes between `Services` and `Swarm`. Handles `Request/Reply`. 17 | - `Service` - connects between an outside client service and Network. 18 | - `Handler` - the client service part that handles requests 19 | 20 | It looks a bit like this: 21 | 22 | [![](https://docs.google.com/drawings/d/1FvU7GImRsb9GvAWDDo1le85jIrnFJNVB_OTPXC15WwM/pub?h=480)] 23 | 24 | ## Install 25 | 26 | ```sh 27 | go get libp2p/go-libp2p-net 28 | ``` 29 | 30 | ## Contribute 31 | 32 | Feel free to join in. All welcome. Open an [issue](https://github.com/ipfs/go-libp2p-net/issues)! 33 | 34 | Check out our [contributing document](https://github.com/libp2p/community/blob/master/CONTRIBUTE.md) for more information on how we work, and about contributing in general. Please be aware that all interactions related to libp2p are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md). 35 | 36 | Small note: If editing the README, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification. 37 | 38 | ### Want to hack on IPFS? 39 | 40 | [![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/contributing.md) 41 | 42 | ## License 43 | 44 | [MIT](LICENSE) © 2016 Jeromy Johnson 45 | 46 | --- 47 | 48 | The last gx published version of this module was: 3.0.30: QmY3ArotKMKaL7YGfbQfyDrib6RVraLqZYWXZvVgZktBxp 49 | -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | coverage: 2 | range: "50...100" 3 | comment: off 4 | -------------------------------------------------------------------------------- /deprecated.go: -------------------------------------------------------------------------------- 1 | // Deprecated: use github.com/libp2p/go-libp2p-core/network instead. 2 | package net 3 | 4 | import ( 5 | "context" 6 | "time" 7 | 8 | "github.com/libp2p/go-libp2p-core/helpers" 9 | core "github.com/libp2p/go-libp2p-core/network" 10 | ) 11 | 12 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.MessageSizeMax instead. 13 | const MessageSizeMax = core.MessageSizeMax 14 | 15 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.Stream instead. 16 | type Stream = core.Stream 17 | 18 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.Direction instead. 19 | type Direction = core.Direction 20 | 21 | const ( 22 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.DirectionUnknown instead. 23 | DirUnknown = core.DirUnknown 24 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.DirInbound instead. 25 | DirInbound = core.DirInbound 26 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.DirOutbound instead. 27 | DirOutbound = core.DirOutbound 28 | ) 29 | 30 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.Stat instead. 31 | type Stat = core.Stat 32 | 33 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.StreamHandler instead. 34 | type StreamHandler = core.StreamHandler 35 | 36 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.ConnSecurity instead. 37 | type ConnSecurity = core.ConnSecurity 38 | 39 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.ConnMultiaddrs instead. 40 | type ConnMultiaddrs = core.ConnMultiaddrs 41 | 42 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.Conn instead. 43 | type Conn = core.Conn 44 | 45 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.ConnHandler instead. 46 | type ConnHandler = core.ConnHandler 47 | 48 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.Network instead. 49 | type Network = core.Network 50 | 51 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.ErrNoRemoteAddrs instead. 52 | var ErrNoRemoteAddrs = core.ErrNoRemoteAddrs 53 | 54 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.ErrNoConn instead. 55 | var ErrNoConn = core.ErrNoConn 56 | 57 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.Dialer instead. 58 | type Dialer = core.Dialer 59 | 60 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.Connectedness instead. 61 | type Connectedness = core.Connectedness 62 | 63 | const ( 64 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.NotConnected instead. 65 | NotConnected = core.NotConnected 66 | 67 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.Connected instead. 68 | Connected = core.Connected 69 | 70 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.CanConnect instead. 71 | CanConnect = core.CanConnect 72 | 73 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.CannotConnect instead. 74 | CannotConnect = core.CannotConnect 75 | ) 76 | 77 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.Notifiee instead. 78 | type Notifiee = core.Notifiee 79 | 80 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.NotifyBundle instead. 81 | type NotifyBundle = core.NotifyBundle 82 | 83 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.WithNoDial instead. 84 | func WithNoDial(ctx context.Context, reason string) context.Context { 85 | return core.WithNoDial(ctx, reason) 86 | } 87 | 88 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.GetNoDial instead. 89 | func GetNoDial(ctx context.Context) (nodial bool, reason string) { 90 | return core.GetNoDial(ctx) 91 | } 92 | 93 | // Deprecated: use github.com/libp2p/go-libp2p-core/helpers.EOFTimeout instead. 94 | var EOFTimeout = helpers.EOFTimeout 95 | 96 | // Deprecated: use github.com/libp2p/go-libp2p-core/helpers.ErrExpectedEOF instead. 97 | var ErrExpectedEOF = helpers.ErrExpectedEOF 98 | 99 | // Deprecated: use github.com/libp2p/go-libp2p-core/helpers.FullClose instead. 100 | func FullClose(s core.Stream) error { 101 | return helpers.FullClose(s) 102 | } 103 | 104 | // Deprecated: use github.com/libp2p/go-libp2p-core/helpers.AwaitEOF instead. 105 | func AwaitEOF(s core.Stream) error { 106 | return helpers.AwaitEOF(s) 107 | } 108 | 109 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.DialPeerTimeout instead. 110 | // Warning: it's impossible to alias a var in go. Writes to this var would have no longer 111 | // have any effect, so it has been commented out to induce breakage for added safety. 112 | // var DialPeerTimeout = core.DialPeerTimeout 113 | 114 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.GetDialPeerTimeout instead. 115 | func GetDialPeerTimeout(ctx context.Context) time.Duration { 116 | return core.GetDialPeerTimeout(ctx) 117 | } 118 | 119 | // Deprecated: use github.com/libp2p/go-libp2p-core/network.WithDialPeerTimeout instead. 120 | func WithDialPeerTimeout(ctx context.Context, timeout time.Duration) context.Context { 121 | return core.WithDialPeerTimeout(ctx, timeout) 122 | } 123 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/libp2p/go-libp2p-net 2 | 3 | require github.com/libp2p/go-libp2p-core v0.0.1 4 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= 2 | github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32 h1:qkOC5Gd33k54tobS36cXdAzJbeHaduLtnLQQwNoIi78= 3 | github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= 4 | github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= 5 | github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= 6 | github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= 7 | github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= 8 | github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= 9 | github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= 10 | github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= 11 | github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= 12 | github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= 13 | github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495 h1:6IyqGr3fnd0tM3YxipK27TUskaOVUjU2nG45yzwcQKY= 14 | github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 15 | github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= 16 | github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= 17 | github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= 18 | github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 19 | github.com/gxed/hashland/keccakpg v0.0.1 h1:wrk3uMNaMxbXiHibbPO4S0ymqJMm41WiudyFSs7UnsU= 20 | github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= 21 | github.com/gxed/hashland/murmur3 v0.0.1 h1:SheiaIt0sda5K+8FLz952/1iWS9zrnKsEJaOJu4ZbSc= 22 | github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= 23 | github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= 24 | github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= 25 | github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8 h1:bspPhN+oKYFk5fcGNuQzp6IGzYQSenLEgH3s6jkXrWw= 26 | github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY= 27 | github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= 28 | github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= 29 | github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= 30 | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= 31 | github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= 32 | github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= 33 | github.com/libp2p/go-libp2p-core v0.0.1 h1:HSTZtFIq/W5Ue43Zw+uWZyy2Vl5WtF0zDjKN8/DT/1I= 34 | github.com/libp2p/go-libp2p-core v0.0.1/go.mod h1:g/VxnTZ/1ygHxH3dKok7Vno1VfpvGcGip57wjTU4fco= 35 | github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= 36 | github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= 37 | github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16 h1:5W7KhL8HVF3XCFOweFD3BNESdnO8ewyYTFT2R+/b8FQ= 38 | github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= 39 | github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= 40 | github.com/mr-tron/base58 v1.1.1 h1:OJIdWOWYe2l5PQNgimGtuwHY8nDskvJ5vvs//YnzRLs= 41 | github.com/mr-tron/base58 v1.1.1/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= 42 | github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= 43 | github.com/multiformats/go-multiaddr v0.0.2 h1:RBysRCv5rv3FWlhKWKoXv8tnsCUpEpIZpCmqAGZos2s= 44 | github.com/multiformats/go-multiaddr v0.0.2/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= 45 | github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= 46 | github.com/multiformats/go-multihash v0.0.1 h1:HHwN1K12I+XllBCrqKnhX949Orn4oawPkegHMu2vDqQ= 47 | github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= 48 | github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= 49 | github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= 50 | github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= 51 | github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a h1:/eS3yfGjQKG+9kayBkj0ip1BGhq6zJ3eaVksphxAaek= 52 | github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= 53 | github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= 54 | github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= 55 | golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= 56 | golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= 57 | golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b h1:+/WWzjwW6gidDJnMKWLKLX1gxn7irUTF1fLpQovfQ5M= 58 | golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= 59 | golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 60 | golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 61 | golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 62 | golang.org/x/sys v0.0.0-20190219092855-153ac476189d h1:Z0Ahzd7HltpJtjAHHxX8QFP3j1yYgiuvjbjRzDj/KH0= 63 | golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 64 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 65 | golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 66 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= 67 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 68 | gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= 69 | gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= 70 | gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= 71 | gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 72 | --------------------------------------------------------------------------------