// Code generated by go-bindata.
// sources:
// assets/server/tls/snakeoil.crt
// assets/server/tls/snakeoil.key
// DO NOT EDIT!

// +build release

package assets

import (
	"bytes"
	"compress/gzip"
	"fmt"
	"io"
	"strings"
	"os"
	"time"
	"io/ioutil"
	"path/filepath"
)

func bindataRead(data, name string) ([]byte, error) {
	gz, err := gzip.NewReader(strings.NewReader(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
}

func (fi bindataFileInfo) Name() string {
	return fi.name
}
func (fi bindataFileInfo) Size() int64 {
	return fi.size
}
func (fi bindataFileInfo) Mode() os.FileMode {
	return fi.mode
}
func (fi bindataFileInfo) ModTime() time.Time {
	return fi.modTime
}
func (fi bindataFileInfo) IsDir() bool {
	return false
}
func (fi bindataFileInfo) Sys() interface{} {
	return nil
}

var _assetsServerTlsSnakeoilCrt = "\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x64\x93\xb9\xd6\xb2\x48\x10\x40\x73\x9e\x62\x72\xce\x1c\x16\x41\x25\xec\x0d\x6c\x95\xa5\xa1\x59\x33\x40\x71\x41\x51\x64\x13\x9e\x7e\xbe\xff\x0b\x26\x98\xa9\xac\x6e\x50\xe7\x56\x70\xff\xfe\x33\x90\x58\xd4\xf9\x0b\x11\x9f\x53\x93\x22\xc0\xc9\x2f\x15\x6c\x4a\xd1\xe7\x8e\x10\xc8\x52\x84\x18\x5e\xf6\x49\xf6\x9e\xc5\x25\xc5\x1c\x38\xf0\x52\xb7\xd7\xfa\x66\x19\x93\x0c\x01\x0b\x4d\x80\x41\x66\xfb\xe5\x64\xb2\x14\x47\x8c\x61\x0c\xf4\x4e\x48\x63\x3a\x9c\x9b\x68\x2c\xac\xc7\x70\x7c\x3a\x63\xc1\xc1\xd9\x9c\xe4\xaf\xc3\xc9\x64\xe3\x7a\x72\xb1\xad\xd9\x7c\x9f\xff\xb0\xd9\xe5\x40\xb5\x79\xf9\x2f\xb3\x61\xfd\x15\xcc\x05\x44\xf0\xe2\x44\x10\xd8\x36\x7e\x7e\xaf\xe9\x4d\x5f\x9f\x62\xa3\xcb\x63\x6d\x48\x55\xa3\xff\x31\x84\xf4\xfe\x5f\x1b\x62\x02\xe0\x22\xc0\xb6\xe0\xcf\x0b\x10\x5d\x0e\x3f\x0b\x01\x2b\x78\x1d\xc3\x7e\x82\x6d\x5d\x17\x48\x59\x46\x6c\x4b\x51\xf3\x8e\x0e\x3b\xbc\x92\x3c\xf9\xea\xd7\x6d\xe2\x0e\xf2\x64\x39\x57\x11\x87\x66\x9c\x8b\x9e\xe4\x0b\xc9\x7e\x2b\xaf\x7a\x6d\xaf\xa8\xdf\x96\xb6\xa7\xdd\x14\xa8\x55\xfb\x1a\x36\x9a\xa6\xc0\xf2\x71\x7b\xba\x40\xb3\x6f\x36\x55\x8a\x36\x68\x75\x69\x6d\x06\x64\x8e\xa7\x60\x91\x32\x0b\x1e\x3c\x33\xda\x09\x81\x6e\x38\xf1\xde\x4d\x8a\xc5\xcb\xf6\xcd\xd4\x91\xd6\x43\xf7\xd9\x1b\xdb\x49\x3a\x7d\x1e\xc6\x4b\x75\x29\xdb\x94\xd7\x7e\x63\x24\xd3\x34\xeb\x94\x9d\xd7\xfb\x92\x19\x84\xed\xb4\xd0\xd9\x8c\xbe\x20\x82\x9c\x4c\x64\x62\x46\x15\xb9\xb3\xa3\x94\xa7\x87\xe7\xe5\x45\x36\xff\x9c\xe1\xf4\x6b\x2d\x08\x66\x9a\x7b\xe4\x92\xe6\x9c\xc3\xa6\x3a\xe6\xdb\x87\x9a\xcb\x22\x0d\xba\xc5\xca\xef\x17\x6b\x16\xa6\x77\xe7\x60\x4a\xbe\xb0\x34\x6a\x3b\x0b\xf5\xe4\x6a\xdf\x12\x95\x57\x6f\x2f\xa2\x87\xa7\x48\x76\x81\x3d\x00\x83\x53\xab\x89\xc5\x52\x5e\xc3\x97\xad\x3f\xb6\xd0\x73\x8b\xb2\xae\x36\xa7\xe6\x21\x28\xaf\xb0\x0d\x4c\xb8\x52\xa5\xf2\x6c\x18\xe5\x29\xf9\x6a\xef\x41\xca\x90\x11\x54\xc3\x69\xbe\x3c\x0f\x13\xc5\x80\x01\x68\x03\xd9\x42\x41\x6b\x05\xb4\x58\x61\x46\x20\x64\x21\x00\x1a\x85\x02\x60\x88\x9c\xdf\x59\xd9\xc2\x28\x0f\xc1\x55\xf6\xeb\x5d\xcd\x70\xb6\x8e\x0a\xd1\x48\xd2\xe7\xc6\x3e\x6e\xb3\x62\x0f\x00\x58\xfb\x3e\xe7\xe3\xd7\x99\xfa\x4d\xe2\x89\x39\xa2\x32\x64\xdb\x67\x2d\xbc\x87\x39\x56\x73\xeb\x20\xf3\xea\xbe\x36\xfa\x45\x7f\x54\xa2\x0e\x96\x6b\x07\x54\x45\x8c\x9e\xf8\x23\x4a\x9a\x21\xbb\xa4\x26\x4a\x98\x13\xb7\x55\xcb\x26\x70\xcd\x04\x11\x80\x3b\x71\xdc\x0f\xc2\x1c\x91\x59\x7d\x22\x5f\x31\xe7\x89\x2b\xb5\xbf\xd1\xd5\xe1\xe5\xef\x1b\x23\x10\x91\xbf\x45\xef\xf5\x7c\x7a\x75\xb6\x2b\x69\x80\x8f\x3c\xb5\xcd\xd7\x32\x27\x4d\x90\x47\x97\x0d\x7f\x8d\xdd\x91\x0b\x7d\xb5\x3e\x1e\x92\xc7\x58\x39\xdd\xad\xfb\x7c\xf4\x7e\x48\x3c\xf7\x1d\x66\x79\x98\x7f\xa4\xd2\x50\xa8\xb6\x2a\x5e\xb4\x3b\xb3\x77\xe9\xe0\xd5\xa1\xb1\x76\xd5\xe1\xfb\x3c\xbe\xc1\x3c\xa5\x7d\xe5\x1b\x82\x0b\x5d\xf5\x66\xbe\x4e\xb9\x6c\xae\x4a\x2b\x0e\xc4\xba\x88\x03\x76\xe9\x59\x53\xdc\xd2\xee\xce\x6b\x13\xdb\xea\xf5\x8c\xb4\x28\xce\x9e\x58\x8d\x5c\x72\x9e\xb6\xf1\xbd\x62\xb7\x5e\x3d\x2d\xb0\x13\x98\xdb\xc9\x0e\x77\x1b\xac\xfb\xf4\xb1\x4b\x3f\x52\x76\x48\x51\xa6\x3c\x84\xdf\x58\x89\x83\xff\x1f\xf0\x3f\x01\x00\x00\xff\xff\x6f\x86\x84\x76\xdd\x03\x00\x00"

func assetsServerTlsSnakeoilCrtBytes() ([]byte, error) {
	return bindataRead(
		_assetsServerTlsSnakeoilCrt,
		"assets/server/tls/snakeoil.crt",
	)
}

func assetsServerTlsSnakeoilCrt() (*asset, error) {
	bytes, err := assetsServerTlsSnakeoilCrtBytes()
	if err != nil {
		return nil, err
	}

	info := bindataFileInfo{name: "assets/server/tls/snakeoil.crt", size: 989, mode: os.FileMode(436), modTime: time.Unix(1452132934, 0)}
	a := &asset{bytes: bytes, info:  info}
	return a, nil
}

var _assetsServerTlsSnakeoilKey = "\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x6c\x95\xc7\x0e\xb3\x48\x10\x84\xef\x3c\xc5\x7f\x47\x2b\x4c\x30\x98\xe3\x10\x0c\x18\x93\x33\x37\x18\x82\x31\xd9\x84\x31\x3c\xfd\x7a\xff\xf3\xf6\xb5\x5b\xad\x4f\x25\x55\xd5\x3f\xff\x8d\x20\x2b\x9a\xf9\xc7\xf5\xc0\x1f\xdb\xd5\x42\xe0\xcb\x7f\x74\x39\xf9\xbb\xc1\x0c\x4d\x93\x47\xa4\x09\x00\xe8\x22\x70\x64\x40\x0b\xaf\x3d\x58\x91\x30\xb7\x6d\x2e\x92\xe7\x2e\x19\x44\x38\x4c\xa1\xae\x4a\x34\x61\x5f\x5e\x6e\x3b\xc7\xd6\x76\x41\x8a\xf9\xc2\xa5\xe0\x1e\x65\x18\x6e\x13\x6e\xfc\xb8\x5d\xe8\x95\x79\x90\xd4\x77\xd6\xe6\x42\x45\x1e\x55\xcd\xe3\xc6\x31\x0c\x29\xc0\xae\xe9\x2d\xc0\x18\x8d\xa1\x91\xf9\xec\xcd\x57\x82\xbd\x7b\xf2\x11\x21\xef\x24\x52\x45\xd0\x31\xfb\x1e\xaa\xde\x95\x37\xa3\x87\x15\xe7\xa7\x9d\x3e\x06\xb4\xc8\xb3\x2d\xbe\x0f\x7b\x9f\x11\x51\x7c\x3a\x7e\xa4\x2c\xcd\xe1\xe0\x6b\xe5\xf8\x18\xa1\xe3\xaa\x39\x25\xfb\x80\x0e\x2f\x3b\x2a\x13\x60\x26\xb7\xbb\x38\xc8\x64\x24\x23\x87\xaf\x42\xeb\x30\x49\x58\x74\xb6\x9d\xe5\xe9\xf1\x7b\xe3\x6b\x5f\xe5\x14\x85\x94\xb1\x9e\x3e\xc1\x98\x65\x30\x54\xcf\xec\xd6\x51\xd9\x05\xd7\xbc\xe5\x54\x32\xec\x5d\x2b\x07\x9a\x16\x53\xd2\xe4\xaf\x00\xf9\xd6\x48\x83\x6b\xfc\x32\x9a\x98\xf2\xab\xc9\x0e\x35\xbd\xc7\x65\xd5\x33\x36\xc0\xfb\x9a\x32\x44\x38\xbc\xb0\xc2\x68\x5c\xbb\x9b\x60\x5b\x39\x6c\x2b\x8c\x2b\x86\x8e\x1c\x83\xd9\xbb\x0b\x34\x45\xc0\x92\xe7\x61\x11\x7f\x99\x69\x23\x52\x91\xf7\xaa\xad\x38\xea\x5e\x47\x9a\x04\x1c\x20\x80\xf1\x27\xb6\xa4\x0e\xb3\x9a\x86\xee\x7d\x6d\x0d\xb1\x1f\xb0\xdc\x3c\xb6\x0b\x1d\x14\xa7\x8e\xbc\x65\xee\xb3\x45\x76\xe1\x53\x22\x4e\xe4\xf8\xc6\xac\x50\xc7\x46\x9d\x87\xa9\xce\x31\xb7\xb6\x8f\xeb\xb5\x2b\xa4\x9b\x2d\xa1\x2e\xac\xa4\x5d\x76\xd6\x9a\xea\xb1\x01\x7e\xf3\x29\xf6\x93\x68\x86\x34\xaa\x68\xa7\xd6\x81\xcb\xd6\x2c\xf5\x41\x75\x6f\xf2\x0f\x7c\x59\xd3\xd3\xe7\x8c\x89\xe3\x6d\x01\xd1\x8d\x5a\xb9\xdd\x48\xf6\xe1\xd9\xc9\x34\xf3\x06\xe6\x17\xeb\x93\xd4\x70\x70\xfa\x51\xe8\x01\xc9\xba\x3f\x91\x76\xae\x19\xd9\x72\x2f\x67\xdd\x5f\x78\x8d\x4d\x6b\xa7\xd3\xd5\xdd\x13\x73\x1b\x4f\x70\x13\x80\x2a\x95\xa5\x92\x2b\x94\xee\xba\xd0\x4d\xfe\xc1\x70\xf2\x29\x7c\xfa\x8e\x4f\x82\xab\x60\x1f\x75\x43\x1d\xfc\x5e\x7c\x60\x62\xc2\x3c\x9b\xec\x35\x21\x09\x6b\x2e\xd3\xce\xab\x32\x30\xfb\x67\x6f\xa4\xe1\x2e\x34\xed\xb6\xbf\x64\xa7\x39\xa3\x95\xc3\x42\xae\x8c\xb9\x27\x4a\x8a\xb1\xf7\x5d\x4b\x30\xe9\xab\x3b\xf9\xc4\xfa\x8c\xa9\xe2\x38\x11\xd7\x56\x1b\xa8\x61\xd0\x95\x6d\x7f\x98\xfe\x71\x57\xa2\x9b\x17\xab\x9c\x53\x87\x02\x14\x71\x84\xf7\xd8\x32\x89\x71\xa9\xc8\x62\x9d\xc8\x00\x4f\xf3\x96\x5b\x95\x2e\xe6\x2f\xa1\x66\x2c\x5f\x2a\x73\xd9\x43\x26\x92\xa2\x4e\xc2\x89\xbd\x14\x73\xb3\x3d\x47\x4b\x49\x8a\x93\xf4\x54\x86\x61\x86\xb2\xce\xb0\x95\x36\xe3\x95\x53\xa7\xc8\x2c\xde\x12\x60\x2a\xe5\x25\x96\x25\x5b\x07\x8a\xe1\xe6\xf1\x4b\x25\x79\xb3\xf2\x60\x98\x12\x2d\xc8\x23\x6a\xf5\xb6\xf2\xc5\x17\x74\x47\xad\xad\xcc\x3e\x87\x9f\x3d\xb0\xaa\x6a\x35\x40\x29\xc8\x8a\x1e\x24\xb3\x2d\x0a\xcf\x35\x88\x9b\xf5\xec\xaa\x96\x4d\xd8\x27\x8e\x0b\x35\xb7\x62\x28\xa2\xa5\xf5\x38\xfc\x56\xe5\x7b\x49\x5f\xae\x76\xf9\x4b\xcc\xe4\x38\xc4\xe0\x37\xf6\x32\x0e\x9f\x96\x19\x27\xd3\x83\xdd\x82\x6f\x23\x6e\x05\x1f\xbf\x6f\x5f\xf2\x8d\x9e\x85\xdd\x57\xd1\x81\x00\x3e\xd8\x09\xae\x55\x44\x39\x49\x41\x56\xf3\xca\x4d\x24\xc6\x2e\xd1\xfa\x1d\x03\xaf\xfe\xdc\x6f\xf7\xdc\xdc\xa5\x58\x7e\x59\x26\x97\xcf\x6a\x79\x5b\xdd\xec\x52\x22\xe5\xed\x29\x78\xe0\x15\xa9\x60\xf9\x57\xa1\xb3\x4f\x3b\x29\x9c\xb5\x7f\x75\x90\x6a\xf2\x33\x0a\xd6\x77\xee\x63\x64\x03\x42\xaa\xc7\xa7\xb6\xac\x0b\x0b\x78\xd7\xeb\x07\xa9\x00\x02\xc0\x91\x6e\xcc\xd9\x94\x6f\xda\xf3\x33\xb8\xc2\x1f\x32\x78\xcd\xa3\xd4\x93\x85\x08\xbe\xb0\xe3\x8e\xed\x54\x8a\x8f\x7c\xc5\xb4\x1b\x52\x68\x7a\xb9\x79\x6b\x54\xbc\x26\xad\xc7\x03\x58\xbd\x3b\x7a\x85\x5c\x5f\x05\xdf\x52\x2d\x4e\x9e\xdc\x6f\xaa\x08\xea\xcd\x7b\x3e\x43\xd2\x9d\x9a\x4c\x88\x06\xf4\x0e\xf6\x6e\x57\x53\x06\xdb\x64\xbb\xe9\x0a\xc1\xbe\xbb\x97\xe8\x4e\x8d\x6e\xb5\xf7\x4d\x6e\x0b\x6d\xfe\xb1\xa3\x89\xe7\xcc\xfb\xf9\xb8\xd7\x03\xa1\xef\x30\x60\x88\xf1\xa3\x4b\x64\x69\x45\xa6\x98\x5f\xf4\xc2\x94\xc5\xc2\xc5\x50\x62\xcd\x9b\x85\x94\x9c\xc9\x74\x68\xc5\x86\xaf\x24\x62\xe2\xe8\x42\xed\x48\x3a\xea\x18\x7f\xc4\x9f\xe4\xed\xe5\xeb\x86\x14\x54\x70\x87\x9e\x1a\xb1\x17\x26\xdd\x2f\x5f\x5f\xb8\x57\x90\x89\xb1\xb6\x66\x25\x59\x1a\x97\x71\x7e\x86\x87\x31\x01\x5e\x23\x63\xb5\xcb\x7b\x0e\x2d\x0f\x33\x90\x1a\xf0\x55\x15\xf7\x1d\x47\x77\x3c\x68\x7f\x77\x3d\x37\x87\x43\x07\x16\x97\x3b\xb3\xfb\xb8\x31\x2d\x26\xed\xb6\x5e\x37\xd0\xe6\x93\xda\x0a\x54\xeb\x35\x0f\x81\x95\x7e\xb8\x57\x52\xe0\x33\x1f\x53\xcc\xa5\xd4\x37\xb6\xd1\xe4\xa5\x08\xda\x77\xaf\xf5\xed\x10\xdc\xa6\x26\x45\x27\xad\x84\x23\x4d\xa8\x58\xb0\x5c\x68\x11\xfd\x90\x41\xf8\xe1\x17\x9f\x4e\xce\x76\xbd\x25\xf7\xeb\x07\x3e\xcf\x27\x8b\x3e\x78\x20\xf4\x7a\x41\x92\x84\x1d\xdc\xf5\x8e\xd5\x26\x74\xba\x95\x72\x42\xdb\xf3\xc7\xf1\xf8\x4c\x98\x32\xad\x31\x0f\xef\x17\xc7\x99\xca\xa4\x79\xb6\xfb\xd7\x08\x7a\x16\x27\x21\xc5\xc0\x5f\x36\x45\xc6\x31\x7c\xe4\xf6\xa4\x3e\xa7\x5a\x65\x4c\xac\x08\x29\xed\xa9\xf8\x16\x0d\x21\xdc\xd5\x9f\x53\x30\x6b\x75\xc1\xce\xa6\xdb\xc3\x4e\x15\xd4\x3d\xe2\x15\xc9\x17\x78\x0b\x54\xc6\xa1\x8c\xc7\x95\xe8\x99\x37\x5c\x0a\xca\xbe\x49\x3c\x4e\x10\xde\xb9\xcb\x2c\xcf\x63\x7f\x2b\x45\x36\xa5\xff\xaf\x9a\x7f\x03\x00\x00\xff\xff\x3f\x96\x0e\xcb\x8b\x06\x00\x00"

func assetsServerTlsSnakeoilKeyBytes() ([]byte, error) {
	return bindataRead(
		_assetsServerTlsSnakeoilKey,
		"assets/server/tls/snakeoil.key",
	)
}

func assetsServerTlsSnakeoilKey() (*asset, error) {
	bytes, err := assetsServerTlsSnakeoilKeyBytes()
	if err != nil {
		return nil, err
	}

	info := bindataFileInfo{name: "assets/server/tls/snakeoil.key", size: 1675, mode: os.FileMode(436), modTime: time.Unix(1452132934, 0)}
	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){
	"assets/server/tls/snakeoil.crt": assetsServerTlsSnakeoilCrt,
	"assets/server/tls/snakeoil.key": assetsServerTlsSnakeoilKey,
}

// 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{
	"assets": &bintree{nil, map[string]*bintree{
		"server": &bintree{nil, map[string]*bintree{
			"tls": &bintree{nil, map[string]*bintree{
				"snakeoil.crt": &bintree{assetsServerTlsSnakeoilCrt, map[string]*bintree{
				}},
				"snakeoil.key": &bintree{assetsServerTlsSnakeoilKey, 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, "/")...)...)
}

