diff --git a/Makefile b/Makefile
index fb9d185..e69de29 100644
--- a/Makefile
+++ b/Makefile
@@ -1,26 +0,0 @@
-CWD=$(shell pwd)
-
-go-bindata:
- mkdir -p cmd/go-bindata
- mkdir -p cmd/go-bindata-assetfs
- curl -s -o cmd/go-bindata/main.go https://raw.githubusercontent.com/whosonfirst/go-bindata/master/cmd/go-bindata/main.go
- curl -s -o cmd/go-bindata-assetfs/main.go https://raw.githubusercontent.com/whosonfirst/go-bindata-assetfs/master/cmd/go-bindata-assetfs/main.go
-
-bake:
- @make bake-static
- @make bake-templates
-
-bake-static:
- go build -mod vendor -o bin/go-bindata cmd/go-bindata/main.go
- go build -mod vendor -o bin/go-bindata-assetfs cmd/go-bindata-assetfs/main.go
- rm -f static/*~ static/css/*~ static/javascript/*~
- @PATH=$(PATH):$(CWD)/bin bin/go-bindata-assetfs -pkg www -o http/www/staticfs.go static static/javascript/ static/css/
-
-bake-templates:
- rm -rf templates/html/*~
- bin/go-bindata -pkg templates -o assets/templates/html.go templates/html
-
-debug:
- @make bake
- go run -mod vendor cmd/spatial-server/main.go -enable-www -enable-properties -spatial-database-uri 'rtree:///?strict=false' -properties-reader-uri 'whosonfirst:///?reader=fs://$(REPO)/data&cache=gocache://' -data-endpoint $(DATA_ENDPOINT) -nextzen-apikey $(APIKEY) -mode directory:// $(REPO)/data
-
diff --git a/README.md b/README.md
index 5d68dea..f8c0156 100644
--- a/README.md
+++ b/README.md
@@ -35,25 +35,4 @@ type PropertiesReader interface {
}
```
-## Tools
-
-### spatial-server
-
-```
-go run -mod vendor cmd/spatial-server/main.go \
- -enable-www \
- -spatial-database-uri 'rtree:///?strict=false' \
- -properties-reader-uri 'whosonfirst:///?reader=fs:///usr/local/data/sfomuseum-data-maps/data&cache=gocache://' \
- -data-endpoint https://millsfield.sfomuseum.org/data \
- -nextzen-apikey {APIKEY}
- -mode directory:// /usr/local/data/sfomuseum-data-maps/data
-
-2020/04/03 09:40:26 -enable-www flag is true causing the following flags to also be true: -enable-geojson -enable-candidates -enable-properties
-2020/04/03 09:40:26 Feature ID 1360391313 triggered the following warning: Invalid wof:placetype
-2020/04/03 09:40:26 Feature ID 1360391317 triggered the following warning: Invalid wof:placetype
-2020/04/03 09:40:26 Feature ID 1360391321 triggered the following warning: Invalid wof:placetype
-...
-09:40:26.241237 [main] STATUS finished indexing in 27.925694ms
-```
-
## See also
\ No newline at end of file
diff --git a/assets/templates/html.go b/assets/templates/html.go
deleted file mode 100644
index 6aee7b3..0000000
--- a/assets/templates/html.go
+++ /dev/null
@@ -1,308 +0,0 @@
-// Code generated by go-bindata.
-// sources:
-// templates/html/inc_foot.html
-// templates/html/inc_head.html
-// templates/html/index.html
-// templates/html/pip.html
-// DO NOT EDIT!
-
-package templates
-
-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
-}
-
-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 _templatesHtmlInc_footHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xae\x4e\x49\x4d\xcb\xcc\x4b\x55\x50\xca\xcc\x4b\x8e\x4f\xcb\xcf\x2f\x51\xaa\xad\xe5\xe2\xe4\xb4\xd1\x4f\xc9\x2c\xb3\xe3\xe2\xb4\xd1\x4f\xca\x4f\xa9\xb4\xe3\xb2\xd1\xcf\x28\xc9\xcd\xb1\xe3\xe4\xaa\xae\x4e\xcd\x4b\xa9\xad\xe5\x02\x04\x00\x00\xff\xff\x39\xe9\x08\xde\x39\x00\x00\x00")
-
-func templatesHtmlInc_footHtmlBytes() ([]byte, error) {
- return bindataRead(
- _templatesHtmlInc_footHtml,
- "templates/html/inc_foot.html",
- )
-}
-
-func templatesHtmlInc_footHtml() (*asset, error) {
- bytes, err := templatesHtmlInc_footHtmlBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "templates/html/inc_foot.html", size: 57, mode: os.FileMode(420), modTime: time.Unix(1585680005, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _templatesHtmlInc_headHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x93\x3f\x8f\xdb\x30\x0c\xc5\xe7\xf8\x53\xa8\x9c\x6b\xbb\xdd\x3a\x58\x5e\x7a\x37\xb7\x43\x97\x4e\x05\x2b\x31\x31\xaf\xb2\x24\x88\xbc\xa4\x81\xe1\xef\x5e\xd8\x49\x0a\xdf\xe1\xa6\x43\x16\xff\xa1\xa8\xdf\x7b\x90\xf8\xa6\xc9\xd3\x9e\x23\x19\xe0\xe8\x7e\x0d\x84\x1e\xe6\xb9\xea\x3e\x3c\x7c\xfb\xfa\xe3\xe7\xf7\x47\x33\xe8\x18\xfa\xaa\x5b\x5e\x26\x60\x3c\x58\xa0\x08\x7d\x65\x8c\x31\xdd\xd2\xdd\x57\xbb\x6e\x24\x45\xe3\x06\x2c\x42\x6a\xe1\x59\xf7\xf5\x17\xe8\xab\xdd\xda\xb3\xae\x45\x1c\xc9\xc2\x91\xe9\x94\x53\x51\x30\x2e\x45\xa5\xa8\x16\x4e\xec\x75\xb0\x9e\x8e\xec\xa8\x5e\x7f\x3e\x1a\x8e\xac\x8c\xa1\x16\x87\x81\xec\xe7\xe6\x13\xf4\xbb\x55\xef\x02\x54\xd6\x40\xfd\x21\xd5\xa7\x21\x49\x8a\x7b\x2e\xa2\xb5\x64\x5c\xf6\x74\xed\x65\xf5\xaa\x2d\xae\x70\x56\xa3\xe7\x4c\x16\x94\xfe\x6a\xfb\x84\x47\xbc\x54\xc1\x48\x71\x16\x36\x95\x56\x02\xe7\x7c\x1e\x31\x37\xae\x24\x91\x01\xb9\x48\xf3\x24\xd0\x77\xed\xa5\xe3\x9d\xdc\x90\x1c\x86\x7d\x2a\x78\xa0\x66\xe4\xf8\x12\xb9\x12\xdf\xc7\xdd\x1c\x40\x13\x49\xef\x61\x75\x8b\x7c\x2e\xfc\x86\xd5\x3b\xf9\xbd\x5e\x58\x83\x99\xef\xed\xfb\x86\x1e\x31\xbf\xba\xbe\xdd\xfd\xe0\xcb\x90\xbe\x84\x6f\xce\x25\x70\xfc\x63\x0a\x05\x0b\xa2\xe7\x40\x32\x10\x29\x6c\xe5\x9c\x08\x98\xa1\xd0\xde\xc2\xf2\xfd\xa6\xc2\xda\xd3\xde\xe6\xa3\x6b\x6f\x61\xfb\x9d\xfc\xd9\x78\x54\xac\xd7\x07\x45\x9f\x13\x2f\x59\x9a\x26\xd3\x3c\xa0\xe2\xe3\xb5\x62\xe6\xf9\x7f\x0a\x3d\x1f\x8d\x0b\x28\x62\x61\xc9\x1e\x72\xa4\x02\x57\xf6\x34\x51\xf4\xf3\x5c\xfd\x0b\x00\x00\xff\xff\x80\x7a\x22\x9a\x0a\x04\x00\x00")
-
-func templatesHtmlInc_headHtmlBytes() ([]byte, error) {
- return bindataRead(
- _templatesHtmlInc_headHtml,
- "templates/html/inc_head.html",
- )
-}
-
-func templatesHtmlInc_headHtml() (*asset, error) {
- bytes, err := templatesHtmlInc_headHtmlBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "templates/html/inc_head.html", size: 1034, mode: os.FileMode(420), modTime: time.Unix(1585872496, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _templatesHtmlIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xae\x56\x48\x49\x4d\xcb\xcc\x4b\x55\x50\xca\xcc\x4b\x49\xad\x50\x52\xa8\xad\xe5\xaa\xae\x56\x28\x49\xcd\x2d\xc8\x49\x2c\x01\x0b\x27\xc7\x67\xa4\x26\xa6\x28\x29\xe8\x81\xe4\x14\x14\x14\x14\x6c\x52\x32\xcb\x14\x92\x73\x12\x8b\x8b\x6d\x95\x8a\xf2\xcb\x95\xec\xb8\x20\xc2\xfa\x29\x99\x65\x76\x5c\x98\xda\xd3\xf2\xf3\x4b\xa0\xda\xab\xab\x15\x52\xf3\x52\x40\x2c\x40\x00\x00\x00\xff\xff\x28\xc9\x55\xba\x7a\x00\x00\x00")
-
-func templatesHtmlIndexHtmlBytes() ([]byte, error) {
- return bindataRead(
- _templatesHtmlIndexHtml,
- "templates/html/index.html",
- )
-}
-
-func templatesHtmlIndexHtml() (*asset, error) {
- bytes, err := templatesHtmlIndexHtmlBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "templates/html/index.html", size: 122, mode: os.FileMode(420), modTime: time.Unix(1585680041, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _templatesHtmlPipHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x57\xc1\xae\xeb\x26\x10\x5d\x27\x5f\x31\x45\x6f\xf9\x88\xf7\x95\x63\xa9\x8b\x56\xaa\x54\x55\x5d\x77\xf3\x84\xcd\x24\x99\xf7\x30\x20\x18\xa7\x37\xb5\xf2\xef\x15\xd8\x49\x70\x92\x7b\xd5\x5b\x75\xd1\xdb\x1d\x1c\xce\xc0\x99\xc3\x38\x4c\xc6\x11\x34\xee\xc8\x22\x08\xef\xc8\x32\x59\xef\xcc\x69\xef\xac\x80\xf3\x79\x3d\x8e\xc0\xd8\x7b\xa3\x18\x41\x90\xed\xbe\x1c\x50\x69\x01\x9b\xb4\x56\x5b\x75\x6c\xd6\x00\x00\xf5\x77\x52\x4e\x83\x9d\x0b\x7d\xb3\x5e\xd5\x64\xfd\xc0\xc0\x27\x8f\x5b\xc1\xf8\xc2\x02\xac\xea\x71\x2b\xbe\x0e\xbd\x97\xec\xa4\x51\x6c\xd2\x11\xa4\x1f\x31\x6f\x54\x87\x07\x67\x34\x86\x69\x11\xd8\x81\x51\xfc\x39\xaf\x1e\x95\x19\x70\x2b\x04\x54\xe9\x9c\x76\x60\x76\x16\x3a\xa3\x62\xdc\x8a\x96\x2d\xb4\x6c\xa5\x0f\xd4\xab\x70\x12\xb3\x80\x38\xb4\x3d\xf1\xf2\xb0\x29\x50\x34\x69\x5e\x57\xd3\x6c\x4e\xa6\x9a\x92\x48\x63\x29\x9b\x75\x5d\xe5\x3c\xd7\xab\x5a\xd3\xf1\x72\x52\xa7\x82\x9e\x36\xcc\xa6\x49\xb2\xf2\x6a\x9b\x56\xac\x24\x59\x62\x52\x26\x25\x45\x3c\x68\xdc\x8a\x71\x84\xcd\xcf\x13\xfa\xcb\x0c\xc2\xf9\x7c\x4f\x77\x76\xff\x84\x7f\x41\x1f\x03\xfe\x74\xae\x5f\x70\x7f\x77\xae\xcf\xb4\x24\x39\xe7\x93\x64\x27\xa5\xbd\xf2\xa2\xd4\x2f\x5b\xa7\x4f\xa2\xa9\x2b\x4d\xc7\xa6\xe0\x96\x94\x9d\x73\x8c\x41\xa4\xbd\x56\xb5\x46\x56\x64\x62\xb3\x5e\x4d\xe4\x38\xf4\xc9\xe6\xe6\x27\x32\x8c\x21\xd6\xd5\x05\xb8\x10\x8a\xdd\x92\xa7\xb2\x3b\x60\xf7\x0d\x6e\x43\x49\xd6\x90\x45\x91\x02\x2e\x35\xf3\xc0\x97\x13\x7e\xef\xb3\xdc\xe5\x53\x5f\xc3\x25\xbe\x50\x64\xb4\xc9\x92\x4b\x1d\xe4\xed\x5a\xf7\x32\x5d\x1c\xc5\x2f\xdd\x10\x02\x5a\xbe\x16\x55\x01\x4d\x92\x8c\x6a\xd1\x3c\x91\x94\x71\x91\x32\x59\x06\x51\x84\x79\x5c\x57\x99\x73\xb5\x62\x36\xf9\x63\xf8\xa2\xd1\x07\xec\x14\xa3\x2e\xad\x29\xd0\x77\xb9\x53\xc6\x51\x84\xdb\xf4\x43\x7b\xd4\xa1\x8a\x4b\x7f\x66\xe4\x7d\x95\x33\xc7\xa4\xc2\xc9\xc3\xb7\x3c\xf9\x28\xd6\xc4\xc1\x63\x88\xa8\x97\xf6\x14\xe8\xbb\x2c\x2a\xe3\x28\xc2\x6d\xfa\x7f\xb2\x8a\xec\xfe\x99\x57\x09\xfe\x47\x66\xe5\xc0\xc2\x2d\xb2\xfb\xe7\x76\xcd\xb3\x71\x84\xa0\xec\x1e\xe1\x13\x7d\x86\x4f\x9e\xe1\xfb\x2d\x6c\x7e\x4b\x0f\x71\x12\x1e\xe1\x7c\x5e\xad\x56\xff\x05\x53\xfd\x45\xd3\x73\x4b\xf3\xf2\xc9\xa3\x1c\xc7\x94\xc6\xe6\x57\xd5\x4f\x8f\xe6\xec\xed\x1d\xfc\xf7\xbd\xbd\x9e\x7b\xbf\x73\xb3\x9c\xbf\x55\x94\xe3\x08\x68\x75\x6a\x9d\x56\xab\xba\xba\xbe\xa6\x6f\x3d\xad\x3f\xbe\x70\x50\xe5\xcb\xfa\xda\x1d\xec\x83\x1b\xfc\x22\x9f\x2c\x1b\x73\xbc\x68\x7e\x80\xce\xf5\xbd\x92\x11\xbd\x0a\xe9\xb7\x17\x0c\x45\x06\xb7\x03\xa5\x35\x31\x39\xab\x0c\xf8\xe0\x3c\x06\x26\x8c\xa9\xe3\x22\xdb\x99\x41\x63\x91\xd0\xb3\xb6\x6e\xe1\x9a\xb3\x1c\x9c\x79\xbc\xbb\xac\x62\xba\xa0\x59\x10\xa8\x40\x4a\x6a\x8c\x5d\xa0\x16\x75\x7b\xba\xad\x2c\xda\x3f\xf1\xda\xd7\x5d\xf8\x97\x0a\xb3\xa4\x5c\x2b\xfb\xa1\x61\x6b\xee\x3a\x22\x4f\x5e\x06\x8c\x83\xe1\xf8\xac\x33\xca\x17\x53\x50\x7b\xc5\xdd\x01\x63\x6a\x99\x06\xd3\xe4\xef\x61\xb1\xde\x29\xab\x49\x2b\xbe\x52\x4a\x5d\xb3\xf0\x8b\xc8\x75\x6d\xc8\x7e\x83\x80\x66\x2b\x22\x9f\x0c\xc6\x03\x22\x8b\xc2\xdb\xaa\x8b\x51\xc0\x21\xe0\x6e\x2b\xd2\xb8\xfa\xe3\xe0\xa2\xb3\x3b\x0a\x91\x37\xd1\xab\xf4\xbb\xb2\xf1\xe4\x37\x99\x57\x35\xeb\x3a\x99\xe9\xcb\xeb\xa9\xbe\xaa\xa3\x9a\x50\x01\x31\x74\x5b\x51\x20\xaf\xee\xf7\x35\xcb\x9f\x48\xff\xde\xae\xa9\x61\xbd\xdb\xfa\xf1\xdf\x45\x6a\x37\xe7\x7f\x17\xb7\x8f\xe5\xaf\x00\x00\x00\xff\xff\xed\x51\x9a\x78\xa2\x0c\x00\x00")
-
-func templatesHtmlPipHtmlBytes() ([]byte, error) {
- return bindataRead(
- _templatesHtmlPipHtml,
- "templates/html/pip.html",
- )
-}
-
-func templatesHtmlPipHtml() (*asset, error) {
- bytes, err := templatesHtmlPipHtmlBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "templates/html/pip.html", size: 3234, mode: os.FileMode(420), modTime: time.Unix(1585954330, 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){
- "templates/html/inc_foot.html": templatesHtmlInc_footHtml,
- "templates/html/inc_head.html": templatesHtmlInc_headHtml,
- "templates/html/index.html": templatesHtmlIndexHtml,
- "templates/html/pip.html": templatesHtmlPipHtml,
-}
-
-// 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{
- "templates": &bintree{nil, map[string]*bintree{
- "html": &bintree{nil, map[string]*bintree{
- "inc_foot.html": &bintree{templatesHtmlInc_footHtml, map[string]*bintree{}},
- "inc_head.html": &bintree{templatesHtmlInc_headHtml, map[string]*bintree{}},
- "index.html": &bintree{templatesHtmlIndexHtml, map[string]*bintree{}},
- "pip.html": &bintree{templatesHtmlPipHtml, 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, "/")...)...)
-}
diff --git a/cmd/go-bindata-assetfs/main.go b/cmd/go-bindata-assetfs/main.go
deleted file mode 100644
index 91d2ac9..0000000
--- a/cmd/go-bindata-assetfs/main.go
+++ /dev/null
@@ -1,123 +0,0 @@
-package main
-
-import (
- "bufio"
- "bytes"
- "flag"
- "fmt"
- "io/ioutil"
- "os"
- "os/exec"
- "strings"
-)
-
-func isDebug(args []string) bool {
- flagset := flag.NewFlagSet("", flag.ContinueOnError)
- debug := flagset.Bool("debug", false, "")
- debugArgs := make([]string, 0)
- for _, arg := range args {
- if strings.HasPrefix(arg, "-debug") {
- debugArgs = append(debugArgs, arg)
- }
- }
- flagset.Parse(debugArgs)
- if debug == nil {
- return false
- }
- return *debug
-}
-
-func getBinDataFile() (*os.File, *os.File, []string, error) {
- bindataArgs := make([]string, 0)
- outputLoc := "bindata.go"
-
- for i := 1; i < len(os.Args); i++ {
- if os.Args[i] == "-o" {
- outputLoc = os.Args[i+1]
- i++
- } else {
- bindataArgs = append(bindataArgs, os.Args[i])
- }
- }
-
- tempFile, err := ioutil.TempFile(os.TempDir(), "")
- if err != nil {
- return &os.File{}, &os.File{}, nil, err
- }
-
- outputFile, err := os.Create(outputLoc)
- if err != nil {
- return &os.File{}, &os.File{}, nil, err
- }
-
- bindataArgs = append([]string{"-o", tempFile.Name()}, bindataArgs...)
- return outputFile, tempFile, bindataArgs, nil
-}
-
-func main() {
- path, err := exec.LookPath("go-bindata")
- if err != nil {
- fmt.Println("Cannot find go-bindata executable in path")
- fmt.Println("Maybe you need: go get github.com/whosonfirst/go-bindata-assetfs/...")
- os.Exit(1)
- }
- out, in, args, err := getBinDataFile()
- if err != nil {
- fmt.Fprintln(os.Stderr, "Error: cannot create temporary file", err)
- os.Exit(1)
- }
- cmd := exec.Command(path, args...)
- cmd.Stdin = os.Stdin
- cmd.Stdout = os.Stdout
- cmd.Stderr = os.Stderr
- if err := cmd.Run(); err != nil {
- fmt.Fprintln(os.Stderr, "Error: go-bindata: ", err)
- os.Exit(1)
- }
- debug := isDebug(os.Args[1:])
- r := bufio.NewReader(in)
- done := false
- for line, isPrefix, err := r.ReadLine(); err == nil; line, isPrefix, err = r.ReadLine() {
- if !isPrefix {
- line = append(line, '\n')
- }
- if _, err := out.Write(line); err != nil {
- fmt.Fprintln(os.Stderr, "Cannot write to ", out.Name(), err)
- return
- }
- if !done && !isPrefix && bytes.HasPrefix(line, []byte("import (")) {
- if debug {
- fmt.Fprintln(out, "\t\"net/http\"")
- } else {
- fmt.Fprintln(out, "\t\"github.com/whosonfirst/go-bindata-assetfs\"")
- }
- done = true
- }
- }
- if debug {
- fmt.Fprintln(out, `
-func assetFS() http.FileSystem {
- for k := range _bintree.Children {
- return http.Dir(k)
- }
- panic("unreachable")
-}`)
- } else {
- fmt.Fprintln(out, `
-func assetFS() *assetfs.AssetFS {
- assetInfo := func(path string) (os.FileInfo, error) {
- return os.Stat(path)
- }
- for k := range _bintree.Children {
- return &assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: assetInfo, Prefix: k}
- }
- panic("unreachable")
-}`)
- }
- // Close files BEFORE remove calls (don't use defer).
- in.Close()
- out.Close()
- if err := os.Remove(in.Name()); err != nil {
- fmt.Fprintln(os.Stderr, "Cannot remove", in.Name(), err)
- }
-}
diff --git a/cmd/go-bindata/main.go b/cmd/go-bindata/main.go
deleted file mode 100644
index 36d56fc..0000000
--- a/cmd/go-bindata/main.go
+++ /dev/null
@@ -1,147 +0,0 @@
-// This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
-// license. Its contents can be found at:
-// http://creativecommons.org/publicdomain/zero/1.0/
-
-package main
-
-import (
- "flag"
- "fmt"
- "github.com/whosonfirst/go-bindata"
- "os"
- "path/filepath"
- "regexp"
- "runtime"
- "strings"
-)
-
-const (
- AppName = "go-bindata"
- AppVersionMajor = 3
- AppVersionMinor = 1
-)
-
-// revision part of the program version.
-// This will be set automatically at build time like so:
-//
-// go build -ldflags "-X main.AppVersionRev `date -u +%s`"
-var AppVersionRev string
-
-// borrowed from https://github.com/hashicorp/serf/blob/master/command/agent/flag_slice_value.go
-
-// AppendSliceValue implements the flag.Value interface and allows multiple
-// calls to the same variable to append a list.
-type AppendSliceValue []string
-
-func (s *AppendSliceValue) String() string {
- return strings.Join(*s, ",")
-}
-
-func (s *AppendSliceValue) Set(value string) error {
- if *s == nil {
- *s = make([]string, 0, 1)
- }
-
- *s = append(*s, value)
- return nil
-}
-
-func main() {
- cfg := parseArgs()
- err := bindata.Translate(cfg)
-
- if err != nil {
- fmt.Fprintf(os.Stderr, "bindata: %v\n", err)
- os.Exit(1)
- }
-}
-
-// parseArgs create s a new, filled configuration instance
-// by reading and parsing command line options.
-//
-// This function exits the program with an error, if
-// any of the command line options are incorrect.
-func parseArgs() *bindata.Config {
- var version bool
-
- c := bindata.NewConfig()
-
- flag.Usage = func() {
- fmt.Printf("Usage: %s [options] \n\n", os.Args[0])
- flag.PrintDefaults()
- }
-
- flag.BoolVar(&c.Debug, "debug", c.Debug, "Do not embed the assets, but provide the embedding API. Contents will still be loaded from disk.")
- flag.BoolVar(&c.Dev, "dev", c.Dev, "Similar to debug, but does not emit absolute paths. Expects a rootDir variable to already exist in the generated code's package.")
- flag.StringVar(&c.Tags, "tags", c.Tags, "Optional set of build tags to include.")
- flag.StringVar(&c.Prefix, "prefix", c.Prefix, "Optional path prefix to strip off asset names.")
- flag.StringVar(&c.Package, "pkg", c.Package, "Package name to use in the generated code.")
- flag.BoolVar(&c.NoMemCopy, "nomemcopy", c.NoMemCopy, "Use a .rodata hack to get rid of unnecessary memcopies. Refer to the documentation to see what implications this carries.")
- flag.BoolVar(&c.NoCompress, "nocompress", c.NoCompress, "Assets will *not* be GZIP compressed when this flag is specified.")
- flag.BoolVar(&c.NoMetadata, "nometadata", c.NoMetadata, "Assets will not preserve size, mode, and modtime info.")
- flag.UintVar(&c.Mode, "mode", c.Mode, "Optional file mode override for all files.")
- flag.Int64Var(&c.ModTime, "modtime", c.ModTime, "Optional modification unix timestamp override for all files.")
- flag.StringVar(&c.Output, "o", c.Output, "Optional name of the output file to be generated.")
- flag.BoolVar(&version, "version", false, "Displays version information.")
-
- ignore := make([]string, 0)
- flag.Var((*AppendSliceValue)(&ignore), "ignore", "Regex pattern to ignore")
-
- flag.Parse()
-
- patterns := make([]*regexp.Regexp, 0)
- for _, pattern := range ignore {
- patterns = append(patterns, regexp.MustCompile(pattern))
- }
- c.Ignore = patterns
-
- if version {
- fmt.Printf("%s\n", Version())
- os.Exit(0)
- }
-
- // Make sure we have input paths.
- if flag.NArg() == 0 {
- fmt.Fprintf(os.Stderr, "Missing \n\n")
- flag.Usage()
- os.Exit(1)
- }
-
- // Create input configurations.
- c.Input = make([]bindata.InputConfig, flag.NArg())
- for i := range c.Input {
- c.Input[i] = parseInput(flag.Arg(i))
- }
-
- return c
-}
-
-// parseRecursive determines whether the given path has a recrusive indicator and
-// returns a new path with the recursive indicator chopped off if it does.
-//
-// ex:
-// /path/to/foo/... -> (/path/to/foo, true)
-// /path/to/bar -> (/path/to/bar, false)
-func parseInput(path string) bindata.InputConfig {
- if strings.HasSuffix(path, "/...") {
- return bindata.InputConfig{
- Path: filepath.Clean(path[:len(path)-4]),
- Recursive: true,
- }
- } else {
- return bindata.InputConfig{
- Path: filepath.Clean(path),
- Recursive: false,
- }
- }
-
-}
-
-func Version() string {
- if len(AppVersionRev) == 0 {
- AppVersionRev = "0"
- }
-
- return fmt.Sprintf("%s %d.%d.%s (Go runtime %s).\nCopyright (c) 2010-2013, Jim Teeuwen.",
- AppName, AppVersionMajor, AppVersionMinor, AppVersionRev, runtime.Version())
-}
diff --git a/cmd/spatial-server/main.go b/cmd/spatial-server/main.go
deleted file mode 100644
index d196c3f..0000000
--- a/cmd/spatial-server/main.go
+++ /dev/null
@@ -1,239 +0,0 @@
-package main
-
-// go run -mod vendor cmd/spatial-server/main.go -enable-www -mode repo:// /usr/local/data/sfomuseum-data-maps/
-
-import (
- "context"
- "fmt"
- "github.com/aaronland/go-http-bootstrap"
- "github.com/aaronland/go-http-tangramjs"
- "github.com/rs/cors"
- "github.com/whosonfirst/go-whosonfirst-spatial/app"
- "github.com/whosonfirst/go-whosonfirst-spatial/assets/templates"
- "github.com/whosonfirst/go-whosonfirst-spatial/flags"
- "github.com/whosonfirst/go-whosonfirst-spatial/http/api"
- "github.com/whosonfirst/go-whosonfirst-spatial/http/health"
- "github.com/whosonfirst/go-whosonfirst-spatial/http/www"
- "github.com/whosonfirst/go-whosonfirst-spatial/server"
- "html/template"
- "log"
- gohttp "net/http"
- gourl "net/url"
-)
-
-func main() {
-
- fs, err := flags.CommonFlags()
-
- if err != nil {
- log.Fatal(err)
- }
-
- err = flags.AppendWWWFlags(fs)
-
- flags.Parse(fs)
-
- ctx := context.Background()
-
- err = flags.ValidateCommonFlags(fs)
-
- if err != nil {
- log.Fatal(err)
- }
-
- err = flags.ValidateWWWFlags(fs)
-
- if err != nil {
- log.Fatal(err)
- }
-
- enable_geojson, _ := flags.BoolVar(fs, "enable-geojson")
- enable_properties, _ := flags.BoolVar(fs, "enable-properties")
- enable_www, _ := flags.BoolVar(fs, "enable-www")
- enable_candidates, _ := flags.BoolVar(fs, "enable-candidates")
-
- path_templates, _ := flags.StringVar(fs, "path-templates")
- nextzen_apikey, _ := flags.StringVar(fs, "nextzen-apikey")
- nextzen_style_url, _ := flags.StringVar(fs, "nextzen-style-url")
- nextzen_tile_url, _ := flags.StringVar(fs, "nextzen-tile-url")
-
- initial_lat, _ := flags.Float64Var(fs, "initial-latitude")
- initial_lon, _ := flags.Float64Var(fs, "initial-longitude")
- initial_zoom, _ := flags.IntVar(fs, "initial-zoom")
-
- data_endpoint, _ := flags.StringVar(fs, "data-endpoint")
-
- host, _ := flags.StringVar(fs, "host")
- port, _ := flags.IntVar(fs, "port")
- proto := "http" // FIX ME
-
- spatial_app, err := app.NewSpatialApplicationWithFlagSet(ctx, fs)
-
- if err != nil {
- log.Fatal(fmt.Sprintf("Failed to create new spatial application, because %s", err))
- }
-
- logger := spatial_app.Logger
-
- paths := fs.Args()
-
- err = spatial_app.IndexPaths(ctx, paths...)
-
- if err != nil {
- logger.Fatal("Failed to index paths, because %s", err)
- }
-
- mux := gohttp.NewServeMux()
-
- ping_handler, err := health.PingHandler()
-
- if err != nil {
- logger.Fatal("failed to create ping handler because %s", err)
- }
-
- mux.Handle("/health/ping", ping_handler)
-
- enable_cors := true
- cors_origins := []string{"*"}
-
- var cors_wrapper *cors.Cors
-
- if enable_cors {
- cors_wrapper = cors.New(cors.Options{
- AllowedOrigins: cors_origins,
- })
- }
-
- api_pip_opts := &api.PointInPolygonHandlerOptions{
- EnableGeoJSON: enable_geojson,
- EnableProperties: enable_properties,
- }
-
- api_pip_handler, err := api.PointInPolygonHandler(spatial_app, api_pip_opts)
-
- if err != nil {
- logger.Fatal("failed to create point-in-polygon handler because %s", err)
- }
-
- if enable_cors {
- api_pip_handler = cors_wrapper.Handler(api_pip_handler)
- }
-
- mux.Handle("/api/point-in-polygon", api_pip_handler)
-
- if enable_candidates {
-
- logger.Debug("setting up candidates handler")
-
- candidates_handler, err := api.PointInPolygonCandidatesHandler(spatial_app)
-
- if err != nil {
- logger.Fatal("failed to create Spatial handler because %s", err)
- }
-
- if enable_cors {
- candidates_handler = cors_wrapper.Handler(candidates_handler)
- }
-
- mux.Handle("/api/point-in-polygon/candidates", candidates_handler)
- }
-
- if enable_www {
-
- t := template.New("spatial").Funcs(template.FuncMap{
- //
- })
-
- if path_templates != "" {
-
- t, err = t.ParseGlob(path_templates)
-
- if err != nil {
- logger.Fatal("Unable to parse templates, %v", err)
- }
-
- } else {
-
- for _, name := range templates.AssetNames() {
-
- body, err := templates.Asset(name)
-
- if err != nil {
- logger.Fatal("Unable to load template '%s', %v", name, err)
- }
-
- t, err = t.Parse(string(body))
-
- if err != nil {
- logger.Fatal("Unable to parse template '%s', %v", name, err)
- }
- }
- }
-
- bootstrap_opts := bootstrap.DefaultBootstrapOptions()
-
- tangramjs_opts := tangramjs.DefaultTangramJSOptions()
- tangramjs_opts.Nextzen.APIKey = nextzen_apikey
- tangramjs_opts.Nextzen.StyleURL = nextzen_style_url
- tangramjs_opts.Nextzen.TileURL = nextzen_tile_url
-
- err = tangramjs.AppendAssetHandlers(mux)
-
- if err != nil {
- logger.Fatal("Failed to append tangram.js assets, %v", err)
- }
-
- err = bootstrap.AppendAssetHandlers(mux)
-
- if err != nil {
- logger.Fatal("Failed to append bootstrap assets, %v", err)
- }
-
- err = www.AppendStaticAssetHandlers(mux)
-
- if err != nil {
- logger.Fatal("Failed to append static assets, %v", err)
- }
-
- www_pip_opts := &www.PointInPolygonHandlerOptions{
- Templates: t,
- InitialLatitude: initial_lat,
- InitialLongitude: initial_lon,
- InitialZoom: initial_zoom,
- DataEndpoint: data_endpoint,
- }
-
- www_pip_handler, err := www.PointInPolygonHandler(spatial_app, www_pip_opts)
-
- if err != nil {
- logger.Fatal("failed to create (bundled) www handler because %s", err)
- }
-
- www_pip_handler = bootstrap.AppendResourcesHandler(www_pip_handler, bootstrap_opts)
- www_pip_handler = tangramjs.AppendResourcesHandler(www_pip_handler, tangramjs_opts)
-
- mux.Handle("/point-in-polygon", www_pip_handler)
- }
-
- address := fmt.Sprintf("spatial://%s:%d", host, port)
-
- u, err := gourl.Parse(address)
-
- if err != nil {
- logger.Fatal("Failed to parse address '%s', %v", address, err)
- }
-
- s, err := server.NewStaticServer(proto, u)
-
- if err != nil {
- logger.Fatal("Failed to create new server for '%s' (%s), %v", u, proto, err)
- }
-
- logger.Info("Listening on %s", s.Address())
-
- err = s.ListenAndServe(mux)
-
- if err != nil {
- logger.Fatal("Failed to start server, %v", err)
- }
-}
diff --git a/go.mod b/go.mod
index 4696c6f..0f70a00 100644
--- a/go.mod
+++ b/go.mod
@@ -3,20 +3,13 @@ module github.com/whosonfirst/go-whosonfirst-spatial
go 1.12
require (
- github.com/aaronland/go-http-bootstrap v0.0.5
- github.com/aaronland/go-http-rewrite v0.0.4
- github.com/aaronland/go-http-sanitize v0.0.4
github.com/aaronland/go-http-tangramjs v0.0.6
github.com/aaronland/go-roster v0.0.1
github.com/dhconnelly/rtreego v1.0.0
github.com/patrickmn/go-cache v2.1.0+incompatible
- github.com/rs/cors v1.7.0
github.com/skelterjohn/geom v0.0.0-20180103142417-96f3e8a219c5
github.com/tidwall/gjson v1.6.0
- github.com/tidwall/sjson v1.1.0
- github.com/whosonfirst/algnhsa v0.1.0
- github.com/whosonfirst/go-bindata v0.1.0
- github.com/whosonfirst/go-bindata-assetfs v1.0.1
+ github.com/tidwall/sjson v1.1.1
github.com/whosonfirst/go-cache v0.0.2
github.com/whosonfirst/go-reader v0.1.1
github.com/whosonfirst/go-reader-cachereader v0.0.0-20200228003730-10ce58b401b3
diff --git a/go.sum b/go.sum
index 2ccf802..99528c9 100644
--- a/go.sum
+++ b/go.sum
@@ -131,6 +131,8 @@ github.com/tidwall/sjson v1.0.4 h1:UcdIRXff12Lpnu3OLtZvnc03g4vH2suXDXhBwBqmzYg=
github.com/tidwall/sjson v1.0.4/go.mod h1:bURseu1nuBkFpIES5cz6zBtjmYeOQmEESshn7VpF15Y=
github.com/tidwall/sjson v1.1.0 h1:LGU6unLN4POSpRtufkOVgpFbcWLhMSgLsR4mV8wqYxM=
github.com/tidwall/sjson v1.1.0/go.mod h1:yvVuSnpEQv5cYIrO+AT6kw4QVfd5SDZoGIS7/5+fZFs=
+github.com/tidwall/sjson v1.1.1 h1:7h1vk049Jnd5EH9NyzNiEuwYW4b5qgreBbqRC19AS3U=
+github.com/tidwall/sjson v1.1.1/go.mod h1:yvVuSnpEQv5cYIrO+AT6kw4QVfd5SDZoGIS7/5+fZFs=
github.com/twpayne/go-geom v1.0.5 h1:XZBfc3Wx0dj4p17ZfmzqxnU9fTTa3pY4YG5RngKsVNI=
github.com/twpayne/go-geom v1.0.5/go.mod h1:gO3i8BeAvZuihwwXcw8dIOWXebCzTmy3uvXj9dZG2RA=
github.com/twpayne/go-kml v1.0.0/go.mod h1:LlvLIQSfMqYk2O7Nx8vYAbSLv4K9rjMvLlEdUKWdjq0=
diff --git a/http/api/output/json.go b/http/api/output/json.go
deleted file mode 100644
index e87751b..0000000
--- a/http/api/output/json.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package output
-
-import (
- "encoding/json"
- "net/http"
-)
-
-func AsJSON(rsp http.ResponseWriter, data interface{}) {
-
- js, err := json.Marshal(data)
-
- if err != nil {
- http.Error(rsp, err.Error(), http.StatusInternalServerError)
- return
- }
-
- rsp.Header().Set("Content-Type", "application/json")
- rsp.Write(js)
-}
diff --git a/http/api/parameters/parameters.go b/http/api/parameters/parameters.go
deleted file mode 100644
index 4d6d60b..0000000
--- a/http/api/parameters/parameters.go
+++ /dev/null
@@ -1,104 +0,0 @@
-package parameters
-
-import (
- "errors"
- "github.com/aaronland/go-http-sanitize"
- "github.com/skelterjohn/geom"
- geojson_utils "github.com/whosonfirst/go-whosonfirst-geojson-v2/utils"
- "github.com/whosonfirst/go-whosonfirst-spatial/geo"
- "net/http"
- "strconv"
- "strings"
-)
-
-func Latitude(req *http.Request) (float64, error) {
-
- str_lat, err := sanitize.GetString(req, "latitude")
-
- if err != nil {
- return 0, err
- }
-
- if str_lat == "" {
- return 0, errors.New("Missing 'latitude' parameter")
- }
-
- lat, err := strconv.ParseFloat(str_lat, 64)
-
- if err != nil {
- return 0, err
- }
-
- if !geo.IsValidLatitude(lat) {
- return 0, errors.New("Invalid 'latitude' parameter")
- }
-
- return lat, nil
-}
-
-func Longitude(req *http.Request) (float64, error) {
-
- str_lon, err := sanitize.GetString(req, "longitude")
-
- if err != nil {
- return 0, err
- }
-
- if str_lon == "" {
- return 0, errors.New("Missing 'longitude' parameter")
- }
-
- lon, err := strconv.ParseFloat(str_lon, 64)
-
- if err != nil {
- return 0, err
- }
-
- if !geo.IsValidLongitude(lon) {
- return 0, errors.New("Invalid 'longitude' parameter")
- }
-
- return lon, nil
-}
-
-func Coordinate(req *http.Request) (*geom.Coord, error) {
-
- lat, err := Latitude(req)
-
- if err != nil {
- return nil, err
- }
-
- lon, err := Longitude(req)
-
- if err != nil {
- return nil, err
- }
-
- coord, err := geojson_utils.NewCoordinateFromLatLons(lat, lon)
-
- if err != nil {
- return nil, err
- }
-
- return &coord, err
-}
-
-func Properties(req *http.Request) ([]string, error) {
-
- var properties []string
-
- str_properties, err := sanitize.GetString(req, "properties")
-
- if err != nil {
- return nil, err
- }
-
- str_properties = strings.Trim(str_properties, " ")
-
- if str_properties != "" {
- properties = strings.Split(str_properties, ",")
- }
-
- return properties, nil
-}
diff --git a/http/api/pip.go b/http/api/pip.go
deleted file mode 100644
index c8ef7b8..0000000
--- a/http/api/pip.go
+++ /dev/null
@@ -1,157 +0,0 @@
-package api
-
-import (
- "github.com/aaronland/go-http-sanitize"
- "github.com/whosonfirst/go-whosonfirst-spatial/app"
- "github.com/whosonfirst/go-whosonfirst-spatial/filter"
- "github.com/whosonfirst/go-whosonfirst-spatial/http/api/output"
- "github.com/whosonfirst/go-whosonfirst-spatial/http/api/parameters"
- "github.com/whosonfirst/go-whosonfirst-spr"
- _ "log"
- "net/http"
-)
-
-type PointInPolygonHandlerOptions struct {
- EnableGeoJSON bool
- EnableProperties bool
-}
-
-func PointInPolygonHandler(spatial_app *app.SpatialApplication, opts *PointInPolygonHandlerOptions) (http.Handler, error) {
-
- spatial_db := spatial_app.SpatialDatabase
- properties_r := spatial_app.PropertiesReader
- walker := spatial_app.Walker
-
- fn := func(rsp http.ResponseWriter, req *http.Request) {
-
- if walker.IsIndexing() {
- http.Error(rsp, "indexing records", http.StatusServiceUnavailable)
- return
- }
-
- ctx := req.Context()
- query := req.URL.Query()
-
- coord, err := parameters.Coordinate(req)
-
- if err != nil {
- http.Error(rsp, err.Error(), http.StatusBadRequest)
- return
- }
-
- str_format, err := sanitize.GetString(req, "format")
-
- if err != nil {
- http.Error(rsp, err.Error(), http.StatusBadRequest)
- return
- }
-
- if str_format == "geojson" && !opts.EnableGeoJSON {
- http.Error(rsp, "Invalid format", http.StatusBadRequest)
- return
- }
-
- if str_format == "properties" && !opts.EnableProperties {
- http.Error(rsp, "Invalid format", http.StatusBadRequest)
- return
- }
-
- properties_paths, err := parameters.Properties(req)
-
- if err != nil {
- http.Error(rsp, err.Error(), http.StatusBadRequest)
- return
- }
-
- filters, err := filter.NewSPRFilterFromQuery(query)
-
- if err != nil {
- http.Error(rsp, err.Error(), http.StatusBadRequest)
- return
- }
-
- results, err := spatial_db.PointInPolygon(ctx, coord, filters)
-
- if err != nil {
- http.Error(rsp, err.Error(), http.StatusInternalServerError)
- return
- }
-
- var final interface{}
- final = results
-
- switch str_format {
- case "geojson":
-
- collection, err := spatial_db.StandardPlacesResultsToFeatureCollection(ctx, results)
-
- if err != nil {
- http.Error(rsp, err.Error(), http.StatusInternalServerError)
- return
- }
-
- err = properties_r.AppendPropertiesWithFeatureCollection(ctx, collection, properties_paths)
-
- if err != nil {
- http.Error(rsp, err.Error(), http.StatusInternalServerError)
- return
- }
-
- final = collection
-
- case "properties":
-
- props, err := properties_r.PropertiesResponseResultsWithStandardPlacesResults(ctx, final.(spr.StandardPlacesResults), properties_paths)
-
- if err != nil {
- http.Error(rsp, err.Error(), http.StatusInternalServerError)
- return
- }
-
- final = props
-
- default:
- // spr (above)
- }
-
- output.AsJSON(rsp, final)
- }
-
- h := http.HandlerFunc(fn)
- return h, nil
-}
-
-func PointInPolygonCandidatesHandler(spatial_app *app.SpatialApplication) (http.Handler, error) {
-
- walker := spatial_app.Walker
- spatial_db := spatial_app.SpatialDatabase
-
- fn := func(rsp http.ResponseWriter, req *http.Request) {
-
- if walker.IsIndexing() {
- http.Error(rsp, "indexing records", http.StatusServiceUnavailable)
- return
- }
-
- ctx := req.Context()
-
- coord, err := parameters.Coordinate(req)
-
- if err != nil {
- http.Error(rsp, err.Error(), http.StatusBadRequest)
- return
- }
-
- candidates, err := spatial_db.PointInPolygonCandidates(ctx, coord)
-
- if err != nil {
- http.Error(rsp, err.Error(), http.StatusInternalServerError)
- return
- }
-
- output.AsJSON(rsp, candidates)
- }
-
- h := http.HandlerFunc(fn)
- return h, nil
-}
diff --git a/http/health/ping.go b/http/health/ping.go
deleted file mode 100644
index 0a842c7..0000000
--- a/http/health/ping.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package health
-
-import (
- gohttp "net/http"
-)
-
-func PingHandler() (gohttp.Handler, error) {
-
- fn := func(rsp gohttp.ResponseWriter, req *gohttp.Request) {
- rsp.Header().Set("Content-Type", "text/plain")
- rsp.Write([]byte("PONG"))
- }
-
- h := gohttp.HandlerFunc(fn)
- return h, nil
-}
diff --git a/http/www/index.go b/http/www/index.go
deleted file mode 100644
index 74d89cc..0000000
--- a/http/www/index.go
+++ /dev/null
@@ -1,28 +0,0 @@
-package www
-
-import (
- "errors"
- "html/template"
- gohttp "net/http"
-)
-
-type IndexHandlerOptions struct {
- Templates *template.Template
-}
-
-func IndexHandler(opts *IndexHandlerOptions) (gohttp.Handler, error) {
-
- t := opts.Templates.Lookup("index")
-
- if t == nil {
- return nil, errors.New("Missing 'index' template")
- }
-
- fn := func(rsp gohttp.ResponseWriter, req *gohttp.Request) {
-
- return
- }
-
- h := gohttp.HandlerFunc(fn)
- return h, nil
-}
diff --git a/http/www/pip.go b/http/www/pip.go
deleted file mode 100644
index 6b31c69..0000000
--- a/http/www/pip.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package www
-
-import (
- "errors"
- "github.com/whosonfirst/go-whosonfirst-placetypes"
- "github.com/whosonfirst/go-whosonfirst-spatial/app"
- "html/template"
- _ "log"
- gohttp "net/http"
-)
-
-type PointInPolygonHandlerOptions struct {
- Templates *template.Template
- InitialLatitude float64
- InitialLongitude float64
- InitialZoom int
- DataEndpoint string
-}
-
-type PointInPolygonHandlerTemplateVars struct {
- InitialLatitude float64
- InitialLongitude float64
- InitialZoom int
- DataEndpoint string
- Placetypes []*placetypes.WOFPlacetype
-}
-
-func PointInPolygonHandler(spatial_app *app.SpatialApplication, opts *PointInPolygonHandlerOptions) (gohttp.Handler, error) {
-
- t := opts.Templates.Lookup("pointinpolygon")
-
- if t == nil {
- return nil, errors.New("Missing pointinpolygon template")
- }
-
- walker := spatial_app.Walker
-
- pt_list, err := placetypes.Placetypes()
-
- if err != nil {
- return nil, err
- }
-
- fn := func(rsp gohttp.ResponseWriter, req *gohttp.Request) {
-
- if walker.IsIndexing() {
- gohttp.Error(rsp, "indexing records", gohttp.StatusServiceUnavailable)
- return
- }
-
- // important if we're trying to use this in a Lambda/API Gateway context
-
- rsp.Header().Set("Content-Type", "text/html; charset=utf-8")
-
- vars := PointInPolygonHandlerTemplateVars{
- InitialLatitude: opts.InitialLatitude,
- InitialLongitude: opts.InitialLongitude,
- InitialZoom: opts.InitialZoom,
- DataEndpoint: opts.DataEndpoint,
- Placetypes: pt_list,
- }
-
- err := t.Execute(rsp, vars)
-
- if err != nil {
- gohttp.Error(rsp, err.Error(), gohttp.StatusInternalServerError)
- return
- }
-
- return
- }
-
- h := gohttp.HandlerFunc(fn)
- return h, nil
-}
diff --git a/http/www/static.go b/http/www/static.go
deleted file mode 100644
index 5c075ae..0000000
--- a/http/www/static.go
+++ /dev/null
@@ -1,80 +0,0 @@
-package www
-
-import (
- "github.com/aaronland/go-http-rewrite"
- gohttp "net/http"
- "path/filepath"
- "strings"
-)
-
-func StaticFileSystem() (gohttp.FileSystem, error) {
- fs := assetFS()
- return fs, nil
-}
-
-func StaticAssetsHandler() (gohttp.Handler, error) {
-
- fs := assetFS()
- return gohttp.FileServer(fs), nil
-}
-
-func StaticAssetsHandlerWithPrefix(prefix string) (gohttp.Handler, error) {
-
- fs_handler, err := StaticAssetsHandler()
-
- if err != nil {
- return nil, err
- }
-
- prefix = strings.TrimRight(prefix, "/")
-
- if prefix == "" {
- return fs_handler, nil
- }
-
- rewrite_func := func(req *gohttp.Request) (*gohttp.Request, error) {
- req.URL.Path = strings.Replace(req.URL.Path, prefix, "", 1)
- return req, nil
- }
-
- rewrite_handler := rewrite.RewriteRequestHandler(fs_handler, rewrite_func)
- return rewrite_handler, nil
-}
-
-func AppendStaticAssetHandlers(mux *gohttp.ServeMux) error {
- return AppendStaticAssetHandlersWithPrefix(mux, "")
-}
-
-func AppendStaticAssetHandlersWithPrefix(mux *gohttp.ServeMux, prefix string) error {
-
- asset_handler, err := StaticAssetsHandlerWithPrefix(prefix)
-
- if err != nil {
- return nil
- }
-
- for _, path := range AssetNames() {
-
- path = strings.Replace(path, "static", "", 1)
-
- if prefix != "" {
- path = appendPrefix(prefix, path)
- }
-
- mux.Handle(path, asset_handler)
- }
-
- return nil
-}
-
-func appendPrefix(prefix string, path string) string {
-
- prefix = strings.TrimRight(prefix, "/")
-
- if prefix != "" {
- path = strings.TrimLeft(path, "/")
- path = filepath.Join(prefix, path)
- }
-
- return path
-}
diff --git a/http/www/staticfs.go b/http/www/staticfs.go
deleted file mode 100644
index aa229e5..0000000
--- a/http/www/staticfs.go
+++ /dev/null
@@ -1,482 +0,0 @@
-// Code generated by go-bindata.
-// sources:
-// static/javascript/localforage.min.js
-// static/javascript/slippymap.crosshairs.js
-// static/javascript/whosonfirst.net.js
-// static/javascript/whosonfirst.spatial.api.js
-// static/javascript/whosonfirst.spatial.init.js
-// static/javascript/whosonfirst.spatial.maps.js
-// static/javascript/whosonfirst.spatial.pip.init.js
-// static/javascript/whosonfirst.spatial.pip.js
-// static/javascript/whosonfirst.uri.js
-// static/css/whosonfirst.spatial.css
-// static/css/whosonfirst.spatial.pip.css
-// DO NOT EDIT!
-
-package www
-
-import (
- "bytes"
- "compress/gzip"
- "fmt"
- "github.com/whosonfirst/go-bindata-assetfs"
- "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
-}
-
-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 _staticJavascriptLocalforageMinJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x7d\xfb\x73\xdb\x36\x9e\xf8\xef\xf7\x57\x50\xfc\xee\x29\xc0\x0a\x61\xa4\x24\xdb\xdd\x13\x8d\x78\x1c\xdb\x49\xdd\x3a\x76\x6a\x3b\x4d\xbb\x5a\x9d\x07\x2f\x52\xb4\x65\xd2\x21\x29\x3b\xae\xa4\xfe\xed\xdf\xc1\x83\x20\x48\x51\x4e\x7a\xed\x4e\xef\x66\xda\x98\xc4\x8b\xc0\xe7\xfd\x00\xa0\x67\x7f\xed\xfd\x87\xe7\x79\xde\x3c\x63\x64\xfe\x26\xcb\x49\x2c\xbc\xa7\x4f\xbd\xd3\x28\x9a\x27\xa9\xf0\xce\x4b\x55\x84\xbc\xa3\x9b\xdb\x3c\xbb\x13\x5c\x35\xfe\x51\xe4\x45\x92\xa5\xde\x28\xf8\x7b\xf0\x42\x95\xcc\xca\xf2\xb6\x18\x3f\x7b\xa6\x86\x89\x54\x9f\x20\x4e\xca\xd9\x82\x06\x49\xf6\xcc\x19\x5c\xb5\x06\x0c\x7a\xcf\x87\xa3\x17\x4f\x9f\x0f\x47\x7f\xf7\xde\x65\xbf\x24\xf3\x39\x41\xde\xde\x2d\x61\x33\xe1\x1d\x27\x4c\xa4\x85\xf0\x9e\x07\xc3\xff\xf8\xeb\xb3\xff\xe8\x45\x8b\x94\x95\x49\x96\x02\x02\x97\x49\x04\xfc\x8c\x5e\x09\x56\xfa\x18\x97\x0f\xb7\x22\x8b\x3c\xf1\xf9\x36\xcb\xcb\xa2\xdf\xf7\x17\x29\x17\x51\x92\x0a\xee\xf7\xaa\xca\x9b\x8c\x2f\xe6\x02\xea\x3f\x81\x69\x8a\x09\x80\xa1\x98\x17\xc2\x93\xe3\x55\xe3\xd7\x23\xea\x51\xfa\x7d\xfd\x37\x20\x37\x1c\xea\x47\x30\x99\x22\xa2\xbb\x2e\xef\x48\xee\xd1\x90\xe2\xae\xaf\xde\x27\x29\xcf\xee\x77\xf5\x9f\x71\x57\x8b\x78\x9e\x51\x32\xdf\xd5\x7f\x3a\x5b\x14\x62\x1e\xed\xca\x7f\xc6\xe5\x2c\x29\x10\x0d\x1c\xd8\xca\x05\xac\xd7\xc0\x42\x06\x2e\x73\x51\x2e\xf2\xd4\xab\x4a\x3c\x02\x28\x62\x88\xc3\xa5\x2d\x11\x20\x46\x33\x05\xc1\x1e\x9b\xc4\x53\xfd\x44\xd5\x93\x5c\x4a\x82\x3b\x00\x91\x8b\x4f\x8b\x24\x17\xfd\xbe\x79\x08\x65\x9f\x59\xbf\x9f\x40\xf3\xbd\x04\xc4\xa8\x37\x84\xb2\x3c\xaa\xca\x22\x53\x26\x47\xbd\xc2\xa9\xb8\xf7\x0e\xf3\x3c\xcb\x81\xbf\x4f\xd2\x34\x2b\xbd\x28\x49\xb9\xc1\x8b\xf7\xc4\x1f\xc4\x03\xff\x89\x0f\xc3\x72\x96\x67\xf7\xde\x55\xc0\x32\x2e\xb0\xff\xee\xf4\xe0\xc3\xf1\xe1\xe5\xc9\xe9\xc5\xe5\x9b\xd3\x0f\x27\x07\x3e\xba\x5a\xcb\xf1\xae\xb1\x9c\x3b\x5e\x1a\x44\x8e\x97\xeb\x75\x28\xd7\x30\x19\x4e\x03\x46\xe6\x73\x70\x5d\xe1\x18\xb9\x64\x23\xbb\x32\xac\x1a\x8e\xa6\x13\x32\x0d\xcd\x54\x05\x60\xab\x15\x81\x6b\x74\x8d\xea\x8e\x04\x69\xd0\xad\x4d\x23\xf9\xc5\xaa\x72\x1d\x65\x39\x90\xa3\x45\x5f\x03\x2e\x14\xe3\x61\x18\xef\xf0\x60\x2e\xd2\xb8\x9c\x85\xf1\x60\x00\x05\xe0\x12\xe6\x76\x06\x6b\xb0\x1c\x8d\x27\xf5\x64\xe5\xc7\xe1\x12\xb8\xb3\xf7\x17\x85\xf0\x8a\x32\x4f\x58\xe9\x87\x16\x9f\x0c\xc0\xe5\x35\xee\x0d\xc3\x6a\x4a\xaa\x2b\x9e\x57\x1f\x63\x21\x5c\xca\x2a\x8a\xe7\x68\x8e\x25\xe1\xe2\xa7\xa3\x70\x30\x20\x3b\x2c\x84\x74\x42\xa6\x00\x86\x75\xf3\xf5\x35\xee\x8d\xd6\x76\x70\x2e\xbf\x3b\xea\x61\x3c\x0f\x6e\x17\xc5\x0c\x10\xb8\x5a\x5d\xaf\x56\x02\x40\x85\x06\x81\x22\x4c\x82\x77\x8b\x92\xc8\xd6\xa7\xb4\x10\xf9\x9d\xc8\x57\x2b\x12\x7c\x14\xf4\xfb\xa4\x6c\xd7\x68\xfa\x50\x68\x88\xf1\x10\xcd\x14\x55\x44\x80\x41\x94\x60\x12\xf0\x8c\x2d\x6e\x44\x5a\x06\x2c\x17\xa4\x14\x17\xe2\x73\x79\x92\x71\x01\x7c\x1f\x86\xb3\x20\xd3\x63\x80\x04\x2d\xd9\x8c\xe4\x84\x95\x22\x3f\x20\x25\x19\xf7\x86\x6b\x88\x04\x76\x98\x20\x09\x38\x29\x09\x8e\xf1\x60\x10\xff\xe7\xf3\xf5\xba\x62\x71\x12\x14\xa2\x3c\xba\xb9\x11\x3c\x21\xa5\x58\xad\xee\xb2\x84\x7b\x43\x8c\xe5\x1a\x44\x51\x90\x58\xec\xcf\x48\x9a\x8a\x39\x14\xd8\xaf\x66\xe3\x27\xa9\x47\xfa\x7d\x3f\x4b\x73\x41\xf8\x43\x51\x92\x52\xb0\x19\x49\x63\xa1\x6a\xda\xb3\x3e\x9c\x0b\xf9\x06\xfc\x82\xe5\xc9\x6d\xe9\xc3\x5d\x67\x62\x4a\x56\x6c\xae\x74\xa3\x4f\x48\x83\xcd\xcf\xb9\x2b\x64\x00\xa2\xce\x36\xe9\x62\x3e\x47\x34\xb8\x25\xb9\x48\x15\xf4\x82\x5c\xdc\x64\x77\x62\x7f\x96\xcc\x39\xa0\x10\x51\xd5\x64\x8d\x9c\x49\x54\x0f\x66\x1a\x01\xb9\xbd\x15\x29\xaf\x7a\xac\xc7\xce\x77\x0b\x51\x5e\x24\x37\x22\x5b\x94\x80\xa1\x21\x5c\xd7\x22\x50\x73\x78\x1b\x90\xe1\x55\x20\xf9\x65\x14\x64\xe9\x8d\xae\xc0\xac\x89\x2b\xdd\xe0\x79\x70\x9b\x15\xa5\xe9\x0b\x86\x70\xad\xb9\x5c\x11\x6c\x48\xad\xbc\xe6\x6b\xa8\xd9\x5b\x89\xc2\xdf\x2b\x4f\xbf\x2c\xb1\x97\x6b\xb8\x46\xcb\xf5\x14\x3d\xdf\x64\xcd\x6e\x6e\xe4\x00\x2e\xd7\x8e\xac\x35\xba\xca\xca\x08\xfb\x21\x02\xb5\xa4\x93\x50\xbb\x78\xb8\x15\x46\x36\xe6\xa2\xc8\xe6\x77\x22\xf7\x6e\x16\x45\xe9\x51\xe1\x11\x2b\xcb\x95\x70\x4c\x8a\x40\xa1\x1b\x17\x48\xbd\x7c\x5a\x88\x85\x90\x5c\xad\xde\xb2\x45\xc9\xb2\x1b\x81\x35\x61\x23\xd2\xc3\x98\xf7\xfb\x89\x06\x17\x81\xf5\xc4\xa2\x6a\x15\xaa\xdb\x6d\x9e\xdd\x24\x85\xc0\x04\x75\x08\x33\xda\xef\x03\x3d\x78\xfa\x66\x31\x8f\x92\xf9\x5c\x70\x4c\xf5\xf7\x24\x2e\xea\x42\xdd\xaa\x9c\x89\x7c\xdf\x2d\x87\x5d\xa3\xb2\x7a\xd4\x33\x21\xf5\xb8\xe0\x98\xd5\x83\xda\xb2\xe6\x98\x55\xb1\xb3\x92\xb8\x5a\x49\x06\x5a\x8c\xc6\xc3\x32\x7f\x58\x72\x4c\x01\x83\x6b\x46\x4a\x36\x03\xd4\x2a\xc8\xdb\x20\x57\x63\xc9\xde\x70\xcd\xa5\x0c\xd8\x75\xca\x5a\x58\x31\x1a\xcb\x20\xc7\x33\xf0\xf2\xee\x93\x72\xe6\x25\xa5\x24\x26\x1f\xc2\xb1\xec\xaf\x1a\x00\x22\xd5\x86\x33\xc9\x59\xa5\x7c\x28\x26\xfd\x3e\x09\xca\x99\x48\xa5\x2c\x24\xfd\xfe\xa6\x1d\x43\x56\xab\x0e\x80\x11\xd8\xef\x77\x61\x07\xb6\x34\x3e\x80\x4b\x2a\x39\x78\xfe\x00\x08\x22\x79\xac\x38\xbb\x80\xeb\x7a\x32\x89\x5a\xf3\xd2\x51\x20\xf2\x6d\xb5\x02\x11\xee\x0d\x51\x03\x30\xd0\xd5\x04\xed\x56\xd5\x52\x1b\xcd\x84\xfc\x3e\xe0\x88\x69\x05\x11\xe1\xde\x08\xc5\xf8\x0a\x08\x18\xfa\x42\x02\xd3\xc7\x18\xc7\x8a\x86\x17\x45\xbf\xcf\x40\x1c\xdc\x91\xf9\x42\x38\x43\x5c\xe9\xf9\x69\x5d\xbd\x5c\x2b\x2c\x32\xdd\x0a\x13\x29\xc2\x98\xe9\x8e\xfd\x62\xc1\x98\x28\x0a\xdf\xa0\x97\xc0\x65\x5d\xa7\xbf\x86\x6c\x4f\xab\xc6\xeb\x2f\x5d\xcb\x1e\xa6\x98\x78\x49\x5a\x94\x24\x65\x12\xaa\x92\xea\x76\x89\x83\x50\x49\x0f\xb2\x10\x70\xd8\xe0\xa3\x79\x8d\x58\xa7\x49\xd8\x26\x32\xda\xe8\x74\x23\x3b\xd9\x37\xda\x42\x87\x52\xb9\xf1\x84\x4e\x31\x41\x83\xc1\xac\x87\xb1\x58\xad\x3a\x00\x7f\x85\x62\x08\xd7\xac\x46\x04\x54\x64\x05\x78\xc3\xe2\xd9\xc4\xeb\x15\x22\x50\x12\xa7\x86\xaf\x9c\xb1\xa4\x44\x7f\xa2\xc9\xd0\xdb\xcb\x73\xf2\x30\xf5\x7b\x18\x9f\xaa\x02\x29\x1c\xca\x4c\x52\x5b\x50\x66\xe7\x65\x9e\xa4\xb1\x16\xc1\x04\x56\xa4\xa7\x78\xd4\x8c\xde\x62\x1c\x2b\xc5\x52\x8f\xc8\x81\x7d\xa8\xed\x41\x81\x89\x31\x38\x90\x24\x11\x65\x4f\x8a\xd6\x78\x7a\x59\x93\x29\xb4\x96\x4d\xac\x80\xac\x66\x08\x04\x44\x33\x3c\x44\x09\x7e\x3a\x42\x57\x0d\xe0\x0f\x06\xc9\x8e\x08\x21\x05\x64\x92\x4c\x51\x62\xb1\x71\x55\x63\x20\x6d\x63\x40\x12\x4e\x1b\x90\x5b\xc1\xa8\x9b\xcd\x14\x1c\xbf\x00\xec\xd9\xff\x65\x60\x3f\x1d\x19\x0b\xad\x86\x6c\x5c\x41\xd6\x31\x5d\x67\x6a\x75\x19\x26\x60\x04\xd1\x2d\x5e\xae\xd1\x27\x3c\xf1\xcf\x0e\xbf\x3b\xdc\xbf\x38\x3c\xf0\xa7\x28\xc7\x13\xff\xcd\x87\xe3\x37\x47\xc7\xc7\xea\xbd\xc0\x13\xff\xfd\xe1\xc9\xc1\xd1\xc9\x5b\xdf\xd5\xee\x02\x09\x07\x00\x8a\xa5\xb1\x0b\x5e\x77\xc6\x0a\x43\xca\xd8\x91\x66\xbb\xdb\x4f\xd6\x60\x57\x59\x6f\xd5\xc0\xfd\xbe\xa3\x4f\x31\xce\x5d\xb9\xdb\x73\xd4\x5f\xa3\xd5\x27\x17\x70\xa1\xc6\x6b\x05\xa3\x80\x65\x69\x51\xe6\x0b\x56\x66\xb9\x84\x57\x12\x81\xba\x6f\x0f\xe3\x02\x2e\x63\x60\xb4\x9c\xfd\xea\x2e\x19\xd3\x86\xf6\x86\xda\x5e\xad\xd5\xbb\x36\xbd\x8d\xa9\x8c\x94\xc0\x0d\xad\x30\x43\x51\x03\x66\xae\x3e\x76\x61\x57\xd3\xad\xab\xf1\x15\xf0\xdc\x01\x36\xb5\x77\x63\x94\xb8\xd9\xbb\x6d\x16\x6c\x0c\xd7\x50\xe5\xed\xe9\x28\x12\xfe\xba\xd9\x74\x8e\xd1\x3d\x99\xaa\xa9\x1a\xcc\xae\xba\x45\x10\x1a\x6d\x57\x60\x86\xa8\xc2\x52\xad\x9a\x2a\xfd\x01\x37\xed\x04\xa3\x49\x34\x4f\x71\x6c\x5e\x65\x77\x0e\x13\xa5\xf2\xb5\x35\x4c\x0c\x6e\x73\x44\xac\x41\x46\x2d\x5b\x09\xc9\x56\xd2\x6b\xd2\xa8\x35\x4e\xda\x60\x20\x76\xa2\x10\x9a\xd2\x89\x98\x36\x51\x29\xcd\xf0\x4a\x4f\xad\xad\x74\x69\x2d\xaa\xfa\xee\xa7\xce\xef\x32\xf9\x5d\xbe\xf9\x5d\xb6\xc3\xeb\xef\xb2\x69\x03\x65\x80\x5a\x42\x23\x92\xc9\x2a\x60\x5e\xab\x67\x35\x85\x39\x12\x01\x99\xcf\xf1\x8d\x2c\x22\x4c\xe0\x74\x8d\x96\xa3\xf1\x68\x3d\x45\x2f\x1e\x73\x67\x69\xcb\x80\xee\xe2\xbc\xe0\xbd\x46\x6d\xbf\x0f\xec\x33\x26\xe0\xb9\x94\xa8\x7f\x82\x1b\xf0\x7c\xfc\x7c\x3d\x45\x2f\xbf\xde\x13\xa8\x64\x4f\x0f\x34\x8c\x0b\x0a\xbb\x4d\x7f\x63\x64\xca\x85\x79\xc4\x63\x73\x52\x14\x1e\x29\x1a\x0e\x40\xd3\xce\x92\x86\x91\x24\xde\x8e\xf9\x27\x29\x17\x9f\x05\x3f\x78\x6d\x03\x34\x55\x41\xb8\xa5\xc7\xbd\xa0\xd7\x49\x79\xd4\xee\xd7\x2a\xde\xd6\xfb\x26\xfb\x65\xa3\xab\x5b\xb6\xad\xdf\xe9\x46\xaf\xd3\x2f\x7f\xab\xd8\xfc\x54\x5d\x54\x9b\x82\xba\x6e\xed\x3a\x3d\x16\x66\xbd\x05\x31\x7d\x7b\x23\xc5\xcf\xa4\x33\x7e\x97\xdd\x8a\xf4\x80\x94\x84\x12\x49\x85\xcf\xc0\x39\x89\x48\x9e\xac\x92\xf7\xb3\x2c\x15\xab\xe4\x3d\xe1\xab\xe4\x7d\xc6\xe1\xb3\xa0\x14\x45\x09\x52\x72\x97\xc4\xa4\xcc\xf2\x60\x51\x88\x7c\x2f\x16\x69\x09\xfb\xfd\xde\xb3\xfd\x59\x9e\xdd\x88\x2f\x34\x7a\x3d\x27\xec\xfa\xb5\xc8\xf3\x87\x8d\x86\xb7\x73\x52\x46\x59\x7e\x23\xbd\xf7\x0e\x1f\x20\x12\x25\x9b\xf5\xfb\x4f\x47\x3d\x8c\xd5\xb3\x35\x1e\x00\x0c\x14\xe2\x4f\xa5\xcd\x91\x92\x32\xb9\x13\x1e\xcb\xb8\xf0\x2b\xbe\x06\x3d\xb2\x5a\x51\xd8\x1d\x33\xb5\x34\xd3\x5d\x7d\x74\xf0\xfa\x7b\xf1\x70\x46\xd2\x58\xb4\x81\xde\x1b\xad\x5b\x1e\x1a\x5c\x12\x4c\x56\xab\xc9\x14\x51\x4c\x57\x2b\x63\xd6\x1b\xf4\x49\x46\x78\x3d\xcf\xb4\x25\x6c\xc6\x8a\xb4\xda\xb6\xfc\x21\x8d\xa4\x28\x48\xc9\x8d\x30\xdc\x13\x39\xa2\xad\x6b\x7a\x72\xc0\xd7\x8b\x64\xce\x45\xbe\xeb\x3c\x77\xb2\xfb\xbb\x73\xb7\x75\xe3\xad\xbb\x7d\xf6\x4b\xa3\x43\xe3\x75\xac\x63\x5f\x4e\x09\xe2\xca\x44\x60\x48\xe0\x61\x28\x76\x2a\x6b\x2c\x14\x03\x3c\x82\xdc\xc4\x5b\x00\x99\x88\xda\xa8\xe2\x41\x2c\xd4\x10\x80\x06\xf2\xa3\xae\x03\x37\xd3\x00\xa5\x95\x27\xd9\xb0\x54\x69\x6d\x15\x35\x8b\x49\xc3\x23\x4d\xac\xf0\xea\xf4\xf8\xcd\xc0\x74\x9b\xef\x4e\xb4\x79\x26\x3d\x6b\xd7\x6f\xab\xf0\xef\x17\x8a\xfc\x1a\xb6\x16\x90\xc6\x51\x36\x17\xc1\x3d\xc9\x53\x40\x06\xbe\xb7\x28\x04\xd7\x12\xee\x5a\x3c\x20\x8f\x2e\x4a\x2f\x29\xbd\xa4\xf0\xa4\x18\x24\x9e\x1e\x23\xf0\x21\x22\xd8\x90\x33\x81\x10\x11\xd7\x7f\x53\x44\x62\xbd\x5c\x03\xd7\x4e\x47\xd9\x36\x9a\xb4\x9b\x3f\x1d\x4d\x2b\x39\xf2\x68\xa3\x96\xd7\x57\x51\x1f\xad\xad\x6b\x56\xfb\x27\xaf\x17\x51\x24\x72\x09\x40\x8d\xfb\x0f\x49\x5a\xfe\x43\x7b\x2e\x0c\x1a\x3a\xa0\xa1\x18\x0c\x20\x9f\x88\x29\x26\x01\x9b\x91\x7c\x3f\xe3\x62\xaf\x94\xbe\xf2\xa6\xaf\x7a\xe3\x58\xc0\x72\xc0\x3b\xd2\x50\xa6\x9a\x0f\x48\x50\xe6\x24\x2d\x88\x2e\xbe\x27\xe8\x35\x91\x13\x88\xc1\xc4\xf7\xa7\x30\x64\x81\xf6\x3b\xce\xcb\x2c\x17\xe0\x9e\xc0\xe0\x76\x51\x02\x8e\xfc\x6b\xf1\xe0\x4b\xbf\x3a\x4b\x09\xcd\xf2\xb2\x61\x66\x91\xe0\x36\x17\x77\x22\x2d\x0f\x44\x44\x16\xf3\x12\x40\x24\x2d\x8d\xec\xf6\x7d\x9e\xdd\x92\x98\xe8\xa0\x03\xa2\xa0\x37\x82\x6b\x35\x06\xcb\x6e\x6e\xe7\xa2\x6c\x84\xf9\xb4\x8c\xed\x90\x7d\xc1\x8d\x22\x24\x23\x23\xff\xf5\x0c\xfc\x8b\x0f\xe0\x33\x28\x61\xb9\xbd\xf1\x21\x8f\xc5\xbf\x9e\x3d\x83\x21\x05\x6c\xb5\x92\x32\xec\x96\xe4\x85\x38\x4a\x4b\x40\x26\xa3\x29\x1a\x0d\xe1\x2b\xfc\xf2\x05\x5c\x2b\x43\x41\x89\x93\x76\x8a\xa4\x37\x72\xd9\xc1\xf1\x2f\x7c\x9a\x65\x73\x41\x1c\xd2\xf9\x4c\x76\xef\x88\xb5\x9f\x3f\x13\x38\xbe\xe9\x74\x12\x0d\x76\x3e\x13\x4c\xdc\xb1\xb3\x3a\x46\xf0\x40\x26\x44\xc9\xb0\x29\x52\xa1\x0d\x66\x43\x6f\x6d\x94\x2a\x0e\xb7\x3e\x29\x96\xd6\xa7\xb1\xb8\xe8\x1a\x22\x1a\x70\x11\x89\x3c\x17\xfc\xf4\x56\xe4\x0a\x05\x85\xf6\x12\x98\xaa\xa4\x67\x82\xf0\x87\x5d\xfb\x84\xed\x53\x6b\xd6\x76\xd2\x76\x26\x6b\x38\xae\xbb\xd5\xa5\x76\x35\xb7\x5b\x56\xd3\x3d\xa5\xec\x16\x28\x03\x9b\x41\xfb\x9d\x0a\x8e\x92\xde\x36\x46\xff\xe4\xda\xe7\xce\xf8\xd2\xdc\x7e\x6c\x7c\x0e\xad\xdc\xac\x42\x2e\x10\xf1\xcd\xf1\x73\x3d\xfe\x16\x3e\x52\x89\xb2\x24\x02\xf5\x87\x9d\x39\xac\x56\xaf\x15\xe9\x73\x63\xd4\xd9\xc8\x1b\x03\xaa\x30\x94\x78\x56\xf5\x01\x9b\x67\x85\x4d\x91\xe0\x6a\x80\x90\xf6\xfb\xc6\x97\x23\xc1\x9d\x4e\x9d\x6a\x67\x22\xc2\x0b\x12\x48\x5b\xc3\x04\xee\x16\x04\x09\x28\x9b\x83\x28\xc8\xd2\xc5\x6d\x9c\x13\x2e\x52\x21\xb8\xeb\x01\x59\x30\x45\x12\xa4\x8b\x79\x69\x02\x65\x3a\xa5\x70\xea\x30\xba\x62\xd7\x5c\x9c\x48\xdd\x89\x68\x90\xcd\xb9\x49\xdc\xee\xe0\x51\xbf\xdf\xd5\xe3\x9e\x54\x6a\x98\x69\x35\xbc\xaf\x1c\x5b\x92\xa4\xa5\x55\xc6\xcc\x55\xc6\x2c\x6c\x48\xf7\x27\x17\x33\xe1\x71\x63\x38\x79\xfe\x93\x81\x06\xc1\xe0\x89\xef\xcd\x48\xe1\x51\x21\x52\xcf\x2c\x8b\x7b\x51\x9e\xdd\x78\x06\x1e\xde\x93\x81\x3b\xc1\x81\xef\x95\x99\xad\xf3\x07\x34\x48\xc5\x7d\x55\xf7\x44\xab\x8c\x72\x26\x8d\x6f\x9d\xb1\x56\x5f\xb2\x8b\x95\x9f\x23\x73\x95\x22\xf1\xc4\xe7\xa4\x28\x8b\xe0\x89\x14\x09\x48\x42\x55\x79\x7c\x5f\x12\x74\x1c\x44\x81\x6a\xa8\x1c\xd3\x2c\x35\xf1\xc6\x66\x26\xa6\x82\x3f\x44\x92\x37\xd6\x2e\xeb\x17\x8e\x58\x90\xa4\x27\x45\xa4\xad\x2c\xdb\x95\x43\xa7\x72\x51\x7b\x0f\x8a\xba\x8c\xd0\x1a\x9a\x88\x83\x2a\x74\xa5\xb9\x5c\xaf\x8a\x3f\x94\x24\x49\x8b\x26\xca\xa5\xd7\x67\x60\xb8\xa3\xfa\x99\x17\x24\xea\x8a\x57\x6e\x85\xe2\xa8\x7e\xbf\x26\xd3\x1e\xc6\xb4\xdf\xff\x2a\x14\xfb\xff\xf2\x3d\x46\xd2\x27\x2a\x12\xc5\xb3\xfb\xb4\x0b\xcb\xfe\xc0\xfd\x5c\x1b\xcb\xa4\xae\x50\xda\xbf\x7a\xc5\x6e\x27\x88\xc4\x6a\xa5\xa9\x93\x69\x4e\x88\x1a\xf5\x83\x51\x18\xbd\xb2\x5d\xdd\xc5\xe0\xa8\x72\xa6\x7b\xc3\xb5\x55\x06\x16\xf2\x77\x8f\x29\x5a\x64\xbe\xa5\x95\xfa\x9b\x64\x2e\xa4\xa0\x14\x79\xc8\x2d\x49\x31\x24\x9f\xe7\x99\x64\x59\x87\x5d\x6d\x47\x5a\x66\x04\xb0\xa0\x24\x79\x2c\x4a\x43\x3a\xab\x95\xef\x4b\x65\xb6\xbc\xbc\x54\xd9\xfd\x4b\x9d\xde\xbf\x14\xa9\xb4\xd6\xf9\x25\x9d\x67\x74\xdc\x1b\x22\x09\xef\x31\x47\x52\x2f\x8d\x89\xb2\x0b\xa5\x67\x2a\x65\x1e\xe1\x7b\xc5\xeb\x24\x25\xf9\x83\x35\x95\x5c\x42\xbc\x77\x16\x15\x83\xc9\x1c\x90\x52\x9a\xdb\x2a\x4f\x0a\xe1\x14\x2d\x9b\x43\xda\x7e\x9f\xdd\x08\xb9\x34\xfb\x1e\x99\x60\xdd\xeb\xa1\xd6\x11\xca\x43\x97\xda\xe1\x32\x49\x93\x52\x69\x15\xd0\x56\x9d\x95\x75\xf0\x40\x26\x34\xb8\xe4\xf4\x28\x8d\x32\x23\x32\x75\x8e\x84\x54\x0a\xc9\xda\x69\x55\xc1\xda\x9a\x4a\x89\x0a\x8d\x11\x88\x1c\x9b\xe9\x17\x39\x0f\x29\x96\xc3\xda\x58\x6b\x29\x2d\xbd\x8e\x02\x71\x3c\x0c\xf9\x0e\xab\x2c\x73\x3e\x18\xe8\x59\x09\xcc\x26\x7c\x1a\x0a\x3b\x2f\x2e\xc5\xb2\xfb\x5a\x49\x7b\xe4\x16\xaa\x24\x6b\x1d\xb3\xa9\x4a\x50\xb1\x69\x38\xd4\xea\x48\x35\xa3\x68\x01\x08\xdc\x95\xc2\x61\x4c\xd7\xed\xc6\x5c\x8a\x29\xd9\x4a\xfe\xc3\x9d\xa0\x92\xb4\x27\x59\xed\x57\x0c\x20\x9b\x88\xa9\x3b\x21\xbe\x69\x0a\x51\xb8\xd4\xd2\x5b\x6b\x5d\x44\x5d\xcc\xef\x81\x6a\xff\xc3\xd2\xa6\xc9\xa5\x4c\xe0\x78\x04\x95\xa6\xa9\x22\xcb\x9c\x36\x8c\x4e\x47\xf2\x20\x0a\x43\xa6\xdd\x11\x51\xe9\x13\xa1\x38\x96\xbf\x1a\xf6\xfb\x5a\xb2\xad\x56\xfe\x51\x7a\x47\xe6\x09\x3f\x2f\x49\x69\x7c\x3d\x8c\xb1\x50\x48\x5a\xad\xfc\x93\xac\x7c\x93\x2d\x52\xde\xaa\xb1\x01\x71\xc7\x34\xdb\x24\xac\x4a\x7e\x6e\x1f\xa7\xdf\xff\x2d\xb2\x54\xd2\x62\x25\x4a\x9b\xe2\xc8\xc1\x61\x43\xd8\x34\x65\x12\x44\xa5\xe2\xcc\x6d\x66\xd8\x2f\x9b\xf4\x01\x97\x16\x15\x4f\x47\x92\xa9\xa1\xf5\xbd\x42\x06\x1a\x8e\xe1\x6b\x3b\xd0\xd2\xd0\xf5\x78\x32\x45\x9c\x8e\x15\x0e\x0c\xcb\x98\x97\x0d\x63\x6a\x3c\x99\x3a\x43\xed\xb7\x32\x24\x76\x86\x2e\xb8\x9d\xb4\x06\xe2\x78\x69\x3e\xb4\x56\x5c\x0b\x2d\x6d\x7a\x49\xea\x11\xe3\xe6\x4c\xc4\xd4\x58\x3c\x0f\x64\xc2\x0d\x93\xeb\xb4\x89\xb4\xae\xea\x42\x1c\x49\x35\x6d\x56\x61\x4d\x5b\xe6\x88\x91\xd5\x0a\xb8\xaf\x98\x29\x29\xf8\x80\xcc\x5f\xfc\xe0\xa6\x32\x26\x53\x34\xc3\xc3\x70\xb6\x53\x8f\x69\x78\x65\x56\x71\x7a\x82\x6d\xdd\x64\x36\x0d\x13\x69\xe2\xf4\xfb\xb1\xfe\x76\xd2\x94\x5f\x55\x36\x59\x43\xe0\xaa\xee\x19\x14\xf3\x84\x09\x30\xb4\x62\xe9\x8e\x04\x64\x3e\x07\xf1\x56\x8c\x73\xc9\x9c\x51\xc0\x29\x2a\x00\xdf\xa4\x0c\xd2\x6c\x48\xd0\x02\x70\x09\x06\xae\x6d\x94\xfd\x2c\x8d\x92\xd8\x12\xe1\x6e\x09\x38\x1c\x93\xae\x51\xec\x77\x94\x2f\x61\x04\x83\x23\x42\x28\x1e\x86\x74\xe7\xaa\x02\x0b\xad\x05\xe0\xd5\x84\x4e\x43\xa1\xc1\xd1\x90\x7c\x58\x8e\xe9\x88\xbd\x8a\xe4\xb9\x9d\x4f\xc3\x18\x3a\x70\x6d\x7b\x95\x3d\x21\xf8\x4a\x0a\xe7\x5a\xa1\x36\x75\x2d\xd7\x1e\x50\xb7\xca\xd8\x03\x76\x15\x68\x8f\xd4\xb1\x0e\x81\x74\xe4\xc8\x26\xb8\xb8\xf4\xa7\x2b\x81\x15\xe3\xa8\xe1\x03\xdb\x31\x5c\x7b\x69\x86\xe3\x20\x16\x92\x51\xc3\x59\xb7\xd1\xa7\xf5\xd5\xac\x32\xbc\xeb\x7d\x44\x92\xf5\xb5\xec\x47\x52\x75\xaa\xd7\x7b\x15\xb6\x50\x01\x18\x34\xdb\xb4\x3c\xe1\x92\x83\x59\x65\x65\xd6\x81\x34\x6e\x6c\xc9\x8a\xd8\x24\x6d\xd8\x8c\x1b\xe0\x52\x5e\xf3\x1a\xb6\x87\x6d\xd8\xa2\xff\x6d\x00\x95\xee\xcd\xfe\x22\x2f\xb2\x1c\x40\x94\xe0\xd1\x63\xa0\x65\x35\x68\x6b\xf3\xae\xce\xb8\x7c\x06\x1c\x2a\x4d\x74\x0f\x78\x9d\xe2\x54\x7c\x71\x2d\x1e\x50\x32\x18\x40\x83\x92\x1e\xc6\x62\x97\x02\x01\xc7\x4c\xc9\xf3\x24\x5d\x48\xb1\xa5\xf2\x6b\x14\xfc\x1b\xf1\xf1\xa6\x0a\xaf\xe9\x99\xb7\xa9\x7d\xd3\xdf\x67\x48\x18\x2b\x36\xe4\x5b\x51\x54\x6d\xf5\xc0\xdc\x62\xca\xa6\x92\x5f\xcf\x33\x3a\x95\x6a\xed\x17\xa2\x73\x23\x14\xee\xa6\x40\x32\xfc\x76\x91\x42\x76\xe9\xf8\x0e\x50\xb8\xee\x32\x35\xa8\x24\x89\xfa\x43\xaf\x1d\x92\x88\x50\xac\x48\xc2\x6e\xf5\x14\x20\xaa\x49\x42\x61\xdb\x21\x09\xde\x41\x12\xa1\xe4\x11\xac\xbc\x0a\x40\xcd\x76\x25\x0d\x9a\x04\xcf\x54\x54\x8a\x22\x02\xc3\x78\x5b\x34\xa9\x62\x38\xdd\x5f\x33\x1c\x93\x2b\x41\xb1\x0d\x62\xc5\x5d\xb8\xd5\x9c\x9b\x68\xfc\xee\x9a\xbf\xe3\xc4\x35\x61\x74\x59\x28\x14\xc2\x2d\xfe\x45\x0b\xff\xa2\x81\x7f\x81\x18\x44\x4e\x9c\xe1\xed\xbf\x4d\xd6\xbd\xfe\xe3\x59\x93\x0b\x09\x5f\x65\x26\x6f\x81\xb7\xe2\x95\x0e\xaf\xb9\xc1\x2b\xaa\x41\x2b\x7e\x58\x8b\x4a\x0d\x70\xf3\x77\x3c\xeb\x00\x38\x6f\x02\xfc\xb7\x31\xdc\xb7\x1b\x2e\xc7\x66\x44\x8d\xc1\x25\x7d\x04\xc6\xb4\x13\xc6\x1c\x19\x93\xb5\x0e\xf7\xf0\x1a\xc6\x11\x16\x0d\x18\xd3\x2e\x18\x4b\x44\xb0\xb9\x20\x39\x80\xa1\xd8\x02\x61\x02\xd4\x36\x86\x0a\x80\x62\x3b\xed\xc6\x06\x94\xe6\xef\x38\xee\x00\x25\x6b\x82\x92\xb5\x40\xc9\x1a\xa0\x64\x2d\xaf\xe9\xe8\x8f\x04\xe5\xde\xbf\x01\x94\xd9\x22\x2d\x81\x16\x0e\x1d\x0a\x84\x80\xb8\x0a\xc8\x68\x69\xb0\x01\x47\x06\xe2\x4d\xf9\xfe\xdb\x60\xf4\xdd\xd7\xea\x5b\x69\x0a\xef\x0c\xad\xaf\x22\xe5\x96\xce\xd0\xc0\xf0\x4f\x52\xc5\xbd\x11\x4a\x5a\xfa\x38\x4c\x1e\xd3\xc5\x89\xa3\x8b\x7b\xac\x73\x29\xca\xf6\xd9\xa5\x40\x29\x60\x38\x9e\xd5\x8f\x60\x86\x7b\x43\xc4\x02\xc2\xef\x48\xca\xa4\x90\x81\x6b\x94\x74\x4b\x92\xe4\xf7\x6a\xdd\xef\xff\x97\x53\x6e\xc3\x06\x9a\xe1\xc9\x74\x1b\x0d\xeb\x35\xc4\x2e\xe0\x69\x03\xf0\x04\xcc\xa4\x71\xaa\x7c\x13\xaa\x20\x8d\xa8\x6b\xe1\xfc\xdb\x08\xff\xd8\xe4\x1e\xf1\xb5\x89\x55\xeb\xad\xc5\x76\x9f\x69\x58\xb3\x84\x9c\x4f\x94\xc4\x00\x86\x04\x77\x6f\xbf\x22\xab\xd5\x72\x8d\x88\xf1\xf4\x81\x7e\xc0\xd5\xbb\x0e\x30\x23\xc7\xfd\xc6\xce\xb3\xac\x77\xec\x09\xa5\x57\x91\xb0\x5b\xec\xf4\x20\x75\x60\x50\x8d\x5c\x05\xad\xfb\x7d\xd7\x8d\x91\xa8\x71\x13\x3c\x6e\x1d\x1c\x77\x47\x6c\x3a\x13\x14\xc6\x07\x0c\x99\x8a\xd0\xb4\x82\x33\xdc\x0d\xce\xf0\x56\x70\x86\x56\x00\xa7\x6b\x18\x72\x77\x99\xbb\xf1\xe6\xc7\x93\x08\x7c\x6d\xbc\xc2\x1e\x79\x71\xc2\xa2\x59\x6d\x87\x38\x0b\x10\x98\xdb\x05\xd8\x98\x56\x58\x1f\x73\x19\x86\xd1\x8e\xdd\x36\x14\x55\xde\x61\x8c\xc5\x24\x92\x64\xdc\x0a\x7d\xa1\x78\xc3\x2b\x64\xeb\xad\x41\x55\x5e\xb9\x9a\x26\x0d\x62\xb0\x87\x98\xd6\x97\x9b\xa1\x7a\x61\x38\xc3\xc6\xde\x94\x9c\x50\xfa\x73\x4b\xb6\xc4\xe9\xa3\xcd\x9d\x6d\x09\x12\x3d\xca\x56\x9f\xaf\x1a\x25\x24\xf6\xdb\x54\x33\xd0\x16\x97\x9b\xb4\x3c\x6c\xb1\xe1\x61\x33\x2c\xa4\x87\xcd\x5c\x18\x12\x74\x5b\xcb\xef\xae\x34\x66\x15\xbb\x03\x3a\x76\xb7\x5a\xb9\x71\x99\x8e\xa4\xe7\x5a\x87\xf7\xd6\x70\xdc\x41\x50\x96\x22\xb6\x92\xf4\x26\x45\x74\x50\xf5\xb2\x4d\xd6\x2a\x1a\xf4\xe5\x50\xfa\x82\x18\x9c\x54\x5b\x6d\x2a\xee\x75\xa2\xea\xf2\x89\xce\x33\x76\xdd\xda\x04\xa8\x01\xcb\x2b\xac\xd0\x7e\xbf\x0e\xc8\x2a\xc9\xa6\xa2\xf1\x5b\xd1\x69\x3b\xaa\x28\xf3\x17\x31\xca\xba\x30\xca\x5d\x8c\xde\x02\x3e\xa1\xd3\x1a\x73\x7f\x14\xe2\x8c\xd3\xca\xb1\x6a\xae\x32\x9c\x55\xdc\xb4\xde\xb5\xe0\x3f\xa2\x1b\xdf\x59\xff\xb1\x63\x73\x84\xbb\xcf\xa9\xee\x72\x62\x01\x8c\x18\xe2\x48\xa0\x08\xc5\x38\xf8\xfb\xdf\xfe\x6a\x37\x3c\xcc\xea\xbd\x0f\x09\x1e\x86\x3e\x96\x0e\xa8\xa4\x20\xbb\x69\xa2\xdf\x07\xf1\xd3\xa7\x68\xa3\xe6\xf9\xb4\xdf\x8f\x9f\x3e\x75\x4f\x07\xba\xfb\x26\x62\x88\xae\xdb\xfb\x26\xae\x34\xf1\x69\xa0\x4b\x68\xe3\x97\x90\xe1\x03\x62\xb7\x38\x91\x09\x9d\x42\xc4\x5b\x45\x83\xd1\x14\x22\xd1\x2e\x7c\x3e\x85\x28\x6a\x17\xbe\x98\x42\x74\x3d\x49\x06\x83\x29\x66\x3b\x3b\xcf\x57\xfc\xd5\xab\x97\x55\x01\x18\xfd\xad\xcf\xe1\xce\xce\xcb\x95\x78\xf5\xea\xb9\x2d\x7d\xd1\x17\x70\x67\xe7\x9b\xd5\x37\x2f\xfa\x51\xc7\x46\xf3\x53\x07\x84\xed\xf5\xa8\xad\x19\xbe\xef\x2c\x8a\xd5\x94\x84\x5f\x40\x3e\xc0\x07\x64\xc2\x26\x74\xfa\xea\xd5\xf3\x29\xd2\xaf\xe0\x45\x5f\x96\xa8\x89\x30\xb5\xb8\x57\xaf\x5e\xda\xca\xd1\xdf\xfa\xba\x10\xca\xe9\x33\xb5\xce\x57\xaf\xbe\xa9\xea\xbf\x51\x9d\x07\xcf\xa7\xf6\xe0\x63\xf5\xc5\xff\x7c\x81\xf1\xf3\x5d\x8e\x79\x50\x2c\xa8\xde\x78\x03\x86\x88\x5b\x3c\xc2\x81\x8f\xfd\xb1\xdb\x7a\xa4\x22\x30\x5b\xda\x3f\x97\xed\xb1\xdf\x20\xc0\xf7\xae\xc9\xec\xfb\xd5\xf1\x17\x86\x3f\x10\xbb\xc7\x1d\xa9\x03\x31\x8d\xdd\xf1\x9a\x20\x54\x64\x83\xad\x56\x24\xa0\xea\xbd\xdf\xdf\xda\xca\x0e\x67\x9a\x42\xa3\x04\xa5\x75\xf0\x96\x84\x8d\xad\x98\x4e\xdf\x5d\xc0\x31\x41\x62\x80\x8f\x08\x1c\xcb\x67\xd3\xbd\x8e\xb0\x1c\x55\x98\xd3\x93\xd9\x15\x03\xfc\x3d\x19\xdb\xea\x1a\xb3\x75\xfd\x71\xbb\x7e\x7f\x4e\x6e\x6e\x05\x6f\x35\x7b\xe7\x34\x3b\x4a\xcb\xd1\x37\xad\xfa\x93\xd6\x30\x1b\x0d\xde\x37\x07\x78\xf1\xbc\x55\x7f\xda\x1a\x60\xa3\xc1\x0f\x4e\x83\x37\xf3\x8c\x6c\xb6\x38\x6b\xb7\xf8\xe6\x65\xab\xc5\x39\x19\x53\xe0\x1c\xf3\x7d\x43\x92\xb9\xe0\x5e\x99\x79\xb1\x28\x3d\x29\x69\xbc\x28\xcb\x3d\x9d\xa5\xdc\x33\x07\x14\xa4\xb0\x15\x83\x53\xc0\x21\xb4\xc7\x34\x37\x63\x5a\x36\xc3\xdb\xca\xba\x46\x26\xd3\xba\xe9\xb4\x1c\x92\x81\xce\x66\x0e\xfc\x5f\xfd\xc1\x29\xa8\x8e\x39\x48\xb7\x30\xa4\xe0\x2d\x19\x7c\x47\x06\x4c\x05\x2d\x74\xf2\xd4\x95\x3e\xa4\xda\x82\x9f\x3f\x2c\x29\xf8\xee\xfc\xf4\x24\xd0\x34\x9e\x44\x0f\xca\x83\xb1\x7b\x23\xaa\x94\xb8\x30\x5b\x78\xb3\xc5\x9c\xa7\x4f\x4a\x8f\x65\xe9\x9d\xc8\x4b\x4f\x05\x2c\xbd\x24\x2d\x33\x8f\x78\x72\x20\xb3\xab\x6d\xec\xf9\xd2\xb0\x36\x9b\xf5\x98\x9b\xc4\xf9\xc1\x9c\x19\x24\x0d\xd6\xfa\x96\xc0\x1e\xc6\x6f\xab\x5d\xab\x6a\xac\x40\x6d\x7a\xaa\x74\xb7\x94\x30\x6e\x9f\x0b\xa2\x33\xff\x75\xc9\xb7\x04\x5d\x10\xbd\x5d\x06\x63\xfc\x1d\xe9\xf7\xdf\x10\xbd\xd5\x94\x41\x9b\xed\x34\x5b\xac\xde\x10\x18\x52\x2c\x26\xa3\x29\x62\x98\x39\x83\x88\xc9\x70\x6a\xd8\xbc\x3a\xe2\x75\x02\x18\x0c\x8b\xfb\x44\x3b\x68\x4b\x46\x0a\xe1\x1d\x91\x71\x15\xad\x0c\x55\xc1\x77\xb6\x20\x06\x93\xa8\xca\x38\x4b\x7b\x57\x55\x7f\x6f\xab\x25\x8a\x2d\xab\x81\xc8\xd4\x1f\x37\xea\x1d\x29\x5a\x35\x78\xb7\xd9\xc0\x65\x36\xdb\xee\xa4\xfd\x21\xc3\x4c\xb6\xc1\xfb\x8d\x81\xda\x2d\x4e\xdb\x43\x18\x66\xb1\x0d\x7e\xd8\x18\xa2\xdd\xe2\xac\xd1\xc2\xe5\x38\xdb\xe4\x7c\xb3\x89\x61\x39\xd9\xc4\xe4\x7f\xc6\xf5\x4e\x72\xc3\x75\x1f\xd2\xeb\xec\x3e\x55\xec\x36\xf6\xfc\x01\x77\x49\xeb\xac\xce\xe9\x92\x40\x7c\x16\x6c\x51\x8a\xf3\x4f\x73\xe0\xef\x9f\x1d\xee\x5d\x1c\x7a\x17\x7b\xaf\x8f\x0f\xbd\xa3\x37\xde\xc9\xe9\x85\x77\xf8\xd3\xd1\xf9\xc5\xb9\xda\x74\x53\xef\xa8\xf1\x3d\x90\x70\xef\xe8\xe4\xe2\xf0\xed\xe1\x99\xf7\xfe\xec\xe8\xdd\xde\xd9\xcf\xde\xf7\x87\x3f\x23\xef\x5a\x3c\x78\x8b\x34\xf9\xb4\x10\x48\x93\x3d\xf4\xd1\x64\xaa\x4f\xd0\xdb\x19\x9c\x6f\x78\xe8\x5b\xb2\x86\x5c\x67\x0d\xd9\x84\x4f\xf1\xe6\x6e\xd2\x09\x9f\xee\xca\x7f\x9c\x8d\xce\x63\xf9\xbe\x25\xb8\x4e\xe4\x8a\xf5\xee\x28\x4e\xb1\x6b\xec\x00\xe3\x64\x9a\x51\x58\xbd\xbb\x84\x05\x5c\xe8\xe3\xd8\x49\x96\x22\x16\x14\xc9\x2f\x36\x89\xed\x24\xe5\xa4\xac\x60\xed\x1c\x78\x1d\xb0\x81\xcb\x33\x20\x10\x43\x6e\x2c\xd5\x26\xdf\x18\x52\x51\xbf\xe6\x9e\x3f\x75\xd6\x43\x9a\xad\x8e\x1b\xce\x82\x42\xe4\x09\x99\x27\xbf\x88\x1c\xff\x48\xdc\x40\xf3\x45\x85\x52\xa4\x82\x43\x0d\xb4\x9a\xd2\x7a\xf8\x18\x2e\x63\x7d\xb1\x02\xc6\x71\x70\xfe\xf3\xc9\xc5\xde\x4f\x97\x87\x67\x67\xbb\x4d\x6a\x38\x3f\x3c\x3e\xdc\xbf\xf0\x24\x60\xbc\x37\x67\xa7\xef\xbc\xe2\xd3\x3c\x29\xc5\xe5\x0d\x29\x4a\x91\x7b\x1f\xbf\x3d\x3c\x3b\x54\x04\x86\x9f\x94\x84\xce\xc5\x13\x6f\xef\xe4\x40\x37\xc7\xde\xae\x8f\x26\x0e\xc5\x4c\xdd\xef\xcf\xe0\x72\x16\xe4\xd9\x7d\x95\x7c\xdd\x8d\xd4\xa4\xc6\x9a\x2e\xdd\x18\x5e\xc7\x32\x24\xa4\xd4\xff\x63\xdd\x4b\xbd\x5a\x38\x7c\xf8\x43\x03\xee\x95\x2c\x34\x98\x0a\xc5\x56\x0c\x33\xb8\xbc\x00\x0c\x09\x54\x41\xed\xaf\x1a\x64\xfe\x40\x34\xd8\x46\x03\x4d\xf2\x08\xf6\x76\xbd\xe3\xa3\x77\x47\x17\xde\xc8\x47\x13\xd2\x00\x90\x93\xea\x72\xc1\x64\xde\x92\x52\xdc\x80\x21\xd4\x59\x30\xc5\x34\xa1\xde\x91\x21\x1c\xfa\x90\x64\x5b\xbd\x48\xad\x8a\x28\xe0\xdb\x88\xec\x6b\xe3\x6a\x3f\xfe\xfe\xec\xe2\x1f\x0c\x51\x29\x59\x9a\xdb\x36\xeb\x48\x05\x57\xd0\x52\x01\x37\xeb\xa6\x0c\xc3\xd9\x4e\xdc\xcc\xf5\x2b\x68\xce\x20\xba\xc2\x49\x7d\x92\xeb\xaa\xdf\x07\x57\xdb\xe1\x79\x05\x21\xb2\x99\x45\x70\x85\x09\xb8\x42\x89\x4a\x3a\xce\x06\x23\x08\x5b\xb1\xd1\x2b\xb8\xa6\x5b\x19\xfc\x6b\x61\xff\xd1\xd9\x87\xa3\x60\xd8\x26\xee\x68\x03\x15\x2a\x3d\x27\xb6\xa3\xa2\x23\x79\x16\xea\xc4\x1d\x45\x09\xb6\xe1\xaf\x30\x71\xc1\x50\x03\xc1\xe1\x54\x8a\xae\xe0\xf2\x6a\x37\x06\x57\x70\x9c\x7c\x09\xa3\x09\xf2\x8f\x4e\xce\x0f\xcf\x2e\xbc\xd3\x33\xef\xec\xf0\xfd\xf1\xde\xfe\xa1\x54\x25\xa7\x9e\x3f\x48\x9a\x3a\x46\x9d\x07\xd0\x4a\xc4\xfb\x71\xef\xf8\xc3\xe1\xb9\x07\x76\x91\xb7\x2b\x55\x0a\x41\x74\xea\xca\x8a\x08\xcc\x36\x60\x1c\x1b\x21\xba\x11\x35\x33\xc2\x8f\x06\x3f\x7c\x38\xbd\xd8\x93\xb2\xaf\xda\x8f\xd4\xc0\x5d\x04\x3e\x9a\xf0\xa6\x90\x1f\x9c\xe9\xcd\x37\x53\x08\x43\x35\x72\x03\x7d\x71\x03\x7d\x11\x62\x10\x45\x35\xfa\x7e\xaa\x12\xc1\xa6\xc5\x47\x37\x6c\x3a\xd1\xa8\x1d\x4d\x1d\x41\xf6\xf3\x9f\x2e\xc8\x0e\x0e\x8f\x0f\x2f\x0e\xbf\x42\x8c\xb5\xc4\x57\x95\x26\xfc\x3d\xd4\xfe\xcf\xdf\x1b\xc1\x37\x7b\x2c\xed\x82\xf9\xd6\x05\x53\xb9\x60\x8a\x78\x7b\xc1\x7c\x8b\x94\x31\x39\xba\xe6\xf2\x58\x7b\x79\x8f\x47\xcf\xff\xf2\x67\x2c\xcf\x88\xd1\xfd\xd3\x0f\x27\x17\x92\xb3\xa0\x47\x0a\x8f\x7d\x69\xb9\x74\x43\x19\x55\xea\x87\x85\xa4\x43\xa5\xfc\x46\x48\x5c\xfe\xa9\x2a\x45\x12\xf0\x23\xf4\x9d\xf0\xb6\x96\x1e\x8c\xfe\x07\x7a\xfa\x5a\xe8\xcd\x76\xe1\x1f\xa0\x82\x09\xf9\x13\x49\xc7\x01\xd7\xa3\xe4\x62\x8d\x77\x3c\x99\xa2\x6a\x4f\xaa\x03\x20\x9d\xfb\x30\xbb\xf9\x1c\x58\x09\x05\x2b\xf8\x47\xd0\x15\x25\x5f\xda\xbe\x4d\xba\x17\xcd\xe1\x92\xff\x51\x56\xf0\xce\x2b\xef\xc9\xe5\xa5\x3e\x06\x58\x79\x1a\x12\xe6\x17\xb2\xdd\xe5\xe5\x13\x7f\xbb\xf9\xa2\xee\xf2\xd1\xd9\x16\xde\x00\x5d\x34\x18\x40\x73\x7a\x84\x3b\xa0\x8b\xa0\x09\x95\x53\x20\x3d\x29\x82\x2c\x7a\x8a\xb1\x58\x6f\x83\x66\xe3\x68\x20\xd3\x7b\xc5\x1d\x1d\xc4\xc8\xff\x85\x2c\x5f\xe5\x82\x99\xa1\x76\xb7\x9c\x8a\xe3\x21\x6f\xe7\xff\x76\xdd\x14\xdf\xb8\xe1\x0f\x9a\xcc\x93\xef\xcb\xff\x86\x2a\x15\xe0\x24\xe3\x24\x88\xb9\x0b\xe2\x89\x53\x3b\x5d\x8f\x29\x51\x81\xac\xed\x3b\xae\xb6\x50\xe4\x36\x4e\x6c\xde\xdb\xf7\x85\x61\x9a\xe4\x7b\x70\x76\xfa\xbe\x76\xe8\xad\x33\x4f\x5a\x3a\xad\x43\x65\x5b\x8e\xab\x4d\xea\xc9\x14\xe9\xfb\xda\x9c\xe5\x5a\xca\x8c\x77\xf4\x8d\x76\x91\xa6\xce\x46\x3a\xad\x98\xc4\x53\xb5\x45\x4f\xed\x82\x8d\x36\xa5\x92\xfc\xfe\x46\xd6\xa3\x26\xca\x6e\x42\x85\xe3\xc7\xb3\x20\x68\x53\x7e\x72\x62\x0e\x7f\x9b\x1c\x48\xc7\xa1\x5e\x75\xb0\xc1\x5c\x74\xd9\xef\xfb\x85\x28\x8f\x4a\x71\xe3\x27\x69\xab\xa6\xd7\x73\xdf\x03\xd3\xee\xd1\x23\xd0\x82\xb8\xea\xae\x3a\x29\xf3\xcc\xb7\xb7\x2b\xd4\x10\xeb\x49\xeb\xd4\xbe\xf5\xfb\x80\x0d\x5c\xa8\xcb\x5e\x0d\x81\x17\x11\x9b\xcc\xf2\x2f\x9d\xab\x21\x2f\x8b\xc5\xed\x6d\x96\x97\x97\xa5\x28\x4a\xdf\x3d\x6d\xdd\x35\x7b\x7d\xfc\x08\x35\xaa\xf4\xc5\x71\xba\x16\xa2\xde\x68\x63\x85\x43\xf7\x90\x37\xa9\x4f\x56\xca\x29\xad\x56\x8d\xb1\x34\xa9\xbc\x1a\x3a\x87\x98\x37\x15\xda\xf2\x91\x18\x90\x8a\xee\xd8\x70\xc8\xb5\x78\x78\x9f\x8b\x28\xf9\x8c\x35\x64\x5b\xfb\xa1\x21\x92\xd3\xd9\x05\x6e\xa8\xa5\x1d\x43\x69\xa4\xdd\x1c\x7a\x72\xcf\x48\x6f\x4e\x71\xbb\x7a\xb5\xb7\x2f\xd6\x2a\xb6\x9e\x26\x62\xb8\x03\x1c\x4f\x47\x21\x7b\x85\x87\x21\x7b\xfa\xb4\x52\xcf\x8d\x56\xd7\xe2\x01\x30\xbd\xb9\x86\xd7\x79\x2a\xd8\xef\x6f\x43\x13\x97\xae\xc9\x76\xdd\x78\x45\x1e\xf7\x2d\x1e\x37\xb5\x68\x6d\x6a\xa1\xd6\x44\x63\x43\x44\xb4\x5e\xf1\x80\xd4\x47\xd9\x55\x8c\x82\x3e\x16\xa3\xe0\x8f\x99\x3e\xd7\x1b\xd3\x46\x8f\xcd\xb5\x4e\xce\xba\xf3\x75\xa6\xa6\xb6\x3a\xd8\xfb\x90\x3a\xf0\x82\x62\x3c\xaa\x8e\x0b\xb8\x31\x83\x0d\xe4\xcc\x54\x30\x5d\xe2\x27\xb1\xf8\xe1\x26\x94\x7e\xd5\x0d\xa2\x04\xd6\x61\x86\xad\x20\xe9\x0e\x33\x38\x31\x78\x88\xa4\xc0\xb5\xf1\x86\xab\xf5\xfa\x31\x00\xce\x7f\x1b\x00\x75\x32\x81\x3b\x96\xb5\xca\x83\x6c\x2e\x9f\x38\xf1\xd0\x66\xb2\x5f\x47\x16\xa8\x33\x65\x5e\xc3\xbf\xca\x1e\xa8\xc4\xf6\xf6\x59\xdf\xfc\x4e\xee\xeb\xe6\x39\xe4\xda\xa6\x7a\xd7\x82\x56\x71\x1b\xab\x13\x9a\xf3\xa2\x9a\xf3\xea\x25\xc0\x7e\xdf\x98\xb1\x91\xb3\x46\xd2\xb1\xc6\x0a\x22\xfc\x31\xc6\x4c\xbb\x96\x7a\x2d\x1e\x8a\x8d\x95\x3a\x7b\xb7\xab\x0b\x5b\x1f\x19\x37\xfb\xa3\x18\x3e\xdc\x26\x71\x9a\x1c\xff\x18\x3a\x6f\xc9\x97\xb6\xc4\x6f\xdf\xf7\xbe\x35\x62\xc5\xea\x9d\x53\x6d\x93\x48\x85\xc3\xf5\x16\x25\xbb\x01\x3d\x8c\xbf\x22\xa2\xc5\xcd\x4e\x3f\xf9\x7f\x68\xd3\x80\x9d\x4a\x33\x76\x57\x2f\xd7\x2b\xea\xab\x26\x09\x5c\xfa\x3f\x2c\xb2\x92\x1c\x7e\x66\x6a\x2f\x92\x3d\x38\x4d\xcc\x1e\x34\xff\xe4\xfc\xf2\xf0\xec\xec\xf4\xec\xf2\xe0\xf4\xdd\xa5\x0e\x48\x9d\x1d\xee\xed\x7f\x7b\x78\x50\x37\x5b\xad\xa4\xc8\x47\x51\xb5\x49\xef\xb1\x4d\xe7\x9f\x88\x3d\x34\xbc\xd5\x72\x47\x8f\x5b\xe9\x3d\x77\xdf\xdc\x86\x81\xff\x3f\xb6\xdc\xd7\xbf\xd5\x70\x6f\x9a\xdd\x4a\xc9\x8b\xb6\x92\x1f\xd7\x76\x54\xa7\xc9\x5d\x2b\x82\x6e\xdd\x4b\xa5\xee\xa5\x95\xee\x65\x9b\x12\x80\x6a\x09\xc0\xbe\x4a\xf7\x32\xb5\xb9\xea\x37\xdb\xa5\xb9\xc1\x19\x99\xd0\xe9\x66\x16\xdb\xf6\xad\x0d\xc5\x2f\x9c\x0d\x91\xe3\xd8\xeb\x3f\xa5\xab\xec\xd8\x68\x05\x69\x48\xca\x51\x48\x76\xda\xd7\x9c\x84\xa4\x92\x88\x14\x3b\x97\xa1\xa8\x83\xb8\xd4\x1a\x66\x4c\x1a\x66\x14\xd2\x60\x46\x8a\xd3\xfb\xf4\x7d\x9e\xdd\x8a\xbc\x94\xc6\x4a\xbf\x0f\xfe\x42\x00\x9d\xb0\x29\xdc\xad\xfb\x0f\xa7\x13\x36\xc5\xb2\xd4\x9c\x8f\x83\xe3\xae\xca\xfa\xbc\xac\x53\xa9\x48\xa7\x24\x5d\xf7\x1e\x9d\x3f\xdc\xd0\x6c\x2e\x4d\x75\xf5\xd0\xae\x90\x0e\x72\x4e\xca\x2c\xdf\xed\x10\x9f\x15\xe1\x3b\xb7\x1b\x37\x4e\x3a\x3f\xf2\x39\xe2\x5e\xf3\x87\x31\xb6\xe5\xbd\xea\xb9\xbe\xc2\x6e\xb7\x9a\xdb\xd8\x7e\x10\x2d\x08\x16\x00\x86\x8e\x0b\x62\x3f\x61\x2f\x3c\x23\xe0\x85\x96\x70\x77\x04\x9b\x42\x74\x4f\xb0\xaf\xa8\xef\xa9\xb6\xf0\x9f\x72\x51\x0a\x56\x3e\xa5\xf3\x8c\x3e\x35\xd6\xbe\x8f\x3e\x93\xea\xf6\xdf\x07\x82\x97\x6b\xf4\x0b\xd9\x7e\xb7\x24\xda\x23\xd8\x97\x04\x95\xa5\xf3\x07\x1f\xbd\x36\x6f\xf7\x79\x52\x0a\x1f\xed\x13\xbc\xbc\xe4\x79\x72\x27\xf2\xb1\x4f\x8a\x87\x94\x19\xb2\xf7\x91\x3a\x0c\x69\xde\xc6\xfb\xa8\xf2\x35\xc6\x11\x80\x48\x43\x5d\x8c\x0f\x91\xb1\x79\xc6\x07\xc8\x08\xcc\xf1\x1b\x54\x73\xcc\xf8\x2d\x52\x87\x22\xc6\xdf\x22\x4d\x7b\xe3\x23\x74\x2d\x1e\xc6\xdf\xc9\x7f\x8b\xf1\xf7\x88\xe7\xd9\xed\x91\xd9\xab\x33\x3e\x5e\xa3\x03\x82\xfd\xbd\xd7\xfb\x07\x87\x6f\xde\x7e\x7b\xf4\xdd\xf7\xc7\xef\x4e\x4e\xdf\xff\x70\x76\x7e\xf1\xe1\xc7\x8f\x3f\xfd\xfc\x4f\x42\x19\x17\x51\x3c\x4b\xae\xae\xe7\x37\x69\x76\xfb\x29\x2f\xca\xc5\xdd\xfd\xe7\x87\x5f\x86\xa3\xe7\x2f\x5e\xfe\xed\x9b\xbf\xff\xe3\xbf\x06\xcf\x7c\x74\x48\xb0\xff\xeb\xaf\x8d\x43\xec\x12\x26\xbf\xfa\xe8\x0d\xc1\xcf\xfe\xbb\xab\x0a\x4c\xfe\xfb\xd7\xe9\x00\xfe\xfa\x0c\xbd\x95\x4e\xd6\xe5\x3c\x2a\xd8\xe5\xe5\xd8\x47\xdf\x12\xfc\xd6\x6e\x80\x3b\x22\xd8\x27\x39\x8d\x7c\xf4\x1d\xc1\xbe\x44\x8a\x8f\xbe\x27\xd8\x2f\x92\xe1\x3f\x7c\x74\x4c\xb0\xbf\x50\x4f\xef\xd4\x13\xfb\x87\x8f\x4e\x54\xed\xe8\x1b\x1f\x9d\xaa\xa7\x17\xcf\x7d\xf4\x5e\xd6\xe6\xb2\xec\x07\xd5\x4e\x96\x9d\x49\xea\x9f\xcb\xa7\x73\xf5\xf4\xcd\x4b\x1f\x5d\x10\xfc\x2d\x19\x1c\xd9\xaf\x7f\x78\x0c\xcd\x3f\x12\xbc\xb4\xda\x6e\xfc\x1e\x39\xb6\xe6\xf8\x07\xa4\xad\x97\x8b\x4c\x6f\x7e\x19\x9f\x20\xbd\xf1\xe9\xc2\xf4\x1e\x9f\xae\xd1\x47\x97\x14\xee\x05\x3d\xff\xe1\xb8\x9b\x16\xce\x6b\x5a\x78\xe7\xd0\xc2\x8f\x96\x16\x3e\x58\x5a\xf8\xc9\xa5\x85\x9f\x0d\x2d\xfc\xb3\xa2\x85\xbf\x28\x5a\xb8\xd4\xb4\x40\x48\x93\x18\x18\x59\xa3\x9f\xdc\x29\xb9\x42\xf9\x63\x4e\x6e\x6f\x45\xde\x9a\xd8\x8c\xd4\x33\xe3\xc4\x99\xda\x35\xb1\x73\xbb\x22\x76\x72\xb7\xc4\x9d\x5d\x46\xcc\xf4\x12\x52\xcd\x2f\x25\x6a\x82\x73\xa2\x67\x78\xd3\x9a\xe1\x27\xb2\x46\x3f\x93\xd6\x05\x8d\x95\x74\x91\x86\xcc\x6a\xe5\xa7\x8b\x1b\x2a\x72\xe7\x86\xaa\x7e\x7f\xa3\x8c\xf6\xfb\x49\x71\x42\x4e\x94\xea\xd1\x4f\x14\xae\xd1\x3f\xdb\x43\xd7\x57\xa1\x91\xda\xd0\x55\x37\x1a\x84\xca\x1e\xf8\x99\x00\xe9\x41\x23\x0a\xeb\x9b\x44\xf8\x60\x50\x5f\x7f\x81\xfe\x42\xb0\xda\x5c\x12\x24\x7a\x2b\xd4\x6a\xb5\x29\x18\xdb\xf7\xd6\xe2\xaf\xb8\xb7\x76\x8d\x2e\x95\x1c\x22\x54\xfe\x4b\x29\x5e\x1e\x9d\x1c\x1c\xfe\x74\x78\x70\xf0\x7a\xbc\x4f\xd0\xc7\xc3\xd7\xe7\x3f\x1c\x8f\x3f\x12\x74\x7c\xba\xbf\x77\x7c\x7e\x71\x7a\xb6\xf7\xf6\x70\xfc\x13\x59\x23\x46\xf1\x84\xd2\xc0\x36\x0f\x0c\xba\x11\xa5\x81\xee\xe6\x96\xb8\xdd\xab\xf2\x29\xe2\x14\x4f\x7c\x17\x33\xfe\x14\x09\x59\xa6\xf0\xe9\x23\xdf\xe0\xde\x47\xbe\x21\x08\x5f\xdf\x86\xa5\xfe\x2d\x7c\xe4\x6b\x68\xfa\xc8\xaf\xe9\xc1\x47\x36\x38\x34\x95\xba\x80\x91\x12\x70\x0a\x51\x44\xf1\xd2\xd9\x34\x32\xf6\x7d\x64\x08\x94\xd1\x4a\xf1\x21\x69\xb2\x18\x82\x8d\x0c\x07\x15\x92\x0f\x5f\xfe\xd7\x3f\x86\x7f\x7f\xf1\x4d\x1d\x5c\x1c\xcb\x19\xa8\x1c\xe8\x2d\x49\xf2\xc2\x47\x66\x6b\xca\x78\xb4\x46\x31\x75\x6d\x85\x3a\x49\x00\x54\x62\xc1\xdc\xf6\x1e\x36\xd5\x35\x85\x52\x87\x77\xe8\xec\x2a\x93\x42\xa5\x0e\x46\x91\x4a\x00\xab\x69\xab\xeb\xe6\xa5\x72\x8e\xd0\x25\x99\x44\xd3\xd5\x4a\xd9\x83\x5a\x6b\x1d\xa8\x26\x40\xc0\xb5\x2a\x6c\xda\x66\xb8\x20\x60\xb9\x46\x11\x85\xfa\x5a\xd6\x4b\xe6\x16\x77\x74\x40\xb6\xa5\xfe\xf4\xb9\x28\xf5\x39\x02\x5d\x28\x39\x59\x7f\xd0\x2d\xd5\xe7\xfc\x7b\xa3\xaa\xa7\x0e\xf5\x38\x0d\xee\x73\x72\x7b\x9c\xd0\x9c\xe4\x0f\xef\x44\x39\xcb\x78\xf1\x31\x29\x67\xe6\x10\xbf\xb9\x86\x57\x98\x81\x81\x3b\xd1\x40\xcf\xa2\x73\x3b\x76\x7d\xa9\x87\x73\xcf\xad\x5e\x9e\xcb\x31\x8d\x5f\xa8\xc1\xa0\x3e\x22\xbe\xeb\x28\xfe\x71\x29\x3d\x3f\xa8\x5a\x3b\x6b\x82\x8e\x4f\x53\x5f\x0e\xfa\xc4\xdc\x0d\x5a\xd9\xe3\x1e\x89\x4a\x91\x7b\x0e\x29\x39\x97\x2b\x15\x82\x07\xbe\x73\xef\x89\x0e\xa5\xa9\x59\x59\x0a\xf3\x8d\x47\xa5\x6c\x4f\x65\x38\xe6\xe2\x76\x4e\x98\x00\xcf\xfe\xf5\xf1\x59\x8c\xfc\x4b\x1f\x42\xe4\x1b\xba\x33\xad\x2b\x11\xe5\x6c\xc6\xa2\xd3\x8e\x09\x57\x11\x75\x7b\xaf\x4f\xfd\x83\x06\x7a\x84\xa0\xfa\x3d\x03\x03\xf3\x6a\x12\x95\x4c\x02\xbe\x46\x82\xf9\xfd\x0d\x52\xe1\xc4\x50\xe1\xe3\x88\x5b\x37\xef\x21\xac\x65\xec\x6e\xe3\x93\x64\x3a\x76\xdf\xd7\xc8\x45\xaa\x4b\xe7\x0d\x71\xdb\xbc\x04\x68\x23\x0e\x5f\x1d\x0b\x93\xfe\x4d\x25\xa0\x44\xe3\xf7\x6f\x16\x45\x99\xdd\x78\xba\x4a\x5d\x76\xa8\x4e\x84\x26\x24\x2d\x43\xaf\x10\xc2\xfe\x8a\xd2\x8d\xfe\x45\xa4\xee\x5f\x50\x7a\xf6\xff\x0c\x15\x69\x28\xa9\xb8\x52\xcf\x7e\xb1\xb1\x9d\x81\x01\xe1\x1e\xe5\x11\xb4\x92\x5a\xbe\xab\x23\x7d\xa8\x82\xfc\x89\xdd\x37\x13\xc6\x3b\x89\x8a\xec\x9b\x80\x56\x34\x89\x95\x23\x00\x7a\xff\x24\x80\x53\x74\x05\x57\x2b\x32\xb9\x9a\x36\x7e\x99\xc0\xa1\x8b\xab\xe9\xc6\x2c\xd6\xdd\x91\xba\x0e\x1b\x7c\x23\x18\xe1\x00\x50\x33\xb3\xe7\x0f\xc8\xc0\xaf\xee\x8b\x4c\x6e\x6e\xf5\xcf\x97\x08\xee\xd1\x07\x75\x2b\x18\x5b\xe4\xb9\x48\x4b\xaf\x82\x10\x62\xce\xe9\x09\xda\x8c\x9b\x3c\x7a\x3b\x24\x62\xeb\x35\x62\x78\x88\x38\xe6\xd4\xfe\xae\xce\x0e\x0f\x59\x7d\x4b\x06\x97\xd2\x33\x24\x13\x31\x5d\xad\xd4\x55\x9e\x98\x02\x01\xa5\x53\x08\xb4\x25\x7f\xdd\xb8\x0b\xea\x52\xaa\xe3\xfa\x4a\xad\x24\x8d\x32\xe0\x9f\x09\x85\xd2\x24\x8d\xbd\x63\xe7\x77\xb8\x8c\x12\x51\xbb\x39\x91\xea\x88\x09\x22\x54\xfe\x65\x88\x02\xb8\x0e\xfd\xca\xb6\x51\xcc\xb2\x4b\x82\xea\xbd\xfb\x2a\x4c\x5b\xed\xb4\xac\x5c\xca\x6b\xc4\xe0\xf8\x1a\xf4\x7a\x75\x95\x7a\x1f\xc2\x8d\x23\x83\xf5\xd5\x4b\x5c\x31\x05\xe2\x2d\x06\x6a\xb1\x4e\xf3\x06\x77\x43\xa8\xab\x55\xf5\x7b\x34\x75\xc7\xb8\xe2\xed\x2d\x6c\x77\x49\x26\x64\xea\x1e\xd9\x53\x05\xae\xf7\xed\x0a\xa2\x9a\xcd\xa2\x6c\x91\x4a\xb1\xf8\xc5\x99\xc7\xa2\x3c\xaf\xb3\x05\x2e\x75\x6a\x5a\x74\x3e\xfd\x23\x71\x46\xa3\x6a\x53\x77\x73\x2c\xad\xa5\x36\xc7\xa8\x6f\xc6\xb2\x2a\x6f\x9b\x53\x5f\x5d\x96\x60\xd4\x83\xba\x0f\xdb\x68\x3f\xea\x2a\x47\x00\x21\xaa\x6a\x3a\x6f\xc6\x6a\x4c\xac\xd8\x0a\xe5\x3a\x6b\x06\xe0\x32\x6e\xc9\x56\x5c\x3d\x00\xb8\xee\x4c\x4e\xc6\xc1\xa5\xf8\x5c\xaa\x1b\x6d\x21\xe2\x00\xa2\xb8\x9a\x6c\x1c\xb8\xf2\x06\xd8\x91\xeb\x26\x8d\x5f\xa8\xe9\x92\x05\x75\xa2\xdf\x08\x90\x90\xd5\xf7\xe9\xda\xe3\x9e\x92\x15\xab\x64\xd1\x60\x50\x1f\x46\xb4\x67\x13\xf5\x7c\xcc\x9b\x25\x37\x9b\xa0\x14\xf5\x15\x3f\x6b\x0e\xaa\xdd\x71\x0e\x51\x9d\x64\x1e\xb9\x23\xc9\x9c\xd0\x79\x7d\xfb\xe0\x8d\x16\x4b\x15\x95\x85\x35\x3c\x6a\xa3\xa6\x26\xd1\x99\x5a\xb5\xad\x31\x77\x29\x0d\xed\x49\x50\x60\x7e\x04\x29\xd6\x41\xb3\xbf\x10\xf5\xe3\x5b\x80\x60\x49\xea\x66\x46\x9a\x91\x24\xb5\x6a\x4e\x15\x5c\x2f\xa4\x90\xa0\xbf\x52\xeb\xeb\x61\xdc\x32\xac\x76\x5b\xef\xdb\x6e\x48\x6d\x5e\xf5\x64\xb8\xcb\xbc\x86\x1d\x9c\x2c\x97\x77\xb5\xe5\x6a\xb7\xd9\x64\x38\x75\xe1\xf1\x55\xd8\xe8\xba\x63\xd5\x82\xcc\x51\xae\x86\xc6\x1e\xb7\xf6\xe2\x86\x15\xa9\x36\x0d\x76\x64\x9e\xa5\xf9\x0c\xcd\x85\xe0\x7f\x2c\xba\x49\x0b\xdd\x10\x25\xa0\x05\x3d\x2d\x8a\x5a\x85\x2d\x9e\xd5\x78\x2e\x3a\x34\x66\xaf\x47\xe8\x84\x4c\x9b\xed\x0d\x27\x36\x9a\x17\xc4\xfe\x1e\x54\xb3\x6d\x07\x1d\xe1\xee\x80\xea\x64\x6a\xd4\x21\xd9\xa2\x0d\x15\x07\x6a\x3b\xcd\xcc\x18\x08\xd8\xef\x53\xb3\x45\xc0\x1a\xd1\x2d\x59\xf9\x18\x0e\x71\x67\xba\x67\x88\xa8\xb4\x67\xaa\xe8\xe5\x0e\x55\x11\xcc\xdc\x2c\x51\x48\x88\xb4\x96\xa9\x6f\x3b\xad\xfc\xc1\xc6\x7d\xaa\x8e\x15\x4b\x94\x9f\x4d\xd6\x00\xa2\x99\xb6\x3d\x62\xea\xfc\x54\xc9\x8c\xae\xd1\xf2\xc5\xf8\xc5\x7a\xba\x46\xcb\x35\x9a\xbc\x9c\x42\xf0\x12\xae\x61\xf8\xff\x03\x00\x00\xff\xff\x22\x71\xc2\xd6\x48\x73\x00\x00")
-
-func staticJavascriptLocalforageMinJsBytes() ([]byte, error) {
- return bindataRead(
- _staticJavascriptLocalforageMinJs,
- "static/javascript/localforage.min.js",
- )
-}
-
-func staticJavascriptLocalforageMinJs() (*asset, error) {
- bytes, err := staticJavascriptLocalforageMinJsBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "static/javascript/localforage.min.js", size: 29512, mode: os.FileMode(420), modTime: time.Unix(1567030200, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _staticJavascriptSlippymapCrosshairsJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x56\xdd\x6e\xdb\x38\x16\xbe\x96\x9f\xe2\xac\xf6\x42\x32\xe2\xc8\x6e\xb1\x4d\x1b\x1b\x46\xa1\xa4\xde\x36\xdb\x36\xe9\x26\x99\x1f\xb4\x28\x02\x5a\x3c\x96\xd8\x50\xa4\x40\x52\xb1\xdd\x36\xc0\xbc\xc3\xbc\xe1\x3c\xc9\x80\xfa\xb3\x64\x3b\x69\xc7\x37\x96\x78\x3e\x7e\xe7\x87\xdf\x39\xe2\x1d\x51\xa0\x39\xcb\xb2\x75\x4a\x32\x98\xb6\x9e\xbf\x7f\x87\x6f\xf7\x93\x5e\xaf\x59\x09\x22\x25\xb5\x4e\x08\x53\x1a\xa6\xe0\x2f\x72\x11\x19\x26\x85\xdf\xff\xd6\xeb\x01\x00\x58\x2a\x4e\x0c\x97\x02\xa6\x60\x54\x8e\x93\xcd\xba\x46\xbe\x80\x29\x7c\xeb\xf5\x1c\x8f\x09\x66\xbc\x31\x34\xfb\x53\x92\x59\x0a\xa7\xc6\x46\x52\x18\xc2\x04\x2a\x98\x82\x75\x1b\xa3\x39\xad\x97\xfc\xfe\x64\x03\x64\x14\xa6\x1b\x74\xc0\xe8\xa4\xc5\x42\x15\x59\xc2\x14\xda\x51\x3a\x8e\x0d\x23\xb0\x96\x9b\x4d\x2e\x3e\xa3\x35\xe9\x7d\x4d\xb0\x64\x82\xca\x65\x20\x85\x42\xcd\xbe\x22\x4c\x0b\xba\x49\x27\x48\xa9\xa8\x7e\xcc\x41\x01\x28\x92\xdb\x66\xb7\x49\x49\xe1\x7b\xa9\xbc\x43\x6f\x50\x51\xd5\xa8\xda\x48\x15\x89\x51\xd0\x07\xed\x5f\xa5\x4c\xb7\xed\x25\x62\x38\x84\x39\x46\x24\xd7\x08\x0b\xa9\xe0\xea\xe2\xfd\x0c\x2e\x67\xe1\xd5\xc5\x39\x98\x04\x35\x02\x95\xc2\x33\x30\x97\x26\x81\xa5\x54\xb7\xa0\x90\x33\x32\xe7\x6b\x60\xa2\xa1\xe7\x92\x50\xaf\xbf\x4d\x18\x04\x01\x9c\x5e\xbc\xff\xf0\xcb\xf5\xec\xf2\xea\x25\xf8\x4f\x47\x4f\x8e\x46\x2f\x46\xc7\x43\x93\x30\xcd\x34\x21\x4a\x0a\x4e\x04\xed\x57\x99\xda\x4a\x34\x47\x56\x55\xc4\xbe\xde\x0f\xac\x10\x5a\x75\x7a\x5c\x0f\x55\xa9\xa9\x8c\xf2\x14\x85\xb1\x8a\x98\x71\xb4\x8f\x27\xeb\x33\xea\xbb\x8d\x44\x0f\x4b\xac\xdb\xaf\x4b\xcd\x16\xe0\xff\xab\xae\x90\x25\x75\xf6\x33\x46\x0a\x89\xc1\x8a\xd4\x77\x29\xbb\xb3\x1c\x8e\x53\x22\x03\x8d\x26\x34\x46\xb1\x79\x6e\xd0\x77\x19\x75\x07\xf0\x80\x53\xe7\xa7\x14\xdc\x45\xdd\x20\x7f\x24\xbb\xb6\xc0\x4b\x17\xed\x8d\x41\x46\x14\x0a\x73\x2e\x29\x06\x4c\x68\x54\xe6\x04\x17\x52\xa1\x5f\x06\x35\xe8\x78\x09\x04\xae\xcc\x15\x9b\x73\x26\xe2\xfe\x04\x2a\x59\xf6\xda\xc7\x13\x48\x11\x71\x16\xdd\xee\x28\xbb\xe9\x6c\xbf\x7c\xea\xc3\x4b\x58\x10\xae\x11\xc6\x55\xb3\x3f\xac\x7e\x47\xa1\xc9\x95\xd8\xee\x03\x5b\x84\x4c\xea\x56\x91\x50\x98\xad\x1e\xe7\xc4\xc0\xd4\xa2\x3e\x79\x9c\x18\xef\x73\xdb\x54\x84\x53\x9a\x44\xec\x7d\x9e\x38\x50\xa5\xb4\xc1\xd8\x2e\xd9\xf0\x7f\x94\x32\xf5\xfb\x6d\xf7\xdc\x56\x3e\x17\x14\x17\x4c\x20\x6d\x91\x1b\x66\x38\x76\x6d\x1b\x45\x55\x15\x28\xf4\x64\xd7\x0a\x16\x4e\x4c\x60\xe4\x7f\xd9\x0a\xa9\x7f\xd4\x87\x03\xb0\x22\x81\x03\x1b\xe6\xd6\x3a\xfc\xdb\xae\xdb\xd0\x1a\xc3\xd3\xa2\x4c\xb5\x53\xb7\x28\x1f\x13\xc4\xa0\x06\xa2\x10\x28\xd3\x19\x27\x6b\xa4\x40\xb4\x75\xc4\x4c\x4e\x71\xc0\xa5\x88\x8b\x27\xf8\xeb\x8f\x3f\xa1\x3c\x36\x23\xc1\xc8\x38\xe6\xe8\xd6\xd5\x6e\x97\x04\xed\x79\x15\x61\x97\x21\xef\x84\x56\x85\xbc\x93\xca\x26\xe4\x7f\x10\x67\x1d\xde\xa0\x8e\xf8\xf1\x38\x3b\x32\xec\x76\x5c\xe1\xd0\x1d\x94\xa7\xd2\x9d\x27\x01\x13\x02\xd5\x35\xae\xac\x4e\x38\x9f\x54\xd9\xde\x0f\xec\x38\xf4\xb6\x66\x7d\x7b\xcc\x30\xda\x99\x32\xe9\x23\x2d\x58\x35\xde\x66\xa0\xa4\x45\x4b\x94\xaa\x2e\xbb\x60\x2b\x8b\x9d\x29\x60\x29\x4f\x64\x2e\x28\x13\xf1\x29\x67\x28\xcc\x25\x46\xa6\x91\xfa\x66\x57\x82\x2c\x4e\x4c\xe7\xc3\x56\x2e\xb5\xc4\xb9\x64\xd4\x24\x1d\x48\xb1\xb2\xc3\xd5\x24\x7e\xb3\xb6\x8d\x5b\x51\x0f\xe1\x69\x1f\x0e\xe1\xc5\x64\x1f\x70\x65\x81\x25\xbf\xc5\x75\x28\x87\x43\x48\x8c\xc9\xc6\xc3\xe1\x72\xb9\x0c\xf4\x1d\x32\x31\xff\x22\x95\x08\xa4\x8a\x87\x94\x18\x92\x2b\xae\x6f\x22\xad\xb7\xe3\xb0\xb6\x9b\x5c\x59\xc9\x79\xae\x7d\x19\xb3\x94\xc4\x38\x8c\xd9\x62\x32\x27\x1a\x8f\xfe\x33\xb8\x1c\xf1\xd7\x17\xaf\x78\x32\x5b\x86\xd7\xe1\xdb\xd9\x49\x68\x7f\x1f\x86\x9b\x9f\x07\x07\xd0\x73\x1c\x6f\xfd\xe6\xd9\x49\x38\x7b\x1b\x86\x67\xe1\xbb\x02\x14\x5e\x87\x27\xef\xc3\x30\x3c\x5b\xf2\xb3\x83\xec\x75\x12\xbe\xbb\xfc\x3d\xbf\xcc\x7f\x93\xd9\x07\x71\xf1\xe5\x79\x22\xe2\x59\x76\x99\x1e\x7d\x6c\x08\xd2\x70\x7e\x9d\x9f\x3e\x47\xc6\xcc\xff\xf8\xf9\x1b\xf5\xcc\xa4\xe7\xc7\xc7\xd1\x39\xfd\x7f\x76\x96\xe8\x5f\xcf\xc2\xf0\x95\x9e\xba\xde\x4e\x35\xb5\x59\x17\xaa\xff\x54\x0f\xa1\x62\x21\xc8\x72\x9d\xf8\x6e\x26\x35\xb3\xb2\x1a\x93\xb9\x96\x3c\x37\xe8\xf6\xf7\xa0\x8c\xcc\xc6\xb6\x91\xda\x07\x73\x00\x6e\xb6\xda\x8b\x2e\xcf\x6b\xfc\xe4\xf8\x01\x7b\x71\x4c\x0f\x9b\x39\x2e\xcc\x96\xb7\xd5\x23\xde\x52\xa2\x62\x26\x0e\x8b\x5d\x87\x2f\xb2\xd5\x64\x2f\xaa\xea\xf0\xf1\x9c\xcb\xe8\x76\x2f\x62\x4e\xa2\xdb\x58\x59\xa9\x1f\x36\x45\x81\xa8\x98\xec\xd5\xdf\x8f\xb6\x29\xcc\x90\x98\x31\x08\x59\x3d\xfe\x60\xc3\x18\x72\xc5\x7d\x9b\x69\x23\xb4\x03\x70\xfb\x7b\x77\x7d\x3d\x64\x82\xe2\x6a\xfc\x64\x34\x1a\x8d\xdc\xae\xbe\xeb\x03\x2e\xf1\x5f\x24\x13\xbe\x3b\x71\x3b\xdf\x8b\xce\x15\xf8\x67\xee\x23\x0d\x7e\xe7\x4e\xd2\x58\xca\xef\xc8\x7e\xe6\x07\xef\x25\x0d\xfa\x47\x77\x93\x4e\x00\x8e\x93\x06\x24\xcb\x50\xd0\xd3\x84\x71\xea\xb7\x82\xd8\x1e\xc3\x2d\x07\x45\x39\x22\xad\xab\x21\x5b\xbc\x57\xf0\x6a\x04\x56\x17\x80\xfb\x41\xaf\xfe\xc0\xb7\x8c\xf6\x56\x30\xe9\xf5\xee\xfb\x76\xda\xfd\x1d\x00\x00\xff\xff\xf0\xaf\x10\xdf\x70\x0c\x00\x00")
-
-func staticJavascriptSlippymapCrosshairsJsBytes() ([]byte, error) {
- return bindataRead(
- _staticJavascriptSlippymapCrosshairsJs,
- "static/javascript/slippymap.crosshairs.js",
- )
-}
-
-func staticJavascriptSlippymapCrosshairsJs() (*asset, error) {
- bytes, err := staticJavascriptSlippymapCrosshairsJsBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "static/javascript/slippymap.crosshairs.js", size: 3184, mode: os.FileMode(420), modTime: time.Unix(1576188788, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _staticJavascriptWhosonfirstNetJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x57\x6d\x6f\xdb\x36\x10\xfe\x6c\xff\x8a\x8b\x06\xd4\xf2\xa2\xda\x4e\xfb\x61\x40\x0c\x6d\x18\xb6\x01\xeb\xb0\x6e\x40\xd7\x01\x03\x82\xc0\xa0\xa5\x93\xa5\x86\x22\x15\x92\x4a\x62\xa4\xfe\xef\xc3\x91\x7a\xa1\x6d\x79\xad\xd7\xad\x40\x63\xfb\x78\xaf\xcf\x3d\x77\x94\x1e\x98\x82\xc7\x5c\x6a\x29\xb2\x42\x69\x03\xf1\xde\xaf\x8f\x1f\xe1\x79\xb7\x1c\x8f\x3d\xd9\x4c\x20\x69\x85\x59\x2d\x12\x53\x48\x11\x4e\x9f\xc7\xa3\xf1\x88\xfc\xa4\x98\xb1\x9a\x9b\x55\xc2\x92\x1c\x57\xc6\x70\x88\xe1\xf5\x62\xb1\x58\x2c\x61\x3e\x87\x52\xb7\x7a\x1a\x79\x06\x31\x3c\x8f\x47\x00\x00\xee\xef\x04\x45\x22\x53\x5c\xdd\xd7\xa8\xb6\x93\x6b\xe8\xdc\x5b\x01\xc5\x18\x8d\x47\x23\x14\x09\xc4\x20\xf0\x11\xbe\x57\x8a\x6d\xc3\xe9\xd2\xc9\x33\xa9\x20\x24\xd7\x77\x50\x08\xe8\x4d\xc8\x33\x89\x1f\x20\x76\xd2\x9b\xbb\xdb\x65\x2b\x87\x18\x5c\xd0\x3f\xdf\xbd\xf9\x41\x96\x95\x14\x28\x4c\xf8\x30\x6d\x15\x50\x24\xb3\xaa\xd6\x79\x78\x07\x97\x10\xc4\x01\x5c\x82\x3b\xdc\xb9\xa0\x0a\x4d\xad\x84\x55\xfb\x20\x0b\x11\x06\x2f\x02\x3a\x26\xd3\x5d\xb4\x57\x5b\x86\x26\xc9\xfd\xa2\x6a\xc5\x23\x90\x62\xa5\xeb\x24\x41\xad\xed\xf7\x8c\x15\x3c\x02\xa6\x36\xba\xad\xb6\xc8\x20\x34\xdb\x0a\x65\x16\x5a\x31\xc4\x31\x04\xb5\x48\x31\x2b\x04\xa6\xc1\x14\xda\x12\xe9\x94\x00\xdd\x79\xd9\xcd\xe7\x60\xf2\x42\x43\xa1\x21\x47\x85\x40\x10\xad\x59\x72\xf7\xc8\x54\xaa\x21\x91\x65\xc5\x4c\xb1\x2e\x78\x61\xb6\x4e\x3b\x7c\xb5\xb8\xfa\x66\x71\x75\xf5\x7a\x4e\x76\x85\x66\x4c\x49\xc1\x99\x48\xa7\x0d\xf6\x5c\x23\x0c\xa6\x24\xea\x72\x8d\x6a\x20\x1f\x08\x3a\x2a\x04\xd7\x4e\xea\xa7\x68\x3d\x3e\xef\xfa\x62\x49\xe3\xc6\xb3\xb9\xdd\x6b\xa2\x4f\xab\x23\xcd\x23\xb7\x27\x0c\x8f\x38\xea\x19\x92\xae\x14\xab\xbc\x20\x82\x77\xbd\x4a\x99\x61\x5d\x1e\xa3\xa6\xad\xf6\x83\x78\x3c\xe3\x72\x13\x06\x29\xae\xeb\x4d\x10\x41\x70\x63\xfd\xa6\xb7\x60\x5b\x0e\xc4\x99\x5a\xf1\x8e\x52\xcd\x07\xd5\xda\x77\xdf\x3a\x1f\xf5\xbf\x5d\xc4\xd6\x84\x72\xdb\x2d\xf7\x12\x2c\x0b\xad\xfd\x0c\xbb\xec\x6c\x42\x36\xf2\xea\xb1\x30\xf9\xea\x29\x57\x9f\xa2\xda\xd2\x73\x4f\x69\x5d\x38\x27\x0e\x9e\x0d\x9a\xce\x3e\x2f\x4c\xd4\x06\x8f\x7a\x48\xa7\x5f\x1c\xfc\xf4\xc4\x74\x7e\xce\x1f\x9d\xa1\xd6\x3c\xe5\xea\xb8\x2f\x5d\xd9\x9d\xf5\xa9\x81\x22\xf0\x15\xde\x37\xfb\xe7\xaf\xb7\xbf\xfe\x6c\x4c\xf5\x0e\xef\x6b\xd4\x26\xf4\x3b\xac\xf0\x7e\x26\x05\x97\x2c\x1d\x6c\x52\xf3\x31\x9f\x0f\xf1\x67\x2f\x3d\x5a\x3b\xd7\xf4\x9d\x06\x72\xa6\x0d\x33\xb5\x1e\xa2\x92\x77\x0c\x17\x31\xbc\x5a\x2c\x1c\xa5\xe8\x7f\x1f\x03\x95\x92\xca\xc6\x60\x05\xc7\x14\x8c\x84\xa3\x68\x11\xac\x31\x61\xb5\x46\x38\x08\xfb\x1e\x9f\x0c\x29\x40\x78\x70\x40\xc2\xa9\xdd\x7b\x2e\x5e\x43\x6d\x8a\xe1\x92\xa0\x24\x1b\x81\x43\xc9\xe2\x69\x75\x9b\x05\x9a\x31\xae\xd1\xa7\xbb\x57\x9e\x51\x5b\x3b\xca\xee\x7e\x61\x86\x41\x0c\xbf\xfc\xf1\xfb\x6f\xb3\x8a\x29\x8d\xae\x72\x85\xba\x92\x42\x23\xe5\x38\x3d\xe1\x27\x61\x54\x69\x88\x9f\x09\x8c\xf5\x7e\x1a\x18\xfc\xdf\xea\xf5\x86\x4f\xb7\xc3\xb7\xb7\x0e\xbe\x70\x83\xb4\x78\x1e\xb8\xf2\xd6\xe9\xcb\x75\xad\x4d\x21\x36\xcd\xf2\x1d\xb5\xe0\x27\x6b\x88\xe1\x2d\x33\xf9\x2c\xe3\x52\xaa\xd0\x7e\x55\x4c\xa4\xb2\x0c\xa7\xf0\x35\x5c\x2d\xec\xbf\x1e\x19\x32\x32\x65\x45\x3b\x57\x26\x75\x89\xc2\xcc\x12\x85\xcc\xe0\x4f\x1c\xe9\x57\x18\xb0\x86\x37\xa6\xac\x66\xb9\x42\x7a\x26\xa8\x15\xdf\x83\x96\x8e\x34\x32\x95\xe4\x3d\xba\xbd\x0c\x2e\x63\x08\x5e\x24\x6b\x7b\x37\x27\xeb\x7d\xb4\xbb\x6b\xe0\xd0\x28\x86\xe0\xbb\x64\x1d\xc3\x90\x11\xb5\x3b\x86\x36\xa1\x13\x4d\xb2\x03\x5e\xa1\x08\x83\x0d\x9a\x20\x02\xdb\x25\xa3\x6a\xec\x20\x27\x0d\x8d\x22\x0d\xfd\xe7\x05\xcb\xc1\x86\x82\x83\xb7\xc8\x99\x13\xda\x45\x3b\xde\x23\x78\x82\x2f\x3d\x4d\xf7\x28\xda\xb1\x64\x70\x17\x77\x77\x81\xbf\x86\xef\x70\xfb\x8f\xd7\xc2\xf3\x78\xff\x01\x86\xcb\x84\xf1\x4c\x2a\xb6\xc1\x29\x2d\xa9\x89\x5c\x7f\xc0\xc4\x4c\x3a\x34\x0e\x87\xc3\xdb\xba\xd9\xfd\xea\x0e\xb7\x10\xfb\xd3\x51\x29\xac\x48\x4a\x89\x38\x16\x91\xb6\x17\x65\xb6\x41\xf3\xc6\x60\x19\x3a\xeb\xa8\x4b\x1d\x42\x54\x2a\x02\xa5\xab\xc3\x4e\x50\xba\x74\x38\xa5\xe7\xde\xf0\xc2\xaa\x74\x68\x51\x81\xcd\x40\xbb\x54\x4f\x90\xc3\x5b\x54\x4a\x57\x37\x13\xfa\x3e\xb9\x1d\x68\xc7\x05\x74\x4f\x16\x67\xfb\x37\xcd\x2d\xf4\x23\x33\xd8\xb7\xd0\x4e\x1c\xdd\x5b\xa9\xa1\xea\xdf\x17\x25\x86\x87\x44\xb0\x3a\x39\x8a\x36\x3d\x37\x92\x69\x9f\xa1\xf5\x5f\x64\x34\x8c\x46\xc3\x4b\xab\x3c\x90\xbd\x55\xf9\x76\xaf\xe1\xed\x52\x75\xb2\x5a\xd0\x02\xeb\xba\x73\x46\x85\x8e\x55\xfd\x0e\xdb\xb5\x4f\xf9\x0d\x45\x68\xd2\x86\x9f\xb3\xbb\xc5\x79\xc4\xd4\x07\xc6\x6b\xfc\x4f\x49\x39\xd0\x83\x93\xf8\x37\x67\x8f\x8a\x55\x15\x2a\xf7\xea\xe3\x32\xb6\xec\xb8\x76\xe9\x45\xad\xb0\xed\xc9\x35\x18\xed\xed\xee\x4f\xcf\xc0\xc1\x04\xe8\x66\x02\x2c\x02\x4d\x70\xab\xf7\x99\x40\xda\x16\x1e\x40\x39\xf0\x6e\xf2\x6f\x51\x3c\xbb\x1e\x85\xa5\x7c\xc0\xb6\xa4\x73\x2a\x69\x3d\x0f\x15\xd3\xb8\xa0\x6c\x2e\x61\xf2\xd5\xc1\xab\xee\x64\xd8\x2d\x97\x1b\xdf\x17\xc7\x07\xe4\x11\x94\xa8\x35\xa1\x70\x8c\x91\xef\x95\xcb\xcd\x30\x4e\x89\x14\x5a\x72\xb4\xab\xfc\xc0\xe3\x72\x0f\x4a\x0f\xc4\x03\xc7\xb3\xb4\xd0\x95\xbd\x67\x1a\xcb\x08\xac\xa7\xee\xc5\xb4\xad\x82\x48\x35\x6e\x6b\xa7\x1e\x2c\xc7\xe3\xdd\x94\xe8\xfa\x77\x00\x00\x00\xff\xff\x18\x40\x2f\x62\x12\x10\x00\x00")
-
-func staticJavascriptWhosonfirstNetJsBytes() ([]byte, error) {
- return bindataRead(
- _staticJavascriptWhosonfirstNetJs,
- "static/javascript/whosonfirst.net.js",
- )
-}
-
-func staticJavascriptWhosonfirstNetJs() (*asset, error) {
- bytes, err := staticJavascriptWhosonfirstNetJsBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "static/javascript/whosonfirst.net.js", size: 4114, mode: os.FileMode(420), modTime: time.Unix(1567030839, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _staticJavascriptWhosonfirstSpatialApiJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x54\x5d\x6f\xd3\x30\x14\x7d\x4e\x7e\xc5\x55\x1e\x56\x47\xeb\x92\x77\xa2\x68\x2a\xac\x88\x21\xc6\xa4\xd0\x49\x48\x13\x8a\x4c\x7a\x9b\x9a\x06\xdb\xb5\x9d\x8e\x69\xeb\x7f\x47\x76\x9c\x26\x1d\x05\x21\xe8\x4b\xed\xeb\x73\xee\xe7\xb9\xd9\x51\x05\x0f\x6b\xa1\x05\x5f\x31\xa5\x0d\xe4\x47\xb7\xe7\x67\x78\xda\x67\xe1\xc8\x94\x68\x49\x0d\xa3\xcd\x31\xf0\x60\xf5\x84\x53\x8c\x84\x4a\x06\x39\x90\x55\xcb\x2b\xc3\x04\x27\xf1\x53\x18\x02\x00\xd8\x14\x34\x36\x2b\xc8\xe1\x29\x0c\x83\x89\x14\x8c\x9b\x92\xf1\x52\x8a\xe6\xb1\x16\x7c\xf2\x0a\x0e\x1c\xaa\x6a\x3d\x05\xc1\x4b\xdd\x56\x15\xea\xee\x8c\x4a\x09\x15\x3b\x72\xef\x6f\xab\x21\x77\x4e\x93\x6d\x8b\xea\xb1\xd4\x46\x31\x5e\x3b\x7a\x9c\x8d\x70\x0a\x9b\xb2\x55\xb6\x9a\x28\x75\x71\x2f\x18\xbf\xf0\x71\x2f\x23\x38\x87\xad\xce\x3a\xb4\x42\xd3\x2a\xde\xf9\xac\xd1\x10\xcf\xfc\x4d\x32\x59\x18\xec\xa7\xa7\x8a\x29\x2b\xca\x97\x6c\x49\x0d\xea\x7f\xa9\xab\xa1\x76\x44\x16\x7d\x3f\x69\xa8\x61\xa6\x5d\xe2\xe4\x4b\x36\x02\x08\x3e\x00\x04\xaf\x0f\x88\xbf\xab\x39\x1d\xd2\xbb\xec\xfd\xe7\xb6\x0f\x36\xf0\x39\x44\x67\x07\x9f\x9d\x55\xf0\xff\x68\x4f\x10\x06\x93\x1a\xcd\xb8\x0f\x7f\xa6\x1d\xb5\x82\x7e\xd5\xbe\x0c\x17\xd4\x5f\x7b\x0f\xb1\xcf\x6b\x5c\xf6\x16\x72\xe0\xf8\x00\x9f\x6f\x3e\xbc\x33\x46\x16\xb8\x6d\x51\x1b\x72\x0c\x55\xb8\x4d\x04\x6f\x04\x5d\x42\x0e\x63\xad\x06\x41\x18\x04\xce\x91\x96\x59\x77\x33\xea\x11\xec\x83\xe3\x69\x09\x39\xbc\xff\x74\xfb\x31\x91\x54\x69\x24\x66\xcd\x74\xa2\x50\x4b\xc1\x35\x2e\xf0\x87\x89\x33\x27\xf7\xfe\x17\xec\x3b\x27\x15\x35\xd5\x1a\x08\xc6\xbd\xa7\x4a\x70\x2d\x1a\x4c\x1a\x51\x93\x68\x5e\x14\xd1\xb4\xaf\x75\x0a\x68\x93\x75\xa8\xbe\x29\x64\x30\xf9\x19\xac\x68\xa3\xd1\xda\x7c\x80\xa1\x95\x44\x69\x39\x64\xe1\x38\xfb\x5f\x8b\x97\xc8\x49\x54\xa3\x19\xc7\x35\xaa\xc5\x38\x1b\x40\x1a\xf9\x92\xc4\x99\xa7\x76\x52\xf7\xe0\x13\xe3\x1c\x06\xe7\x53\x6c\x44\x45\x2d\x20\x91\x4a\x18\x51\x89\xc6\x6a\x2b\x4d\x3b\x49\xf9\xa7\xb5\xd0\x56\x72\x93\x94\x4a\x36\x81\xf3\x5e\xb6\x59\x90\xa6\x50\xcc\x67\x57\x70\x33\x87\xb7\xc5\xed\x0d\xcc\xe0\x6a\xb6\x98\xc1\x6c\xb1\x28\xae\x5f\xdf\x2d\xe6\x49\x92\xf4\x29\x8d\x97\xff\xe5\xba\xc5\x63\x31\x49\xca\x94\xfd\x64\xdc\x1f\x36\x65\x25\x14\x10\xfb\xb4\x01\xc6\xe1\x40\x70\x0a\xd8\xf5\x2b\xb6\x71\x70\x67\x43\x5e\x95\x1b\xc8\xed\xbf\x58\xe2\x5d\x71\xfd\x46\x7c\x97\x82\x23\x37\x64\xe3\x26\xd4\x83\x76\xa7\x41\xbb\x38\x1b\x24\x66\xd3\xe9\x60\xe5\xc6\xb6\xc6\x2d\x9b\x23\x5b\x90\x4b\x36\x91\xad\x5e\x13\x7b\xec\xe7\xb2\x3f\xee\x71\x87\xfa\x26\x18\x27\xd1\x59\xe4\x57\xce\x8f\x3c\x7c\xb1\xb2\x9d\x26\xc2\x7d\x6c\x97\xe1\x67\x00\x00\x00\xff\xff\x2a\xac\xa1\x85\x13\x06\x00\x00")
-
-func staticJavascriptWhosonfirstSpatialApiJsBytes() ([]byte, error) {
- return bindataRead(
- _staticJavascriptWhosonfirstSpatialApiJs,
- "static/javascript/whosonfirst.spatial.api.js",
- )
-}
-
-func staticJavascriptWhosonfirstSpatialApiJs() (*asset, error) {
- bytes, err := staticJavascriptWhosonfirstSpatialApiJsBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "static/javascript/whosonfirst.spatial.api.js", size: 1555, mode: os.FileMode(420), modTime: time.Unix(1585871200, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _staticJavascriptWhosonfirstSpatialInitJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\x8c\x41\xaa\xc3\x30\x0c\x44\xf7\x39\x85\xf0\xca\x86\xff\x7d\x01\xd3\x45\x17\xdd\xf5\x12\x4e\xa4\xb4\x82\x56\x2a\xb6\x1c\x53\x4a\xef\x5e\x12\xf0\x66\x98\x61\x66\x5e\x67\x41\xed\x31\x23\x5e\x36\x12\xbb\x72\x35\x12\x2a\xde\x3d\x34\xa3\xfb\x83\xb5\xc9\x62\xac\x02\x7b\xf6\xb4\x6f\xc2\x67\x02\x00\xd8\x72\x01\x12\x7c\x29\x8b\xc1\x09\x50\x97\xf6\x24\xb1\x38\x2b\xbe\xe3\x8d\xec\x6c\x56\x78\x6e\x46\xde\x61\xb6\xfc\x7f\xc8\x38\xb8\x90\x0e\x48\xbf\x6b\x55\x59\xb9\x54\x8b\xad\x70\x1c\xbd\x1f\x26\xa4\xe9\x1b\xd2\xf4\x0b\x00\x00\xff\xff\xd8\x8c\x0d\x8a\xa7\x00\x00\x00")
-
-func staticJavascriptWhosonfirstSpatialInitJsBytes() ([]byte, error) {
- return bindataRead(
- _staticJavascriptWhosonfirstSpatialInitJs,
- "static/javascript/whosonfirst.spatial.init.js",
- )
-}
-
-func staticJavascriptWhosonfirstSpatialInitJs() (*asset, error) {
- bytes, err := staticJavascriptWhosonfirstSpatialInitJsBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "static/javascript/whosonfirst.spatial.init.js", size: 167, mode: os.FileMode(420), modTime: time.Unix(1585872954, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _staticJavascriptWhosonfirstSpatialMapsJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x56\xdd\x8e\xdb\x36\x13\xbd\x96\x9f\x62\xa2\x0f\xf8\x24\x05\x86\x94\x4d\x51\xa0\x90\xa3\x00\x69\x81\xa2\x01\xb6\x59\x60\x9b\xbd\x32\x0c\x83\x96\xc6\x92\x1a\x8a\x54\x49\x2a\xde\xb5\xe3\x77\x2f\x86\xfa\x31\x95\xf5\xb6\x77\xbd\xb1\xcd\xc3\x33\x87\x87\xa3\x99\x91\xbf\x32\x05\x87\x4a\x6a\x29\xf6\xb5\xd2\x06\xb2\xd9\xea\xdb\x37\x38\x9d\x57\x0b\x07\x8a\x75\xcb\x4c\xcd\xf8\x9c\x38\xa1\x43\xc0\xb5\x88\xb8\x61\xad\x86\x0c\xc2\x7d\x27\x72\x53\x4b\x11\x46\xa7\xc5\x02\x00\x80\x3c\x30\x63\x54\xbd\xeb\x08\x87\x0c\x82\x77\x0c\x2a\x85\xfb\xcc\xaf\x8c\x69\x75\x9a\x24\x65\x6d\xaa\x6e\x17\xe7\xb2\x49\x0c\x13\xa5\x62\x8d\xf6\xc1\x30\x55\xa2\xc9\xfc\xed\x8e\x33\xf1\xc5\x7f\xff\xb9\xdf\x79\x97\xb0\xf7\xf0\x0d\x66\x1a\x69\x92\x1c\x0e\x87\x58\xb6\x28\xb4\x51\x88\xa6\x61\x6d\x2c\x55\x99\xe4\xb2\x7d\x52\x75\x59\x99\xe7\x72\xff\xa7\xbd\x15\xdc\xb5\x28\xfe\xb0\x31\xbf\xb3\x16\x72\x29\x7a\xa7\x52\xe9\x6b\x07\xe9\xe1\x24\x81\x8f\xe6\x88\xc2\x9e\xf1\x5c\xfa\x53\xbf\x4b\x02\xc1\x8a\x92\x30\x25\x62\xc8\x92\xcd\xe2\x88\x69\xe4\x7b\xc2\x16\x0b\x2f\x68\x99\xd2\xf8\x1b\xd3\x55\x90\xc2\x94\xc9\x8a\xe9\x6a\xab\x8d\xa2\x8c\x7a\x14\x55\xef\x61\x02\xe3\x5a\x14\xf8\x78\xb7\x0f\x83\xff\x05\x11\x64\x59\x06\x6f\x22\x38\x2d\x3c\x6f\x24\x40\x06\x13\x57\x77\x3b\x6d\x54\x78\x13\xad\x7a\xa1\xf3\x20\x48\x36\x38\x33\x2b\x67\x25\x85\xb3\x3a\x4a\xd9\x0c\xcb\x0b\xc8\x54\xa9\x67\xe2\x2d\xaf\x4d\xe8\x27\x7e\x34\xa3\x92\x59\xa2\xc6\x1c\x45\x69\x2a\x78\x95\xc1\x0f\x11\x19\xcc\xa5\xd0\x92\x63\xcc\x65\x19\xfa\x0f\x42\x61\x2e\x4b\x51\x1f\xb1\xb0\x92\xa0\x8d\xaa\x45\x69\xc5\x3c\x85\xa6\x53\x02\x44\xc7\xf9\xe4\xdc\x39\x82\xec\x41\x66\x0d\xad\xdf\x6c\x06\x06\x67\x66\xc4\x6e\x26\xcc\xd6\x9f\xc5\xde\x6e\x56\x9e\xe7\x5d\x51\xb1\x8f\xe0\xa3\x30\x21\xad\x97\x70\xf3\x26\x9a\x09\xda\xed\x5f\xb9\x64\x26\xe4\xcc\x44\x33\x61\x77\x4f\x8a\x68\x35\xd7\xa7\x44\xd4\xfa\x13\xfb\x64\x95\x23\xea\xa6\x7e\x49\x3a\xce\x4a\x8a\xa8\x7f\x82\xb3\x04\x7d\x14\x5f\x19\xaf\x0b\xeb\x32\xe1\xcc\x24\x5c\x0a\x7f\x09\xbd\x49\xce\xcc\x12\xec\x91\x2f\x24\xeb\xf2\xd4\xac\xc7\xc2\xd6\x9b\xe7\x05\x9c\x99\xda\x74\x05\x06\xa9\xd5\xb0\x90\x14\xe5\x84\x49\x61\x31\x3a\x25\x48\xfb\xc3\x06\xc9\xd5\xa0\x39\x9c\xd6\xcb\xae\x16\xde\x79\xb9\xf0\x16\x5e\x50\xda\x7e\x72\xab\xb8\x61\xed\x16\xf9\xd2\x66\x7f\x56\xc9\xaf\x46\xc8\xf3\x86\x92\xa2\xf6\x98\x19\xbf\xd0\xd6\x3e\x6b\xeb\xed\x17\x7c\xf2\x37\x36\xe2\x9f\x2f\x3b\x70\xc7\x67\x7e\x89\x7d\x56\xcc\xe4\xae\xa6\xb4\xf4\x36\xe3\x12\xcd\x87\x61\x68\x61\xe8\xd7\x05\xd5\xa1\xeb\xa5\xe7\x3b\x16\xae\xd5\x25\x51\xa9\xe3\xd7\x3d\x7b\xe6\xd8\xc5\xaf\xc5\x92\xa9\x61\x16\x6e\x65\x6b\x28\x2d\x34\x28\xc8\xd8\x30\x08\xef\x5a\xca\xab\xb6\xcd\x15\xad\xbc\x6b\x91\xb7\xec\x09\x69\x00\x0c\x11\x31\x47\xb6\xe7\x68\x2c\x1c\xba\xea\xd3\xed\x86\x5c\x40\x06\xb7\x34\xd2\x43\xbf\x61\xad\xdf\xab\x0f\xf2\xae\x74\xcc\x8a\xe2\xb3\xa4\x3b\xce\x04\xe6\xe3\x7e\xb4\xfd\xe1\x82\x86\x63\xdf\xd0\x9c\x76\xd8\xbf\xd0\xf8\x95\x9c\x64\x5d\xb6\xc3\x98\xcf\x96\x4b\x2e\xfb\xca\xeb\x0b\x6f\x9e\x1f\xb7\x06\xff\xab\xda\x4b\x5e\x5f\x92\xa1\x73\x14\xf8\x19\x1f\xed\x34\x3a\xb0\xda\xc0\x1e\x4d\x5e\x85\x02\x0f\x70\x8f\x7f\x75\xa8\x4d\x18\x8c\xef\x16\x2d\x9b\x03\x56\xa8\xd0\xbe\x0b\x6d\x68\x7c\xac\xdb\x60\x09\x27\xa8\x90\x15\xa8\x74\x0a\x27\x08\x3e\xe4\x39\xb6\x26\x48\x21\x60\x6d\xcb\xeb\x9c\xd1\xf5\x12\x62\xc2\x19\xce\x51\x14\x9b\x0a\x45\xa8\x20\x7b\x0f\x2a\x36\xf8\x68\xc2\x28\x5a\x7d\xe7\xe9\xe1\xfe\x16\x32\x78\xb8\xbf\x8d\x73\x85\xcc\xe0\xdd\xee\x4f\xcc\xcd\xc3\xfd\xad\xb5\xf6\x33\x97\xbb\x70\x3d\x99\xdf\x4c\xf1\xbd\x29\x2e\x59\x11\x8e\x32\xe4\x6e\xc7\x34\x6e\x5b\x66\xaa\x14\x5e\xb8\x4d\x00\xe7\x51\xe3\x75\xf2\xec\x65\xf2\x2f\x9d\x6a\x5d\x9b\x27\x8e\xdb\x4e\xf1\x89\x35\x21\x33\x9e\xa9\xbf\xa3\x8d\x80\xbf\x71\x0b\xf9\xc5\x3e\xa3\x67\x6b\xaf\x96\xda\x9f\xb6\x08\x9a\x56\x2a\x93\xc2\x7a\xe1\x79\xde\x74\xea\x72\xd8\xdd\x8c\x3f\xb4\xec\x54\x8e\xba\x8f\xf3\x1a\xd6\x1e\x51\x0c\x0b\xda\xee\x14\x4f\x27\x77\x4b\x07\xdd\xea\x6e\x57\xc8\x86\xd5\x42\xa7\xb0\x0e\x58\xb0\x84\x60\x47\x1f\x39\x7d\x14\xc1\x66\x46\x6e\x19\xfd\x41\x4a\xe1\x34\x24\x29\x1d\xb3\x77\x9e\x68\xf6\x10\x5d\x1f\x31\x85\x1f\x6f\xde\x4e\x70\xc3\x1e\xb7\x34\xc4\x53\xb8\xf9\x89\xb0\xf3\xe0\x9b\xbe\xcf\xd7\x07\xbb\x9b\x1b\xb7\xc9\x9c\xfe\x74\x3b\x8c\x1a\xc3\x89\x76\x3a\xb7\x0f\x1e\x8f\x70\x38\x34\x1f\xec\xbf\x24\x58\x9c\x23\x9a\x0c\x7f\x07\x00\x00\xff\xff\x74\x89\x7a\x97\xb6\x0a\x00\x00")
-
-func staticJavascriptWhosonfirstSpatialMapsJsBytes() ([]byte, error) {
- return bindataRead(
- _staticJavascriptWhosonfirstSpatialMapsJs,
- "static/javascript/whosonfirst.spatial.maps.js",
- )
-}
-
-func staticJavascriptWhosonfirstSpatialMapsJs() (*asset, error) {
- bytes, err := staticJavascriptWhosonfirstSpatialMapsJsBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "static/javascript/whosonfirst.spatial.maps.js", size: 2742, mode: os.FileMode(420), modTime: time.Unix(1585872088, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _staticJavascriptWhosonfirstSpatialPipInitJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x57\x51\x6f\xdb\x36\x10\x7e\x96\x7f\x05\xab\x17\xcb\xa8\xac\x74\xaf\xf1\x32\x20\xed\xba\xb6\x43\xda\x0d\x6d\xba\x17\xc3\x10\x18\xe9\x2c\xb3\xa1\x49\x82\xa4\xe2\xba\x81\xff\xfb\x70\x94\x28\xd1\x56\x94\x34\xd8\x5e\x0c\x4b\x77\xf7\xdd\xdd\xc7\xbb\xe3\x69\xc7\x44\x29\x77\x19\x2d\xcb\xb7\x77\x20\xec\x15\x33\x16\x04\xe8\x24\xe6\x92\x96\x71\x4a\xd6\xb5\x28\x2c\x93\x82\xe0\x73\x02\xa8\x33\xbb\x9f\x4c\x08\x21\xe4\x8e\x6a\x42\x15\xcb\x6f\x61\x4f\x2e\x48\x29\x8b\x7a\x0b\xc2\x66\x37\xb2\xdc\x67\x15\xd8\x4b\x6b\x35\xbb\xa9\x2d\x24\x71\x49\x2d\x9d\x0b\xf8\x6e\x7f\x80\x98\x53\xc5\xe6\xb7\xb0\x8f\x67\x8b\x0e\xc5\xd8\x3d\x87\xbc\xd6\xfc\x39\x38\xce\x68\x5e\x6b\x1e\x22\x59\xf6\x7c\x20\xb4\x69\x71\x10\xa6\x49\x8e\xad\x49\xf2\xc2\xa7\x37\xbb\x9f\x44\x85\x14\x46\x72\xc8\xb8\xac\x92\xf8\x23\x33\x86\x89\x8a\x5c\xfe\xfd\x81\xb4\xb9\x44\x1a\x6c\xad\x45\x13\xca\xc1\xfd\x06\x40\x5d\x86\xa3\x50\x4e\x83\x7c\xfd\x7c\xf5\x34\x98\x4f\x72\x14\x0b\x15\x46\xa0\x3a\xa6\x14\x53\xf9\x4e\x53\xa5\x40\x87\x64\x55\x60\xdf\x72\xc0\xbf\xaf\xf7\x1f\xca\x24\x56\x92\x09\x3b\x67\x62\xae\x24\xdf\x57\x52\x20\x64\x10\x4a\x80\x32\x1a\xcd\xf4\x14\x63\x4a\xa0\x71\x91\x3d\x96\x2b\x06\xc9\x04\xb3\x39\xa7\x96\x5c\x84\x9e\x1e\x3a\x4c\xd4\x64\x94\xcf\x39\xb5\xcc\xd6\x25\x9c\xc4\xe9\x81\x46\x83\x6c\xed\x49\x68\xff\x74\x64\x52\x3c\x23\x32\x29\xaa\xf1\xd0\xa4\x78\x3a\xb4\x10\xe0\xc9\xd8\x7e\x48\xb9\xfd\xf9\xe0\x50\xfb\x81\xfa\xef\x90\x9e\x0c\xae\x05\x78\x34\xae\x2d\x55\x39\xf0\xc7\xaa\x6d\x4b\xd5\x09\x3b\x8d\xcd\xa8\xfb\x2d\x55\xbe\x98\xe2\xd9\x22\x1a\xad\x76\x84\xa1\xba\x32\xe4\x82\xdc\x4f\xa2\xb8\xed\xeb\xf8\xdc\x77\x78\x3a\x89\xe2\xae\x47\xe3\xf3\xbe\x5f\x51\xe0\xfb\x2d\x3e\xef\x5a\x2f\x6d\x1c\xb4\xa1\x9e\x9d\x91\x1d\x10\x01\x50\x12\x2b\x49\x29\x89\xdd\x30\x43\xf2\x1b\x58\x4b\x0d\x39\xb9\xa6\xa2\xd2\x74\x4b\x8c\xa5\xda\x1a\x62\xf5\xde\x35\xa9\x24\xa5\xa6\x3b\xd4\x15\x95\xf1\x38\x4d\xbe\x99\xf3\x9f\x95\xcc\x28\x4e\x71\xba\xc6\x37\x5c\x16\xb7\xf1\x62\x40\x28\xb9\x20\xbb\x8d\x34\x52\xac\x99\x36\x36\x33\x8a\xe2\x71\x64\x5b\xaa\x0c\xb2\xfb\x91\xaa\xa4\x81\x4c\x3b\x0e\x06\x04\x0f\xd8\xfd\x2a\xe8\x0d\x07\x8c\x90\x09\x63\xa9\xb0\x8c\x5a\x20\xed\xe1\x8c\x51\xbc\xa1\x66\x43\x2e\x88\x80\x1d\xb9\xca\xde\x53\xb3\x41\xc7\xb3\x93\x88\x39\xdd\x83\xc6\x53\xb8\xca\xdc\xdf\x77\x5a\xd6\x2a\x69\xb5\x1a\x21\xde\x45\xd7\xb2\x35\xee\x0c\x6b\x55\x52\x0b\x79\x93\xb1\xbf\x94\x12\xc0\xbb\x28\x72\xe3\x4c\x22\xea\x96\x2a\xcc\xfa\x0d\x08\x0b\x3a\xc1\x82\x68\xa4\xfd\xd1\x23\xde\xd4\x37\xf9\xf4\x1c\xed\x96\xf8\x3c\x5d\xa5\x5e\xe8\xdb\xac\x93\x8a\xaa\x97\xae\xa5\xde\x52\x3b\x3d\x27\xd3\x0a\xe4\x37\x23\xc5\x34\x9d\x44\x87\xc5\x24\x6a\xc3\xd0\x52\x81\xb6\x0c\xd0\xdd\x72\xb5\x68\xfd\xc3\x77\xab\x69\x7e\x24\x1c\xed\x01\xa7\x6b\x5c\x1b\x44\x78\x44\xa7\xb6\x2e\x65\x4f\x4b\xa3\x4c\x2e\x06\x1e\xb2\x3b\xca\x6b\x58\xb4\xaa\x1d\x0e\x5a\x47\xd1\x51\x20\xcd\xfb\xcc\x28\xce\x6c\x12\xa7\xee\x88\x23\x24\x6c\x39\xed\xf5\xa6\x2b\x9c\x25\xdd\xe3\xa2\x81\x3d\x4c\xa2\x83\xcf\x1c\xbe\xbb\xd5\x01\xab\x2f\x5f\x33\x6e\x9b\x63\x7e\x20\x4b\xf3\x7a\xff\x86\x53\x63\x3e\xd1\x2d\x0c\xef\x97\x79\x63\x3b\x0f\xe0\x5c\x44\xe8\xa2\x90\xb5\xb0\x79\x20\x71\xd1\x0f\xdc\x66\x1c\x44\x65\x37\x98\xfb\x5a\x6a\x92\xb8\x91\x78\xf1\x6a\x41\x18\xf9\x75\x88\xb1\x20\xec\xe5\xcb\x63\x4e\x47\x70\x97\x6c\x15\xf2\xf9\x82\x00\xcf\x8a\x0d\x14\xb7\x50\x3a\x56\x0b\x29\x2c\x13\x48\xba\x27\xc7\x95\x7e\x87\xbb\x76\xb8\xdc\x9f\x8c\x7b\xef\x78\x5e\x73\x64\xf7\x97\x05\xb2\xd9\x96\x11\xa7\x05\xd8\xbd\xea\xca\x28\x3a\x79\xff\x7f\x50\xdc\x81\x35\x93\xb3\x67\xf8\xc8\xfb\xc0\xe5\x4f\xd0\xdb\x03\x8c\xb0\x3b\x00\x7d\x36\xb7\x3d\xa0\xb2\x43\x5a\xfb\x00\x32\x55\x9b\x4d\xa2\xec\xac\x65\x17\xd1\x03\x69\x93\x0b\xf9\x8d\xbc\x9a\xdd\x07\x27\x32\xed\x54\x9a\xc2\xef\x0d\xbe\x49\x26\x7c\x97\x20\xde\xd9\x19\x39\x1a\x9d\x97\x9f\xdf\x7d\x89\x53\xd2\xce\xd9\x96\x56\x29\x72\x53\x17\x05\x18\x13\x0e\x2f\x6d\x54\xc7\x4c\x3b\xfa\x0a\x0e\x54\x5f\xb9\xff\x38\x14\x4f\x0a\x88\xbb\xb9\x59\x81\xfc\xf3\xcb\x5f\x9f\xd0\x3c\xc5\x89\x16\xb9\xbb\xe2\xbc\xc7\x5d\x03\xb5\xb5\x06\xc7\x1b\x9a\x36\xf3\xfa\xc1\x6b\x42\x31\x95\x09\xba\x85\x32\x77\x20\x78\x01\xdb\x62\xd3\x8c\x80\x43\x3b\xf2\x0e\xc7\x81\xf4\x43\xda\xc5\x99\x70\x2f\xe6\xd9\x8d\x66\xa2\xba\x96\x7f\x68\x29\x6c\x32\xf3\xe7\x79\x76\x36\x68\x84\x26\x40\x24\x43\x1b\xb5\x8c\xfd\x73\xdc\xd5\x80\x5b\xe5\xf1\x0e\x72\x13\xcd\x8c\x5c\x72\x18\x7d\x09\x6b\x5a\x73\x1b\x4c\xbe\xde\x73\x50\xd1\xe1\xc0\x0b\x86\x64\x5f\xca\xa8\x3f\x5a\xce\xfd\xdc\x6b\xcb\x39\x8a\x82\xe8\x96\xbd\x7c\xc9\x56\x58\x2f\x71\x3c\x36\x03\x9c\xd9\x23\xe9\x68\x10\x25\xe8\xc0\x63\xee\x2c\xfc\x99\x9a\x34\xa4\x65\x58\x21\xee\xf8\x1e\xbf\x5e\x14\x53\xf3\x56\x2d\xf6\x00\xed\x73\xc6\x84\x00\xfd\xfe\xfa\xe3\x55\x98\x83\x17\xe2\x0e\x29\xca\x37\x1b\xc6\xcb\xc4\x05\xd1\xbb\x3f\xf8\x7b\x4e\x8a\x1c\xb4\x96\xfa\xe8\x8e\xd6\xda\xf7\xd6\x51\xa7\x7c\xb9\xfc\x3d\x4e\x09\x4a\xdb\x56\x7a\x88\x13\xaa\x58\xe6\xe6\x57\xce\x44\xde\xce\xaf\x04\x9b\x2b\x0d\x9a\x2a\xed\xfc\xb6\x8b\xc4\x21\xd8\x3a\x70\x25\x90\x22\x89\xb7\xf2\x0e\x40\xe0\x27\x6d\xbf\x4a\x84\x0b\xc6\x7f\x1f\xa8\xe1\x77\x68\x53\x38\x3d\xe6\xe9\xec\xec\xc2\x1b\xab\xb9\xd6\xa0\x2d\xb8\x96\xe7\x6e\x7e\x86\x53\x33\x02\x9e\x49\x51\x6c\xa8\xa8\xb0\xb2\xfa\xec\x06\x1b\x5a\xb7\x2c\x3c\x3f\x43\x67\x3a\x4c\xf0\x78\xfd\x78\x46\x7a\x8d\xfe\x48\x76\x8d\xf0\xe7\x92\x3b\xda\x2e\x71\x05\xcd\x8d\xc5\xf2\xe3\xb2\xa0\x58\x7e\x19\xbe\x0b\x16\x5e\xaf\xd2\x2f\x8e\x54\x1b\x28\x1f\x5b\xa3\x9d\x86\x5b\x68\x3b\x63\xbf\x9b\x35\xc6\xbe\xbc\xc3\xaf\x55\x27\x58\xf6\x9b\xe6\x6a\x11\xea\x34\xdf\x8d\x5e\xa7\x5b\x38\x8f\x94\xfc\x07\x5c\xab\x85\x8f\x4e\xe1\x70\x9a\x39\x56\xb8\x01\xfb\x0f\x83\x5d\xb2\xf4\x31\xa4\x9d\xa7\x55\x1a\x7c\xc6\x05\x5f\x78\x86\x33\xa5\xf6\x68\x5c\x68\x69\xcc\x86\x32\x8d\x13\x80\xd9\x66\xf5\x76\x8a\x38\xfb\xff\x0d\x00\x00\xff\xff\xee\xbd\xa7\x80\x22\x12\x00\x00")
-
-func staticJavascriptWhosonfirstSpatialPipInitJsBytes() ([]byte, error) {
- return bindataRead(
- _staticJavascriptWhosonfirstSpatialPipInitJs,
- "static/javascript/whosonfirst.spatial.pip.init.js",
- )
-}
-
-func staticJavascriptWhosonfirstSpatialPipInitJs() (*asset, error) {
- bytes, err := staticJavascriptWhosonfirstSpatialPipInitJsBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "static/javascript/whosonfirst.spatial.pip.init.js", size: 4642, mode: os.FileMode(420), modTime: time.Unix(1585954725, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _staticJavascriptWhosonfirstSpatialPipJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x56\x4b\x8f\xdb\x36\x10\x3e\x53\xbf\x82\x65\x51\xac\xd4\x78\x15\xa7\x45\x81\xc2\xaa\x0f\x45\xd0\x1e\x7a\x48\x0e\x2d\xd0\x83\xb1\x30\xb8\xe2\x68\xc5\x9a\x2b\x09\x24\x65\xd7\xd8\xf8\xbf\x17\x7c\x48\x22\xfd\x50\xdc\x43\xe2\x15\xe7\xf5\xcd\xcc\x37\xe4\xec\xa9\xc4\x87\xba\x55\x6d\x53\x71\xa9\x34\x5e\x47\x5f\x5f\xbe\xe0\xb7\x53\x91\x04\x47\xb9\xea\xa8\xe6\x54\xc4\x8a\xe3\xa9\x37\xb8\x66\x91\x77\xbc\xc3\x6b\x9c\x56\x7d\x53\x6a\xde\x36\x69\xf6\x96\x24\x18\x63\x6c\x20\x28\x7d\x14\xa0\xf0\x1a\xbf\x25\x88\xbc\x52\x5d\xd6\x64\x65\xfe\x36\x72\x52\xb6\xa2\x95\x64\x85\xc9\xb7\xcb\xe5\x92\x2c\xfc\xe9\x01\xf8\x4b\xad\xc9\x0a\x7f\x18\x4e\xda\x8e\x96\x5c\x1f\xc3\xa3\x8a\x0b\xf1\x31\x30\xff\x71\xf9\xf3\xef\x24\x14\x7e\x1e\x6d\x96\xf9\xf2\xa7\x04\x9d\x2c\xa4\x53\x61\x7f\x26\x78\x20\x2a\x0b\x2e\x41\x0f\x0d\x7d\x05\xb6\xb5\x80\x1f\x56\x78\xcc\xc6\x1c\x67\x1e\xb1\x04\xdd\xcb\xc6\x27\xb5\x31\x92\xa7\x22\x41\xa7\x45\x82\x12\xf4\xc0\xa0\xa2\xbd\xd0\xdb\x4e\xb6\x1d\x48\xcd\x41\x85\x6e\x4c\x51\xd0\x10\xd6\xa8\xa8\xad\xa6\xcf\x02\x5c\x69\x10\x39\xb4\xd5\x8a\x33\xb2\x22\x26\x0b\xf7\x69\xfc\x47\x07\x9d\xa0\x25\xe8\x63\x17\x9f\x4a\xe8\x5a\x7f\xe0\x53\x8c\xc0\x06\xb1\x26\xac\x12\x1a\x06\x32\x80\xea\x14\x42\xc0\x15\x50\xdd\x4b\x50\x8b\xd0\xc3\x98\x05\xaf\x70\xfa\xcd\x99\x04\xa1\x38\x2f\x53\xdc\xfc\xb2\x2a\x69\x56\x78\xa4\xee\x67\x2a\x4b\xd9\xf6\x8d\x61\xea\x10\x3a\x17\xd0\xbc\xe8\xba\x38\xd7\x1b\x02\xb0\xb6\xec\x5f\xa1\xd1\x79\x29\x81\x6a\xf8\x4d\x80\xf9\x4a\x89\x95\x93\x21\x8c\xfd\xca\x15\xe8\x5f\xb5\x96\xfc\xb9\xd7\x90\x92\x52\x50\xa5\xc8\x02\x3b\x55\xa7\xf2\xa8\xb4\xe4\x1d\x30\x92\x15\x68\x0c\xe7\xfe\xaf\x5a\x89\x53\x13\x99\xaf\x97\x05\xe6\xf8\x17\x07\xb5\xc0\xfc\xdd\x3b\x5b\x12\x64\x84\x55\x00\x7d\xc3\x0d\x33\xd0\xd8\x6c\x23\xda\x90\xa9\x08\xe4\xc9\xb4\x09\xbd\x7f\x8f\x99\xa4\x07\x9f\x51\x0d\x94\x81\x34\xe7\xa6\xbc\x1c\x7f\x87\x3f\x2c\xf1\x7a\x8d\x97\x2e\xc6\x98\xbe\x9c\xcb\x5d\x8e\x89\x7b\x93\x11\xfc\x0e\xf3\xe6\xa2\x65\xc8\xfc\x33\xe1\x6c\xb7\xb8\xda\x1e\xb8\x60\x25\x95\x2c\xdd\x65\x4e\xc1\xbb\x9a\x7c\x19\x17\xdb\xc9\x99\xd3\xb2\x7e\xd0\x44\x8b\xed\x2e\x57\x9a\x4a\xad\xfe\xe6\xba\x1e\x7d\x59\x27\x65\xdb\x68\xde\xf4\x86\x8e\x08\xa1\xd3\x64\x6d\x40\xee\xf1\xda\xdb\x17\xb1\x40\xd7\x73\x59\xd7\x36\x6b\x84\x90\xae\x73\xda\x75\xd0\xb0\x8f\x35\x17\x2c\x3d\x33\xf8\x0b\xfe\xd5\x9f\x5a\x06\xe9\x3e\x1b\xf4\x65\xa4\xaf\xeb\xac\x18\xc2\x7a\x8e\x4e\x15\x38\x61\x10\x0a\xf0\x45\x55\x06\xdc\xbb\xc2\x34\x34\xa8\xf0\x66\xf7\x14\xea\xdc\x97\x82\xe5\xec\xff\xcb\xc2\x9a\x5c\x4d\x64\x84\x6e\x53\x1a\x32\x0a\xd8\xe1\x70\x01\x65\xb3\xd0\x80\x32\x87\xce\x81\x03\xca\x6e\x0e\x94\x11\x3e\x32\x2a\x77\xe7\x06\x11\x3a\x39\x09\xed\x78\xc6\xd0\x81\x32\x83\xde\xc3\x34\x88\xfd\x2c\x1d\xda\x6a\xcb\x99\xa7\x88\xda\x0c\xb7\xa6\x9d\x35\xaf\x72\xcf\x74\x98\xae\xc7\xf8\x39\xb3\xe0\xe5\x23\xc1\xef\x7c\x94\xcc\x3b\x9d\x9b\x1f\x9f\xc3\xed\xf9\x31\xb5\xbf\x31\x34\x43\xe3\xbe\x3a\x33\xd1\xbc\xb8\x16\x9e\x33\xcf\x95\xc3\xf9\x78\x2a\x42\x69\xd3\xb2\xf1\x2e\xf6\xb7\xfe\x9e\x8a\xde\x70\xa7\xb8\xc6\x63\x3d\x4b\x04\xcf\x82\x71\x3c\x74\xdc\x56\x13\xec\x36\x23\x5d\x45\xdd\xc0\x0f\x64\x0c\x26\x2a\x39\xbb\x01\xd4\xc6\xa7\xf2\xd5\x34\x06\xa5\xfb\xb1\xdf\xc4\x7d\x1d\xf3\x95\xb9\xb9\x42\x5b\xc7\x69\xc7\xd6\xa1\x4d\x43\x59\x0f\xd2\xa8\xce\x51\x93\xf1\xfd\x78\x73\x7b\xed\xd9\x47\xeb\x51\x82\xea\xda\x46\xf1\xbd\x7d\xea\x62\xc3\x08\x97\xe5\x6a\x11\x2d\x05\x5e\xcf\x2d\x04\x09\x7a\x08\x78\x1b\xee\x00\x4a\xcb\x0c\x87\x4f\xbe\xd2\x32\x87\x86\x39\x82\x92\x15\x71\x14\xf5\x4e\xb5\xb4\x1c\xbd\x78\xda\x2f\x0d\xbf\x9f\x31\x8c\x70\x56\x54\x28\x18\x51\x86\x8d\x0f\x61\xee\x63\x90\x66\x43\x6a\x2b\x73\xba\x5e\x63\xd2\x3e\xff\x03\xa5\x26\xd3\x33\x0d\x4d\xb9\x35\x1c\xfb\xe3\xcf\xcf\x9f\x72\xf3\xe6\x37\x2f\xbc\x3a\xa6\xfb\x05\x6e\x7a\x21\x16\xf8\x87\x6c\x7a\xb9\xe7\xb6\x8c\x4e\xba\x1d\x03\x75\x12\xee\xba\xad\x6d\xe0\xcc\xf1\xd5\x2e\x9f\xfd\xeb\x2b\x95\xc7\x99\x10\x5e\xc3\x85\xf1\x1f\x77\x85\x22\x0c\x34\xe5\x42\x91\x6c\xe4\xaf\x0f\xea\x05\x73\x44\x1c\x4c\x8d\xa5\xff\x88\x82\x7a\x20\x37\xe5\x9d\x84\xe1\xee\xf4\x6d\xf4\x5a\x67\x3d\x1e\x47\x7f\xd0\xba\xf9\xca\x4d\xac\x3a\x2d\x86\x3d\x3e\x09\x17\x72\x10\x95\xdf\xec\x4f\x99\xd9\x2f\xff\x0b\x00\x00\xff\xff\xa6\xca\x88\x94\xfe\x0c\x00\x00")
-
-func staticJavascriptWhosonfirstSpatialPipJsBytes() ([]byte, error) {
- return bindataRead(
- _staticJavascriptWhosonfirstSpatialPipJs,
- "static/javascript/whosonfirst.spatial.pip.js",
- )
-}
-
-func staticJavascriptWhosonfirstSpatialPipJs() (*asset, error) {
- bytes, err := staticJavascriptWhosonfirstSpatialPipJsBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "static/javascript/whosonfirst.spatial.pip.js", size: 3326, mode: os.FileMode(420), modTime: time.Unix(1586031672, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _staticJavascriptWhosonfirstUriJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x55\xcb\x6e\xec\x36\x0c\x5d\xcb\x5f\xc1\xeb\xc5\x1d\x1b\x33\xf5\xe4\x01\x74\x11\x77\x16\x45\x57\xdd\xb6\xe8\x2a\x08\x02\x65\x4c\xdb\x4a\x35\x92\x21\xc9\x49\x83\x5c\xff\x7b\x41\xc9\x0f\x79\x62\xb4\x8b\xc4\x63\x8a\x3c\x3c\x87\x22\xe9\x37\x6e\xe0\xbd\xd5\x56\xab\x5a\x18\xeb\xe0\xb4\x7a\xfb\xf1\x03\x3e\x87\x32\x49\x22\x5b\xd1\x1b\x01\x27\xc8\xea\x5e\x9d\x9d\xd0\x2a\xcb\x3f\x13\x96\x00\x00\x10\xd4\x33\xaa\xaa\xd3\x42\x11\x50\xda\x3a\xd7\xd9\x87\xe3\xb1\xe2\x8e\x17\x31\x84\x36\xcd\x31\x2d\xa3\x30\x8b\xb2\x86\x13\x10\x12\xdb\x4d\x10\xbb\x07\x98\x93\x60\xfe\x99\x24\x8c\xdc\x45\x0d\xfe\x8d\x31\x0a\x2a\xa4\x6e\xb2\x54\xa8\x5a\xa7\x87\xd4\xa2\x03\x62\x37\x73\x70\x1a\x52\xd8\x03\xe6\x65\xc2\x58\x4c\x0d\xcb\x00\x36\x84\x47\xf8\x6f\xd0\xf5\x46\x2d\x12\xca\x84\x0d\x07\xcf\x48\x54\x77\xfc\xc5\x76\xdc\xb5\x11\x27\xc8\x44\x75\x00\x6e\x1a\x4b\x6c\x16\x18\xd2\x63\x50\x3e\x93\x3b\x9c\xbc\xb4\x42\x54\x77\x06\x25\x59\x96\xa0\x72\x71\xe7\x2f\x76\xe5\x3e\x31\xc8\x72\xd8\xcf\x58\xe5\x06\xd7\x29\x70\x45\x75\xcc\x14\x97\x6f\x9b\x69\xc7\x0d\xfa\x72\x4c\x1c\x83\x21\x13\xd5\x44\xae\x56\xfc\x82\x91\x83\x7f\xff\x22\x61\x53\xf7\x08\xbe\x87\xf4\x48\x77\xe0\x23\xcb\x15\xf9\x48\xd8\x42\x3e\x84\xad\xb9\xaf\x59\x5b\x67\x9e\x45\x05\x27\x50\xf8\x0e\x7f\x3a\x23\x54\x13\x31\x76\x97\x6e\x3c\xfa\xd5\x18\xfe\x91\xad\x39\xbe\xb7\x42\x22\x64\x01\xa2\x90\xa8\x1a\xd7\xfa\x5e\x4a\x18\x23\xfe\x1d\x37\xbe\x1e\xe1\xdc\xf6\x2f\xd6\x99\xec\xe6\x00\xf7\xbe\x83\xdc\xa5\x2b\xba\xde\xb6\x19\xb9\x79\xcb\xcc\x65\x1d\x71\x9f\x6f\xf5\xd7\x5c\x6e\xc2\x79\xd5\x42\x65\xe9\x31\xcd\xd7\x35\x09\x3e\xab\x8a\xf8\xca\xfd\xff\x65\xd2\x5c\x7c\x9b\xed\x8c\x7e\xd0\x44\x0d\x5b\x4c\x48\xea\x74\xb5\x8f\x09\x63\xa8\xce\xba\xc2\xbf\xfe\xf8\xfd\x37\x7d\xe9\xb4\x1a\x7b\x20\xf8\x3e\x95\xd7\x59\x08\xfa\x31\xe5\xd2\xa5\x4f\x39\x8d\x2c\xf3\x50\xa1\x32\x3b\x2e\xdd\xce\x97\x26\x61\x6c\x71\xb6\xba\x37\x67\x4c\x9f\x3c\xb5\x80\xe6\x1f\xc7\x23\xcd\x68\xa5\x1f\xe0\x8d\x4b\x51\x71\x87\x10\x5c\xa1\x45\x83\x5f\x9c\xf8\xd9\xf5\x5c\xca\x0f\x78\x37\xc2\x61\xbc\xa9\x8a\x10\x56\xbc\xda\x25\x28\xbb\xbb\xb9\xfd\xf9\xf6\xf6\xfe\xe6\xe8\x5a\x61\x85\xe5\xdc\x68\x25\xb9\x22\x65\x31\x09\xbf\x80\x42\xd6\x13\x6c\x94\xe2\x4a\x42\x39\x86\x45\xaa\xc3\xd9\x7c\x32\x3e\x16\xf9\xd3\xd5\x8d\x05\xa0\xda\xf8\x76\x23\xfb\x7f\xe5\x8c\xe2\x08\x3b\x2e\x34\x1d\x05\x23\xfd\x51\xaa\x31\x06\xff\x71\x86\x5b\xba\x9a\xef\xdf\xe1\xca\xe6\xbb\x2e\x0f\x1c\x46\xa2\x73\x05\x82\x0f\x9c\x60\x1d\x52\xc6\x3e\x67\xdd\x87\xf5\xe9\x0f\xc7\xf9\x29\xaf\xd1\x6a\x6d\x20\x23\x77\xfa\x4e\xdc\x94\x20\xe0\x97\x10\x59\x82\xd8\xef\x43\x76\x36\xa7\xdc\xd6\x1f\x32\x3c\x8a\x51\x78\xac\xdc\x1f\xe5\x73\xd6\x81\x7e\x0c\xc9\xf2\x32\x84\xe6\x43\x69\x11\xa6\x76\x3b\x6b\x65\xb5\xc4\xf0\xb5\xb8\x08\x6b\x85\x6a\xa6\x3b\xef\xb8\xe1\x17\x74\x68\x3c\x71\x2e\x1d\x1a\x45\x8d\xd8\xa0\xbe\xa0\x33\x1f\xe9\xd6\x8d\xa7\xbd\xfa\x5b\xe9\x77\x15\x0e\x43\xca\xcd\x31\xa3\xc5\x30\x8d\x5a\x88\x0f\x93\xff\xd3\xf5\xe4\x2f\x8e\x7b\x48\x8b\x06\xf5\xab\xd5\x2a\x5d\x36\x81\xd4\x4d\xbc\x04\x24\xbe\xa1\x3c\xc0\x05\xad\xe5\x0d\x7e\x5d\x05\xee\xa3\x43\x5d\x67\xf1\x88\x48\xdd\xe4\xf0\xed\x04\x3b\xfd\xf2\x8a\x67\xb7\xf3\x37\x11\x57\xe6\x0a\x93\x94\x05\x72\x5b\x3b\xe4\x0a\xb9\xa8\x04\x7d\x20\xcf\x6d\x36\x86\x1f\xc0\xc3\x11\xca\x30\x7e\xe9\x87\xd2\x3f\x92\x58\x35\xca\x7a\xb4\x0e\x39\x2d\xeb\x7f\x03\x00\x00\xff\xff\xc8\x9c\xb8\x00\x90\x08\x00\x00")
-
-func staticJavascriptWhosonfirstUriJsBytes() ([]byte, error) {
- return bindataRead(
- _staticJavascriptWhosonfirstUriJs,
- "static/javascript/whosonfirst.uri.js",
- )
-}
-
-func staticJavascriptWhosonfirstUriJs() (*asset, error) {
- bytes, err := staticJavascriptWhosonfirstUriJsBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "static/javascript/whosonfirst.uri.js", size: 2192, mode: os.FileMode(420), modTime: time.Unix(1538167397, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _staticCssWhosonfirstSpatialCss = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x44\xcb\xc1\x0a\xc2\x30\x0c\x06\xe0\x7b\x9e\xe2\x07\xf1\x38\xd9\xf0\x96\x3d\x4d\x47\x52\x16\x58\x1b\x69\x0a\x52\xc5\x77\x17\x51\xf0\xfc\xf1\x6d\x2e\x03\x4f\x02\x80\xec\xb5\x4f\x39\x15\x3b\x06\x23\x52\x8d\x29\xb4\x59\x5e\xff\x18\xf6\x50\xc6\x72\xb9\x6a\x59\xe9\x45\x74\x2a\xe9\xf6\xcb\x77\x93\xbe\x33\x96\x79\x3e\x7f\xc3\xe6\x4d\xb4\x31\xc2\x0f\x13\xf4\xdd\xea\xa7\xbc\x03\x00\x00\xff\xff\x45\xab\x3d\xf3\x6f\x00\x00\x00")
-
-func staticCssWhosonfirstSpatialCssBytes() ([]byte, error) {
- return bindataRead(
- _staticCssWhosonfirstSpatialCss,
- "static/css/whosonfirst.spatial.css",
- )
-}
-
-func staticCssWhosonfirstSpatialCss() (*asset, error) {
- bytes, err := staticCssWhosonfirstSpatialCssBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "static/css/whosonfirst.spatial.css", size: 111, mode: os.FileMode(420), modTime: time.Unix(1585768059, 0)}
- a := &asset{bytes: bytes, info: info}
- return a, nil
-}
-
-var _staticCssWhosonfirstSpatialPipCss = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x90\xd1\x4e\xc3\x30\x0c\x45\x9f\xdb\xaf\x08\xe2\x39\xd3\x10\x4c\x48\xe9\xd7\x98\xd6\x6b\x23\xd9\x71\xe4\x78\xdd\x06\xe2\xdf\x51\xab\x30\x18\x13\x7b\xbe\xe7\x9e\xc4\x37\xc1\xec\x3e\xda\x86\x41\xc7\x98\xbc\x49\x0e\x4f\x8a\xec\x1e\x22\x67\x51\x83\x64\x5d\x73\x49\xdf\xc4\x4c\xf8\x06\x68\x3f\xdb\x76\x40\x83\x48\xe5\x97\xaa\xc2\x6e\xa1\xaf\x90\x72\x60\x06\x3d\x2f\xe8\x5e\x92\xf9\x23\xc6\x71\xb2\xe0\x5e\xb7\xdb\x95\xdb\xf4\xa0\xc3\x3d\xd1\x63\xa1\x98\xf3\x99\x21\xfb\x5e\x44\x87\xf5\x55\xc3\x93\x79\xa0\x38\xa6\xe0\x7a\x4c\x86\xda\x55\x7f\x89\xef\x18\x0a\x03\x51\xf7\xed\x0c\x9b\xdd\x45\xc6\x90\x97\xfe\x54\x7f\xf1\xb2\x9b\xa7\xab\xe3\x1a\x86\x93\xff\x2f\x6d\x56\x45\x8e\xd9\x2b\x96\x03\x59\x1d\xe0\xa7\xf0\x7c\xa3\x93\x19\x75\x4f\x72\x0c\xae\xf4\x2a\x44\x7f\x96\xfc\x0a\x00\x00\xff\xff\xb7\xac\x85\x27\x90\x01\x00\x00")
-
-func staticCssWhosonfirstSpatialPipCssBytes() ([]byte, error) {
- return bindataRead(
- _staticCssWhosonfirstSpatialPipCss,
- "static/css/whosonfirst.spatial.pip.css",
- )
-}
-
-func staticCssWhosonfirstSpatialPipCss() (*asset, error) {
- bytes, err := staticCssWhosonfirstSpatialPipCssBytes()
- if err != nil {
- return nil, err
- }
-
- info := bindataFileInfo{name: "static/css/whosonfirst.spatial.pip.css", size: 400, mode: os.FileMode(420), modTime: time.Unix(1585954954, 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){
- "static/javascript/localforage.min.js": staticJavascriptLocalforageMinJs,
- "static/javascript/slippymap.crosshairs.js": staticJavascriptSlippymapCrosshairsJs,
- "static/javascript/whosonfirst.net.js": staticJavascriptWhosonfirstNetJs,
- "static/javascript/whosonfirst.spatial.api.js": staticJavascriptWhosonfirstSpatialApiJs,
- "static/javascript/whosonfirst.spatial.init.js": staticJavascriptWhosonfirstSpatialInitJs,
- "static/javascript/whosonfirst.spatial.maps.js": staticJavascriptWhosonfirstSpatialMapsJs,
- "static/javascript/whosonfirst.spatial.pip.init.js": staticJavascriptWhosonfirstSpatialPipInitJs,
- "static/javascript/whosonfirst.spatial.pip.js": staticJavascriptWhosonfirstSpatialPipJs,
- "static/javascript/whosonfirst.uri.js": staticJavascriptWhosonfirstUriJs,
- "static/css/whosonfirst.spatial.css": staticCssWhosonfirstSpatialCss,
- "static/css/whosonfirst.spatial.pip.css": staticCssWhosonfirstSpatialPipCss,
-}
-
-// 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{
- "static": &bintree{nil, map[string]*bintree{
- "css": &bintree{nil, map[string]*bintree{
- "whosonfirst.spatial.css": &bintree{staticCssWhosonfirstSpatialCss, map[string]*bintree{}},
- "whosonfirst.spatial.pip.css": &bintree{staticCssWhosonfirstSpatialPipCss, map[string]*bintree{}},
- }},
- "javascript": &bintree{nil, map[string]*bintree{
- "localforage.min.js": &bintree{staticJavascriptLocalforageMinJs, map[string]*bintree{}},
- "slippymap.crosshairs.js": &bintree{staticJavascriptSlippymapCrosshairsJs, map[string]*bintree{}},
- "whosonfirst.net.js": &bintree{staticJavascriptWhosonfirstNetJs, map[string]*bintree{}},
- "whosonfirst.spatial.api.js": &bintree{staticJavascriptWhosonfirstSpatialApiJs, map[string]*bintree{}},
- "whosonfirst.spatial.init.js": &bintree{staticJavascriptWhosonfirstSpatialInitJs, map[string]*bintree{}},
- "whosonfirst.spatial.maps.js": &bintree{staticJavascriptWhosonfirstSpatialMapsJs, map[string]*bintree{}},
- "whosonfirst.spatial.pip.init.js": &bintree{staticJavascriptWhosonfirstSpatialPipInitJs, map[string]*bintree{}},
- "whosonfirst.spatial.pip.js": &bintree{staticJavascriptWhosonfirstSpatialPipJs, map[string]*bintree{}},
- "whosonfirst.uri.js": &bintree{staticJavascriptWhosonfirstUriJs, 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, "/")...)...)
-}
-
-func assetFS() *assetfs.AssetFS {
- assetInfo := func(path string) (os.FileInfo, error) {
- return os.Stat(path)
- }
- for k := range _bintree.Children {
- return &assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: assetInfo, Prefix: k}
- }
- panic("unreachable")
-}
diff --git a/server/http.go b/server/http.go
deleted file mode 100644
index 731d27d..0000000
--- a/server/http.go
+++ /dev/null
@@ -1,31 +0,0 @@
-package server
-
-import (
- _ "log"
- "net/http"
- "net/url"
-)
-
-type HTTPServer struct {
- Server
- url *url.URL
-}
-
-func NewHTTPServer(u *url.URL, args ...interface{}) (Server, error) {
-
- u.Scheme = "http"
-
- server := HTTPServer{
- url: u,
- }
-
- return &server, nil
-}
-
-func (s *HTTPServer) Address() string {
- return s.url.String()
-}
-
-func (s *HTTPServer) ListenAndServe(mux *http.ServeMux) error {
- return http.ListenAndServe(s.url.Host, mux)
-}
diff --git a/server/lambda.go b/server/lambda.go
deleted file mode 100644
index 0faacfa..0000000
--- a/server/lambda.go
+++ /dev/null
@@ -1,38 +0,0 @@
-package server
-
-import (
- "github.com/whosonfirst/algnhsa"
- _ "log"
- "net/http"
- "net/url"
-)
-
-type LambdaServer struct {
- Server
- url *url.URL
-}
-
-func NewLambdaServer(u *url.URL, args ...interface{}) (Server, error) {
-
- server := LambdaServer{
- url: u,
- }
-
- return &server, nil
-}
-
-func (s *LambdaServer) Address() string {
- return s.url.String()
-}
-
-func (s *LambdaServer) ListenAndServe(mux *http.ServeMux) error {
-
- // this cr^H^H^H stuff is important (20180713/thisisaaronland)
- // go-rasterzen/README.md#lambda-api-gateway-and-images#lambda-api-gateway-and-images
-
- lambda_opts := new(algnhsa.Options)
- lambda_opts.BinaryContentTypes = []string{"application/zip"}
-
- algnhsa.ListenAndServe(mux, lambda_opts)
- return nil
-}
diff --git a/server/server.go b/server/server.go
deleted file mode 100644
index 6283778..0000000
--- a/server/server.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package server
-
-import (
- "errors"
- _ "log"
- "net/http"
- "net/url"
- "strings"
-)
-
-type Server interface {
- ListenAndServe(*http.ServeMux) error
- Address() string
-}
-
-func NewStaticServer(proto string, u *url.URL, args ...interface{}) (Server, error) {
-
- var svr Server
- var err error
-
- switch strings.ToUpper(proto) {
-
- case "HTTP":
-
- svr, err = NewHTTPServer(u, args...)
-
- case "LAMBDA":
-
- svr, err = NewLambdaServer(u, args...)
-
- default:
- return nil, errors.New("Invalid server protocol")
- }
-
- if err != nil {
- return nil, err
- }
-
- return svr, nil
-}
diff --git a/static/css/whosonfirst.spatial.css b/static/css/whosonfirst.spatial.css
deleted file mode 100644
index 95168d9..0000000
--- a/static/css/whosonfirst.spatial.css
+++ /dev/null
@@ -1,9 +0,0 @@
-body {
- font-family: sans-serif;
- font-size: 1.3em;
-}
-
-#map {
- width: 100%;
- border: solid thin;
-}
diff --git a/static/css/whosonfirst.spatial.pip.css b/static/css/whosonfirst.spatial.pip.css
deleted file mode 100644
index 919ecbd..0000000
--- a/static/css/whosonfirst.spatial.pip.css
+++ /dev/null
@@ -1,32 +0,0 @@
-nav {
- margin-top:1rem !important;
- margin-bottom:1rem !important;
-}
-
-details {
- margin-bottom: 1rem;
-}
-
-details summary {
- font-weight: 700;
-}
-
-.card {
- margin-bottom: 1rem;
-}
-
-#slippymap-coords {
- text-align: center;
- font-size:small;
- margin:.5rem;
-}
-
-#map {
- height: 45vh !important;
- max-height: 45vh !important;
-}
-
-#pip-results {
- max-height: 35vh !important;
- overflow: scroll !important;
-}
diff --git a/static/javascript/localforage.min.js b/static/javascript/localforage.min.js
deleted file mode 100644
index eb87534..0000000
--- a/static/javascript/localforage.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- localForage -- Offline Storage, Improved
- Version 1.7.3
- https://localforage.github.io/localForage
- (c) 2013-2017 Mozilla, Apache License 2.0
-*/
-!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.localforage=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g=43)}}).catch(function(){return!1})}function n(a){return"boolean"==typeof xa?va.resolve(xa):m(a).then(function(a){return xa=a})}function o(a){var b=ya[a.name],c={};c.promise=new va(function(a,b){c.resolve=a,c.reject=b}),b.deferredOperations.push(c),b.dbReady?b.dbReady=b.dbReady.then(function(){return c.promise}):b.dbReady=c.promise}function p(a){var b=ya[a.name],c=b.deferredOperations.pop();if(c)return c.resolve(),c.promise}function q(a,b){var c=ya[a.name],d=c.deferredOperations.pop();if(d)return d.reject(b),d.promise}function r(a,b){return new va(function(c,d){if(ya[a.name]=ya[a.name]||B(),a.db){if(!b)return c(a.db);o(a),a.db.close()}var e=[a.name];b&&e.push(a.version);var f=ua.open.apply(ua,e);b&&(f.onupgradeneeded=function(b){var c=f.result;try{c.createObjectStore(a.storeName),b.oldVersion<=1&&c.createObjectStore(wa)}catch(c){if("ConstraintError"!==c.name)throw c;console.warn('The database "'+a.name+'" has been upgraded from version '+b.oldVersion+" to version "+b.newVersion+', but the storage "'+a.storeName+'" already exists.')}}),f.onerror=function(a){a.preventDefault(),d(f.error)},f.onsuccess=function(){c(f.result),p(a)}})}function s(a){return r(a,!1)}function t(a){return r(a,!0)}function u(a,b){if(!a.db)return!0;var c=!a.db.objectStoreNames.contains(a.storeName),d=a.versiona.db.version;if(d&&(a.version!==b&&console.warn('The database "'+a.name+"\" can't be downgraded from version "+a.db.version+" to version "+a.version+"."),a.version=a.db.version),e||c){if(c){var f=a.db.version+1;f>a.version&&(a.version=f)}return!0}return!1}function v(a){return new va(function(b,c){var d=new FileReader;d.onerror=c,d.onloadend=function(c){var d=btoa(c.target.result||"");b({__local_forage_encoded_blob:!0,data:d,type:a.type})},d.readAsBinaryString(a)})}function w(a){return g([l(atob(a.data))],{type:a.type})}function x(a){return a&&a.__local_forage_encoded_blob}function y(a){var b=this,c=b._initReady().then(function(){var a=ya[b._dbInfo.name];if(a&&a.dbReady)return a.dbReady});return i(c,a,a),c}function z(a){o(a);for(var b=ya[a.name],c=b.forages,d=0;d0&&(!a.db||"InvalidStateError"===e.name||"NotFoundError"===e.name))return va.resolve().then(function(){if(!a.db||"NotFoundError"===e.name&&!a.db.objectStoreNames.contains(a.storeName)&&a.version<=a.db.version)return a.db&&(a.version=a.db.version+1),t(a)}).then(function(){return z(a).then(function(){A(a,b,c,d-1)})}).catch(c);c(e)}}function B(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function C(a){function b(){return va.resolve()}var c=this,d={db:null};if(a)for(var e in a)d[e]=a[e];var f=ya[d.name];f||(f=B(),ya[d.name]=f),f.forages.push(c),c._initReady||(c._initReady=c.ready,c.ready=y);for(var g=[],h=0;h>4,k[i++]=(15&d)<<4|e>>2,k[i++]=(3&e)<<6|63&f;return j}function O(a){var b,c=new Uint8Array(a),d="";for(b=0;b>2],d+=Da[(3&c[b])<<4|c[b+1]>>4],d+=Da[(15&c[b+1])<<2|c[b+2]>>6],d+=Da[63&c[b+2]];return c.length%3==2?d=d.substring(0,d.length-1)+"=":c.length%3==1&&(d=d.substring(0,d.length-2)+"=="),d}function P(a,b){var c="";if(a&&(c=Ua.call(a)),a&&("[object ArrayBuffer]"===c||a.buffer&&"[object ArrayBuffer]"===Ua.call(a.buffer))){var d,e=Ga;a instanceof ArrayBuffer?(d=a,e+=Ia):(d=a.buffer,"[object Int8Array]"===c?e+=Ka:"[object Uint8Array]"===c?e+=La:"[object Uint8ClampedArray]"===c?e+=Ma:"[object Int16Array]"===c?e+=Na:"[object Uint16Array]"===c?e+=Pa:"[object Int32Array]"===c?e+=Oa:"[object Uint32Array]"===c?e+=Qa:"[object Float32Array]"===c?e+=Ra:"[object Float64Array]"===c?e+=Sa:b(new Error("Failed to get type for BinaryArray"))),b(e+O(d))}else if("[object Blob]"===c){var f=new FileReader;f.onload=function(){var c=Ea+a.type+"~"+O(this.result);b(Ga+Ja+c)},f.readAsArrayBuffer(a)}else try{b(JSON.stringify(a))}catch(c){console.error("Couldn't convert value into a JSON string: ",a),b(null,c)}}function Q(a){if(a.substring(0,Ha)!==Ga)return JSON.parse(a);var b,c=a.substring(Ta),d=a.substring(Ha,Ta);if(d===Ja&&Fa.test(c)){var e=c.match(Fa);b=e[1],c=c.substring(e[0].length)}var f=N(c);switch(d){case Ia:return f;case Ja:return g([f],{type:b});case Ka:return new Int8Array(f);case La:return new Uint8Array(f);case Ma:return new Uint8ClampedArray(f);case Na:return new Int16Array(f);case Pa:return new Uint16Array(f);case Oa:return new Int32Array(f);case Qa:return new Uint32Array(f);case Ra:return new Float32Array(f);case Sa:return new Float64Array(f);default:throw new Error("Unkown type: "+d)}}function R(a,b,c,d){a.executeSql("CREATE TABLE IF NOT EXISTS "+b.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],c,d)}function S(a){var b=this,c={db:null};if(a)for(var d in a)c[d]="string"!=typeof a[d]?a[d].toString():a[d];var e=new va(function(a,d){try{c.db=openDatabase(c.name,String(c.version),c.description,c.size)}catch(a){return d(a)}c.db.transaction(function(e){R(e,c,function(){b._dbInfo=c,a()},function(a,b){d(b)})},d)});return c.serializer=Va,e}function T(a,b,c,d,e,f){a.executeSql(c,d,e,function(a,g){g.code===g.SYNTAX_ERR?a.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[b.storeName],function(a,h){h.rows.length?f(a,g):R(a,b,function(){a.executeSql(c,d,e,f)},f)},f):f(a,g)},f)}function U(a,b){var c=this;a=j(a);var d=new va(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){T(c,e,"SELECT * FROM "+e.storeName+" WHERE key = ? LIMIT 1",[a],function(a,c){var d=c.rows.length?c.rows.item(0).value:null;d&&(d=e.serializer.deserialize(d)),b(d)},function(a,b){d(b)})})}).catch(d)});return h(d,b),d}function V(a,b){var c=this,d=new va(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){T(c,e,"SELECT * FROM "+e.storeName,[],function(c,d){for(var f=d.rows,g=f.length,h=0;h0)return void f(W.apply(e,[a,h,c,d-1]));g(b)}})})}).catch(g)});return h(f,c),f}function X(a,b,c){return W.apply(this,[a,b,c,1])}function Y(a,b){var c=this;a=j(a);var d=new va(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){T(c,e,"DELETE FROM "+e.storeName+" WHERE key = ?",[a],function(){b()},function(a,b){d(b)})})}).catch(d)});return h(d,b),d}function Z(a){var b=this,c=new va(function(a,c){b.ready().then(function(){var d=b._dbInfo;d.db.transaction(function(b){T(b,d,"DELETE FROM "+d.storeName,[],function(){a()},function(a,b){c(b)})})}).catch(c)});return h(c,a),c}function $(a){var b=this,c=new va(function(a,c){b.ready().then(function(){var d=b._dbInfo;d.db.transaction(function(b){T(b,d,"SELECT COUNT(key) as c FROM "+d.storeName,[],function(b,c){var d=c.rows.item(0).c;a(d)},function(a,b){c(b)})})}).catch(c)});return h(c,a),c}function _(a,b){var c=this,d=new va(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){T(c,e,"SELECT key FROM "+e.storeName+" WHERE id = ? LIMIT 1",[a+1],function(a,c){var d=c.rows.length?c.rows.item(0).key:null;b(d)},function(a,b){d(b)})})}).catch(d)});return h(d,b),d}function aa(a){var b=this,c=new va(function(a,c){b.ready().then(function(){var d=b._dbInfo;d.db.transaction(function(b){T(b,d,"SELECT key FROM "+d.storeName,[],function(b,c){for(var d=[],e=0;e '__WebKitDatabaseInfoTable__'",[],function(c,d){for(var e=[],f=0;f0}function ha(a){var b=this,c={};if(a)for(var d in a)c[d]=a[d];return c.keyPrefix=ea(a,b._defaultConfig),ga()?(b._dbInfo=c,c.serializer=Va,va.resolve()):va.reject()}function ia(a){var b=this,c=b.ready().then(function(){for(var a=b._dbInfo.keyPrefix,c=localStorage.length-1;c>=0;c--){var d=localStorage.key(c);0===d.indexOf(a)&&localStorage.removeItem(d)}});return h(c,a),c}function ja(a,b){var c=this;a=j(a);var d=c.ready().then(function(){var b=c._dbInfo,d=localStorage.getItem(b.keyPrefix+a);return d&&(d=b.serializer.deserialize(d)),d});return h(d,b),d}function ka(a,b){var c=this,d=c.ready().then(function(){for(var b=c._dbInfo,d=b.keyPrefix,e=d.length,f=localStorage.length,g=1,h=0;h=0;b--){var c=localStorage.key(b);0===c.indexOf(a)&&localStorage.removeItem(c)}}):va.reject("Invalid arguments"),h(d,b),d}function ra(a,b){a[b]=function(){var c=arguments;return a.ready().then(function(){return a[b].apply(a,c)})}}function sa(){for(var a=1;a cache_ttl){
- self.cache_unset(key);
- on_miss();
- return;
- }
-
- on_hit(data);
- });
-
- return true;
- },
-
- 'cache_set': function(key, value){
-
- if (typeof(localforage) != 'object'){
- return false;
- }
-
- var dt = new Date();
- var ts = dt.getTime();
-
- var wrapper = {
- 'data': value,
- 'created': ts
- };
-
- key = self.cache_prep_key(key);
-
- localforage.setItem(key, wrapper);
- return true;
- },
-
- 'cache_unset': function(key){
-
- if (typeof(localforage) != 'object'){
- return false;
- }
-
- key = self.cache_prep_key(key);
-
- localforage.removeItem(key);
- return true;
- },
-
- 'cache_prep_key': function(key){
- return key + '#whosonfirst.net';
- },
-
- 'log': function(level, message){
-
- if (typeof(whosonfirst.log) != 'object'){
- console.log(level, message);
- return;
- }
-
- whosonfirst.log.dispatch(message, level);
- }
-
- };
-
- return self;
-
-})();
diff --git a/static/javascript/whosonfirst.spatial.api.js b/static/javascript/whosonfirst.spatial.api.js
deleted file mode 100644
index e066864..0000000
--- a/static/javascript/whosonfirst.spatial.api.js
+++ /dev/null
@@ -1,78 +0,0 @@
-var whosonfirst = whosonfirst || {};
-whosonfirst.spatial = whosonfirst.spatial || {};
-
-whosonfirst.spatial.api = (function(){
-
- var self = {
-
- 'point_in_polygon': function(args, on_success, on_error) {
-
- var qs = self.query_string(args);
-
- var rel_url = "/point-in-polygon?" + qs;
- return self.get(rel_url, on_success, on_error);
- },
-
- 'point_in_polygon_candidates': function(args, on_success, on_error) {
-
- var lat = args['latitude'];
- var lon = args['longitude'];
-
- var rel_url = "/point-in-polygon/candidates?latitude=" + lat + "&longitude=" + lon;
- return self.get(rel_url, on_success, on_error);
- },
-
- 'get': function(rel_url, on_success, on_error) {
-
- var abs_url = self.abs_url(rel_url);
-
- var req = new XMLHttpRequest();
-
- req.onload = function(){
-
- var rsp;
-
- try {
- rsp = JSON.parse(this.responseText);
- }
-
- catch (e){
- console.log("ERR", abs_url, e);
- on_error(e);
- return false;
- }
-
- on_success(rsp);
- };
-
- req.open("get", abs_url, true);
- req.send();
- },
-
- 'abs_url': function(rel_url) {
-
- return location.protocol + "//" + location.host + '/api' + rel_url; // READ ME FROM A DATA ATTRIBUTE...
- },
-
- 'query_string': function(args){
-
- var pairs = [];
-
- for (var k in args){
-
- var v = args[k];
-
- var enc_k = encodeURIComponent(k);
- var enc_v = encodeURIComponent(v);
-
- var pair = enc_k + "=" + enc_v;
- pairs.push(pair);
- }
-
- return pairs.join("&");
- },
- };
-
- return self;
-
-})();
diff --git a/static/javascript/whosonfirst.spatial.init.js b/static/javascript/whosonfirst.spatial.init.js
deleted file mode 100644
index 2ff4ca7..0000000
--- a/static/javascript/whosonfirst.spatial.init.js
+++ /dev/null
@@ -1,4 +0,0 @@
-window.addEventListener("load", function load(event){
- var endpoint = document.body.getAttribute("data-data-endpoint");
- whosonfirst.uri.endpoint(endpoint);
-});
diff --git a/static/javascript/whosonfirst.spatial.maps.js b/static/javascript/whosonfirst.spatial.maps.js
deleted file mode 100644
index fc4c8fe..0000000
--- a/static/javascript/whosonfirst.spatial.maps.js
+++ /dev/null
@@ -1,132 +0,0 @@
-var whosonfirst = whosonfirst || {};
-whosonfirst.spatial = whosonfirst.spatial || {};
-
-whosonfirst.spatial.maps = (function(){
-
- var attribution = 'Tangram | © OpenStreetMap contributors | Nextzen';
-
- var maps = {};
-
- var self = {
-
- 'parseHash': function(hash_str){
-
- if (hash_str.indexOf('#') === 0) {
- hash_str = hash_str.substr(1);
- }
-
- var lat;
- var lon;
- var zoom;
-
- var args = hash_str.split("/");
-
- if (args.length != 3){
- console.log("Unrecognized hash string");
- return null;
- }
-
- zoom = args[0];
- lat = args[1];
- lon = args[2];
-
- zoom = parseInt(zoom, 10);
- lat = parseFloat(lat);
- lon = parseFloat(lon);
-
- if (isNaN(zoom) || isNaN(lat) || isNaN(lon)) {
- console.log("Invalid zoom/lat/lon", zoom, lat, lon);
- return null;
- }
-
- var parsed = {
- 'latitude': lat,
- 'longitude': lon,
- 'zoom': zoom,
- };
-
- return parsed;
- },
-
- 'getMap': function(map_el, args){
-
- if (! args){
- args = {};
- }
-
- if (! args["api_key"]){
- return null;
- }
-
- var api_key = args["api_key"];
-
- var map_id = map_el.getAttribute("id");
-
- if (! map_id){
- return;
- }
-
- if (maps[map_id]){
- return maps[map_id];
- }
-
- var tangram_opts = self.getTangramOptions(args);
- var tangramLayer = Tangram.leafletLayer(tangram_opts);
-
- var map = L.map("map");
- tangramLayer.addTo(map);
-
- var attribution = self.getAttribution();
- map.attributionControl.addAttribution(attribution);
-
- return map;
- },
-
- 'getTangramOptions': function(args){
-
- if (! args){
- args = {};
- }
-
- if (! args["api_key"]){
- return null;
- }
-
- /*
- var sceneText = await fetch(new Request('https://somwehere.com/scene.zip', { headers: { 'Accept': 'application/zip' } })).then(r => r.text());
- var sceneURL = URL.createObjectURL(new Blob([sceneText]));
- scene.load(sceneURL, { base_path: 'https://somwehere.com/' });
- */
-
- var api_key = args["api_key"];
- var style_url = args["style_url"];
- var tile_url = args["tile_url"];
-
- var tangram_opts = {
- scene: {
- import: [
- style_url,
- ],
- sources: {
- mapzen: {
- url: tile_url,
- url_subdomains: ['a', 'b', 'c', 'd'],
- url_params: {api_key: api_key},
- tile_size: 512,
- max_zoom: 18
- }
- }
- }
- };
-
- return tangram_opts;
- },
-
- 'getAttribution': function(){
- return attribution;
- },
- };
-
- return self;
-
-})();
diff --git a/static/javascript/whosonfirst.spatial.pip.init.js b/static/javascript/whosonfirst.spatial.pip.init.js
deleted file mode 100644
index fde6742..0000000
--- a/static/javascript/whosonfirst.spatial.pip.init.js
+++ /dev/null
@@ -1,214 +0,0 @@
-window.addEventListener("load", function load(event){
-
- var api_key = document.body.getAttribute("data-nextzen-api-key");
- var style_url = document.body.getAttribute("data-nextzen-style-url");
- var tile_url = document.body.getAttribute("data-nextzen-tile-url");
-
- if (! api_key){
- console.log("Missing API key");
- return;
- }
-
- if (! style_url){
- console.log("Missing style URL");
- return;
- }
-
- if (! tile_url){
- console.log("Missing tile URL");
- return;
- }
-
- var pip_wrapper = document.getElementById("point-in-polygon");
-
- if (! pip_wrapper){
- console.log("Missing 'point-in-polygon' element.");
- return;
- }
-
- var init_lat = pip_wrapper.getAttribute("data-initial-latitude");
-
- if (! init_lat){
- console.log("Missing initial latitude");
- return;
- }
-
- var init_lon = pip_wrapper.getAttribute("data-initial-longitude");
-
- if (! init_lon){
- console.log("Missing initial longitude");
- return;
- }
-
- var init_zoom = pip_wrapper.getAttribute("data-initial-zoom");
-
- if (! init_zoom){
- console.log("Missing initial zoom");
- return;
- }
-
- var map_el = document.getElementById("map");
-
- if (! map_el){
- console.log("Missing map element");
- return;
- }
-
- var map_args = {
- "api_key": api_key,
- "style_url": style_url,
- "tile_url": tile_url,
- };
-
- // we need to do this _before_ Tangram starts trying to draw things
- // map_el.style.display = "block";
-
- var map = whosonfirst.spatial.maps.getMap(map_el, map_args);
-
- if (! map){
- console.log("Unable to instantiate map");
- return;
- }
-
- var hash = new L.Hash(map);
-
- var layers = L.layerGroup();
- layers.addTo(map);
-
- var update_map = function(e){
-
- var pos = map.getCenter();
-
- var args = {
- 'latitude': pos['lat'],
- 'longitude': pos['lng'],
- 'format': 'geojson',
- };
-
- var properties = [];
-
- var extra_properties = document.getElementById("extras");
-
- if (extra_properties){
-
- var extras = extra_properties.value;
-
- if (extras){
- properties = extras.split(",");
- args['properties'] = properties;
- }
- }
-
- var existential_filters = document.getElementsByClassName("point-in-polygon-filter-existential");
- var count_existential = existential_filters.length;
-
- for (var i=0; i < count_existential; i++){
-
- var el = existential_filters[i];
-
- if (! el.checked){
- continue;
- }
-
- var fl = el.value;
- args[fl] = 1;
- }
-
- var placetypes = [];
-
- var placetype_filters = document.getElementsByClassName("point-in-polygon-filter-placetype");
- var count_placetypes = placetype_filters.length;
-
- for (var i=0; i < count_placetypes; i++){
-
- var el = placetype_filters[i];
-
- if (! el.checked){
- continue;
- }
-
- var pt = el.value;
- placetypes.push(pt);
- }
-
- if (placetypes.length > 0){
- args['placetype'] = placetypes.join(",");
- }
-
- // console.log("ARGS", args);
-
- var on_success = function(rsp){
-
- layers.clearLayers();
-
- var l = L.geoJSON(rsp, {
- style: function(feature){
- return whosonfirst.spatial.pip.named_style("match");
- },
- });
-
- layers.addLayer(l);
- l.bringToFront();
-
- //
-
- var features = rsp["features"];
-
- var table_props = whosonfirst.spatial.pip.default_properties();
-
- var count_properties = properties.length;
-
- for (var i=0; i < count_properties; i++){
- table_props[properties[i]] = "";
- }
-
- var table = whosonfirst.spatial.pip.render_properties_table(features, table_props);
-
- var matches = document.getElementById("pip-matches");
- matches.innerHTML = "";
- matches.appendChild(table);
-
- };
-
- var on_error = function(err){
- console.log("SAD", err);
- }
-
- whosonfirst.spatial.api.point_in_polygon(args, on_success, on_error);
- };
-
- map.on("moveend", update_map);
-
- var filters = document.getElementsByClassName("point-in-polygon-filter");
- var count_filters = filters.length;
-
- for (var i=0; i < count_filters; i++){
- var el = filters[i];
- el.onchange = update_map;
- }
-
- var extras = document.getElementsByClassName("point-in-polygon-extra");
- var count_extras = extras.length;
-
- for (var i=0; i < count_extras; i++){
- var el = extras[i];
- el.onchange = update_map;
- }
-
- var hash_str = location.hash;
-
- if (hash_str){
-
- var parsed = whosonfirst.spatial.maps.parseHash(hash_str);
-
- if (parsed){
- init_lat = parsed['latitude'];
- init_lon = parsed['longitude'];
- init_zoom = parsed['zoom'];
- }
- }
-
- map.setView([init_lat, init_lon], init_zoom);
-
- slippymap.crosshairs.init(map);
-});
diff --git a/static/javascript/whosonfirst.spatial.pip.js b/static/javascript/whosonfirst.spatial.pip.js
deleted file mode 100644
index 0168ac3..0000000
--- a/static/javascript/whosonfirst.spatial.pip.js
+++ /dev/null
@@ -1,174 +0,0 @@
-var whosonfirst = whosonfirst || {};
-whosonfirst.spatial = whosonfirst.spatial || {};
-
-whosonfirst.spatial.pip = (function(){
-
- var styles = {
- "match": {
- "color": "#000",
- "weight": 1,
- "opacity": 1,
- "fillColor": "#00308F",
- "fillOpacity": 0.05
- }
- };
-
- var self = {
-
- 'named_style': function(name){
- return styles[name];
- },
-
- 'default_properties': function(){
-
- var props_table = {
- "wof:id":"",
- "wof:name":"",
- "wof:placetype":"",
- "wof:repo":"",
- };
-
- return props_table;
- },
-
- 'render_properties_table': function(features, props_table){
-
- if (! props_table){
- props_table = self.default_properties();
- }
-
- var count = features.length;
-
- var table = document.createElement("table");
- table.setAttribute("class", "table table-striped");
-
- for (var i=0; i < count; i++){
-
- var f = features[i];
- var props = f["properties"];
-
- // draw table header
-
- if (i % 10 == 0){
-
- var tr = document.createElement("tr");
-
- for (var k in props_table){
-
- if (self.is_wildcard(k)){
-
- for (prop_k in props){
-
- if (! prop_k.startsWith(k)){
- continue;
- }
-
- var v = prop_k;
-
- var th = document.createElement("th");
- th.appendChild(document.createTextNode(v));
- tr.appendChild(th);
- }
-
- } else {
-
- var v = k; // props_table[k]
- var th = document.createElement("th");
- th.appendChild(document.createTextNode(v));
- tr.appendChild(th);
- }
- }
-
- var thead = document.createElement("thead");
- thead.setAttribute("class", "thead-dark");
- thead.appendChild(tr);
- table.appendChild(thead);
- }
-
- var wof_id = props["wof:id"];
-
- var tr = document.createElement("tr");
- tr.setAttribute("id", "tr-" + wof_id);
-
- for (var k in props_table){
-
- if (self.is_wildcard(k)){
-
- for (prop_k in props){
-
- if (! prop_k.startsWith(k)){
- continue;
- }
-
- var v = props[prop_k];
- var node = self.render_value(v);
-
- var td = document.createElement("td");
-
- td.appendChild(node);
- tr.appendChild(td);
- }
-
- } else {
-
- var v = props[k];
- var node = self.render_value(v);
-
- var td = document.createElement("td");
-
- td.appendChild(node);
- tr.appendChild(td);
- }
-
- table.appendChild(tr);
- }
-
- }
-
- var wrapper = document.createElement("div");
- wrapper.setAttribute("class", "table-responsive");
-
- wrapper.appendChild(table);
- return wrapper;
- },
-
- 'is_wildcard': function(str) {
-
- if (str.endsWith(":")){
- return true;
- }
-
- if (str.endsWith("*")){
- return true;
- }
-
- return false;
- },
-
- 'render_value': function(v) {
-
- if (typeof(v) == "object"){
-
- var enc_v = JSON.stringify(v, null, 2);
- var pre = document.createElement("pre");
- pre.appendChild(document.createTextNode(enc_v));
-
- var summary = document.createElement("summary");
- summary.appendChild(document.createTextNode("details"));
-
- var details = document.createElement("details");
- details.appendChild(summary);
- details.appendChild(pre);
-
- return details;
- }
-
- else {
- return document.createTextNode(v);
- }
- },
- };
-
- return self;
-
-})();
diff --git a/static/javascript/whosonfirst.uri.js b/static/javascript/whosonfirst.uri.js
deleted file mode 100644
index d84b6cb..0000000
--- a/static/javascript/whosonfirst.uri.js
+++ /dev/null
@@ -1,117 +0,0 @@
-var whosonfirst = whosonfirst || {};
-
-whosonfirst.uri = (function(){
-
- var _endpoint = "https://data.whosonfirst.org/";
-
- var self = {
-
- 'endpoint': function(e){
-
- if (e){
- self.log("info","set uri endpoint to " + e);
- _endpoint = e;
- }
-
- return _endpoint;
- },
-
- 'id2abspath': function (id, args){
-
- var rel_path = self.id2relpath(id, args);
- var abs_path = self.endpoint() + rel_path;
-
- return abs_path;
- },
-
- 'id2relpath': function(id, args){
-
- parent = self.id2parent(id);
- fname = self.id2fname(id, args);
-
- var rel_path = parent + "/" + fname;
- return rel_path;
- },
-
- 'id2parent': function(id){
-
- str_id = new String(id);
- tmp = new Array();
-
- while (str_id.length){
-
- var part = str_id.substr(0, 3);
- tmp.push(part);
- str_id = str_id.substr(3);
- }
-
- parent = tmp.join("/");
- return parent;
- },
-
- 'id2fname': function(id, args){
-
- if (! args){
- args = {};
- }
-
- var fname = [
- encodeURIComponent(id)
- ];
-
- if (args["alt"]) {
- fname.push('alt');
-
- if (args["source"]){
-
- // to do: validate source here
- // to do: actually write whosonfirst.source.js
- // (20161130/thisisaaronland)
-
- var source = encodeURIComponent(args["source"]);
- fname.push(source);
-
- if (args["function"]){
-
- var func = encodeURIComponent(args["function"]);
- fname.push(func);
-
- if ((args["extras"]) && (args["extras"].join)){
-
- var extras = args["extras"];
- var count = extras.length;
-
- for (var i = 0; i < count; i++){
- var extra = encodeURIComponent(extras[i]);
- fname.push(extra);
- }
- }
- }
- }
-
- else {
- console.log("missing source parameter for alternate geometry");
- fname.push("unknown");
- }
-
- }
-
- var str_fname = fname.join("-");
- return str_fname + ".geojson";
- },
-
- 'log': function(level, message){
-
- if (typeof(whosonfirst.log) != 'object'){
- console.log(level, message);
- return;
- }
-
- whosonfirst.log.dispatch(message, level);
- }
-
- };
-
- return self;
-
-})();
diff --git a/templates/html/inc_foot.html b/templates/html/inc_foot.html
deleted file mode 100644
index 9685221..0000000
--- a/templates/html/inc_foot.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{{define "inc_foot"}}
-
-