Merge pull request #1 from sentriz/features/transcoding_update

features/transcoding update
This commit is contained in:
Serge Tkatchouk
2020-03-12 20:51:07 +08:00
committed by GitHub
20 changed files with 929 additions and 610 deletions

View File

@@ -12,7 +12,7 @@
- multiple users - multiple users
- a web interface for configuration (set up last.fm, manage users, start scans, etc.) - a web interface for configuration (set up last.fm, manage users, start scans, etc.)
- newer salt and token auth - newer salt and token auth
- tested on [dsub](https://f-droid.org/en/packages/github.daneren2005.dsub/), [jamstash](http://jamstash.com/), and [sublime music](https://gitlab.com/sumner/sublime-music/) - tested on [dsub](https://f-droid.org/en/packages/github.daneren2005.dsub/), [jamstash](http://jamstash.com/), [sublime music](https://gitlab.com/sumner/sublime-music/), and [soundwaves](https://apps.apple.com/us/app/soundwaves/id736139596)
## installation ## installation
@@ -57,6 +57,7 @@ then start with `docker-compose up -d`
|env var|command line arg|description| |env var|command line arg|description|
|---|---|---| |---|---|---|
|`GONIC_MUSIC_PATH`|`-music-path`|path to your music collection| |`GONIC_MUSIC_PATH`|`-music-path`|path to your music collection|
|`GONIC_CACHE_PATH`|`-cache-path`|**optional** path to store audio transcodes (*default* `/tmp/gonic_cache`)|
|`GONIC_DB_PATH`|`-db-path`|**optional** path to database file| |`GONIC_DB_PATH`|`-db-path`|**optional** path to database file|
|`GONIC_LISTEN_ADDR`|`-listen-addr`|**optional** host and port to listen on (eg. `0.0.0.0:4747`, `127.0.0.1:4747`) (*default* `0.0.0.0:4747`)| |`GONIC_LISTEN_ADDR`|`-listen-addr`|**optional** host and port to listen on (eg. `0.0.0.0:4747`, `127.0.0.1:4747`) (*default* `0.0.0.0:4747`)|
|`GONIC_PROXY_PREFIX`|`-proxy-prefix`|**optional** url path prefix to use if behind reverse proxy. eg `/gonic` (see example configs below)| |`GONIC_PROXY_PREFIX`|`-proxy-prefix`|**optional** url path prefix to use if behind reverse proxy. eg `/gonic` (see example configs below)|

View File

@@ -6,4 +6,4 @@ if ! command -v 'entr' > /dev/null; then
exit 1 exit 1
fi fi
find assets/ | entr -r ./_do_run_server $@ find assets/ -not -name '*_gen.go' | entr -r ./_do_run_server $@

View File

@@ -62,7 +62,7 @@ var Bytes = map[string]*EmbeddedAsset{
0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a, 0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,
}}, }},
"pages/home.tmpl": &EmbeddedAsset{ "pages/home.tmpl": &EmbeddedAsset{
ModTime: time.Unix(1582430789, 0), ModTime: time.Unix(1584016057, 0),
Bytes: []byte{ Bytes: []byte{
0x7b,0x7b,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x22,0x75,0x73,0x65,0x72,0x22,0x20,0x7d,0x7d,0x0a,0x3c,0x64,0x69,0x76, 0x7b,0x7b,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x22,0x75,0x73,0x65,0x72,0x22,0x20,0x7d,0x7d,0x0a,0x3c,0x64,0x69,0x76,
0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x62,0x6f,0x78,0x22,0x3e,0x0a,0x20,0x20,0x20, 0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x62,0x6f,0x78,0x22,0x3e,0x0a,0x20,0x20,0x20,
@@ -92,194 +92,277 @@ var Bytes = map[string]*EmbeddedAsset{
0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x6c,0x61,0x73,0x74,0x66,0x6d,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x6c,0x61, 0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x6c,0x61,0x73,0x74,0x66,0x6d,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x6c,0x61,
0x73,0x74,0x2e,0x66,0x6d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69, 0x73,0x74,0x2e,0x66,0x6d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,
0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20, 0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x2e,0x55,0x73,0x65,0x72,0x2e,0x49,0x73,0x41,0x64,0x6d,0x69, 0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x2e,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4c,0x61,0x73,0x74,
0x6e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x20,0x63,0x6c,0x61,0x73, 0x46,0x4d,0x41,0x50,0x49,0x4b,0x65,0x79,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x79,0x6f,0x75,0x20,0x63,0x61,0x6e,0x20,0x67,0x65,0x74,0x20,0x61,0x6e, 0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x63,0x75,0x72,0x72,
0x20,0x61,0x70,0x69,0x20,0x6b,0x65,0x79,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x73,0x3a, 0x65,0x6e,0x74,0x20,0x73,0x74,0x61,0x74,0x75,0x73,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x2f,0x2f,0x77,0x77,0x77,0x2e,0x6c,0x61,0x73,0x74,0x2e,0x66,0x6d,0x2f,0x61,0x70,0x69,0x2f,0x61,0x63,0x63,0x6f,0x75,0x6e, 0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x2e,0x55,0x73,0x65,0x72,0x2e,0x4c,0x61,0x73,0x74,0x46,0x4d,
0x74,0x2f,0x63,0x72,0x65,0x61,0x74,0x65,0x22,0x20,0x74,0x61,0x72,0x67,0x65,0x74,0x3d,0x22,0x5f,0x62,0x6c,0x61,0x6e,0x6b, 0x53,0x65,0x73,0x73,0x69,0x6f,0x6e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x22,0x3e,0x68,0x65,0x72,0x65,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x6c,0x69,0x6e,0x6b,0x65,0x64,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64, 0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x26,0x23,
0x6d,0x69,0x6e,0x2f,0x75,0x70,0x64,0x61,0x74,0x65,0x5f,0x6c,0x61,0x73,0x74,0x66,0x6d,0x5f,0x61,0x70,0x69,0x5f,0x6b,0x65, 0x31,0x32,0x34,0x3b,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x79,0x22,0x20,0x7d,0x7d,0x22,0x3e,0x75,0x70,0x64,0x61,0x74,0x65,0x20,0x61,0x70,0x69,0x20,0x6b,0x65,0x79,0x3c,0x2f,0x61, 0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,
0x3e,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d, 0x64,0x6d,0x69,0x6e,0x2f,0x75,0x6e,0x6c,0x69,0x6e,0x6b,0x5f,0x6c,0x61,0x73,0x74,0x66,0x6d,0x5f,0x64,0x6f,0x22,0x20,0x7d,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x2e,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4c, 0x7d,0x22,0x3e,0x75,0x6e,0x6c,0x69,0x6e,0x6b,0x3c,0x2f,0x61,0x3e,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x61,0x73,0x74,0x46,0x4d,0x41,0x50,0x49,0x4b,0x65,0x79,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6c,0x73,0x65,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x63, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x61,
0x75,0x72,0x72,0x65,0x6e,0x74,0x20,0x73,0x74,0x61,0x74,0x75,0x73,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20, 0x6e,0x67,0x72,0x79,0x22,0x3e,0x75,0x6e,0x6c,0x69,0x6e,0x6b,0x65,0x64,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x2e,0x55,0x73,0x65,0x72,0x2e,0x4c,0x61,0x73, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x24,0x63,0x62,0x50,0x61,0x74,0x68,
0x74,0x46,0x4d,0x53,0x65,0x73,0x73,0x69,0x6f,0x6e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x3a,0x3d,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x6c,0x69,0x6e,0x6b,0x5f,0x6c,0x61,
0x20,0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x6e,0x6b,0x65,0x64,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x73,0x74,0x66,0x6d,0x5f,0x64,0x6f,0x22,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22, 0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x24,0x63,0x62,0x55,0x52,0x4c,0x20,0x3a,0x3d,0x20,0x70,0x72,0x69,0x6e,0x74,0x66,0x20,
0x3e,0x26,0x23,0x31,0x32,0x34,0x3b,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x22,0x25,0x73,0x25,0x73,0x22,0x20,0x2e,0x52,0x65,0x71,0x75,0x65,0x73,0x74,0x52,0x6f,0x6f,0x74,0x20,0x24,0x63,0x62,0x50,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20, 0x61,0x74,0x68,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x75,0x6e,0x6c,0x69,0x6e,0x6b,0x5f,0x6c,0x61,0x73,0x74,0x66,0x6d,0x5f,0x64,0x6f, 0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x6c,0x61,0x73,0x74,
0x22,0x20,0x7d,0x7d,0x22,0x3e,0x75,0x6e,0x6c,0x69,0x6e,0x6b,0x3c,0x2f,0x61,0x3e,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20, 0x2e,0x66,0x6d,0x2f,0x61,0x70,0x69,0x2f,0x61,0x75,0x74,0x68,0x2f,0x3f,0x61,0x70,0x69,0x5f,0x6b,0x65,0x79,0x3d,0x7b,0x7b,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6c,0x73,0x65,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20, 0x20,0x2e,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4c,0x61,0x73,0x74,0x46,0x4d,0x41,0x50,0x49,0x4b,0x65,0x79,0x20,0x7d,0x7d,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73, 0x26,0x63,0x62,0x3d,0x7b,0x7b,0x20,0x24,0x63,0x62,0x55,0x52,0x4c,0x20,0x7d,0x7d,0x22,0x3e,0x6c,0x69,0x6e,0x6b,0x3c,0x2f,
0x3d,0x22,0x61,0x6e,0x67,0x72,0x79,0x22,0x3e,0x75,0x6e,0x6c,0x69,0x6e,0x6b,0x65,0x64,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e, 0x61,0x3e,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,
0x0a,0x09,0x09,0x7b,0x7b,0x20,0x24,0x63,0x62,0x50,0x61,0x74,0x68,0x20,0x3a,0x3d,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f, 0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6c,0x73,0x65,0x20,0x7d,0x7d,
0x61,0x64,0x6d,0x69,0x6e,0x2f,0x6c,0x69,0x6e,0x6b,0x5f,0x6c,0x61,0x73,0x74,0x66,0x6d,0x5f,0x64,0x6f,0x22,0x20,0x7d,0x7d, 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,
0x0a,0x09,0x09,0x7b,0x7b,0x20,0x24,0x63,0x62,0x55,0x52,0x4c,0x20,0x3a,0x3d,0x20,0x70,0x72,0x69,0x6e,0x74,0x66,0x20,0x22, 0x69,0x67,0x68,0x74,0x22,0x3e,0x61,0x70,0x69,0x20,0x6b,0x65,0x79,0x20,0x6e,0x6f,0x74,0x20,0x73,0x65,0x74,0x3c,0x2f,0x70,
0x25,0x73,0x25,0x73,0x22,0x20,0x2e,0x52,0x65,0x71,0x75,0x65,0x73,0x74,0x52,0x6f,0x6f,0x74,0x20,0x24,0x63,0x62,0x50,0x61, 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x6e,0x6f,0x74,0x20,
0x74,0x68,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61, 0x2e,0x55,0x73,0x65,0x72,0x2e,0x49,0x73,0x41,0x64,0x6d,0x69,0x6e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x6c,0x61,0x73,0x74,0x2e, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,
0x66,0x6d,0x2f,0x61,0x70,0x69,0x2f,0x61,0x75,0x74,0x68,0x2f,0x3f,0x61,0x70,0x69,0x5f,0x6b,0x65,0x79,0x3d,0x7b,0x7b,0x20, 0x22,0x3e,0x70,0x6c,0x65,0x61,0x73,0x65,0x20,0x61,0x73,0x6b,0x20,0x79,0x6f,0x75,0x72,0x20,0x61,0x64,0x6d,0x69,0x6e,0x20,
0x2e,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4c,0x61,0x73,0x74,0x46,0x4d,0x41,0x50,0x49,0x4b,0x65,0x79,0x20,0x7d,0x7d,0x26, 0x74,0x6f,0x20,0x73,0x65,0x74,0x20,0x69,0x74,0x3c,0x2f,0x70,0x3e,0x0a,0x09,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,
0x63,0x62,0x3d,0x7b,0x7b,0x20,0x24,0x63,0x62,0x55,0x52,0x4c,0x20,0x7d,0x7d,0x22,0x3e,0x6c,0x69,0x6e,0x6b,0x3c,0x2f,0x61, 0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,
0x3e,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x2e,0x55,0x73,0x65,0x72,0x2e,0x49,0x73,0x41,0x64,0x6d,
0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x20, 0x69,0x6e,0x20,0x7d,0x7d,0x0a,0x09,0x20,0x20,0x20,0x20,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x6e,0x6f,0x74,0x20,0x2e,0x55,0x73,0x65,0x72,0x2e,0x49,0x73,0x41,0x64,0x6d,0x69,0x6e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69, 0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x75,0x70,0x64,0x61,0x74,0x65,0x5f,0x6c,0x61,0x73,0x74,0x66,0x6d,0x5f,0x61,
0x67,0x68,0x74,0x22,0x3e,0x61,0x70,0x69,0x20,0x6b,0x65,0x79,0x20,0x6e,0x6f,0x74,0x20,0x73,0x65,0x74,0x2e,0x20,0x70,0x6c, 0x70,0x69,0x5f,0x6b,0x65,0x79,0x22,0x20,0x7d,0x7d,0x22,0x3e,0x75,0x70,0x64,0x61,0x74,0x65,0x20,0x61,0x70,0x69,0x20,0x6b,
0x65,0x61,0x73,0x65,0x20,0x61,0x73,0x6b,0x20,0x79,0x6f,0x75,0x72,0x20,0x61,0x64,0x6d,0x69,0x6e,0x20,0x74,0x6f,0x20,0x73, 0x65,0x79,0x26,0x23,0x38,0x32,0x33,0x30,0x3b,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x65,0x74,0x20,0x69,0x74,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20, 0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,
0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x2f,0x64,0x69,0x76,0x3e, 0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,
0x0a,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x62,0x6f,0x78,0x22, 0x20,0x62,0x6f,0x78,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x2e,0x55,0x73,0x65,0x72,0x2e,0x49,
0x3e,0x0a,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x2e,0x55,0x73,0x65,0x72,0x2e,0x49,0x73,0x41,0x64,0x6d,0x69, 0x73,0x41,0x64,0x6d,0x69,0x6e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x2f,0x2a,0x20,0x61,
0x6e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x2f,0x2a,0x20,0x61,0x64,0x6d,0x69,0x6e,0x20, 0x64,0x6d,0x69,0x6e,0x20,0x70,0x61,0x6e,0x65,0x6c,0x20,0x74,0x6f,0x20,0x6d,0x61,0x6e,0x61,0x67,0x65,0x20,0x61,0x6c,0x6c,
0x70,0x61,0x6e,0x65,0x6c,0x20,0x74,0x6f,0x20,0x6d,0x61,0x6e,0x61,0x67,0x65,0x20,0x61,0x6c,0x6c,0x20,0x75,0x73,0x65,0x72, 0x20,0x75,0x73,0x65,0x72,0x73,0x20,0x2a,0x2f,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,
0x73,0x20,0x2a,0x2f,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73, 0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,
0x73,0x3d,0x22,0x62,0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,
0x20,0x20,0x20,0x3c,0x69,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x61,0x63,0x63, 0x69,0x2d,0x61,0x63,0x63,0x6f,0x75,0x6e,0x74,0x2d,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x22,0x3e,0x3c,0x2f,0x69,0x3e,
0x6f,0x75,0x6e,0x74,0x2d,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x75,0x73,0x65,0x72, 0x20,0x75,0x73,0x65,0x72,0x73,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,
0x73,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,
0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22, 0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,
0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,0x24,0x75,0x73,0x65,0x72, 0x24,0x75,0x73,0x65,0x72,0x20,0x3a,0x3d,0x20,0x2e,0x41,0x6c,0x6c,0x55,0x73,0x65,0x72,0x73,0x20,0x7d,0x7d,0x0a,0x20,0x20,
0x20,0x3a,0x3d,0x20,0x2e,0x41,0x6c,0x6c,0x55,0x73,0x65,0x72,0x73,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x3e,0x7b,0x7b,0x20,0x24,0x75,0x73,0x65,0x72,0x2e,0x4e,0x61,
0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x3e,0x7b,0x7b,0x20,0x24,0x75,0x73,0x65,0x72,0x2e,0x4e,0x61,0x6d,0x65,0x20,0x7d,0x7d, 0x6d,0x65,0x20,0x7d,0x7d,0x3c,0x2f,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,
0x3c,0x2f,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63, 0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x20,0x6e,0x6f,0x2d,0x73,0x6d,0x61,0x6c,
0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x20,0x6e,0x6f,0x2d,0x73,0x6d,0x61,0x6c,0x6c,0x22,0x3e,0x7b,0x7b, 0x6c,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x75,0x73,0x65,0x72,0x2e,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x41,0x74,0x20,0x7c,0x20,
0x20,0x24,0x75,0x73,0x65,0x72,0x2e,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x41,0x74,0x20,0x7c,0x20,0x64,0x61,0x74,0x65,0x20, 0x64,0x61,0x74,0x65,0x20,0x7d,0x7d,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x7d,0x7d,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73, 0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x26,
0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x26,0x23,0x31,0x32,0x34,0x3b, 0x23,0x31,0x32,0x34,0x3b,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68, 0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x72,0x69,0x6e,0x74,0x66,0x20,0x22,0x2f,0x61,0x64,
0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x72,0x69,0x6e,0x74,0x66,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x63, 0x6d,0x69,0x6e,0x2f,0x63,0x68,0x61,0x6e,0x67,0x65,0x5f,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x3f,0x75,0x73,0x65,0x72,
0x68,0x61,0x6e,0x67,0x65,0x5f,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x3f,0x75,0x73,0x65,0x72,0x3d,0x25,0x73,0x22,0x20, 0x3d,0x25,0x73,0x22,0x20,0x24,0x75,0x73,0x65,0x72,0x2e,0x4e,0x61,0x6d,0x65,0x20,0x7c,0x20,0x70,0x61,0x74,0x68,0x20,0x7d,
0x24,0x75,0x73,0x65,0x72,0x2e,0x4e,0x61,0x6d,0x65,0x20,0x7c,0x20,0x70,0x61,0x74,0x68,0x20,0x7d,0x7d,0x22,0x3e,0x63,0x68, 0x7d,0x22,0x3e,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x26,0x23,0x38,0x32,0x33,0x30,
0x61,0x6e,0x67,0x65,0x20,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, 0x3b,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74, 0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x26,0x23,0x31,0x32,0x34,0x3b,0x3c,0x2f,0x73,0x70,
0x22,0x3e,0x26,0x23,0x31,0x32,0x34,0x3b,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x24,0x75,
0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x72,0x69,0x6e,0x74,0x66,0x20,0x22, 0x73,0x65,0x72,0x2e,0x49,0x73,0x41,0x64,0x6d,0x69,0x6e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x64,0x65,0x6c,0x65,0x74,0x65,0x5f,0x75,0x73,0x65,0x72,0x3f,0x75,0x73,0x65,0x72,0x3d, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,
0x25,0x73,0x22,0x20,0x24,0x75,0x73,0x65,0x72,0x2e,0x4e,0x61,0x6d,0x65,0x20,0x7c,0x20,0x70,0x61,0x74,0x68,0x20,0x7d,0x7d, 0x74,0x22,0x3e,0x64,0x65,0x6c,0x65,0x74,0x65,0x26,0x23,0x38,0x32,0x33,0x30,0x3b,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,
0x22,0x3e,0x64,0x65,0x6c,0x65,0x74,0x65,0x3c,0x2f,0x61,0x3e,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6c,0x73,0x65,0x20,0x7d,0x7d,0x0a,0x20,
0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,
0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x63,0x72,0x65, 0x7b,0x7b,0x20,0x70,0x72,0x69,0x6e,0x74,0x66,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x64,0x65,0x6c,0x65,0x74,0x65,
0x61,0x74,0x65,0x5f,0x75,0x73,0x65,0x72,0x22,0x20,0x7d,0x7d,0x22,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x75,0x74, 0x5f,0x75,0x73,0x65,0x72,0x3f,0x75,0x73,0x65,0x72,0x3d,0x25,0x73,0x22,0x20,0x24,0x75,0x73,0x65,0x72,0x2e,0x4e,0x61,0x6d,
0x74,0x6f,0x6e,0x22,0x3e,0x63,0x72,0x65,0x61,0x74,0x65,0x20,0x6e,0x65,0x77,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20, 0x65,0x20,0x7c,0x20,0x70,0x61,0x74,0x68,0x20,0x7d,0x7d,0x22,0x3e,0x64,0x65,0x6c,0x65,0x74,0x65,0x26,0x23,0x38,0x32,0x33,
0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6c,0x73,0x65,0x20,0x7d, 0x30,0x3b,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,
0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x2f,0x2a,0x20,0x75,0x73,0x65,0x72,0x20,0x70,0x61,0x6e,0x65, 0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,
0x6c,0x20,0x74,0x6f,0x20,0x6d,0x61,0x6e,0x61,0x67,0x65,0x20,0x74,0x68,0x65,0x6d,0x73,0x65,0x6c,0x76,0x65,0x73,0x20,0x2a, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x2f,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22, 0x20,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,
0x62,0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x63,0x72,0x65,0x61,0x74,0x65,0x5f,0x75,
0x3c,0x69,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x61,0x63,0x63,0x6f,0x75,0x6e, 0x73,0x65,0x72,0x22,0x20,0x7d,0x7d,0x22,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,0x22,0x3e,
0x74,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x79,0x6f,0x75,0x72,0x20,0x61,0x63,0x63,0x6f,0x75,0x6e,0x74,0x0a,0x20,0x20,0x20, 0x63,0x72,0x65,0x61,0x74,0x65,0x20,0x6e,0x65,0x77,0x26,0x23,0x38,0x32,0x33,0x30,0x3b,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76, 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6c,0x73,0x65,
0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20, 0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x2f,0x2a,0x20,0x75,0x73,0x65,0x72,0x20,0x70,0x61,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74, 0x6e,0x65,0x6c,0x20,0x74,0x6f,0x20,0x6d,0x61,0x6e,0x61,0x67,0x65,0x20,0x74,0x68,0x65,0x6d,0x73,0x65,0x6c,0x76,0x65,0x73,
0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x63,0x68,0x61,0x6e,0x67,0x65,0x5f,0x6f,0x77,0x6e,0x5f,0x70,0x61,0x73, 0x20,0x2a,0x2f,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,
0x73,0x77,0x6f,0x72,0x64,0x22,0x20,0x7d,0x7d,0x22,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e, 0x3d,0x22,0x62,0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x22,0x3e,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20, 0x20,0x20,0x3c,0x69,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x61,0x63,0x63,0x6f,
0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20, 0x75,0x6e,0x74,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x79,0x6f,0x75,0x72,0x20,0x61,0x63,0x63,0x6f,0x75,0x6e,0x74,0x0a,0x20,
0x7d,0x7d,0x0a,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,
0x64,0x64,0x65,0x64,0x20,0x62,0x6f,0x78,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73, 0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,
0x73,0x3d,0x22,0x62,0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,
0x69,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x66,0x6f,0x6c,0x64,0x65,0x72,0x2d, 0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x63,0x68,0x61,0x6e,0x67,0x65,0x5f,0x6f,0x77,0x6e,0x5f,0x70,
0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x72,0x65,0x63,0x65,0x6e,0x74,0x20,0x66,0x6f, 0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x22,0x20,0x7d,0x7d,0x22,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x75,0x74,0x74,
0x6c,0x64,0x65,0x72,0x73,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69, 0x6f,0x6e,0x22,0x3e,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x26,0x23,0x38,0x32,0x33,
0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x6c,0x6f,0x63,0x6b,0x2d,0x72,0x69,0x67,0x68,0x74,0x20,0x74,0x65,0x78, 0x30,0x3b,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,
0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20, 0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x64,0x69,0x76,0x20,
0x65,0x71,0x20,0x28,0x6c,0x65,0x6e,0x20,0x2e,0x52,0x65,0x63,0x65,0x6e,0x74,0x46,0x6f,0x6c,0x64,0x65,0x72,0x73,0x29,0x20, 0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x62,0x6f,0x78,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,
0x30,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63, 0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x0a,
0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x6e,0x6f,0x20,0x66,0x6f,0x6c,0x64,0x65,0x72,0x73,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,
0x79,0x65,0x74,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e, 0x69,0x2d,0x66,0x6f,0x6c,0x64,0x65,0x72,0x2d,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,
0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x61,0x62,0x6c,0x65,0x20,0x69,0x64,0x3d,0x22, 0x72,0x65,0x63,0x65,0x6e,0x74,0x20,0x66,0x6f,0x6c,0x64,0x65,0x72,0x73,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,
0x72,0x65,0x63,0x65,0x6e,0x74,0x2d,0x66,0x6f,0x6c,0x64,0x65,0x72,0x73,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x6c,0x6f,0x63,0x6b,0x2d,
0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,0x24,0x66,0x6f,0x6c,0x64,0x65,0x72,0x20,0x3a,0x3d,0x20,0x2e,0x52,0x65, 0x72,0x69,0x67,0x68,0x74,0x20,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x63,0x65,0x6e,0x74,0x46,0x6f,0x6c,0x64,0x65,0x72,0x73,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x65,0x71,0x20,0x28,0x6c,0x65,0x6e,0x20,0x2e,0x52,0x65,0x63,0x65,0x6e,0x74,
0x20,0x20,0x20,0x3c,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x20, 0x46,0x6f,0x6c,0x64,0x65,0x72,0x73,0x29,0x20,0x30,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x66, 0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x6e,0x6f,
0x6f,0x6c,0x64,0x65,0x72,0x2e,0x52,0x69,0x67,0x68,0x74,0x50,0x61,0x74,0x68,0x20,0x7d,0x7d,0x3c,0x2f,0x74,0x64,0x3e,0x0a, 0x20,0x66,0x6f,0x6c,0x64,0x65,0x72,0x73,0x20,0x79,0x65,0x74,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6e, 0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,
0x6f,0x2d,0x73,0x6d,0x61,0x6c,0x6c,0x22,0x3e,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69, 0x61,0x62,0x6c,0x65,0x20,0x69,0x64,0x3d,0x22,0x72,0x65,0x63,0x65,0x6e,0x74,0x2d,0x66,0x6f,0x6c,0x64,0x65,0x72,0x73,0x22,
0x67,0x68,0x74,0x22,0x20,0x74,0x69,0x74,0x6c,0x65,0x3d,0x22,0x7b,0x7b,0x20,0x24,0x66,0x6f,0x6c,0x64,0x65,0x72,0x2e,0x4d, 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,0x24,0x66,0x6f,0x6c,0x64,
0x6f,0x64,0x69,0x66,0x69,0x65,0x64,0x41,0x74,0x20,0x7d,0x7d,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x66,0x6f,0x6c,0x64,0x65,0x72, 0x65,0x72,0x20,0x3a,0x3d,0x20,0x2e,0x52,0x65,0x63,0x65,0x6e,0x74,0x46,0x6f,0x6c,0x64,0x65,0x72,0x73,0x20,0x7d,0x7d,0x0a,
0x2e,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x64,0x41,0x74,0x20,0x7c,0x20,0x64,0x61,0x74,0x65,0x48,0x75,0x6d,0x61,0x6e,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x7d,0x7d,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,
0x20,0x20,0x20,0x3c,0x2f,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20, 0x68,0x74,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x66,0x6f,0x6c,0x64,0x65,0x72,0x2e,0x52,0x69,0x67,0x68,0x74,0x50,0x61,0x74,0x68,
0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x61,0x62,0x6c,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20, 0x20,0x7d,0x7d,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,
0x20,0x20,0x20,0x20,0x7b,0x7b,0x2d,0x20,0x69,0x66,0x20,0x6e,0x6f,0x74,0x20,0x2e,0x49,0x73,0x53,0x63,0x61,0x6e,0x6e,0x69, 0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6e,0x6f,0x2d,0x73,0x6d,0x61,0x6c,0x6c,0x22,0x3e,0x3c,0x73,0x70,0x61,0x6e,0x20,
0x6e,0x67,0x20,0x2d,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72, 0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x20,0x74,0x69,0x74,0x6c,0x65,0x3d,0x22,0x7b,0x7b,0x20,
0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73,0x74,0x61,0x72, 0x24,0x66,0x6f,0x6c,0x64,0x65,0x72,0x2e,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x64,0x41,0x74,0x20,0x7d,0x7d,0x22,0x3e,0x7b,
0x74,0x5f,0x73,0x63,0x61,0x6e,0x5f,0x64,0x6f,0x22,0x20,0x7d,0x7d,0x22,0x3e,0x73,0x74,0x61,0x72,0x74,0x20,0x73,0x63,0x61, 0x7b,0x20,0x24,0x66,0x6f,0x6c,0x64,0x65,0x72,0x2e,0x4d,0x6f,0x64,0x69,0x66,0x69,0x65,0x64,0x41,0x74,0x20,0x7c,0x20,0x64,
0x6e,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x2d,0x20,0x69,0x66, 0x61,0x74,0x65,0x48,0x75,0x6d,0x61,0x6e,0x20,0x7d,0x7d,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,
0x20,0x6e,0x6f,0x74,0x20,0x2e,0x4c,0x61,0x73,0x74,0x53,0x63,0x61,0x6e,0x54,0x69,0x6d,0x65,0x2e,0x49,0x73,0x5a,0x65,0x72, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x6f,0x20,0x2d,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x62, 0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x61,
0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e, 0x62,0x6c,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x2d,0x20,0x69,0x66,0x20,0x6e,0x6f,0x74,0x20,
0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x20,0x74,0x69,0x74,0x6c,0x65,0x3d,0x22,0x7b,0x7b, 0x2e,0x49,0x73,0x53,0x63,0x61,0x6e,0x6e,0x69,0x6e,0x67,0x20,0x2d,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x2e,0x4c,0x61,0x73,0x74,0x53,0x63,0x61,0x6e,0x54,0x69,0x6d,0x65,0x20,0x7d,0x7d,0x22,0x3e,0x73,0x63,0x61,0x6e,0x6e, 0x20,0x20,0x20,0x20,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,
0x65,0x64,0x20,0x7b,0x7b,0x20,0x2e,0x4c,0x61,0x73,0x74,0x53,0x63,0x61,0x6e,0x54,0x69,0x6d,0x65,0x20,0x7c,0x20,0x64,0x61, 0x2d,0x20,0x69,0x66,0x20,0x6e,0x6f,0x74,0x20,0x2e,0x4c,0x61,0x73,0x74,0x53,0x63,0x61,0x6e,0x54,0x69,0x6d,0x65,0x2e,0x49,
0x74,0x65,0x48,0x75,0x6d,0x61,0x6e,0x20,0x7d,0x7d,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, 0x73,0x5a,0x65,0x72,0x6f,0x20,0x2d,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x70,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x20,0x74,0x69,0x74,0x6c,0x65,
0x3d,0x22,0x7b,0x7b,0x20,0x2e,0x4c,0x61,0x73,0x74,0x53,0x63,0x61,0x6e,0x54,0x69,0x6d,0x65,0x20,0x7d,0x7d,0x22,0x3e,0x73,
0x63,0x61,0x6e,0x6e,0x65,0x64,0x20,0x7b,0x7b,0x20,0x2e,0x4c,0x61,0x73,0x74,0x53,0x63,0x61,0x6e,0x54,0x69,0x6d,0x65,0x20,
0x7c,0x20,0x64,0x61,0x74,0x65,0x48,0x75,0x6d,0x61,0x6e,0x20,0x7d,0x7d,0x3c,0x2f,0x70,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x66,0x6f,0x72,0x6d,0x20,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,
0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73,0x74,0x61,0x72,0x74,0x5f,0x73,0x63,0x61,0x6e,0x5f,0x64,0x6f,
0x22,0x20,0x7d,0x7d,0x22,0x20,0x6d,0x65,0x74,0x68,0x6f,0x64,0x3d,0x22,0x70,0x6f,0x73,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,
0x74,0x79,0x70,0x65,0x3d,0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x22,0x20,0x76,0x61,0x6c,0x75,0x65,0x3d,0x22,0x73,0x74,0x61,
0x72,0x74,0x20,0x73,0x63,0x61,0x6e,0x22,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x3c,0x2f,0x66,0x6f,0x72,0x6d,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,
0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,
0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x62,0x6f,0x78,0x22,0x3e,0x0a,
0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,
0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,
0x69,0x20,0x6d,0x64,0x69,0x2d,0x66,0x69,0x6c,0x65,0x2d,0x6d,0x75,0x73,0x69,0x63,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x74,
0x72,0x61,0x6e,0x73,0x63,0x6f,0x64,0x69,0x6e,0x67,0x20,0x64,0x65,0x76,0x69,0x63,0x65,0x20,0x70,0x72,0x6f,0x66,0x69,0x6c,
0x65,0x73,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,
0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x6c,0x6f,0x63,0x6b,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x3c,0x70,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x20,0x74,0x65,0x78,0x74,
0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x79,0x6f,0x75,0x20,0x63,0x61,0x6e,0x20,0x66,0x69,0x6e,0x64,0x20,0x79,0x6f,0x75,
0x72,0x20,0x64,0x65,0x76,0x69,0x63,0x65,0x27,0x73,0x20,0x63,0x6c,0x69,0x65,0x6e,0x74,0x20,0x6e,0x61,0x6d,0x65,0x20,0x69,
0x6e,0x20,0x74,0x68,0x65,0x20,0x67,0x6f,0x6e,0x69,0x63,0x20,0x6c,0x6f,0x67,0x73,0x3c,0x2f,0x70,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x20,0x74,0x65,0x78,
0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x73,0x6f,0x6d,0x65,0x20,0x63,0x6f,0x6d,0x6d,0x6f,0x6e,0x20,0x63,0x6c,0x69,
0x65,0x6e,0x74,0x20,0x6e,0x61,0x6d,0x65,0x73,0x3a,0x20,0x22,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,
0x22,0x65,0x6d,0x70,0x22,0x3e,0x44,0x53,0x75,0x62,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x22,0x2c,0x20,0x22,0x3c,0x73,0x70,
0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x65,0x6d,0x70,0x22,0x3e,0x4a,0x61,0x6d,0x73,0x74,0x61,0x73,0x68,0x3c,
0x2f,0x73,0x70,0x61,0x6e,0x3e,0x22,0x2c,0x20,0x22,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x65,
0x6d,0x70,0x22,0x3e,0x53,0x6f,0x75,0x6e,0x64,0x77,0x61,0x76,0x65,0x73,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x22,0x3c,0x2f,
0x70,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,
0x68,0x74,0x20,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x6f,0x72,0x20,0x75,0x73,0x65,0x20,0x22,0x2a,
0x22,0x20,0x61,0x73,0x20,0x66,0x61,0x6c,0x6c,0x62,0x61,0x63,0x6b,0x20,0x72,0x75,0x6c,0x65,0x20,0x66,0x6f,0x72,0x20,0x61,
0x6e,0x79,0x20,0x63,0x6c,0x69,0x65,0x6e,0x74,0x3c,0x2f,0x70,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x62,
0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x61,0x62,0x6c,0x65,0x20,0x69,0x64,0x3d,0x22,0x74,
0x72,0x61,0x6e,0x73,0x63,0x6f,0x64,0x65,0x2d,0x70,0x72,0x65,0x66,0x65,0x72,0x65,0x6e,0x63,0x65,0x73,0x22,0x3e,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,0x24,0x70,0x72,0x65,0x66,0x20,0x3a,0x3d,
0x20,0x2e,0x54,0x72,0x61,0x6e,0x73,0x63,0x6f,0x64,0x65,0x50,0x72,0x65,0x66,0x65,0x72,0x65,0x6e,0x63,0x65,0x73,0x20,0x7d,
0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x66,0x6f,0x72,0x6d,0x20,0x69,0x64,0x3d,0x22,0x74,0x72,0x61,
0x6e,0x73,0x63,0x6f,0x64,0x65,0x2d,0x70,0x72,0x65,0x66,0x2d,0x7b,0x7b,0x20,0x24,0x70,0x72,0x65,0x66,0x2e,0x43,0x6c,0x69,
0x65,0x6e,0x74,0x20,0x7d,0x7d,0x22,0x20,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x72,0x69,0x6e,0x74,
0x66,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x64,0x65,0x6c,0x65,0x74,0x65,0x5f,0x74,0x72,0x61,0x6e,0x73,0x63,0x6f,
0x64,0x65,0x5f,0x70,0x72,0x65,0x66,0x5f,0x64,0x6f,0x3f,0x63,0x6c,0x69,0x65,0x6e,0x74,0x3d,0x25,0x73,0x22,0x20,0x24,0x70,
0x72,0x65,0x66,0x2e,0x43,0x6c,0x69,0x65,0x6e,0x74,0x20,0x7c,0x20,0x70,0x61,0x74,0x68,0x20,0x7d,0x7d,0x22,0x20,0x6d,0x65,
0x74,0x68,0x6f,0x64,0x3d,0x22,0x70,0x6f,0x73,0x74,0x22,0x3e,0x3c,0x2f,0x66,0x6f,0x72,0x6d,0x3e,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x7b,0x7b,0x20,0x24,0x70,0x72,0x65,0x66,
0x2e,0x43,0x6c,0x69,0x65,0x6e,0x74,0x20,0x7d,0x7d,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x7b,0x7b,0x20,0x24,0x70,0x72,0x65,0x66,0x2e,0x50,0x72,0x6f,
0x66,0x69,0x6c,0x65,0x20,0x7d,0x7d,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x74,0x72,
0x61,0x6e,0x73,0x63,0x6f,0x64,0x65,0x2d,0x70,0x72,0x65,0x66,0x2d,0x7b,0x7b,0x20,0x24,0x70,0x72,0x65,0x66,0x2e,0x43,0x6c,
0x69,0x65,0x6e,0x74,0x20,0x7d,0x7d,0x22,0x20,0x74,0x79,0x70,0x65,0x3d,0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x22,0x20,0x76,
0x61,0x6c,0x75,0x65,0x3d,0x22,0x64,0x65,0x6c,0x65,0x74,0x65,0x22,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,
0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x66,0x6f,0x72,0x6d,0x20,0x69,0x64,0x3d,0x22,0x74,0x72,0x61,0x6e,0x73,
0x63,0x6f,0x64,0x65,0x2d,0x70,0x72,0x65,0x66,0x2d,0x61,0x64,0x64,0x22,0x20,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3d,0x22,0x7b,
0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x63,0x72,0x65,0x61,0x74,0x65,0x5f,0x74,0x72,
0x61,0x6e,0x73,0x63,0x6f,0x64,0x65,0x5f,0x70,0x72,0x65,0x66,0x5f,0x64,0x6f,0x22,0x20,0x7d,0x7d,0x22,0x20,0x6d,0x65,0x74,
0x68,0x6f,0x64,0x3d,0x22,0x70,0x6f,0x73,0x74,0x22,0x3e,0x3c,0x2f,0x66,0x6f,0x72,0x6d,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x66,0x6f,0x72,0x6d,0x3d,0x22,
0x74,0x72,0x61,0x6e,0x73,0x63,0x6f,0x64,0x65,0x2d,0x70,0x72,0x65,0x66,0x2d,0x61,0x64,0x64,0x22,0x20,0x74,0x79,0x70,0x65,
0x3d,0x22,0x74,0x65,0x78,0x74,0x22,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x63,0x6c,0x69,0x65,0x6e,0x74,0x22,0x20,0x70,0x6c,
0x61,0x63,0x65,0x68,0x6f,0x6c,0x64,0x65,0x72,0x3d,0x22,0x63,0x6c,0x69,0x65,0x6e,0x74,0x20,0x6e,0x61,0x6d,0x65,0x22,0x3e,
0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x3c,0x73,
0x65,0x6c,0x65,0x63,0x74,0x20,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x74,0x72,0x61,0x6e,0x73,0x63,0x6f,0x64,0x65,0x2d,0x70,0x72,
0x65,0x66,0x2d,0x61,0x64,0x64,0x22,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x22,0x3e,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,
0x20,0x24,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x20,0x3a,0x3d,0x20,0x2e,0x54,0x72,0x61,0x6e,0x73,0x63,0x6f,0x64,0x65,0x50,
0x72,0x6f,0x66,0x69,0x6c,0x65,0x73,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x6f,0x70,0x74,0x69,0x6f,0x6e,0x20,0x76,0x61,0x6c,0x75,0x65,0x3d,0x22,0x7b,0x7b,
0x20,0x24,0x70,0x72,0x6f,0x66,0x69,0x6c,0x65,0x20,0x7d,0x7d,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x70,0x72,0x6f,0x66,0x69,0x6c,
0x65,0x20,0x7d,0x7d,0x3c,0x2f,0x6f,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x2f,0x64, 0x20,0x20,0x20,0x20,0x3c,0x2f,0x73,0x65,0x6c,0x65,0x63,0x74,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x69,0x76,0x3e,0x0a,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x62, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x66,0x6f,0x72,0x6d,0x3d,0x22,
0x6f,0x78,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x6f,0x78, 0x74,0x72,0x61,0x6e,0x73,0x63,0x6f,0x64,0x65,0x2d,0x70,0x72,0x65,0x66,0x2d,0x61,0x64,0x64,0x22,0x20,0x74,0x79,0x70,0x65,
0x2d,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x20,0x63,0x6c,0x61,0x73, 0x3d,0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x22,0x20,0x76,0x61,0x6c,0x75,0x65,0x3d,0x22,0x73,0x61,0x76,0x65,0x22,0x3e,0x3c,
0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x6d,0x75,0x73,0x69, 0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x63,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x73,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f, 0x20,0x20,0x20,0x3c,0x2f,0x74,0x61,0x62,0x6c,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,
0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,0x6c,0x6f, 0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,
0x63,0x6b,0x2d,0x72,0x69,0x67,0x68,0x74,0x20,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20, 0x20,0x62,0x6f,0x78,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,
0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x65,0x71,0x20,0x28,0x6c,0x65,0x6e,0x20,0x2e,0x50,0x6c,0x61, 0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x20,0x63,0x6c,
0x79,0x6c,0x69,0x73,0x74,0x73,0x29,0x20,0x30,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x6d,0x75,
0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x6e,0x6f,0x20, 0x73,0x69,0x63,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x73,0x0a,0x20,0x20,0x20,0x20,
0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x73,0x20,0x79,0x65,0x74,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20, 0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x62,
0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, 0x6c,0x6f,0x63,0x6b,0x2d,0x72,0x69,0x67,0x68,0x74,0x20,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,
0x74,0x61,0x62,0x6c,0x65,0x20,0x69,0x64,0x3d,0x22,0x72,0x65,0x63,0x65,0x6e,0x74,0x2d,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x69,0x66,0x20,0x65,0x71,0x20,0x28,0x6c,0x65,0x6e,0x20,0x2e,0x50,
0x74,0x73,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,0x24,0x70, 0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x73,0x29,0x20,0x30,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x20,0x3a,0x3d,0x20,0x2e,0x50,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x73,0x20,0x7d,0x7d, 0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x6e,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, 0x6f,0x20,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x73,0x20,0x79,0x65,0x74,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,0x72,0x69, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x67,0x68,0x74,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2e,0x4e,0x61,0x6d,0x65,0x20,0x7d, 0x20,0x3c,0x74,0x61,0x62,0x6c,0x65,0x20,0x69,0x64,0x3d,0x22,0x72,0x65,0x63,0x65,0x6e,0x74,0x2d,0x70,0x6c,0x61,0x79,0x6c,
0x7d,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x3e,0x3c, 0x69,0x73,0x74,0x73,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,
0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x28,0x7b,0x7b,0x20,0x24, 0x24,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x20,0x3a,0x3d,0x20,0x2e,0x50,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x73,0x20,
0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2e,0x54,0x72,0x61,0x63,0x6b,0x43,0x6f,0x75,0x6e,0x74,0x20,0x7d,0x7d,0x20,0x74, 0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,
0x72,0x61,0x63,0x6b,0x73,0x29,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,0x74,0x2d,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6e,0x6f,0x2d,0x73,0x6d,0x61, 0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2e,0x4e,0x61,0x6d,0x65,
0x6c,0x6c,0x22,0x3e,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x20, 0x20,0x7d,0x7d,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,
0x74,0x69,0x74,0x6c,0x65,0x3d,0x22,0x7b,0x7b,0x20,0x24,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2e,0x43,0x72,0x65,0x61, 0x3e,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x28,0x7b,0x7b,
0x74,0x65,0x64,0x41,0x74,0x20,0x7d,0x7d,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2e,0x43, 0x20,0x24,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2e,0x54,0x72,0x61,0x63,0x6b,0x43,0x6f,0x75,0x6e,0x74,0x20,0x7d,0x7d,
0x72,0x65,0x61,0x74,0x65,0x64,0x41,0x74,0x20,0x7c,0x20,0x64,0x61,0x74,0x65,0x48,0x75,0x6d,0x61,0x6e,0x20,0x7d,0x7d,0x3c, 0x20,0x74,0x72,0x61,0x63,0x6b,0x73,0x29,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,
0x2f,0x73,0x70,0x61,0x6e,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x64,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6e,0x6f,0x2d,0x73,
0x3c,0x2f,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a, 0x6d,0x61,0x6c,0x6c,0x22,0x3e,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x61,0x62,0x6c,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x22,0x20,0x74,0x69,0x74,0x6c,0x65,0x3d,0x22,0x7b,0x7b,0x20,0x24,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2e,0x43,0x72,
0x20,0x3c,0x66,0x6f,0x72,0x6d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x70,0x6c,0x61, 0x65,0x61,0x74,0x65,0x64,0x41,0x74,0x20,0x7d,0x7d,0x22,0x3e,0x7b,0x7b,0x20,0x24,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,
0x79,0x6c,0x69,0x73,0x74,0x2d,0x75,0x70,0x6c,0x6f,0x61,0x64,0x2d,0x66,0x6f,0x72,0x6d,0x22,0x0a,0x20,0x20,0x20,0x20,0x20, 0x2e,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x41,0x74,0x20,0x7c,0x20,0x64,0x61,0x74,0x65,0x48,0x75,0x6d,0x61,0x6e,0x20,0x7d,
0x20,0x20,0x20,0x20,0x20,0x65,0x6e,0x63,0x74,0x79,0x70,0x65,0x3d,0x22,0x6d,0x75,0x6c,0x74,0x69,0x70,0x61,0x72,0x74,0x2f, 0x7d,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x3c,0x2f,0x74,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x66,0x6f,0x72,0x6d,0x2d,0x64,0x61,0x74,0x61,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x61,0x63,0x74, 0x20,0x20,0x3c,0x2f,0x74,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,
0x69,0x6f,0x6e,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x75,0x70,0x6c, 0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x61,0x62,0x6c,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
0x6f,0x61,0x64,0x5f,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x5f,0x64,0x6f,0x22,0x20,0x7d,0x7d,0x22,0x0a,0x20,0x20,0x20, 0x20,0x20,0x20,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x66,0x6f,0x72,0x6d,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,
0x75,0x70,0x6c,0x6f,0x61,0x64,0x2d,0x66,0x6f,0x72,0x6d,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x65,0x6e,0x63,0x74,0x79,0x70,0x65,0x3d,0x22,0x6d,0x75,0x6c,0x74,0x69,0x70,0x61,0x72,0x74,0x2f,0x66,0x6f,0x72,0x6d,
0x2d,0x64,0x61,0x74,0x61,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x61,0x63,0x74,0x69,0x6f,
0x6e,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x75,0x70,0x6c,0x6f,0x61,
0x64,0x5f,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x5f,0x64,0x6f,0x22,0x20,0x7d,0x7d,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6d,0x65,0x74,0x68,0x6f,0x64,0x3d,0x22,0x70,0x6f,0x73,0x74,0x22,0x0a,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6d,0x65,0x74,0x68,0x6f,0x64,0x3d,0x22,0x70,0x6f,0x73,0x74,0x22,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x6c,0x61,0x62,0x65, 0x20,0x20,0x20,0x20,0x20,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,
0x6c,0x20,0x66,0x6f,0x72,0x3d,0x22,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x75,0x70,0x6c,0x6f,0x61,0x64,0x2d,0x69, 0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x72,0x65,0x6c,0x61,0x74,0x69,0x76,
0x6e,0x70,0x75,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, 0x65,0x3b,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,
0x61,0x3e,0x75,0x70,0x6c,0x6f,0x61,0x64,0x20,0x6d,0x33,0x75,0x38,0x20,0x66,0x69,0x6c,0x65,0x73,0x3c,0x2f,0x61,0x3e,0x0a, 0x70,0x75,0x74,0x20,0x69,0x64,0x3d,0x22,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x75,0x70,0x6c,0x6f,0x61,0x64,0x2d,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x6c,0x61,0x62,0x65,0x6c,0x3e,0x0a,0x20,0x20,0x20, 0x69,0x6e,0x70,0x75,0x74,0x22,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x69,0x64,0x3d,0x22,0x70,0x6c,0x61,0x79, 0x61,0x62,0x73,0x6f,0x6c,0x75,0x74,0x65,0x3b,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x20,0x30,0x3b,0x22,0x20,0x6e,
0x6c,0x69,0x73,0x74,0x2d,0x75,0x70,0x6c,0x6f,0x61,0x64,0x2d,0x69,0x6e,0x70,0x75,0x74,0x22,0x20,0x6e,0x61,0x6d,0x65,0x3d, 0x61,0x6d,0x65,0x3d,0x22,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x66,0x69,0x6c,0x65,0x73,0x22,0x20,0x74,0x79,0x70,
0x22,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x66,0x69,0x6c,0x65,0x73,0x22,0x20,0x74,0x79,0x70,0x65,0x3d,0x22,0x66, 0x65,0x3d,0x22,0x66,0x69,0x6c,0x65,0x22,0x20,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x20,0x2f,0x3e,0x0a,0x20,0x20,0x20,
0x69,0x6c,0x65,0x22,0x20,0x6d,0x75,0x6c,0x74,0x69,0x70,0x6c,0x65,0x20,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x74,0x79,0x70,0x65,
0x20,0x3c,0x2f,0x66,0x6f,0x72,0x6d,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x63,0x72,0x69,0x70,0x74, 0x3d,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,0x22,0x20,0x76,0x61,0x6c,0x75,0x65,0x3d,0x22,0x75,0x70,0x6c,0x6f,0x61,0x64,0x20,
0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x67, 0x6d,0x33,0x75,0x38,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,
0x65,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x42,0x79,0x49,0x64,0x28,0x22,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d, 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x66,0x6f,0x72,0x6d,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x75,0x70,0x6c,0x6f,0x61,0x64,0x2d,0x69,0x6e,0x70,0x75,0x74,0x22,0x29,0x2e,0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x20, 0x20,0x20,0x3c,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,
0x3d,0x20,0x28,0x65,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x67,0x65,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x42,0x79,0x49,0x64,0x28,0x22,
0x20,0x20,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x67,0x65,0x74,0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x42,0x79, 0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x75,0x70,0x6c,0x6f,0x61,0x64,0x2d,0x69,0x6e,0x70,0x75,0x74,0x22,0x29,0x2e,
0x49,0x64,0x28,0x22,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x75,0x70,0x6c,0x6f,0x61,0x64,0x2d,0x66,0x6f,0x72,0x6d, 0x6f,0x6e,0x63,0x68,0x61,0x6e,0x67,0x65,0x20,0x3d,0x20,0x28,0x65,0x29,0x20,0x3d,0x3e,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,
0x22,0x29,0x2e,0x73,0x75,0x62,0x6d,0x69,0x74,0x28,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x2e,0x67,0x65,0x74,
0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x73,0x63,0x72,0x69,0x70,0x74,0x3e,0x0a,0x20,0x20,0x20, 0x45,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x42,0x79,0x49,0x64,0x28,0x22,0x70,0x6c,0x61,0x79,0x6c,0x69,0x73,0x74,0x2d,0x75,0x70,
0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d, 0x6c,0x6f,0x61,0x64,0x2d,0x66,0x6f,0x72,0x6d,0x22,0x29,0x2e,0x73,0x75,0x62,0x6d,0x69,0x74,0x28,0x29,0x3b,0x0a,0x20,0x20,
0x0a, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x73,0x63,
0x72,0x69,0x70,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,
0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,
}}, }},
"pages/delete_user.tmpl": &EmbeddedAsset{ "pages/delete_user.tmpl": &EmbeddedAsset{
ModTime: time.Unix(1582000031, 0), ModTime: time.Unix(1582000031, 0),
@@ -307,7 +390,7 @@ var Bytes = map[string]*EmbeddedAsset{
0x2f,0x64,0x69,0x76,0x3e,0x0a,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a, 0x2f,0x64,0x69,0x76,0x3e,0x0a,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,
}}, }},
"pages/update_lastfm_api_key.tmpl": &EmbeddedAsset{ "pages/update_lastfm_api_key.tmpl": &EmbeddedAsset{
ModTime: time.Unix(1582000031, 0), ModTime: time.Unix(1583976323, 0),
Bytes: []byte{ Bytes: []byte{
0x7b,0x7b,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x22,0x75,0x73,0x65,0x72,0x22,0x20,0x7d,0x7d,0x0a,0x3c,0x64,0x69,0x76, 0x7b,0x7b,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x22,0x75,0x73,0x65,0x72,0x22,0x20,0x7d,0x7d,0x0a,0x3c,0x64,0x69,0x76,
0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x62,0x6f,0x78,0x22,0x3e,0x0a,0x20,0x20,0x20, 0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x62,0x6f,0x78,0x22,0x3e,0x0a,0x20,0x20,0x20,
@@ -316,29 +399,35 @@ var Bytes = map[string]*EmbeddedAsset{
0x64,0x69,0x2d,0x6b,0x65,0x79,0x2d,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x75,0x70,0x64,0x61, 0x64,0x69,0x2d,0x6b,0x65,0x79,0x2d,0x63,0x68,0x61,0x6e,0x67,0x65,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x75,0x70,0x64,0x61,
0x74,0x69,0x6e,0x67,0x20,0x6c,0x61,0x73,0x74,0x2e,0x66,0x6d,0x20,0x6b,0x65,0x79,0x73,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f, 0x74,0x69,0x6e,0x67,0x20,0x6c,0x61,0x73,0x74,0x2e,0x66,0x6d,0x20,0x6b,0x65,0x79,0x73,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,
0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78, 0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x74,0x65,0x78,
0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20, 0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x20,0x63,0x6c,0x61,
0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x20,0x6b,0x65, 0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x28,0x79,0x6f,0x75,0x20,0x63,0x61,0x6e,0x20,0x67,0x65,0x74,0x20,
0x79,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x20,0x3c,0x69,0x3e,0x7b,0x7b,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x20,0x22, 0x61,0x6e,0x20,0x61,0x70,0x69,0x20,0x6b,0x65,0x79,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,
0x6e,0x6f,0x74,0x20,0x73,0x65,0x74,0x22,0x20,0x2e,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4c,0x61,0x73,0x74,0x46,0x4d,0x41, 0x73,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x6c,0x61,0x73,0x74,0x2e,0x66,0x6d,0x2f,0x61,0x70,0x69,0x2f,0x61,0x63,0x63,0x6f,
0x50,0x49,0x4b,0x65,0x79,0x20,0x7d,0x7d,0x3c,0x2f,0x69,0x3e,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, 0x75,0x6e,0x74,0x2f,0x63,0x72,0x65,0x61,0x74,0x65,0x22,0x20,0x74,0x61,0x72,0x67,0x65,0x74,0x3d,0x22,0x5f,0x62,0x6c,0x61,
0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x63,0x75, 0x6e,0x6b,0x22,0x3e,0x68,0x65,0x72,0x65,0x3c,0x2f,0x61,0x3e,0x29,0x3c,0x2f,0x70,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x72,0x72,0x65,0x6e,0x74,0x20,0x73,0x65,0x63,0x72,0x65,0x74,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x20,0x3c,0x69,0x3e,0x7b, 0x20,0x20,0x3c,0x62,0x72,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x3e,0x3c,0x73,0x70,0x61,0x6e,
0x7b,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x20,0x22,0x6e,0x6f,0x74,0x20,0x73,0x65,0x74,0x22,0x20,0x2e,0x43,0x75,0x72, 0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x20,0x6b,
0x72,0x65,0x6e,0x74,0x4c,0x61,0x73,0x74,0x46,0x4d,0x41,0x50,0x49,0x53,0x65,0x63,0x72,0x65,0x74,0x20,0x7d,0x7d,0x3c,0x2f, 0x65,0x79,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x20,0x3c,0x69,0x3e,0x7b,0x7b,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x20,
0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x66,0x6f,0x72,0x6d,0x20, 0x22,0x6e,0x6f,0x74,0x20,0x73,0x65,0x74,0x22,0x20,0x2e,0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4c,0x61,0x73,0x74,0x46,0x4d,
0x61,0x63,0x74,0x69,0x6f,0x6e,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f, 0x41,0x50,0x49,0x4b,0x65,0x79,0x20,0x7d,0x7d,0x3c,0x2f,0x69,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x75,0x70,0x64,0x61,0x74,0x65,0x5f,0x6c,0x61,0x73,0x74,0x66,0x6d,0x5f,0x61,0x70,0x69,0x5f,0x6b,0x65,0x79,0x5f,0x64,0x6f, 0x20,0x20,0x3c,0x70,0x3e,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,
0x22,0x20,0x7d,0x7d,0x22,0x20,0x6d,0x65,0x74,0x68,0x6f,0x64,0x3d,0x22,0x70,0x6f,0x73,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20, 0x3e,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x20,0x73,0x65,0x63,0x72,0x65,0x74,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x20,0x3c,
0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x74,0x79,0x70,0x65,0x3d,0x22,0x74,0x65,0x78,0x74,0x22,0x20, 0x69,0x3e,0x7b,0x7b,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x20,0x22,0x6e,0x6f,0x74,0x20,0x73,0x65,0x74,0x22,0x20,0x2e,
0x69,0x64,0x3d,0x22,0x61,0x70,0x69,0x5f,0x6b,0x65,0x79,0x22,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x61,0x70,0x69,0x5f,0x6b, 0x43,0x75,0x72,0x72,0x65,0x6e,0x74,0x4c,0x61,0x73,0x74,0x46,0x4d,0x41,0x50,0x49,0x53,0x65,0x63,0x72,0x65,0x74,0x20,0x7d,
0x65,0x79,0x22,0x20,0x70,0x6c,0x61,0x63,0x65,0x68,0x6f,0x6c,0x64,0x65,0x72,0x3d,0x22,0x6e,0x65,0x77,0x20,0x6b,0x65,0x79, 0x7d,0x3c,0x2f,0x69,0x3e,0x3c,0x2f,0x70,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,
0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x74,0x79,0x70,0x65,0x3d,0x22, 0x20,0x3c,0x66,0x6f,0x72,0x6d,0x20,0x61,0x63,0x74,0x69,0x6f,0x6e,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,
0x74,0x65,0x78,0x74,0x22,0x20,0x69,0x64,0x3d,0x22,0x73,0x65,0x63,0x72,0x65,0x74,0x22,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22, 0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x75,0x70,0x64,0x61,0x74,0x65,0x5f,0x6c,0x61,0x73,0x74,0x66,0x6d,0x5f,0x61,0x70,0x69,
0x73,0x65,0x63,0x72,0x65,0x74,0x22,0x20,0x70,0x6c,0x61,0x63,0x65,0x68,0x6f,0x6c,0x64,0x65,0x72,0x3d,0x22,0x6e,0x65,0x77, 0x5f,0x6b,0x65,0x79,0x5f,0x64,0x6f,0x22,0x20,0x7d,0x7d,0x22,0x20,0x6d,0x65,0x74,0x68,0x6f,0x64,0x3d,0x22,0x70,0x6f,0x73,
0x20,0x73,0x65,0x63,0x72,0x65,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x70,0x75,0x74, 0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x74,0x79,0x70,0x65,0x3d,
0x20,0x74,0x79,0x70,0x65,0x3d,0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x22,0x20,0x76,0x61,0x6c,0x75,0x65,0x3d,0x22,0x75,0x70, 0x22,0x74,0x65,0x78,0x74,0x22,0x20,0x69,0x64,0x3d,0x22,0x61,0x70,0x69,0x5f,0x6b,0x65,0x79,0x22,0x20,0x6e,0x61,0x6d,0x65,
0x64,0x61,0x74,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x66,0x6f,0x72,0x6d,0x3e,0x0a,0x3c,0x2f,0x64,0x69,0x76, 0x3d,0x22,0x61,0x70,0x69,0x5f,0x6b,0x65,0x79,0x22,0x20,0x70,0x6c,0x61,0x63,0x65,0x68,0x6f,0x6c,0x64,0x65,0x72,0x3d,0x22,
0x3e,0x0a,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a, 0x6e,0x65,0x77,0x20,0x6b,0x65,0x79,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,
0x20,0x74,0x79,0x70,0x65,0x3d,0x22,0x74,0x65,0x78,0x74,0x22,0x20,0x69,0x64,0x3d,0x22,0x73,0x65,0x63,0x72,0x65,0x74,0x22,
0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x73,0x65,0x63,0x72,0x65,0x74,0x22,0x20,0x70,0x6c,0x61,0x63,0x65,0x68,0x6f,0x6c,0x64,
0x65,0x72,0x3d,0x22,0x6e,0x65,0x77,0x20,0x73,0x65,0x63,0x72,0x65,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x3c,0x69,0x6e,0x70,0x75,0x74,0x20,0x74,0x79,0x70,0x65,0x3d,0x22,0x73,0x75,0x62,0x6d,0x69,0x74,0x22,0x20,0x76,0x61,
0x6c,0x75,0x65,0x3d,0x22,0x75,0x70,0x64,0x61,0x74,0x65,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x66,0x6f,0x72,0x6d,
0x3e,0x0a,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,
}}, }},
"pages/change_own_password.tmpl": &EmbeddedAsset{ "pages/change_own_password.tmpl": &EmbeddedAsset{
ModTime: time.Unix(1582000031, 0), ModTime: time.Unix(1582000031, 0),
@@ -405,56 +494,55 @@ var Bytes = map[string]*EmbeddedAsset{
0x20,0x7d,0x7d,0x0a, 0x20,0x7d,0x7d,0x0a,
}}, }},
"static/reset.css": &EmbeddedAsset{ "static/reset.css": &EmbeddedAsset{
ModTime: time.Unix(1565382588, 0), ModTime: time.Unix(1583976323, 0),
Bytes: []byte{ Bytes: []byte{
0x2f,0x2a,0x20,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6d,0x65,0x79,0x65,0x72,0x77,0x65,0x62,0x2e,0x63,0x6f,0x6d,0x2f,0x65, 0x2f,0x2a,0x20,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6d,0x65,0x79,0x65,0x72,0x77,0x65,0x62,0x2e,0x63,0x6f,0x6d,0x2f,0x65,
0x72,0x69,0x63,0x2f,0x74,0x6f,0x6f,0x6c,0x73,0x2f,0x63,0x73,0x73,0x2f,0x72,0x65,0x73,0x65,0x74,0x2f,0x0a,0x20,0x20,0x20, 0x72,0x69,0x63,0x2f,0x74,0x6f,0x6f,0x6c,0x73,0x2f,0x63,0x73,0x73,0x2f,0x72,0x65,0x73,0x65,0x74,0x2f,0x0a,0x20,0x20,0x20,
0x76,0x32,0x2e,0x30,0x20,0x7c,0x20,0x32,0x30,0x31,0x31,0x30,0x31,0x32,0x36,0x0a,0x20,0x20,0x20,0x4c,0x69,0x63,0x65,0x6e, 0x76,0x32,0x2e,0x30,0x20,0x7c,0x20,0x32,0x30,0x31,0x31,0x30,0x31,0x32,0x36,0x0a,0x20,0x20,0x20,0x4c,0x69,0x63,0x65,0x6e,
0x73,0x65,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x20,0x28,0x70,0x75,0x62,0x6c,0x69,0x63,0x20,0x64,0x6f,0x6d,0x61,0x69,0x6e,0x29, 0x73,0x65,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x20,0x28,0x70,0x75,0x62,0x6c,0x69,0x63,0x20,0x64,0x6f,0x6d,0x61,0x69,0x6e,0x29,
0x0a,0x2a,0x2f,0x0a,0x0a,0x68,0x74,0x6d,0x6c,0x2c,0x20,0x62,0x6f,0x64,0x79,0x2c,0x20,0x64,0x69,0x76,0x2c,0x20,0x73,0x70, 0x0a,0x2a,0x2f,0x0a,0x0a,0x68,0x74,0x6d,0x6c,0x2c,0x0a,0x62,0x6f,0x64,0x79,0x2c,0x0a,0x64,0x69,0x76,0x2c,0x0a,0x73,0x70,
0x61,0x6e,0x2c,0x20,0x61,0x70,0x70,0x6c,0x65,0x74,0x2c,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x2c,0x20,0x69,0x66,0x72,0x61, 0x61,0x6e,0x2c,0x0a,0x61,0x70,0x70,0x6c,0x65,0x74,0x2c,0x0a,0x6f,0x62,0x6a,0x65,0x63,0x74,0x2c,0x0a,0x69,0x66,0x72,0x61,
0x6d,0x65,0x2c,0x20,0x68,0x31,0x2c,0x20,0x68,0x32,0x2c,0x20,0x68,0x33,0x2c,0x20,0x68,0x34,0x2c,0x20,0x68,0x35,0x2c,0x20, 0x6d,0x65,0x2c,0x0a,0x68,0x31,0x2c,0x0a,0x68,0x32,0x2c,0x0a,0x68,0x33,0x2c,0x0a,0x68,0x34,0x2c,0x0a,0x68,0x35,0x2c,0x0a,
0x68,0x36,0x2c,0x20,0x70,0x2c,0x20,0x62,0x6c,0x6f,0x63,0x6b,0x71,0x75,0x6f,0x74,0x65,0x2c,0x20,0x70,0x72,0x65,0x2c,0x20, 0x68,0x36,0x2c,0x0a,0x70,0x2c,0x0a,0x62,0x6c,0x6f,0x63,0x6b,0x71,0x75,0x6f,0x74,0x65,0x2c,0x0a,0x70,0x72,0x65,0x2c,0x0a,
0x61,0x2c,0x20,0x61,0x62,0x62,0x72,0x2c,0x20,0x61,0x63,0x72,0x6f,0x6e,0x79,0x6d,0x2c,0x20,0x61,0x64,0x64,0x72,0x65,0x73, 0x61,0x2c,0x0a,0x61,0x62,0x62,0x72,0x2c,0x0a,0x61,0x63,0x72,0x6f,0x6e,0x79,0x6d,0x2c,0x0a,0x61,0x64,0x64,0x72,0x65,0x73,
0x73,0x2c,0x20,0x62,0x69,0x67,0x2c,0x20,0x63,0x69,0x74,0x65,0x2c,0x20,0x63,0x6f,0x64,0x65,0x2c,0x20,0x64,0x65,0x6c,0x2c, 0x73,0x2c,0x0a,0x62,0x69,0x67,0x2c,0x0a,0x63,0x69,0x74,0x65,0x2c,0x0a,0x63,0x6f,0x64,0x65,0x2c,0x0a,0x64,0x65,0x6c,0x2c,
0x20,0x64,0x66,0x6e,0x2c,0x20,0x65,0x6d,0x2c,0x20,0x69,0x6d,0x67,0x2c,0x20,0x69,0x6e,0x73,0x2c,0x20,0x6b,0x62,0x64,0x2c, 0x0a,0x64,0x66,0x6e,0x2c,0x0a,0x65,0x6d,0x2c,0x0a,0x69,0x6d,0x67,0x2c,0x0a,0x69,0x6e,0x73,0x2c,0x0a,0x6b,0x62,0x64,0x2c,
0x20,0x71,0x2c,0x20,0x73,0x2c,0x20,0x73,0x61,0x6d,0x70,0x2c,0x20,0x73,0x6d,0x61,0x6c,0x6c,0x2c,0x20,0x73,0x74,0x72,0x69, 0x0a,0x71,0x2c,0x0a,0x73,0x2c,0x0a,0x73,0x61,0x6d,0x70,0x2c,0x0a,0x73,0x6d,0x61,0x6c,0x6c,0x2c,0x0a,0x73,0x74,0x72,0x69,
0x6b,0x65,0x2c,0x20,0x73,0x74,0x72,0x6f,0x6e,0x67,0x2c,0x20,0x73,0x75,0x62,0x2c,0x20,0x73,0x75,0x70,0x2c,0x20,0x74,0x74, 0x6b,0x65,0x2c,0x0a,0x73,0x74,0x72,0x6f,0x6e,0x67,0x2c,0x0a,0x73,0x75,0x62,0x2c,0x0a,0x73,0x75,0x70,0x2c,0x0a,0x74,0x74,
0x2c,0x20,0x76,0x61,0x72,0x2c,0x20,0x62,0x2c,0x20,0x75,0x2c,0x20,0x69,0x2c,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x20, 0x2c,0x0a,0x76,0x61,0x72,0x2c,0x0a,0x62,0x2c,0x0a,0x75,0x2c,0x0a,0x69,0x2c,0x0a,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x0a,
0x64,0x6c,0x2c,0x20,0x64,0x74,0x2c,0x20,0x64,0x64,0x2c,0x20,0x6f,0x6c,0x2c,0x20,0x75,0x6c,0x2c,0x20,0x6c,0x69,0x2c,0x20, 0x64,0x6c,0x2c,0x0a,0x64,0x74,0x2c,0x0a,0x64,0x64,0x2c,0x0a,0x6f,0x6c,0x2c,0x0a,0x75,0x6c,0x2c,0x0a,0x6c,0x69,0x2c,0x0a,
0x66,0x69,0x65,0x6c,0x64,0x73,0x65,0x74,0x2c,0x20,0x66,0x6f,0x72,0x6d,0x2c,0x20,0x6c,0x61,0x62,0x65,0x6c,0x2c,0x20,0x6c, 0x66,0x69,0x65,0x6c,0x64,0x73,0x65,0x74,0x2c,0x0a,0x66,0x6f,0x72,0x6d,0x2c,0x0a,0x6c,0x61,0x62,0x65,0x6c,0x2c,0x0a,0x6c,
0x65,0x67,0x65,0x6e,0x64,0x2c,0x20,0x74,0x61,0x62,0x6c,0x65,0x2c,0x20,0x63,0x61,0x70,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x74, 0x65,0x67,0x65,0x6e,0x64,0x2c,0x0a,0x74,0x61,0x62,0x6c,0x65,0x2c,0x0a,0x63,0x61,0x70,0x74,0x69,0x6f,0x6e,0x2c,0x0a,0x74,
0x62,0x6f,0x64,0x79,0x2c,0x20,0x74,0x66,0x6f,0x6f,0x74,0x2c,0x20,0x74,0x68,0x65,0x61,0x64,0x2c,0x20,0x74,0x72,0x2c,0x20, 0x62,0x6f,0x64,0x79,0x2c,0x0a,0x74,0x66,0x6f,0x6f,0x74,0x2c,0x0a,0x74,0x68,0x65,0x61,0x64,0x2c,0x0a,0x74,0x72,0x2c,0x0a,
0x74,0x68,0x2c,0x20,0x74,0x64,0x2c,0x20,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x2c,0x20,0x61,0x73,0x69,0x64,0x65,0x2c,0x20, 0x74,0x68,0x2c,0x0a,0x74,0x64,0x2c,0x0a,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x2c,0x0a,0x61,0x73,0x69,0x64,0x65,0x2c,0x0a,
0x63,0x61,0x6e,0x76,0x61,0x73,0x2c,0x20,0x64,0x65,0x74,0x61,0x69,0x6c,0x73,0x2c,0x20,0x65,0x6d,0x62,0x65,0x64,0x2c,0x20, 0x63,0x61,0x6e,0x76,0x61,0x73,0x2c,0x0a,0x64,0x65,0x74,0x61,0x69,0x6c,0x73,0x2c,0x0a,0x65,0x6d,0x62,0x65,0x64,0x2c,0x0a,
0x66,0x69,0x67,0x75,0x72,0x65,0x2c,0x20,0x66,0x69,0x67,0x63,0x61,0x70,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x66,0x6f,0x6f,0x74, 0x66,0x69,0x67,0x75,0x72,0x65,0x2c,0x0a,0x66,0x69,0x67,0x63,0x61,0x70,0x74,0x69,0x6f,0x6e,0x2c,0x0a,0x66,0x6f,0x6f,0x74,
0x65,0x72,0x2c,0x20,0x68,0x65,0x61,0x64,0x65,0x72,0x2c,0x20,0x68,0x67,0x72,0x6f,0x75,0x70,0x2c,0x20,0x6d,0x65,0x6e,0x75, 0x65,0x72,0x2c,0x0a,0x68,0x65,0x61,0x64,0x65,0x72,0x2c,0x0a,0x68,0x67,0x72,0x6f,0x75,0x70,0x2c,0x0a,0x6d,0x65,0x6e,0x75,
0x2c,0x20,0x6e,0x61,0x76,0x2c,0x20,0x6f,0x75,0x74,0x70,0x75,0x74,0x2c,0x20,0x72,0x75,0x62,0x79,0x2c,0x20,0x73,0x65,0x63, 0x2c,0x0a,0x6e,0x61,0x76,0x2c,0x0a,0x6f,0x75,0x74,0x70,0x75,0x74,0x2c,0x0a,0x72,0x75,0x62,0x79,0x2c,0x0a,0x73,0x65,0x63,
0x74,0x69,0x6f,0x6e,0x2c,0x20,0x73,0x75,0x6d,0x6d,0x61,0x72,0x79,0x2c,0x20,0x74,0x69,0x6d,0x65,0x2c,0x20,0x6d,0x61,0x72, 0x74,0x69,0x6f,0x6e,0x2c,0x0a,0x73,0x75,0x6d,0x6d,0x61,0x72,0x79,0x2c,0x0a,0x74,0x69,0x6d,0x65,0x2c,0x0a,0x6d,0x61,0x72,
0x6b,0x2c,0x20,0x61,0x75,0x64,0x69,0x6f,0x2c,0x20,0x76,0x69,0x64,0x65,0x6f,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x6d, 0x6b,0x2c,0x0a,0x61,0x75,0x64,0x69,0x6f,0x2c,0x0a,0x76,0x69,0x64,0x65,0x6f,0x20,0x7b,0x0a,0x20,0x20,0x6d,0x61,0x72,0x67,
0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20, 0x69,0x6e,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x62,
0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20, 0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,
0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x30,0x30,0x25,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x66,0x6f, 0x30,0x30,0x25,0x3b,0x0a,0x20,0x20,0x66,0x6f,0x6e,0x74,0x3a,0x20,0x69,0x6e,0x68,0x65,0x72,0x69,0x74,0x3b,0x0a,0x20,0x20,
0x6e,0x74,0x3a,0x20,0x69,0x6e,0x68,0x65,0x72,0x69,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x72,0x74,0x69,0x63, 0x76,0x65,0x72,0x74,0x69,0x63,0x61,0x6c,0x2d,0x61,0x6c,0x69,0x67,0x6e,0x3a,0x20,0x62,0x61,0x73,0x65,0x6c,0x69,0x6e,0x65,
0x61,0x6c,0x2d,0x61,0x6c,0x69,0x67,0x6e,0x3a,0x20,0x62,0x61,0x73,0x65,0x6c,0x69,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x2f, 0x3b,0x0a,0x7d,0x0a,0x0a,0x2f,0x2a,0x20,0x68,0x74,0x6d,0x6c,0x35,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x2d,0x72,0x6f,
0x2a,0x20,0x68,0x74,0x6d,0x6c,0x35,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x2d,0x72,0x6f,0x6c,0x65,0x20,0x72,0x65,0x73, 0x6c,0x65,0x20,0x72,0x65,0x73,0x65,0x74,0x20,0x66,0x6f,0x72,0x20,0x6f,0x6c,0x64,0x65,0x72,0x20,0x62,0x72,0x6f,0x77,0x73,
0x65,0x74,0x20,0x66,0x6f,0x72,0x20,0x6f,0x6c,0x64,0x65,0x72,0x20,0x62,0x72,0x6f,0x77,0x73,0x65,0x72,0x73,0x20,0x2a,0x2f, 0x65,0x72,0x73,0x20,0x2a,0x2f,0x0a,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x2c,0x0a,0x61,0x73,0x69,0x64,0x65,0x2c,0x0a,0x64,
0x0a,0x20,0x61,0x72,0x74,0x69,0x63,0x6c,0x65,0x2c,0x20,0x61,0x73,0x69,0x64,0x65,0x2c,0x20,0x64,0x65,0x74,0x61,0x69,0x6c, 0x65,0x74,0x61,0x69,0x6c,0x73,0x2c,0x0a,0x66,0x69,0x67,0x63,0x61,0x70,0x74,0x69,0x6f,0x6e,0x2c,0x0a,0x66,0x69,0x67,0x75,
0x73,0x2c,0x20,0x66,0x69,0x67,0x63,0x61,0x70,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x66,0x69,0x67,0x75,0x72,0x65,0x2c,0x20,0x66, 0x72,0x65,0x2c,0x0a,0x66,0x6f,0x6f,0x74,0x65,0x72,0x2c,0x0a,0x68,0x65,0x61,0x64,0x65,0x72,0x2c,0x0a,0x68,0x67,0x72,0x6f,
0x6f,0x6f,0x74,0x65,0x72,0x2c,0x20,0x68,0x65,0x61,0x64,0x65,0x72,0x2c,0x20,0x68,0x67,0x72,0x6f,0x75,0x70,0x2c,0x20,0x6d, 0x75,0x70,0x2c,0x0a,0x6d,0x65,0x6e,0x75,0x2c,0x0a,0x6e,0x61,0x76,0x2c,0x0a,0x73,0x65,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7b,
0x65,0x6e,0x75,0x2c,0x20,0x6e,0x61,0x76,0x2c,0x20,0x73,0x65,0x63,0x74,0x69,0x6f,0x6e,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20, 0x0a,0x20,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3a,0x20,0x62,0x6c,0x6f,0x63,0x6b,0x3b,0x0a,0x7d,0x0a,0x0a,0x62,0x6f,
0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3a,0x20,0x62,0x6c,0x6f,0x63,0x6b,0x3b,0x0a,0x7d,0x0a,0x0a,0x62,0x6f,0x64,0x79, 0x64,0x79,0x20,0x7b,0x0a,0x20,0x20,0x6c,0x69,0x6e,0x65,0x2d,0x68,0x65,0x69,0x67,0x68,0x74,0x3a,0x20,0x31,0x3b,0x0a,0x7d,
0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x6e,0x65,0x2d,0x68,0x65,0x69,0x67,0x68,0x74,0x3a,0x20,0x31,0x3b,0x0a, 0x0a,0x0a,0x6f,0x6c,0x2c,0x0a,0x75,0x6c,0x20,0x7b,0x0a,0x20,0x20,0x6c,0x69,0x73,0x74,0x2d,0x73,0x74,0x79,0x6c,0x65,0x3a,
0x7d,0x0a,0x0a,0x6f,0x6c,0x2c,0x20,0x75,0x6c,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x6c,0x69,0x73,0x74,0x2d,0x73,0x74, 0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x62,0x6c,0x6f,0x63,0x6b,0x71,0x75,0x6f,0x74,0x65,0x2c,0x0a,0x71,0x20,
0x79,0x6c,0x65,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x62,0x6c,0x6f,0x63,0x6b,0x71,0x75,0x6f,0x74,0x65, 0x7b,0x0a,0x20,0x20,0x71,0x75,0x6f,0x74,0x65,0x73,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x62,0x6c,0x6f,
0x2c,0x20,0x71,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x71,0x75,0x6f,0x74,0x65,0x73,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b, 0x63,0x6b,0x71,0x75,0x6f,0x74,0x65,0x3a,0x62,0x65,0x66,0x6f,0x72,0x65,0x2c,0x0a,0x62,0x6c,0x6f,0x63,0x6b,0x71,0x75,0x6f,
0x0a,0x7d,0x0a,0x0a,0x62,0x6c,0x6f,0x63,0x6b,0x71,0x75,0x6f,0x74,0x65,0x3a,0x62,0x65,0x66,0x6f,0x72,0x65,0x2c,0x20,0x62, 0x74,0x65,0x3a,0x61,0x66,0x74,0x65,0x72,0x2c,0x0a,0x71,0x3a,0x62,0x65,0x66,0x6f,0x72,0x65,0x2c,0x0a,0x71,0x3a,0x61,0x66,
0x6c,0x6f,0x63,0x6b,0x71,0x75,0x6f,0x74,0x65,0x3a,0x61,0x66,0x74,0x65,0x72,0x2c,0x20,0x71,0x3a,0x62,0x65,0x66,0x6f,0x72, 0x74,0x65,0x72,0x20,0x7b,0x0a,0x20,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3a,0x20,0x22,0x22,0x3b,0x0a,0x20,0x20,0x63,
0x65,0x2c,0x20,0x71,0x3a,0x61,0x66,0x74,0x65,0x72,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e, 0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x7b,
0x74,0x3a,0x20,0x27,0x27,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3a,0x20,0x6e,0x6f,0x6e, 0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x63,0x6f,0x6c,0x6c,0x61,0x70,0x73,0x65,0x3a,0x20,0x63,0x6f,0x6c,0x6c,
0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65, 0x61,0x70,0x73,0x65,0x3b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x3a,0x20,
0x72,0x2d,0x63,0x6f,0x6c,0x6c,0x61,0x70,0x73,0x65,0x3a,0x20,0x63,0x6f,0x6c,0x6c,0x61,0x70,0x73,0x65,0x3b,0x0a,0x20,0x20, 0x30,0x3b,0x0a,0x7d,0x0a,
0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x3a,0x20,0x30,0x3b,0x0a,0x7d,0x0a,
}}, }},
"static/favicon.ico": &EmbeddedAsset{ "static/favicon.ico": &EmbeddedAsset{
ModTime: time.Unix(1565382588, 0), ModTime: time.Unix(1565382588, 0),
@@ -10715,105 +10803,94 @@ var Bytes = map[string]*EmbeddedAsset{
0x55,0x23,0xfe,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, 0x55,0x23,0xfe,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,
}}, }},
"static/main.css": &EmbeddedAsset{ "static/main.css": &EmbeddedAsset{
ModTime: time.Unix(1582113240, 0), ModTime: time.Unix(1583976324, 0),
Bytes: []byte{ Bytes: []byte{
0x3a,0x72,0x6f,0x6f,0x74,0x20,0x7b,0x0a,0x20,0x20,0x2d,0x2d,0x70,0x61,0x64,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x2e, 0x3a,0x72,0x6f,0x6f,0x74,0x20,0x7b,0x0a,0x20,0x20,0x2d,0x2d,0x70,0x61,0x64,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x2e,
0x37,0x35,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,0x2a,0x2c,0x20,0x73,0x70,0x61,0x6e,0x2c,0x20,0x64,0x69,0x76,0x2c,0x20, 0x37,0x35,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,0x2a,0x2c,0x0a,0x73,0x70,0x61,0x6e,0x2c,0x0a,0x64,0x69,0x76,0x2c,0x0a,
0x2e,0x6d,0x64,0x69,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20, 0x2e,0x6d,0x64,0x69,0x20,0x7b,0x0a,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x6d,0x6f,
0x6d,0x6f,0x6e,0x6f,0x73,0x70,0x61,0x63,0x65,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65, 0x6e,0x6f,0x73,0x70,0x61,0x63,0x65,0x3b,0x0a,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x30,0x2e,
0x3a,0x20,0x30,0x2e,0x38,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,0x62,0x6f,0x64,0x79,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20, 0x38,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,0x62,0x6f,0x64,0x79,0x20,0x7b,0x0a,0x20,0x20,0x6d,0x61,0x78,0x2d,0x77,0x69,
0x6d,0x61,0x78,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x37,0x38,0x30,0x70,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61, 0x64,0x74,0x68,0x3a,0x20,0x37,0x38,0x30,0x70,0x78,0x3b,0x0a,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x20,
0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x20,0x61,0x75,0x74,0x6f,0x3b,0x0a,0x20,0x20,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e, 0x61,0x75,0x74,0x6f,0x3b,0x0a,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x30,0x20,0x76,0x61,0x72,0x28,0x2d,
0x67,0x3a,0x20,0x30,0x20,0x76,0x61,0x72,0x28,0x2d,0x2d,0x70,0x61,0x64,0x2d,0x73,0x69,0x7a,0x65,0x29,0x3b,0x0a,0x20,0x20, 0x2d,0x70,0x61,0x64,0x2d,0x73,0x69,0x7a,0x65,0x29,0x3b,0x0a,0x20,0x20,0x6f,0x76,0x65,0x72,0x66,0x6c,0x6f,0x77,0x2d,0x79,
0x20,0x20,0x6f,0x76,0x65,0x72,0x66,0x6c,0x6f,0x77,0x2d,0x79,0x3a,0x20,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x3b,0x0a,0x20,0x20, 0x3a,0x20,0x73,0x63,0x72,0x6f,0x6c,0x6c,0x3b,0x0a,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,
0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x34,0x70,0x78,0x3b,0x0a,0x7d,0x0a,0x0a,0x74,0x61, 0x34,0x70,0x78,0x3b,0x0a,0x7d,0x0a,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x74,0x64,0x3a,0x6e,0x6f,0x74,0x28,0x3a,0x6c,0x61,
0x62,0x6c,0x65,0x20,0x74,0x64,0x3a,0x6e,0x6f,0x74,0x28,0x3a,0x6c,0x61,0x73,0x74,0x2d,0x63,0x68,0x69,0x6c,0x64,0x29,0x3a, 0x73,0x74,0x2d,0x63,0x68,0x69,0x6c,0x64,0x29,0x3a,0x3a,0x61,0x66,0x74,0x65,0x72,0x20,0x7b,0x0a,0x20,0x20,0x63,0x6f,0x6e,
0x3a,0x61,0x66,0x74,0x65,0x72,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3a,0x20,0x22,0x20, 0x74,0x65,0x6e,0x74,0x3a,0x20,0x22,0x20,0x22,0x3b,0x0a,0x20,0x20,0x77,0x68,0x69,0x74,0x65,0x2d,0x73,0x70,0x61,0x63,0x65,
0x22,0x3b,0x0a,0x20,0x20,0x20,0x20,0x77,0x68,0x69,0x74,0x65,0x2d,0x73,0x70,0x61,0x63,0x65,0x3a,0x20,0x70,0x72,0x65,0x3b, 0x3a,0x20,0x70,0x72,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x40,0x6d,0x65,0x64,0x69,0x61,0x20,0x6f,0x6e,0x6c,0x79,0x20,0x73,0x63,
0x0a,0x7d,0x0a,0x0a,0x40,0x6d,0x65,0x64,0x69,0x61,0x20,0x6f,0x6e,0x6c,0x79,0x20,0x73,0x63,0x72,0x65,0x65,0x6e,0x20,0x61, 0x72,0x65,0x65,0x6e,0x20,0x61,0x6e,0x64,0x20,0x28,0x6d,0x61,0x78,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x37,0x38,0x30,
0x6e,0x64,0x20,0x28,0x6d,0x61,0x78,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x37,0x38,0x30,0x70,0x78,0x29,0x20,0x7b,0x0a, 0x70,0x78,0x29,0x20,0x7b,0x0a,0x20,0x20,0x74,0x61,0x62,0x6c,0x65,0x23,0x72,0x65,0x63,0x65,0x6e,0x74,0x2d,0x66,0x6f,0x6c,
0x20,0x20,0x20,0x20,0x74,0x61,0x62,0x6c,0x65,0x23,0x72,0x65,0x63,0x65,0x6e,0x74,0x2d,0x66,0x6f,0x6c,0x64,0x65,0x72,0x73, 0x64,0x65,0x72,0x73,0x20,0x74,0x64,0x3a,0x66,0x69,0x72,0x73,0x74,0x2d,0x63,0x68,0x69,0x6c,0x64,0x3a,0x3a,0x61,0x66,0x74,
0x20,0x74,0x64,0x3a,0x66,0x69,0x72,0x73,0x74,0x2d,0x63,0x68,0x69,0x6c,0x64,0x3a,0x3a,0x61,0x66,0x74,0x65,0x72,0x20,0x7b, 0x65,0x72,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3a,0x20,0x22,0x22,0x3b,0x0a,0x20,0x20,
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3a,0x20,0x22,0x22,0x3b,0x0a,0x20,0x20, 0x7d,0x0a,0x20,0x20,0x2e,0x6e,0x6f,0x2d,0x73,0x6d,0x61,0x6c,0x6c,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x64,0x69,0x73,0x70,
0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x2e,0x6e,0x6f,0x2d,0x73,0x6d,0x61,0x6c,0x6c,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20, 0x6c,0x61,0x79,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x20,0x20,0x7d,0x0a,0x20,0x20,0x62,0x6f,0x64,0x79,0x20,0x7b,0x0a,
0x20,0x20,0x20,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d, 0x20,0x20,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x32,0x70,0x78,0x3b,0x0a,0x20,0x20,0x7d,
0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x64,0x79,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x6e,0x74, 0x0a,0x7d,0x0a,0x0a,0x69,0x6e,0x70,0x75,0x74,0x2c,0x0a,0x73,0x65,0x6c,0x65,0x63,0x74,0x2c,0x0a,0x74,0x65,0x78,0x74,0x61,
0x2d,0x73,0x69,0x7a,0x65,0x3a,0x20,0x31,0x32,0x70,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x66,0x6f, 0x72,0x65,0x61,0x20,0x7b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x72,0x61,0x64,0x69,0x75,0x73,0x3a,0x20,0x30,
0x72,0x6d,0x20,0x69,0x6e,0x70,0x75,0x74,0x5b,0x74,0x79,0x70,0x65,0x3d,0x66,0x69,0x6c,0x65,0x5d,0x20,0x7b,0x0a,0x20,0x20, 0x3b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x31,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x63,
0x20,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x66,0x6f,0x72,0x6d, 0x63,0x63,0x3b,0x0a,0x20,0x20,0x62,0x6f,0x78,0x2d,0x73,0x69,0x7a,0x69,0x6e,0x67,0x3a,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,
0x20,0x69,0x6e,0x70,0x75,0x74,0x5b,0x74,0x79,0x70,0x65,0x5d,0x2c,0x0a,0x66,0x6f,0x72,0x6d,0x20,0x73,0x65,0x6c,0x65,0x63, 0x2d,0x62,0x6f,0x78,0x3b,0x0a,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x31,0x70,0x78,0x20,0x30,0x3b,0x0a,0x20,
0x74,0x2c,0x0a,0x66,0x6f,0x72,0x6d,0x20,0x74,0x65,0x78,0x74,0x61,0x72,0x65,0x61,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d, 0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3a,0x20,0x32,
0x61,0x72,0x67,0x69,0x6e,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x66,0x6f,0x72,0x6d, 0x30,0x70,0x78,0x3b,0x0a,0x7d,0x0a,0x0a,0x69,0x6e,0x70,0x75,0x74,0x5b,0x74,0x79,0x70,0x65,0x3d,0x22,0x73,0x75,0x62,0x6d,
0x20,0x69,0x6e,0x70,0x75,0x74,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x33,0x70, 0x69,0x74,0x22,0x5d,0x2c,0x0a,0x69,0x6e,0x70,0x75,0x74,0x5b,0x74,0x79,0x70,0x65,0x3d,0x22,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x31,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64, 0x22,0x5d,0x20,0x7b,0x0a,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x38,0x72,0x65,0x6d,0x3b,0x0a,0x20,0x20,0x62,0x61,
0x20,0x23,0x63,0x63,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x78,0x2d,0x73,0x69,0x7a,0x69,0x6e,0x67,0x3a,0x20,0x62, 0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x77,0x68,0x69,0x74,0x65,0x3b,0x0a,0x20,
0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x78,0x3b,0x0a,0x7d,0x0a,0x0a,0x66,0x6f,0x72,0x6d,0x20,0x69,0x6e,0x70,0x75,0x74, 0x20,0x63,0x75,0x72,0x73,0x6f,0x72,0x3a,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x66,0x6f,0x72,
0x5b,0x74,0x79,0x70,0x65,0x3d,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64,0x5d,0x2c,0x0a,0x66,0x6f,0x72,0x6d,0x20,0x69,0x6e, 0x6d,0x20,0x7b,0x0a,0x20,0x20,0x6d,0x61,0x78,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x34,0x30,0x30,0x70,0x78,0x3b,0x0a,
0x70,0x75,0x74,0x5b,0x74,0x79,0x70,0x65,0x3d,0x74,0x65,0x78,0x74,0x5d,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x72, 0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x2d,0x6c,0x65,0x66,0x74,0x3a,0x20,0x61,0x75,0x74,0x6f,0x3b,0x0a,0x20,0x20,0x6d,
0x67,0x69,0x6e,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x30,0x2e,0x32,0x35,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a, 0x61,0x72,0x67,0x69,0x6e,0x2d,0x72,0x69,0x67,0x68,0x74,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,
0x66,0x6f,0x72,0x6d,0x20,0x69,0x6e,0x70,0x75,0x74,0x5b,0x74,0x79,0x70,0x65,0x3d,0x73,0x75,0x62,0x6d,0x69,0x74,0x5d,0x20, 0x79,0x3a,0x20,0x66,0x6c,0x65,0x78,0x3b,0x0a,0x20,0x20,0x66,0x6c,0x65,0x78,0x2d,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,
0x7b,0x0a,0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x38,0x72,0x65,0x6d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x62, 0x6e,0x3a,0x20,0x63,0x6f,0x6c,0x75,0x6d,0x6e,0x3b,0x0a,0x20,0x20,0x61,0x6c,0x69,0x67,0x6e,0x2d,0x69,0x74,0x65,0x6d,0x73,
0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x77,0x68,0x69,0x74,0x65,0x3b,0x0a, 0x3a,0x20,0x66,0x6c,0x65,0x78,0x2d,0x65,0x6e,0x64,0x3b,0x0a,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,0x6e,
0x20,0x20,0x20,0x20,0x63,0x75,0x72,0x73,0x6f,0x72,0x3a,0x20,0x70,0x6f,0x69,0x6e,0x74,0x65,0x72,0x3b,0x0a,0x7d,0x0a,0x0a, 0x3a,0x20,0x72,0x69,0x67,0x68,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x66,0x6f,0x72,0x6d,0x20,0x3e,0x20,0x2a,0x20,0x7b,0x0a,0x20,
0x66,0x6f,0x72,0x6d,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x78,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x34,0x30, 0x20,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x31,0x30,0x30,0x25,0x3b,0x0a,0x7d,0x0a,0x0a,0x64,0x69,0x76,0x20,0x7b,0x0a,0x20,
0x30,0x70,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x2d,0x6c,0x65,0x66,0x74,0x3a,0x20,0x61,0x75, 0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x30,
0x74,0x6f,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x2d,0x72,0x69,0x67,0x68,0x74,0x3a,0x20,0x30,0x3b, 0x3b,0x0a,0x7d,0x0a,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x74,0x64,0x2c,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x74,0x68,0x20,
0x0a,0x20,0x20,0x20,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3a,0x20,0x66,0x6c,0x65,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20, 0x7b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x20,0x20,0x6d,0x61,0x72,0x67,
0x66,0x6c,0x65,0x78,0x2d,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x63,0x6f,0x6c,0x75,0x6d,0x6e,0x3b,0x0a, 0x69,0x6e,0x3a,0x20,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x7b,0x0a,0x20,0x20,0x6f,0x76,0x65,0x72,
0x20,0x20,0x20,0x20,0x61,0x6c,0x69,0x67,0x6e,0x2d,0x69,0x74,0x65,0x6d,0x73,0x3a,0x20,0x66,0x6c,0x65,0x78,0x2d,0x65,0x6e, 0x66,0x6c,0x6f,0x77,0x3a,0x20,0x68,0x69,0x64,0x64,0x65,0x6e,0x3b,0x0a,0x20,0x20,0x77,0x68,0x69,0x74,0x65,0x2d,0x73,0x70,
0x64,0x3b,0x0a,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,0x6e,0x3a,0x20,0x72,0x69,0x67,0x68,0x74, 0x61,0x63,0x65,0x3a,0x20,0x6e,0x6f,0x77,0x72,0x61,0x70,0x3b,0x0a,0x7d,0x0a,0x0a,0x61,0x2c,0x0a,0x61,0x3a,0x76,0x69,0x73,
0x3b,0x0a,0x7d,0x0a,0x0a,0x66,0x6f,0x72,0x6d,0x20,0x3e,0x20,0x2a,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74, 0x69,0x74,0x65,0x64,0x20,0x7b,0x0a,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x30,0x30,0x36,0x34,0x63,0x31,0x3b,
0x68,0x3a,0x20,0x31,0x30,0x30,0x25,0x3b,0x0a,0x7d,0x0a,0x0a,0x64,0x69,0x76,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61, 0x0a,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x64,0x65,0x63,0x6f,0x72,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x6e,0x6f,0x6e,0x65,
0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x30,0x3b, 0x3b,0x0a,0x7d,0x0a,0x0a,0x61,0x3a,0x68,0x6f,0x76,0x65,0x72,0x20,0x7b,0x0a,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x64,0x65,
0x0a,0x7d,0x0a,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x74,0x64,0x2c,0x20,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x74,0x68,0x20, 0x63,0x6f,0x72,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x75,0x6e,0x64,0x65,0x72,0x6c,0x69,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,
0x7b,0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x20,0x20,0x20,0x20, 0x23,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x20,0x3e,0x20,0x2a,0x20,0x7b,0x0a,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,
0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x74,0x61,0x62,0x6c,0x65,0x20,0x7b,0x0a,0x20,0x20, 0x20,0x76,0x61,0x72,0x28,0x2d,0x2d,0x70,0x61,0x64,0x2d,0x73,0x69,0x7a,0x65,0x29,0x20,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x23,
0x20,0x20,0x6f,0x76,0x65,0x72,0x66,0x6c,0x6f,0x77,0x3a,0x20,0x68,0x69,0x64,0x64,0x65,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20, 0x68,0x65,0x61,0x64,0x65,0x72,0x20,0x7b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,
0x77,0x68,0x69,0x74,0x65,0x2d,0x73,0x70,0x61,0x63,0x65,0x3a,0x20,0x6e,0x6f,0x77,0x72,0x61,0x70,0x3b,0x0a,0x7d,0x0a,0x0a, 0x3a,0x20,0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x61,0x3b,0x0a,0x7d,
0x61,0x2c,0x0a,0x61,0x3a,0x76,0x69,0x73,0x69,0x74,0x65,0x64,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72, 0x0a,0x0a,0x23,0x68,0x65,0x61,0x64,0x65,0x72,0x20,0x69,0x6d,0x67,0x20,0x7b,0x0a,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x3a,
0x3a,0x20,0x23,0x30,0x30,0x36,0x34,0x63,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x64,0x65,0x63,0x6f, 0x20,0x36,0x30,0x25,0x3b,0x0a,0x20,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3a,0x20,0x62,0x6c,0x6f,0x63,0x6b,0x3b,0x0a,
0x72,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x20,0x6e,0x6f,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x61,0x3a,0x68,0x6f,0x76,0x65,0x72, 0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x20,0x61,0x75,0x74,0x6f,0x3b,0x0a,0x20,0x20,0x68,0x65,0x69,0x67,
0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x64,0x65,0x63,0x6f,0x72,0x61,0x74,0x69,0x6f,0x6e,0x3a,0x20, 0x68,0x74,0x3a,0x20,0x61,0x75,0x74,0x6f,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x66,0x6c,0x61,0x73,0x68,0x2d,0x77,0x61,0x72,0x6e,
0x75,0x6e,0x64,0x65,0x72,0x6c,0x69,0x6e,0x65,0x3b,0x0a,0x7d,0x0a,0x0a,0x23,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x20,0x3e, 0x69,0x6e,0x67,0x20,0x7b,0x0a,0x20,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,0x6f,0x72,
0x20,0x2a,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x76,0x61,0x72,0x28,0x2d,0x2d,0x70, 0x3a,0x20,0x23,0x66,0x64,0x31,0x62,0x31,0x62,0x31,0x63,0x3b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x72,0x69,
0x61,0x64,0x2d,0x73,0x69,0x7a,0x65,0x29,0x20,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x23,0x68,0x65,0x61,0x64,0x65,0x72,0x20,0x7b, 0x67,0x68,0x74,0x3a,0x20,0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x66,0x64,0x31,0x62,0x31,0x62,0x31,0x63,
0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x32,0x70,0x78,0x20, 0x3b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x32,0x70,0x78,0x20,0x73,
0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x61,0x3b,0x0a,0x7d,0x0a,0x0a,0x23,0x68,0x65,0x61, 0x6f,0x6c,0x69,0x64,0x20,0x23,0x66,0x64,0x31,0x62,0x31,0x62,0x31,0x63,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x66,0x6c,0x61,0x73,
0x64,0x65,0x72,0x20,0x69,0x6d,0x67,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x36,0x30,0x25, 0x68,0x2d,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x20,0x7b,0x0a,0x20,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,
0x3b,0x0a,0x20,0x20,0x20,0x20,0x64,0x69,0x73,0x70,0x6c,0x61,0x79,0x3a,0x20,0x62,0x6c,0x6f,0x63,0x6b,0x3b,0x0a,0x20,0x20, 0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x31,0x35,0x66,0x66,0x35,0x34,0x32,0x34,0x3b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,
0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x3a,0x20,0x30,0x20,0x61,0x75,0x74,0x6f,0x3b,0x0a,0x20,0x20,0x20,0x20,0x68,0x65, 0x65,0x72,0x2d,0x72,0x69,0x67,0x68,0x74,0x3a,0x20,0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x31,0x35,0x66,
0x69,0x67,0x68,0x74,0x3a,0x20,0x61,0x75,0x74,0x6f,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x66,0x6c,0x61,0x73,0x68,0x2d,0x77,0x61, 0x66,0x35,0x34,0x32,0x34,0x3b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,
0x72,0x6e,0x69,0x6e,0x67,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63, 0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x31,0x35,0x66,0x66,0x35,0x34,0x32,0x34,0x3b,0x0a,0x7d,0x0a,0x0a,
0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x64,0x31,0x62,0x31,0x62,0x31,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x72, 0x2e,0x62,0x6f,0x78,0x20,0x7b,0x0a,0x20,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,0x6f,
0x64,0x65,0x72,0x2d,0x72,0x69,0x67,0x68,0x74,0x3a,0x20,0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x66,0x64, 0x72,0x3a,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x35,0x3b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x72,
0x31,0x62,0x31,0x62,0x31,0x63,0x3b,0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x74,0x74,0x6f, 0x69,0x67,0x68,0x74,0x3a,0x20,0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
0x6d,0x3a,0x20,0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x66,0x64,0x31,0x62,0x31,0x62,0x31,0x63,0x3b,0x0a, 0x63,0x3b,0x0a,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x32,0x70,0x78,0x20,
0x7d,0x0a,0x0a,0x2e,0x66,0x6c,0x61,0x73,0x68,0x2d,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x62, 0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x63,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x74,0x65,0x78,
0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x31,0x35,0x66,0x66,0x35,0x34, 0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x20,0x7b,0x0a,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,0x6e,0x3a,0x20,
0x32,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x72,0x69,0x67,0x68,0x74,0x3a,0x20,0x32,0x70, 0x72,0x69,0x67,0x68,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x2d,0x72,0x69,0x67,0x68,0x74,0x20,0x3e,
0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x31,0x35,0x66,0x66,0x35,0x34,0x32,0x34,0x3b,0x0a,0x20,0x20,0x20,0x20,0x62, 0x20,0x2a,0x20,0x7b,0x0a,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x2d,0x6c,0x65,0x66,0x74,0x3a,0x20,0x61,0x75,0x74,0x6f,
0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20, 0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x7b,0x0a,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,
0x23,0x31,0x35,0x66,0x66,0x35,0x34,0x32,0x34,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x62,0x6f,0x78,0x20,0x7b,0x0a,0x20,0x20,0x20, 0x3a,0x20,0x31,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x73,0x69,0x64,0x65,0x2d,0x70,0x61,0x64,0x64,0x65,0x64,0x20,
0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x30,0x30,0x30,0x30, 0x7b,0x0a,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x30,0x20,0x31,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,
0x30,0x30,0x30,0x35,0x3b,0x0a,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x72,0x69,0x67,0x68,0x74,0x3a,0x20, 0x2e,0x61,0x6e,0x67,0x72,0x79,0x20,0x7b,0x0a,0x20,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,
0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69,0x64,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x63,0x3b,0x0a,0x20,0x20,0x20, 0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x34,0x34,0x33,0x33,0x36,0x36,0x39,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x6c,0x69,0x67,0x68,
0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x32,0x70,0x78,0x20,0x73,0x6f,0x6c,0x69, 0x74,0x20,0x7b,0x0a,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x32,0x3b,0x0a,
0x64,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x63,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x74,0x65,0x78,0x74,0x2d,0x72,0x69, 0x7d,0x0a,0x0a,0x2e,0x65,0x6d,0x70,0x20,0x7b,0x0a,0x20,0x20,0x66,0x6f,0x6e,0x74,0x2d,0x73,0x74,0x79,0x6c,0x65,0x3a,0x20,
0x67,0x68,0x74,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c,0x69,0x67,0x6e,0x3a,0x20,0x72,0x69, 0x69,0x74,0x61,0x6c,0x69,0x63,0x3b,0x0a,0x7d,0x0a,
0x67,0x68,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x62,0x6c,0x6f,0x63,0x6b,0x2d,0x72,0x69,0x67,0x68,0x74,0x20,0x3e,0x20,0x2a,
0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x2d,0x6c,0x65,0x66,0x74,0x3a,0x20,0x61,0x75,0x74,0x6f,
0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x62,0x6f,0x78,0x2d,0x74,0x69,0x74,0x6c,0x65,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,
0x72,0x67,0x69,0x6e,0x2d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x20,0x30,0x2e,0x35,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,
0x2e,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x31,
0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x73,0x69,0x64,0x65,0x2d,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x7b,0x0a,0x20,
0x20,0x20,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x3a,0x20,0x30,0x20,0x31,0x72,0x65,0x6d,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,
0x61,0x6e,0x67,0x72,0x79,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,
0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x66,0x34,0x34,0x33,0x33,0x36,0x36,0x39,0x3b,0x0a,0x7d,0x0a,0x0a,0x2e,0x6c,0x69,0x67,
0x68,0x74,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x38,
0x32,0x3b,0x0a,0x7d,0x0a,
}}, }},
"partials/head.tmpl": &EmbeddedAsset{ "partials/head.tmpl": &EmbeddedAsset{
ModTime: time.Unix(1582000031, 0), ModTime: time.Unix(1583976324, 0),
Bytes: []byte{ Bytes: []byte{
0x7b,0x7b,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x22,0x68,0x65,0x61,0x64,0x22,0x20,0x7d,0x7d,0x0a,0x3c,0x6c,0x69,0x6e, 0x7b,0x7b,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x22,0x68,0x65,0x61,0x64,0x22,0x20,0x7d,0x7d,0x0a,0x3c,0x6c,0x69,0x6e,
0x6b,0x20,0x72,0x65,0x6c,0x3d,0x22,0x73,0x74,0x79,0x6c,0x65,0x73,0x68,0x65,0x65,0x74,0x22,0x20,0x68,0x72,0x65,0x66,0x3d, 0x6b,0x20,0x72,0x65,0x6c,0x3d,0x22,0x73,0x74,0x79,0x6c,0x65,0x73,0x68,0x65,0x65,0x74,0x22,0x20,0x68,0x72,0x65,0x66,0x3d,
@@ -10825,22 +10902,22 @@ var Bytes = map[string]*EmbeddedAsset{
0x72,0x69,0x61,0x6c,0x64,0x65,0x73,0x69,0x67,0x6e,0x69,0x63,0x6f,0x6e,0x73,0x2e,0x6d,0x69,0x6e,0x2e,0x63,0x73,0x73,0x22, 0x72,0x69,0x61,0x6c,0x64,0x65,0x73,0x69,0x67,0x6e,0x69,0x63,0x6f,0x6e,0x73,0x2e,0x6d,0x69,0x6e,0x2e,0x63,0x73,0x73,0x22,
0x3e,0x0a,0x3c,0x6c,0x69,0x6e,0x6b,0x20,0x72,0x65,0x6c,0x3d,0x22,0x73,0x74,0x79,0x6c,0x65,0x73,0x68,0x65,0x65,0x74,0x22, 0x3e,0x0a,0x3c,0x6c,0x69,0x6e,0x6b,0x20,0x72,0x65,0x6c,0x3d,0x22,0x73,0x74,0x79,0x6c,0x65,0x73,0x68,0x65,0x65,0x74,0x22,
0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73, 0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73,
0x74,0x61,0x74,0x69,0x63,0x2f,0x6d,0x61,0x69,0x6e,0x2e,0x63,0x73,0x73,0x22,0x20,0x7d,0x7d,0x22,0x3e,0x0a,0x3c,0x6c,0x69, 0x74,0x61,0x74,0x69,0x63,0x2f,0x6d,0x61,0x69,0x6e,0x2e,0x63,0x73,0x73,0x22,0x20,0x7c,0x20,0x6e,0x6f,0x43,0x61,0x63,0x68,
0x6e,0x6b,0x20,0x72,0x65,0x6c,0x3d,0x22,0x73,0x68,0x6f,0x72,0x74,0x63,0x75,0x74,0x20,0x69,0x63,0x6f,0x6e,0x22,0x20,0x68, 0x65,0x20,0x7d,0x7d,0x22,0x3e,0x0a,0x3c,0x6c,0x69,0x6e,0x6b,0x20,0x72,0x65,0x6c,0x3d,0x22,0x73,0x68,0x6f,0x72,0x74,0x63,
0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73,0x74,0x61, 0x75,0x74,0x20,0x69,0x63,0x6f,0x6e,0x22,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,
0x74,0x69,0x63,0x2f,0x66,0x61,0x76,0x69,0x63,0x6f,0x6e,0x2e,0x69,0x63,0x6f,0x22,0x20,0x7d,0x7d,0x22,0x20,0x74,0x79,0x70, 0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x66,0x61,0x76,0x69,0x63,0x6f,0x6e,0x2e,0x69,0x63,
0x65,0x3d,0x22,0x69,0x6d,0x61,0x67,0x65,0x2f,0x78,0x2d,0x69,0x63,0x6f,0x6e,0x22,0x3e,0x0a,0x3c,0x6c,0x69,0x6e,0x6b,0x20, 0x6f,0x22,0x20,0x7d,0x7d,0x22,0x20,0x74,0x79,0x70,0x65,0x3d,0x22,0x69,0x6d,0x61,0x67,0x65,0x2f,0x78,0x2d,0x69,0x63,0x6f,
0x72,0x65,0x6c,0x3d,0x22,0x69,0x63,0x6f,0x6e,0x22,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68, 0x6e,0x22,0x3e,0x0a,0x3c,0x6c,0x69,0x6e,0x6b,0x20,0x72,0x65,0x6c,0x3d,0x22,0x69,0x63,0x6f,0x6e,0x22,0x20,0x68,0x72,0x65,
0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x66,0x61,0x76,0x69,0x63,0x6f,0x6e,0x2e, 0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73,0x74,0x61,0x74,0x69,
0x69,0x63,0x6f,0x22,0x20,0x7d,0x7d,0x22,0x20,0x74,0x79,0x70,0x65,0x3d,0x22,0x69,0x6d,0x61,0x67,0x65,0x2f,0x78,0x2d,0x69, 0x63,0x2f,0x66,0x61,0x76,0x69,0x63,0x6f,0x6e,0x2e,0x69,0x63,0x6f,0x22,0x20,0x7d,0x7d,0x22,0x20,0x74,0x79,0x70,0x65,0x3d,
0x63,0x6f,0x6e,0x22,0x3e,0x0a,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f, 0x22,0x69,0x6d,0x61,0x67,0x65,0x2f,0x78,0x2d,0x69,0x63,0x6f,0x6e,0x22,0x3e,0x0a,0x3c,0x6d,0x65,0x74,0x61,0x20,0x6e,0x61,
0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63, 0x6d,0x65,0x3d,0x22,0x76,0x69,0x65,0x77,0x70,0x6f,0x72,0x74,0x22,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x77,
0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x20,0x69,0x6e,0x69,0x74,0x69,0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31, 0x69,0x64,0x74,0x68,0x3d,0x64,0x65,0x76,0x69,0x63,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x2c,0x20,0x69,0x6e,0x69,0x74,0x69,
0x2c,0x20,0x75,0x73,0x65,0x72,0x2d,0x73,0x63,0x61,0x6c,0x61,0x62,0x6c,0x65,0x3d,0x6e,0x6f,0x22,0x3e,0x0a,0x7b,0x7b,0x20, 0x61,0x6c,0x2d,0x73,0x63,0x61,0x6c,0x65,0x3d,0x31,0x2c,0x20,0x75,0x73,0x65,0x72,0x2d,0x73,0x63,0x61,0x6c,0x61,0x62,0x6c,
0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a, 0x65,0x3d,0x6e,0x6f,0x22,0x3e,0x0a,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,
}}, }},
"layouts/base.tmpl": &EmbeddedAsset{ "layouts/base.tmpl": &EmbeddedAsset{
ModTime: time.Unix(1582432328, 0), ModTime: time.Unix(1583976323, 0),
Bytes: []byte{ Bytes: []byte{
0x7b,0x7b,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x22,0x6c,0x61,0x79,0x6f,0x75,0x74,0x22,0x20,0x7d,0x7d,0x0a,0x3c,0x21, 0x7b,0x7b,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x22,0x6c,0x61,0x79,0x6f,0x75,0x74,0x22,0x20,0x7d,0x7d,0x0a,0x3c,0x21,
0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0a,0x20,0x20,0x20, 0x64,0x6f,0x63,0x74,0x79,0x70,0x65,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0a,0x20,0x20,0x20,
@@ -10852,36 +10929,39 @@ var Bytes = map[string]*EmbeddedAsset{
0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x69,0x64,0x3d,0x22,0x63,0x6f,0x6e,0x74,0x65,0x6e, 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x69,0x64,0x3d,0x22,0x63,0x6f,0x6e,0x74,0x65,0x6e,
0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x69,0x64,0x3d, 0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x69,0x64,0x3d,
0x22,0x68,0x65,0x61,0x64,0x65,0x72,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x22,0x68,0x65,0x61,0x64,0x65,0x72,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x3c,0x69,0x6d,0x67,0x20,0x73,0x72,0x63,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64, 0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x7b,0x7b,0x20,0x70,0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,
0x6d,0x69,0x6e,0x2f,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x67,0x6f,0x6e,0x69,0x63,0x2e,0x70,0x6e,0x67,0x22,0x20,0x7d,0x7d, 0x69,0x6e,0x2f,0x68,0x6f,0x6d,0x65,0x22,0x20,0x7d,0x7d,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x6d,0x67,0x20,0x73,0x72,0x63,0x3d,0x22,0x7b,0x7b,0x20,0x70,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,0x24,0x66,0x6c,0x61,0x73, 0x61,0x74,0x68,0x20,0x22,0x2f,0x61,0x64,0x6d,0x69,0x6e,0x2f,0x73,0x74,0x61,0x74,0x69,0x63,0x2f,0x67,0x6f,0x6e,0x69,0x63,
0x68,0x20,0x3a,0x3d,0x20,0x2e,0x46,0x6c,0x61,0x73,0x68,0x65,0x73,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x2e,0x70,0x6e,0x67,0x22,0x20,0x7d,0x7d,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,0x64,0x64,0x65,0x64,0x20, 0x20,0x20,0x20,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,
0x66,0x6c,0x61,0x73,0x68,0x2d,0x7b,0x7b,0x20,0x24,0x66,0x6c,0x61,0x73,0x68,0x2e,0x54,0x79,0x70,0x65,0x20,0x7d,0x7d,0x22, 0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x72,0x61,0x6e,0x67,0x65,0x20,
0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x69,0x20,0x63,0x6c,0x61, 0x24,0x66,0x6c,0x61,0x73,0x68,0x20,0x3a,0x3d,0x20,0x2e,0x46,0x6c,0x61,0x73,0x68,0x65,0x73,0x20,0x7d,0x7d,0x0a,0x20,0x20,
0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x61,0x6c,0x65,0x72,0x74,0x2d,0x63,0x69,0x72,0x63,0x6c,0x65, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x70,0x61,
0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x7b,0x7b,0x20,0x24,0x66,0x6c,0x61,0x73,0x68,0x2e,0x4d,0x65,0x73,0x73,0x61,0x67,0x65, 0x64,0x64,0x65,0x64,0x20,0x66,0x6c,0x61,0x73,0x68,0x2d,0x7b,0x7b,0x20,0x24,0x66,0x6c,0x61,0x73,0x68,0x2e,0x54,0x79,0x70,
0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20, 0x65,0x20,0x7d,0x7d,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20, 0x69,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6d,0x64,0x69,0x20,0x6d,0x64,0x69,0x2d,0x61,0x6c,0x65,0x72,0x74,0x2d,0x63,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x74,0x65,0x6d,0x70,0x6c,0x61,0x74,0x65,0x20,0x22,0x63,0x6f, 0x69,0x72,0x63,0x6c,0x65,0x22,0x3e,0x3c,0x2f,0x69,0x3e,0x20,0x7b,0x7b,0x20,0x24,0x66,0x6c,0x61,0x73,0x68,0x2e,0x4d,0x65,
0x6e,0x74,0x65,0x6e,0x74,0x22,0x20,0x2e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x73,0x73,0x61,0x67,0x65,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,
0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x73,0x69,0x64,0x65,0x2d,0x70,0x61,0x64,0x64,0x65,0x64,0x20, 0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,
0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x7b,0x20,0x74,0x65,0x6d,0x70,0x6c,0x61,0x74,
0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22, 0x65,0x20,0x22,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x22,0x20,0x2e,0x20,0x7d,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x3e,0x7b,0x7b,0x20,0x2e,0x56,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x7d,0x7d,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20, 0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x73,0x69,0x64,0x65,0x2d,0x70,0x61,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x65,0x6e,0x61,0x6e,0x20,0x6b,0x65,0x6c, 0x64,0x64,0x65,0x64,0x20,0x74,0x65,0x78,0x74,0x2d,0x72,0x69,0x67,0x68,0x74,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x6c,0x79,0x2c,0x20,0x32,0x30,0x32,0x30,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,
0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,0x22,0x3e,0x26,0x23,0x31, 0x69,0x67,0x68,0x74,0x22,0x3e,0x7b,0x7b,0x20,0x2e,0x56,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x7d,0x7d,0x3c,0x2f,0x73,0x70,
0x32,0x34,0x3b,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x65,0x6e,0x61,
0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x73,0x65,0x6e,0x61, 0x6e,0x20,0x6b,0x65,0x6c,0x6c,0x79,0x2c,0x20,0x32,0x30,0x32,0x30,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x6e,0x2e,0x78,0x79,0x7a,0x2f,0x67,0x2f,0x67,0x6f,0x6e,0x69,0x63,0x22,0x3e,0x67,0x69,0x74,0x68,0x75,0x62,0x3c,0x2f,0x61, 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x70,0x61,0x6e,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x6c,0x69,0x67,0x68,0x74,
0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20, 0x22,0x3e,0x26,0x23,0x31,0x32,0x34,0x3b,0x3c,0x2f,0x73,0x70,0x61,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0a, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,
0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0a,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a, 0x2f,0x73,0x65,0x6e,0x61,0x6e,0x2e,0x78,0x79,0x7a,0x2f,0x67,0x2f,0x67,0x6f,0x6e,0x69,0x63,0x22,0x3e,0x67,0x69,0x74,0x68,
0x75,0x62,0x3c,0x2f,0x61,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,
0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x62,
0x6f,0x64,0x79,0x3e,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0a,0x7b,0x7b,0x20,0x65,0x6e,0x64,0x20,0x7d,0x7d,0x0a,
}}, }},
"layouts/user.tmpl": &EmbeddedAsset{ "layouts/user.tmpl": &EmbeddedAsset{
ModTime: time.Unix(1582000031, 0), ModTime: time.Unix(1583945627, 0),
Bytes: []byte{ Bytes: []byte{
0x7b,0x7b,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x22,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x22,0x20,0x7d,0x7d,0x0a,0x3c, 0x7b,0x7b,0x20,0x64,0x65,0x66,0x69,0x6e,0x65,0x20,0x22,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x22,0x20,0x7d,0x7d,0x0a,0x3c,
0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x73,0x69,0x64,0x65,0x2d,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x6c, 0x64,0x69,0x76,0x20,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x73,0x69,0x64,0x65,0x2d,0x70,0x61,0x64,0x64,0x65,0x64,0x20,0x6c,

View File

@@ -9,7 +9,9 @@
<body> <body>
<div id="content"> <div id="content">
<div id="header"> <div id="header">
<img src="{{ path "/admin/static/gonic.png" }}"> <a href="{{ path "/admin/home" }}">
<img src="{{ path "/admin/static/gonic.png" }}">
</a>
</div> </div>
{{ range $flash := .Flashes }} {{ range $flash := .Flashes }}
<div class="padded flash-{{ $flash.Type }}"> <div class="padded flash-{{ $flash.Type }}">

View File

@@ -22,10 +22,6 @@
<i class="mdi mdi-lastfm"></i> last.fm <i class="mdi mdi-lastfm"></i> last.fm
</div> </div>
<div class="text-right"> <div class="text-right">
{{ if .User.IsAdmin }}
<p class="light">you can get an api key <a href="https://www.last.fm/api/account/create" target="_blank">here</a></p>
<a href="{{ path "/admin/update_lastfm_api_key" }}">update api key</a><br/>
{{ end }}
{{ if .CurrentLastFMAPIKey }} {{ if .CurrentLastFMAPIKey }}
<span class="light">current status</span> <span class="light">current status</span>
{{ if .User.LastFMSession }} {{ if .User.LastFMSession }}
@@ -34,12 +30,19 @@
<a href="{{ path "/admin/unlink_lastfm_do" }}">unlink</a><br/> <a href="{{ path "/admin/unlink_lastfm_do" }}">unlink</a><br/>
{{ else }} {{ else }}
<span class="angry">unlinked</span> <span class="angry">unlinked</span>
{{ $cbPath := path "/admin/link_lastfm_do" }} {{ $cbPath := path "/admin/link_lastfm_do" }}
{{ $cbURL := printf "%s%s" .RequestRoot $cbPath }} {{ $cbURL := printf "%s%s" .RequestRoot $cbPath }}
<a href="https://www.last.fm/api/auth/?api_key={{ .CurrentLastFMAPIKey }}&cb={{ $cbURL }}">link</a><br/> <a href="https://www.last.fm/api/auth/?api_key={{ .CurrentLastFMAPIKey }}&cb={{ $cbURL }}">link</a><br/>
{{ end }} {{ end }}
{{ else if not .User.IsAdmin }} {{ else }}
<span class="light">api key not set. please ask your admin to set it</span> <p class="light">api key not set</p>
{{ if not .User.IsAdmin }}
<p class="light">please ask your admin to set it</p>
{{ end }}
{{ end }}
{{ if .User.IsAdmin }}
<br/>
<p><a href="{{ path "/admin/update_lastfm_api_key" }}">update api key&#8230;</a></p>
{{ end }} {{ end }}
</div> </div>
</div> </div>
@@ -54,11 +57,17 @@
<i>{{ $user.Name }}</i> <i>{{ $user.Name }}</i>
<span class="light no-small">{{ $user.CreatedAt | date }}</span> <span class="light no-small">{{ $user.CreatedAt | date }}</span>
<span class="light">&#124;</span> <span class="light">&#124;</span>
<a href="{{ printf "/admin/change_password?user=%s" $user.Name | path }}">change password</a> <a href="{{ printf "/admin/change_password?user=%s" $user.Name | path }}">change password&#8230;</a>
<span class="light">&#124;</span> <span class="light">&#124;</span>
<a href="{{ printf "/admin/delete_user?user=%s" $user.Name | path }}">delete</a><br/> {{ if $user.IsAdmin }}
<span class="light">delete&#8230;</span>
{{ else }}
<a href="{{ printf "/admin/delete_user?user=%s" $user.Name | path }}">delete&#8230;</a>
{{ end }}
<br/>
{{ end }} {{ end }}
<a href="{{ path "/admin/create_user" }}" class="button">create new</a> <br/>
<a href="{{ path "/admin/create_user" }}" class="button">create new&#8230;</a>
</div> </div>
{{ else }} {{ else }}
{{/* user panel to manage themselves */}} {{/* user panel to manage themselves */}}
@@ -66,7 +75,7 @@
<i class="mdi mdi-account"></i> your account <i class="mdi mdi-account"></i> your account
</div> </div>
<div class="text-right"> <div class="text-right">
<a href="{{ path "/admin/change_own_password" }}" class="button">change password</a> <a href="{{ path "/admin/change_own_password" }}" class="button">change password&#8230;</a>
</div> </div>
{{ end }} {{ end }}
</div> </div>
@@ -87,14 +96,47 @@
{{ end }} {{ end }}
</table> </table>
{{- if not .IsScanning -}} {{- if not .IsScanning -}}
<a href="{{ path "/admin/start_scan_do" }}">start scan</a> <br/>
{{- if not .LastScanTime.IsZero -}} {{- if not .LastScanTime.IsZero -}}
<br> <p class="light" title="{{ .LastScanTime }}">scanned {{ .LastScanTime | dateHuman }}</p>
<span class="light" title="{{ .LastScanTime }}">scanned {{ .LastScanTime | dateHuman }}</span>
{{ end }} {{ end }}
<form action="{{ path "/admin/start_scan_do" }}" method="post">
<td><input type="submit" value="start scan"></td>
</form>
{{ end }} {{ end }}
</div> </div>
</div> </div>
<div class="padded box">
<div class="box-title">
<i class="mdi mdi-file-music"></i> transcoding device profiles
</div>
<div class="block-right">
<p class="light text-right">you can find your device's client name in the gonic logs</p>
<p class="light text-right">some common client names: "<span class="emp">DSub</span>", "<span class="emp">Jamstash</span>", "<span class="emp">Soundwaves</span>"</p>
<p class="light text-right">or use "*" as fallback rule for any client</p>
<br/>
<table id="transcode-preferences">
{{ range $pref := .TranscodePreferences }}
<tr>
<form id="transcode-pref-{{ $pref.Client }}" action="{{ printf "/admin/delete_transcode_pref_do?client=%s" $pref.Client | path }}" method="post"></form>
<td>{{ $pref.Client }}</td>
<td>{{ $pref.Profile }}</td>
<td><input form="transcode-pref-{{ $pref.Client }}" type="submit" value="delete"></td>
</tr>
{{ end }}
<tr>
<form id="transcode-pref-add" action="{{ path "/admin/create_transcode_pref_do" }}" method="post"></form>
<td><input form="transcode-pref-add" type="text" name="client" placeholder="client name"></td>
<td><select form="transcode-pref-add" name="profile">
{{ range $profile := .TranscodeProfiles }}
<option value="{{ $profile }}">{{ $profile }}</option>
{{ end }}
</select></td>
<td><input form="transcode-pref-add" type="submit" value="save"></td>
</tr>
</table>
</div>
</div>
<div class="padded box"> <div class="padded box">
<div class="box-title"> <div class="box-title">
<i class="mdi mdi-playlist-music"></i> playlists <i class="mdi mdi-playlist-music"></i> playlists
@@ -112,16 +154,17 @@
</tr> </tr>
{{ end }} {{ end }}
</table> </table>
<br/>
<form <form
id="playlist-upload-form" id="playlist-upload-form"
enctype="multipart/form-data" enctype="multipart/form-data"
action="{{ path "/admin/upload_playlist_do" }}" action="{{ path "/admin/upload_playlist_do" }}"
method="post" method="post"
> >
<label for="playlist-upload-input"> <div style="position: relative;">
<a>upload m3u8 files</a> <input id="playlist-upload-input" style="position: absolute; opacity: 0;" name="playlist-files" type="file" multiple />
</label> <input type="button" value="upload m3u8">
<input id="playlist-upload-input" name="playlist-files" type="file" multiple /> </div>
</form> </form>
<script> <script>
document.getElementById("playlist-upload-input").onchange = (e) => { document.getElementById("playlist-upload-input").onchange = (e) => {

View File

@@ -4,8 +4,10 @@
<i class="mdi mdi-key-change"></i> updating last.fm keys <i class="mdi mdi-key-change"></i> updating last.fm keys
</div> </div>
<div class="text-right"> <div class="text-right">
<span class="light">current key</span> <i>{{ default "not set" .CurrentLastFMAPIKey }}</i><br/> <p class="light">(you can get an api key <a href="https://www.last.fm/api/account/create" target="_blank">here</a>)</p>
<span class="light">current secret</span> <i>{{ default "not set" .CurrentLastFMAPISecret }}</i> <br/>
<p><span class="light">current key</span> <i>{{ default "not set" .CurrentLastFMAPIKey }}</i></p>
<p><span class="light">current secret</span> <i>{{ default "not set" .CurrentLastFMAPISecret }}</i></p>
</div> </div>
<form action="{{ path "/admin/update_lastfm_api_key_do" }}" method="post"> <form action="{{ path "/admin/update_lastfm_api_key_do" }}" method="post">
<input type="text" id="api_key" name="api_key" placeholder="new key"> <input type="text" id="api_key" name="api_key" placeholder="new key">

View File

@@ -1,7 +1,7 @@
{{ define "head" }} {{ define "head" }}
<link rel="stylesheet" href="{{ path "/admin/static/reset.css" }}"> <link rel="stylesheet" href="{{ path "/admin/static/reset.css" }}">
<link rel="stylesheet" href="https://cdn.materialdesignicons.com/3.6.95/css/materialdesignicons.min.css"> <link rel="stylesheet" href="https://cdn.materialdesignicons.com/3.6.95/css/materialdesignicons.min.css">
<link rel="stylesheet" href="{{ path "/admin/static/main.css" }}"> <link rel="stylesheet" href="{{ path "/admin/static/main.css" | noCache }}">
<link rel="shortcut icon" href="{{ path "/admin/static/favicon.ico" }}" type="image/x-icon"> <link rel="shortcut icon" href="{{ path "/admin/static/favicon.ico" }}" type="image/x-icon">
<link rel="icon" href="{{ path "/admin/static/favicon.ico" }}" type="image/x-icon"> <link rel="icon" href="{{ path "/admin/static/favicon.ico" }}" type="image/x-icon">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">

View File

@@ -2,160 +2,154 @@
--pad-size: 1.75rem; --pad-size: 1.75rem;
} }
*, span, div, .mdi { *,
font-family: monospace; span,
font-size: 0.8rem; div,
.mdi {
font-family: monospace;
font-size: 0.8rem;
} }
body { body {
max-width: 780px; max-width: 780px;
margin: 0 auto; margin: 0 auto;
padding: 0 var(--pad-size); padding: 0 var(--pad-size);
overflow-y: scroll; overflow-y: scroll;
font-size: 14px; font-size: 14px;
} }
table td:not(:last-child)::after { table td:not(:last-child)::after {
content: " "; content: " ";
white-space: pre; white-space: pre;
} }
@media only screen and (max-width: 780px) { @media only screen and (max-width: 780px) {
table#recent-folders td:first-child::after { table#recent-folders td:first-child::after {
content: ""; content: "";
} }
.no-small { .no-small {
display: none;
}
body {
font-size: 12px;
}
}
form input[type=file] {
display: none; display: none;
}
body {
font-size: 12px;
}
} }
form input[type], input,
form select, select,
form textarea { textarea {
margin-bottom: 0; border-radius: 0;
border: 1px solid #ccc;
box-sizing: border-box;
margin: 1px 0;
padding: 0;
height: 20px;
} }
form input { input[type="submit"],
padding: 3px; input[type="button"] {
border: 1px solid #ccc; width: 8rem;
box-sizing: border-box; background-color: white;
} cursor: pointer;
form input[type=password],
form input[type=text] {
margin-bottom: 0.25rem;
}
form input[type=submit] {
width: 8rem;
background-color: white;
cursor: pointer;
} }
form { form {
max-width: 400px; max-width: 400px;
margin-left: auto; margin-left: auto;
margin-right: 0; margin-right: 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: flex-end; align-items: flex-end;
text-align: right; text-align: right;
} }
form > * { form > * {
width: 100%; width: 100%;
} }
div { div {
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
table td, table td,
table th { table th {
border: none; border: none;
margin: 0; margin: 0;
} }
table { table {
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
} }
a, a,
a:visited { a:visited {
color: #0064c1; color: #0064c1;
text-decoration: none; text-decoration: none;
} }
a:hover { a:hover {
text-decoration: underline; text-decoration: underline;
} }
#content > * { #content > * {
margin: var(--pad-size) 0; margin: var(--pad-size) 0;
} }
#header { #header {
border-bottom: 2px solid #0000001a; border-bottom: 2px solid #0000001a;
} }
#header img { #header img {
width: 60%; width: 60%;
display: block; display: block;
margin: 0 auto; margin: 0 auto;
height: auto; height: auto;
} }
.flash-warning { .flash-warning {
background-color: #fd1b1b1c; background-color: #fd1b1b1c;
border-right: 2px solid #fd1b1b1c; border-right: 2px solid #fd1b1b1c;
border-bottom: 2px solid #fd1b1b1c; border-bottom: 2px solid #fd1b1b1c;
} }
.flash-normal { .flash-normal {
background-color: #15ff5424; background-color: #15ff5424;
border-right: 2px solid #15ff5424; border-right: 2px solid #15ff5424;
border-bottom: 2px solid #15ff5424; border-bottom: 2px solid #15ff5424;
} }
.box { .box {
background-color: #00000005; background-color: #00000005;
border-right: 2px solid #0000000c; border-right: 2px solid #0000000c;
border-bottom: 2px solid #0000000c; border-bottom: 2px solid #0000000c;
} }
.text-right { .text-right {
text-align: right; text-align: right;
} }
.block-right > * { .block-right > * {
margin-left: auto; margin-left: auto;
}
.box-title {
margin-bottom: 0.5rem;
} }
.padded { .padded {
padding: 1rem; padding: 1rem;
} }
.side-padded { .side-padded {
padding: 0 1rem; padding: 0 1rem;
} }
.angry { .angry {
background-color: #f4433669; background-color: #f4433669;
} }
.light { .light {
color: #00000082; color: #00000082;
}
.emp {
font-style: italic;
} }

View File

@@ -3,38 +3,133 @@
License: none (public domain) License: none (public domain)
*/ */
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { html,
margin: 0; body,
padding: 0; div,
border: 0; span,
font-size: 100%; applet,
font: inherit; object,
vertical-align: baseline; iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
b,
u,
i,
center,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
} }
/* html5 display-role reset for older browsers */ /* html5 display-role reset for older browsers */
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { article,
display: block; aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
display: block;
} }
body { body {
line-height: 1; line-height: 1;
} }
ol, ul { ol,
list-style: none; ul {
list-style: none;
} }
blockquote, q { blockquote,
quotes: none; q {
quotes: none;
} }
blockquote:before, blockquote:after, q:before, q:after { blockquote:before,
content: ''; blockquote:after,
content: none; q:before,
q:after {
content: "";
content: none;
} }
table { table {
border-collapse: collapse; border-collapse: collapse;
border-spacing: 0; border-spacing: 0;
} }

View File

@@ -20,7 +20,7 @@ func main() {
set := flag.NewFlagSet(version.NAME, flag.ExitOnError) set := flag.NewFlagSet(version.NAME, flag.ExitOnError)
listenAddr := set.String("listen-addr", "0.0.0.0:4747", "listen address (optional)") listenAddr := set.String("listen-addr", "0.0.0.0:4747", "listen address (optional)")
musicPath := set.String("music-path", "", "path to music") musicPath := set.String("music-path", "", "path to music")
cachePath := set.String("cache-path", "", "path to cache") cachePath := set.String("cache-path", "/tmp/gonic_cache", "path to cache")
dbPath := set.String("db-path", "gonic.db", "path to database (optional)") dbPath := set.String("db-path", "gonic.db", "path to database (optional)")
scanInterval := set.Int("scan-interval", 0, "interval (in minutes) to automatically scan music (optional)") scanInterval := set.Int("scan-interval", 0, "interval (in minutes) to automatically scan music (optional)")
proxyPrefix := set.String("proxy-prefix", "", "url path prefix to use if behind proxy. eg '/gonic' (optional)") proxyPrefix := set.String("proxy-prefix", "", "url path prefix to use if behind proxy. eg '/gonic' (optional)")
@@ -41,7 +41,9 @@ func main() {
log.Fatal("please provide a valid music directory") log.Fatal("please provide a valid music directory")
} }
if _, err := os.Stat(*cachePath); os.IsNotExist(err) { if _, err := os.Stat(*cachePath); os.IsNotExist(err) {
log.Fatal("please provide a valid cache directory") if err := os.MkdirAll(*cachePath, os.ModePerm); err != nil {
log.Fatalf("couldn't create cache path: %v\n", err)
}
} }
db, err := db.New(*dbPath) db, err := db.New(*dbPath)
if err != nil { if err != nil {

View File

@@ -40,6 +40,7 @@ func New(path string) (*DB, error) {
&migrationInitSchema, &migrationInitSchema,
&migrationCreateInitUser, &migrationCreateInitUser,
&migrationMergePlaylist, &migrationMergePlaylist,
&migrationCreateTranscode,
}) })
if err = migr.Migrate(); err != nil { if err = migr.Migrate(); err != nil {
return nil, errors.Wrap(err, "migrating to latest version") return nil, errors.Wrap(err, "migrating to latest version")

View File

@@ -6,6 +6,8 @@ import (
"gopkg.in/gormigrate.v1" "gopkg.in/gormigrate.v1"
) )
// $ date '+%Y%m%d%H%M'
// not really a migration // not really a migration
var migrationInitSchema = gormigrate.Migration{ var migrationInitSchema = gormigrate.Migration{
ID: "202002192100", ID: "202002192100",
@@ -67,3 +69,13 @@ var migrationMergePlaylist = gormigrate.Migration{
Error Error
}, },
} }
var migrationCreateTranscode = gormigrate.Migration{
ID: "202003111222",
Migrate: func(tx *gorm.DB) error {
return tx.AutoMigrate(
TranscodePreference{},
).
Error
},
}

View File

@@ -83,6 +83,17 @@ func (t *Track) MIME() string {
return mime.Types[ext] return mime.Types[ext]
} }
func (t *Track) RelPath() string {
if t.Album == nil {
return ""
}
return path.Join(
t.Album.LeftPath,
t.Album.RightPath,
t.Filename,
)
}
type User struct { type User struct {
ID int `gorm:"primary_key"` ID int `gorm:"primary_key"`
CreatedAt time.Time CreatedAt time.Time
@@ -176,3 +187,10 @@ func (p *PlayQueue) GetItems() []int {
func (p *PlayQueue) SetItems(items []int) { func (p *PlayQueue) SetItems(items []int) {
p.Items = joinInt(items, ",") p.Items = joinInt(items, ",")
} }
type TranscodePreference struct {
User *User
UserID int `sql:"default: null; type:int REFERENCES users(id) ON DELETE CASCADE"`
Client string `gorm:"not null; unique_index:idx_client_profile" sql:"default: null"`
Profile string `gorm:"not null; unique_index:idx_client_profile" sql:"default: null"`
}

View File

@@ -6,6 +6,7 @@ import (
"html/template" "html/template"
"log" "log"
"net/http" "net/http"
"net/url"
"path/filepath" "path/filepath"
"strings" "strings"
"time" "time"
@@ -83,6 +84,13 @@ func New(base *ctrlbase.Controller) *Controller {
"date": func(in time.Time) string { "date": func(in time.Time) string {
return strings.ToLower(in.Format("Jan 02, 2006")) return strings.ToLower(in.Format("Jan 02, 2006"))
}, },
"noCache": func(in string) string {
parsed, _ := url.Parse(in)
params := parsed.Query()
params.Set("v", version.VERSION)
parsed.RawQuery = params.Encode()
return parsed.String()
},
"dateHuman": humanize.Time, "dateHuman": humanize.Time,
"path": base.Path, "path": base.Path,
}) })
@@ -102,15 +110,17 @@ type templateData struct {
User *db.User User *db.User
Version string Version string
// home // home
AlbumCount int AlbumCount int
ArtistCount int ArtistCount int
TrackCount int TrackCount int
RequestRoot string RequestRoot string
RecentFolders []*db.Album RecentFolders []*db.Album
AllUsers []*db.User AllUsers []*db.User
LastScanTime time.Time LastScanTime time.Time
IsScanning bool IsScanning bool
Playlists []*db.Playlist Playlists []*db.Playlist
TranscodePreferences []*db.TranscodePreference
TranscodeProfiles []string
// //
CurrentLastFMAPIKey string CurrentLastFMAPIKey string
CurrentLastFMAPISecret string CurrentLastFMAPISecret string
@@ -132,6 +142,7 @@ type Response struct {
err string err string
} }
//nolint:gocognit
func (c *Controller) H(h adminHandler) http.Handler { func (c *Controller) H(h adminHandler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
resp := h(r) resp := h(r)

View File

@@ -28,6 +28,7 @@ func TestFirstExisting(t *testing.T) {
}, },
} }
for _, tc := range cases { for _, tc := range cases {
tc := tc // pin
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
actu := firstExisting(tc.or, tc.values...) actu := firstExisting(tc.or, tc.values...)
if actu != tc.exp { if actu != tc.exp {

View File

@@ -9,6 +9,7 @@ import (
"senan.xyz/g/gonic/db" "senan.xyz/g/gonic/db"
"senan.xyz/g/gonic/scanner" "senan.xyz/g/gonic/scanner"
"senan.xyz/g/gonic/server/encode"
"senan.xyz/g/gonic/server/lastfm" "senan.xyz/g/gonic/server/lastfm"
) )
@@ -53,12 +54,20 @@ func (c *Controller) ServeHome(r *http.Request) *Response {
i, _ := strconv.ParseInt(tStr, 10, 64) i, _ := strconv.ParseInt(tStr, 10, 64)
data.LastScanTime = time.Unix(i, 0) data.LastScanTime = time.Unix(i, 0)
} }
// ** begin playlists box //
user := r.Context().Value(CtxUser).(*db.User) user := r.Context().Value(CtxUser).(*db.User)
// ** begin playlists box
c.DB. c.DB.
Where("user_id=?", user.ID). Where("user_id=?", user.ID).
Limit(20). Limit(20).
Find(&data.Playlists) Find(&data.Playlists)
// ** begin transcoding box
c.DB.
Where("user_id=?", user.ID).
Find(&data.TranscodePreferences)
for profile := range encode.Profiles {
data.TranscodeProfiles = append(data.TranscodeProfiles, profile)
}
// //
return &Response{ return &Response{
template: "home.tmpl", template: "home.tmpl",
@@ -73,8 +82,7 @@ func (c *Controller) ServeChangeOwnPassword(r *http.Request) *Response {
func (c *Controller) ServeChangeOwnPasswordDo(r *http.Request) *Response { func (c *Controller) ServeChangeOwnPasswordDo(r *http.Request) *Response {
passwordOne := r.FormValue("password_one") passwordOne := r.FormValue("password_one")
passwordTwo := r.FormValue("password_two") passwordTwo := r.FormValue("password_two")
err := validatePasswords(passwordOne, passwordTwo) if err := validatePasswords(passwordOne, passwordTwo); err != nil {
if err != nil {
return &Response{ return &Response{
redirect: r.Referer(), redirect: r.Referer(),
flashW: []string{err.Error()}, flashW: []string{err.Error()},
@@ -145,8 +153,7 @@ func (c *Controller) ServeChangePasswordDo(r *http.Request) *Response {
username := r.URL.Query().Get("user") username := r.URL.Query().Get("user")
passwordOne := r.FormValue("password_one") passwordOne := r.FormValue("password_one")
passwordTwo := r.FormValue("password_two") passwordTwo := r.FormValue("password_two")
err := validatePasswords(passwordOne, passwordTwo) if err := validatePasswords(passwordOne, passwordTwo); err != nil {
if err != nil {
return &Response{ return &Response{
redirect: r.Referer(), redirect: r.Referer(),
flashW: []string{err.Error()}, flashW: []string{err.Error()},
@@ -184,6 +191,12 @@ func (c *Controller) ServeDeleteUser(r *http.Request) *Response {
func (c *Controller) ServeDeleteUserDo(r *http.Request) *Response { func (c *Controller) ServeDeleteUserDo(r *http.Request) *Response {
username := r.URL.Query().Get("user") username := r.URL.Query().Get("user")
user := c.DB.GetUserFromName(username) user := c.DB.GetUserFromName(username)
if user.IsAdmin {
return &Response{
redirect: "/admin/home",
flashW: []string{"can't delete the admin user"},
}
}
c.DB.Delete(user) c.DB.Delete(user)
return &Response{redirect: "/admin/home"} return &Response{redirect: "/admin/home"}
} }
@@ -214,8 +227,7 @@ func (c *Controller) ServeCreateUserDo(r *http.Request) *Response {
Name: username, Name: username,
Password: passwordOne, Password: passwordOne,
} }
err = c.DB.Create(&user).Error if err := c.DB.Create(&user).Error; err != nil {
if err != nil {
return &Response{ return &Response{
redirect: r.Referer(), redirect: r.Referer(),
flashW: []string{fmt.Sprintf("could not create user `%s`: %v", username, err)}, flashW: []string{fmt.Sprintf("could not create user `%s`: %v", username, err)},
@@ -291,3 +303,44 @@ func (c *Controller) ServeUploadPlaylistDo(r *http.Request) *Response {
flashW: errors, flashW: errors,
} }
} }
func (c *Controller) ServeCreateTranscodePrefDo(r *http.Request) *Response {
client := r.FormValue("client")
profile := r.FormValue("profile")
if client == "" {
return &Response{
redirect: "/admin/home",
flashW: []string{"please provide a client name"},
}
}
user := r.Context().Value(CtxUser).(*db.User)
pref := db.TranscodePreference{
UserID: user.ID,
Client: client,
Profile: profile,
}
if err := c.DB.Create(&pref).Error; err != nil {
return &Response{
redirect: "/admin/home",
flashW: []string{fmt.Sprintf("could not create preference: %v", err)},
}
}
return &Response{redirect: "/admin/home"}
}
func (c *Controller) ServeDeleteTranscodePrefDo(r *http.Request) *Response {
user := r.Context().Value(CtxUser).(*db.User)
client := r.URL.Query().Get("client")
if client == "" {
return &Response{
err: "please provide a client",
code: 400,
}
}
c.DB.
Where("user_id=? AND client=?", user.ID, client).
Delete(db.TranscodePreference{})
return &Response{
redirect: "/admin/home",
}
}

View File

@@ -1,7 +1,6 @@
package ctrlsubsonic package ctrlsubsonic
import ( import (
"fmt"
"log" "log"
"net/http" "net/http"
"sort" "sort"
@@ -131,7 +130,6 @@ func (c *Controller) ServeGetPlaylists(r *http.Request) *spec.Response {
sub.Playlists = &spec.Playlists{ sub.Playlists = &spec.Playlists{
List: make([]*spec.Playlist, len(playlists)), List: make([]*spec.Playlist, len(playlists)),
} }
fmt.Println("aaaa")
for i, playlist := range playlists { for i, playlist := range playlists {
sub.Playlists.List[i] = spec.NewPlaylist(playlist) sub.Playlists.List[i] = spec.NewPlaylist(playlist)
sub.Playlists.List[i].Owner = user.Name sub.Playlists.List[i].Owner = user.Name

View File

@@ -10,32 +10,11 @@ import (
"github.com/jinzhu/gorm" "github.com/jinzhu/gorm"
"senan.xyz/g/gonic/db" "senan.xyz/g/gonic/db"
"senan.xyz/g/gonic/mime"
"senan.xyz/g/gonic/server/ctrlsubsonic/encode"
"senan.xyz/g/gonic/server/ctrlsubsonic/params" "senan.xyz/g/gonic/server/ctrlsubsonic/params"
"senan.xyz/g/gonic/server/ctrlsubsonic/spec" "senan.xyz/g/gonic/server/ctrlsubsonic/spec"
"senan.xyz/g/gonic/server/encode"
) )
// Put special clients that can't handle Opus here:
func encodeProfileFor(client string) string {
switch client {
case "Soundwaves":
return "mp3_rg"
case "Jamstash":
return "opus_rg"
default:
return "opus"
}
}
func fileExists(filename string) bool {
info, err := os.Stat(filename)
if os.IsNotExist(err) {
return false
}
return !info.IsDir()
}
// "raw" handlers are ones that don't always return a spec response. // "raw" handlers are ones that don't always return a spec response.
// it could be a file, stream, etc. so you must either // it could be a file, stream, etc. so you must either
// a) write to response writer // a) write to response writer
@@ -69,6 +48,49 @@ func (c *Controller) ServeGetCoverArt(w http.ResponseWriter, r *http.Request) *s
return nil return nil
} }
func fileExists(filename string) bool {
info, err := os.Stat(filename)
if os.IsNotExist(err) {
return false
}
return !info.IsDir()
}
type serveTrackOptions struct {
track *db.Track
pref *db.TranscodePreference
maxBitrate int
cachePath string
musicPath string
}
func serveTrackRaw(w http.ResponseWriter, r *http.Request, opts serveTrackOptions) {
log.Printf("serving raw %q\n", opts.track.Filename)
w.Header().Set("Content-Type", opts.track.MIME())
trackPath := path.Join(opts.musicPath, opts.track.RelPath())
http.ServeFile(w, r, trackPath)
}
func serveTrackEncode(w http.ResponseWriter, r *http.Request, opts serveTrackOptions) {
profile := encode.Profiles[opts.pref.Profile]
bitrate := encode.GetBitrate(opts.maxBitrate, profile)
trackPath := path.Join(opts.musicPath, opts.track.RelPath())
cacheKey := encode.CacheKey(trackPath, opts.pref.Profile, bitrate)
cacheFile := path.Join(opts.cachePath, cacheKey)
if fileExists(cacheFile) {
log.Printf("serving transcode `%s`: cache [%s/%s] hit!\n", opts.track.Filename, profile.Format, bitrate)
http.ServeFile(w, r, cacheFile)
return
}
log.Printf("serving transcode `%s`: cache [%s/%s] miss!\n", opts.track.Filename, profile.Format, bitrate)
if err := encode.Encode(w, trackPath, cacheFile, profile, bitrate); err != nil {
log.Printf("error encoding %q: %v\n", trackPath, err)
return
}
log.Printf("serving transcode `%s`: encoded to [%s/%s] successfully\n",
opts.track.Filename, profile.Format, bitrate)
}
func (c *Controller) ServeStream(w http.ResponseWriter, r *http.Request) *spec.Response { func (c *Controller) ServeStream(w http.ResponseWriter, r *http.Request) *spec.Response {
params := r.Context().Value(CtxParams).(params.Params) params := r.Context().Value(CtxParams).(params.Params)
id, err := params.GetInt("id") id, err := params.GetInt("id")
@@ -83,8 +105,8 @@ func (c *Controller) ServeStream(w http.ResponseWriter, r *http.Request) *spec.R
if gorm.IsRecordNotFoundError(err) { if gorm.IsRecordNotFoundError(err) {
return spec.NewError(70, "media with id `%d` was not found", id) return spec.NewError(70, "media with id `%d` was not found", id)
} }
user := r.Context().Value(CtxUser).(*db.User)
defer func() { defer func() {
user := r.Context().Value(CtxUser).(*db.User)
play := db.Play{ play := db.Play{
AlbumID: track.Album.ID, AlbumID: track.Album.ID,
UserID: user.ID, UserID: user.ID,
@@ -96,34 +118,26 @@ func (c *Controller) ServeStream(w http.ResponseWriter, r *http.Request) *spec.R
play.Count++ // for getAlbumList?type=frequent play.Count++ // for getAlbumList?type=frequent
c.DB.Save(&play) c.DB.Save(&play)
}() }()
client := params.GetOr("c", "generic") client := params.Get("c")
maxBitrate, err := params.GetInt("maxBitRate") servOpts := serveTrackOptions{
if err != nil { track: track,
maxBitrate = 0 musicPath: c.MusicPath,
} }
pref := &db.TranscodePreference{}
absPath := path.Join( err = c.DB.
c.MusicPath, Where("user_id=?", user.ID).
track.Album.LeftPath, Where("client COLLATE NOCASE IN (?)", []string{"*", client}).
track.Album.RightPath, Order("client DESC"). // ensure "*" is last if it's there
track.Filename, First(pref).
) Error
profileName := encodeProfileFor(client) if gorm.IsRecordNotFoundError(err) {
profile := encode.Profiles[profileName] serveTrackRaw(w, r, servOpts)
bitrate := encode.GetBitrate(maxBitrate, profile)
cacheKey := encode.CacheKey(absPath, profileName, bitrate)
cacheFile := path.Join(c.CachePath, cacheKey)
if fileExists(cacheFile) {
log.Printf("track `%s`: cache [%s/%s] hit!\n", track.Filename, profile.Format, bitrate)
http.ServeFile(w, r, cacheFile)
return nil return nil
} }
log.Printf("track `%s`: cache [%s/%s] miss!\n", track.Filename, profile.Format, bitrate) servOpts.pref = pref
if err := encode.Encode(w, absPath, cacheFile, profile, bitrate); err != nil { servOpts.maxBitrate = params.GetIntOr("maxBitRate", 0)
log.Printf("error encoding %q: %v\n", absPath, err) servOpts.cachePath = c.CachePath
} serveTrackEncode(w, r, servOpts)
log.Printf("track `%s`: encoded to [%s/%s] successfully\n",
track.Filename, profile.Format, bitrate)
return nil return nil
} }
@@ -141,20 +155,9 @@ func (c *Controller) ServeDownload(w http.ResponseWriter, r *http.Request) *spec
if gorm.IsRecordNotFoundError(err) { if gorm.IsRecordNotFoundError(err) {
return spec.NewError(70, "media with id `%d` was not found", id) return spec.NewError(70, "media with id `%d` was not found", id)
} }
serveTrackRaw(w, r, serveTrackOptions{
absPath := path.Join( track: track,
c.MusicPath, musicPath: c.MusicPath,
track.Album.LeftPath, })
track.Album.RightPath,
track.Filename,
)
if mime, ok := mime.Types[track.Ext()]; ok {
w.Header().Set("Content-Type", mime)
}
http.ServeFile(w, r, absPath)
//
// We don't need to mark album/track as played
// if user just downloads a track, so bail out here:
return nil return nil
} }

View File

@@ -132,9 +132,10 @@ func Encode(out io.Writer, trackPath, cachePath string, profile *Profile, bitrat
} }
// Generate cache key (file name). For, you know, encoded tracks cache. // Generate cache key (file name). For, you know, encoded tracks cache.
func CacheKey(sourcePath string, profile string, bitrate string) string { func CacheKey(sourcePath string, profile, bitrate string) string {
format := Profiles[profile].Format format := Profiles[profile].Format
return fmt.Sprintf("%x-%s-%s.%s", xxhash.Sum64String(sourcePath), profile, bitrate, format) hash := xxhash.Sum64String(sourcePath)
return fmt.Sprintf("%x-%s-%s.%s", hash, profile, bitrate, format)
} }
// Check if client forces bitrate lower than set in profile: // Check if client forces bitrate lower than set in profile:

View File

@@ -108,6 +108,8 @@ func setupAdmin(r *mux.Router, ctrl *ctrladmin.Controller) {
routUser.Handle("/link_lastfm_do", ctrl.H(ctrl.ServeLinkLastFMDo)) routUser.Handle("/link_lastfm_do", ctrl.H(ctrl.ServeLinkLastFMDo))
routUser.Handle("/unlink_lastfm_do", ctrl.H(ctrl.ServeUnlinkLastFMDo)) routUser.Handle("/unlink_lastfm_do", ctrl.H(ctrl.ServeUnlinkLastFMDo))
routUser.Handle("/upload_playlist_do", ctrl.H(ctrl.ServeUploadPlaylistDo)) routUser.Handle("/upload_playlist_do", ctrl.H(ctrl.ServeUploadPlaylistDo))
routUser.Handle("/create_transcode_pref_do", ctrl.H(ctrl.ServeCreateTranscodePrefDo))
routUser.Handle("/delete_transcode_pref_do", ctrl.H(ctrl.ServeDeleteTranscodePrefDo))
// ** begin admin routes (if session is valid, and is admin) // ** begin admin routes (if session is valid, and is admin)
routAdmin := routUser.NewRoute().Subrouter() routAdmin := routUser.NewRoute().Subrouter()
routAdmin.Use(ctrl.WithAdminSession) routAdmin.Use(ctrl.WithAdminSession)