2020-02-13 22:55:19 +00:00
|
|
|
// Code generated for package data by go-bindata DO NOT EDIT. (@generated)
|
|
|
|
// sources:
|
|
|
|
// data/data.json
|
|
|
|
package data
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"compress/gzip"
|
|
|
|
"fmt"
|
|
|
|
"io"
|
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
"strings"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
func bindataRead(data []byte, name string) ([]byte, error) {
|
|
|
|
gz, err := gzip.NewReader(bytes.NewBuffer(data))
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("Read %q: %v", name, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
var buf bytes.Buffer
|
|
|
|
_, err = io.Copy(&buf, gz)
|
|
|
|
clErr := gz.Close()
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("Read %q: %v", name, err)
|
|
|
|
}
|
|
|
|
if clErr != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return buf.Bytes(), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
type asset struct {
|
|
|
|
bytes []byte
|
|
|
|
info os.FileInfo
|
|
|
|
}
|
|
|
|
|
|
|
|
type bindataFileInfo struct {
|
|
|
|
name string
|
|
|
|
size int64
|
|
|
|
mode os.FileMode
|
|
|
|
modTime time.Time
|
|
|
|
}
|
|
|
|
|
|
|
|
// Name return file name
|
|
|
|
func (fi bindataFileInfo) Name() string {
|
|
|
|
return fi.name
|
|
|
|
}
|
|
|
|
|
|
|
|
// Size return file size
|
|
|
|
func (fi bindataFileInfo) Size() int64 {
|
|
|
|
return fi.size
|
|
|
|
}
|
|
|
|
|
|
|
|
// Mode return file mode
|
|
|
|
func (fi bindataFileInfo) Mode() os.FileMode {
|
|
|
|
return fi.mode
|
|
|
|
}
|
|
|
|
|
|
|
|
// Mode return file modify time
|
|
|
|
func (fi bindataFileInfo) ModTime() time.Time {
|
|
|
|
return fi.modTime
|
|
|
|
}
|
|
|
|
|
|
|
|
// IsDir return file whether a directory
|
|
|
|
func (fi bindataFileInfo) IsDir() bool {
|
|
|
|
return fi.mode&os.ModeDir != 0
|
|
|
|
}
|
|
|
|
|
|
|
|
// Sys return file is sys mode
|
|
|
|
func (fi bindataFileInfo) Sys() interface{} {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2022-12-15 19:02:40 +00:00
|
|
|
var _dataDataJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x6b\x73\xdb\x38\xba\xee\x0f\xbf\x9f\x4f\xc1\xf2\x7e\x31\xcf\xb3\x2b\x94\xad\xa3\x0f\x55\xfb\x85\xdb\x76\xd2\xae\x4e\x1c\x6f\xcb\xc9\xec\xa9\xe5\x29\x17\x4d\x42\x32\x57\x28\x92\x4d\x52\x4a\xdc\x59\xfd\xdd\xff\x05\x80\x67\x82\x14\x48\x4a\x8a\x0e\x97\x57\xd5\x9a\x8e\x88\x13\x41\xf0\xbe\x7e\xb8\x09\xdc\xf8\xf9\x0f\xe5\xe8\x8f\x33\xff\x2b\xf1\x7c\xd3\xb1\xc7\xc4\x5b\x98\x3a\xf9\xec\x06\xa6\x63\xfb\x47\x17\xca\xcf\x7f\x28\xca\xd1\xa2\xdb\xe9\x9e\x84\xff\x50\x8e\x48\xa0\x1b\x47\x17\x8a\x3d\xb7\xac\x77\xec\x87\x6f\xf3\x17\xa2\xb9\x66\x94\x40\x39\xd2\x2c\xcb\xf9\xae\xba\x9e\xb9\x30\x2d\x32\x25\x34\xf5\x51\xe0\xcd\xc9\xd1\xbb\xf0\xba\xed\xd8\x6f\x33\x67\xee\xab\xda\x3c\x78\xa5\x57\x27\x9a\xe5\xc7\x97\x5f\x4c\xdb\x50\x35\xc3\xf0\x88\x4f\x9b\x70\x74\xd2\x61\xff\x17\x5d\x26\xb6\xf6\x62\x11\x55\x33\x66\xa6\x4f\xdb\xac\xba\xd6\x7c\x6a\xb2\xd6\x1e\xdd\x69\x33\xe2\xbb\x9a\x4e\x3e\x9a\x13\xa2\xbf\xe9\x16\x79\xf7\xd1\x9c\x99\xc1\x83\x66\x4f\x89\xf7\x2e\xbc\xbd\x4b\x5d\x77\xe6\x76\xf0\xee\x9a\x4c\xb4\xb9\x15\x8c\x03\xc7\xd3\xa6\xe4\xca\xd2\x7c\x3f\xfa\xed\xd1\xb1\x88\xa7\x05\xac\x4b\x74\xc7\x36\xfc\x77\x9f\xe6\x81\x16\x98\xf6\xf4\x32\xaa\xf7\x5f\xe4\xe5\xd5\x71\xbe\xbd\xfb\xaa\x59\xa6\x21\xbe\xf4\x40\x7c\x67\xee\xe9\xe4\xff\xce\x9d\x40\x7b\x77\xe7\x18\xe4\x81\xf8\x81\x67\xea\xb4\xe0\xe8\x7e\x4c\xdb\x27\xfa\xdc\x23\xaa\xeb\x78\x01\xbb\xdf\xe8\x0a\xed\x58\x8b\x04\xaa\xeb\x91\x09\xf1\x3c\x12\xf7\x8a\x1a\xbc\xb9\x84\xdd\xf0\xad\x1d\x10\xcf\xd6\xac\xdb\xfb\x77\x37\x3f\xe2\xff\xfc\xdd\xf1\x03\x5b\x9b\xc5\x3d\xea\x7a\xce\xc4\xb4\x4c\x7b\x5a\xe8\x6b\x8f\xfc\x39\x27\x7e\xf0\x4a\x34\x83\x78\x2a\xf9\x11\x78\x9a\xca\xff\xe1\xb3\x6a\xcd\x1f\x34\xcb\xff\x53\x1f\xc8\xcc\x09\x88\x7a\xc3\x12\x88\x33\x4f\x3d\x67\xee\x46\x99\x33\xb9\x3e\xd0\x2b\xe2\x4c\x73\x9f\xb6\x79\x46\x84\xf9\xbe\xf8\xc4\x8b\xb3\xcd\xed\xc0\x9c\x11\x55\x77\xec\x89\xc9\xee\x83\x8e\x1d\xc7\x33\xff\x62\x4f\xa9\xf3\xed\xcc\xef\x98\xce\xf1\xa2\xfb\x42\x02\xad\xfb\x7f\xd2\xc3\x2d\xd7\xbd\xa3\xc1\xa0\x9f\x5c\x62\x03\x42\xd5\xf8\x88\x50\x2d\xc7\xf9\x36\x77\xf3\xe3\xd5\xe7\x03\x44\x7d\xd1\xf4\x6f\xc4\x66\xc3\x99\xbe\x04\x71\x29\x81\xe5\xab\xba\xe9\xbe\x12\x4f\xf5\xe7\x66\xc0\x9f\xcc\xe3\xc7\xf1\xf3\xcd\xd5\xf5\xef\x37\xf4\xff\x8f\x2f\x9f\xff\x75\xfb\xf8\xfb\xf3\xe5\xcd\xf8\xb9\xdb\x3b\x7b\xfe\x70\xf5\xe9\x79\xfc\xfb\x65\x6f\x38\x7a\x57\x9a\xae\x37\x1c\x45\xe9\xfa\x67\x03\x71\xba\xab\xdf\x2f\xaf\x7e\xbf\xec\x9d\x3c\xdf\x7f\xfe\xf8\xef\x6e\xff\x64\x98\x4a\xf6\x20\x55\xe9\x83\x54\x95\x0f\xa5\x15\x1e\xd1\x2e\xf8\x3b\x31\x04\x16\x09\x52\x86\xa0\xf4\x25\x6e\x69\x22\xe8\x8f\xc4\x0e\x4c\x9d\x3d\x7c\x35\x70\xbe\x11\x5b\xfd\xce\xdf\xba\x42\x51\xe9\x71\xa2\xce\x1c\x83\xd0\x14\xe1\x2b\x1a\x25\xd2\xd9\xe8\xf5\x55\x97\x78\xea\x9f\x0e\x7f\x80\xa9\x32\x74\xdb\x54\x5f\x4c\x5b\x35\x4c\x8f\x5e\x3a\x76\xdc\xe0\x58\xb7\xcd\xe3\x17\xd3\x4e\x27\xa1\x83\x33\x4e\x43\x02\x9d\xa5\xb1\x49\xd0\x31\x12\xe3\x35\x71\x3c\x9d\xa8\xb6\x63\x10\x95\x76\x82\xae\x05\xd4\x9c\xd1\x1c\x71\x9a\x05\xb1\x03\xf5\x4f\xd7\xcf\x18\x83\x99\xf6\x8d\xa8\xa6\xcb\x52\xfb\xea\x3c\x30\x2d\x55\x7f\xd5\x42\xbb\x97\xbe\x5f\x9b\x04\xdf\x1d\xef\x5b\x68\x16\xe9\x55\xdd\x36\x93\xb7\x4f\x33\x54\xc7\xb6\xde\x8a\xd6\xc6\x23\xbe\x63\x2d\xd8\x3d\xc4\xed\xe7\xbf\x75\xd8\x6f\xf1\xcb\xe0\x11\x6d\x66\xda\x53\x9a\xd2\x26\xcc\x94\xa9\xa6\x61\x11\x95\xbe\x9f\xce\x9c\x15\xda\x3f\x99\xe1\xe5\x38\x19\x46\x7d\xb0\xa0\xf7\xdc\x8b\xff\xe5\x58\xf3\x19\x09\x9f\x4f\x3c\x5c\x16\x9a\x77\x6c\x99\x2f\xc7\xe1\x4b\x74\xcc\x53\x45\xda\x96\x7b\xcb\x5c\xcf\xf9\xf1\x96\xbc\x67\xaf\x44\xb3\x82\xd7\xbf\xd4\xbc\x72\x76\x7b\xa7\xec\xb5\xeb\xe6\x1a\x92\x2b\xed\xca\xb1\x03\xcf\xb1\x2c\xe2\xc9\xbe\xba\xba\x16\x84\x63\x58\x37\x0d\xaf\x30\x04\xf9\xdb\x3d\xb7\x03\x6d\x3a\x25\x86\xaa\x5b\xce\xbc\xf0\x86\x73\x43\x4e\x0d\x33\xbb\xac\x7a\xce\x3c\x1c\x1c\x99\x37\x3d\x54\xfb\x57\xc7\x0f\x5c\x2d\x78\x55\x5d\xcf\x59\x98\x54\x63\x59\x63\xb3\x69\xad\x50\xc5\x2c\xa2\x07\x85\xb7\x82\x36\x76\xe6\xd8\x66\xe0\x50\xa9\xd2\x74\x42\xdf\x75\xd3\x61\xed\x1a\x9c\xf8\xb1\x54\x3a\x86\x4a\x16\x5c\xa1\xd3\x23\x7a\x38\x4b\xa5\x29\x95\xd3\x80\x78\x3
|
2020-02-13 22:55:19 +00:00
|
|
|
|
|
|
|
func dataDataJsonBytes() ([]byte, error) {
|
|
|
|
return bindataRead(
|
|
|
|
_dataDataJson,
|
|
|
|
"data/data.json",
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
func dataDataJson() (*asset, error) {
|
|
|
|
bytes, err := dataDataJsonBytes()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
2022-12-15 19:02:40 +00:00
|
|
|
info := bindataFileInfo{name: "data/data.json", size: 4302483, mode: os.FileMode(420), modTime: time.Unix(1557785965, 0)}
|
2020-02-13 22:55:19 +00:00
|
|
|
a := &asset{bytes: bytes, info: info}
|
|
|
|
return a, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Asset loads and returns the asset for the given name.
|
|
|
|
// It returns an error if the asset could not be found or
|
|
|
|
// could not be loaded.
|
|
|
|
func Asset(name string) ([]byte, error) {
|
|
|
|
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
|
|
|
if f, ok := _bindata[cannonicalName]; ok {
|
|
|
|
a, err := f()
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err)
|
|
|
|
}
|
|
|
|
return a.bytes, nil
|
|
|
|
}
|
|
|
|
return nil, fmt.Errorf("Asset %s not found", name)
|
|
|
|
}
|
|
|
|
|
|
|
|
// MustAsset is like Asset but panics when Asset would return an error.
|
|
|
|
// It simplifies safe initialization of global variables.
|
|
|
|
func MustAsset(name string) []byte {
|
|
|
|
a, err := Asset(name)
|
|
|
|
if err != nil {
|
|
|
|
panic("asset: Asset(" + name + "): " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
return a
|
|
|
|
}
|
|
|
|
|
|
|
|
// AssetInfo loads and returns the asset info for the given name.
|
|
|
|
// It returns an error if the asset could not be found or
|
|
|
|
// could not be loaded.
|
|
|
|
func AssetInfo(name string) (os.FileInfo, error) {
|
|
|
|
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
|
|
|
if f, ok := _bindata[cannonicalName]; ok {
|
|
|
|
a, err := f()
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err)
|
|
|
|
}
|
|
|
|
return a.info, nil
|
|
|
|
}
|
|
|
|
return nil, fmt.Errorf("AssetInfo %s not found", name)
|
|
|
|
}
|
|
|
|
|
|
|
|
// AssetNames returns the names of the assets.
|
|
|
|
func AssetNames() []string {
|
|
|
|
names := make([]string, 0, len(_bindata))
|
|
|
|
for name := range _bindata {
|
|
|
|
names = append(names, name)
|
|
|
|
}
|
|
|
|
return names
|
|
|
|
}
|
|
|
|
|
|
|
|
// _bindata is a table, holding each asset generator, mapped to its name.
|
|
|
|
var _bindata = map[string]func() (*asset, error){
|
|
|
|
"data/data.json": dataDataJson,
|
|
|
|
}
|
|
|
|
|
|
|
|
// AssetDir returns the file names below a certain
|
|
|
|
// directory embedded in the file by go-bindata.
|
|
|
|
// For example if you run go-bindata on data/... and data contains the
|
|
|
|
// following hierarchy:
|
|
|
|
// data/
|
|
|
|
// foo.txt
|
|
|
|
// img/
|
|
|
|
// a.png
|
|
|
|
// b.png
|
|
|
|
// then AssetDir("data") would return []string{"foo.txt", "img"}
|
|
|
|
// AssetDir("data/img") would return []string{"a.png", "b.png"}
|
|
|
|
// AssetDir("foo.txt") and AssetDir("notexist") would return an error
|
|
|
|
// AssetDir("") will return []string{"data"}.
|
|
|
|
func AssetDir(name string) ([]string, error) {
|
|
|
|
node := _bintree
|
|
|
|
if len(name) != 0 {
|
|
|
|
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
|
|
|
pathList := strings.Split(cannonicalName, "/")
|
|
|
|
for _, p := range pathList {
|
|
|
|
node = node.Children[p]
|
|
|
|
if node == nil {
|
|
|
|
return nil, fmt.Errorf("Asset %s not found", name)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if node.Func != nil {
|
|
|
|
return nil, fmt.Errorf("Asset %s not found", name)
|
|
|
|
}
|
|
|
|
rv := make([]string, 0, len(node.Children))
|
|
|
|
for childName := range node.Children {
|
|
|
|
rv = append(rv, childName)
|
|
|
|
}
|
|
|
|
return rv, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
type bintree struct {
|
|
|
|
Func func() (*asset, error)
|
|
|
|
Children map[string]*bintree
|
|
|
|
}
|
|
|
|
|
|
|
|
var _bintree = &bintree{nil, map[string]*bintree{
|
|
|
|
"data": &bintree{nil, map[string]*bintree{
|
|
|
|
"data.json": &bintree{dataDataJson, map[string]*bintree{}},
|
|
|
|
}},
|
|
|
|
}}
|
|
|
|
|
|
|
|
// RestoreAsset restores an asset under the given directory
|
|
|
|
func RestoreAsset(dir, name string) error {
|
|
|
|
data, err := Asset(name)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
info, err := AssetInfo(name)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755))
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime())
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// RestoreAssets restores an asset under the given directory recursively
|
|
|
|
func RestoreAssets(dir, name string) error {
|
|
|
|
children, err := AssetDir(name)
|
|
|
|
// File
|
|
|
|
if err != nil {
|
|
|
|
return RestoreAsset(dir, name)
|
|
|
|
}
|
|
|
|
// Dir
|
|
|
|
for _, child := range children {
|
|
|
|
err = RestoreAssets(dir, filepath.Join(name, child))
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func _filePath(dir, name string) string {
|
|
|
|
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
|
|
|
return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
|
|
|
|
}
|