Merge pull request #16 from markbates/elvis

Elvis
This commit is contained in:
Mark Bates 2019-11-01 16:12:18 -04:00 committed by GitHub
commit afce25df00
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
120 changed files with 2608 additions and 2652 deletions

View File

@ -33,8 +33,6 @@ Pkger's API is modeled on that of the [`os`](https://godoc.org/os) package in Go
```go ```go
type Pkger interface { type Pkger interface {
Parse(p string) (Path, error) Parse(p string) (Path, error)
Abs(p string) (string, error)
AbsPath(Path) (string, error)
Current() (here.Info, error) Current() (here.Info, error)
Info(p string) (here.Info, error) Info(p string) (here.Info, error)
Create(name string) (File, error) Create(name string) (File, error)
@ -48,7 +46,6 @@ type Pkger interface {
type File interface { type File interface {
Close() error Close() error
Abs() (string, error)
Info() here.Info Info() here.Info
Name() string Name() string
Open(name string) (http.File, error) Open(name string) (http.File, error)

View File

@ -10,11 +10,8 @@ jobs:
vmImage: "vs2017-win2016" vmImage: "vs2017-win2016"
strategy: strategy:
matrix: matrix:
go 1.12 (on):
go_version: "1.12.9"
GO111MODULE: "on"
go 1.13 (on): go 1.13 (on):
go_version: "1.13" go_version: "1.13.3"
GO111MODULE: "on" GO111MODULE: "on"
steps: steps:
- template: azure-tests.yml - template: azure-tests.yml
@ -24,11 +21,8 @@ jobs:
vmImage: "macOS-10.13" vmImage: "macOS-10.13"
strategy: strategy:
matrix: matrix:
go 1.12 (on):
go_version: "1.12.9"
GO111MODULE: "on"
go 1.13 (on): go 1.13 (on):
go_version: "1.13" go_version: "1.13.3"
GO111MODULE: "on" GO111MODULE: "on"
steps: steps:
- template: azure-tests.yml - template: azure-tests.yml
@ -38,11 +32,8 @@ jobs:
vmImage: "ubuntu-16.04" vmImage: "ubuntu-16.04"
strategy: strategy:
matrix: matrix:
go 1.12 (on):
go_version: "1.12.9"
GO111MODULE: "on"
go 1.13 (on): go 1.13 (on):
go_version: "1.13" go_version: "1.13.3"
GO111MODULE: "on" GO111MODULE: "on"
steps: steps:
- template: azure-tests.yml - template: azure-tests.yml

View File

@ -1,8 +0,0 @@
// +build !skippackr
// Code generated by github.com/gobuffalo/packr/v2. DO NOT EDIT.
// You can use the "packr clean" command to clean up this,
// and any other packr generated files.
package main
import _ "app/packrd"

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,7 @@
FROM alpine
EXPOSE 3000
COPY example /bin/
CMD /bin/example

View File

@ -0,0 +1,5 @@
default:
pkger
GOOS=linux go build -v -o example
docker build -t pkger:example .
docker run -p 3000:3000 pkger:example

View File

@ -0,0 +1,7 @@
module app
go 1.13
require github.com/markbates/pkger v0.8.0
replace github.com/markbates/pkger => ../../../

View File

@ -0,0 +1,19 @@
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/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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
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/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

View File

@ -0,0 +1,28 @@
package main
import (
"fmt"
"log"
"github.com/markbates/pkger"
)
func main() {
if err := run(); err != nil {
log.Fatal(err)
}
}
func run() error {
info, err := pkger.Stat("/go.mod")
if err != nil {
return err
}
fmt.Println("Name: ", info.Name())
fmt.Println("Size: ", info.Size())
fmt.Println("Mode: ", info.Mode())
fmt.Println("ModTime: ", info.ModTime())
return nil
}

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -0,0 +1,7 @@
FROM alpine
EXPOSE 3000
COPY example /bin/
CMD /bin/example

View File

@ -0,0 +1,4 @@
default:
GOOS=linux go build -v -o example
docker build -t pkger:example .
docker run -p 3000:3000 pkger:example

3
examples/stat/std/go.mod Normal file
View File

@ -0,0 +1,3 @@
module app
go 1.13

27
examples/stat/std/main.go Normal file
View File

@ -0,0 +1,27 @@
package main
import (
"fmt"
"log"
"os"
)
func main() {
if err := run(); err != nil {
log.Fatal(err)
}
}
func run() error {
info, err := os.Stat("./go.mod")
if err != nil {
return err
}
fmt.Println("Name: ", info.Name())
fmt.Println("Size: ", info.Size())
fmt.Println("Mode: ", info.Mode())
fmt.Println("ModTime: ", info.ModTime())
return nil
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<title>HI</title>
</head>
<body>
HELLO
<img src="/images/img1.png" alt=""/>
</body>
</html>

View File

@ -1,8 +0,0 @@
// +build !skippackr
// Code generated by github.com/gobuffalo/packr/v2. DO NOT EDIT.
// You can use the "packr clean" command to clean up this,
// and any other packr generated files.
package main
import _ "app/packrd"

File diff suppressed because one or more lines are too long

View File

@ -3,7 +3,9 @@ package here
import ( import (
"encoding/json" "encoding/json"
"os" "os"
"path"
"path/filepath" "path/filepath"
"strings"
) )
// Dir attempts to gather info for the requested directory. // Dir attempts to gather info for the requested directory.
@ -31,6 +33,26 @@ func Dir(p string) (Info, error) {
b, err := run("go", "list", "-json") b, err := run("go", "list", "-json")
if err != nil { if err != nil {
es := err.Error()
if !(strings.Contains(es, "cannot find module for path .") || strings.Contains(es, "no Go files")) {
return i, err
}
info, err := Dir(filepath.Dir(p))
if err != nil {
return info, err
}
i.Module = info.Module
ph := strings.TrimPrefix(p, info.Module.Dir)
i.ImportPath = path.Join(info.Module.Path, ph)
i.Name = path.Base(i.ImportPath)
ph = filepath.Join(info.Module.Dir, ph)
i.Dir = ph
return i, err return i, err
} }

View File

@ -2,7 +2,7 @@ package here
import ( import (
"bytes" "bytes"
"os" "fmt"
"os/exec" "os/exec"
"sync" "sync"
) )
@ -16,10 +16,10 @@ func run(n string, args ...string) ([]byte, error) {
bb := &bytes.Buffer{} bb := &bytes.Buffer{}
c.Stdout = bb c.Stdout = bb
c.Stderr = os.Stderr c.Stderr = bb
err := c.Run() err := c.Run()
if err != nil { if err != nil {
return nil, err return nil, fmt.Errorf("%w: %s", err, bb)
} }
return bb.Bytes(), nil return bb.Bytes(), nil

View File

@ -6,9 +6,6 @@ import (
"path/filepath" "path/filepath"
"runtime" "runtime"
"strings" "strings"
"github.com/markbates/pkger/internal/takeon/github.com/markbates/hepa"
"github.com/markbates/pkger/internal/takeon/github.com/markbates/hepa/filters"
) )
// Info represents details about the directory/package // Info represents details about the directory/package
@ -27,16 +24,7 @@ func (fi Info) MarshalJSON() ([]byte, error) {
"Dir": fi.Dir, "Dir": fi.Dir,
} }
b, err := json.Marshal(mm) return json.Marshal(mm)
if err != nil {
return nil, err
}
hep := hepa.New()
hep = hepa.With(hep, filters.Home())
hep = hepa.With(hep, filters.Golang())
return hep.Filter(b)
} }
func (i Info) FilePath(paths ...string) string { func (i Info) FilePath(paths ...string) string {

View File

@ -2,44 +2,14 @@ package here
import ( import (
"encoding/json" "encoding/json"
"github.com/markbates/pkger/internal/takeon/github.com/markbates/hepa"
"github.com/markbates/pkger/internal/takeon/github.com/markbates/hepa/filters"
) )
type Module struct { type Module struct {
Path string Path string `json:"path"`
Main bool Main bool `json:"main"`
Dir string Dir string `json:"dir"`
GoMod string GoMod string `json:"go_mod"`
GoVersion string GoVersion string `json:"go_version"`
}
func (m Module) MarshalJSON() ([]byte, error) {
mm := map[string]interface{}{
"Main": m.Main,
"GoVersion": m.GoVersion,
}
hep := hepa.New()
hep = hepa.With(hep, filters.Home())
hep = hepa.With(hep, filters.Golang())
cm := map[string]string{
"Path": m.Path,
"Dir": m.Dir,
"GoMod": m.GoMod,
}
for k, v := range cm {
b, err := hep.Filter([]byte(v))
if err != nil {
return nil, err
}
mm[k] = string(b)
}
return json.Marshal(mm)
} }
func (i Module) String() string { func (i Module) String() string {

View File

@ -41,7 +41,7 @@ func (i Info) build(p, pkg, name string) (Path, error) {
if strings.HasPrefix(pt.Pkg, "/") || len(pt.Pkg) == 0 { if strings.HasPrefix(pt.Pkg, "/") || len(pt.Pkg) == 0 {
pt.Name = pt.Pkg pt.Name = pt.Pkg
pt.Pkg = i.ImportPath pt.Pkg = i.Module.Path
} }
if len(pt.Name) == 0 { if len(pt.Name) == 0 {
@ -49,7 +49,7 @@ func (i Info) build(p, pkg, name string) (Path, error) {
} }
if pt.Pkg == pt.Name { if pt.Pkg == pt.Name {
pt.Pkg = i.ImportPath pt.Pkg = i.Module.Path
pt.Name = "/" pt.Name = "/"
} }

View File

@ -1,6 +1,7 @@
package here_test package here_test
import ( import (
"os"
"path/filepath" "path/filepath"
"strings" "strings"
"testing" "testing"
@ -15,8 +16,9 @@ func Test_Info_Parse(t *testing.T) {
r := require.New(t) r := require.New(t)
app, err := pkgtest.App() app, err := pkgtest.NewRef()
r.NoError(err) r.NoError(err)
defer os.RemoveAll(app.Dir)
ip := app.Info.ImportPath ip := app.Info.ImportPath
ip2 := "another/app" ip2 := "another/app"

View File

@ -2,6 +2,8 @@ package here
import ( import (
"encoding/json" "encoding/json"
"path"
"strings"
) )
// Package attempts to gather info for the requested package. // Package attempts to gather info for the requested package.
@ -18,7 +20,12 @@ func Package(p string) (Info, error) {
var i Info var i Info
b, err := run("go", "list", "-json", "-find", p) b, err := run("go", "list", "-json", "-find", p)
if err != nil { if err != nil {
return i, err if !strings.Contains(err.Error(), "can't load package: package") {
return i, err
}
p, _ = path.Split(p)
return Package(p)
} }
if err := json.Unmarshal(b, &i); err != nil { if err := json.Unmarshal(b, &i); err != nil {
return i, err return i, err

View File

@ -10,7 +10,7 @@ var _ Decl = CreateDecl{}
type CreateDecl struct { type CreateDecl struct {
file *File file *File
pos token.Pos pos token.Position
value string value string
} }
@ -35,10 +35,7 @@ func (d CreateDecl) File() (*File, error) {
return d.file, nil return d.file, nil
} }
func (d CreateDecl) Pos() (token.Pos, error) { func (d CreateDecl) Position() (token.Position, error) {
if d.pos <= 0 {
return -1, os.ErrNotExist
}
return d.pos, nil return d.pos, nil
} }

View File

@ -7,7 +7,7 @@ import (
type Decl interface { type Decl interface {
File() (*File, error) File() (*File, error)
Pos() (token.Pos, error) Position() (token.Position, error)
Value() (string, error) Value() (string, error)
} }
@ -43,7 +43,7 @@ func (decls Decls) Files() ([]*File, error) {
} }
for _, f := range files { for _, f := range files {
m[f.Path.String()] = f m[f.Abs] = f
} }
} }

View File

@ -10,7 +10,7 @@ var _ Decl = HTTPDecl{}
type HTTPDecl struct { type HTTPDecl struct {
file *File file *File
pos token.Pos pos token.Position
value string value string
} }
@ -35,10 +35,7 @@ func (d HTTPDecl) File() (*File, error) {
return d.file, nil return d.file, nil
} }
func (d HTTPDecl) Pos() (token.Pos, error) { func (d HTTPDecl) Position() (token.Position, error) {
if d.pos <= 0 {
return -1, os.ErrNotExist
}
return d.pos, nil return d.pos, nil
} }
@ -55,5 +52,6 @@ func (d HTTPDecl) Files(virtual map[string]string) ([]*File, error) {
pos: d.pos, pos: d.pos,
value: d.value, value: d.value,
} }
return od.Files(virtual) return od.Files(virtual)
} }

View File

@ -10,7 +10,7 @@ var _ Decl = MkdirAllDecl{}
type MkdirAllDecl struct { type MkdirAllDecl struct {
file *File file *File
pos token.Pos pos token.Position
value string value string
} }
@ -35,10 +35,7 @@ func (d MkdirAllDecl) File() (*File, error) {
return d.file, nil return d.file, nil
} }
func (d MkdirAllDecl) Pos() (token.Pos, error) { func (d MkdirAllDecl) Position() (token.Position, error) {
if d.pos <= 0 {
return -1, os.ErrNotExist
}
return d.pos, nil return d.pos, nil
} }

View File

@ -5,16 +5,13 @@ import (
"go/token" "go/token"
"os" "os"
"path/filepath" "path/filepath"
"github.com/markbates/pkger"
"github.com/markbates/pkger/here"
) )
var _ Decl = OpenDecl{} var _ Decl = OpenDecl{}
type OpenDecl struct { type OpenDecl struct {
file *File file *File
pos token.Pos pos token.Position
value string value string
} }
@ -39,10 +36,7 @@ func (d OpenDecl) File() (*File, error) {
return d.file, nil return d.file, nil
} }
func (d OpenDecl) Pos() (token.Pos, error) { func (d OpenDecl) Position() (token.Position, error) {
if d.pos <= 0 {
return -1, os.ErrNotExist
}
return d.pos, nil return d.pos, nil
} }
@ -58,17 +52,10 @@ func (d OpenDecl) Files(virtual map[string]string) ([]*File, error) {
return nil, nil return nil, nil
} }
pt, err := pkger.Parse(d.value) her := d.file.Here
if err != nil { pt := d.file.Path
return nil, err
}
her, err := here.Package(pt.Pkg) fp := filepath.Join(her.Module.Dir, pt.Name)
if err != nil {
return nil, err
}
fp := filepath.Join(her.Dir, pt.Name)
osf, err := os.Stat(fp) osf, err := os.Stat(fp)
if err != nil { if err != nil {
@ -83,10 +70,9 @@ func (d OpenDecl) Files(virtual map[string]string) ([]*File, error) {
} }
return wd.Files(virtual) return wd.Files(virtual)
} }
var files []*File var files []*File
files = append(files, &File{ files = append(files, &File{
Abs: filepath.Join(her.Dir, pt.Name), Abs: filepath.Join(her.Module.Dir, pt.Name),
Path: pt, Path: pt,
Here: her, Here: her,
}) })

View File

@ -5,6 +5,7 @@ import (
"go/parser" "go/parser"
"go/token" "go/token"
"os" "os"
"path/filepath"
"github.com/markbates/pkger/here" "github.com/markbates/pkger/here"
) )
@ -30,30 +31,41 @@ func fromSource(her here.Info) (Decls, error) {
return nil, fmt.Errorf("%q is not a directory", root) return nil, fmt.Errorf("%q is not a directory", root)
} }
fset := token.NewFileSet()
pkgs, err := parser.ParseDir(fset, root, nil, 0)
if err != nil {
return nil, err
}
var decls Decls var decls Decls
for _, pkg := range pkgs { err = filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
for name, pf := range pkg.Files { if err != nil {
f := &file{ return err
fset: fset,
astFile: pf,
filename: name,
}
x, err := f.find()
if err != nil {
return nil, err
}
decls = append(decls, x...)
} }
}
return decls, nil fset := token.NewFileSet()
if !info.IsDir() {
return nil
}
pkgs, err := parser.ParseDir(fset, path, nil, 0)
if err != nil {
return err
}
for _, pkg := range pkgs {
for name, pf := range pkg.Files {
f := &file{
fset: fset,
astFile: pf,
filename: name,
current: her,
}
x, err := f.find()
if err != nil {
return err
}
decls = append(decls, x...)
}
}
return nil
})
return decls, err
} }

View File

@ -1,93 +1,69 @@
package parser_test package parser_test
import ( import (
"fmt" "os"
"path/filepath" "path/filepath"
"sort" "strings"
"testing" "testing"
"github.com/markbates/pkger/here" "github.com/markbates/pkger/here"
"github.com/markbates/pkger/parser" "github.com/markbates/pkger/parser"
"github.com/markbates/pkger/pkging/pkgtest" "github.com/markbates/pkger/pkging/pkgtest"
"github.com/markbates/pkger/pkging/stdos"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func Test_Parser_App(t *testing.T) { func Test_Parser_Ref(t *testing.T) {
r := require.New(t) r := require.New(t)
app, err := pkgtest.App() ref, err := pkgtest.NewRef()
r.NoError(err)
defer os.RemoveAll(ref.Dir)
disk, err := stdos.New(ref.Info)
r.NoError(err) r.NoError(err)
res, err := parser.Parse(app.Info) _, err = pkgtest.LoadFiles("/", ref, disk)
r.NoError(err)
res, err := parser.Parse(ref.Info)
r.NoError(err) r.NoError(err)
files, err := res.Files() files, err := res.Files()
r.NoError(err) r.NoError(err)
r.Len(files, 22)
act := make([]string, len(files)) for _, f := range files {
for i := 0; i < len(files); i++ { r.True(strings.HasPrefix(f.Abs, ref.Dir), "%q %q", f.Abs, ref.Dir)
act[i] = files[i].Path.String()
} }
sort.Strings(act)
for _, a := range act {
fmt.Println(a)
}
r.Equal(app.Paths.Parser, act)
} }
func Test_Parse_Dynamic_Files(t *testing.T) { func Test_Parser_Example_HTTP(t *testing.T) {
r := require.New(t) r := require.New(t)
app, err := dynamic() cur, err := here.Current()
r.NoError(err) r.NoError(err)
res, err := parser.Parse(app.Info) pwd, err := os.Getwd()
r.NoError(err)
defer os.Chdir(pwd)
root := filepath.Join(cur.Dir, "examples", "http", "pkger")
r.NoError(os.Chdir(root))
her, err := here.Dir(".")
r.NoError(err)
res, err := parser.Parse(her)
r.NoError(err) r.NoError(err)
files, err := res.Files() files, err := res.Files()
r.NoError(err) r.NoError(err)
r.Len(files, 5)
r.Len(files, 1) for _, f := range files {
r.True(strings.HasPrefix(f.Abs, her.Dir), "%q %q", f.Abs, her.Dir)
f := files[0] r.True(strings.HasPrefix(f.Path.Name, "/public"), "%q %q", f.Path.Name, "/public")
r.Equal("/go.mod", f.Path.Name) }
}
// dynamic returns here.info that represents the
// ./internal/testdata/app. This should be used
// by tests.
func dynamic() (pkgtest.AppDetails, error) {
var app pkgtest.AppDetails
her, err := here.Package("github.com/markbates/pkger")
if err != nil {
return app, err
}
info := here.Info{
ImportPath: "dynamic",
}
ch := filepath.Join(
her.Dir,
"pkging",
"pkgtest",
"internal",
"testdata",
"dynamic")
info.Dir = ch
info, err = here.Cache(info.ImportPath, func(s string) (here.Info, error) {
return info, nil
})
if err != nil {
return app, err
}
app.Info = info
return app, nil
} }

View File

@ -4,17 +4,13 @@ import (
"encoding/json" "encoding/json"
"go/token" "go/token"
"os" "os"
"path/filepath"
"github.com/markbates/pkger"
"github.com/markbates/pkger/here"
) )
var _ Decl = StatDecl{} var _ Decl = StatDecl{}
type StatDecl struct { type StatDecl struct {
file *File file *File
pos token.Pos pos token.Position
value string value string
} }
@ -39,10 +35,7 @@ func (d StatDecl) File() (*File, error) {
return d.file, nil return d.file, nil
} }
func (d StatDecl) Pos() (token.Pos, error) { func (d StatDecl) Position() (token.Position, error) {
if d.pos <= 0 {
return -1, os.ErrNotExist
}
return d.pos, nil return d.pos, nil
} }
@ -54,26 +47,11 @@ func (d StatDecl) Value() (string, error) {
} }
func (d StatDecl) Files(virtual map[string]string) ([]*File, error) { func (d StatDecl) Files(virtual map[string]string) ([]*File, error) {
if _, ok := virtual[d.value]; ok { od := OpenDecl{
return nil, nil file: d.file,
pos: d.pos,
value: d.value,
} }
pt, err := pkger.Parse(d.value) return od.Files(virtual)
if err != nil {
return nil, err
}
her, err := here.Package(pt.Pkg)
if err != nil {
return nil, err
}
var files []*File
files = append(files, &File{
Abs: filepath.Join(her.Dir, pt.Name),
Path: pt,
Here: her,
})
return files, nil
} }

View File

@ -21,6 +21,7 @@ type file struct {
astFile *ast.File astFile *ast.File
filename string filename string
decls Decls decls Decls
current here.Info
} }
func (f *file) walk(fn func(ast.Node) bool) { func (f *file) walk(fn func(ast.Node) bool) {
@ -98,11 +99,15 @@ func (f *file) findMkdirAllCalls() error {
pf := &File{ pf := &File{
Abs: f.filename, Abs: f.filename,
Here: info, Here: info,
Path: here.Path{
Pkg: info.Module.Path,
Name: s,
},
} }
decl := MkdirAllDecl{ decl := MkdirAllDecl{
file: pf, file: pf,
pos: n.Pos(), pos: f.fset.Position(n.Pos()),
value: s, value: s,
} }
@ -140,11 +145,15 @@ func (f *file) findStatCalls() error {
pf := &File{ pf := &File{
Abs: f.filename, Abs: f.filename,
Here: info, Here: info,
Path: here.Path{
Pkg: info.Module.Path,
Name: s,
},
} }
decl := StatDecl{ decl := StatDecl{
file: pf, file: pf,
pos: n.Pos(), pos: f.fset.Position(n.Pos()),
value: s, value: s,
} }
@ -153,6 +162,7 @@ func (f *file) findStatCalls() error {
}) })
return err return err
} }
func (f *file) findCreateCalls() error { func (f *file) findCreateCalls() error {
var err error var err error
f.walk(func(node ast.Node) bool { f.walk(func(node ast.Node) bool {
@ -181,11 +191,15 @@ func (f *file) findCreateCalls() error {
pf := &File{ pf := &File{
Abs: f.filename, Abs: f.filename,
Here: info, Here: info,
Path: here.Path{
Pkg: info.Module.Path,
Name: s,
},
} }
decl := CreateDecl{ decl := CreateDecl{
file: pf, file: pf,
pos: n.Pos(), pos: f.fset.Position(n.Pos()),
value: s, value: s,
} }
@ -194,6 +208,7 @@ func (f *file) findCreateCalls() error {
}) })
return err return err
} }
func (f *file) findOpenCalls() error { func (f *file) findOpenCalls() error {
var err error var err error
f.walk(func(node ast.Node) bool { f.walk(func(node ast.Node) bool {
@ -222,11 +237,15 @@ func (f *file) findOpenCalls() error {
pf := &File{ pf := &File{
Abs: f.filename, Abs: f.filename,
Here: info, Here: info,
Path: here.Path{
Pkg: info.Module.Path,
Name: s,
},
} }
decl := OpenDecl{ decl := OpenDecl{
file: pf, file: pf,
pos: n.Pos(), pos: f.fset.Position(n.Pos()),
value: s, value: s,
} }
@ -253,22 +272,29 @@ func (f *file) findWalkCalls() error {
s, err := f.asValue(n) s, err := f.asValue(n)
if err != nil { if err != nil {
err = err
return false return false
} }
info, err := here.Dir(filepath.Dir(f.filename)) dir := filepath.Dir(f.filename)
info, err := here.Dir(dir)
if err != nil { if err != nil {
err = err
return false return false
} }
pf := &File{ pf := &File{
Abs: f.filename, Abs: f.filename,
Here: info, Here: info,
Path: here.Path{
Pkg: info.Module.Path,
Name: s,
},
} }
decl := WalkDecl{ decl := WalkDecl{
file: pf, file: pf,
pos: n.Pos(), pos: f.fset.Position(n.Pos()),
value: s, value: s,
} }
@ -306,11 +332,16 @@ func (f *file) findHTTPCalls() error {
pf := &File{ pf := &File{
Abs: f.filename, Abs: f.filename,
Here: info, Here: info,
Path: here.Path{
Pkg: info.Module.Path,
Name: s,
},
} }
pos := f.fset.Position(n.Pos())
decl := HTTPDecl{ decl := HTTPDecl{
file: pf, file: pf,
pos: n.Pos(), pos: pos,
value: s, value: s,
} }

View File

@ -7,7 +7,6 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
"github.com/markbates/pkger"
"github.com/markbates/pkger/here" "github.com/markbates/pkger/here"
) )
@ -15,7 +14,7 @@ var _ Decl = WalkDecl{}
type WalkDecl struct { type WalkDecl struct {
file *File file *File
pos token.Pos pos token.Position
value string value string
} }
@ -40,10 +39,7 @@ func (d WalkDecl) File() (*File, error) {
return d.file, nil return d.file, nil
} }
func (d WalkDecl) Pos() (token.Pos, error) { func (d WalkDecl) Position() (token.Position, error) {
if d.pos <= 0 {
return -1, os.ErrNotExist
}
return d.pos, nil return d.pos, nil
} }
@ -55,25 +51,32 @@ func (d WalkDecl) Value() (string, error) {
} }
func (d WalkDecl) Files(virtual map[string]string) ([]*File, error) { func (d WalkDecl) Files(virtual map[string]string) ([]*File, error) {
pt, err := pkger.Parse(d.value)
if err != nil {
return nil, err
}
cur, err := here.Package(pt.Pkg)
if err != nil {
return nil, err
}
root := filepath.Join(cur.Dir, pt.Name)
var files []*File var files []*File
err = filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
her := d.file.Here
pt := d.file.Path
root := filepath.Join(her.Module.Dir, pt.Name)
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
her, err = here.Dir(path)
if err != nil {
return err
}
}
n := strings.TrimPrefix(path, her.Module.Dir)
pt, err := her.Parse(n)
if err != nil { if err != nil {
return err return err
} }
n := strings.TrimPrefix(path, cur.Dir)
if _, ok := virtual[n]; ok { if _, ok := virtual[n]; ok {
if info.IsDir() { if info.IsDir() {
return filepath.SkipDir return filepath.SkipDir
@ -81,16 +84,10 @@ func (d WalkDecl) Files(virtual map[string]string) ([]*File, error) {
return nil return nil
} }
pt, err := pkger.Parse(n)
if err != nil {
return err
}
pt.Pkg = cur.ImportPath
files = append(files, &File{ files = append(files, &File{
Abs: path, Abs: path,
Path: pt, Path: pt,
Here: cur, Here: her,
}) })
return nil return nil
}) })

View File

@ -39,7 +39,7 @@ func impl() pkging.Pkger {
type Dir string type Dir string
func (d Dir) Open(name string) (http.File, error) { func (d Dir) Open(name string) (http.File, error) {
f, err := Open(string(d)) f, err := impl().Open(string(d))
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -51,16 +51,6 @@ func Parse(p string) (here.Path, error) {
return impl().Parse(p) return impl().Parse(p)
} }
// Abs returns an absolute representation of path. If the path is not absolute it will be joined with the current working directory to turn it into an absolute path. The absolute path name for a given file is not guaranteed to be unique. Abs calls Clean on the result.
func Abs(p string) (string, error) {
return impl().Abs(p)
}
// AbsPath returns an absolute representation of here.Path. If the path is not absolute it will be joined with the current working directory to turn it into an absolute path. The absolute path name for a given file is not guaranteed to be unique. AbsPath calls Clean on the result.
func AbsPath(p here.Path) (string, error) {
return impl().AbsPath(p)
}
// Current returns the here.Info representing the current Pkger implementation. // Current returns the here.Info representing the current Pkger implementation.
func Current() (here.Info, error) { func Current() (here.Info, error) {
return impl().Current() return impl().Current()

View File

@ -2,10 +2,8 @@ package pkger
import ( import (
"os" "os"
"path/filepath"
"testing" "testing"
"github.com/markbates/pkger/here"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
@ -18,31 +16,6 @@ func Test_Parse(t *testing.T) {
r.Equal("/little", pt.Name) r.Equal("/little", pt.Name)
} }
func Test_Abs(t *testing.T) {
r := require.New(t)
s, err := Abs(":/rocket.ship")
r.NoError(err)
pwd, err := os.Getwd()
r.NoError(err)
r.Equal(filepath.Join(pwd, "rocket.ship"), s)
}
func Test_AbsPath(t *testing.T) {
r := require.New(t)
s, err := AbsPath(here.Path{
Pkg: "github.com/markbates/pkger",
Name: "/rocket.ship",
})
r.NoError(err)
pwd, err := os.Getwd()
r.NoError(err)
r.Equal(filepath.Join(pwd, "rocket.ship"), s)
}
func Test_Current(t *testing.T) { func Test_Current(t *testing.T) {
r := require.New(t) r := require.New(t)
@ -96,7 +69,7 @@ func Test_Walk(t *testing.T) {
r := require.New(t) r := require.New(t)
files := map[string]os.FileInfo{} files := map[string]os.FileInfo{}
err := Walk("/pkging/pkgtest/internal/testdata/app", func(path string, info os.FileInfo, err error) error { err := Walk("/pkging/pkgtest/testdata/ref", func(path string, info os.FileInfo, err error) error {
if err != nil { if err != nil {
return err return err
} }

View File

@ -11,9 +11,6 @@ type File interface {
// Close closes the File, rendering it unusable for I/O. // Close closes the File, rendering it unusable for I/O.
Close() error Close() error
// Abs returns an absolute representation of the file. If the path is not absolute it will be joined with the current working directory to turn it into an absolute path. The absolute path name for a given file is not guaranteed to be unique. Abs calls Clean on the result.
Abs() (string, error)
// Info returns the here.Info of the file // Info returns the here.Info of the file
Info() here.Info Info() here.Info

View File

@ -6,18 +6,18 @@ import (
"testing" "testing"
"time" "time"
"github.com/markbates/pkger/here"
"github.com/markbates/pkger/pkging" "github.com/markbates/pkger/pkging"
"github.com/markbates/pkger/pkging/pkgtest"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func Test_NewFileInfo(t *testing.T) { func Test_NewFileInfo(t *testing.T) {
r := require.New(t) r := require.New(t)
app, err := pkgtest.App() her, err := here.Current()
r.NoError(err) r.NoError(err)
exp, err := os.Stat(filepath.Join(app.Info.Dir, "go.mod")) exp, err := os.Stat(filepath.Join(her.Dir, "go.mod"))
r.NoError(err) r.NoError(err)
act := pkging.NewFileInfo(exp) act := pkging.NewFileInfo(exp)

View File

@ -25,7 +25,12 @@ func (fx *Pkger) Add(files ...*os.File) error {
return err return err
} }
her, err := here.Package(pt.Pkg) dir := f.Name()
if !info.IsDir() {
dir = filepath.Dir(dir)
}
her, err := here.Dir(dir)
if err != nil { if err != nil {
return err return err
} }

View File

@ -3,31 +3,28 @@ package mem_test
import ( import (
"os" "os"
"path/filepath" "path/filepath"
"sort"
"testing" "testing"
"github.com/markbates/pkger/here"
"github.com/markbates/pkger/pkging/mem" "github.com/markbates/pkger/pkging/mem"
"github.com/markbates/pkger/pkging/pkgtest"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func Test_Pkger_Add(t *testing.T) { func Test_Pkger_Add(t *testing.T) {
r := require.New(t) r := require.New(t)
app, err := pkgtest.App() cur, err := here.Package("github.com/markbates/pkger")
r.NoError(err) r.NoError(err)
pkg, err := mem.New(app.Info) pkg, err := mem.New(cur)
r.NoError(err) r.NoError(err)
root := app.Info.Dir
var exp []os.FileInfo var exp []os.FileInfo
root := filepath.Join(cur.Dir, "pkging", "pkgtest", "testdata", "ref")
err = filepath.Walk(root, func(path string, info os.FileInfo, err error) error { err = filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if err != nil { if err != nil {
return err return err
} }
exp = append(exp, info)
f, err := os.Open(path) f, err := os.Open(path)
if err != nil { if err != nil {
@ -35,16 +32,11 @@ func Test_Pkger_Add(t *testing.T) {
} }
defer f.Close() defer f.Close()
exp = append(exp, info)
return pkg.Add(f) return pkg.Add(f)
}) })
r.NoError(err) r.NoError(err)
sort.Slice(exp, func(i, j int) bool {
return exp[i].Name() < exp[j].Name()
})
var act []os.FileInfo var act []os.FileInfo
err = pkg.Walk("/", func(path string, info os.FileInfo, err error) error { err = pkg.Walk("/", func(path string, info os.FileInfo, err error) error {
if err != nil { if err != nil {
@ -55,10 +47,6 @@ func Test_Pkger_Add(t *testing.T) {
}) })
r.NoError(err) r.NoError(err)
sort.Slice(act, func(i, j int) bool {
return act[i].Name() < act[j].Name()
})
r.Len(act, len(exp)) r.Len(act, len(exp))
for i, e := range exp { for i, e := range exp {

22
pkging/mem/create_test.go Normal file
View File

@ -0,0 +1,22 @@
package mem
import (
"os"
"testing"
"github.com/markbates/pkger/pkging/pkgtest"
"github.com/stretchr/testify/require"
)
func Test_Pkger_Create(t *testing.T) {
r := require.New(t)
ref, err := pkgtest.NewRef()
r.NoError(err)
defer os.RemoveAll(ref.Dir)
pkg, err := New(ref.Info)
r.NoError(err)
pkgtest.CreateTest(t, ref, pkg)
}

View File

@ -0,0 +1,22 @@
package mem
import (
"os"
"testing"
"github.com/markbates/pkger/pkging/pkgtest"
"github.com/stretchr/testify/require"
)
func Test_Pkger_Current(t *testing.T) {
r := require.New(t)
ref, err := pkgtest.NewRef()
r.NoError(err)
defer os.RemoveAll(ref.Dir)
pkg, err := New(ref.Info)
r.NoError(err)
pkgtest.CurrentTest(t, ref, pkg)
}

View File

@ -104,11 +104,6 @@ func (f File) Name() string {
return f.path.String() return f.path.String()
} }
// Abs returns an absolute representation of the file. If the path is not absolute it will be joined with the current working directory to turn it into an absolute path. The absolute path name for a given file is not guaranteed to be unique. Abs calls Clean on the result.
func (f File) Abs() (string, error) {
return f.pkging.AbsPath(f.Path())
}
// Path returns the here.Path of the file // Path returns the here.Path of the file
func (f File) Path() here.Path { func (f File) Path() here.Path {
return f.path return f.path

22
pkging/mem/http_test.go Normal file
View File

@ -0,0 +1,22 @@
package mem
import (
"os"
"testing"
"github.com/markbates/pkger/pkging/pkgtest"
"github.com/stretchr/testify/require"
)
func Test_Pkger_HTTP(t *testing.T) {
r := require.New(t)
ref, err := pkgtest.NewRef()
r.NoError(err)
defer os.RemoveAll(ref.Dir)
pkg, err := New(ref.Info)
r.NoError(err)
pkgtest.HTTPTest(t, ref, pkg)
}

22
pkging/mem/info_test.go Normal file
View File

@ -0,0 +1,22 @@
package mem
import (
"os"
"testing"
"github.com/markbates/pkger/pkging/pkgtest"
"github.com/stretchr/testify/require"
)
func Test_Pkger_Info(t *testing.T) {
r := require.New(t)
ref, err := pkgtest.NewRef()
r.NoError(err)
defer os.RemoveAll(ref.Dir)
pkg, err := New(ref.Info)
r.NoError(err)
pkgtest.InfoTest(t, ref, pkg)
}

View File

@ -32,20 +32,6 @@ type Pkger struct {
files *maps.Files files *maps.Files
} }
// Abs returns an absolute representation of path. If the path is not absolute it will be joined with the current working directory to turn it into an absolute path. The absolute path name for a given file is not guaranteed to be unique. Abs calls Clean on the result.
func (f *Pkger) Abs(p string) (string, error) {
pt, err := f.Parse(p)
if err != nil {
return "", err
}
return f.AbsPath(pt)
}
// AbsPath returns an absolute representation of here.Path. If the path is not absolute it will be joined with the current working directory to turn it into an absolute path. The absolute path name for a given file is not guaranteed to be unique. AbsPath calls Clean on the result.
func (f *Pkger) AbsPath(pt here.Path) (string, error) {
return pt.String(), nil
}
// Current returns the here.Info representing the current Pkger implementation. // Current returns the here.Info representing the current Pkger implementation.
func (f *Pkger) Current() (here.Info, error) { func (f *Pkger) Current() (here.Info, error) {
return f.Here, nil return f.Here, nil

View File

@ -9,22 +9,7 @@ import (
) )
func Test_Pkger(t *testing.T) { func Test_Pkger(t *testing.T) {
suite, err := pkgtest.NewSuite("memos", func() (pkging.Pkger, error) { pkgtest.All(t, func(ref *pkgtest.Ref) (pkging.Pkger, error) {
app, err := pkgtest.App() return mem.New(ref.Info)
if err != nil {
return nil, err
}
pkg, err := mem.New(app.Info)
if err != nil {
return nil, err
}
return pkg, nil
}) })
if err != nil {
t.Fatal(err)
}
suite.Test(t)
} }

View File

@ -0,0 +1,22 @@
package mem
import (
"os"
"testing"
"github.com/markbates/pkger/pkging/pkgtest"
"github.com/stretchr/testify/require"
)
func Test_Pkger_MkdirAll(t *testing.T) {
r := require.New(t)
ref, err := pkgtest.NewRef()
r.NoError(err)
defer os.RemoveAll(ref.Dir)
pkg, err := New(ref.Info)
r.NoError(err)
pkgtest.MkdirAllTest(t, ref, pkg)
}

22
pkging/mem/open_test.go Normal file
View File

@ -0,0 +1,22 @@
package mem
import (
"os"
"testing"
"github.com/markbates/pkger/pkging/pkgtest"
"github.com/stretchr/testify/require"
)
func Test_Pkger_Open(t *testing.T) {
r := require.New(t)
ref, err := pkgtest.NewRef()
r.NoError(err)
defer os.RemoveAll(ref.Dir)
pkg, err := New(ref.Info)
r.NoError(err)
pkgtest.OpenTest(t, ref, pkg)
}

22
pkging/mem/remove_test.go Normal file
View File

@ -0,0 +1,22 @@
package mem
import (
"os"
"testing"
"github.com/markbates/pkger/pkging/pkgtest"
"github.com/stretchr/testify/require"
)
func Test_Pkger_Remove(t *testing.T) {
r := require.New(t)
ref, err := pkgtest.NewRef()
r.NoError(err)
defer os.RemoveAll(ref.Dir)
pkg, err := New(ref.Info)
r.NoError(err)
pkgtest.RemoveTest(t, ref, pkg)
}

View File

@ -0,0 +1,22 @@
package mem
import (
"os"
"testing"
"github.com/markbates/pkger/pkging/pkgtest"
"github.com/stretchr/testify/require"
)
func Test_Pkger_RemoveAll(t *testing.T) {
r := require.New(t)
ref, err := pkgtest.NewRef()
r.NoError(err)
defer os.RemoveAll(ref.Dir)
pkg, err := New(ref.Info)
r.NoError(err)
pkgtest.RemoveAllTest(t, ref, pkg)
}

22
pkging/mem/stat_test.go Normal file
View File

@ -0,0 +1,22 @@
package mem
import (
"os"
"testing"
"github.com/markbates/pkger/pkging/pkgtest"
"github.com/stretchr/testify/require"
)
func Test_Pkger_Stat(t *testing.T) {
r := require.New(t)
ref, err := pkgtest.NewRef()
r.NoError(err)
defer os.RemoveAll(ref.Dir)
pkg, err := New(ref.Info)
r.NoError(err)
pkgtest.StatTest(t, ref, pkg)
}

22
pkging/mem/walk_test.go Normal file
View File

@ -0,0 +1,22 @@
package mem
import (
"os"
"testing"
"github.com/markbates/pkger/pkging/pkgtest"
"github.com/stretchr/testify/require"
)
func Test_Pkger_Walk(t *testing.T) {
r := require.New(t)
ref, err := pkgtest.NewRef()
r.NoError(err)
defer os.RemoveAll(ref.Dir)
pkg, err := New(ref.Info)
r.NoError(err)
pkgtest.WalkTest(t, ref, pkg)
}

27
pkging/mod_time_test.go Normal file
View File

@ -0,0 +1,27 @@
package pkging
import (
"encoding/json"
"testing"
"time"
"github.com/stretchr/testify/require"
)
func Test_ModTime(t *testing.T) {
r := require.New(t)
now := time.Now()
mt := ModTime(now)
b, err := mt.MarshalJSON()
r.NoError(err)
var mt2 ModTime
r.NoError(json.Unmarshal(b, &mt2))
at := time.Time(mt).Format(time.RFC3339)
bt := time.Time(mt2).Format(time.RFC3339)
r.Equal(at, bt)
}

View File

@ -11,12 +11,6 @@ type Pkger interface {
// Parse the string in here.Path format. // Parse the string in here.Path format.
Parse(p string) (here.Path, error) Parse(p string) (here.Path, error)
// Abs returns an absolute representation of path. If the path is not absolute it will be joined with the current working directory to turn it into an absolute path. The absolute path name for a given file is not guaranteed to be unique. Abs calls Clean on the result.
Abs(p string) (string, error)
// AbsPath returns an absolute representation of here.Path. If the path is not absolute it will be joined with the current working directory to turn it into an absolute path. The absolute path name for a given file is not guaranteed to be unique. AbsPath calls Clean on the result.
AbsPath(here.Path) (string, error)
// Current returns the here.Info representing the current Pkger implementation. // Current returns the here.Info representing the current Pkger implementation.
Current() (here.Info, error) Current() (here.Info, error)

View File

@ -1,129 +0,0 @@
package pkgtest
import (
"path/filepath"
"github.com/markbates/pkger/here"
)
type AppDetails struct {
here.Info
Paths struct {
Root []string
Parser []string
Public []string
}
}
// App returns here.info that represents the
// ./internal/testdata/app. This should be used
// by tests.
func App() (AppDetails, error) {
var app AppDetails
her, err := here.Package("github.com/markbates/pkger")
if err != nil {
return app, err
}
info := here.Info{
ImportPath: "app",
}
x := make([]string, len(rootPaths))
copy(x, rootPaths)
app.Paths.Root = x
x = make([]string, len(parserPaths))
copy(x, parserPaths)
app.Paths.Parser = x
x = make([]string, len(publicPaths))
copy(x, publicPaths)
app.Paths.Public = x
ch := filepath.Join(
her.Dir,
"pkging",
"pkgtest",
"internal",
"testdata",
"app")
info.Dir = ch
info, err = here.Cache(info.ImportPath, func(s string) (here.Info, error) {
return info, nil
})
if err != nil {
return app, err
}
app.Info = info
return app, nil
}
var rootPaths = []string{
"app:/",
"app:/go.mod",
"app:/go.sum",
"app:/main.go",
"app:/public",
"app:/public/images",
"app:/public/images/img1.png",
"app:/public/images/img2.png",
"app:/public/index.html",
"app:/templates",
"app:/templates/a.txt",
"app:/templates/b",
"app:/templates/b/b.txt",
}
var publicPaths = []string{
"app:/public",
"app:/public/images",
"app:/public/images/img1.png",
"app:/public/images/img2.png",
"app:/public/index.html",
}
var parserPaths = []string{
"app:/public",
"app:/public/images",
"app:/public/images/img1.png",
"app:/public/images/img2.png",
"app:/public/index.html",
"github.com/gobuffalo/buffalo:/render",
"github.com/gobuffalo/buffalo:/render/auto.go",
"github.com/gobuffalo/buffalo:/render/auto_test.go",
"github.com/gobuffalo/buffalo:/render/download.go",
"github.com/gobuffalo/buffalo:/render/download_test.go",
"github.com/gobuffalo/buffalo:/render/func.go",
"github.com/gobuffalo/buffalo:/render/func_test.go",
"github.com/gobuffalo/buffalo:/render/helpers.go",
"github.com/gobuffalo/buffalo:/render/html.go",
"github.com/gobuffalo/buffalo:/render/html_test.go",
"github.com/gobuffalo/buffalo:/render/js.go",
"github.com/gobuffalo/buffalo:/render/js_test.go",
"github.com/gobuffalo/buffalo:/render/json.go",
"github.com/gobuffalo/buffalo:/render/json_test.go",
"github.com/gobuffalo/buffalo:/render/markdown_test.go",
"github.com/gobuffalo/buffalo:/render/options.go",
"github.com/gobuffalo/buffalo:/render/partials_test.go",
"github.com/gobuffalo/buffalo:/render/plain.go",
"github.com/gobuffalo/buffalo:/render/plain_test.go",
"github.com/gobuffalo/buffalo:/render/render.go",
"github.com/gobuffalo/buffalo:/render/render_test.go",
"github.com/gobuffalo/buffalo:/render/renderer.go",
"github.com/gobuffalo/buffalo:/render/sse.go",
"github.com/gobuffalo/buffalo:/render/string.go",
"github.com/gobuffalo/buffalo:/render/string_map.go",
"github.com/gobuffalo/buffalo:/render/string_map_test.go",
"github.com/gobuffalo/buffalo:/render/string_test.go",
"github.com/gobuffalo/buffalo:/render/template.go",
"github.com/gobuffalo/buffalo:/render/template_engine.go",
"github.com/gobuffalo/buffalo:/render/template_helpers.go",
"github.com/gobuffalo/buffalo:/render/template_helpers_test.go",
"github.com/gobuffalo/buffalo:/render/template_test.go",
"github.com/gobuffalo/buffalo:/render/xml.go",
"github.com/gobuffalo/buffalo:/render/xml_test.go",
}

42
pkging/pkgtest/create.go Normal file
View File

@ -0,0 +1,42 @@
package pkgtest
import (
"io/ioutil"
"strings"
"testing"
"github.com/markbates/pkger/pkging"
"github.com/stretchr/testify/require"
)
func CreateTest(t *testing.T, ref *Ref, pkg pkging.Pkger) {
r := require.New(t)
const name = "/create.test"
_, err := pkg.Stat(name)
r.Error(err)
data := []byte(strings.ToUpper(name))
f, err := pkg.Create(name)
r.NoError(err)
_, err = f.Write(data)
r.NoError(err)
r.NoError(f.Close())
f, err = pkg.Open(name)
r.NoError(err)
info, err := f.Stat()
r.NoError(err)
b, err := ioutil.ReadAll(f)
r.NoError(err)
r.NoError(f.Close())
r.Equal(data, b)
r.Equal("create.test", info.Name())
}

16
pkging/pkgtest/current.go Normal file
View File

@ -0,0 +1,16 @@
package pkgtest
import (
"testing"
"github.com/markbates/pkger/pkging"
)
func CurrentTest(t *testing.T, ref *Ref, pkg pkging.Pkger) {
cur, err := pkg.Current()
if err != nil {
t.Fatal(err)
}
cmpHereInfo(t, ref.Info, cur)
}

View File

@ -1,64 +0,0 @@
package pkgtest
import (
"sort"
"testing"
"github.com/stretchr/testify/require"
)
func (s Suite) Test_File_Readdir(t *testing.T) {
r := require.New(t)
pkg, err := s.Make()
r.NoError(err)
cur, err := pkg.Current()
r.NoError(err)
ip := cur.ImportPath
table := []struct {
in string
}{
{in: ":/public"},
{in: ip + ":/public"},
}
r.NoError(s.LoadFolder(pkg))
for _, tt := range table {
s.Run(t, tt.in, func(st *testing.T) {
r := require.New(st)
dir, err := pkg.Open(tt.in)
r.NoError(err)
defer dir.Close()
infos, err := dir.Readdir(-1)
r.NoError(err)
r.Len(infos, 2)
sort.Slice(infos, func(i, j int) bool {
return infos[i].Name() < infos[j].Name()
})
r.Equal("images", infos[0].Name())
r.Equal("index.html", infos[1].Name())
dir, err = pkg.Open(tt.in + "/images")
r.NoError(err)
infos, err = dir.Readdir(-1)
r.NoError(err)
r.Len(infos, 2)
sort.Slice(infos, func(i, j int) bool {
return infos[i].Name() < infos[j].Name()
})
r.Equal("img1.png", infos[0].Name())
r.Equal("img2.png", infos[1].Name())
})
}
}

View File

@ -1,179 +1,66 @@
package pkgtest package pkgtest
import ( import (
"io"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"os" "os"
"path/filepath" "path/filepath"
"strings"
"testing" "testing"
"github.com/markbates/pkger/pkging" "github.com/markbates/pkger/pkging"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func (s Suite) WriteFolder(root string) error { func HTTPTest(t *testing.T, ref *Ref, pkg pkging.Pkger) {
app, err := App()
if err != nil {
return err
}
return filepath.Walk(app.Dir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
return nil
}
of, err := os.Open(path)
if err != nil {
return err
}
defer of.Close()
path = strings.TrimPrefix(path, app.Dir)
path = filepath.Join(root, path)
if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
return err
}
f, err := os.Create(path)
if err != nil {
return err
}
defer f.Close()
if _, err := io.Copy(f, of); err != nil {
return err
}
return nil
})
}
func (s Suite) LoadFolder(pkg pkging.Pkger) error {
app, err := App()
if err != nil {
return err
}
return filepath.Walk(app.Dir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
of, err := os.Open(path)
if err != nil {
return err
}
defer of.Close()
if a, ok := pkg.(pkging.Adder); ok {
return a.Add(of)
}
path = strings.TrimPrefix(path, app.Dir)
pt, err := pkg.Parse(path)
if err != nil {
return err
}
if err := pkg.MkdirAll(filepath.Dir(pt.Name), 0755); err != nil {
return err
}
if info.IsDir() {
return nil
}
f, err := pkg.Create(pt.String())
if err != nil {
return err
}
defer f.Close()
if _, err := io.Copy(f, of); err != nil {
return err
}
return nil
})
}
func (s Suite) Test_HTTP(t *testing.T) {
r := require.New(t) r := require.New(t)
pkg, err := s.Make() _, err := LoadFiles("/public", ref, pkg)
r.NoError(err) r.NoError(err)
cur, err := pkg.Current() defer os.RemoveAll(ref.Dir)
r.NoError(err)
ip := cur.ImportPath
table := []struct { fp := filepath.Join(ref.Dir, "public")
in string gots := httptest.NewServer(http.FileServer(http.Dir(fp)))
}{ defer gots.Close()
{in: "/public"},
{in: ":" + "/public"}, dir, err := pkg.Open("/public")
{in: ip + ":" + "/public"}, r.NoError(err)
pkgts := httptest.NewServer(http.FileServer(dir))
defer pkgts.Close()
paths := []string{
"/",
"/index.html",
"/images",
"/images/img1.png",
} }
for _, tt := range table { for _, path := range paths {
s.Run(t, tt.in, func(st *testing.T) { t.Run(path, func(st *testing.T) {
r := require.New(st) r := require.New(st)
pkg, err := s.Make() gores, err := http.Get(gots.URL + path)
r.NoError(err) r.NoError(err)
r.NoError(s.LoadFolder(pkg)) pkgres, err := http.Get(pkgts.URL + path)
tdir, err := ioutil.TempDir("", "")
r.NoError(err) r.NoError(err)
defer os.RemoveAll(tdir)
r.NoError(s.WriteFolder(tdir))
tpub := filepath.Join(tdir, "public") r.Equal(gores.StatusCode, pkgres.StatusCode)
gots := httptest.NewServer(http.FileServer(http.Dir(tpub)))
defer gots.Close()
dir, err := pkg.Open(tt.in) gobody, err := ioutil.ReadAll(gores.Body)
r.NoError(err) r.NoError(err)
defer dir.Close()
pkgts := httptest.NewServer(http.FileServer(dir)) pkgbody, err := ioutil.ReadAll(pkgres.Body)
defer pkgts.Close() r.NoError(err)
paths := []string{ exp := string(gobody)
"/", act := string(pkgbody)
"/index.html", r.Equal(exp, act)
"/images", // exp := strings.ReplaceAll(string(gobody), tdir, "")
"/images/img1.png", // exp = clean(exp)
} // r.Equal(exp, clean(string(pkgbody)))
for _, path := range paths {
t.Run(path, func(st *testing.T) {
r := require.New(st)
gores, err := http.Get(gots.URL + path)
r.NoError(err)
pkgres, err := http.Get(pkgts.URL + path)
r.NoError(err)
r.Equal(gores.StatusCode, pkgres.StatusCode)
gobody, err := ioutil.ReadAll(gores.Body)
r.NoError(err)
pkgbody, err := ioutil.ReadAll(pkgres.Body)
r.NoError(err)
exp := strings.ReplaceAll(string(gobody), tdir, "")
exp = clean(exp)
r.Equal(exp, clean(string(pkgbody)))
})
}
}) })
} }
} }

17
pkging/pkgtest/info.go Normal file
View File

@ -0,0 +1,17 @@
package pkgtest
import (
"testing"
"github.com/markbates/pkger/pkging"
"github.com/stretchr/testify/require"
)
func InfoTest(t *testing.T, ref *Ref, pkg pkging.Pkger) {
r := require.New(t)
info, err := pkg.Info("app")
r.NoError(err)
cmpHereInfo(t, ref.Info, info)
}

View File

@ -1,7 +0,0 @@
module app
go 1.13
require github.com/markbates/pkger v0.0.0
replace github.com/markbates/pkger => ../../../../../

View File

@ -1,70 +0,0 @@
package main
import (
"fmt"
"log"
"net/http"
"os"
"github.com/markbates/pkger"
)
const host = ":3000"
func main() {
// get the currently running application's here.Info.
// this contains really, really, really useful information
// about your application, check it out. :)
// we don't need it for this example, but i thought it could
// be good to show.
current, err := pkger.Current()
if err != nil {
log.Fatal(err)
}
fmt.Println(current)
fmt.Printf("Walking files for %s\n", current.ImportPath)
// walk the files in the github.com/gobuffalo/buffalo module.
// "/render" is relative to where that module's `go.mod` is.
err = pkger.Walk("github.com/gobuffalo/buffalo:/render", func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
fmt.Println(">> ", path)
return nil
})
if err != nil {
log.Fatal(err)
}
// find the public directory with using the full pkger path <pkg:/path> to it:
// pkg - is the module/package you want to get a file from
// if pkg is empty then it is assumed to be current.ImportPath
// : - seperator between the module/package name, pkg, and the "file path"
// path - this is the ABSOLUTE path to the file/directory you want, as relative
// to the root of the module/package's go.mod file.
dir, err := pkger.Open("app:/public")
if err != nil {
log.Fatal(err)
}
// don't forget to close the file later
defer dir.Close()
fmt.Printf("\nServing %q on %s\n", dir.Path(), host)
// serve the public directory on the host (":3000")
// just like using the os package you still need to use
// http.FileServer to serve a directory.
// you DON'T, however, need to use http.Dir all pkger files
// already implement that interface.
log.Fatal(http.ListenAndServe(host, logger(http.FileServer(dir))))
}
// logger will print out the requests as they come in, otherwise its a blank
// screen, and that's no fun.
func logger(h http.Handler) http.HandlerFunc {
return func(res http.ResponseWriter, req *http.Request) {
log.Println(req.Method, req.URL.String())
h.ServeHTTP(res, req)
}
}

View File

@ -1 +0,0 @@
AAAA

View File

@ -1 +0,0 @@
BBBBB

View File

@ -1,7 +0,0 @@
module dynamic
go 1.13
require github.com/markbates/pkger v0.0.0
replace github.com/markbates/pkger => ../../../../../

View File

@ -1,990 +0,0 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.36.0/go.mod h1:RUoy9p/M4ge0HzT8L+SDZ8jg+Q6fth0CiBuhFJpSV40=
dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU=
dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU=
dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4=
dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU=
git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/ajg/form v0.0.0-20160822230020-523a5da1a92f/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
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/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
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/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk=
github.com/cockroachdb/cockroach-go v0.0.0-20190916165215-ad57a61cc915/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk=
github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0=
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-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/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/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/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/dustin/go-humanize v0.0.0-20180713052910-9f541cc9db5d/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/structs v1.0.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
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/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
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-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/gobuffalo/attrs v0.0.0-20190219185331-f338c9388485/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
github.com/gobuffalo/attrs v0.1.0/go.mod h1:fmNpaWyHM0tRm8gCZWKx8yY9fvaNLo2PyzBNSrBZ5Hw=
github.com/gobuffalo/buffalo v0.12.8-0.20181004233540-fac9bb505aa8/go.mod h1:sLyT7/dceRXJUxSsE813JTQtA3Eb1vjxWfo/N//vXIY=
github.com/gobuffalo/buffalo v0.13.0/go.mod h1:Mjn1Ba9wpIbpbrD+lIDMy99pQ0H0LiddMIIDGse7qT4=
github.com/gobuffalo/buffalo v0.13.1/go.mod h1:K9c22KLfDz7obgxvHv1amvJtCQEZNiox9+q6FDJ1Zcs=
github.com/gobuffalo/buffalo v0.13.2/go.mod h1:vA8I4Dwcfkx7RAzIRHVDZxfS3QJR7muiOjX4r8P2/GE=
github.com/gobuffalo/buffalo v0.13.4/go.mod h1:y2jbKkO0k49OrNIOAkbWQiPBqxAFpHn5OKnkc7BDh+I=
github.com/gobuffalo/buffalo v0.13.5/go.mod h1:hPcP12TkFSZmT3gUVHZ24KRhTX3deSgu6QSgn0nbWf4=
github.com/gobuffalo/buffalo v0.13.6/go.mod h1:/Pm0MPLusPhWDayjRD+/vKYnelScIiv0sX9YYek0wpg=
github.com/gobuffalo/buffalo v0.13.7/go.mod h1:3gQwZhI8DSbqmDqlFh7kfwuv/wd40rqdVxXtFWlCQHw=
github.com/gobuffalo/buffalo v0.13.9/go.mod h1:vIItiQkTHq46D1p+bw8mFc5w3BwrtJhMvYjSIYK3yjE=
github.com/gobuffalo/buffalo v0.13.12/go.mod h1:Y9e0p0cdo/eI+lHm7EFzlkc9YzjwGo5QeDj+FbsyqVA=
github.com/gobuffalo/buffalo v0.13.13/go.mod h1:WAL36xBN8OkU71lNjuYv6llmgl0o8twjlY+j7oGUmYw=
github.com/gobuffalo/buffalo v0.14.0/go.mod h1:A9JI3juErlXNrPBeJ/0Pdky9Wz+GffEg7ZN0d1B5h48=
github.com/gobuffalo/buffalo v0.14.2/go.mod h1:VNMTzddg7bMnkVxCUXzqTS4PvUo6cDOs/imtG8Cnt/k=
github.com/gobuffalo/buffalo v0.14.3/go.mod h1:3O9vB/a4UNb16TevehTvDCaPnb98NWvYz0msJQ6ZlVA=
github.com/gobuffalo/buffalo v0.14.5/go.mod h1:RWK6evR4hY4nRVfw9xie9V/LYK3j0U9wU2oKgQUFZ88=
github.com/gobuffalo/buffalo v0.14.6/go.mod h1:71Un+T2JGgwXLjBqYFdGSooz/OUjw15BJM0nbbcAM0o=
github.com/gobuffalo/buffalo v0.14.9/go.mod h1:M8XWw+Rcotn7C4NYpCEGBg3yX+O1TeD1pBfmiILhgHw=
github.com/gobuffalo/buffalo v0.14.10/go.mod h1:49A7/JYlsCyTkVHtvKl91w6rG35ZiywwjWMVC1zKWsQ=
github.com/gobuffalo/buffalo v0.14.11/go.mod h1:RO5OwOJQjv6/TukzszV5ELA54lg84D1kZwla6oAkTlo=
github.com/gobuffalo/buffalo-docker v1.0.5/go.mod h1:NZ3+21WIdqOUlOlM2onCt7cwojYp4Qwlsngoolw8zlE=
github.com/gobuffalo/buffalo-docker v1.0.6/go.mod h1:UlqKHJD8CQvyIb+pFq+m/JQW2w2mXuhxsaKaTj1X1XI=
github.com/gobuffalo/buffalo-docker v1.0.7/go.mod h1:BdB8AhcmjwR6Lo3rDPMzyh/+eNjYnZ1TAO0eZeLkhig=
github.com/gobuffalo/buffalo-plugins v1.0.2/go.mod h1:pOp/uF7X3IShFHyobahTkTLZaeUXwb0GrUTb9ngJWTs=
github.com/gobuffalo/buffalo-plugins v1.0.4/go.mod h1:pWS1vjtQ6uD17MVFWf7i3zfThrEKWlI5+PYLw/NaDB4=
github.com/gobuffalo/buffalo-plugins v1.4.3/go.mod h1:uCzTY0woez4nDMdQjkcOYKanngeUVRO2HZi7ezmAjWY=
github.com/gobuffalo/buffalo-plugins v1.5.1/go.mod h1:jbmwSZK5+PiAP9cC09VQOrGMZFCa/P0UMlIS3O12r5w=
github.com/gobuffalo/buffalo-plugins v1.6.1/go.mod h1:/XZt7UuuDnx5P4v3cStK0+XoYiNOA2f0wDIsm1oLJQA=
github.com/gobuffalo/buffalo-plugins v1.6.4/go.mod h1:/+N1aophkA2jZ1ifB2O3Y9yGwu6gKOVMtUmJnbg+OZI=
github.com/gobuffalo/buffalo-plugins v1.6.5/go.mod h1:0HVkbgrVs/MnPZ/FOseDMVanCTm2RNcdM0PuXcL1NNI=
github.com/gobuffalo/buffalo-plugins v1.6.6/go.mod h1:hSWAEkJyL9RENJlmanMivgnNkrQ9RC4xJARz8dQryi0=
github.com/gobuffalo/buffalo-plugins v1.6.7/go.mod h1:ZGZRkzz2PiKWHs0z7QsPBOTo2EpcGRArMEym6ghKYgk=
github.com/gobuffalo/buffalo-plugins v1.6.9/go.mod h1:yYlYTrPdMCz+6/+UaXg5Jm4gN3xhsvsQ2ygVatZV5vw=
github.com/gobuffalo/buffalo-plugins v1.6.10/go.mod h1:HxzPZjAEzh9H0gnHelObxxrut9O+1dxydf7U93SYsc8=
github.com/gobuffalo/buffalo-plugins v1.6.11/go.mod h1:eAA6xJIL8OuynJZ8amXjRmHND6YiusVAaJdHDN1Lu8Q=
github.com/gobuffalo/buffalo-plugins v1.7.2/go.mod h1:vEbx30cLFeeZ48gBA/rkhbqC2M/2JpsKs5CoESWhkPw=
github.com/gobuffalo/buffalo-plugins v1.8.1/go.mod h1:vu71J3fD4b7KKywJQ1tyaJGtahG837Cj6kgbxX0e4UI=
github.com/gobuffalo/buffalo-plugins v1.8.2/go.mod h1:9te6/VjEQ7pKp7lXlDIMqzxgGpjlKoAcAANdCgoR960=
github.com/gobuffalo/buffalo-plugins v1.8.3/go.mod h1:IAWq6vjZJVXebIq2qGTLOdlXzmpyTZ5iJG5b59fza5U=
github.com/gobuffalo/buffalo-plugins v1.9.3/go.mod h1:BNRunDThMZKjqx6R+n14Rk3sRSOWgbMuzCKXLqbd7m0=
github.com/gobuffalo/buffalo-plugins v1.9.4/go.mod h1:grCV6DGsQlVzQwk6XdgcL3ZPgLm9BVxlBmXPMF8oBHI=
github.com/gobuffalo/buffalo-plugins v1.10.0/go.mod h1:4osg8d9s60txLuGwXnqH+RCjPHj9K466cDFRl3PErHI=
github.com/gobuffalo/buffalo-plugins v1.11.0/go.mod h1:rtIvAYRjYibgmWhnjKmo7OadtnxuMG5ZQLr25ozAzjg=
github.com/gobuffalo/buffalo-plugins v1.12.0/go.mod h1:kw4Mj2vQXqe4X5TI36PEQgswbL30heGQwJEeDKd1v+4=
github.com/gobuffalo/buffalo-plugins v1.13.0/go.mod h1:Y9nH2VwHVkeKhmdM380ulNXmhhD5On81nRVeD+WlDTQ=
github.com/gobuffalo/buffalo-plugins v1.13.1/go.mod h1:VcvhrgWcZLhOp8JPLckHBDtv05KepY/MxHsT2+06xX4=
github.com/gobuffalo/buffalo-plugins v1.14.0/go.mod h1:r2lykSXBT79c3T5JK1ouivVDrHvvCZUdZBmn+lPMHU8=
github.com/gobuffalo/buffalo-plugins v1.14.1/go.mod h1:9BRBvXuKxR0m4YttVFRtuUcAP9Rs97mGq6OleyDbIuo=
github.com/gobuffalo/buffalo-pop v1.0.5/go.mod h1:Fw/LfFDnSmB/vvQXPvcXEjzP98Tc+AudyNWUBWKCwQ8=
github.com/gobuffalo/buffalo-pop v1.1.2/go.mod h1:czNLXcYbg5/fjr+uht0NyjZaQ0V2W23H1jzyORgCzQ4=
github.com/gobuffalo/buffalo-pop v1.1.5/go.mod h1:H01JIg42XwOHS4gRMhSeDZqBovNVlfBUsVXckU617s4=
github.com/gobuffalo/buffalo-pop v1.1.8/go.mod h1:1uaxOFzzVud/zR5f1OEBr21tMVLQS3OZpQ1A5cr0svE=
github.com/gobuffalo/buffalo-pop v1.1.13/go.mod h1:47GQoBjCMcl5Pw40iCWHQYJvd0HsT9kdaOPWgnzHzk4=
github.com/gobuffalo/buffalo-pop v1.1.14/go.mod h1:sAMh6+s7wytCn5cHqZIuItJbAqzvs6M7FemLexl+pwc=
github.com/gobuffalo/buffalo-pop v1.1.15/go.mod h1:vnvvxhbEFAaEbac9E2ZPjsBeL7WHkma2UyKNVA4y9Wo=
github.com/gobuffalo/buffalo-pop v1.2.1/go.mod h1:SHqojN0bVzaAzCbQDdWtsib202FDIxqwmCO8VDdweF4=
github.com/gobuffalo/buffalo-pop v1.3.0/go.mod h1:P0PhA225dRGyv0WkgYjYKqgoxPdDPDFZDvHj60AGF5w=
github.com/gobuffalo/buffalo-pop v1.6.0/go.mod h1:vrEVNOBKe042HjSNMj72J4FgER/VG6lt4xW6WMpTdlY=
github.com/gobuffalo/buffalo-pop v1.7.0/go.mod h1:UB5HHeFucJG7esTPUPjinBaJTEpVoREJHfSJJELnyeI=
github.com/gobuffalo/buffalo-pop v1.9.0/go.mod h1:MfrkBg0iN9+RdlxdHHAqqGFAC/iyCfTiKqH7Jvt+vhE=
github.com/gobuffalo/buffalo-pop v1.10.0/go.mod h1:C3/cFXB8Zd38XiGgHFdE7dw3Wu9MOKeD7bfELQicGPI=
github.com/gobuffalo/buffalo-pop v1.12.0/go.mod h1:pO2ONSJOCjyroGp4BwVHfMkfd7sLg1U9BvMJqRy6Otk=
github.com/gobuffalo/buffalo-pop v1.13.0/go.mod h1:h+zfyXCUFwihFqz6jmo9xsdsZ1Tm9n7knYpQjW0gv18=
github.com/gobuffalo/buffalo-pop v1.16.0/go.mod h1:XYA72cNFvL6m1o7PZ+Z7Yd/WDQTPcOiuDukiHvEo2KY=
github.com/gobuffalo/buffalo-pop v1.17.2/go.mod h1:nyOm0mtmp9/+m2NaXrp+9SqtuKZslA7Ys2DBaT/t2n4=
github.com/gobuffalo/buffalo-pop v1.22.0/go.mod h1:S8uJpbC9PUMFA6ZWbPnbk3c32n4vJ32p5NLsREcz+H8=
github.com/gobuffalo/clara v0.4.1/go.mod h1:3QgAPqYgPqAzhfGbNLlp4UztaZRi2SOg+ZrZwaq9L94=
github.com/gobuffalo/clara v0.6.0/go.mod h1:RKZxkcH80pLykRi2hLkoxGMxA8T06Dc9fN/pFvutMFY=
github.com/gobuffalo/clara v0.7.0/go.mod h1:pen7ZMmnuYUYVF/3BbnvidYVAbMEfkyO4O+Tc+FKICU=
github.com/gobuffalo/clara v0.9.1/go.mod h1:OQ3HmSqLQJHaMmKhuTkmBCvBLL4BhgjweNpywRGulWo=
github.com/gobuffalo/depgen v0.0.0-20190219190223-ba8c93fa0c2c/go.mod h1:CE/HUV4vDCXtJayRf6WoMWgezb1yH4QHg8GNK8FL0JI=
github.com/gobuffalo/depgen v0.0.0-20190315122043-8442b3fa16db/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY=
github.com/gobuffalo/depgen v0.0.0-20190315124901-e02f65b90669/go.mod h1:yTQe8xo5pGIDOApkeO95DjePS4ZOSSSx+ItkqJHxUG4=
github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY=
github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg=
github.com/gobuffalo/depgen v0.1.1/go.mod h1:65EOv3g7CMe4kc8J1Ds+l2bjcwrWKGXkE4/vpRRLPWY=
github.com/gobuffalo/depgen v0.2.0/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY=
github.com/gobuffalo/envy v1.6.4/go.mod h1:Abh+Jfw475/NWtYMEt+hnJWRiC8INKWibIMyNt1w2Mc=
github.com/gobuffalo/envy v1.6.5/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ=
github.com/gobuffalo/envy v1.6.6/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ=
github.com/gobuffalo/envy v1.6.7/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ=
github.com/gobuffalo/envy v1.6.8/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ=
github.com/gobuffalo/envy v1.6.9/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ=
github.com/gobuffalo/envy v1.6.10/go.mod h1:X0CFllQjTV5ogsnUrg+Oks2yTI+PU2dGYBJOEI2D1Uo=
github.com/gobuffalo/envy v1.6.11/go.mod h1:Fiq52W7nrHGDggFPhn2ZCcHw4u/rqXkqo+i7FB6EAcg=
github.com/gobuffalo/envy v1.6.12/go.mod h1:qJNrJhKkZpEW0glh5xP2syQHH5kgdmgsKss2Kk8PTP0=
github.com/gobuffalo/envy v1.6.13/go.mod h1:w9DJppgl51JwUFWWd/M/6/otrPtWV3WYMa+NNLunqKA=
github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
github.com/gobuffalo/envy v1.7.1/go.mod h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w=
github.com/gobuffalo/events v1.0.3/go.mod h1:Txo8WmqScapa7zimEQIwgiJBvMECMe9gJjsKNPN3uZw=
github.com/gobuffalo/events v1.0.7/go.mod h1:z8txf6H9jWhQ5Scr7YPLWg/cgXBRj8Q4uYI+rsVCCSQ=
github.com/gobuffalo/events v1.0.8/go.mod h1:A5KyqT1sA+3GJiBE4QKZibse9mtOcI9nw8gGrDdqYGs=
github.com/gobuffalo/events v1.1.1/go.mod h1:Ia9OgHMco9pEhJaPrPQJ4u4+IZlkxYVco2VbJ2XgnAE=
github.com/gobuffalo/events v1.1.3/go.mod h1:9yPGWYv11GENtzrIRApwQRMYSbUgCsZ1w6R503fCfrk=
github.com/gobuffalo/events v1.1.4/go.mod h1:09/YRRgZHEOts5Isov+g9X2xajxdvOAcUuAHIX/O//A=
github.com/gobuffalo/events v1.1.5/go.mod h1:3YUSzgHfYctSjEjLCWbkXP6djH2M+MLaVRzb4ymbAK0=
github.com/gobuffalo/events v1.1.6/go.mod h1:H/3ZB9BA+WorMb/0F79UvU6u0Cyo2hU97WA51bG2ONY=
github.com/gobuffalo/events v1.1.7/go.mod h1:6fGqxH2ing5XMb3EYRq9LEkVlyPGs4oO/eLzh+S8CxY=
github.com/gobuffalo/events v1.1.8/go.mod h1:UFy+W6X6VbCWS8k2iT81HYX65dMtiuVycMy04cplt/8=
github.com/gobuffalo/events v1.1.9/go.mod h1:/0nf8lMtP5TkgNbzYxR6Bl4GzBy5s5TebgNTdRfRbPM=
github.com/gobuffalo/events v1.2.0/go.mod h1:pxvpvsKXKZNPtHuIxUV3K+g+KP5o4forzaeFj++bh68=
github.com/gobuffalo/events v1.3.1/go.mod h1:9JOkQVoyRtailYVE/JJ2ZQ/6i4gTjM5t2HsZK4C1cSA=
github.com/gobuffalo/events v1.4.0/go.mod h1:gQbNh681BwO+urxPpHHBiVD8Y+2lg17Wj2xuCMMKr8E=
github.com/gobuffalo/fizz v1.0.12/go.mod h1:C0sltPxpYK8Ftvf64kbsQa2yiCZY4RZviurNxXdAKwc=
github.com/gobuffalo/fizz v1.0.15/go.mod h1:EI3mEpjImuji6Bwu++N2uXhljQwOhwtimZQJ89zwyF4=
github.com/gobuffalo/fizz v1.0.16/go.mod h1:EI3mEpjImuji6Bwu++N2uXhljQwOhwtimZQJ89zwyF4=
github.com/gobuffalo/fizz v1.1.2/go.mod h1:THqzNTlNxNaF5hq3ddp16SnEcl2m83bTeTzJEoD+kqc=
github.com/gobuffalo/fizz v1.1.3/go.mod h1:THqzNTlNxNaF5hq3ddp16SnEcl2m83bTeTzJEoD+kqc=
github.com/gobuffalo/fizz v1.3.0/go.mod h1:THqzNTlNxNaF5hq3ddp16SnEcl2m83bTeTzJEoD+kqc=
github.com/gobuffalo/fizz v1.5.0/go.mod h1:Uu3ch14M4S7LDU7LAP1GQ+KNCRmZYd05Gqasc96XLa0=
github.com/gobuffalo/fizz v1.6.0/go.mod h1:V4V6EA8eYu/L43y6gZj7mjmPkigl9m+Eu3Pe+SWQRRg=
github.com/gobuffalo/fizz v1.6.1/go.mod h1:V4V6EA8eYu/L43y6gZj7mjmPkigl9m+Eu3Pe+SWQRRg=
github.com/gobuffalo/fizz v1.8.0/go.mod h1:2LqJOOGUp1JpN9m54ac5jMQ1MpbNvSVbFi9BY+AEXOo=
github.com/gobuffalo/fizz v1.9.0/go.mod h1:2LqJOOGUp1JpN9m54ac5jMQ1MpbNvSVbFi9BY+AEXOo=
github.com/gobuffalo/fizz v1.9.2/go.mod h1:XJb7Do1keOPkaJnJ48OCjV+7ABQ7mbOqui2WfDobXTQ=
github.com/gobuffalo/fizz v1.9.5/go.mod h1:v9cFl56oXm+hNNayTsIQHnq209bTDUbIM8GYWCJw3TE=
github.com/gobuffalo/flect v0.0.0-20180907193754-dc14d8acaf9f/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA=
github.com/gobuffalo/flect v0.0.0-20181002182613-4571df4b1daf/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA=
github.com/gobuffalo/flect v0.0.0-20181007231023-ae7ed6bfe683/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA=
github.com/gobuffalo/flect v0.0.0-20181018182602-fd24a256709f/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA=
github.com/gobuffalo/flect v0.0.0-20181019110701-3d6f0b585514/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA=
github.com/gobuffalo/flect v0.0.0-20181024204909-8f6be1a8c6c2/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA=
github.com/gobuffalo/flect v0.0.0-20181104133451-1f6e9779237a/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA=
github.com/gobuffalo/flect v0.0.0-20181108195648-8fe1b44cfe32/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA=
github.com/gobuffalo/flect v0.0.0-20181109221320-179d36177b5b/go.mod h1:0HvNbHdfh+WOvDSIASqJOSxTOWSxCCUF++k/Y53v9rI=
github.com/gobuffalo/flect v0.0.0-20181114183036-47375f6d8328/go.mod h1:0HvNbHdfh+WOvDSIASqJOSxTOWSxCCUF++k/Y53v9rI=
github.com/gobuffalo/flect v0.0.0-20181210151238-24a2b68e0316/go.mod h1:en58vff74S9b99Eg42Dr+/9yPu437QjlNsO/hBYPuOk=
github.com/gobuffalo/flect v0.0.0-20190104192022-4af577e09bf2/go.mod h1:en58vff74S9b99Eg42Dr+/9yPu437QjlNsO/hBYPuOk=
github.com/gobuffalo/flect v0.0.0-20190117212819-a62e61d96794/go.mod h1:397QT6v05LkZkn07oJXXT6y9FCfwC8Pug0WA2/2mE9k=
github.com/gobuffalo/flect v0.0.0-20190205211104-b2cb381e56e0/go.mod h1:397QT6v05LkZkn07oJXXT6y9FCfwC8Pug0WA2/2mE9k=
github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs=
github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
github.com/gobuffalo/flect v0.1.5/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80=
github.com/gobuffalo/flect v0.1.6/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80=
github.com/gobuffalo/genny v0.0.0-20180924032338-7af3a40f2252/go.mod h1:tUTQOogrr7tAQnhajMSH6rv1BVev34H2sa1xNHMy94g=
github.com/gobuffalo/genny v0.0.0-20181003150629-3786a0744c5d/go.mod h1:WAd8HmjMVrnkAZbmfgH5dLBUchsZfqzp/WS5sQz+uTM=
github.com/gobuffalo/genny v0.0.0-20181005145118-318a41a134cc/go.mod h1:WAd8HmjMVrnkAZbmfgH5dLBUchsZfqzp/WS5sQz+uTM=
github.com/gobuffalo/genny v0.0.0-20181007153042-b8de7d566757/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA=
github.com/gobuffalo/genny v0.0.0-20181012161047-33e5f43d83a6/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA=
github.com/gobuffalo/genny v0.0.0-20181017160347-90a774534246/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA=
github.com/gobuffalo/genny v0.0.0-20181019144442-df0a36fdd146/go.mod h1:IyRrGrQb/sbHu/0z9i5mbpZroIsdxjCYfj+zFiFiWZQ=
github.com/gobuffalo/genny v0.0.0-20181024195656-51392254bf53/go.mod h1:o9GEH5gn5sCKLVB5rHFC4tq40rQ3VRUzmx6WwmaqISE=
github.com/gobuffalo/genny v0.0.0-20181025145300-af3f81d526b8/go.mod h1:uZ1fFYvdcP8mu0B/Ynarf6dsGvp7QFIpk/QACUuFUVI=
github.com/gobuffalo/genny v0.0.0-20181027191429-94d6cfb5c7fc/go.mod h1:x7SkrQQBx204Y+O9EwRXeszLJDTaWN0GnEasxgLrQTA=
github.com/gobuffalo/genny v0.0.0-20181027195209-3887b7171c4f/go.mod h1:JbKx8HSWICu5zyqWOa0dVV1pbbXOHusrSzQUprW6g+w=
github.com/gobuffalo/genny v0.0.0-20181030163439-ed103521b8ec/go.mod h1:3Xm9z7/2oRxlB7PSPLxvadZ60/0UIek1YWmcC7QSaVs=
github.com/gobuffalo/genny v0.0.0-20181106193839-7dcb0924caf1/go.mod h1:x61yHxvbDCgQ/7cOAbJCacZQuHgB0KMSzoYcw5debjU=
github.com/gobuffalo/genny v0.0.0-20181107223128-f18346459dbe/go.mod h1:utQD3aKKEsdb03oR+Vi/6ztQb1j7pO10N3OBoowRcSU=
github.com/gobuffalo/genny v0.0.0-20181109163038-9539921b620f/go.mod h1:118bnhJR2oviiji++mZj0IH/IaFBCzwkWHaI4OQq5hQ=
github.com/gobuffalo/genny v0.0.0-20181110202416-7b7d8756a9e2/go.mod h1:118bnhJR2oviiji++mZj0IH/IaFBCzwkWHaI4OQq5hQ=
github.com/gobuffalo/genny v0.0.0-20181111200257-599b33630ab4/go.mod h1:w+iD/cdtIpPDFax6LlUFuCdXFD0DLRUXsfp3IeT/Doc=
github.com/gobuffalo/genny v0.0.0-20181114215459-0a4decd77f5d/go.mod h1:kN2KZ8VgXF9VIIOj/GM0Eo7YK+un4Q3tTreKOf0q1ng=
github.com/gobuffalo/genny v0.0.0-20181119162812-e8ff4adce8bb/go.mod h1:BA9htSe4bZwBDJLe8CUkoqkypq3hn3+CkoHqVOW718E=
github.com/gobuffalo/genny v0.0.0-20181127225641-2d959acc795b/go.mod h1:l54xLXNkteX/PdZ+HlgPk1qtcrgeOr3XUBBPDbH+7CQ=
github.com/gobuffalo/genny v0.0.0-20181128191930-77e34f71ba2a/go.mod h1:FW/D9p7cEEOqxYA71/hnrkOWm62JZ5ZNxcNIVJEaWBU=
github.com/gobuffalo/genny v0.0.0-20181203165245-fda8bcce96b1/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM=
github.com/gobuffalo/genny v0.0.0-20181203201232-849d2c9534ea/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM=
github.com/gobuffalo/genny v0.0.0-20181206121324-d6fb8a0dbe36/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM=
github.com/gobuffalo/genny v0.0.0-20181207164119-84844398a37d/go.mod h1:y0ysCHGGQf2T3vOhCrGHheYN54Y/REj0ayd0Suf4C/8=
github.com/gobuffalo/genny v0.0.0-20181211165820-e26c8466f14d/go.mod h1:sHnK+ZSU4e2feXP3PA29ouij6PUEiN+RCwECjCTB3yM=
github.com/gobuffalo/genny v0.0.0-20190104222617-a71664fc38e7/go.mod h1:QPsQ1FnhEsiU8f+O0qKWXz2RE4TiDqLVChWkBuh1WaY=
github.com/gobuffalo/genny v0.0.0-20190112155932-f31a84fcacf5/go.mod h1:CIaHCrSIuJ4il6ka3Hub4DR4adDrGoXGEEt2FbBxoIo=
github.com/gobuffalo/genny v0.0.0-20190124191459-3310289fa4b4/go.mod h1:yIRqxhZV2sAzb+B3iPUMLauTRrYP8tJUlZ1zV9teKik=
github.com/gobuffalo/genny v0.0.0-20190131150032-1045e97d19fb/go.mod h1:yIRqxhZV2sAzb+B3iPUMLauTRrYP8tJUlZ1zV9teKik=
github.com/gobuffalo/genny v0.0.0-20190131190646-008a76242145/go.mod h1:NJvPZJxb9M4z790P6N2SMZKSUYpASpEvLuUWnHGKzb4=
github.com/gobuffalo/genny v0.0.0-20190219203444-c95082806342/go.mod h1:3BLT+Vs94EEz3fKR8WWOkYpL6c1tdJcZUNCe3LZAnvQ=
github.com/gobuffalo/genny v0.0.0-20190315121735-8b38fb089e88/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk=
github.com/gobuffalo/genny v0.0.0-20190315124720-e16e52a93c79/go.mod h1:nKeefjbhYowo36ys9nG9VUvD9FRIS0p3BC2JFfcOucM=
github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk=
github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28=
github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo=
github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk=
github.com/gobuffalo/genny v0.2.0/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk=
github.com/gobuffalo/genny v0.3.0/go.mod h1:ywJ2CoXrTZj7rbS8HTbzv7uybnLKlsNSBhEQ+yFI3E8=
github.com/gobuffalo/genny v0.4.0/go.mod h1:Kdo8wsw5zmooVvEfMkfv4JI9Ogz/PMvBNvl133soylI=
github.com/gobuffalo/genny v0.4.1/go.mod h1:dpded+KBgICFciAb+6R5Lo+1VxzofjqHgKqFYIL8M7U=
github.com/gobuffalo/gitgen v0.0.0-20190219185555-91c2c5f0aad5/go.mod h1:ZzGIrxBvCJEluaU4i3CN0GFlu1Qmb3yK8ziV02evJ1E=
github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw=
github.com/gobuffalo/github_flavored_markdown v1.0.4/go.mod h1:uRowCdK+q8d/RF0Kt3/DSalaIXbb0De/dmTqMQdkQ4I=
github.com/gobuffalo/github_flavored_markdown v1.0.5/go.mod h1:U0643QShPF+OF2tJvYNiYDLDGDuQmJZXsf/bHOJPsMY=
github.com/gobuffalo/github_flavored_markdown v1.0.7/go.mod h1:w93Pd9Lz6LvyQXEG6DktTPHkOtCbr+arAD5mkwMzXLI=
github.com/gobuffalo/github_flavored_markdown v1.1.0/go.mod h1:TSpTKWcRTI0+v7W3x8dkSKMLJSUpuVitlptCkpeY8ic=
github.com/gobuffalo/gogen v0.0.0-20190219194924-d32a17ad9761/go.mod h1:v47C8sid+ZM2qK+YpQ2MGJKssKAqyTsH1wl/pTCPdz8=
github.com/gobuffalo/gogen v0.0.0-20190224213239-1c6076128bbc/go.mod h1:tQqPADZKflmJCR4FHRHYNPP79cXPICyxUiUHyhuXtqg=
github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360=
github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg=
github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE=
github.com/gobuffalo/gogen v0.2.0/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360=
github.com/gobuffalo/helpers v0.0.0-20190422082217-384f90c6579f/go.mod h1:g0I3qKQEyJxwnHtEmLugD75eoOiWxEtibcV62tYah9w=
github.com/gobuffalo/helpers v0.0.0-20190506214229-8e6f634af7c3/go.mod h1:HlNpmw2+Rjx882VUf6hJfNJs5wpNRzX02KcqCXDlLGc=
github.com/gobuffalo/helpers v0.2.1/go.mod h1:5UhA1EfGvyPZfzo9PqhKkSgmLolaTpnWYDbqCJcmiAE=
github.com/gobuffalo/helpers v0.2.2/go.mod h1:xYbzUdCUpVzLwLnqV8HIjT6hmG0Cs7YIBCJkNM597jw=
github.com/gobuffalo/helpers v0.2.4/go.mod h1:NX7v27yxPDOPTgUFYmJ5ow37EbxdoLraucOGvMNawyk=
github.com/gobuffalo/helpers v0.4.0/go.mod h1:2q/ZnVxCehM4/y1bNz3+wXsvWvWUY+iTUr7mPC6QqGQ=
github.com/gobuffalo/here v0.2.3/go.mod h1:2a6G14FaAKOGJMK/5UNa4Og/+iyFS5cq3MnlvFR7YDk=
github.com/gobuffalo/httptest v1.0.2/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E=
github.com/gobuffalo/httptest v1.0.3/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E=
github.com/gobuffalo/httptest v1.0.4/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E=
github.com/gobuffalo/httptest v1.0.5/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E=
github.com/gobuffalo/httptest v1.0.6/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E=
github.com/gobuffalo/httptest v1.1.0/go.mod h1:BIfCgiqCOotRc5xYwCcZN7IFYag4277Ynqjar/Ra3iI=
github.com/gobuffalo/httptest v1.2.0/go.mod h1:0KfourZCsapuvkljDMSr7YM+66kCt/rXv54YcWRWwhc=
github.com/gobuffalo/httptest v1.3.0/go.mod h1:Y4qebOsMH91XdB0cZuS8OUdAKHGV7hVDcjgzGupoYlk=
github.com/gobuffalo/httptest v1.4.0/go.mod h1:VDkgCFmIxAunkLNts49TC949NRLTtvyLKuN67o6hrXM=
github.com/gobuffalo/licenser v0.0.0-20180924033006-eae28e638a42/go.mod h1:Ubo90Np8gpsSZqNScZZkVXXAo5DGhTb+WYFIjlnog8w=
github.com/gobuffalo/licenser v0.0.0-20181025145548-437d89de4f75/go.mod h1:x3lEpYxkRG/XtGCUNkio+6RZ/dlOvLzTI9M1auIwFcw=
github.com/gobuffalo/licenser v0.0.0-20181027200154-58051a75da95/go.mod h1:BzhaaxGd1tq1+OLKObzgdCV9kqVhbTulxOpYbvMQWS0=
github.com/gobuffalo/licenser v0.0.0-20181109171355-91a2a7aac9a7/go.mod h1:m+Ygox92pi9bdg+gVaycvqE8RVSjZp7mWw75+K5NPHk=
github.com/gobuffalo/licenser v0.0.0-20181116224424-1b7fd3f9cbb4/go.mod h1:icHYfF2FVDi6CpI8BK9Sy1ChkSijz/0GNN7Qzzdk6JE=
github.com/gobuffalo/licenser v0.0.0-20181128165715-cc7305f8abed/go.mod h1:oU9F9UCE+AzI/MueCKZamsezGOOHfSirltllOVeRTAE=
github.com/gobuffalo/licenser v0.0.0-20181128170751-82cc989582b9/go.mod h1:oU9F9UCE+AzI/MueCKZamsezGOOHfSirltllOVeRTAE=
github.com/gobuffalo/licenser v0.0.0-20181203160806-fe900bbede07/go.mod h1:ph6VDNvOzt1CdfaWC+9XwcBnlSTBz2j49PBwum6RFaU=
github.com/gobuffalo/licenser v0.0.0-20181211173111-f8a311c51159/go.mod h1:ve/Ue99DRuvnTaLq2zKa6F4KtHiYf7W046tDjuGYPfM=
github.com/gobuffalo/licenser v0.0.0-20190224205124-37799bc2ebf6/go.mod h1:ve/Ue99DRuvnTaLq2zKa6F4KtHiYf7W046tDjuGYPfM=
github.com/gobuffalo/licenser v0.0.0-20190329153211-c35c0a2813b2/go.mod h1:ZVWE6uKUE3rGf7sedUHWVjNWrEgxaUQLVFL+pQiWpfY=
github.com/gobuffalo/licenser v1.1.0/go.mod h1:ZVWE6uKUE3rGf7sedUHWVjNWrEgxaUQLVFL+pQiWpfY=
github.com/gobuffalo/licenser v1.2.0/go.mod h1:ZqDQ+UOqsXPovl65rbCr3Tye6+nKjT4ovwurjVxvMQM=
github.com/gobuffalo/licenser v1.4.0/go.mod h1:YkyTh2T/d7KECTh32j65auPV876gkJJk55aAdBfDehg=
github.com/gobuffalo/logger v0.0.0-20181022175615-46cfb361fc27/go.mod h1:8sQkgyhWipz1mIctHF4jTxmJh1Vxhp7mP8IqbljgJZo=
github.com/gobuffalo/logger v0.0.0-20181027144941-73d08d2bb969/go.mod h1:7uGg2duHKpWnN4+YmyKBdLXfhopkAdVM6H3nKbyFbz8=
github.com/gobuffalo/logger v0.0.0-20181027193913-9cf4dd0efe46/go.mod h1:7uGg2duHKpWnN4+YmyKBdLXfhopkAdVM6H3nKbyFbz8=
github.com/gobuffalo/logger v0.0.0-20181109185836-3feeab578c17/go.mod h1:oNErH0xLe+utO+OW8ptXMSA5DkiSEDW1u3zGIt8F9Ew=
github.com/gobuffalo/logger v0.0.0-20181117211126-8e9b89b7c264/go.mod h1:5etB91IE0uBlw9k756fVKZJdS+7M7ejVhmpXXiSFj0I=
github.com/gobuffalo/logger v0.0.0-20181127160119-5b956e21995c/go.mod h1:+HxKANrR9VGw9yN3aOAppJKvhO05ctDi63w4mDnKv2U=
github.com/gobuffalo/logger v0.0.0-20190224201004-be78ebfea0fa/go.mod h1:+HxKANrR9VGw9yN3aOAppJKvhO05ctDi63w4mDnKv2U=
github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8=
github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs=
github.com/gobuffalo/logger v1.0.1/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs=
github.com/gobuffalo/makr v1.1.5/go.mod h1:Y+o0btAH1kYAMDJW/TX3+oAXEu0bmSLLoC9mIFxtzOw=
github.com/gobuffalo/makr v1.2.0/go.mod h1:SFQUrDtwDpmQ6BxKJqxg0emc4KkNzzvUtAtnHiVK/QQ=
github.com/gobuffalo/mapi v1.0.0/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
github.com/gobuffalo/mapi v1.1.0/go.mod h1:pqQ1XAqvpy/JYtRwoieNps2yU8MFiMxBUpAm2FBtQ50=
github.com/gobuffalo/meta v0.0.0-20181018155829-df62557efcd3/go.mod h1:XTTOhwMNryif3x9LkTTBO/Llrveezd71u3quLd0u7CM=
github.com/gobuffalo/meta v0.0.0-20181018192820-8c6cef77dab3/go.mod h1:E94EPzx9NERGCY69UWlcj6Hipf2uK/vnfrF4QD0plVE=
github.com/gobuffalo/meta v0.0.0-20181025145500-3a985a084b0a/go.mod h1:YDAKBud2FP7NZdruCSlmTmDOZbVSa6bpK7LJ/A/nlKg=
github.com/gobuffalo/meta v0.0.0-20181109154556-f76929ccd5fa/go.mod h1:1rYI5QsanV6cLpT1BlTAkrFi9rtCZrGkvSK8PglwfS8=
github.com/gobuffalo/meta v0.0.0-20181114191255-b130ebedd2f7/go.mod h1:K6cRZ29ozr4Btvsqkjvg5nDFTLOgTqf03KA70Ks0ypE=
github.com/gobuffalo/meta v0.0.0-20181116202903-8850e47774f5/go.mod h1:K6cRZ29ozr4Btvsqkjvg5nDFTLOgTqf03KA70Ks0ypE=
github.com/gobuffalo/meta v0.0.0-20181127070345-0d7e59dd540b/go.mod h1:RLO7tMvE0IAKAM8wny1aN12pvEKn7EtkBLkUZR00Qf8=
github.com/gobuffalo/meta v0.0.0-20190120163247-50bbb1fa260d/go.mod h1:KKsH44nIK2gA8p0PJmRT9GvWJUdphkDUA8AJEvFWiqM=
github.com/gobuffalo/meta v0.0.0-20190121163014-ecaa953cbfb3/go.mod h1:KLfkGnS+Tucc+iTkUcAUBtxpwOJGfhw2pHRLddPxMQY=
github.com/gobuffalo/meta v0.0.0-20190126124307-c8fb6f4eb5a9/go.mod h1:zoh6GLgkk9+iI/62dST4amAuVAczZrBXoAk/t64n7Ew=
github.com/gobuffalo/meta v0.0.0-20190207205153-50a99e08b8cf/go.mod h1:+VGfK9Jm9I7oJyFeJzIT6omCPvrDktzAtpHJKaieugY=
github.com/gobuffalo/meta v0.0.0-20190320152240-a5320142224a/go.mod h1:+VGfK9Jm9I7oJyFeJzIT6omCPvrDktzAtpHJKaieugY=
github.com/gobuffalo/meta v0.0.0-20190329152330-e161e8a93e3b/go.mod h1:mCRSy5F47tjK8yaIDcJad4oe9fXxY5gLrx3Xx2spK+0=
github.com/gobuffalo/meta v0.1.0/go.mod h1:vAgu28tKdaPIkt8j60wYv1dLuJ1UwOmAjZtYOnLJlko=
github.com/gobuffalo/meta v0.2.0/go.mod h1:KZ9Hk/o+kFpwRhzUO95EOuxf3jXU4GleCTUDSTpe3hQ=
github.com/gobuffalo/mw-basicauth v1.0.3/go.mod h1:dg7+ilMZOKnQFHDefUzUHufNyTswVUviCBgF244C1+0=
github.com/gobuffalo/mw-basicauth v1.0.6/go.mod h1:RFyeGeDLZlVgp/eBflqu2eavFqyv0j0fVVP87WPYFwY=
github.com/gobuffalo/mw-basicauth v1.0.7/go.mod h1:xJ9/OSiOWl+kZkjaSun62srODr3Cx8OB4AKr+G4FlS4=
github.com/gobuffalo/mw-contenttype v0.0.0-20180802152300-74f5a47f4d56/go.mod h1:7EvcmzBbeCvFtQm5GqF9ys6QnCxz2UM1x0moiWLq1No=
github.com/gobuffalo/mw-contenttype v0.0.0-20190129203934-2554e742333b/go.mod h1:7x87+mDrr9Peh7AqhOtESyJLanMd2zQNz2Hts+vtBoE=
github.com/gobuffalo/mw-csrf v0.0.0-20180802151833-446ff26e108b/go.mod h1:sbGtb8DmDZuDUQoxjr8hG1ZbLtZboD9xsn6p77ppcHo=
github.com/gobuffalo/mw-csrf v0.0.0-20190129204204-25460a055517/go.mod h1:o5u+nnN0Oa7LBeDYH9QP36qeMPnXV9qbVnbZ4D+Kb0Q=
github.com/gobuffalo/mw-forcessl v0.0.0-20180802152810-73921ae7a130/go.mod h1:JvNHRj7bYNAMUr/5XMkZaDcw3jZhUZpsmzhd//FFWmQ=
github.com/gobuffalo/mw-i18n v0.0.0-20180802152014-e3060b7e13d6/go.mod h1:91AQfukc52A6hdfIfkxzyr+kpVYDodgAeT5cjX1UIj4=
github.com/gobuffalo/mw-i18n v0.0.0-20181027200759-09e0c99be4d3/go.mod h1:1PpGPgqP8VsfUppgBA9FrTOXjI6X9gjqhh/8dmg48lg=
github.com/gobuffalo/mw-i18n v0.0.0-20190129204410-552713a3ebb4/go.mod h1:rBg2eHxsyxVjtYra6fGy4GSF5C8NysOvz+Znnzk42EM=
github.com/gobuffalo/mw-paramlogger v0.0.0-20181005191442-d6ee392ec72e/go.mod h1:6OJr6VwSzgJMqWMj7TYmRUqzNe2LXu/W1rRW4MAz/ME=
github.com/gobuffalo/mw-paramlogger v0.0.0-20190129202837-395da1998525/go.mod h1:gEo/ABCsKqvpp/KCxN2AIzDEe0OJUXbJ9293FYrXw+w=
github.com/gobuffalo/mw-tokenauth v0.0.0-20181001105134-8545f626c189/go.mod h1:UqBF00IfKvd39ni5+yI5MLMjAf4gX7cDKN/26zDOD6c=
github.com/gobuffalo/mw-tokenauth v0.0.0-20190129201951-95847f29c5c8/go.mod h1:n2oa93LHGD94hGI+PoJO+6cf60DNrXrAIv9L/Ke3GXc=
github.com/gobuffalo/nulls v0.0.0-20190305142546-85f3c9250d87/go.mod h1:KhaLCW+kFA/G97tZkmVkIxhRw3gvZszJn7JjPLI3gtI=
github.com/gobuffalo/nulls v0.1.0/go.mod h1:/HRtuDRoVoN5fABk3J6jzZaGEdcIZEMs0qczj71eKZY=
github.com/gobuffalo/packd v0.0.0-20181027182251-01ad393492c8/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc=
github.com/gobuffalo/packd v0.0.0-20181027190505-aafc0d02c411/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc=
github.com/gobuffalo/packd v0.0.0-20181027194105-7ae579e6d213/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc=
github.com/gobuffalo/packd v0.0.0-20181028162033-6d52e0eabf41/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI=
github.com/gobuffalo/packd v0.0.0-20181029140631-cf76bd87a5a6/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI=
github.com/gobuffalo/packd v0.0.0-20181031195726-c82734870264/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI=
github.com/gobuffalo/packd v0.0.0-20181103221656-16c4ed88b296/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI=
github.com/gobuffalo/packd v0.0.0-20181104210303-d376b15f8e96/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI=
github.com/gobuffalo/packd v0.0.0-20181111195323-b2e760a5f0ff/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI=
github.com/gobuffalo/packd v0.0.0-20181114190715-f25c5d2471d7/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI=
github.com/gobuffalo/packd v0.0.0-20181124090624-311c6248e5fb/go.mod h1:Foenia9ZvITEvG05ab6XpiD5EfBHPL8A6hush8SJ0o8=
github.com/gobuffalo/packd v0.0.0-20181207120301-c49825f8f6f4/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA=
github.com/gobuffalo/packd v0.0.0-20181212173646-eca3b8fd6687/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA=
github.com/gobuffalo/packd v0.0.0-20190224160250-d04dd98aca5b/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA=
github.com/gobuffalo/packd v0.0.0-20190315122247-83d601d65093/go.mod h1:LpEu7OkoplvlhztyAEePkS6JwcGgANdgGL5pB4Knxaw=
github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
github.com/gobuffalo/packd v0.2.0/go.mod h1:k2CkHP3bjbqL2GwxwhxUy1DgnlbW644hkLC9iIUvZwY=
github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q=
github.com/gobuffalo/packr v1.13.7/go.mod h1:KkinLIn/n6+3tVXMwg6KkNvWwVsrRAz4ph+jgpk3Z24=
github.com/gobuffalo/packr v1.15.0/go.mod h1:t5gXzEhIviQwVlNx/+3SfS07GS+cZ2hn76WLzPp6MGI=
github.com/gobuffalo/packr v1.15.1/go.mod h1:IeqicJ7jm8182yrVmNbM6PR4g79SjN9tZLH8KduZZwE=
github.com/gobuffalo/packr v1.16.0/go.mod h1:Yx/lcR/7mDLXhuJSzsz2MauD/HUwSc+EK6oigMRGGsM=
github.com/gobuffalo/packr v1.19.0/go.mod h1:MstrNkfCQhd5o+Ct4IJ0skWlxN8emOq8DsoT1G98VIU=
github.com/gobuffalo/packr v1.20.0/go.mod h1:JDytk1t2gP+my1ig7iI4NcVaXr886+N0ecUga6884zw=
github.com/gobuffalo/packr v1.21.0/go.mod h1:H00jGfj1qFKxscFJSw8wcL4hpQtPe1PfU2wa6sg/SR0=
github.com/gobuffalo/packr v1.21.5/go.mod h1:zCvDxrZzFmq5Xd7Jw4vaGe/OYwzuXnma31D2EbTHMWk=
github.com/gobuffalo/packr v1.21.7/go.mod h1:73tmYjwi4Cvb1eNiAwpmrzZ0gxVA4KBqVSZ2FNeJodM=
github.com/gobuffalo/packr v1.21.9/go.mod h1:GC76q6nMzRtR+AEN/VV4w0z2/4q7SOaEmXh3Ooa8sOE=
github.com/gobuffalo/packr v1.22.0/go.mod h1:Qr3Wtxr3+HuQEwWqlLnNW4t1oTvK+7Gc/Rnoi/lDFvA=
github.com/gobuffalo/packr v1.24.0/go.mod h1:p9Sgang00I1hlr1ub+tgI9AQdFd4f+WH1h62jYpzetM=
github.com/gobuffalo/packr v1.24.1/go.mod h1:absPnW/XUUa4DmIh5ga7AipGXXg0DOcd5YWKk5RZs8Y=
github.com/gobuffalo/packr v1.25.0/go.mod h1:NqsGg8CSB2ZD+6RBIRs18G7aZqdYDlYNNvsSqP6T4/U=
github.com/gobuffalo/packr/v2 v2.0.0-rc.5/go.mod h1:e6gmOfhf3KmT4zl2X/NDRSfBXk2oV4TXZ+NNOM0xwt8=
github.com/gobuffalo/packr/v2 v2.0.0-rc.7/go.mod h1:BzhceHWfF3DMAkbPUONHYWs63uacCZxygFY1b4H9N2A=
github.com/gobuffalo/packr/v2 v2.0.0-rc.8/go.mod h1:y60QCdzwuMwO2R49fdQhsjCPv7tLQFR0ayzxxla9zes=
github.com/gobuffalo/packr/v2 v2.0.0-rc.9/go.mod h1:fQqADRfZpEsgkc7c/K7aMew3n4aF1Kji7+lIZeR98Fc=
github.com/gobuffalo/packr/v2 v2.0.0-rc.10/go.mod h1:4CWWn4I5T3v4c1OsJ55HbHlUEKNWMITG5iIkdr4Px4w=
github.com/gobuffalo/packr/v2 v2.0.0-rc.11/go.mod h1:JoieH/3h3U4UmatmV93QmqyPUdf4wVM9HELaHEu+3fk=
github.com/gobuffalo/packr/v2 v2.0.0-rc.12/go.mod h1:FV1zZTsVFi1DSCboO36Xgs4pzCZBjB/tDV9Cz/lSaR8=
github.com/gobuffalo/packr/v2 v2.0.0-rc.13/go.mod h1:2Mp7GhBFMdJlOK8vGfl7SYtfMP3+5roE39ejlfjw0rA=
github.com/gobuffalo/packr/v2 v2.0.0-rc.14/go.mod h1:06otbrNvDKO1eNQ3b8hst+1010UooI2MFg+B2Ze4MV8=
github.com/gobuffalo/packr/v2 v2.0.0-rc.15/go.mod h1:IMe7H2nJvcKXSF90y4X1rjYIRlNMJYCxEhssBXNZwWs=
github.com/gobuffalo/packr/v2 v2.0.0/go.mod h1:7McfLpSxaPUoSQm7gYpTZRQSK63mX8EKzzYSEFKvfkM=
github.com/gobuffalo/packr/v2 v2.0.1/go.mod h1:tp5/5A2e67F1lUGTiNadtA2ToP045+mvkWzaqMCsZr4=
github.com/gobuffalo/packr/v2 v2.0.2/go.mod h1:6Y+2NY9cHDlrz96xkJG8bfPwLlCdJVS/irhNJmwD7kM=
github.com/gobuffalo/packr/v2 v2.0.6/go.mod h1:/TYKOjadT7P9jRWZtj4BRTgeXy2tIYntifGkD+aM2KY=
github.com/gobuffalo/packr/v2 v2.0.7/go.mod h1:1SBFAIr3YnxYdJRyrceR7zhOrhV/YhHzOjDwA9LLZ5Y=
github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ=
github.com/gobuffalo/packr/v2 v2.0.10/go.mod h1:n90ZuXIc2KN2vFAOQascnPItp9A2g9QYSvYvS3AjQEM=
github.com/gobuffalo/packr/v2 v2.1.0/go.mod h1:n90ZuXIc2KN2vFAOQascnPItp9A2g9QYSvYvS3AjQEM=
github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
github.com/gobuffalo/packr/v2 v2.3.2/go.mod h1:93elRVdDhpUgox9GnXswWK5dzpVBQsnlQjnnncSLoiU=
github.com/gobuffalo/packr/v2 v2.4.0/go.mod h1:ra341gygw9/61nSjAbfwcwh8IrYL4WmR4IsPkPBhQiY=
github.com/gobuffalo/packr/v2 v2.5.1/go.mod h1:8f9c96ITobJlPzI44jj+4tHnEKNt0xXWSVlXRN9X1Iw=
github.com/gobuffalo/packr/v2 v2.5.2/go.mod h1:sgEE1xNZ6G0FNN5xn9pevVu4nywaxHvgup67xisti08=
github.com/gobuffalo/packr/v2 v2.5.3/go.mod h1:sgEE1xNZ6G0FNN5xn9pevVu4nywaxHvgup67xisti08=
github.com/gobuffalo/packr/v2 v2.6.0/go.mod h1:sgEE1xNZ6G0FNN5xn9pevVu4nywaxHvgup67xisti08=
github.com/gobuffalo/packr/v2 v2.7.1/go.mod h1:qYEvAazPaVxy7Y7KR0W8qYEE+RymX74kETFqjFoFlOc=
github.com/gobuffalo/plush v3.7.16+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
github.com/gobuffalo/plush v3.7.20+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
github.com/gobuffalo/plush v3.7.21+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
github.com/gobuffalo/plush v3.7.22+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
github.com/gobuffalo/plush v3.7.23+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
github.com/gobuffalo/plush v3.7.30+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
github.com/gobuffalo/plush v3.7.31+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
github.com/gobuffalo/plush v3.7.32+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
github.com/gobuffalo/plush v3.7.33+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
github.com/gobuffalo/plush v3.7.34+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
github.com/gobuffalo/plush v3.8.0+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
github.com/gobuffalo/plush v3.8.2+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
github.com/gobuffalo/plush v3.8.3+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI=
github.com/gobuffalo/plushgen v0.0.0-20181128164830-d29dcb966cb2/go.mod h1:r9QwptTFnuvSaSRjpSp4S2/4e2D3tJhARYbvEBcKSb4=
github.com/gobuffalo/plushgen v0.0.0-20181203163832-9fc4964505c2/go.mod h1:opEdT33AA2HdrIwK1aibqnTJDVVKXC02Bar/GT1YRVs=
github.com/gobuffalo/plushgen v0.0.0-20181207152837-eedb135bd51b/go.mod h1:Lcw7HQbEVm09sAQrCLzIxuhFbB3nAgp4c55E+UlynR0=
github.com/gobuffalo/plushgen v0.0.0-20190104222512-177cd2b872b3/go.mod h1:tYxCozi8X62bpZyKXYHw1ncx2ZtT2nFvG42kuLwYjoc=
github.com/gobuffalo/plushgen v0.0.0-20190224160205-347ea233336e/go.mod h1:tYxCozi8X62bpZyKXYHw1ncx2ZtT2nFvG42kuLwYjoc=
github.com/gobuffalo/plushgen v0.0.0-20190329152458-0555238fe0d9/go.mod h1:3U71v6HWZpVER1nInTXeAwdoRNsRd4W8aeIa1Lyp+Bk=
github.com/gobuffalo/plushgen v0.1.0/go.mod h1:NK33QLkRK/xKexiPFSxlWRT286F4yStZUa/Fbx0guvo=
github.com/gobuffalo/plushgen v0.1.2/go.mod h1:3U71v6HWZpVER1nInTXeAwdoRNsRd4W8aeIa1Lyp+Bk=
github.com/gobuffalo/pop v4.8.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.8.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.8.4+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.8.5+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.8.7+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.8.8+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.9.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.9.1+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.9.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.9.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.9.5+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.9.6+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.9.8+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.9.9+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.10.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.11.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.11.1+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.11.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.11.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.12.0+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/pop v4.12.1+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg=
github.com/gobuffalo/release v1.0.35/go.mod h1:VtHFAKs61vO3wboCec5xr9JPTjYyWYcvaM3lclkc4x4=
github.com/gobuffalo/release v1.0.38/go.mod h1:VtHFAKs61vO3wboCec5xr9JPTjYyWYcvaM3lclkc4x4=
github.com/gobuffalo/release v1.0.42/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug=
github.com/gobuffalo/release v1.0.51/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug=
github.com/gobuffalo/release v1.0.52/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug=
github.com/gobuffalo/release v1.0.53/go.mod h1:FdF257nd8rqhNaqtDWFGhxdJ/Ig4J7VcS3KL7n/a+aA=
github.com/gobuffalo/release v1.0.54/go.mod h1:Pe5/RxRa/BE8whDpGfRqSI7D1a0evGK1T4JDm339tJc=
github.com/gobuffalo/release v1.0.61/go.mod h1:mfIO38ujUNVDlBziIYqXquYfBF+8FDHUjKZgYC1Hj24=
github.com/gobuffalo/release v1.0.63/go.mod h1:/7hQAikt0l8Iu/tAX7slC1qiOhD6Nb+3KMmn/htiUfc=
github.com/gobuffalo/release v1.0.72/go.mod h1:NP5NXgg/IX3M5XmHmWR99D687/3Dt9qZtTK/Lbwc1hU=
github.com/gobuffalo/release v1.0.74/go.mod h1:NP5NXgg/IX3M5XmHmWR99D687/3Dt9qZtTK/Lbwc1hU=
github.com/gobuffalo/release v1.1.1/go.mod h1:Sluak1Xd6kcp6snkluR1jeXAogdJZpFFRzTYRs/2uwg=
github.com/gobuffalo/release v1.1.3/go.mod h1:CuXc5/m+4zuq8idoDt1l4va0AXAn/OSs08uHOfMVr8E=
github.com/gobuffalo/release v1.1.6/go.mod h1:18naWa3kBsqO0cItXZNJuefCKOENpbbUIqRL1g+p6z0=
github.com/gobuffalo/release v1.2.2/go.mod h1:tkFFZua2N5WRxyGDk2cSwQjzkZ/apKKXl5T8P+kEO+E=
github.com/gobuffalo/release v1.2.5/go.mod h1:tkFFZua2N5WRxyGDk2cSwQjzkZ/apKKXl5T8P+kEO+E=
github.com/gobuffalo/release v1.4.0/go.mod h1:f4uUPnD9dxrWxVy9yy0k/mvDf3EzhFtf7/byl0tTdY4=
github.com/gobuffalo/release v1.7.0/go.mod h1:xH2NjAueVSY89XgC4qx24ojEQ4zQ9XCGVs5eXwJTkEs=
github.com/gobuffalo/release v1.8.3/go.mod h1:gCk/x5WD+aIGkPodO4CuLxdnhYn9Jgp7yFYxntK/8mk=
github.com/gobuffalo/release v1.13.4/go.mod h1:5Cc4TSNxP4QFV2ZUYcgPiBBV7YyRomHecGTQuuy26G4=
github.com/gobuffalo/shoulders v1.0.1/go.mod h1:V33CcVmaQ4gRUmHKwq1fiTXuf8Gp/qjQBUL5tHPmvbA=
github.com/gobuffalo/shoulders v1.0.3/go.mod h1:LqMcHhKRuBPMAYElqOe3POHiZ1x7Ry0BE8ZZ84Bx+k4=
github.com/gobuffalo/shoulders v1.0.4/go.mod h1:LqMcHhKRuBPMAYElqOe3POHiZ1x7Ry0BE8ZZ84Bx+k4=
github.com/gobuffalo/shoulders v1.1.0/go.mod h1:kcIJs3p7VqoBJ36Mzs+x767NyzTx0pxBvzZdWTWZYF8=
github.com/gobuffalo/shoulders v1.2.0/go.mod h1:Ia3oFybQWg4711cb2S5JkFSt9V4rMiLGusWZ6mRAdNM=
github.com/gobuffalo/syncx v0.0.0-20181120191700-98333ab04150/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
github.com/gobuffalo/syncx v0.0.0-20181120194010-558ac7de985f/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
github.com/gobuffalo/tags v2.0.11+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY=
github.com/gobuffalo/tags v2.0.14+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY=
github.com/gobuffalo/tags v2.0.15+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY=
github.com/gobuffalo/tags v2.0.16+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY=
github.com/gobuffalo/tags v2.1.0+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY=
github.com/gobuffalo/tags v2.1.5+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY=
github.com/gobuffalo/uuid v2.0.3+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE=
github.com/gobuffalo/uuid v2.0.4+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE=
github.com/gobuffalo/uuid v2.0.5+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE=
github.com/gobuffalo/validate v2.0.3+incompatible/go.mod h1:N+EtDe0J8252BgfzQUChBgfd6L93m9weay53EWFVsMM=
github.com/gobuffalo/x v0.0.0-20181003152136-452098b06085/go.mod h1:WevpGD+5YOreDJznWevcn8NTmQEW5STSBgIkpkjzqXc=
github.com/gobuffalo/x v0.0.0-20181007152206-913e47c59ca7/go.mod h1:9rDPXaB3kXdKWzMc4odGQQdG2e2DIEmANy5aSJ9yesY=
github.com/gobuffalo/x v0.0.0-20181025165825-f204f550da9d/go.mod h1:Qh2Pb/Ak1Ko2mzHlGPigrnxkhO4WTTCI1jJM58sbgtE=
github.com/gobuffalo/x v0.0.0-20181025192250-1ef645d63fe8/go.mod h1:AIlnMGlYXOCsoCntLPFLYtrJNS/pc2HD4IdSXH62TpU=
github.com/gobuffalo/x v0.0.0-20181109195216-5b3131238124/go.mod h1:GpdLUY6/Ztf/3FfxfwsLkDqAGZ0brhlh7LzIibHyZp0=
github.com/gobuffalo/x v0.0.0-20181110221217-14085ca3e1a9/go.mod h1:ig5vdn4+5IPtxgESlZWo1SSDyHKKef8EjVVKhY9kkIQ=
github.com/gobuffalo/x v0.0.0-20190224155809-6bb134105960/go.mod h1:ig5vdn4+5IPtxgESlZWo1SSDyHKKef8EjVVKhY9kkIQ=
github.com/gofrs/uuid v3.1.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
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/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
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/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY=
github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.7.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1/go.mod h1:YeAe0gNeiNT5hoiZRI4yiOky6jVdNvfO2N6Kav/HmxY=
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
github.com/gorilla/sessions v1.1.2/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w=
github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w=
github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
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.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
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/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo=
github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ=
github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA=
github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE=
github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s=
github.com/jackc/pgconn v1.0.1/go.mod h1:GgY/Lbj1VonNaVdNUHs9AwWom3yP2eymFQ1C8z9r/Lk=
github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8=
github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE=
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78=
github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA=
github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg=
github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM=
github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM=
github.com/jackc/pgproto3/v2 v2.0.0/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM=
github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg=
github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc=
github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw=
github.com/jackc/pgx v3.2.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
github.com/jackc/pgx v3.3.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
github.com/jackc/pgx v3.5.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y=
github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM=
github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc=
github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU=
github.com/jmoiron/sqlx v0.0.0-20180614180643-0dae4fefe7c0/go.mod h1:IiEW3SEiiErVyFdH8NTuWjSifiEQKUoyK3LNqr2kCHU=
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
github.com/joho/godotenv v1.2.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34=
github.com/karrick/godirwalk v1.7.7/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34=
github.com/karrick/godirwalk v1.7.8/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34=
github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
github.com/karrick/godirwalk v1.12.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
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 v0.0.0-20180402223658-b729f2633dfe/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
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/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/markbates/deplist v1.0.4/go.mod h1:gRRbPbbuA8TmMiRvaOzUlRfzfjeCCBqX2A6arxN01MM=
github.com/markbates/deplist v1.0.5/go.mod h1:gRRbPbbuA8TmMiRvaOzUlRfzfjeCCBqX2A6arxN01MM=
github.com/markbates/deplist v1.1.3/go.mod h1:BF7ioVzAJYEtzQN/os4rt8H8Ti3h0T7EoN+7eyALktE=
github.com/markbates/deplist v1.2.0/go.mod h1:dtsWLZ5bWoazbM0rCxZncQaAPifWbvHgBJk8UNI1Yfk=
github.com/markbates/deplist v1.3.0/go.mod h1:dtsWLZ5bWoazbM0rCxZncQaAPifWbvHgBJk8UNI1Yfk=
github.com/markbates/going v1.0.2/go.mod h1:UWCk3zm0UKefHZ7l8BNqi26UyiEMniznk8naLdTcy6c=
github.com/markbates/going v1.0.3/go.mod h1:fQiT6v6yQar9UD6bd/D4Z5Afbk9J6BBVBtLiyY4gp2o=
github.com/markbates/grift v1.0.4/go.mod h1:wbmtW74veyx+cgfwFhlnnMWqhoz55rnHR47oMXzsyVs=
github.com/markbates/grift v1.0.5/go.mod h1:EHmVIjOQoj/OOBDzlZ8RW0ZkvOtQ4xRHjrPvmfoiFaU=
github.com/markbates/grift v1.0.6/go.mod h1:2AUYA/+pODhwonRbYwsltPVPIztBzw5nIJEGiWgKMPM=
github.com/markbates/grift v1.1.0/go.mod h1:8N7ybWEcnMOvtSb0kW+dLJpYii9eq/FP3Gtu/cNPDTY=
github.com/markbates/hmax v1.0.0/go.mod h1:cOkR9dktiESxIMu+65oc/r/bdY4bE8zZw3OLhLx0X2c=
github.com/markbates/hmax v1.1.0/go.mod h1:hhn8pJiRwNTEmNlxhfiTbL+CtEYiAX3wuhSf/kg/6wI=
github.com/markbates/inflect v1.0.0/go.mod h1:oTeZL2KHA7CUX6X+fovmK9OvIOFuqu0TwdQrZjLTh88=
github.com/markbates/inflect v1.0.1/go.mod h1:uv3UVNBe5qBIfCm8O8Q+DW+S1EopeyINj+Ikhc7rnCk=
github.com/markbates/inflect v1.0.3/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs=
github.com/markbates/inflect v1.0.4/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs=
github.com/markbates/oncer v0.0.0-20180924031910-e862a676800b/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
github.com/markbates/oncer v0.0.0-20180924034138-723ad0170a46/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
github.com/markbates/oncer v0.0.0-20181014194634-05fccaae8fc4/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
github.com/markbates/oncer v1.0.0/go.mod h1:Z59JA581E9GP6w96jai+TGqafHPW+cPfRxz2aSZ0mcI=
github.com/markbates/pkger v0.5.1 h1:l0s55z4X5XbwIat2LyLe0HABMBswVK1GJbzLXQbuAXs=
github.com/markbates/pkger v0.5.1/go.mod h1:so/QD8FeTM0IilC3nRArkwOvUT+tsJsaXLFUAKmjzJk=
github.com/markbates/refresh v1.4.10/go.mod h1:NDPHvotuZmTmesXxr95C9bjlw1/0frJwtME2dzcVKhc=
github.com/markbates/refresh v1.4.11/go.mod h1:awpJuyo4zgexB/JaHfmBX0sRdvOjo2dXwIayWIz9i3g=
github.com/markbates/refresh v1.5.0/go.mod h1:ZYMLkxV+x7wXQ2Xd7bXAPyF0EXiEWAMfiy/4URYb1+M=
github.com/markbates/refresh v1.6.0/go.mod h1:p8jWGABFUaFf/cSw0pxbo0MQVujiz5NTQ0bmCHLC4ac=
github.com/markbates/refresh v1.7.1/go.mod h1:hcGVJc3m5EeskliwSVJxcTHzUtMz2h8gBtCS0V94CgE=
github.com/markbates/refresh v1.8.0/go.mod h1:ppl0l94oz3OKBAx3MV65vCDWPo51JQnypdtFUmps1NM=
github.com/markbates/safe v1.0.0/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
github.com/markbates/sigtx v1.0.0/go.mod h1:QF1Hv6Ic6Ca6W+T+DL0Y/ypborFKyvUY9HmuCD4VeTc=
github.com/markbates/willie v1.0.9/go.mod h1:fsrFVWl91+gXpx/6dv715j7i11fYPfZ9ZGfH0DQzY7w=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4=
github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc=
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/monoculum/formam v0.0.0-20180901015400-4e68be1d79ba/go.mod h1:RKgILGEJq24YyJ2ban8EO0RUVSJlF1pGsEvoLEACr/Q=
github.com/monoculum/formam v0.0.0-20190307031628-bc555adff0cd/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc=
github.com/monoculum/formam v0.0.0-20190730134247-0612307a4099/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc=
github.com/monoculum/formam v0.0.0-20190830100315-7ff9597b1407/go.mod h1:JKa2av1XVkGjhxdLS59nDoXa2JpmIHpnURWNbzCtXtc=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo=
github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM=
github.com/nicksnyder/go-i18n v1.10.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.9.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.6.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
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-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
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-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
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/rogpeppe/go-internal v1.0.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.4.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516/go.mod h1:Yow6lPLSAXx2ifx470yD/nUe22Dv5vBvxK/UK9UUTVs=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY=
github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM=
github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0=
github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ=
github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw=
github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI=
github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU=
github.com/shurcooL/highlight_go v0.0.0-20170515013102-78fb10f4a5f8/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag=
github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag=
github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg=
github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw=
github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y=
github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q=
github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ=
github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I=
github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0=
github.com/shurcooL/octicon v0.0.0-20180602230221-c42b0e3b24d9/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ=
github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ=
github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk=
github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4=
github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw=
github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
github.com/sirupsen/logrus v1.1.0/go.mod h1:zrgwTnHtNr00buQ1vSptGe8m1f/BbgsPukg8qsT7A+A=
github.com/sirupsen/logrus v1.1.1/go.mod h1:zrgwTnHtNr00buQ1vSptGe8m1f/BbgsPukg8qsT7A+A=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
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/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE=
github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA=
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.0/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.4/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
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/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI=
github.com/spf13/viper v1.3.0/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/spf13/viper v1.3.1/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
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/unrolled/secure v0.0.0-20180918153822-f340ee86eb8b/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA=
github.com/unrolled/secure v0.0.0-20181005190816-ff9db2ff917f/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA=
github.com/unrolled/secure v0.0.0-20181022170031-4b6b7cf51606/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA=
github.com/unrolled/secure v0.0.0-20190103195806-76e6d4e9b90c/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA=
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/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20180910181607-0e37d006457b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181015023909-0c41d7ab0a0e/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181024171144-74cb1d3d52f4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181025113841-85e1b3f9139a/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181106171534-e4dc69e5b2fd/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181112202954-3d3f9f413869/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190102171810-8d7daa0c54b3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190103213133-ff983b9c42bc/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190122013713-64072686203f/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190130090550-b01c7a725664/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190403202508-8e1b8d32e692/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
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/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180816102801-aaf60122140d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180921000356-2f5d2388922f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181017193950-04a2e542c03f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181108082009-03003ca0c849/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181207154023-610586996380/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181213202711-891ebc4b82d6/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190119204137-ed066c81e75e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190514140710-3ec191127204/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180816055513-1c9583448a9c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180921163948-d47a0f339242/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180927150500-dad3d9fb7b6e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181005133103-4497e2df6f9e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181011152604-fa43e7bc11ba/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181019084534-8f1d3d21f81b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181022134430-8a28ead16f52/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181024145615-5cd93ef61a7c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181025063200-d989b31c8746/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181026064943-731415f00dce/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181030150119-7e31e0c00fa0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181106135930-3a76605856fd/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/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-20181206074257-70b957f3b65e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181213150753-586ba8c9bb14/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181213200352-4d1cda033e06/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190102155601-82a175fd1598/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190116161447-11f53e031339/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190122071731-054c452bb702/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-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190220154126-629670e5acc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/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-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
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-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181003024731-2f84ea8ef872/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181006002542-f60d9635b16a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181008205924-a2b3f7f249e9/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181013182035-5e66757b835f/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181017214349-06f26fdaaa28/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181019005945-6adeb8aab2de/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181024171208-a2dc47679d30/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181026183834-f60e5f99f081/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181030151751-bb28844c46df/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181102223251-96e9e165b75e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181105230042-78dc5bac0cac/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181107215632-34b416bd17b3/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181109152631-138c20b93253/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181109202920-92d8274bd7b8/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181111003725-6d71ab8aade0/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181114190951-94339b83286c/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181119130350-139d099f6620/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181120060634-fc4f04983f62/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181122213734-04b5d21e00f1/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181127195227-b4e97c0ed882/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181127232545-e782529d0ddd/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181201035826-d0ca3933b724/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181203210056-e5f3ab76ea4b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181205224935-3576414c54a4/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181206194817-bcd4e47d0288/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181207183836-8bc39b988060/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181212172921-837e80568c09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181213190329-bbccd8cae4a9/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190102213336-ca9055ed7d04/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190104182027-498d95493402/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190111214448-fc1d57b08d7b/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-20190118193359-16909d206f00/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190122202912-9c309ee22fab/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190124004107-78ee07aa9465/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190131142011-8dbcc66f33bb/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190206221403-44bcb96178d3/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190214204934-8dcb7bc8c7fe/go.mod h1:E6PF97AdD6v0s+fPshSmumCW1S1Ne85RbPQxELkKa44=
golang.org/x/tools v0.0.0-20190219135230-f000d56b39dc/go.mod h1:E6PF97AdD6v0s+fPshSmumCW1S1Ne85RbPQxELkKa44=
golang.org/x/tools v0.0.0-20190219185102-9394956cfdc5/go.mod h1:E6PF97AdD6v0s+fPshSmumCW1S1Ne85RbPQxELkKa44=
golang.org/x/tools v0.0.0-20190221204921-83362c3779f5/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190315044204-8b67d361bba2/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190318200714-bb1270c20edf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190404132500-923d25813098/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190407030857-0fdf0c73855b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190603152906-08e0b306e832/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190603231351-8aaa1484dc10/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190613204242-ed0dc450797f/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190624180213-70d37148ca0c/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190809145639-6d4652c779c4/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190825031127-d72b05d2b1b6/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190905035308-adb45749da8e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190906203814-12febf440ab1/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191004055002-72853e10c5a3/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191015150414-f936694f27bf/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg=
google.golang.org/genproto v0.0.0-20190201180003-4b09977fb922/go.mod h1:L3J43x8/uS+qIUoksaLKe6OS3nUKxOKuIFz1sl2/jx4=
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw=
gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/mail.v2 v2.0.0-20180731213649-a0242b2233b4/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck=
sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=

172
pkging/pkgtest/load_ref.go Normal file
View File

@ -0,0 +1,172 @@
package pkgtest
import (
"fmt"
"io"
"os"
"path/filepath"
"strings"
"github.com/markbates/pkger/here"
"github.com/markbates/pkger/pkging"
)
func LoadFile(name string, ref *Ref, pkg pkging.Pkger) (os.FileInfo, error) {
her, err := here.Package("github.com/markbates/pkger")
if err != nil {
return nil, err
}
root := filepath.Join(
her.Module.Dir,
"pkging",
"pkgtest",
"testdata",
"ref",
name,
)
info, err := os.Stat(root)
if err != nil {
return nil, err
}
if info.IsDir() {
return nil, fmt.Errorf("%s is a directory", name)
}
her, err = pkg.Current()
if err != nil {
return nil, err
}
af, err := os.Open(root)
if err != nil {
return nil, err
}
defer af.Close()
bf, err := pkg.Create(name)
if err != nil {
return nil, err
}
defer bf.Close()
xp := strings.TrimPrefix(root, filepath.Dir(root))
xp = filepath.Join(ref.Dir, xp)
cf, err := os.Create(xp)
if err != nil {
return nil, err
}
defer cf.Close()
mw := io.MultiWriter(bf, cf)
_, err = io.Copy(mw, af)
if err != nil {
return nil, err
}
return info, nil
}
func LoadFiles(name string, ref *Ref, pkg pkging.Pkger) ([]os.FileInfo, error) {
var infos []os.FileInfo
her, err := here.Package("github.com/markbates/pkger")
if err != nil {
return nil, err
}
root := filepath.Join(
her.Module.Dir,
"pkging",
"pkgtest",
"testdata",
"ref",
name,
)
info, err := os.Stat(root)
if err != nil {
return nil, err
}
if !info.IsDir() {
return nil, fmt.Errorf("%s is not a directory", name)
}
her, err = pkg.Current()
if err != nil {
return nil, err
}
err = filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if strings.HasPrefix(filepath.Base(path), ".") {
return nil
}
infos = append(infos, info)
xp := strings.TrimPrefix(path, root)
xp = filepath.Join(name, xp)
pt, err := pkg.Parse(xp)
if err != nil {
return err
}
if info.IsDir() {
if err := pkg.MkdirAll(pt.Name, info.Mode()); err != nil {
return err
}
if err := os.MkdirAll(filepath.Join(her.Dir, xp), info.Mode()); err != nil {
return err
}
return nil
}
af, err := os.Open(path)
if err != nil {
return err
}
defer af.Close()
bf, err := pkg.Create(pt.Name)
if err != nil {
return err
}
defer bf.Close()
xp = filepath.Join(her.Dir, xp)
cf, err := os.Create(xp)
if err != nil {
return err
}
defer cf.Close()
mw := io.MultiWriter(bf, cf)
_, err = io.Copy(mw, af)
if err != nil {
return err
}
return nil
})
if err != nil {
return nil, err
}
if len(infos) == 0 {
return nil, fmt.Errorf("did not load any infos for %s", name)
}
return infos, nil
}

View File

@ -0,0 +1,28 @@
package pkgtest
import (
"testing"
"github.com/markbates/pkger/pkging"
"github.com/stretchr/testify/require"
)
func MkdirAllTest(t *testing.T, ref *Ref, pkg pkging.Pkger) {
r := require.New(t)
name := "/all/this/useless/beauty"
_, err := pkg.Stat(name)
r.Error(err)
r.NoError(pkg.MkdirAll(name, 0755))
f, err := pkg.Open(name)
r.NoError(err)
info, err := f.Stat()
r.NoError(err)
r.Equal("app:"+name, f.Name())
r.Equal("beauty", info.Name())
}

45
pkging/pkgtest/open.go Normal file
View File

@ -0,0 +1,45 @@
package pkgtest
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"testing"
"github.com/markbates/pkger/pkging"
"github.com/stretchr/testify/require"
)
func OpenTest(t *testing.T, ref *Ref, pkg pkging.Pkger) {
r := require.New(t)
name := "/go.mod"
osf, err := os.Open(filepath.Join(ref.Dir, name))
r.NoError(err)
osi, err := osf.Stat()
r.NoError(err)
_, err = LoadFile(name, ref, pkg)
r.NoError(err)
pf, err := pkg.Open(fmt.Sprintf("/%s", name))
r.NoError(err)
psi, err := pf.Stat()
r.NoError(err)
CmpFileInfo(t, osi, psi)
osb, err := ioutil.ReadAll(osf)
r.NoError(err)
r.NoError(osf.Close())
psb, err := ioutil.ReadAll(pf)
r.NoError(err)
r.NoError(pf.Close())
r.Equal(osb, psb)
}

View File

@ -1,9 +1,92 @@
package pkgtest package pkgtest
import "strings" import (
"fmt"
"os"
"testing"
"github.com/markbates/pkger/here"
"github.com/markbates/pkger/pkging"
"github.com/stretchr/testify/require"
)
type AllFn func(ref *Ref) (pkging.Pkger, error)
func All(t *testing.T, fn AllFn) {
r := require.New(t)
type tf func(*testing.T, *Ref, pkging.Pkger)
tests := map[string]tf{
"Create": CreateTest,
"Current": CurrentTest,
"HTTP": HTTPTest,
"Info": InfoTest,
"MkdirAll": MkdirAllTest,
"Open": OpenTest,
"Remove": RemoveTest,
"RemoveAll": RemoveAllTest,
"Stat": StatTest,
"Walk": WalkTest,
}
ref, err := NewRef()
r.NoError(err)
defer os.RemoveAll(ref.Dir)
pkg, err := fn(ref)
r.NoError(err)
for n, tt := range tests {
t.Run(fmt.Sprintf("%T/%s", pkg, n), func(st *testing.T) {
st.Parallel()
r := require.New(st)
ref, err := NewRef()
r.NoError(err)
defer os.RemoveAll(ref.Dir)
pkg, err := fn(ref)
r.NoError(err)
tt(st, ref, pkg)
})
}
func clean(s string) string { }
s = strings.TrimSpace(s)
s = strings.ReplaceAll(s, "\\", "/") func CmpFileInfo(t *testing.T, a os.FileInfo, b os.FileInfo) {
return s t.Helper()
r := require.New(t)
r.Equal(a.IsDir(), b.IsDir())
r.Equal(a.Name(), b.Name())
r.NotZero(b.ModTime())
if a.IsDir() {
r.True(b.Mode().IsDir(), b.Mode().String())
return
}
r.True(b.Mode().IsRegular(), b.Mode().String())
}
func cmpHereInfo(t *testing.T, a here.Info, b here.Info) {
t.Helper()
r := require.New(t)
r.NotZero(a)
r.NotZero(b)
r.Equal(a.ImportPath, b.ImportPath)
r.Equal(a.Name, b.Name)
am := a.Module
bm := b.Module
r.Equal(am.Path, bm.Path)
r.Equal(am.Main, bm.Main)
r.Equal(am.GoVersion, bm.GoVersion)
} }

91
pkging/pkgtest/ref.go Normal file
View File

@ -0,0 +1,91 @@
package pkgtest
import (
"crypto/rand"
"encoding/hex"
"io/ioutil"
"os"
"path/filepath"
"runtime"
"github.com/markbates/pkger/here"
)
type Ref struct {
here.Info
}
func NewRef() (*Ref, error) {
her, err := here.Package("github.com/markbates/pkger")
if err != nil {
return nil, err
}
root := filepath.Join(
her.Module.Dir,
"pkging",
"pkgtest",
"testdata",
"ref")
if _, err := os.Stat(root); err != nil {
return nil, err
}
b := make([]byte, 10)
_, err = rand.Read(b)
if err != nil {
return nil, err
}
dir := filepath.Dir(root)
dir = filepath.Join(dir, hex.EncodeToString(b))
ref := &Ref{
Info: here.Info{
ImportPath: "app",
Dir: dir,
Name: "app",
Module: here.Module{
Main: true,
Path: "app",
Dir: dir,
GoMod: filepath.Join(dir, "go.mod"),
GoVersion: runtime.Version(),
},
},
}
if err := os.MkdirAll(dir, 0755); err != nil {
return nil, err
}
b, err = ioutil.ReadFile(filepath.Join(root, "go.mod"))
if err != nil {
return nil, err
}
f, err := os.Create(filepath.Join(dir, "go.mod"))
if err != nil {
return nil, err
}
if _, err := f.Write(b); err != nil {
return nil, err
}
if err := f.Close(); err != nil {
return nil, err
}
// c := exec.Command("cp", "-rv", root, dir)
// fmt.Println(strings.Join(c.Args, " "))
// c.Stdout = os.Stdout
// c.Stderr = os.Stderr
// c.Stdin = os.Stdin
// if err := c.Run(); err != nil {
// return nil, err
// }
return ref, nil
}

24
pkging/pkgtest/remove.go Normal file
View File

@ -0,0 +1,24 @@
package pkgtest
import (
"testing"
"github.com/markbates/pkger/pkging"
"github.com/stretchr/testify/require"
)
func RemoveTest(t *testing.T, ref *Ref, pkg pkging.Pkger) {
r := require.New(t)
name := "/go.mod"
_, err := LoadFile(name, ref, pkg)
r.NoError(err)
_, err = pkg.Stat(name)
r.NoError(err)
r.NoError(pkg.Remove(name))
_, err = pkg.Stat(name)
r.Error(err)
}

View File

@ -0,0 +1,23 @@
package pkgtest
import (
"testing"
"github.com/markbates/pkger/pkging"
"github.com/stretchr/testify/require"
)
func RemoveAllTest(t *testing.T, ref *Ref, pkg pkging.Pkger) {
r := require.New(t)
name := "/public/assets"
r.NoError(pkg.MkdirAll(name, 0755))
_, err := pkg.Stat(name)
r.NoError(err)
r.NoError(pkg.RemoveAll(name))
_, err = pkg.Stat(name)
r.Error(err)
}

25
pkging/pkgtest/stat.go Normal file
View File

@ -0,0 +1,25 @@
package pkgtest
import (
"os"
"path/filepath"
"testing"
"github.com/markbates/pkger/pkging"
"github.com/stretchr/testify/require"
)
func StatTest(t *testing.T, ref *Ref, pkg pkging.Pkger) {
r := require.New(t)
_, err := LoadFile("/go.mod", ref, pkg)
r.NoError(err)
osi, err := os.Stat(filepath.Join(ref.Dir, "go.mod"))
r.NoError(err)
psi, err := pkg.Stat("/go.mod")
r.NoError(err)
CmpFileInfo(t, osi, psi)
}

View File

@ -1,546 +0,0 @@
package pkgtest
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"reflect"
"runtime"
"strings"
"testing"
"github.com/markbates/pkger/here"
"github.com/markbates/pkger/pkging"
"github.com/markbates/pkger/pkging/pkgutil"
"github.com/stretchr/testify/require"
)
const mould = "/easy/listening/sugar.file"
const hart = "/easy/listening/grant.hart"
const husker = "github.com/husker/du"
type Suite struct {
Name string
gen func() (pkging.Pkger, error)
}
func (s Suite) Make() (pkging.Pkger, error) {
if s.gen == nil {
return nil, fmt.Errorf("missing generator function")
}
return s.gen()
}
func NewSuite(name string, fn func() (pkging.Pkger, error)) (Suite, error) {
suite := Suite{
Name: name,
gen: fn,
}
return suite, nil
}
func (s Suite) Test(t *testing.T) {
rv := reflect.ValueOf(s)
rt := rv.Type()
if rt.NumMethod() == 0 {
t.Fatalf("something went wrong wrong with %s", s.Name)
}
for i := 0; i < rt.NumMethod(); i++ {
m := rt.Method(i)
if !strings.HasPrefix(m.Name, "Test_") {
continue
}
s.sub(t, m)
}
}
func (s Suite) Run(t *testing.T, name string, fn func(t *testing.T)) {
t.Run(name, func(st *testing.T) {
fn(st)
})
}
func (s Suite) sub(t *testing.T, m reflect.Method) {
name := fmt.Sprintf("%s/%s", s.Name, m.Name)
s.Run(t, name, func(st *testing.T) {
m.Func.Call([]reflect.Value{
reflect.ValueOf(s),
reflect.ValueOf(st),
})
})
}
func (s Suite) Test_Create(t *testing.T) {
r := require.New(t)
pkg, err := s.Make()
r.NoError(err)
cur, err := pkg.Current()
r.NoError(err)
ip := cur.ImportPath
table := []struct {
in string
}{
{in: mould},
{in: ":" + mould},
{in: ip + ":" + mould},
}
for _, tt := range table {
s.Run(t, tt.in, func(st *testing.T) {
r := require.New(st)
pt, err := pkg.Parse(tt.in)
r.NoError(err)
r.NoError(pkg.MkdirAll(filepath.Dir(pt.Name), 0755))
f, err := pkg.Create(pt.Name)
r.NoError(err)
r.Equal(pt.String(), f.Name())
fi, err := f.Stat()
r.NoError(err)
r.NoError(f.Close())
r.Equal(filepath.Base(pt.Name), fi.Name())
r.NotZero(fi.ModTime())
r.NoError(pkg.RemoveAll(pt.String()))
})
}
}
func (s Suite) Test_Create_No_MkdirAll(t *testing.T) {
r := require.New(t)
pkg, err := s.Make()
r.NoError(err)
cur, err := pkg.Current()
r.NoError(err)
ip := cur.ImportPath
table := []struct {
in string
}{
{in: mould},
{in: ":" + mould},
{in: ip + ":" + mould},
{in: filepath.Dir(mould)},
{in: ":" + filepath.Dir(mould)},
{in: ip + ":" + filepath.Dir(mould)},
}
for _, tt := range table {
s.Run(t, tt.in, func(st *testing.T) {
r := require.New(st)
pkg, err := s.Make()
r.NoError(err)
pt, err := pkg.Parse(tt.in)
r.NoError(err)
_, err = pkg.Create(pt.Name)
r.Error(err)
})
}
}
func (s Suite) Test_Current(t *testing.T) {
r := require.New(t)
pkg, err := s.Make()
r.NoError(err)
info, err := pkg.Current()
r.NoError(err)
r.NotZero(info)
}
func (s Suite) Test_Info(t *testing.T) {
r := require.New(t)
pkg, err := s.Make()
r.NoError(err)
cur, err := pkg.Current()
r.NoError(err)
info, err := pkg.Info(cur.ImportPath)
r.NoError(err)
r.NotZero(info)
}
func (s Suite) Test_MkdirAll(t *testing.T) {
r := require.New(t)
pkg, err := s.Make()
r.NoError(err)
cur, err := pkg.Current()
r.NoError(err)
ip := cur.ImportPath
table := []struct {
in string
}{
{in: mould},
{in: ":" + mould},
{in: ip + ":" + mould},
{in: filepath.Dir(mould)},
{in: ":" + filepath.Dir(mould)},
{in: ip + ":" + filepath.Dir(mould)},
}
for _, tt := range table {
s.Run(t, tt.in, func(st *testing.T) {
r := require.New(st)
pkg, err := s.Make()
r.NoError(err)
pt, err := pkg.Parse(tt.in)
r.NoError(err)
dir := filepath.Dir(pt.Name)
r.NoError(pkg.MkdirAll(dir, 0755))
fi, err := pkg.Stat(dir)
r.NoError(err)
if runtime.GOOS == "windows" {
dir = strings.Replace(dir, "\\", "/", -1)
}
r.Equal(filepath.Base(dir), fi.Name())
r.NotZero(fi.ModTime())
r.NoError(pkg.RemoveAll(pt.String()))
})
}
}
func (s Suite) Test_Open_File(t *testing.T) {
r := require.New(t)
pkg, err := s.Make()
r.NoError(err)
cur, err := pkg.Current()
r.NoError(err)
ip := cur.ImportPath
table := []struct {
in string
}{
{in: mould},
{in: ":" + mould},
{in: ip + ":" + mould},
{in: hart},
}
for _, tt := range table {
s.Run(t, tt.in, func(st *testing.T) {
r := require.New(st)
pkg, err := s.Make()
r.NoError(err)
pt, err := pkg.Parse(tt.in)
r.NoError(err)
r.NoError(pkg.RemoveAll(pt.String()))
r.NoError(pkg.MkdirAll(filepath.Dir(pt.Name), 0755))
body := "!" + pt.String()
pkgutil.WriteFile(pkg, tt.in, []byte(body), 0644)
f, err := pkg.Open(tt.in)
r.NoError(err)
r.Equal(pt.Name, f.Path().Name)
b, err := ioutil.ReadAll(f)
r.NoError(err)
r.Equal(body, string(b))
b, err = pkgutil.ReadFile(pkg, tt.in)
r.NoError(err)
r.Equal(body, string(b))
r.NoError(f.Close())
})
}
}
func (s Suite) Test_Parse(t *testing.T) {
r := require.New(t)
pkg, err := s.Make()
r.NoError(err)
cur, err := pkg.Current()
r.NoError(err)
ip := cur.ImportPath
table := []struct {
in string
exp here.Path
}{
{in: mould, exp: here.Path{Pkg: ip, Name: mould}},
{in: filepath.Join(cur.Dir, mould), exp: here.Path{Pkg: ip, Name: mould}},
{in: ":" + mould, exp: here.Path{Pkg: ip, Name: mould}},
{in: ip + ":" + mould, exp: here.Path{Pkg: ip, Name: mould}},
{in: ip, exp: here.Path{Pkg: ip, Name: "/"}},
{in: ":", exp: here.Path{Pkg: ip, Name: "/"}},
{in: husker + ":" + mould, exp: here.Path{Pkg: husker, Name: mould}},
{in: husker, exp: here.Path{Pkg: husker, Name: "/"}},
{in: husker + ":", exp: here.Path{Pkg: husker, Name: "/"}},
}
for _, tt := range table {
s.Run(t, tt.in, func(st *testing.T) {
r := require.New(st)
pt, err := pkg.Parse(tt.in)
r.NoError(err)
r.Equal(tt.exp, pt)
})
}
}
func (s Suite) Test_Stat_Error(t *testing.T) {
r := require.New(t)
pkg, err := s.Make()
r.NoError(err)
cur, err := pkg.Current()
r.NoError(err)
ip := cur.ImportPath
table := []struct {
in string
}{
{in: hart},
{in: ":" + hart},
{in: ip},
{in: ip + ":"},
{in: ip + ":" + hart},
}
for _, tt := range table {
s.Run(t, tt.in, func(st *testing.T) {
r := require.New(st)
pt, err := pkg.Parse(tt.in)
r.NoError(err)
r.NoError(pkg.RemoveAll(pt.String()))
_, err = pkg.Stat(tt.in)
r.Error(err)
})
}
}
func (s Suite) Test_Stat_Dir(t *testing.T) {
r := require.New(t)
app, err := App()
r.NoError(err)
exp, err := os.Stat(filepath.Join(app.Info.Dir, "public"))
r.NoError(err)
pkg, err := s.Make()
r.NoError(err)
r.NoError(s.LoadFolder(pkg))
act, err := pkg.Stat("/public")
r.NoError(err)
r.Equal(exp.Name(), act.Name())
r.Equal(exp.Size(), act.Size())
r.Equal(exp.Mode(), act.Mode())
r.Equal(exp.IsDir(), act.IsDir())
r.NotZero(act.ModTime())
}
func (s Suite) Test_Stat_File(t *testing.T) {
r := require.New(t)
app, err := App()
r.NoError(err)
exp, err := os.Stat(filepath.Join(app.Info.Dir, "go.mod"))
r.NoError(err)
pkg, err := s.Make()
r.NoError(err)
r.NoError(s.LoadFolder(pkg))
act, err := pkg.Stat("/go.mod")
r.NoError(err)
r.Equal(exp.Name(), act.Name())
r.Equal(exp.Size(), act.Size())
r.Equal(exp.Mode(), act.Mode())
r.Equal(exp.IsDir(), act.IsDir())
r.NotZero(act.ModTime())
}
func (s Suite) Test_Walk(t *testing.T) {
r := require.New(t)
pkg, err := s.Make()
r.NoError(err)
r.NoError(s.LoadFolder(pkg))
app, err := App()
r.NoError(err)
table := []struct {
in string
exp []string
}{
{in: "/", exp: app.Paths.Root},
{in: "/public", exp: app.Paths.Public},
}
for _, tt := range table {
s.Run(t, tt.in, func(st *testing.T) {
tdir, err := ioutil.TempDir("", "")
r.NoError(err)
defer os.RemoveAll(tdir)
r.NoError(s.WriteFolder(tdir))
var goact []string
err = filepath.Walk(filepath.Join(tdir, tt.in), func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
path = strings.TrimPrefix(path, tdir)
if path == "" || path == "." {
path = "/"
}
pt, err := pkg.Parse(path)
if err != nil {
return err
}
goact = append(goact, pt.String())
return nil
})
r.NoError(err)
r.Equal(tt.exp, goact)
r := require.New(st)
var act []string
err = pkg.Walk(tt.in, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
act = append(act, path)
return nil
})
r.NoError(err)
r.Equal(tt.exp, act)
})
}
}
func (s Suite) Test_Remove(t *testing.T) {
r := require.New(t)
pkg, err := s.Make()
r.NoError(err)
cur, err := pkg.Current()
r.NoError(err)
ip := cur.ImportPath
table := []struct {
in string
}{
{in: "/public/images/img1.png"},
{in: ":/public/images/img1.png"},
{in: ip + ":/public/images/img1.png"},
}
for _, tt := range table {
s.Run(t, tt.in, func(st *testing.T) {
r := require.New(st)
pkg, err := s.Make()
r.NoError(err)
r.NoError(s.LoadFolder(pkg))
_, err = pkg.Stat(tt.in)
r.NoError(err)
r.NoError(pkg.Remove(tt.in))
_, err = pkg.Stat(tt.in)
r.Error(err)
r.Error(pkg.Remove("unknown"))
})
}
}
func (s Suite) Test_RemoveAll(t *testing.T) {
r := require.New(t)
pkg, err := s.Make()
r.NoError(err)
cur, err := pkg.Current()
r.NoError(err)
ip := cur.ImportPath
table := []struct {
in string
}{
{in: "/public"},
{in: ":/public"},
{in: ip + ":/public"},
}
for _, tt := range table {
s.Run(t, tt.in, func(st *testing.T) {
r := require.New(st)
pkg, err := s.Make()
r.NoError(err)
r.NoError(s.LoadFolder(pkg))
_, err = pkg.Stat(tt.in)
r.NoError(err)
r.NoError(pkg.RemoveAll(tt.in))
_, err = pkg.Stat(tt.in)
r.Error(err)
})
}
}

View File

@ -0,0 +1,19 @@
package actions
import (
"fmt"
"io"
"os"
"github.com/markbates/pkger"
)
func WalkTemplates(w io.Writer) error {
return pkger.Walk("/templates", func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
_, err = w.Write([]byte(fmt.Sprintf("%s\n", path)))
return err
})
}

View File

@ -0,0 +1,133 @@
.container {
min-width: 320px;
}
header {
background-color: #62a5ee;
padding: 10px 20px;
box-sizing: border-box;
}
.logo {
img {
width: 80px;
}
}
.titles {
h1 {
font-size: 30px;
font-weight: 300;
color: white;
margin-bottom: 13px;
margin-top: 5px;
}
h2 {
font-weight: 300;
font-size: 18px;
display: inline-block;
margin: 0;
}
a {
color: white;
text-decoration: underline;
}
i {
margin-right: 5px;
text-decoration: none;
}
.documentation {
margin-left: 28px;
}
}
.subtitle {
color: white;
margin: 0;
padding: 13px 0;
background-color: #2a3543;
margin-bottom: 20px;
h3 {
font-size: 22px;
font-weight: 400;
margin: 0;
}
}
table {
font-size: 14px;
&.table tbody tr td {
border-top: 0;
padding: 10px;
}
}
.foot {
text-align: right;
color: #c5c5c5;
font-weight: 300;
a {
color: #8b8b8b;
text-decoration: underline;
}
}
.centered {
text-align: center;
}
@media all and (max-width: 770px) {
.titles {
h1 {
font-size: 25px;
margin: 15px 0 5px 0;
}
}
}
@media all and (max-width: 640px) {
.titles {
h1 {
font-size: 23px;
margin: 15px 0 5px 0;
}
h2 {
font-size: 15px;
}
.documentation {
margin-left: 10px;
}
}
}
@media all and (max-width: 530px) {
.titles {
h1 {
font-size: 20px;
margin: 5px 0;
}
.documentation {
margin-left: 0px;
margin-top: 5px;
display: block;
}
}
.logo {
padding: 0;
img {
width: 100%
}
}
}

View File

@ -0,0 +1,4 @@
@import "~bootstrap/scss/bootstrap.scss";
@import "~@fortawesome/fontawesome-free/css/all.min.css";
@import "buffalo";

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,721 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Buffalo_x5F_Gopher" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 900 900" enable-background="new 0 0 900 900" xml:space="preserve">
<g>
<path fill="none" stroke="#211915" stroke-width="16" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M168.4,188c69-72,165.9-117.3,273.3-117.3C651.2,70.7,821,240.4,821,449.8C821,659.3,651.2,829,441.7,829
C232.3,829,62.5,659.2,62.5,449.8l-0.2,0c-0.1-1.1,0.1-2.2,0-3.2c-1.7-27.6-3.4-55.2-5.1-82.8c-0.7-11.6-1.6-23.1-2.1-34.7
c-0.2-3.6-0.6-7.2-0.3-10.7c0.9-13.3,12.8-11,24.1-13.5c0,0,0-87.7,0-87.7s0.8-15,24.2-15L127,188h9.4l-0.5-20.2
c0,0-7.2-0.7-7.9-6.7c0,0-0.7-5.4,1.6-6.4c0,0,2.4-1.6,2.4,5.9c0,0,1.2,2.6,3,2.6l0.2-19.4c0,0,0.2-3.2,2.7-3.2
c0,0,3.1-0.7,3.1,2.7c0,0,0,27.4,0,27.6c0,0.2,3.1-1.6,3.3-2c0.6-1,0.4-2.4,0.5-3.5c0.1-1.8-0.1-8.4,1.6-8.8
c2.2-0.6,2.7,3.2,2.8,4.8c0.3,3.5-0.2,8-2.6,10.9c-0.4,0.5-4.6,3.6-4.6,3.2c0,0-0.7,12.7-0.7,12.7h0.3H168.4z"/>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="494.644" y1="540.6563" x2="494.644" y2="70.5313">
<stop offset="0" style="stop-color:#D17C56"/>
<stop offset="0.4089" style="stop-color:#D0805B"/>
<stop offset="1" style="stop-color:#B2E6EA"/>
</linearGradient>
<path fill="url(#SVGID_1_)" d="M168.3,187c69-71.8,166-116.4,273.4-116.4C651.2,70.5,821,240.3,821,449.8c0,24.3-2.3,48.1-6.7,71.2
l-151.9,7.4l-63.2,12.3L181.9,230.2L168.3,187z"/>
<polygon fill="#AF7133" points="764.3,649 645.2,607.4 574.6,597.2 578.2,548 625.4,538.5 638.4,538.5 809.4,538.8 809.4,541.5
805.7,556.7 798.1,579.7 788,606.2 779.7,620.5 772.9,634.6 "/>
<polygon fill="#AF7133" points="62.3,448.3 55.2,332.5 54.7,318.3 56.1,313 58.6,309.7 64.1,307.2 75.7,305.4 78.7,304.8
78.4,266.1 78.4,228.5 79.2,215.5 82.6,208.9 88.7,204.3 98,201.8 101.9,201.5 109.9,197.4 127,187 181.9,187.5 202.6,176.4
217.8,175.5 248.9,173.6 258.2,173.1 268.8,178.1 275.9,183 283.2,190.4 285.2,203.6 290.3,302.5 287.4,449.8 291.4,561.8
297.1,624.2 271.1,629.4 160.1,651.5 125.2,658.6 117.2,646.1 104.9,624.2 92.4,597.5 77.9,557.1 72.1,535 68.7,518.5 65.6,498.2
63.5,477.8 62.8,459.5 "/>
<polygon fill="#7B3D24" points="764.8,648.5 643.8,607.5 574.8,596.1 294.7,624.7 125.2,658.6 141.7,681.7 154.8,697.7 181.9,726
227.5,762.7 261.6,783.5 316.2,807.7 359.8,820.1 382,824.3 412.7,827.9 439.1,829 454.4,829 482.9,826.8 518.3,821.2 543.9,815.1
566.1,808.1 595.4,796.5 612.4,788.5 621.6,783.7 649.3,767.2 668.1,754.1 694.8,732.2 712.8,715 734.5,690.8 751.3,668.8 "/>
<path fill="#AF7133" d="M305.9,673.9l-53.1,1.8l20.8,73.5l28.7,6l48.7,1.3h83.3l15-3c0,0,36.7-9.5,37.7-9.5
c1,0,61.4-15.4,61.4-15.4l76.9-19.2v-19l-24.8-26.3l-49.2-6.9L305.9,673.9z"/>
<path fill="#BC9E6C" d="M533.5,231.3l-10.1-4.3h-14.3l-25.7-6h-34.6l-39.4,6h-51.6l-25.7,3.3c-26.8,15.8-41.1,46-52.2,73.8
c-8.9,22.4-19.3,45-21.9,69.2c-1.3,11.8-0.2,24.8,2.9,37.2l-2.1,2.1l-1.3,5.4l6.7,22.8l32.7,35.6l67.7,35.5l55.7,12.5l44.9-1.9
l23.7-14.7l66.2-31.5l30.4-14.3l16.3-42.7v-12l0.5-0.4c9.5-45.1-4.3-80.4-24.7-118.8c-12.4-23.3-21.6-43.6-45.7-57.9"/>
<path fill="#6AD7E5" d="M299.1,463.3c-19.8-66.4,11.8-149.6,89.2-149.4l47.1-1.4h41l-0.1,0.3c77.4-0.2,109,83,89.2,149.3l-12.4,8.4
l-26.4,19.6l-10.2,10.4h-15.1l-24.6,11.7l-14.4,6.1l-28.5,2.7l-33.3-0.9l-28.8-11.6L332.2,490l-25.7-19.4L299.1,463.3z"/>
<path fill="#F6D2A2" d="M406.2,438.7c4.5-2.6,10.4-5.5,15.7-5.1c5.1,0.4,10.1,1.6,15.2,2.4c4.8,0.8,9.3,0.8,13.9,2.6
c4.6,1.8,9,4.9,12.1,8.7c3.6,4.5,1.6,11.4-3.7,14.5c-9.8,5.8-18.4-5.6-28.3-5.5c-9.5,0.1-18.1,9.1-27.3,1.3
C397.8,452.6,400.3,442.1,406.2,438.7z"/>
<path fill="#FFFFFF" d="M443.5,474.3c4.4-1.2,5.2-6.8,3.9-10.7c-1.6-5-8.2-8.4-13.4-5.9c-4.3,2-2.8,6.4-2.9,11.4
C430.9,475.8,438.5,475.6,443.5,474.3z"/>
<path fill="#FFFFFF" d="M412.3,461.6c1.7,0.5,3.6,0,5.3-0.6c3.3-1.2,9.3-5.8,11.6-3.9c2.7,2.1,1.5,15.5,0.8,15.9
c-3.4,2-8.4,2.9-13.3,1.3c-5.9-1.9-3.6-7-3.5-10.8c0-0.6,0.4-1.1,0.3-1.7"/>
<ellipse transform="matrix(0.128 -0.9918 0.9918 0.128 45.5048 835.4331)" fill="#FFFFFF" cx="497.8" cy="391.8" rx="49" ry="49"/>
<ellipse transform="matrix(0.128 -0.9918 0.9918 0.128 -72.0028 704.4983)" fill="#FFFFFF" cx="364.6" cy="393.2" rx="49" ry="49"/>
<ellipse transform="matrix(0.128 -0.9918 0.9918 0.128 7.9834 574.7572)" fill="#FFFFFF" cx="330.8" cy="282.8" rx="24.3" ry="24.3"/>
<path fill="#726958" d="M294.2,271.6c-5.3-1.7-11.7-13.6-14.2-18.3c-5.1-9.2-8.4-19.4-9-30c-0.3-5.5,0.1-17.7,7.4-19.5
c9.1-2.3,14.1,11.7,20.6,15.8c9.3,5.9,21.7,4.5,32,2.4c0,0,0.7,4.5,0.8,4.8c0.1,0.9,0.7,2.3,0.5,3.1c-0.2,1.1-2,1.6-2.9,2.1
c-3.2,1.7-6,3.6-8.9,5.8c-1.9,1.5-3.5,3.2-5.2,5c-0.8,0.8-1.6,1.5-2.3,2.4c-0.7,0.9-1.3,1.9-2,2.8c-1.9,2.1-3.2,4.6-4.9,6.8
c-1.4,1.7-3,3.5-4,5.5c-1,1.9-2.4,3.7-3.2,5.6c-0.5,1.3-0.7,2.5-1.8,3.5C296,270.3,295,270.9,294.2,271.6z"/>
<path fill="#BC9E6C" d="M259.4,518c-6.9,4-17,12.8-21.8,17.6c-2.6,2.6-11.7,10.7-13,14.3c-2.5,6.8,7.5,2.5,8.8,8.6
c1.5,6.9-5.1,11,5.3,10.7c5.8-0.2,11.4-2.1,16.7-4c8.7-3.2,20.5-5.3,30.2-10.6l0.2-4l0.2-3.6l-8.3-8.3l-10.3-17.8l-2.7-2.8H259.4z"
/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M317.5,664.9c-8.3,6.8-16.6,13.6-20.8,23.6c-5,11.8-0.9,27.8,13.1,28.6c9.8,0.5,27-6.3,35.6-10.5c8.8-4.3,23.5-13.1,31.8-18.9"/>
<path fill="#BC9E6C" d="M283.3,259c-6.4,0-28.9,8-30.7,14.9c-3.2,12.2,24.7,15.7,32.6,17.2l8.9-19.5L283.3,259z"/>
<ellipse transform="matrix(0.9918 -0.128 0.128 0.9918 -31.8144 70.6109)" fill="#FFFFFF" cx="533.5" cy="282.8" rx="24.3" ry="24.3"/>
<path fill="#726958" d="M533.5,222.1c10.2,2.1,22.6,3.5,32-2.3c6.5-4.1,11.6-18.1,20.6-15.8c7.2,1.8,7.7,14,7.3,19.6
c-0.6,10.5-4,20.7-9,30c-2.6,4.7-9.7,17.1-15,18.7l-10.3-13.7l-11-15.8l-12.1-10.1l-3.6-2.7L533.5,222.1"/>
<path fill="#BC9E6C" d="M286,546.9c-2.6,33.1,6.4,70.2,20.1,100.1c6,13.2,15.1,24.5,28.5,30.6c21.6,9.8,46.8,10.5,70.1,11.8
c9.1,0.5,21,1.2,29.2,1.4c8.3-0.2,16.6-0.9,25.7-1.4c23.3-1.4,48.5-2,70.1-11.8c13.4-6.1,22.5-17.4,28.5-30.6
c13.7-29.9,22.6-67,20.1-100.1l-5.7,3.1l-14.7,3.2l-9.7,2.9l-6.4,17.7l-21.9,20.6l-19.4,3.1l-11.7,1.6l-7.5,7.5l-8.2-8.7l-8.4,8.4
L454,609l-28.3-1.8l-12.5,0.4l-18.5-9.1l-8.6,2.1l-16-4.2l-38.1-12.9l-12.2-14.2l-4.4-11.7l-9.6-2.5L286,546.9z"/>
<path fill="#BC9E6C" d="M604.9,518.3c6.9,4.3,17,12.7,21.8,17.4c2.6,2.6,11.7,10.6,13,14.2c2.5,6.8-7.5,2.4-8.8,8.5
c-1.5,6.9,5.1,11-5.3,10.7c-5.8-0.2-11.4-2.1-16.7-4.1c-8.7-3.2-20.5-5.3-30.2-10.6l-0.5-7.6l8.2-6.1l6.7-7.4l2.5-8.9l3.1-5.8
L604.9,518.3"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M546.8,664.9c8.3,6.8,16.6,13.6,20.8,23.6c5,11.8,0.9,27.8-13.1,28.6c-9.8,0.5-27-6.3-35.6-10.5c-8.8-4.3-23.5-13.1-31.8-18.9"/>
<path fill="#BC9E6C" d="M579.2,289.8c7.9-1.5,35.6-3.4,32.4-15.6c-1.8-6.9-24.2-15-30.6-15l-11.6,13L579.2,289.8z"/>
<path fill="#493628" d="M294.8,462.1c27.8-1.2,51.6,19.5,64.3,42l-7-10.7c14.2-2.2,32.2,4.7,41.5,16c10.4-3,16.9,0.6,20.6,5.3
c10.2-6.8,25.1-3.8,35,0c3.6-5,10.5-8.4,21.4-5.3c9.3-11.4,27.3-18.2,41.5-16l-7,10.7c12.7-22.6,36.5-43.3,64.3-42
c18.5-14.8,29.8-30.7,33-54.6l-0.5,3c31.9-6.5,36.9,118.6-6.8,107.6l3.5,0.6c-1.8,22.1-31.5,38.1-51.5,37.4l3.2,0.1
c-5.7,28.7-35.4,46.9-59.5,42.9c0,0.6-3.7,8.1-13,7.7c-7.4-0.3-3.8-6.7-7.3-10.7c-0.2,2.7-3.1,10.9-6.7,11.8
c-3.7,0.9-3.9,1.4-12.4-0.9c-0.7,11.1-7.6,27.4-16.7,34.5c-8.2-5.6-18-24.8-20.4-34.8c-4.6,3.2-7.8,3.6-12.1,0.1
c-2.4-1.9-8.3-8.2-8.5-10.8c-3.5,4,0,10.4-7.3,10.7c-4.5,0.2-9.9-5.7-10-10c-26.2-1.2-56.8-11.9-62.6-40.6l3.2-0.1
c-20,0.7-49.7-15.3-51.5-37.4l3.5-0.6c-43.7,11-40-114.1-8.1-107.6c2.3,9.1,5.7,17.9,10.3,25.5
C277.3,446.1,285.6,454.7,294.8,462.1z"/>
<path fill="#6E5128" d="M432.7,288.4c9.9-0.2,20.7-0.6,29.5,3.5c10.5,4.9,17.9,23.8,13,34.9c-4.8,11-16.3,17-27.5,19.7
c-18.9,4.5-49.7,0.8-58.7-19.7c-4.9-11.1,2.5-30,13-34.9C411.1,287.7,422.6,288.1,432.7,288.4"/>
<polygon fill="#5B5B5F" points="234.5,539 241.6,543.7 245.8,550.9 248,556.8 248,563.5 247.4,567.7 234.4,568.9 232.8,567.7
233.4,558.5 228.7,554.3 224.2,553.9 226.6,546.9 "/>
<polygon fill="#5B5B5F" points="621.4,543.9 625.4,540.7 628.9,538.9 633.4,542.6 640.1,549.8 639.6,553.3 635.6,555.1
630.8,556.7 630.2,563.4 631.5,567.7 625.6,569.2 616.7,567.7 615,564.5 615,557.5 616.4,550 "/>
<polygon fill="#BC9E6C" points="377.2,686.7 365.7,695 342.3,707.7 323.7,715 311.4,716.8 304.9,715.7 299.6,713.1 296,705.7
294.7,699.4 295.8,691 297.1,684.3 306,675.5 316.5,665.6 321.4,670.5 330.4,675.5 346.7,681.7 359.8,685.3 "/>
<path fill="#BC9E6C" d="M546.8,664.9c8.3,6.8,16.6,13.6,20.8,23.6c5,11.8,0.9,27.8-13.1,28.6c-9.8,0.5-27-6.3-35.6-10.5
c-8.8-4.3-23.5-13.1-31.8-18.9l9-1.1l18.4-3.6l17.6-6.6l11.4-8.1L546.8,664.9z"/>
<polygon fill="#5B5B5F" points="566.1,686.2 557.7,687.4 548.1,690.5 537.1,697.7 527.8,706.3 526,709.2 533.7,712.4 547.7,716.3
555.1,717 561.1,715.3 566.1,711.6 569.7,705.6 569,698.2 567.5,690.1 "/>
<polygon fill="#5B5B5F" points="297.1,684.3 307.6,687.3 318.3,692.1 331.2,701.6 339.1,709.5 326.4,713.9 311.4,716.8
304.9,715.7 299.6,713.1 294.7,701.6 293.4,695.3 296.2,688.8 "/>
<polygon fill="#AF7133" points="722.3,673.7 706.4,665.5 685.4,665.5 680.8,691.3 693.6,691 "/>
<polygon fill="#7B3D24" points="618.1,528.1 662.4,497.5 772.4,497.5 787.4,498 813.1,520.5 812.8,528.3 809.4,538.8 727.8,538.6
631.4,538.6 "/>
<polygon fill="#FFD6AC" points="647.5,608.8 808.1,548.1 806.4,554.1 654.9,611.3 "/>
<path fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M762.5,559v-6.2
c0,0-2.6-0.1-2.9-2.1c0,0-0.3-1.7,0.4-2.1c0,0,0.7-0.5,0.7,2c0,0,0.4,0.9,1,0.9l0-6.4c0,0,0.4-1.1,1.3-1.1c0,0,1.4-0.2,1.4,0.9
c0,0,0,9.1,0,9.1c0,0.1,0.6-0.5,0.7-0.7c0.2-0.3-0.1-0.8,0-1.2c0-0.6-0.1-2.8,0.4-2.9c0.7-0.2,0.8,1.1,0.9,1.6
c0.1,1.2,0.2,2.6-0.7,3.6c-0.1,0.2-1.3,1-1.3,0.9c0,0,0,3.7,0,3.7"/>
<path fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M754.5,626v-6.2
c0,0-2.6-0.1-2.9-2.1c0,0-0.3-1.7,0.4-2.1c0,0,0.7-0.5,0.7,2c0,0,0.4,0.9,1,0.9l0-6.4c0,0,0.4-1.1,1.3-1.1c0,0,1.4-0.2,1.4,0.9
c0,0,0,9.1,0,9.1c0,0.1,0.6-0.5,0.7-0.7c0.2-0.3-0.1-0.8,0-1.2c0-0.6-0.1-2.8,0.4-2.9c0.7-0.2,0.8,1.1,0.9,1.6
c0.1,1.2,0.2,2.6-0.7,3.6c-0.1,0.2-1.3,1-1.3,0.9c0,0,0,3.7,0,3.7"/>
<path fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M676.5,564v-6.2
c0,0,2-0.1,2.2-2.1c0,0,0-1.7-0.7-2.1c0,0-0.9-0.5-0.9,2c0,0-0.4,0.9-1,0.9l-0.1-6.4c0,0,0.2-1.1-0.6-1.1c0,0-0.8-0.2-0.8,0.9
c0,0,0,9.1,0,9.1c0,0.1-1.3-0.5-1.4-0.7c-0.2-0.3-0.3-0.8-0.3-1.2c0-0.6,0-2.8-0.6-2.9c-0.7-0.2-0.9,1.1-1,1.6
c-0.1,1.2,0.5,2.6,1.3,3.6c0.1,0.2,1.9,1,1.9,0.9c0,0,0,3.7,0,3.7"/>
<path fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M593.5,590v-6.2
c0,0,2-0.1,2.2-2.1c0,0,0-1.7-0.7-2.1c0,0-0.9-0.5-0.9,2c0,0-0.4,0.9-1,0.9l-0.1-6.4c0,0,0.2-1.1-0.6-1.1c0,0-0.8-0.2-0.8,0.9
c0,0,0,9.1,0,9.1c0,0.1-1.3-0.5-1.4-0.7c-0.2-0.3-0.3-0.8-0.3-1.2c0-0.6,0-2.8-0.6-2.9c-0.7-0.2-0.9,1.1-1,1.6
c-0.1,1.2,0.5,2.6,1.3,3.6c0.1,0.2,1.9,1,1.9,0.9c0,0,0,3.7,0,3.7"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M136.4,187l-0.5-19.8c0,0-7.2-0.3-7.9-6.3c0,0-0.7-5.3,1.6-6.3c0,0,2.4-1.5,2.4,5.9c0,0,1.2,2.6,3,2.6l0.2-19.4
c0,0,0.7-3.2,3.2-3.2c0,0,3.6-0.7,3.6,2.7c0,0,0,27.4,0,27.6c0,0.2,2.6-1.6,2.8-2c0.6-1,0.2-2.4,0.2-3.5c0.1-1.8-0.2-8.4,1.4-8.8
c2.2-0.6,2.6,3.2,2.7,4.8c0.3,3.5-0.2,8-2.6,10.9c-0.4,0.5-4.7,3.1-4.7,2.7c0,0-0.8,11.9-0.8,11.9"/>
<path fill="#ACDD00" d="M762,559v-6.2c0,0-2.4-0.1-2.6-2.1c0,0-0.2-1.7,0.5-2.1c0,0,0.8-0.5,0.8,2c0,0,0.4,0.9,1,0.9l0.1-6.4
c0,0,0.2-1.1,1-1.1c0,0,1.2-0.2,1.2,0.9c0,0,0,9.1,0,9.1c0,0.1,0.9-0.5,1-0.7c0.2-0.3,0.1-0.8,0.1-1.2c0-0.6-0.1-2.8,0.5-2.9
c0.7-0.2,0.9,1.1,0.9,1.6c0.1,1.2-0.1,2.6-0.9,3.6c-0.1,0.2-1.6,1-1.6,0.9c0,0,0,3.7,0,3.7H762z"/>
<path fill="#ACDD00" d="M754,626v-6.2c0,0-2.4-0.1-2.6-2.1c0,0-0.2-1.7,0.5-2.1c0,0,0.8-0.5,0.8,2c0,0,0.4,0.9,1,0.9l0.1-6.4
c0,0,0.2-1.1,1-1.1c0,0,1.2-0.2,1.2,0.9c0,0,0,9.1,0,9.1c0,0.1,0.9-0.5,1-0.7c0.2-0.3,0.1-0.8,0.1-1.2c0-0.6-0.1-2.8,0.5-2.9
c0.7-0.2,0.9,1.1,0.9,1.6c0.1,1.2-0.1,2.6-0.9,3.6c-0.1,0.2-1.6,1-1.6,0.9c0,0,0,3.7,0,3.7H754z"/>
<path fill="#ACDD00" d="M676,564v-6.2c0,0,2.2-0.1,2.4-2.1c0,0,0.1-1.7-0.6-2.1c0,0-0.8-0.5-0.8,2c0,0-0.4,0.9-1,0.9l-0.1-6.4
c0,0,0-1.1-0.9-1.1c0,0-1-0.2-1,0.9c0,0,0,9.1,0,9.1c0,0.1-1.1-0.5-1.1-0.7c-0.2-0.3-0.1-0.8-0.2-1.2c0-0.6,0-2.8-0.5-2.9
c-0.7-0.2-0.9,1.1-0.9,1.6c-0.1,1.2,0.2,2.6,1,3.6c0.1,0.2,1.7,1,1.7,0.9c0,0,0,3.7,0,3.7H676z"/>
<path fill="#ACDD00" d="M593,590v-6.2c0,0,2.2-0.1,2.4-2.1c0,0,0.1-1.7-0.6-2.1c0,0-0.8-0.5-0.8,2c0,0-0.4,0.9-1,0.9l-0.1-6.4
c0,0,0-1.1-0.9-1.1c0,0-1-0.2-1,0.9c0,0,0,9.1,0,9.1c0,0.1-1.1-0.5-1.1-0.7c-0.2-0.3-0.1-0.8-0.2-1.2c0-0.6,0-2.8-0.5-2.9
c-0.7-0.2-0.9,1.1-0.9,1.6c-0.1,1.2,0.2,2.6,1,3.6c0.1,0.2,1.7,1,1.7,0.9c0,0,0,3.7,0,3.7H593z"/>
<path fill="#ACDD00" d="M136.4,187l-0.5-19.8c0,0-7.2-0.3-7.9-6.3c0,0-0.7-5.3,1.6-6.3c0,0,2.4-1.5,2.4,5.9c0,0,1.2,2.6,3,2.6
l0.2-19.4c0,0,0.7-3.2,3.2-3.2c0,0,3.6-0.7,3.6,2.7c0,0,0,27.4,0,27.6c0,0.2,2.6-1.6,2.8-2c0.6-1,0.2-2.4,0.2-3.5
c0.1-1.8-0.2-8.4,1.4-8.8c2.2-0.6,2.6,3.2,2.7,4.8c0.3,3.5-0.2,8-2.6,10.9c-0.4,0.5-4.7,3.1-4.7,2.7c0,0-0.8,11.9-0.8,11.9
L136.4,187z"/>
<radialGradient id="SVGID_2_" cx="737.6794" cy="406.1918" r="45.3992" gradientTransform="matrix(0.937 -0.3492 0.3492 0.937 -91.5873 282.9574)" gradientUnits="userSpaceOnUse">
<stop offset="0" style="stop-color:#C47826"/>
<stop offset="0" style="stop-color:#B55314"/>
<stop offset="0.8092" style="stop-color:#C98F31"/>
</radialGradient>
<path fill="url(#SVGID_2_)" d="M700,424.1c-2.6-6.1-4.2-13.1-3.9-20.2c1-25,22.1-44.5,47.2-43.4c25,1,44.5,22.1,43.4,47.2
c-0.7,16.4-11.4,32.5-25,39.3L700,424.1z"/>
<path fill="#FFFFFF" d="M705,234.9c0-0.2,1-0.4,1.7-0.5c2.6-0.4,5.2-0.4,7.8,0c4.1,0.6,7.9,2.2,11.2,4.8c4.6,3.7,7.4,9.1,9.1,14.7
c0,0,17.3-3,19.2,14c6.3,0,15.6-1.2,18.1,6.5c2.2,6.8-1.9,11.1-7,12.9c-2.2,0.8-4.6,1.2-6.7,1.1c-12.3-0.3-24.6-0.2-36.9,0
c-21.3-0.2-54.4-0.6-75.7,0c-2.2,0.1-4.5-0.3-6.7-1.1c-5.1-1.9-9.2-6.1-7-12.9c2.5-7.6,11.8-6.5,18.1-6.5c1.9-17,19.5-14,19.5-14
C676.9,229.4,705,234.9,705,234.9L705,234.9z"/>
<path fill="#FFFFFF" d="M380.7,167.5c-0.7,0-5.5,0-6.3,0c-21.3-0.2-54.4-0.6-75.7,0c-2.2,0.1-4.5-0.3-6.7-1.1
c-5.1-1.9-9.2-6.1-7-12.9c2.5-7.6,11.8-6.5,18.1-6.5c1.9-17,19.5-14,19.5-14c7.2-24.6,35.3-19,35.3-19v0c0-0.2,1-0.4,1.7-0.5
c2.6-0.4,5.2-0.4,7.8,0c4.1,0.6,7.9,2.2,11.2,4.8c4.6,3.7,7.4,9.1,9.1,14.7c0,0,17.3-3,19.2,14c7.1-3.8,12.9-0.8,16.2,3.4"/>
<path fill="#FFFFFF" d="M599.3,332.3c2.3-11.3,15-9.9,15-9.9h0c0-0.1,0.4-0.2,0.8-0.3c1.2-0.3,2.3-0.4,3.5-0.3
c1.9,0.1,3.6,0.7,5.2,1.7c2.2,1.5,3.7,3.8,4.6,6.2c0,0,7.6-2,9.1,5.5c2.8-0.2,6.9-1.1,8.3,2.2c1.3,3-0.4,5-2.6,6.1
c-0.9,0.4-2,0.7-3,0.8c-5.5,0.3-11,0.9-16.5,1.4c-6,0.5-14.1,1.1-21.6,1.7"/>
<path fill="#FFFFFF" d="M661.5,433c-1.9-0.2-3.7-0.4-5.6-0.6c-3.7-0.4-9.4-1.1-13.1-1.4c-0.4,0-0.8-0.1-1.1-0.3
c-0.9-0.4-1.5-1.2-1-2.4c0.6-1.3,2.2-0.9,3.3-0.8c0.6-2.9,3.6-2.1,3.6-2.1c1.7-4.1,6.5-2.6,6.5-2.6l0,0c0,0,0.2-0.1,0.3-0.1
c0.5,0,0.9,0,1.4,0.2c0.7,0.2,1.3,0.5,1.8,1c0.7,0.7,1.1,1.7,1.3,2.7c0,0,2.2-0.1,2.9,1.7"/>
<path fill="#493628" d="M508.6,255.4c0,1.2-0.3,2.8-0.5,4.2c-0.4,2.9-1.4,5.7-2.2,8.5c5.9-6.6,12.4-10.7,16.5-19.3
c4.6-9.6,11.1-15.9,11.1-26.7c-0.9-11.9-7-31.3-22.1-31.3c-4.4-9.4-17-17.2-24.2-15.5c-0.9-15.8-22.3-25.7-38.8-21.3l-0.1,0
c-8.3-6.8-20.1-8.6-31.2,0c-16.7-4.5-38.2,5.6-38.6,21.7c-6.9-2.6-20.9,5.2-25.5,15c-15.1,0-21.2,19.4-22.1,31.3
c0,10.8,6.5,17.1,11.1,26.7c4.1,8.7,10.6,12.8,16.5,19.3c-0.8-2.7-1.8-5.6-2.2-8.5c-0.2-1.4-0.5-3-0.5-4.2l0,0.1
c3.2,6.8,3.4,12.8,9.5,17.8c5.4,4.5,12,6.4,17.9,8.8c-1.2-2-2.4-10,0-13.3c1.4,7,20.1,16.5,27.3,15.3c-1.2,0-1.3-8.5-1.3-11.3
c6.4,0,16.9,6.7,23.1,10.2c6.2-3.5,16.6-10.3,23.1-10.2c0,2.8-0.1,11.4-1.3,11.3c7.3,1.1,25.9-8.3,27.3-15.3
c2.4,3.3,1.2,11.3,0,13.3c5.8-2.4,12.4-4.4,17.9-8.8C505.2,268.3,505.3,262.3,508.6,255.4"/>
<polygon fill="#AF7133" points="788,500.5 787.4,498 787.4,473.5 786.9,465.5 783.4,459.5 783.4,451.5 783.4,438.5 786.4,431.5
786.4,422.5 783.7,416.9 782.4,410.5 774.4,410.5 774.4,425.5 772.4,430.5 772.4,456.5 766.4,453.1 766.4,446.5 755.4,444.1
755.4,405.5 754.8,402.8 752.2,400.2 745.5,398.8 735.8,392.5 711.4,392.5 702.3,387.8 679.4,386.5 676.4,386.5 669.3,390.8
665.4,395.5 665.4,407.5 662.3,410.3 661.4,428.3 661.4,497.5 772.4,497.5 "/>
<polygon fill="#444242" points="433.2,512 433.1,512.5 431.4,515.4 431,518.2 431.8,521.7 432.8,520.5 433.9,518.2 433.5,516.5
433.5,513.3 433.9,512 "/>
<polygon fill="#444242" points="437.6,513.2 438.6,515.1 439.1,517.4 438.9,520.6 438.1,522.2 436.4,518.9 437.1,517.5
437.4,516.1 437.3,514 "/>
<polygon fill="#5B5B5F" points="435.4,520 436.5,522.1 438,525.7 439,530.5 439,532.5 438.4,533.7 437.1,534.8 435.6,535.1
433.9,534.7 432.7,533.5 432.2,532 432.9,526.4 433.9,523.5 435,520.9 435.3,520.6 435.1,519.7 433.9,518.3 432.1,522.2
430.4,526.7 429.4,531.1 429.6,533.8 430.3,535.4 432.1,536.5 433.9,536.8 436.2,536.8 438.4,536.2 439.8,535.1 440.5,534
440.7,532 440.5,529.6 439.4,525.4 436.9,519.3 436.4,518.9 "/>
<polygon fill="#5B5B5F" points="433.7,512.9 433.5,514 433.5,516.5 434.6,519.1 435.4,520 436.4,518.9 437.1,517.5 437.4,516.1
437.2,513.2 "/>
<polygon fill="#726958" points="435.3,520.4 434.1,523.4 433,528.3 433,530.5 433.5,529.7 434.6,529 435.6,528.8 437.3,529.4
438.4,530.5 438.1,528.3 437.6,525.3 436.4,522.3 "/>
<circle fill="#444242" cx="435.4" cy="532" r="3.2"/>
<rect x="432" y="536" fill="#727176" width="8" height="104"/>
<path fill="#444242" d="M435,542h-3c0,0,0-5.5,0-5.5c0-0.2,0.9,0.2,0.9,0.2c0.4,0.2,0.7,0.3,1.2,0.4c0.5,0.1,0.7,0.1,0.7,0.6
c0,0.7,0.2,1.4,0.2,2.1C435,540.6,435,542,435,542z"/>
<rect x="437" y="542" fill="#444242" width="3" height="4"/>
<rect x="437" y="550" fill="#444242" width="3" height="4"/>
<rect x="432" y="546" fill="#444242" width="3" height="4"/>
<rect x="432" y="554" fill="#444242" width="3" height="4"/>
<rect x="437" y="558" fill="#444242" width="3" height="4"/>
<rect x="437" y="566" fill="#444242" width="3" height="4"/>
<rect x="432" y="562" fill="#444242" width="3" height="4"/>
<rect x="432" y="570" fill="#444242" width="3" height="4"/>
<rect x="437" y="574" fill="#444242" width="3" height="4"/>
<rect x="437" y="582" fill="#444242" width="3" height="4"/>
<rect x="432" y="578" fill="#444242" width="3" height="4"/>
<rect x="432" y="586" fill="#444242" width="3" height="4"/>
<rect x="437" y="590" fill="#444242" width="3" height="4"/>
<rect x="437" y="598" fill="#444242" width="3" height="4"/>
<rect x="432" y="594" fill="#444242" width="3" height="4"/>
<rect x="432" y="602" fill="#444242" width="3" height="4"/>
<rect x="437" y="606" fill="#444242" width="3" height="4"/>
<rect x="437" y="614" fill="#444242" width="3" height="4"/>
<rect x="432" y="610" fill="#444242" width="3" height="4"/>
<rect x="432" y="618" fill="#444242" width="3" height="4"/>
<rect x="437" y="622" fill="#444242" width="3" height="4"/>
<rect x="437" y="630" fill="#444242" width="3" height="4"/>
<rect x="432" y="626" fill="#444242" width="3" height="4"/>
<rect x="432" y="634" fill="#444242" width="3" height="4"/>
<path fill="none" d="M569.8,218.1c-0.3-1.4,0.2-2.7,1.3-3.3"/>
<path fill="none" d="M197.9,758.5c-1.9,0-3.6-0.4-5.5-0.2"/>
<path fill="none" d="M189.4,760c0.1-0.2,0.3-0.3,0.5-0.2"/>
<path opacity="0.2" d="M693.3,673.8c0.9,1.1,2.1,2,3,3.1c0.7,0.9,1.2,2.5,2.4,2.8c1.5,0.3,2.7-0.6,4.2,0c1.4,0.6,2.9,1.3,3.9,2.4
c-3.9,2.7-7.5,5.6-11.9,7.6c-1.4,0.6-2.5,0.5-3.9,0.8c-2.9,0.5-6.7,2.2-9.5,0.7c-0.1-1,0.2-2.2,0.2-3.3c0-3.2,0.8-6.3,1.6-9.3
c0.6-2.3,0.6-4.7,1-7c0.2-1.2,0.6-2.4,0.9-3.6c0.2-0.6,0.1-2,1-2.2c0.9-0.2,2.8,2.4,3.2,3C690.7,670.5,691.9,672.2,693.3,673.8z"/>
<path fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M154.5,242v54.4c0,0-13.7-3-13.7,25.7c0,0-7.3-3-7.3,12.1V419"/>
<line fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="78.5" y1="461" x2="78.5" y2="555"/>
<line fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="182.5" y1="394" x2="182.5" y2="647"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M658.4,520.5"/>
<path opacity="0.2" d="M754,626v7.6c0,0-2.6,0.1-2.9,2.1c0,0-0.2,1.7,0.7,2.1c0,0,1,0.5,1-2c0,0,0.5-0.9,1.2-0.9l0.1,6.4
c0,0-0.1,1.1,0.9,1.1c0,0,1.1,0.2,1.1-0.9c0,0,0-9.1,0-9.1c0-0.1,1.4,0.5,1.4,0.7c0.2,0.3,0.2,0.8,0.3,1.2c0.1,0.6,0,2.8,0.6,2.9
c0.9,0.2,1-1.1,1.1-1.6c0.1-1.2-0.4-2.6-1.3-3.6c-0.2-0.2-2.1-1-2.1-0.9c0,0,0-5.1,0-5.1"/>
<path opacity="0.2" d="M673.2,564.3l-1.5,7c0,0-2.3-0.4-3,1.5c0,0-0.4,1.7,0.4,2.2c0,0,0.9,0.7,1.4-1.7c0,0,0.7-0.7,1.4-0.6
l-1.3,6.3c0,0-0.6,1,0.4,1.2c0,0,0.7,0.4,1-0.7c0,0,1.9-8.8,2-8.9c0-0.1,1.5,0.9,1.5,1c0.2,0.4,0.2,0.9,0.1,1.2
c-0.1,0.6-0.5,2.7,0.1,3c0.8,0.4,1.3-0.8,1.4-1.3c0.3-1.1-0.1-2.7-0.8-3.9c-0.1-0.2-2.1-1.5-2.1-1.4c0,0,1-4.5,1-4.5"/>
<path opacity="0.2" d="M590.2,591.3c-0.5,1.2-1,2.3-1.4,3.5c-0.2,0.5-0.4,1-0.6,1.5c-0.1,0.1-0.3,0.4-0.3,0.5
c-0.1,0.5,0.7,0.5,1,0.5c0.2,0,0.4-0.2,0.6-0.2c0.3-0.1,0.6-0.1,0.9-0.1c0.3,0,0.7,0.1,1,0.2c0.3,0.1,0.5,0.2,0.8,0.3
c0.9,0.1-0.2-0.9-0.4-1.1c-0.1-0.1-1.1-1-1.1-0.9c0.2-0.7,0.6-1.4,0.9-2.1c0.3-0.8,0.9-1.8,1.5-2.4c0.3-0.4-1.7-0.5-1.7-0.5
C590.5,590.6,590.5,590.5,590.2,591.3z"/>
<path opacity="0.2" d="M762.1,559.2l-1.4,5.2c0,0-2.3-0.6-2.9,0.8c0,0-0.4,1.2,0.4,1.7c0,0,0.9,0.6,1.4-1.1c0,0,0.7-0.5,1.3-0.3
l-1.2,4.7c0,0-0.5,0.7,0.4,0.9c0,0,0.7,0.4,0.9-0.4c0,0,1.8-6.5,1.8-6.6c0-0.1,1.5,0.8,1.5,0.9c0.2,0.3,0.2,0.7,0.2,0.9
c-0.1,0.5-0.5,2,0.1,2.3c0.8,0.4,1.3-0.5,1.4-0.8c0.3-0.8-0.1-2.1-0.8-3c-0.1-0.2-2.1-1.4-2.1-1.3c0,0,0.9-3.3,0.9-3.3"/>
<line fill="none" x1="845" y1="521" x2="846" y2="521"/>
<path opacity="0.3" fill="#C47826" d="M599.4,524c6-0.9,16.9,7.9,21.1,11.9c7.3,6.8,5,15,10.4,22.4c0.7-3.5,4.2-3.7,7.4-3.4
c1.7-11.1-12.2-19.4-18.5-26.7c-2.3-2.7-3.6-4.8-6.9-6.6c-1.3-0.7-13.7-4.3-14-1c-0.1,1.7-0.3,4.2-0.1,5.4"/>
<path opacity="0.3" fill="#C47826" d="M686.7,269.8c2.9-0.4,5-2.5,8.1-2.6c4.2-0.1,8,2.3,12.3,2.6c7,0.5,13.8-3.3,20.7-1.9
c3.5,0.7,3.9,2.7,6.4,3.9c2.5,1.2,5.4,0.6,8,1.4c-0.8,5.6-12.6,4.2-15.9,2.8c-2.6-1.1-4.1-3.5-7-3.3c-2.2,0.2-5.5,2.3-8,2.7
c-2.9,0.6-6.2,0.9-9.1,1c-6.6,0.3-12.9-2.6-19.5-2.1c-4,0.3-9.8,2.8-11.7-2.7c2.7-0.1,4.9-0.9,7.4-1.4
C680.9,269.6,683.8,270.2,686.7,269.8z"/>
<path opacity="0.3" fill="#C47826" d="M744.8,255.3c-3.8-1.9-7-1.3-10.7,0.2c1.8,1,3.9,0.7,5.7,1.7c1.3,0.7,2.7,1.6,3.9,2.5
c1.3,1,2.4,2.3,3.2,3.7c0.2,0.4,1.9,4.5,1.6,4.5c6.9-1.1,4.8,8.9,0.9,11.3c-5.1,3.1-11.9,2.5-17.8,2.3c-15.1-0.6-30,3.6-45,3
c-13.3-0.5-32.7-2-37.4-17.8c-7,3.2-27.2,4.8-14.6,17.4c6.3,6.3,14.1,4.1,22.2,3.9c10.4-0.2,20.9-0.7,31.3,0.1
c14.3,1.2,28.8,2,43.1,1.4c7.3-0.3,14.4-1.5,21.5-2c5.6-0.5,13.1,1.3,17.2-3.6c3.4-4.1,2.9-12.8-2.3-15.1c-2.3-1-6.1-0.1-8.8-0.3
c-4.4-0.3-4.1-1.1-6.1-4.1C750.7,261.1,748.3,257,744.8,255.3z"/>
<path opacity="0.3" fill="#C47826" d="M731.5,246.1c0.4,0.9,1.4,2.3,1,3.2c-6.6-7.7-16.1-9.9-25.9-7.8c-2.8,0.6-3.9,2.8-6.8,2
c-4-1.1-7.9-2-12.1-1.6c-5.8,0.5-11.2,3.6-15.2,7.6c1.3-5.8,5.4-8.7,10.1-11.6c2.7-1.7,5.8-2.6,9-2.9c2.5-0.2,5.3-0.6,7.8-0.3
c2.4,0.3,4.2,1.3,6.6,0.8c2.5-0.5,5.2-0.7,7.8-0.5c4.9,0.4,10.5,2.4,13.6,6.3C728.6,242.9,730.6,244.4,731.5,246.1z"/>
<path opacity="0.3" fill="#C47826" d="M616.2,322.7c2.7,0,5.8,0.2,6.7,3.1c0.5,1.8,0.5,4.3,2,5.8c1.5,1.4,4.9-0.4,5.9,1.7
c0.8,1.6-1.9,3.5-3.1,4.3c-1.5,0.9-2.5,0.8-4.1,0.6c0.9,1.3,3.5,1,4,2.2c0.9,2-4.4,2.7-5.5,2.9c-4,0.8-8.2,1.1-11.7,3.3
c4.4-0.1,8.7-1,13-1.2c3.1-0.1,6.1,0,9.2-0.1c2.5-0.1,4.7-0.7,7.1-1c2.3-0.4,5.3,0,6.2-2.6c0.6-1.6,0.3-3.5-0.5-4.9
c-0.9-1.8-2-1.8-3.9-1.7c-0.9,0-2.3,0.8-3.1,0.5c-1.4-0.5-2.7-3.9-3.8-5c-1.2-1.2-2.8-1.2-4.3-1c-2,0.3-1.7,0.1-2.9-1.7
c-1.1-1.6-3.1-4-4.9-4.7c-2.1-0.9-5.6-1.7-7.4,0c0.8,0,1.7-0.4,2.5-0.1"/>
<path opacity="0.3" fill="#C47826" d="M357.5,115.2c7.3-0.6,13,3.6,18,8.3c5.3,5,3.4,9,3.2,15.5c5.2,0.2,16.1,2.7,10,10.1
c-4.6,5.5-11.1,3.2-16.4,1.1c4.7,3.1-4.7,7.9-7.2,9c-5.6,2.4-12.2,2.8-18.1,3.5c-5.7,0.7-11.7-0.5-17.4-1.1
c-5.8-0.6-11-0.7-16.3-3.5c-2.7-1.5-6.1-2.8-7.9-5.4c-1.1-1.6-0.8-4.2-2.4-5.2c-2.4-1.6-8.7-1-11.5-0.2c-3.5,1-7.1,3.5-7.6,7.3
c-2.4,17.9,26.2,11.1,35.2,12.2c14.2,1.8,28.9-0.3,43.1,0.3c4.1,0.2,10.9,1.1,14.7,0.3c4-0.9,5.4-6.8,9.2-8.9
c9.9-5.5,22.3-4.2,33.1-6.1c6.2-1.1,1.6-5.9-2.4-6.8c-1.9-0.4-4-0.7-6-0.2c-5.8,1.5-2.8-1.2-6-5.1c-2.2-2.6-6.5-7.4-10.2-7.7
c-2.6-0.2-5,1.6-7.2-0.3c-2.3-1.9-2.2-6.2-3.9-8.6c-1.7-2.4-4.5-5.7-6.8-7.6c-6.3-5.3-13.6-2.1-20.6-0.8c-0.1,0.4,0.2,0.4,0.2,0.8"
/>
<path opacity="0.3" fill="#C47826" d="M658.7,426.7c-0.4-0.1-1.3-2.1-1.6-2.5c-1-1.2-1.9-1.7-3.5-1.3c0.9,0.5,2.5,0.8,2.7,2.1
c0.2,1.6-1.2,1.7-2.4,2c2.2,1.4-3.4,2-4,2.1c-1.5,0.2-3.8-1.4-3.8-3.2c-1,0.1-1.2,0.8-2,1.2c-0.8,0.4-1.8,0.1-2.6,0.5
c-1.8,0.8-0.5,2.6,0.8,3.4c1.3,0.7,3,0.3,4.4,0.3c2,0,4,0.1,6,0.4c1.4,0.2,2.6,0.7,4.1,0.8c1.6,0.1,3.1,0.2,4.6,0.4
C662.2,430.2,661.9,427.1,658.7,426.7z"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M291.8,561.5c1.1,0,0.4,3.1,1.3,5.3"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M293.8,573.5c1.2,0.7,1.6,1.9,1.3,3.3"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="298" y1="566" x2="298" y2="570"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M571.8,562.1c0.1,3.2-0.4,6.2-0.7,9.3"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="566" y1="559" x2="566" y2="562"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M565.1,572.8c-0.1,1.8-0.3,3.6-0.7,5.3"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M510.4,694.1c3.1,2.4,7.4,2.4,10.7,4.7"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M517.1,691.5c-0.1,0.5,0.2,0.7,0.7,0.7"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M521.1,693.5c0.6,0.5,1.2,0.7,2,0.7"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M351.8,690.1c-0.6,1.3-1.9,2.3-3.3,2.7"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M357.8,693.5c-3.2,1.7-6.7,3.2-10,4.7"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="340" y1="696" x2="342" y2="696"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M304.4,713.5c2.8-6,7.2-18.7,14.7-20"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M559.8,713.5c-1.7-7.4-6.1-17-12.7-21.3"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M488,585.1c10.1,1.2,17.1-2.9,21.3-11.7c13.8,0.8,17.7-6.1,22.2-18.3"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M348.5,571.6c1.9,5.1,7.5,7.8,13.5,7.5"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M509,190.6c-5-3.7-12.8-1.7-13.8,5.8c-5.1-2.3-11.2-4.8-16.2,0.2"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M353,190.6c3.7-1.6,7.8-2,11.7-1.2c3.7,11.3,19.6-11.8,24.3,2.7"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M414.5,180.1c0-1.3,2.7-4,7.5-4.2c7.3-0.2,6.7,4.6,10.8,5.4c7.7,1.6,17.6-5.6,23.7,3.2"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M485,244.6c6.1-2.2,10.3-5.5,17.7-4.8c0.2-0.8,0.3-1.7,0.5-2.5c7.2,1,9.8-4.9,10.2-10.8"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M345.5,219.1c0.1,8.3,9.8,16.6,17.7,12.1c-1.7,11.8,9.6,12.2,18.3,11.8"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M401,228.1c12.7,10,28,18.1,44.7,9.2c4.3,10.1,22.6,3.4,25.8-4.7"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M413,210.1c5.5-2.3,11.8-1.5,18-1.5"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M487.9,175.8c-2.7-0.3-3,1.7-4.7,3c-1.5,1.2-4.6,0.2-5.4,1.2"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M447.8,155.6c-2.7-0.5-2.5,3-2.5,4.7"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M380,174.1c1.8,1.3,10.1,0.1,12.3,5.7c2.2,0.3,5,0.6,7.2,0.3"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M571.4,261.4c1.8-1.5,4.9-4.2,5.7-6.6"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M579.7,250.3c1.1-1.3,2-3.1,2-4.7"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M571.1,254.6c1.1-0.4,2.7-1.5,3.2-2.5"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M543.1,228.1c0.6,0.2,1.3,0.3,2,0.2"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M581.1,210c1.1-0.5,2.6-0.7,3.8-0.2"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M286.9,253.5c1.9,2.6,4.3,6.2,7,8"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M288.9,248.5c0.4,0.8,1.2,1.5,2,2"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M294.4,256c0.8,0.2,1.7,0.3,2.5,0.5"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M278.4,210.5c-2.2,0.8-2.8,4.2-2.5,6.5"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M311.9,229.5c1.2,0.7,3.2,0.5,5,0.5"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="322" y1="228" x2="324" y2="228"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="316" y1="233" x2="317" y2="233"/>
<path fill="none" d="M575.8,449.5c0,0,2.9-2,3.6-3"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M569.2,464.5c-0.8,1.1-1.4,2.2-1.8,3.6"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M617.2,457.3c3.7,18.6-2.9,38.5-15.6,52.2"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M575.4,447.8c1.3-2.5,3.4-4.4,4.6-6.9"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M584.6,435.7c1.8-2.1,3-4.8,3.5-7.5"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M577.7,435.7c0.7-0.8,1.3-1.8,1.7-2.9"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M533.4,241.8c0,0.2,1,1.2,2.3,1.7"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M532.2,248.1c0.2,0.4,0.4,0.7,0.6,1.2"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M539.7,246.4c2.7,0.4,5.2,2.3,7.5,4"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M325.1,240.7c-1.7,0.8-3.5,1.7-4,3.5"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M323.4,247.6c1.2-0.9,2.6-1.6,4-1.7"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M314.7,253.3c0.3-0.7,0.9-1.1,1.7-1.2"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M425.8,342.5c2,0.9,5.8,0.9,7.5,0"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M438.4,341.9c1.6,0.2,3.1,0,4.6-0.6"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="432" y1="336" x2="436" y2="336"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M276.2,430.5c0.1,2.5,2,4.9,3.5,6.3"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M283.1,442.6c0.3,1.5,1.3,2.8,2.9,3.5"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M282.5,434c0,0.8,0.4,1.5,1.2,1.7"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="276" y1="264" x2="277" y2="264"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="280" y1="264" x2="281" y2="264"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="278" y1="269" x2="280" y2="269"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M581.1,264.8c1,0.1,2-0.1,2.9-0.6"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="579" y1="270" x2="581" y2="270"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="588" y1="268" x2="589" y2="268"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M604.5,522.3c0.5,0.2,1,0.7,1.3,1.1"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M608.4,525.6c0.5,0.5,1.1,0.9,1.6,1.3"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M604.8,525.4c0.5,0.1,0.9,0.4,1.3,0.7"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M618.7,560.8c0.5,0.2,1,0.3,1.5,0.5"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="623" y1="562" x2="625" y2="562"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M630.1,545.9c1.2,0.7,2.3,2.1,3,3"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M228.5,549.8c0.7-0.8,1.8-1.6,3-2"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="238" y1="565" x2="240" y2="565"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M241.9,565.2c-0.4-0.4,0.3-0.5,1-0.5"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="239" y1="562" x2="241" y2="562"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M322.4,660.5c2.9,6.9,11.8,11.9,19,13"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M330.4,660.5c0.5,0.7,1.2,1,2,1"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="338" y1="665" x2="341" y2="665"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M415.4,680.5c8.2,0,21.6-2.4,28,1"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M514.4,673.5c4.8,0.7,8.8-2.2,13-4"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M535.4,665.5c1.3-0.8,2.6-1.4,4-2"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M526.4,661.5c1.9-0.1,3.3-0.4,5-1"/>
<circle fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" cx="435.4" cy="532" r="3.2"/>
<path fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M435.4,520.2
c0,0,3.2,4.8,3.2,11.4"/>
<path fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M435.4,520.2
c0,0-3.2,4.9-3.2,11.5"/>
<path fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M436.6,518.5
c0.2,0.4,0.7,1.8,1.1,2.8c0.4,1.1,0.9,2.2,1.3,3.3c1,2.8,2.2,6.2,1.4,9.2c-0.5,1.9-2.1,2.7-3.9,2.9c-2.1,0.3-5.2,0.2-6.4-1.8
c-0.9-1.5-0.8-3.5-0.5-5.2c0.3-1.7,0.8-3.4,1.4-5.1c0.4-1.1,0.9-2.2,1.3-3.3c0.5-1.1,1-2.2,1.5-3.3"/>
<path fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M433.2,512.6
c0,0-4.1,4-1.2,9.7"/>
<path fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M437,512.6
c0,0,4,4.1,1.1,9.7"/>
<path fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M433.9,512.9
c0,0-1.7,3.9,1.6,7.3"/>
<path fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M437,512.9
c0,0,1.7,3.9-1.6,7.3"/>
<line fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="431.2" y1="536" x2="430.9" y2="639.5"/>
<line fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="439.2" y1="535.7" x2="439.4" y2="639.5"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M479,529.6c7.3-11.8,17.8-9.6,29.8-12.2c1.1-12.7,13.7-21.7,25.4-16.4c2.1-8.8,10.1-13.9,18.3-10.3"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M273.5,483.1c6.6-1.4,18.7-5.7,25.6-3c8.5,3.4,7.8,11.6,15,15.1c4.5,2.3,13.1-2,19.8,2.5c7.2,4.8,11.4,10.9,11.9,19.6
c13.4,0.2,34.9-0.2,37.2,16.7"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M285.5,525.1c7.6,8.7,22.4,21.2,36,11.9c6.4,6.5,14.9,10.2,24,10.6"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M398.4,549.5c0.3,8.1-2,12.8,5.8,16.5c-3.8,10.5,3.8,15.5,14.2,15.5"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M476.4,545.5c2,11.4-4.8,19.2-16.3,20.1c10.5,3.5,9.7,16.9-2.9,22.4c5.8,8.1,1.6,10.7-2.8,17.5"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M245,472.6c-3.3-5.5-2.3-12.2,4.2-15.3c-2.7-6.3-1-10.2,3.3-14.7"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M542.4,531.5c11.1,1.5,30.3-8.1,30-24"/>
<path fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M285.5,205v-5.4c0-17.4-27-26.5-27-26.5l-55.8,3.1l-20.4,10.3H127l-23.9,14.8c-23.5,0-24.2,15.5-24.2,15.5s0,87.9,0,87.9
c-11.3,2.5-23.2,0.2-24.1,13.6c-0.2,3.5,0.2,7.2,0.3,10.8c0.5,11.6,1.4,23.1,2.1,34.7c1.7,27.6,3.4,55.2,5.1,82.8
c0.1,1.1,0.4,1.9,0.5,3"/>
<path fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M230.5,174v31.6c0,0-21,0-21,5.3c0,5.3,0,28.8,0,28.8V398"/>
<line fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="182.5" y1="187" x2="182.5" y2="334"/>
<path fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M154.5,242v54.4c0,0-13.7-3-13.7,25.7c0,0-7.3-3-7.3,12.1V419"/>
<polyline fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
102.5,201 102.5,276 98.3,282.9 100.4,330.5 "/>
<line fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="78.5" y1="461" x2="78.5" y2="555"/>
<line fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="111.5" y1="406" x2="111.5" y2="423"/>
<line fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="249.5" y1="215" x2="249.5" y2="342"/>
<line fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="182.5" y1="394" x2="182.5" y2="647"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M618.4,528.1l44.6-31.6v-86.2l3-2.8v-9.7c0-7.7,11.9-11.7,11.9-11.7l24.6,1.4l9,4.5h24.3l10,6.5c10.3,0,10.2,6.9,10.2,6.9v38.7
l11,2.3v6.7l6,3.3v-26l2-5V410h7.4l1.5,6.7l3,5.8v9l-3,7v21l4,7v32.7l25.1,20.9H659"/>
<polyline fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
665.8,407.1 679,417.8 679,453 "/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M681.1,386.6l0.8,13.7c0,0,9.1,0.1,9.1,2.5c0,2.3,0,12.7,0,12.7v9.5"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="711" y1="392" x2="711" y2="457"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M723,416v24.5c0,0,6.4-1.3,6.4,11.3c0,0,3.6-1.3,3.6,5.3V494"/>
<polyline fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
746,398 746,431.5 748.1,434.5 747.1,455.2 "/>
<polyline fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
772.8,456.4 777,462 777,483 "/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="766" y1="480" x2="766" y2="494"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="757" y1="453" x2="757" y2="494"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="742" y1="488" x2="742" y2="496"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="670" y1="467" x2="670" y2="496"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="691" y1="442" x2="691" y2="496"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="711" y1="483" x2="711" y2="496"/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="663" y1="497" x2="773" y2="497"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M628.8,538.8c0.6-0.6,180.6,0,180.6,0"/>
<polyline fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
553.4,658.4 602.3,664.8 627.5,690 627.5,709 "/>
<polyline fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
273.7,749.1 252.9,675.5 307.6,673.3 "/>
<path fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M253.3,675.5c3.2,0,50.2,54.6,50.2,54.6v24.4l-29.4-5.4"/>
<polyline fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
303,754.5 441.4,754.5 627.2,709 "/>
<polyline fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
395.3,717.7 344.9,723.9 302.9,730.1 "/>
<polyline fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
543.9,729.8 412.7,730 399.5,716.8 395.3,717.7 "/>
<line fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="399.5" y1="716.8" x2="390.1" y2="755"/>
<line fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="412.7" y1="730" x2="412.4" y2="755"/>
<polyline fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
764.8,648.5 641.7,606.8 574.8,596.1 "/>
<line fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="297.1" y1="624.2" x2="125.2" y2="658.6"/>
<path fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M705.5,234.9c0-0.2,0.7-0.4,1.4-0.5c2.6-0.4,5.1-0.4,7.7,0c4.1,0.6,7.9,2.2,11.1,4.8c4.6,3.7,7.4,9.1,9,14.7c0,0,17.3-3,19.2,14
c6.3,0,15.6-1.2,18.1,6.5c2.2,6.8-1.9,11.1-7,12.9c-2.2,0.8-4.6,1.2-6.7,1.1c-12.3-0.3-24.6-0.2-36.9,0c-21.3-0.2-54.4-0.6-75.7,0
c-2.2,0.1-4.5-0.3-6.7-1.1c-5.1-1.9-9.2-6.1-7-12.9c2.5-7.6,11.8-6.5,18.1-6.5c1.9-17,19.8-14,19.8-14
C677.1,229.4,705.5,234.9,705.5,234.9L705.5,234.9z"/>
<path fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M670.4,271.7c3.4,2.3,6.9,4.2,11.3,3.5c1.6-0.3,3.2-1.9,4.7-2.1c1.4-0.1,0.8,0.1,2,0.5c1.9,0.6,3.6,2.2,5.7,2.8
c2.9,0.8,6.2,1,9.2,0.8c4.7-0.4,12.7-1.7,16.1-4.9c2.9,1.9,4.8,4.5,8.6,5.2c5.1,1,10.8-1.1,15.1-2.5"/>
<path fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M380.7,167.5c-0.7,0-5.5,0-6.3,0c-21.3-0.2-54.4-0.6-75.7,0c-2.2,0.1-4.5-0.3-6.7-1.1c-5.1-1.9-9.2-6.1-7-12.9
c2.5-7.6,11.8-6.5,18.1-6.5c1.9-17,19.8-14,19.8-14c7.2-24.6,35.6-19,35.6-19v0c0-0.2,0.7-0.4,1.4-0.5c2.6-0.4,5.1-0.4,7.7,0
c4.1,0.6,7.9,2.2,11.1,4.8c4.6,3.7,7.4,9.1,9,14.7c0,0,17.3-3,19.2,14c7.1-3.8,12.9-0.8,16.2,3.4"/>
<path fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M323.4,150.7c3.4,2.3,6.9,4.2,11.3,3.5c1.6-0.3,3.2-1.9,4.7-2.1c1.4-0.1,0.8,0.1,2,0.5c1.9,0.6,3.6,2.2,5.7,2.8
c2.9,0.8,6.2,1,9.2,0.8c4.7-0.4,12.7-1.7,16.1-4.9c2.9,1.9,4.8,4.5,8.6,5.2c2.5,0.5,8.7,0.9,11.2,0.4"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M599.3,332.3c2.3-11.3,15-9.9,15-9.9h0c0-0.1,0.4-0.2,0.8-0.3c1.2-0.3,2.3-0.4,3.5-0.3c1.9,0.1,3.6,0.7,5.2,1.7
c2.2,1.5,3.7,3.8,4.6,6.2c0,0,7.6-2,9.1,5.5c2.8-0.2,6.9-1.1,8.3,2.2c1.3,3-0.4,5-2.6,6.1c-0.9,0.4-2,0.7-3,0.8
c-5.5,0.3-11,0.9-16.5,1.4c-6,0.5-14.1,1.1-21.6,1.7"/>
<path fill="none" stroke="#211915" stroke-width="1.3466" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M601.3,340.2c1.6,0.9,3.2,1.6,5.2,1.1c0.7-0.2,1.4-1,2-1.1c0.6-0.1,0.4,0,0.9,0.1c0.9,0.2,1.7,0.8,2.7,1c1.4,0.3,2.8,0.2,4.1,0
c2.1-0.3,5.6-1.3,7-2.8c1.4,0.7,2.3,1.8,4.1,2c2.3,0.2,4.8-0.9,6.6-1.7"/>
<path fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M661.5,433
c-1.9-0.2-3.7-0.4-5.6-0.6c-3.7-0.4-9.4-1.1-13.1-1.4c-0.4,0-0.8-0.1-1.1-0.3c-0.9-0.4-1.5-1.2-1-2.4c0.6-1.3,2.2-0.9,3.3-0.8
c0.6-2.9,3.6-2.1,3.6-2.1c1.7-4.1,6.5-2.6,6.5-2.6l0,0c0,0,0.2-0.1,0.3-0.1c0.5,0,0.9,0,1.4,0.2c0.7,0.2,1.3,0.5,1.8,1
c0.7,0.7,1.1,1.7,1.3,2.7c0,0,2.2-0.1,2.9,1.7"/>
<path fill="none" stroke="#211915" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M647.4,428.5c0.5,0.5,1.1,0.9,1.9,0.8c0.3,0,0.6-0.3,0.9-0.3c0.2,0,0.1,0,0.3,0.1c0.3,0.1,0.6,0.4,0.9,0.6c0.5,0.2,1,0.3,1.6,0.3
c0.8,0,2.2-0.1,2.9-0.6c0.5,0.4,0.8,0.9,1.4,1.1c0.9,0.3,1.9,0,2.7-0.2"/>
<path fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M762.5,559v-6.2
c0,0-2.6-0.1-2.9-2.1c0,0-0.3-1.7,0.4-2.1c0,0,0.7-0.5,0.7,2c0,0,0.4,0.9,1,0.9l0-6.4c0,0,0.4-1.1,1.3-1.1c0,0,1.4-0.2,1.4,0.9
c0,0,0,9.1,0,9.1c0,0.1,0.6-0.5,0.7-0.7c0.2-0.3-0.1-0.8,0-1.2c0-0.6-0.1-2.8,0.4-2.9c0.7-0.2,0.8,1.1,0.9,1.6
c0.1,1.2,0.2,2.6-0.7,3.6c-0.1,0.2-1.3,1-1.3,0.9c0,0,0,3.7,0,3.7"/>
<path fill="none" stroke="#211915" stroke-width="0.7513" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M759.1,559.8c0.6,0,1.4,0.2,1.9,0.1c0.5-0.1,0.8-0.4,1.4-0.4c1.5,0.1,3.1,0.2,4.6,0.3c0.8,0.1,1.9-0.1,2.7,0"/>
<path fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M754.5,626v-6.2
c0,0-2.6-0.1-2.9-2.1c0,0-0.3-1.7,0.4-2.1c0,0,0.7-0.5,0.7,2c0,0,0.4,0.9,1,0.9l0-6.4c0,0,0.4-1.1,1.3-1.1c0,0,1.4-0.2,1.4,0.9
c0,0,0,9.1,0,9.1c0,0.1,0.6-0.5,0.7-0.7c0.2-0.3-0.1-0.8,0-1.2c0-0.6-0.1-2.8,0.4-2.9c0.7-0.2,0.8,1.1,0.9,1.6
c0.1,1.2,0.2,2.6-0.7,3.6c-0.1,0.2-1.3,1-1.3,0.9c0,0,0,3.7,0,3.7"/>
<path fill="none" stroke="#211915" stroke-width="0.7513" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M751.1,626.8c0.6,0,1.4,0.2,1.9,0.1c0.5-0.1,0.8-0.4,1.4-0.4c1.5,0.1,3.1,0.2,4.6,0.3c0.8,0.1,1.9-0.1,2.7,0"/>
<path fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M676.5,564v-6.2
c0,0,2-0.1,2.2-2.1c0,0,0-1.7-0.7-2.1c0,0-0.9-0.5-0.9,2c0,0-0.4,0.9-1,0.9l-0.1-6.4c0,0,0.2-1.1-0.6-1.1c0,0-0.8-0.2-0.8,0.9
c0,0,0,9.1,0,9.1c0,0.1-1.3-0.5-1.4-0.7c-0.2-0.3-0.3-0.8-0.3-1.2c0-0.6,0-2.8-0.6-2.9c-0.7-0.2-0.9,1.1-1,1.6
c-0.1,1.2,0.5,2.6,1.3,3.6c0.1,0.2,1.9,1,1.9,0.9c0,0,0,3.7,0,3.7"/>
<path fill="none" stroke="#211915" stroke-width="0.7513" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M678.6,564.8c-0.6,0-1.4,0.2-1.9,0.1c-0.5-0.1-0.8-0.4-1.4-0.4c-1.5,0.1-3.1,0.2-4.6,0.3c-0.8,0.1-1.9-0.1-2.7,0"/>
<path fill="none" stroke="#211915" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M593.5,590v-6.2
c0,0,2-0.1,2.2-2.1c0,0,0-1.7-0.7-2.1c0,0-0.9-0.5-0.9,2c0,0-0.4,0.9-1,0.9l-0.1-6.4c0,0,0.2-1.1-0.6-1.1c0,0-0.8-0.2-0.8,0.9
c0,0,0,9.1,0,9.1c0,0.1-1.3-0.5-1.4-0.7c-0.2-0.3-0.3-0.8-0.3-1.2c0-0.6,0-2.8-0.6-2.9c-0.7-0.2-0.9,1.1-1,1.6
c-0.1,1.2,0.5,2.6,1.3,3.6c0.1,0.2,1.9,1,1.9,0.9c0,0,0,3.7,0,3.7"/>
<path fill="none" stroke="#211915" stroke-width="0.7513" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M595.6,590.8c-0.6,0-1.4,0.2-1.9,0.1c-0.5-0.1-0.8-0.4-1.4-0.4c-1.5,0.1-3.1,0.2-4.6,0.3c-0.8,0.1-1.9-0.1-2.7,0"/>
<polygon fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
706.4,665 685.4,665 680.8,691 693.6,690.9 722.3,673.4 "/>
<polyline fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
686.4,666 699,680 719.9,674.8 "/>
<line fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="699" y1="680" x2="697.1" y2="688.8"/>
<line fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="601.8" y1="664.9" x2="560.5" y2="725.8"/>
<path fill="none" stroke="#211915" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M136.4,187l-0.5-19.8c0,0-7.2-0.3-7.9-6.3c0,0-0.7-5.3,1.6-6.3c0,0,2.4-1.5,2.4,5.9c0,0,1.2,2.6,3,2.6l0.2-19.4
c0,0,0.7-3.2,3.2-3.2c0,0,3.6-0.7,3.6,2.7c0,0,0,27.4,0,27.6c0,0.2,2.6-1.6,2.8-2c0.6-1,0.2-2.4,0.2-3.5c0.1-1.8-0.2-8.4,1.4-8.8
c2.2-0.6,2.6,3.2,2.7,4.8c0.3,3.5-0.2,8-2.6,10.9c-0.4,0.5-4.7,3.1-4.7,2.7c0,0-0.8,11.9-0.8,11.9"/>
<ellipse transform="matrix(0.128 -0.9918 0.9918 0.128 -74.1595 701.2955)" cx="361.7" cy="392.8" rx="14.3" ry="14.3"/>
<ellipse transform="matrix(0.128 -0.9918 0.9918 0.128 45.52 835.4486)" cx="497.8" cy="391.8" rx="14.3" ry="14.3"/>
<path d="M438.1,441.2c-5.7,0.6-12.5-0.3-15.2-1.8c-1.6-0.9-3.2-2-4.1-3.5c-2.6-4.1,3-6.4,6.5-7.4c3.2-0.9,6.4-1.1,9.7-0.8
c2.7,0.2,5.3,0.7,7.7,1.8c2.4,1.1,3.6,1.6,4.3,3.9C448.5,438.4,443.8,440.6,438.1,441.2z"/>
<ellipse transform="matrix(0.128 -0.9918 0.9918 0.128 45.5048 835.4331)" fill="none" stroke="#000000" stroke-width="3.6235" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" cx="497.8" cy="391.8" rx="49" ry="49"/>
<ellipse transform="matrix(0.128 -0.9918 0.9918 0.128 -72.0028 704.4983)" fill="none" stroke="#000000" stroke-width="3.6235" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" cx="364.6" cy="393.2" rx="49" ry="49"/>
<ellipse transform="matrix(0.128 -0.9918 0.9918 0.128 -74.1595 701.2955)" cx="361.7" cy="392.8" rx="14.3" ry="14.3"/>
<ellipse transform="matrix(0.128 -0.9918 0.9918 0.128 45.52 835.4486)" cx="497.8" cy="391.8" rx="14.3" ry="14.3"/>
<ellipse transform="matrix(0.1279 -0.9918 0.9918 0.1279 -5.0822 559.8978)" cx="315.8" cy="282.8" rx="7.1" ry="7.1"/>
<ellipse transform="matrix(0.128 -0.9918 0.9918 0.128 7.9834 574.7572)" fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" cx="330.8" cy="282.8" rx="24.3" ry="24.3"/>
<path fill="none" stroke="#000000" stroke-width="3.6235" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M405.8,440c4.4-2.8,10.1-6,15.5-5.8c5.1,0.1,10.2,1.1,15.3,1.6c4.8,0.5,9.3,0.3,14,1.9c4.7,1.6,9.2,4.4,12.5,8.2
c3.8,4.3,2.1,11.3-3,14.7c-9.6,6.3-18.6-4.7-28.5-4.1c-9.5,0.5-17.6,9.9-27.2,2.6C398,454.3,400,443.7,405.8,440z"/>
<path fill="none" stroke="#000000" stroke-width="3.6235" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M431.8,458c-0.3,3.9-0.5,9.8,0,11.9c1,3.6,5.5,3.8,10.6,3.4c6.1-0.5,5-4.5,5-5.7c0-0.8-0.4-4.6-0.3-5.5"/>
<path fill="none" stroke="#000000" stroke-width="3.6235" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M412.4,462.5c-0.3,3.9-0.3,5.8,0.2,7.9c1,3.6,5.5,3.8,10.6,3.4c6.1-0.5,7.7-1.3,7.7-2.8c0-1,0.5-12.1,0.6-13"/>
<path fill="none" stroke="#000000" stroke-width="3.6235" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M438.1,441.2c-5.7,0.6-12.5-0.3-15.2-1.8c-1.6-0.9-3.2-2-4.1-3.5c-2.6-4.1,3-6.4,6.5-7.4c3.2-0.9,6.4-1.1,9.7-0.8
c2.7,0.2,5.3,0.7,7.7,1.8c2.4,1.1,3.6,1.6,4.3,3.9C448.5,438.4,443.8,440.6,438.1,441.2z"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M261,410.5c-3.1-12.4-4.1-25.4-2.9-37.2c2.6-24.3,12.9-46.9,21.9-69.3c11.1-27.8,25.4-58,52.2-73.8"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M330.9,222c-10.2,2.1-22.6,3.5-32-2.4c-6.5-4.1-11.5-18.1-20.6-15.8c-7.2,1.8-7.7,14-7.4,19.5c0.6,10.5,3.9,20.8,9,30
c2.6,4.7,8.9,16.6,14.2,18.3"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M286,546.9c-2.6,33.1,6.4,70.2,20.1,100.1c6,13.2,15.1,24.5,28.5,30.6c21.6,9.8,46.8,10.5,70.1,11.8c9.1,0.5,21,1.2,29.2,1.4"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M259.4,518.3c-6.9,4.3-17,12.7-21.8,17.4c-2.6,2.6-11.7,10.6-13,14.2c-2.5,6.8,7.5,2.4,8.8,8.5c1.5,6.9-5.1,11,5.3,10.7
c5.8-0.2,11.4-2.1,16.7-4.1c8.7-3.2,20.5-5.3,30.2-10.6"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M317.5,664.9c-8.3,6.8-16.6,13.6-20.8,23.6c-5,11.8-0.9,27.8,13.1,28.6c9.8,0.5,27-6.3,35.6-10.5c8.8-4.3,23.5-13.1,31.8-18.9"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M283.3,259c-6.4,0-28.9,8-30.7,14.9c-3.2,12.2,24.7,15.7,32.6,17.2"/>
<path fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M234.4,538.8c6.3,2.1,10.2,8.2,12.3,12.6c2.2,4.7,3,10.8,0.9,16.2"/>
<path fill="none" stroke="#211915" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M628.8,538.8c-6.3,2.1-10.2,8.2-12.3,12.6c-2.2,4.7-3,10.8-0.9,16.2"/>
<ellipse transform="matrix(0.9918 -0.1279 0.1279 0.9918 -31.6962 72.2437)" cx="546.5" cy="282.8" rx="7.1" ry="7.1"/>
<ellipse transform="matrix(0.9918 -0.128 0.128 0.9918 -31.8144 70.6109)" fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" cx="533.5" cy="282.8" rx="24.3" ry="24.3"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M476.3,312.8c77.4-0.2,109,83,89.2,149.3"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M388.3,313.8c-77.4-0.2-109,83-89.2,149.3"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M432.7,288.4c9.9-0.2,20.7-0.6,29.5,3.5c10.5,4.9,17.9,23.8,13,34.9c-4.8,11-16.3,17-27.5,19.7c-18.9,4.5-49.7,0.8-58.7-19.7
c-4.9-11.1,2.5-30,13-34.9C411.1,287.7,422.6,288.1,432.7,288.4"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M532.2,230.2c24.2,14.3,33.4,34.7,45.8,58c20.4,38.4,34.4,73.7,24.8,118.8"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M533.5,222.1c10.2,2.1,22.6,3.5,32-2.3c6.5-4.1,11.6-18.1,20.6-15.8c7.2,1.8,7.7,14,7.3,19.6c-0.6,10.5-4,20.7-9,30
c-2.6,4.7-9.7,17.1-15,18.7"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M578.3,546.9c2.6,33.1-6.4,70.2-20.1,100.1c-6,13.2-15.1,24.5-28.5,30.6c-21.6,9.8-46.8,10.5-70.1,11.8c-9.1,0.5-17.4,1.2-25.7,1.4
"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M604.9,518.3c6.9,4.3,17,12.7,21.8,17.4c2.6,2.6,11.7,10.6,13,14.2c2.5,6.8-7.5,2.4-8.8,8.5c-1.5,6.9,5.1,11-5.3,10.7
c-5.8-0.2-11.4-2.1-16.7-4.1c-8.7-3.2-20.5-5.3-30.2-10.6"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M546.8,664.9c8.3,6.8,16.6,13.6,20.8,23.6c5,11.8,0.9,27.8-13.1,28.6c-9.8,0.5-27-6.3-35.6-10.5c-8.8-4.3-23.5-13.1-31.8-18.9"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M581,259.2c6.4,0,28.9,8.1,30.6,15c3.2,12.2-24.5,14.1-32.4,15.6"/>
<path fill="none" stroke="#211915" stroke-width="5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M294.8,462.1c27.8-1.2,51.6,19.5,64.3,42l-7-10.7c14.2-2.2,32.2,4.7,41.5,16c10.4-3,16.9,0.6,20.6,5.3c10.2-6.8,25.1-3.8,35,0
c3.6-5,10.5-8.4,21.4-5.3c9.3-11.4,27.3-18.2,41.5-16l-7,10.7c12.7-22.6,36.5-43.3,64.3-42c18.5-14.8,29.8-30.7,33-54.6l-0.5,3
c31.9-6.5,36.9,118.6-6.8,107.6l3.5,0.6c-1.8,22.1-31.5,38.1-51.5,37.4l3.2,0.1c-5.7,28.7-35.4,46.9-59.5,42.9
c0,0.6-3.7,8.1-13,7.7c-7.4-0.3-3.8-6.7-7.3-10.7c-0.2,2.7-3.1,10.9-6.7,11.8c-3.7,0.9-3.9,1.4-12.4-0.9
c-0.7,11.1-7.6,27.4-16.7,34.5c-8.2-5.6-18-24.8-20.4-34.8c-4.6,3.2-7.8,3.6-12.1,0.1c-2.4-1.9-8.3-8.2-8.5-10.8
c-3.5,4,0,10.4-7.3,10.7c-4.5,0.2-9.9-5.7-10-10c-26.2-1.2-56.8-11.9-62.6-40.6l3.2-0.1c-20,0.7-49.7-15.3-51.5-37.4l3.5-0.6
c-43.7,11-40-114.1-8.1-107.6c2.3,9.1,5.7,17.9,10.3,25.5C277.3,446.1,285.6,454.7,294.8,462.1z"/>
<path fill="none" stroke="#211915" stroke-width="2.8817" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M168.3,187c69-71.8,166-116.4,273.4-116.4C651.2,70.5,821,240.3,821,449.8C821,659.2,651.2,829,441.7,829
C232.3,829,62.5,659.2,62.5,449.8"/>
<path fill="none" stroke="#211915" stroke-width="5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M508.6,255.4c0,1.2-0.3,2.8-0.5,4.2c-0.4,2.9-1.4,5.7-2.2,8.5c5.9-6.6,12.4-10.7,16.5-19.3c4.6-9.6,11.1-15.9,11.1-26.7
c-0.9-11.9-7-31.3-22.1-31.3c-4.4-9.4-17-17.2-24.2-15.5c-0.9-15.8-22.3-25.7-38.8-21.3l-0.1,0c-8.3-6.8-20.1-8.6-31.2,0
c-16.7-4.5-38.2,5.6-38.6,21.7c-6.9-2.6-20.9,5.2-25.5,15c-15.1,0-21.2,19.4-22.1,31.3c0,10.8,6.5,17.1,11.1,26.7
c4.1,8.7,10.6,12.8,16.5,19.3c-0.8-2.7-1.8-5.6-2.2-8.5c-0.2-1.4-0.5-3-0.5-4.2l0,0.1c3.2,6.8,3.4,12.8,9.5,17.8
c5.4,4.5,12,6.4,17.9,8.8c-1.2-2-2.4-10,0-13.3c1.4,7,20.1,16.5,27.3,15.3c-1.2,0-1.3-8.5-1.3-11.3c6.4,0,16.9,6.7,23.1,10.2
c6.2-3.5,16.6-10.3,23.1-10.2c0,2.8-0.1,11.4-1.3,11.3c7.3,1.1,25.9-8.3,27.3-15.3c2.4,3.3,1.2,11.3,0,13.3
c5.8-2.4,12.4-4.4,17.9-8.8C505.2,268.3,505.3,262.3,508.6,255.4"/>
<path fill="none" stroke="#211915" stroke-width="2.0849" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M467.6,315c-6.7,0.9-6.8,7.5-6.3,12.9"/>
<path fill="none" stroke="#211915" stroke-width="2.0849" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M399.2,315c6.7,0.9,6.8,7.5,6.3,12.9"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M572.4,277.7c0,0,24.9-1.8,28.9,2.2"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M261.4,277.7c0,0,24.9-1.8,28.9,2.2"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M524.6,709.2c10.4-10.9,26.9-24.7,41.5-22.8"/>
<path fill="none" stroke="#211915" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M339.1,709.2c-10.4-10.9-26.9-24.7-41.5-22.8"/>
</g>
<path fill="none" stroke="#000000" stroke-width="3.6235" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M431.5,468.1"/>
<path fill="none" stroke="#000000" stroke-width="3.6235" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M425.1,474.6"/>
</svg>

After

Width:  |  Height:  |  Size: 64 KiB

View File

@ -0,0 +1,6 @@
require("expose-loader?$!expose-loader?jQuery!jquery");
require("bootstrap/dist/js/bootstrap.bundle.js");
$(() => {
});

7
pkging/pkgtest/testdata/ref/go.mod vendored Normal file
View File

@ -0,0 +1,7 @@
module app
go 1.13
require github.com/markbates/pkger v0.8.0
replace github.com/markbates/pkger => ../../../../

19
pkging/pkgtest/testdata/ref/go.sum vendored Normal file
View File

@ -0,0 +1,19 @@
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/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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
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/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

View File

@ -0,0 +1,3 @@
# For more information on using i18n see: https://github.com/nicksnyder/go-i18n
- id: welcome_greeting
translation: "Welcome to Buffalo (EN)"

View File

@ -1,6 +1,7 @@
package main package main
import ( import (
"app/actions"
"fmt" "fmt"
"io" "io"
"log" "log"
@ -16,6 +17,25 @@ func main() {
} }
func run() error { func run() error {
if err := actions.WalkTemplates(os.Stdout); err != nil {
return err
}
err := pkger.Walk("/assets", func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
fmt.Println(path)
return nil
})
if err != nil {
return err
}
return nil
}
func dynamic() error {
info, err := pkger.Stat("/go.mod") info, err := pkger.Stat("/go.mod")
if err != nil { if err != nil {
return err return err

21
pkging/pkgtest/testdata/ref/mod/mod.go vendored Normal file
View File

@ -0,0 +1,21 @@
package mod
import (
"io/ioutil"
"github.com/markbates/pkger"
)
func Mod() (string, error) {
f, err := pkger.Open("/go.mod")
if err != nil {
return "", nil
}
defer f.Close()
b, err := ioutil.ReadAll(f)
if err != nil {
return "", nil
}
return string(b), nil
}

View File

@ -0,0 +1,7 @@
package models
import "github.com/markbates/pkger"
func Stat() {
pkger.Stat("/locales/all.en-us.yaml")
}

View File

View File

@ -0,0 +1,3 @@
body {
color: red;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<title>HI</title>
</head>
<body>
HELLO
<img src="/images/img1.png" alt=""/>
</body>
</html>

View File

@ -0,0 +1,2 @@
User-agent: *
Disallow: /

View File

@ -0,0 +1,14 @@
<div class="row">
<div class="col-md-12">
<%= for (k, messages) in flash { %>
<%= for (msg) in messages { %>
<div class="alert alert-<%= k %>" role="alert">
<%= msg %>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<% } %>
<% } %>
</div>
</div>

View File

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8">
<title>Buffalo - Coke</title>
<%= stylesheetTag("application.css") %>
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="<%= authenticity_token %>" />
<link rel="icon" href="<%= assetPath("images/favicon.ico") %>">
</head>
<body>
<div class="container">
<%= partial("flash.html") %>
<%= yield %>
</div>
<%= javascriptTag("application.js") %>
</body>
</html>

View File

@ -0,0 +1,64 @@
<header>
<div class="container">
<div class="row">
<div class="col-md-1 col-sm-2 col-xs-2 logo">
<a href="<%= rootPath() %>"><img src="<%= rootPath() %>assets/images/logo.svg" alt=""></a>
</div>
<div class="col-md-9 col-sm-9 col-xs-10 titles">
<h1><%= t("welcome_greeting") %></h1>
<h2>
<a href="https://github.com/gobuffalo/buffalo"><i class="fab fa-github" aria-hidden="true"></i> https://github.com/gobuffalo/buffalo</a>
</h2>
<h2 class="documentation">
<a href="http://gobuffalo.io/"><i class="fa fa-book" aria-hidden="true"></i> Documentation</a>
</h2>
</div>
</div>
</div>
</header>
<div class="row">
<div class="col-md-12">
<div class="subtitle">
<div class="container">
<h3>Defined Routes</h3>
</div>
</div>
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr text-align="left">
<th class="centered">METHOD</th>
<th>PATH</th>
<th>NAME</th>
<th>HANDLER</th>
</tr>
</thead>
<tbody>
<%= for (r) in routes { %>
<tr>
<td class="centered">
<%= r.Method %>
</td>
<td>
<%= if (r.Method != "GET" || r.Path ~= "{") {
return r.Path
} else {
return linkTo(r.Path, {body: r.Path})
} %>
</td>
<td>
<%= r.PathName %>
</td>
<td><code><%= r.HandlerName %></code></td>
</tr>
<% } %>
</tbody>
</table>
</div>
</div>
</div>
<div class="foot"> <span> Powered by <a href="http://gobuffalo.io/">gobuffalo.io</a></span> </div>

Some files were not shown because too many files have changed in this diff Show More