update dependencies

This commit is contained in:
Zack Scholl 2018-04-22 05:51:19 -06:00
parent 91178f4f29
commit f21c89f7bd
441 changed files with 31338 additions and 15958 deletions

46
Gopkg.lock generated
View File

@ -37,20 +37,20 @@
"internal",
"redis"
]
revision = "d1ed5c67e5794de818ea85e6b522fda02623a484"
version = "v1.4.0"
revision = "a69d19351219b6dd56f274f96d85a7014a2ec34e"
version = "v1.6.0"
[[projects]]
branch = "master"
name = "github.com/gin-contrib/multitemplate"
packages = ["."]
revision = "bbc6daf6024bc4c48f334a0490321cd48a24da3d"
revision = "d2d1ac3f563eac04b11ba01db7ac9f0eb9dc3a94"
[[projects]]
branch = "master"
name = "github.com/gin-contrib/sessions"
packages = ["."]
revision = "cccdeef56346e7037ca92de250c2b55ef5e7ffe3"
revision = "fda3be6efa2da56e31a1a72bffd65279191e8009"
[[projects]]
branch = "master"
@ -69,10 +69,10 @@
version = "v1.2"
[[projects]]
branch = "master"
name = "github.com/golang/protobuf"
packages = ["proto"]
revision = "1e59b77b52bf8e4b449a57e6f79f21226d571845"
revision = "925541529c1fa6821df4e44ce2723319eb2be768"
version = "v1.0.0"
[[projects]]
name = "github.com/gorilla/context"
@ -83,8 +83,8 @@
[[projects]]
name = "github.com/gorilla/securecookie"
packages = ["."]
revision = "667fe4e3466a040b780561fe9b51a83a3753eefc"
version = "v1.1"
revision = "e59506cc896acb7f7bf732d4fdf5e25f7ccd8983"
version = "v1.1.1"
[[projects]]
name = "github.com/gorilla/sessions"
@ -102,7 +102,7 @@
branch = "master"
name = "github.com/kidstuff/mongostore"
packages = ["."]
revision = "256d65ac5b0e35e7c5ebb3f175c0bed1e5c2b253"
revision = "db2a8b4fac1f737c75e7fb84cb3fdb07dfc8fbc9"
[[projects]]
name = "github.com/mattn/go-isatty"
@ -114,13 +114,13 @@
branch = "master"
name = "github.com/microcosm-cc/bluemonday"
packages = ["."]
revision = "542fd4642604d0d0c26112396ce5b1a9d01eee0b"
revision = "995366fdf961d03629cd17361bddd32745718e2c"
[[projects]]
name = "github.com/russross/blackfriday"
packages = ["."]
revision = "4048872b16cc0fc2c5fd9eacf0ed2c2fedaa0c8c"
version = "v1.5"
revision = "55d61fa8aa702f59229e6cff85793c22e580eaf5"
version = "v1.5.1"
[[projects]]
branch = "master"
@ -129,16 +129,16 @@
revision = "dcd61c7d42a11660da3789311050e961c0a5be55"
[[projects]]
branch = "master"
name = "github.com/schollz/versionedtext"
packages = ["."]
revision = "1cef32a305b7272d4df0454533de5e4ba67adfc1"
version = "v1.0.0"
[[projects]]
branch = "master"
name = "github.com/sergi/go-diff"
packages = ["diffmatchpatch"]
revision = "1744e2970ca51c86172c8190fadad617561ed6e7"
version = "v1.0.0"
[[projects]]
branch = "master"
@ -155,7 +155,7 @@
"reflectfind",
"reflectsource"
]
revision = "004faa6b0118cf52635363b72b51cdcc297800a2"
revision = "47fa5b7ceee66c60ac3a281416089035bf526a3c"
[[projects]]
branch = "master"
@ -167,7 +167,7 @@
branch = "master"
name = "github.com/shurcooL/graphql"
packages = ["ident"]
revision = "d0549edd16dceb6939e538fdb1b4f2ec7ee816cc"
revision = "3d276b9dcc6b1e0adf19557a8de5cb8632c07697"
[[projects]]
branch = "master"
@ -208,8 +208,8 @@
[[projects]]
name = "github.com/ugorji/go"
packages = ["codec"]
revision = "9831f2c3ac1068a78f50999a30db84270f647af6"
version = "v1.1"
revision = "b4c50a2b199d93b13dc15e78929cfb23bfdf21ab"
version = "v1.1.1"
[[projects]]
branch = "master"
@ -218,7 +218,7 @@
"bcrypt",
"blowfish"
]
revision = "39efaea5da11abd5e2b90a435b1f338cdb94619c"
revision = "e73bf333ef8920dbb52ad18d4bd38ad9d9bc76d7"
[[projects]]
branch = "master"
@ -227,13 +227,13 @@
"html",
"html/atom"
]
revision = "5ccada7d0a7ba9aeb5d3aca8d3501b4c2a509fec"
revision = "5f9ae10d9af5b1c89ae6904293b14b064d4ada23"
[[projects]]
branch = "master"
name = "golang.org/x/sys"
packages = ["unix"]
revision = "af50095a40f9041b3b38960738837185c26e9419"
revision = "79b0c6888797020a994db17c8510466c72fe75d9"
[[projects]]
name = "gopkg.in/go-playground/validator.v8"
@ -260,10 +260,10 @@
version = "v1.20.0"
[[projects]]
branch = "v2"
name = "gopkg.in/yaml.v2"
packages = ["."]
revision = "d670f9405373e636a5a2765eea47fac0c9bc91a4"
revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183"
version = "v2.2.1"
[solve-meta]
analyzer-name = "dep"

View File

@ -131,7 +131,7 @@ func staticCssBaseMinCss() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/css/base-min.css", size: 2195, mode: os.FileMode(436), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/css/base-min.css", size: 2195, mode: os.FileMode(436), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -151,7 +151,7 @@ func staticCssDefaultCss() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/css/default.css", size: 2476, mode: os.FileMode(436), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/css/default.css", size: 2476, mode: os.FileMode(436), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -171,7 +171,7 @@ func staticCssDropzoneCss() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/css/dropzone.css", size: 12587, mode: os.FileMode(436), modTime: time.Unix(1524034905, 0)}
info := bindataFileInfo{name: "static/css/dropzone.css", size: 12587, mode: os.FileMode(436), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -191,7 +191,7 @@ func staticCssGithubMarkdownCss() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/css/github-markdown.css", size: 11557, mode: os.FileMode(436), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/css/github-markdown.css", size: 11557, mode: os.FileMode(436), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -211,7 +211,7 @@ func staticCssHighlightCss() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/css/highlight.css", size: 776, mode: os.FileMode(436), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/css/highlight.css", size: 776, mode: os.FileMode(436), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -231,7 +231,7 @@ func staticCssMenusMinCss() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/css/menus-min.css", size: 2471, mode: os.FileMode(436), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/css/menus-min.css", size: 2471, mode: os.FileMode(436), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -251,7 +251,7 @@ func staticImgCowyoAndroidIcon144x144Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/android-icon-144x144.png", size: 6819, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/android-icon-144x144.png", size: 6819, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -271,7 +271,7 @@ func staticImgCowyoAndroidIcon192x192Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/android-icon-192x192.png", size: 8200, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/android-icon-192x192.png", size: 8200, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -291,7 +291,7 @@ func staticImgCowyoAndroidIcon36x36Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/android-icon-36x36.png", size: 1952, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/android-icon-36x36.png", size: 1952, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -311,7 +311,7 @@ func staticImgCowyoAndroidIcon48x48Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/android-icon-48x48.png", size: 2451, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/android-icon-48x48.png", size: 2451, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -331,7 +331,7 @@ func staticImgCowyoAndroidIcon72x72Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/android-icon-72x72.png", size: 3317, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/android-icon-72x72.png", size: 3317, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -351,7 +351,7 @@ func staticImgCowyoAndroidIcon96x96Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/android-icon-96x96.png", size: 4296, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/android-icon-96x96.png", size: 4296, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -371,7 +371,7 @@ func staticImgCowyoAppleIcon114x114Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-114x114.png", size: 5015, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-114x114.png", size: 5015, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -391,7 +391,7 @@ func staticImgCowyoAppleIcon120x120Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-120x120.png", size: 5365, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-120x120.png", size: 5365, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -411,7 +411,7 @@ func staticImgCowyoAppleIcon144x144Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-144x144.png", size: 6819, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-144x144.png", size: 6819, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -431,7 +431,7 @@ func staticImgCowyoAppleIcon152x152Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-152x152.png", size: 7402, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-152x152.png", size: 7402, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -451,7 +451,7 @@ func staticImgCowyoAppleIcon180x180Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-180x180.png", size: 9390, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-180x180.png", size: 9390, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -471,7 +471,7 @@ func staticImgCowyoAppleIcon57x57Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-57x57.png", size: 2792, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-57x57.png", size: 2792, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -491,7 +491,7 @@ func staticImgCowyoAppleIcon60x60Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-60x60.png", size: 2900, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-60x60.png", size: 2900, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -511,7 +511,7 @@ func staticImgCowyoAppleIcon72x72Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-72x72.png", size: 3317, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-72x72.png", size: 3317, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -531,7 +531,7 @@ func staticImgCowyoAppleIcon76x76Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-76x76.png", size: 3474, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-76x76.png", size: 3474, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -551,7 +551,7 @@ func staticImgCowyoAppleIconPrecomposedPng() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-precomposed.png", size: 8684, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon-precomposed.png", size: 8684, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -571,7 +571,7 @@ func staticImgCowyoAppleIconPng() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon.png", size: 8684, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/apple-icon.png", size: 8684, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -591,7 +591,7 @@ func staticImgCowyoBrowserconfigXml() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/browserconfig.xml", size: 281, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/browserconfig.xml", size: 281, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -611,7 +611,7 @@ func staticImgCowyoFavicon16x16Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/favicon-16x16.png", size: 381, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/favicon-16x16.png", size: 381, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -631,7 +631,7 @@ func staticImgCowyoFavicon32x32Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/favicon-32x32.png", size: 1793, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/favicon-32x32.png", size: 1793, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -651,7 +651,7 @@ func staticImgCowyoFavicon96x96Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/favicon-96x96.png", size: 4296, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/favicon-96x96.png", size: 4296, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -671,7 +671,7 @@ func staticImgCowyoFaviconIco() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/favicon.ico", size: 1150, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/favicon.ico", size: 1150, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -691,7 +691,7 @@ func staticImgCowyoManifestJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/manifest.json", size: 720, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/manifest.json", size: 720, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -711,7 +711,7 @@ func staticImgCowyoMsIcon144x144Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/ms-icon-144x144.png", size: 6819, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/ms-icon-144x144.png", size: 6819, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -731,7 +731,7 @@ func staticImgCowyoMsIcon150x150Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/ms-icon-150x150.png", size: 7255, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/ms-icon-150x150.png", size: 7255, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -751,7 +751,7 @@ func staticImgCowyoMsIcon310x310Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/ms-icon-310x310.png", size: 22194, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/ms-icon-310x310.png", size: 22194, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -771,7 +771,7 @@ func staticImgCowyoMsIcon70x70Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/cowyo/ms-icon-70x70.png", size: 3245, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/cowyo/ms-icon-70x70.png", size: 3245, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -791,7 +791,7 @@ func staticImgLogoPng() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/img/logo.png", size: 1962, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/img/logo.png", size: 1962, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -811,7 +811,7 @@ func staticJsCowyoJs() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/js/cowyo.js", size: 13588, mode: os.FileMode(436), modTime: time.Unix(1524196382, 0)}
info := bindataFileInfo{name: "static/js/cowyo.js", size: 13588, mode: os.FileMode(436), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -831,7 +831,7 @@ func staticJsDropzoneJs() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/js/dropzone.js", size: 120533, mode: os.FileMode(436), modTime: time.Unix(1524034905, 0)}
info := bindataFileInfo{name: "static/js/dropzone.js", size: 120533, mode: os.FileMode(436), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -851,7 +851,7 @@ func staticJsHighlightMinJs() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/js/highlight.min.js", size: 45164, mode: os.FileMode(436), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/js/highlight.min.js", size: 45164, mode: os.FileMode(436), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -871,7 +871,7 @@ func staticJsHighlightPackJs() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/js/highlight.pack.js", size: 45229, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/js/highlight.pack.js", size: 45229, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -891,7 +891,7 @@ func staticJsJquery183Js() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/js/jquery-1.8.3.js", size: 266057, mode: os.FileMode(436), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/js/jquery-1.8.3.js", size: 266057, mode: os.FileMode(436), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -911,7 +911,7 @@ func staticTextAdjectives() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/text/adjectives", size: 153332, mode: os.FileMode(436), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/text/adjectives", size: 153332, mode: os.FileMode(436), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -931,7 +931,7 @@ func staticTextAdjectivesOld() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/text/adjectives.old", size: 3316, mode: os.FileMode(436), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/text/adjectives.old", size: 3316, mode: os.FileMode(436), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -951,7 +951,7 @@ func staticTextAnimals() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/text/animals", size: 7533, mode: os.FileMode(436), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/text/animals", size: 7533, mode: os.FileMode(436), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -971,7 +971,7 @@ func staticTextAnimalsAll() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/text/animals.all", size: 47655, mode: os.FileMode(436), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/text/animals.all", size: 47655, mode: os.FileMode(436), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -991,7 +991,7 @@ func staticTextHowmanyPy() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/text/howmany.py", size: 639, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/text/howmany.py", size: 639, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -1011,7 +1011,7 @@ func staticTextRobotsTxt() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/text/robots.txt", size: 64, mode: os.FileMode(436), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/text/robots.txt", size: 64, mode: os.FileMode(436), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -1031,7 +1031,7 @@ func staticTextSitemapXml() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "static/text/sitemap.xml", size: 293, mode: os.FileMode(509), modTime: time.Unix(1522131184, 0)}
info := bindataFileInfo{name: "static/text/sitemap.xml", size: 293, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -1051,7 +1051,7 @@ func templatesIndexTmpl() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "templates/index.tmpl", size: 13524, mode: os.FileMode(509), modTime: time.Unix(1524035341, 0)}
info := bindataFileInfo{name: "templates/index.tmpl", size: 13524, mode: os.FileMode(509), modTime: time.Unix(1524397701, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}

View File

@ -5,11 +5,12 @@ services:
go:
- 1.4
- 1.5
- 1.6
- 1.7
- 1.8
- 1.9
- 1.5.x
- 1.6.x
- 1.7.x
- 1.8.x
- 1.9.x
- 1.10.x
- tip
script:

85
vendor/github.com/garyburd/redigo/redis/list_test.go generated vendored Normal file
View File

@ -0,0 +1,85 @@
// Copyright 2018 Gary Burd
//
// Licensed under the Apache License, Version 2.0 (the "License"): you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.
// +build go1.9
package redis
import "testing"
func TestPoolList(t *testing.T) {
var idle idleList
var a, b, c idleConn
check := func(ics ...*idleConn) {
if idle.count != len(ics) {
t.Fatal("idle.count != len(ics)")
}
if len(ics) == 0 {
if idle.front != nil {
t.Fatalf("front not nil")
}
if idle.back != nil {
t.Fatalf("back not nil")
}
return
}
if idle.front != ics[0] {
t.Fatal("front != ics[0]")
}
if idle.back != ics[len(ics)-1] {
t.Fatal("back != ics[len(ics)-1]")
}
if idle.front.prev != nil {
t.Fatal("front.prev != nil")
}
if idle.back.next != nil {
t.Fatal("back.next != nil")
}
for i := 1; i < len(ics)-1; i++ {
if ics[i-1].next != ics[i] {
t.Fatal("ics[i-1].next != ics[i]")
}
if ics[i+1].prev != ics[i] {
t.Fatal("ics[i+1].prev != ics[i]")
}
}
}
idle.pushFront(&c)
check(&c)
idle.pushFront(&b)
check(&b, &c)
idle.pushFront(&a)
check(&a, &b, &c)
idle.popFront()
check(&b, &c)
idle.popFront()
check(&c)
idle.popFront()
check()
idle.pushFront(&c)
check(&c)
idle.pushFront(&b)
check(&b, &c)
idle.pushFront(&a)
check(&a, &b, &c)
idle.popBack()
check(&a, &b)
idle.popBack()
check(&a)
idle.popBack()
check()
}

View File

@ -16,13 +16,13 @@ package redis
import (
"bytes"
"container/list"
"crypto/rand"
"crypto/sha1"
"errors"
"io"
"strconv"
"sync"
"sync/atomic"
"time"
"github.com/garyburd/redigo/internal"
@ -150,19 +150,13 @@ type Pool struct {
// for a connection to be returned to the pool before returning.
Wait bool
// mu protects fields defined below.
mu sync.Mutex
cond *sync.Cond
closed bool
active int
chInitialized uint32 // set to 1 when field ch is initialized
// Stack of idleConn with most recently used at the front.
idle list.List
}
type idleConn struct {
c Conn
t time.Time
mu sync.Mutex // mu protects the following fields
closed bool // set to true when the pool is closed.
active int // the number of open connections in the pool
ch chan struct{} // limits open connections when p.Wait is true
idle idleList // idle connections
}
// NewPool creates a new pool.
@ -178,7 +172,7 @@ func NewPool(newFn func() (Conn, error), maxIdle int) *Pool {
// getting an underlying connection, then the connection Err, Do, Send, Flush
// and Receive methods return that error.
func (p *Pool) Get() Conn {
c, err := p.get()
c, err := p.get(nil)
if err != nil {
return errorConnection{err}
}
@ -187,7 +181,8 @@ func (p *Pool) Get() Conn {
// PoolStats contains pool statistics.
type PoolStats struct {
// ActiveCount is the number of connections in the pool. The count includes idle connections and connections in use.
// ActiveCount is the number of connections in the pool. The count includes
// idle connections and connections in use.
ActiveCount int
// IdleCount is the number of idle connections in the pool.
IdleCount int
@ -198,14 +193,15 @@ func (p *Pool) Stats() PoolStats {
p.mu.Lock()
stats := PoolStats{
ActiveCount: p.active,
IdleCount: p.idle.Len(),
IdleCount: p.idle.count,
}
p.mu.Unlock()
return stats
}
// ActiveCount returns the number of connections in the pool. The count includes idle connections and connections in use.
// ActiveCount returns the number of connections in the pool. The count
// includes idle connections and connections in use.
func (p *Pool) ActiveCount() int {
p.mu.Lock()
active := p.active
@ -216,7 +212,7 @@ func (p *Pool) ActiveCount() int {
// IdleCount returns the number of idle connections in the pool.
func (p *Pool) IdleCount() int {
p.mu.Lock()
idle := p.idle.Len()
idle := p.idle.count
p.mu.Unlock()
return idle
}
@ -224,132 +220,146 @@ func (p *Pool) IdleCount() int {
// Close releases the resources used by the pool.
func (p *Pool) Close() error {
p.mu.Lock()
idle := p.idle
p.idle.Init()
if p.closed {
p.mu.Unlock()
return nil
}
p.closed = true
p.active -= idle.Len()
if p.cond != nil {
p.cond.Broadcast()
p.active -= p.idle.count
ic := p.idle.front
p.idle.count = 0
p.idle.front, p.idle.back = nil, nil
if p.ch != nil {
close(p.ch)
}
p.mu.Unlock()
for e := idle.Front(); e != nil; e = e.Next() {
e.Value.(idleConn).c.Close()
for ; ic != nil; ic = ic.next {
ic.c.Close()
}
return nil
}
// release decrements the active count and signals waiters. The caller must
// hold p.mu during the call.
func (p *Pool) release() {
p.active -= 1
if p.cond != nil {
p.cond.Signal()
func (p *Pool) lazyInit() {
// Fast path.
if atomic.LoadUint32(&p.chInitialized) == 1 {
return
}
// Slow path.
p.mu.Lock()
if p.chInitialized == 0 {
p.ch = make(chan struct{}, p.MaxActive)
if p.closed {
close(p.ch)
} else {
for i := 0; i < p.MaxActive; i++ {
p.ch <- struct{}{}
}
}
atomic.StoreUint32(&p.chInitialized, 1)
}
p.mu.Unlock()
}
// get prunes stale connections and returns a connection from the idle list or
// creates a new connection.
func (p *Pool) get() (Conn, error) {
func (p *Pool) get(ctx interface {
Done() <-chan struct{}
Err() error
}) (Conn, error) {
// Handle limit for p.Wait == true.
if p.Wait && p.MaxActive > 0 {
p.lazyInit()
if ctx == nil {
<-p.ch
} else {
select {
case <-p.ch:
case <-ctx.Done():
return nil, ctx.Err()
}
}
}
p.mu.Lock()
// Prune stale connections.
if timeout := p.IdleTimeout; timeout > 0 {
for i, n := 0, p.idle.Len(); i < n; i++ {
e := p.idle.Back()
if e == nil {
break
}
ic := e.Value.(idleConn)
if ic.t.Add(timeout).After(nowFunc()) {
break
}
p.idle.Remove(e)
p.release()
// Prune stale connections at the back of the idle list.
if p.IdleTimeout > 0 {
n := p.idle.count
for i := 0; i < n && p.idle.back != nil && p.idle.back.t.Add(p.IdleTimeout).Before(nowFunc()); i++ {
c := p.idle.back.c
p.idle.popBack()
p.mu.Unlock()
ic.c.Close()
c.Close()
p.mu.Lock()
p.active--
}
}
for {
// Get idle connection.
for i, n := 0, p.idle.Len(); i < n; i++ {
e := p.idle.Front()
if e == nil {
break
}
ic := e.Value.(idleConn)
p.idle.Remove(e)
test := p.TestOnBorrow
p.mu.Unlock()
if test == nil || test(ic.c, ic.t) == nil {
return ic.c, nil
}
ic.c.Close()
p.mu.Lock()
p.release()
// Get idle connection from the front of idle list.
for p.idle.front != nil {
ic := p.idle.front
p.idle.popFront()
p.mu.Unlock()
if p.TestOnBorrow == nil || p.TestOnBorrow(ic.c, ic.t) == nil {
return ic.c, nil
}
// Check for pool closed before dialing a new connection.
if p.closed {
p.mu.Unlock()
return nil, errors.New("redigo: get on closed pool")
}
// Dial new connection if under limit.
if p.MaxActive == 0 || p.active < p.MaxActive {
dial := p.Dial
p.active += 1
p.mu.Unlock()
c, err := dial()
if err != nil {
p.mu.Lock()
p.release()
p.mu.Unlock()
c = nil
}
return c, err
}
if !p.Wait {
p.mu.Unlock()
return nil, ErrPoolExhausted
}
if p.cond == nil {
p.cond = sync.NewCond(&p.mu)
}
p.cond.Wait()
ic.c.Close()
p.mu.Lock()
p.active--
}
// Check for pool closed before dialing a new connection.
if p.closed {
p.mu.Unlock()
return nil, errors.New("redigo: get on closed pool")
}
// Handle limit for p.Wait == false.
if !p.Wait && p.MaxActive > 0 && p.active >= p.MaxActive {
p.mu.Unlock()
return nil, ErrPoolExhausted
}
p.active++
p.mu.Unlock()
c, err := p.Dial()
if err != nil {
c = nil
p.mu.Lock()
p.active--
if p.ch != nil && !p.closed {
p.ch <- struct{}{}
}
p.mu.Unlock()
}
return c, err
}
func (p *Pool) put(c Conn, forceClose bool) error {
err := c.Err()
p.mu.Lock()
if !p.closed && err == nil && !forceClose {
p.idle.PushFront(idleConn{t: nowFunc(), c: c})
if p.idle.Len() > p.MaxIdle {
c = p.idle.Remove(p.idle.Back()).(idleConn).c
if !p.closed && !forceClose {
p.idle.pushFront(&idleConn{t: nowFunc(), c: c})
if p.idle.count > p.MaxIdle {
c = p.idle.back.c
p.idle.popBack()
} else {
c = nil
}
}
if c == nil {
if p.cond != nil {
p.cond.Signal()
}
if c != nil {
p.mu.Unlock()
return nil
c.Close()
p.mu.Lock()
p.active--
}
p.release()
if p.ch != nil && !p.closed {
p.ch <- struct{}{}
}
p.mu.Unlock()
return c.Close()
return nil
}
type pooledConnection struct {
@ -409,7 +419,7 @@ func (pc *pooledConnection) Close() error {
}
}
c.Do("")
pc.p.put(c, pc.state != 0)
pc.p.put(c, pc.state != 0 || c.Err() != nil)
return nil
}
@ -467,3 +477,51 @@ func (ec errorConnection) Close() error
func (ec errorConnection) Flush() error { return ec.err }
func (ec errorConnection) Receive() (interface{}, error) { return nil, ec.err }
func (ec errorConnection) ReceiveWithTimeout(time.Duration) (interface{}, error) { return nil, ec.err }
type idleList struct {
count int
front, back *idleConn
}
type idleConn struct {
c Conn
t time.Time
next, prev *idleConn
}
func (l *idleList) pushFront(ic *idleConn) {
ic.next = l.front
ic.prev = nil
if l.count == 0 {
l.back = ic
} else {
l.front.prev = ic
}
l.front = ic
l.count++
return
}
func (l *idleList) popFront() {
ic := l.front
l.count--
if l.count == 0 {
l.front, l.back = nil, nil
} else {
ic.next.prev = nil
l.front = ic.next
}
ic.next, ic.prev = nil, nil
}
func (l *idleList) popBack() {
ic := l.back
l.count--
if l.count == 0 {
l.front, l.back = nil, nil
} else {
ic.prev.next = nil
l.back = ic.prev
}
ic.next, ic.prev = nil, nil
}

35
vendor/github.com/garyburd/redigo/redis/pool17.go generated vendored Normal file
View File

@ -0,0 +1,35 @@
// Copyright 2018 Gary Burd
//
// Licensed under the Apache License, Version 2.0 (the "License"): you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.
// +build go1.7
package redis
import "context"
// GetContext gets a connection using the provided context.
//
// The provided Context must be non-nil. If the context expires before the
// connection is complete, an error is returned. Any expiration on the context
// will not affect the returned connection.
//
// If the function completes without error, then the application must close the
// returned connection.
func (p *Pool) GetContext(ctx context.Context) (Conn, error) {
c, err := p.get(ctx)
if err != nil {
return errorConnection{err}, err
}
return &pooledConnection{p: p, c: c}, nil
}

58
vendor/github.com/garyburd/redigo/redis/pool17_test.go generated vendored Normal file
View File

@ -0,0 +1,58 @@
// Copyright 2018 Gary Burd
//
// Licensed under the Apache License, Version 2.0 (the "License"): you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.
// +build go1.7
package redis_test
import (
"context"
"testing"
"github.com/garyburd/redigo/redis"
)
func TestWaitPoolGetAfterClose(t *testing.T) {
d := poolDialer{t: t}
p := &redis.Pool{
MaxIdle: 1,
MaxActive: 1,
Dial: d.dial,
Wait: true,
}
p.Close()
_, err := p.GetContext(context.Background())
if err == nil {
t.Fatal("expected error")
}
}
func TestWaitPoolGetCanceledContext(t *testing.T) {
d := poolDialer{t: t}
p := &redis.Pool{
MaxIdle: 1,
MaxActive: 1,
Dial: d.dial,
Wait: true,
}
defer p.Close()
ctx, f := context.WithCancel(context.Background())
f()
c := p.Get()
defer c.Close()
_, err := p.GetContext(ctx)
if err != context.Canceled {
t.Fatalf("got error %v, want %v", err, context.Canceled)
}
}

View File

@ -231,7 +231,7 @@ func TestPoolTimeout(t *testing.T) {
d.check("1", p, 1, 1, 0)
now = now.Add(p.IdleTimeout)
now = now.Add(p.IdleTimeout + 1)
c = p.Get()
c.Do("PING")
@ -445,9 +445,6 @@ func startGoroutines(p *redis.Pool, cmd string, args ...interface{}) chan error
}()
}
// Wait for goroutines to block.
time.Sleep(time.Second / 4)
return errs
}

View File

@ -84,8 +84,8 @@ var scanConversionTests = []struct {
{"1m", durationScan{Duration: time.Minute}},
{[]byte("1m"), durationScan{Duration: time.Minute}},
{time.Minute.Nanoseconds(), durationScan{Duration: time.Minute}},
{[]interface{}{[]byte("1m")}, []durationScan{durationScan{Duration: time.Minute}}},
{[]interface{}{[]byte("1m")}, []*durationScan{&durationScan{Duration: time.Minute}}},
{[]interface{}{[]byte("1m")}, []durationScan{{Duration: time.Minute}}},
{[]interface{}{[]byte("1m")}, []*durationScan{{Duration: time.Minute}}},
}
func TestScanConversion(t *testing.T) {
@ -318,7 +318,7 @@ var scanSliceTests = []struct {
[]interface{}{[]byte("a1"), []byte("b1"), []byte("a2"), []byte("b2")},
nil,
true,
[]*struct{ A, B string }{{"a1", "b1"}, {"a2", "b2"}},
[]*struct{ A, B string }{{A: "a1", B: "b1"}, {A: "a2", B: "b2"}},
},
{
[]interface{}{[]byte("a1"), []byte("b1"), []byte("a2"), []byte("b2")},

View File

@ -6,6 +6,7 @@ go:
- 1.7.x
- 1.8.x
- 1.9.x
- 1.10.x
- tip
install:

View File

@ -36,8 +36,8 @@ import (
"github.com/gin-gonic/gin"
)
func createMyRender() multitemplate.Render {
r := multitemplate.New()
func createMyRender() multitemplate.Renderer {
r := multitemplate.NewRenderer()
r.AddFromFiles("index", "templates/base.html", "templates/index.html")
r.AddFromFiles("article", "templates/base.html", "templates/index.html", "templates/article.html")
return r
@ -86,8 +86,8 @@ func main() {
router.Run(":8080")
}
func loadTemplates(templatesDir string) multitemplate.Render {
r := multitemplate.New()
func loadTemplates(templatesDir string) multitemplate.Renderer {
r := multitemplate.NewRenderer()
layouts, err := filepath.Glob(templatesDir + "/layouts/*.tmpl")
if err != nil {

147
vendor/github.com/gin-contrib/multitemplate/dynamic.go generated vendored Normal file
View File

@ -0,0 +1,147 @@
package multitemplate
import (
"fmt"
"html/template"
"path/filepath"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/render"
)
// DynamicRender type
type DynamicRender map[string]*templateBuilder
var (
_ render.HTMLRender = DynamicRender{}
_ Renderer = DynamicRender{}
)
// NewDynamic is the constructor for Dynamic templates
func NewDynamic() DynamicRender {
return make(DynamicRender)
}
// NewRenderer allows create an agnostic multitemplate renderer
// depending on enabled gin mode
func NewRenderer() Renderer {
if gin.IsDebugging() {
return NewDynamic()
}
return New()
}
// Type of dynamic builder
type builderType int
// Types of dynamic builders
const (
templateType builderType = iota
filesTemplateType
globTemplateType
stringTemplateType
stringFuncTemplateType
filesFuncTemplateType
)
// Builder for dynamic templates
type templateBuilder struct {
buildType builderType
tmpl *template.Template
templateName string
files []string
glob string
templateString string
funcMap template.FuncMap
templateStrings []string
}
func (tb templateBuilder) buildTemplate() *template.Template {
switch tb.buildType {
case templateType:
return tb.tmpl
case filesTemplateType:
return template.Must(template.ParseFiles(tb.files...))
case globTemplateType:
return template.Must(template.ParseGlob(tb.glob))
case stringTemplateType:
return template.Must(template.New(tb.templateName).Parse(tb.templateString))
case stringFuncTemplateType:
tmpl := template.New(tb.templateName).Funcs(tb.funcMap)
for _, ts := range tb.templateStrings {
tmpl = template.Must(tmpl.Parse(ts))
}
return tmpl
case filesFuncTemplateType:
return template.Must(template.New(tb.templateName).Funcs(tb.funcMap).ParseFiles(tb.files...))
default:
panic("Invalid builder type for dynamic template")
}
}
// Add new template
func (r DynamicRender) Add(name string, tmpl *template.Template) {
if tmpl == nil {
panic("template cannot be nil")
}
if len(name) == 0 {
panic("template name cannot be empty")
}
builder := &templateBuilder{templateName: name, tmpl: tmpl}
builder.buildType = templateType
r[name] = builder
}
// AddFromFiles supply add template from files
func (r DynamicRender) AddFromFiles(name string, files ...string) *template.Template {
builder := &templateBuilder{templateName: name, files: files}
builder.buildType = filesTemplateType
r[name] = builder
return builder.buildTemplate()
}
// AddFromGlob supply add template from global path
func (r DynamicRender) AddFromGlob(name, glob string) *template.Template {
builder := &templateBuilder{templateName: name, glob: glob}
builder.buildType = globTemplateType
r[name] = builder
return builder.buildTemplate()
}
// AddFromString supply add template from strings
func (r DynamicRender) AddFromString(name, templateString string) *template.Template {
builder := &templateBuilder{templateName: name, templateString: templateString}
builder.buildType = stringTemplateType
r[name] = builder
return builder.buildTemplate()
}
// AddFromStringsFuncs supply add template from strings
func (r DynamicRender) AddFromStringsFuncs(name string, funcMap template.FuncMap, templateStrings ...string) *template.Template {
builder := &templateBuilder{templateName: name, funcMap: funcMap,
templateStrings: templateStrings}
builder.buildType = stringFuncTemplateType
r[name] = builder
return builder.buildTemplate()
}
// AddFromFilesFuncs supply add template from file callback func
func (r DynamicRender) AddFromFilesFuncs(name string, funcMap template.FuncMap, files ...string) *template.Template {
tname := filepath.Base(files[0])
builder := &templateBuilder{templateName: tname, funcMap: funcMap, files: files}
builder.buildType = filesFuncTemplateType
r[name] = builder
return builder.buildTemplate()
}
// Instance supply render string
func (r DynamicRender) Instance(name string, data interface{}) render.Render {
builder, ok := r[name]
if !ok {
panic(fmt.Sprintf("Dynamic template with name %s not found", name))
}
return render.HTML{
Template: builder.buildTemplate(),
Data: data,
}
}

View File

@ -0,0 +1,172 @@
package multitemplate
import (
"html/template"
"testing"
"github.com/gin-gonic/gin"
"github.com/stretchr/testify/assert"
)
func createFromFileDynamic() Renderer {
r := NewRenderer()
r.AddFromFiles("index", "tests/base.html", "tests/article.html")
return r
}
func createFromGlobDynamic() Renderer {
r := NewRenderer()
r.AddFromGlob("index", "tests/global/*")
return r
}
func createFromStringDynamic() Renderer {
r := NewRenderer()
r.AddFromString("index", "Welcome to {{ .name }} template")
return r
}
func createFromStringsWithFuncsDynamic() Renderer {
r := NewRenderer()
r.AddFromStringsFuncs("index", template.FuncMap{}, `Welcome to {{ .name }} {{template "content"}}`, `{{define "content"}}template{{end}}`)
return r
}
func createFromFilesWithFuncsDynamic() Renderer {
r := NewRenderer()
r.AddFromFilesFuncs("index", template.FuncMap{}, "tests/welcome.html", "tests/content.html")
return r
}
func createFromTemplatesDynamic() Renderer {
tmpl := template.Must(template.New("test").Parse("Welcome to {{ .name }} template"))
r := NewRenderer()
r.Add("test", tmpl)
return r
}
func TestMissingTemplateOrNameDynamic(t *testing.T) {
r := NewRenderer()
tmpl := template.Must(template.New("test").Parse("Welcome to {{ .name }} template"))
assert.Panics(t, func() {
r.Add("", tmpl)
}, "template name cannot be empty")
assert.Panics(t, func() {
r.Add("test", nil)
}, "template can not be nil")
}
func TestAddFromFilesDynamic(t *testing.T) {
router := gin.New()
router.HTMLRender = createFromFileDynamic()
router.GET("/", func(c *gin.Context) {
c.HTML(200, "index", gin.H{
"title": "Test Multiple Template",
})
})
w := performRequest(router, "GET", "/")
assert.Equal(t, 200, w.Code)
assert.Equal(t, "<p>Test Multiple Template</p>\nHi, this is article template\n", w.Body.String())
}
func TestAddFromGlobDynamic(t *testing.T) {
router := gin.New()
router.HTMLRender = createFromGlobDynamic()
router.GET("/", func(c *gin.Context) {
c.HTML(200, "index", gin.H{
"title": "Test Multiple Template",
})
})
w := performRequest(router, "GET", "/")
assert.Equal(t, 200, w.Code)
assert.Equal(t, "<p>Test Multiple Template</p>\nHi, this is login template\n", w.Body.String())
}
func TestAddFromStringDynamic(t *testing.T) {
router := gin.New()
router.HTMLRender = createFromStringDynamic()
router.GET("/", func(c *gin.Context) {
c.HTML(200, "index", gin.H{
"name": "index",
})
})
w := performRequest(router, "GET", "/")
assert.Equal(t, 200, w.Code)
assert.Equal(t, "Welcome to index template", w.Body.String())
}
func TestAddFromStringsFruncsDynamic(t *testing.T) {
router := gin.New()
router.HTMLRender = createFromStringsWithFuncsDynamic()
router.GET("/", func(c *gin.Context) {
c.HTML(200, "index", gin.H{
"name": "index",
})
})
w := performRequest(router, "GET", "/")
assert.Equal(t, 200, w.Code)
assert.Equal(t, "Welcome to index template", w.Body.String())
}
func TestAddFromFilesFruncsDynamic(t *testing.T) {
router := gin.New()
router.HTMLRender = createFromFilesWithFuncsDynamic()
router.GET("/", func(c *gin.Context) {
c.HTML(200, "index", gin.H{
"name": "index",
})
})
w := performRequest(router, "GET", "/")
assert.Equal(t, 200, w.Code)
assert.Equal(t, "Welcome to index template\n", w.Body.String())
}
func TestPanicInvalidTypeBuilder(t *testing.T) {
assert.Panics(t, func() {
var b = templateBuilder{}
b.buildType = 10
b.buildTemplate()
})
}
func TestTemplateNotFound(t *testing.T) {
r := make(DynamicRender)
r.AddFromString("index", "This is a test template")
assert.Panics(t, func() {
r.Instance("NotFoundTemplate", nil)
})
}
func TestNotDynamicMode(t *testing.T) {
gin.SetMode("test")
TestAddFromFilesDynamic(t)
gin.SetMode("debug")
}
func TestAddTemplate(t *testing.T) {
tmpl := template.Must(template.ParseFiles("tests/base.html", "tests/article.html"))
b := templateBuilder{}
b.buildType = templateType
b.tmpl = tmpl
tmpl = b.buildTemplate()
assert.NotPanics(t, func() {
b.buildTemplate()
})
}
func TestAddingTemplate(t *testing.T) {
assert.NotPanics(t, func() {
createFromTemplatesDynamic()
})
}

View File

@ -5,8 +5,8 @@ import (
"github.com/gin-gonic/gin"
)
func createMyRender() multitemplate.Render {
r := multitemplate.New()
func createMyRender() multitemplate.Renderer {
r := multitemplate.NewRenderer()
r.AddFromFiles("index", "templates/base.html", "templates/index.html")
r.AddFromFiles("article", "templates/base.html", "templates/index.html", "templates/article.html")
return r

View File

@ -1,6 +1,7 @@
package multitemplate
import (
"fmt"
"html/template"
"path/filepath"
@ -10,7 +11,10 @@ import (
// Render type
type Render map[string]*template.Template
var _ render.HTMLRender = Render{}
var (
_ render.HTMLRender = Render{}
_ Renderer = Render{}
)
// New instance
func New() Render {
@ -25,6 +29,9 @@ func (r Render) Add(name string, tmpl *template.Template) {
if len(name) == 0 {
panic("template name cannot be empty")
}
if _, ok := r[name]; ok {
panic(fmt.Sprintf("template %s already exists", name))
}
r[name] = tmpl
}
@ -43,14 +50,14 @@ func (r Render) AddFromGlob(name, glob string) *template.Template {
}
// AddFromString supply add template from strings
func (r *Render) AddFromString(name, templateString string) *template.Template {
func (r Render) AddFromString(name, templateString string) *template.Template {
tmpl := template.Must(template.New(name).Parse(templateString))
r.Add(name, tmpl)
return tmpl
}
// AddFromStringsFuncs supply add template from strings
func (r *Render) AddFromStringsFuncs(name string, funcMap template.FuncMap, templateStrings ...string) *template.Template {
func (r Render) AddFromStringsFuncs(name string, funcMap template.FuncMap, templateStrings ...string) *template.Template {
tmpl := template.New(name).Funcs(funcMap)
for _, ts := range templateStrings {

View File

@ -140,3 +140,11 @@ func TestAddFromFilesFruncs(t *testing.T) {
assert.Equal(t, 200, w.Code)
assert.Equal(t, "Welcome to index template\n", w.Body.String())
}
func TestDuplicateTemplate(t *testing.T) {
assert.Panics(t, func() {
r := New()
r.AddFromString("index", "Welcome to {{ .name }} template")
r.AddFromString("index", "Welcome to {{ .name }} template")
})
}

View File

@ -0,0 +1,18 @@
package multitemplate
import "html/template"
import "github.com/gin-gonic/gin/render"
// Renderer type is the Agnostic Renderer for multitemplates.
// When gin is in debug mode then all multitemplates works with
// hot reloading allowing you modify file templates and seeing changes instantly.
// Renderer should be created using multitemplate.NewRenderer() constructor.
type Renderer interface {
render.HTMLRender
Add(name string, tmpl *template.Template)
AddFromFiles(name string, files ...string) *template.Template
AddFromGlob(name, glob string) *template.Template
AddFromString(name, templateString string) *template.Template
AddFromStringsFuncs(name string, funcMap template.FuncMap, templateStrings ...string) *template.Template
AddFromFilesFuncs(name string, funcMap template.FuncMap, files ...string) *template.Template
}

View File

@ -6,6 +6,7 @@ go:
- 1.7.x
- 1.8.x
- 1.9.x
- 1.10.x
- tip
services:

View File

@ -193,7 +193,8 @@ func (m *Marshaler) marshalObject(out *errWriter, v proto.Message, indent, typeU
// "Generated output always contains 3, 6, or 9 fractional digits,
// depending on required precision."
s, ns := s.Field(0).Int(), s.Field(1).Int()
x := fmt.Sprintf("%d.%09d", s, ns)
d := time.Duration(s)*time.Second + time.Duration(ns)*time.Nanosecond
x := fmt.Sprintf("%.9f", d.Seconds())
x = strings.TrimSuffix(x, "000")
x = strings.TrimSuffix(x, "000")
out.write(`"`)

View File

@ -407,7 +407,6 @@ var marshalingTests = []struct {
{"Any with WKT", marshaler, anyWellKnown, anyWellKnownJSON},
{"Any with WKT and indent", marshalerAllOptions, anyWellKnown, anyWellKnownPrettyJSON},
{"Duration", marshaler, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: 3}}, `{"dur":"3.000s"}`},
{"Duration", marshaler, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: 100000000, Nanos: 1}}, `{"dur":"100000000.000000001s"}`},
{"Struct", marshaler, &pb.KnownTypes{St: &stpb.Struct{
Fields: map[string]*stpb.Value{
"one": {Kind: &stpb.Value_StringValue{"loneliest number"}},

151
vendor/github.com/golang/protobuf/proto/discard.go generated vendored Normal file
View File

@ -0,0 +1,151 @@
// Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2017 The Go Authors. All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package proto
import (
"fmt"
"reflect"
"strings"
)
// DiscardUnknown recursively discards all unknown fields from this message
// and all embedded messages.
//
// When unmarshaling a message with unrecognized fields, the tags and values
// of such fields are preserved in the Message. This allows a later call to
// marshal to be able to produce a message that continues to have those
// unrecognized fields. To avoid this, DiscardUnknown is used to
// explicitly clear the unknown fields after unmarshaling.
//
// For proto2 messages, the unknown fields of message extensions are only
// discarded from messages that have been accessed via GetExtension.
func DiscardUnknown(m Message) {
discardLegacy(m)
}
func discardLegacy(m Message) {
v := reflect.ValueOf(m)
if v.Kind() != reflect.Ptr || v.IsNil() {
return
}
v = v.Elem()
if v.Kind() != reflect.Struct {
return
}
t := v.Type()
for i := 0; i < v.NumField(); i++ {
f := t.Field(i)
if strings.HasPrefix(f.Name, "XXX_") {
continue
}
vf := v.Field(i)
tf := f.Type
// Unwrap tf to get its most basic type.
var isPointer, isSlice bool
if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {
isSlice = true
tf = tf.Elem()
}
if tf.Kind() == reflect.Ptr {
isPointer = true
tf = tf.Elem()
}
if isPointer && isSlice && tf.Kind() != reflect.Struct {
panic(fmt.Sprintf("%T.%s cannot be a slice of pointers to primitive types", m, f.Name))
}
switch tf.Kind() {
case reflect.Struct:
switch {
case !isPointer:
panic(fmt.Sprintf("%T.%s cannot be a direct struct value", m, f.Name))
case isSlice: // E.g., []*pb.T
for j := 0; j < vf.Len(); j++ {
discardLegacy(vf.Index(j).Interface().(Message))
}
default: // E.g., *pb.T
discardLegacy(vf.Interface().(Message))
}
case reflect.Map:
switch {
case isPointer || isSlice:
panic(fmt.Sprintf("%T.%s cannot be a pointer to a map or a slice of map values", m, f.Name))
default: // E.g., map[K]V
tv := vf.Type().Elem()
if tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T)
for _, key := range vf.MapKeys() {
val := vf.MapIndex(key)
discardLegacy(val.Interface().(Message))
}
}
}
case reflect.Interface:
// Must be oneof field.
switch {
case isPointer || isSlice:
panic(fmt.Sprintf("%T.%s cannot be a pointer to a interface or a slice of interface values", m, f.Name))
default: // E.g., test_proto.isCommunique_Union interface
if !vf.IsNil() && f.Tag.Get("protobuf_oneof") != "" {
vf = vf.Elem() // E.g., *test_proto.Communique_Msg
if !vf.IsNil() {
vf = vf.Elem() // E.g., test_proto.Communique_Msg
vf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value
if vf.Kind() == reflect.Ptr {
discardLegacy(vf.Interface().(Message))
}
}
}
}
}
}
if vf := v.FieldByName("XXX_unrecognized"); vf.IsValid() {
if vf.Type() != reflect.TypeOf([]byte{}) {
panic("expected XXX_unrecognized to be of type []byte")
}
vf.Set(reflect.ValueOf([]byte(nil)))
}
// For proto2 messages, only discard unknown fields in message extensions
// that have been accessed via GetExtension.
if em, ok := extendable(m); ok {
// Ignore lock since discardLegacy is not concurrency safe.
emm, _ := em.extensionsRead()
for _, mx := range emm {
if m, ok := mx.value.(Message); ok {
discardLegacy(m)
}
}
}
}

View File

@ -7,6 +7,7 @@ matrix:
- go: 1.4
- go: 1.5
- go: 1.6
- go: 1.7
- go: tip
allow_failures:
- go: tip

View File

@ -1,6 +1,8 @@
securecookie
============
[![GoDoc](https://godoc.org/github.com/gorilla/securecookie?status.svg)](https://godoc.org/github.com/gorilla/securecookie) [![Build Status](https://travis-ci.org/gorilla/securecookie.png?branch=master)](https://travis-ci.org/gorilla/securecookie)
[![Sourcegraph](https://sourcegraph.com/github.com/gorilla/securecookie/-/badge.svg)](https://sourcegraph.com/github.com/gorilla/securecookie?badge)
securecookie encodes and decodes authenticated and optionally encrypted
cookie values.
@ -45,6 +47,8 @@ func SetCookieHandler(w http.ResponseWriter, r *http.Request) {
Name: "cookie-name",
Value: encoded,
Path: "/",
Secure: true,
HttpOnly: true,
}
http.SetCookie(w, cookie)
}

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxjRDhCaG9WdS1IMUVoSVc0N0RRYVVMX0ZJcHlPNU9vZ0tLNnhaSm94U3dWVFRFUzBxZ3FTOEtnMWt5d1JsZnRvVFJSTy1VNEFqUXJfVGp0dVBKWTRpTHp0SjhyUlJWbEpMVlF2ZV9CdU5Vb2d0cEE9fFomN3uC7sVpjIiNqJ7nSmSW0OcB-1nXJndHHUK35Z_o

View File

@ -0,0 +1,3 @@


View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxURmd2SUVTenFSNDBMTU84ZDkxY01Kc1JhVTY2dnFqdjUtOFRQZ3p4N2FiN3ctMWVtSnVtZ1kxVjZkR24wdVVWWG9keHMwZXFXek9XTUs0QVo4dXNkZFdPQXRScUo5RzJLZG8teGVNLXFEMEJwcE1lTk9GeVprdjJ0SlpjRkVfbEZBLS1TNXlmTlFidWZCWkh5TEE2WE5YaERuenZjZTZWczFyV0xONFEyc0hWNjZ6RFBGUlFxaUdBcjlZOF9SMzBTV1ctb25NLWxxUWh5X2hhNk1jd3plaWZ0NFV0cGNRYWpqSjlWSjMzUU9QSHdMUUlYdVVQVHNHOEJsd2tra2h3ODJtWkVkRVhLQ0ZRNUJlZVdva0U3RWRyWk1NaTZjaEhOdkppejNnPXyQsRqNFNx_AMU6do1StnhxPHRr3HHtfu7dVvDF3qiDNQ==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxROFk0ZzZkLTYwWWx1NlJOVFdRZS1YeEZkVGN3TkI5bXdlRkFtTkFTRXZKck1aSGI4TVJ3Vy1Sc2FVWFI4N3REYU9DYzdLb1JRQjBMemhtNHhaOUtMNnhlQjZhUExUeEVwOEJJXzNVcnhqMzZsc2ZyVDFPdlBrcVAxQjhwTE9JdFF2WG9FTWxqcjFWT1ZGZ20yVVdDckFVUE1QQW1EbURlU3lxcEJYRmh3RllhRkNaQnFDNXNGWGx1bm1vYWd3RFF3VWlxaVgtckhkTWZldktzWkZvcFpHTkxwd1Y1SENqdGFpbE9VOUpRZkhSN2RKcHJ4akhteFE4Z2xodVZRSWRyUk83WHpQbW04dEZFVi04Zkd5VHR2WFdGcUdvQWRlWWs4dnZGVUlNRjF1VT18Ylj4DXWIZQD6Tmf1UTA54iJj49qE2sUFzr69lsBdJXo=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxvY1g0WGhRNVNaRHVLX1lPODEyOGlRWXFIb2diNFd1Tmt0YWF0TWcyeXhKb1pDZE55Wk50MFlodmYzUWwtRnp1bkVHZ3ZoZlFWZnc4WGluVWNyaDhPTlRlaGlMWTNJcDV5dFJxSFJWQWIyYjM4V0RxaDVJQy1nREtiaGZHMUhQNzUzZ014SWtVU3p4QTdlV3NBclVzSHYtQ05CNVZrNGszb0VRbVphZTB5RG5QellrbjlpeTNZX0RXZGtQaXhZTnkzQ0ZNdXhCZlNLNENqTEZGSHkxNzBBV1ZpZHV0c0FGU1FSSDc5QXdIaDdJZlFrUFVUVGdOZmEyeGwxYTBUc1RUNzRQTC1uWmZlWUp1eV93dkQzMnZkZjdRMUE9PXyAdVeo7mS4I2iCVT_RBaAtFggrM1ATqiz1Qfl_yGMLdg==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxabVUwLTZRMUc2VXpoN2tLaC1uSlRUS0pUelplUFB5UHlrU194QUJfem1zZ0F6Q2ZxbU04dWhOWTB2RE42MUFIeDF0U3dVdzZtaHNXOFFTbmZxd1FIaEtTUk1HdnNZTGRaNHBLWE5JMkhlWDg0UGwwcnphZVFGc1Z5YVRISDB6bjZmZHNJaWJIbmdfR3ZKSTJCZjdVNlZaaVlPaFRFNURMLWlPNXFrWUYyaUc0U1FGQzlGS0FwS2NVcks4ZUVHUWc3QVo0OFA5ZzczYUhzYjY5cGZSbi1YLVI2RENnalZRZl96V3MxdUdTVkE9PXw8F0WJVogg9iGVRsENzrQyPuDs2ZiPEoax9PhGEuae8Q==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3Mnw4N3pMcHc3NlAzS2JwTHBzSGgxQ0k0cWtMOUZwc0JJSGVUVnJDTnE1MTh1WXpLZFB0MHFNejBXOGV1MGs0VHRzQVlrTWRnREpoZ214Qm1ldEJnNUkyVFc0U3pHbC1hc3JRbDRnLVpDNFhLcmNQaGM9fHfi4gFT970lAhbTpz5WB_N8a8ps0mDRnW-T9-5gUqur

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxVSFpwR0lpMVVsQmF2bjNya1dVTTZfQW9McWk2dFhVSEkyWGZva1NNbE1uOWc4aVNBU0N0V3hLU1k0eGpDVEQ5dWtYZ3EwdldzZFM0eTQ4ZHRsS2Rjbmp2YjNUZkt4ejRtWThuUnY3UVR0SVE3dFFkMnBwaHdjR0VVS3o5N25NY0tiWllUTlgyNDc1MzVEN1dZSTQ0NVktWVlvNzlaMkYweVZndFFacmtxNVhmS2otN0FFRU1SWi1aX0kycUo3OEtkT0ZhbTliZ3J6cDZtUUhvVGdUQnZQRU1KaFNWWVJvNnp4MjFfOXlGSjlKc1VpZkxnRmV0WkNFZmM3ZGlOcG5NQnBGc2VwME5PemNpbFdxaG8tZHJtdVJvLTd2XzRvS05sVk1oTEswV0MxUmk1c0F6VUU5bVQxMHdPbVpzY0M1b3Q3dVNKUmh5b202TFVwQjBfdENNalB6N2hrcTR8xUFEKJ42IacQ7V72qt2NSe4yPms5fjuFSgAVnoIzTe4=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3Mnw3X05zSEM3ekZZZW9iN0pwOW9MT25acVlJbGRTaWNNbEt6Y0RYaGpWRUo0dXVySjQtRm1ndFdGTEhyT2dNcE5laFJMZWluOUkySFVORzFlYzEtZ2xzU1NwU3RXSGdER2RoUmJsWWpERjl0d1BvTTJVbW9yZ2V6QkNiRy1ESnNwUVhpZmNsdEhyR0p4RVpCX2V3ZmxReVk4PXwxMDjJkXSAv2j7SOCkQI6DhctO1rmkfe5TLCemSgF5TQ==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxVLUNuN1Bmb2owRVUwLWJHRUVwUGZPNmUxSDJkeDlBeE45NDIxLUZaVE16VU5tUF8tMEpZZlc0QmxFSmlJMVdNU0tfdWlGRDFadWNTb2ZBbjlJRng2bzAxa0hCY0cyM2R4SlhKZjZuV1dCdGFRdFRBS1ltaU5lMWtPdm9wcmVQZzZlT21UYWNMVGQwUjM1R0NBTVYyZHlldnlRPT18NfdAQbuBFXoRDB2lcBp3PsOZOoRyGXOD_5Vb5mOYfdk=

View File

@ -0,0 +1 @@
8Q===

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxPSEJsU0FQMUh5OUYwTWRLRnFFckJXalVSSnNET1hmeV9Tb3IzRXlqS05IR0s3YnhmSkU5SVVYTlFzU09OcEpKcGpQaHd6NDU2ZWhoLXQ2ckpoM3cwSGJMMk9VbkpWX0ZVUlB1aFNnaWlSYXBzb2ViNXJMRjhBcF9WVmRSelhOaWtuODRHV1E2QjA3b2ZnQ19IUFdQS2x1Q0VuaWxHN21SLTVGZUs3MFVvTFhzZmdoSXZ5VTFJaXF5LUZLVUg3aXV3clFmfHWnnWaZO5H5ZBokfQp9DE0Vqo52hWUySU2Qb5dOis4X

View File

@ -0,0 +1 @@
MTQzOTkyMzI3Mnx6UzgxOUtEd0RRVE9fUzIxVGdjV0xvZExBM25HSFU0R05BZ2FSVzFEX29hRzQyTEdSZHVOdGNBU1pJVk9fZ3hlU0toY3RHSjJiZjVXdGNXY095cVNqV2owWm9OdXJfY1BHMlFib3hWZ2dwQzFteVBWWTNJQU9TcWtTbjF5STJPQ2Z1RGsxbzJzSGpyYnBZR3gwSDc0VjJlYkxkVkswbjd1c01VWUdLR3RhWEFLd3p1RkNvV3F1QWVJNURtZXQtY3EyOVZ1WEdCN19lUFZibFV3WDhvb0JwNE5nMEVqbDRmdWloN1g1WWRTNWdNMDB6aUhTQkxvWFBzcFdka1R3N0p2Y3ROR0pyRmdCaU85cEgxVlhOYjhHbGJUdlFMNDlSVTlMbGFfZ09ZREhnPT18O_WDUgPOoZz_Tj8Xl5xmVh8MW4DNTlR1Z_RKXp25EgE=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxWTzdmRjR5X0pDT2J0VVpEUlZuMkFhQTBUQUd5TG5fa2xSZndZTTB2SVdCcHpZaG4yRFdpSFRQamx2VW5RZlIwZ0h0MjRKTEdIb25RNFh1N0VGQjhBQzJSenl1d0V0d1NkNy1WU0FNaFB6cl9tWW9xQzJUOW5yelVicHAyVkJ5ekZuVnhRVVFTTTFDQmhFRHp6QVNkSjFMdndWd0tuamhTUEtEUTAyZHVCcWhiMFpsSHN2V19yby1tQ0lVQjlPTXcxaDZLa3BFTnkzYnlBTTlLTTZWdHFKbjVIejVwRjJKbFpGd2J3TXJwYnQxQ0gtTT18fWdsGgvMPIXZ2GFuTHyx7UEQxVQZ5kuLef2HuTWuMmc=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxWZTY5Rmh6Tjctc2Q0LUNKS1JjckZCYlFrdTVHZDY1SGN5Y25yY21DTVhOaXMyVTZSeEVnZEhwd3hrOXpFdk1MZXRJM1lOY3BrQzM0eExFSUtsMG8zTVZGNV91SDI3cV9BRDAzVVpFNEg2WWljQk5kOHRFRVlya3J6Y1NuTWhqVnA0eDhLelY3MkVGZmdRbXdvS2VXSWxicWxiX2drOXZHQkVOY1VzQWdUNktheTZ2UC1hMHRFMEdubmF2RmNxLTF6cVZhM1VQTnJSR1RJVm1MSHRiX05XVkc1bEpjWGFLQ0dMS08xMm1QQTFtekFUNUlCZz09fDoYy22cGspOxGc5hXTDyuC2dUigy05-6F9jWgzcQAhq

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxVWW9MekhaTFowaW9PdjkyUU9pX2M3WHNma1E0bXltbE54N3kyLVhuUU1ya3cyaG9FdFJGRkdIcEY0bmE3RkoyTkFUSlJBSEhmSDlLRW1qN0xUM2EyVEZPeTJyNHlFaERIMng2eWljeGNOaFNXVTZoUlJUbDdLMUExRmE0NW5qRzhZWlpreUdCMGh2QmpPcmEwYm1wam5UVzR2NnI0c2Z4dEdQZnlaZz18gq2BDyZoxUhCEdkDBJI-CKd_dBMqivkn0JPOWKVU5w0=

View File

@ -0,0 +1,3 @@
8Q==
=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxMXzFTTy10UHl2ejdOVnBtU3o0VmM0ZnRmN0dMbnk3Wlc1WVRlOXRZRTA5aVBOaHlxUDJWZ2gxcDRlZk50aGJNOUdqSlpyNmFBZGdmcUtiMEFZTFpPbTF5d1VfT1UzRHl4M19uelJBemgxYzVOU0lqYlI1Wnd0SW1MRGw0Tmw4ZUNOdWxWZF9fZlZVNnJUYVZXcDl4Q0JBSmJmd3N3Mnltam13UGtxQVBKTkkxcm5mUUNhWVprNUZYMXFPRG80aFhTODhfRXhVTU1uckJHYzJTQUhCeEFYVmVQSUpuWmFmSzFTaz180bgqBZn9nHXblgUiVtub8vMX5yoi0kbhENzp6sddMt8=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxTd180RjZHLWF5bjhuazNjQ1hmZXFIdlJMQnk3dDBDLTZpdUgzeHU2V0dFWFFUTnBhaEc1Y1ZHVllnUGROS1BjTGdnM2M1X3drSEotdGNCMEhwVE1tS19nMURTdDhCTUNGMjN1WHpFd25yc29XeWVzQkhvUXI1Qjlnb01fbkxZaEpsVVhsLTJhTFVaeEJjVGt1QjR6T3pNek9aeTRtQzlFQ2FTZDRRLWpTcjRaT1BHUFJRTFd2aUNXZmNlX29BRGgyWGFNUUhBRHJVSGpmVmlEbDVXTjlVcE1aR1JCM3lTZTNNMHdsbzNVVVdzUkt4aWV3c0cwenUtdFVaX0prOUZvTDFjTXwmW7ViLzDpDQ4HYcVtkyAja04RfLbwMybME8V1n2KnJQ==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxxQkhqeVh5R1NmamdQVXVKcXpZa1UxWG1JdmxsZ192RDF5RmlXem1IaWU5cm1nVzhEWThJR05sQTJhTWFWOHhmZVNkWUFseUtNS2NVTlRaaFpFWElrS1hpZ1AzMFdkVUNEeklGT0lIUDNVQ0pMU3g3RjZJb2RkUnAzVkFRNDA5RzI1ekg4TFpUWU5KTDhsNGY4QVA2NVpmcTdYbWNXWEw2OGRtWWozQ1NhVlRzaW93VHl0RXR1VDBIMDBrRy1IZFBiZFNyVGU0bVEtQ1NPNVVkb0FHREM5UnR4Vi1LajdsclJzbnF3OTlMU09TdFBTcTM1eEo3WEVISFJwRlNhMC1lQTZiS0tlSDJjRTZMc1FKT0VrSWIzdXZtRkw5UHlQTTZxQT09fLEJ3Ff2tP3aJxgI5TrhzBOYMEF5guG6Lkn4PrPGh_uU

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxWQUVBX01zRWJrdkcwektCQU5FNWdJTmZmQkVvenRaTVVNTmFCcUtJS2gtWUM1MlltMExlcHFrVEdGNnQxbDNvOGFpSHQ3c1pQak1DbUw0Z29KT213QkJneTZrYTE0a3hpc2Q3SHNZV01LWGJqdWY2Q1p6TjlTX21pOU82Y2pVUTJzWE1ITElVLXZNUkxJT0hEVy1XalJmc1NNZGVYdlRFSjhPQUFBTEdTLUhYcldPQXJubWdXUnRNYkpkSmtJSklTZEhQajZVbGw1cWYwUmZPaEE9PXzAmHnGMLYEU2NdJfNpx0XFAoVqZEexvIbAIvvO1oggig==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxUUy1RMHhjTm5rM1hHWHRPT3prM0lUT2F4NGxERmNZMmdDbTJpdk1ObUpXZGZnSEZ6czQtWHRkNHFDVXBaREhYc2xIS1FnM0FjUzlBb1ItVVBRR0c4THRLaXJyOUVwTndCSzdpTGliR0xsQmpzX2FjRmhWaDdISGlYVFJFNmowZC1FYlpsbnNRVUtFei0xZVpUV3loUDluaGhQM2FNSlZaVmRwYThySm5RcVpEdm9rVVdMUkVpY0JuQ3g5RDNyUFZkQjVldzVQazdVZC1vemkxTjRGVTlwWlRsTGZZNURXU2IyeGVQV2JiNS04OVVFSW9QR1B1dUVtUXBRPT18YY5iRJLicxAb8HQ3ztH55VaIsETVU-ih8XWjqvUFdWc=

View File

@ -0,0 +1,2 @@
8Q==
:

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxWckxCcURZVzN5ZXpGWUNKUU16LWN6eEwxeERyVERpeUFZQzJNOWhrN3ZPSV9HbTU0bnJmcm13dnNTSWFWdElnMlA3OTg2cDhubDctNGo2WklHS0dSZm1Oc3FuVk9TMDFzckN3WGEzRzNuNDNvd0hGMVNtS2hXNnVkbmg0Skx1MUhmTkU3dVd2TGUzaEV0TV9PdEdWcl9wNlNqbEZyTXcwRjAwc2NjOGJhUEp0b0Z5YzE3RWFCZV9JekdXSmhxWlQzdk5wblE3SjFoeVc5dXVlc0RGN3RSMD18GWFHfNiy-kbdyUHsI7sohnd2psiLzBQsh4EqtAkWNbw=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnwxT2JtNzdGVGpFeEtTMDBtLVYwbDd1djEzbzJtbnJqU0hsNExlb2F1VkwteGY1VkJESGp1TEx2T1M4MWhfbndNN0tsSzJ5cXdyWEhrc1JnVEt2NWh4VnoxMHkwWF8yMlpOWnVLYnR1ZEJOWHEwUmpaRWI4Njd2Y21XN3JnYzd5d1RIeEtDU1YtdGdyX2tFN1AtY3JZZDRNdVVJSG9EWGEybEdGUDVENE1tWjYtNnE5UEpLYlJEYTNaN285LTVaeU98-s7M5tZwxQHP__ru0pr2s2RvJoHKw3UvrX5RySOdkyI=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxaZ0RRU3NQbkRQMEU2eE9IM0pPY3JKdnppcFJnVHhHZ2FiQmh1YWU0ZFh2eUREdmNkSmtmdTBueHJqWkJhS3ZJN2YxdGpWQUZQaXBZWlFMd3ZwUDlhZ2J4dlJhbGtCMmFmbmNGQTVlSmFZckh3T01oZUYyT1kwb0RvejJZMlg4QTZxaVJ4a2FoeE93U1QwU19BREo4SklicGxkYWZBY0FucE5VbXJkWnNwaXpjR1o1QUxQTzlZNl9Jam13Nm9IZmhsUFBfazBpcUNKMHdyOU13OWtMSThpYkJRZ25pbWhUaExxRzRUTlRBTjBjanVlZWc5WW1rSS1KdlpUSUo4YVEzeEN1VDhlc0stSFJ4YmRyVmNWdWRZZGZpM0hudEZ1aF8wV1hjMEFrWHJVTEhGdz09fNbtYysnGt4wf4hzwKO35zhSLDX9GXSzLkircCuJMmzK

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxNN2xITzVlekdrNzhMT1BPSmdZZnJuOFppblJjSWNpTDhfdXFiVEpIR1pqeFdnRHlnZEJrN0o1UDNLQm9MaC1lN1NLMVFiOWw5ekpKUktJaklZQWJKODZJUlZlZlBFZ2JObmpVVFZtUzI3R01HQ3RHNEI4RF9Hakw3bGMtUW1Ucll1Mjl2SXlJRDJmdnRaS2I3SENGSDA2U3hDbGZSZkVMQW9xRXEtREl3RzY4cklDSlZVV09mWm0tU0JwaGxKXzVWTU5GY0plZTBIY0RCOXh5cVI1dktGRy1XVGk3aWhJcllTX3cxa2RHVUZnLW45eUl0VFZRTHVrYUpMVWlrYlBSaTdOME5PWTVWYm9SeXFpM0dQUW1HOGFJWGFOWlllNV9fSG4wWktlNW5FNzZ8ZrFQcdFDl_-VscnBXTUhM2XvBRo4Ev0Ap24dqkH3jnI=

View File

@ -0,0 +1,2 @@
:

View File

@ -0,0 +1,3 @@
8Q==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3Mnw0b1JaSmp2TWp5M1pFeUJVRVN1VDZBSmxFNXpMMGJ2LTU5aXM2N3g0Y2RRdGlyWEczT1ZoY01fZldvRWZhYXAtYm1OQ3FQUG1IY1N2M1dTZV8yeEpuMWtQeDdXcno2QjI4UUptYklOOHdQZnhTQkFJRmVmNF9tVHpHNUpJdWJ0cUVHZXdacWFabU1HaWdfcnMxX2RpTWNkbU4zRDBfMnlLUjYwTlRMa2NnajlkemxKNVpLTTJPNnRtcDIxNUJ1TU9Uczh6S2FmUGk0YVF2UVAzS2o5Y29IM1FYZz09fGpjKWy2IhR07BHKlkb0Zr7qxojZDZLU2AKB-1azftV0

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxZUHVVYmEyUHNRUFlDV3FLU2s5WDdIY3NYWlpYNENISEVta053YzFMQkp1M01pLW1Cck1neUVNZ3BpZ1A1UXNNVXcwQ0NYd1k3bkNtUV9hMDRlTDJHUFM3Sm1NLXREWUkweElOc0xHV0NYQW16dUU0QnQ2S3FQdGl3UnlxX3I5NGdwenVFajlXMDVON3VwZjVJYXh2cndSVFlicHNXY2NUOU9SU0ZDQm5ySFpGNVV4dnY0dWdQVFY2U2hJMmR5MDNRcmJickE9PXygp9rjsTBYaNuCDC0IRxtbTx47LZzJqOHHkfbe1LGNXA==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxGWHN6bWdhWlRTeHBJTGlJcVdkVXZVaUpjSkRxMDF6VzU1eDlDQmFUbjJFaU5RUzB6WUJ4c2cxUTAwMDAxZU0zNGR6REF4cG1CNzQ4QnJBVlZaT3dnOTBBTUVnYXFiaGFESUswMEtaQWNCUGNQQ3BwbmtMY21hUU5CaG1PdmtLY0VoMk1PaWNJd0VfLV9DZW93QXFjalhRZE1ieUZBUjF4QWhDeVBaUnQzMjV4SnFuZE1fOU9ra2ZOV0ppLTRHNXg3QzktLTVtYnlkRUJaTDRMbllxSW5kaHhxd1FZYWllLWZQUW11ZlhUVWhLMHZ3anNRUVVIbEVDd0F1cXFjNUFTQlZoNTJWT2RNVVJyM3hEY3IwZDZkQ1JuNThfT3pvUXVvbjZWOVNNTWY3X3hEbnM9fLxht7FvJD4a_FPtZFHY-Jty04388qOsUPtYAh_v7RzR

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxDN1d0UkJ5Z295QWp2QmJEaXdUajBEelJRRDNGVEJDalR6Z05wUGpoeWc5TjdEZC0wTEljZUp5VVlHQmR3ZmRkWkM3SndCaGMwclQxSDJfVEpjSjlQVUxLQ01zZnV6TmVpVWZwelZrNGgyTHFKODFNZGt2LVVySDJ0RnlpQk40UWNFQ1BTTF83cjVBVGhzNDJCTnZycWk4Ulo2TnlxZ1RtXzlEMXJpel8xMDV3emc5aHFiN2dDS1NyV2FqcFVIci1OVVA0bGtlNXNaS1Q4dDdIaDVnY2lDeGdoUFk9fABSA5I3BIpmZmQgqbHgTAqVXIli2piNjBtxOxdjvqOo

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxTOXU3QS16QzVwMnA0cW9rYV9xOGJaSnd0TE9mU0ItTEhIaXp0OHpTVVBiZDllTlAzV2RrS2tzdDBzM3JSWkFCSWc3ZWxEZm5sLUVydnFVT2x0eFo0QWZYTTJUMDNsa3QxZldnUV9mX05pcklvSXpmX2c1bzdGLVdQdFd1U2VrTkdscHpJZVNyUkMtSGlwXzNnMFRZbnJZNmNrT1dCNjNiakpYNjl3QVF3bzJMMi1HRHzsH2Tt9rxpZH3zsEqJu4iMDx3b0HY_DG8ww5NHxWnf_g==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxyYXZWSDBFYlhuT3dJd1RORjQyck9LU0RJcXFnNTNpVzlkNkliZzhJMUpOWnFfMW4wSmhpblZZRUpkMnZ5S01uUnZPd2ZROFZpcFduTXVzSDlHMVZyZmFqV09odm0xWkV5RXNoazEwbnNsOUdQV0hXQjNpVkIzWTFJUi1sQk9IZHluM0dubndmbkxLUnw71foKMZj5sjRaa8r9NSKLljA4s-sV3iSuUIDE-rhFeQ==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxwT0pPY3dJdDVuWVVwdzY2ZHhWS0xsemNXdDJnNkp6VWk0X2k5bS1ZMHUwdERuSmx4SFp6LVJ1R21IcDJRMnFlOVZVUHI4SFBoUWlZY0RQd1NkeTFzRDlnemNVSXVuMU1EZV9OLVNHcm1BRlQ1d2xXQ1AzTzN6dGNWdzgzTW9VbjJQU09CbkVZWVBXTHVHbTNFZ1BzbThGSzNFdmhqREpSS0FtVkhFbTBxV0RHUUpBPXyJHQBE0YGJZylQO-9FgF9v1AR1MQt9RRljMVjtSJWJrw==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxkZ0pabTA5S0VrZFFhTG5vbGx0NjVoai1pbkR0RmI4VWhVaG8yZGNabWJmRW1lajlRdmlkT3Q2dFhFZTFLNXFrMWtCamlEV25SeTYxTGJqWV83M1Y1STd2ei1vaXFqY19pWnlwU0I2STdOakhpd1ZGTGRKV3R3VE5VZ01EcldPUVZpaDgwUnN1Z3p3YkZGdHk0QkhxWWNTcGFranFhcTdCR1NteGZQb05jOWkzVTd3a0tnPT18_ii97jAl3_Q3XFaUY2r8Fk4bqBhysx1rSQw_ppe-oSw=

View File

@ -0,0 +1 @@
8Q== T

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxNMEpYckdpU2JSV0VGS04tOXFGbFZmOFBxRnE0akZZZGZYazh5ZUxnYnhLU3g0YmNaU2RYQ1BUZUdaYXluTnZmQktleFY2WTQtWFhyblptOGk5Zkc1c0FhTkpjTmMtNmxjbEV0dkZNT203cWVUSXgzMFhscmxsQXpkd043cEQzU3Fpc0dXWk95Q213cTJGSUxoZjBWREQ2aVdfZXdyWHluMElmeWRHZnZzVFBDUE1ub2tCZTIxa011UDduc3hscEZjMHF0NHdRdnBtLTQxZF96c1h2WlZfbnV0V1B4ZjJwWTlodFpLOEU9fCETOj9CrLkOjHQ49IVc1S1yDcqlwQ4iVFaSZIiovrrN

View File

@ -0,0 +1 @@
MTQzOTkyMzI3Mnx6dWpVS3poT2ZaVDhwZVhGS3ZSa3hCckVuTkNPbWNiOGZtak92Rklrc0Y4dEZVbWlfNk9DZmNNMjZ6cEpaeHptNEdIWEp6dWo4YVBEbW1Da2VZMU5LX2FyelJlRmdzQkNwdXZGaDVLQXM1eVp2OVV5TjNBMUYtN0ExMlhMMkZCUklRPT18uOhvGznCMRvXlfsraWq4DfbciJOMOzHzoW7PMo0aIxo=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxSUTlaRTRnVHkyMktVSWJCZHBCVzdWUDRtRlJ4TmV5OGFCd0pPNllNdEFJMk96RDdLOWtqN1hTNFR1MzA0cVd5M01KM2d1Z0Fud1BQcTQxaUJGTFNkd3lqZTFpMGxnbnVwdGFPX0x1Rm9aVWVyVHlxeUdoaWFRdUtPeEhyY3ZYQWF6eVFRSE41eFhIZmxkaWloeXlmN3Y2dFJya2tvNl9WZkhXaU9IdTdPcHMtXzQ4V2FHOGRwSFJ1ZjdES3VqMTFRRjZEalozWVpjOTFBY1FoeFc0VDhZdFdCeVJhS2JCc25PVGdIaFl4cFF6Yml0ZHlCSEk5c1NhSHppNUpEdF93bjRTUENoOFFrMjlUVU1yeHNhb0ViWEFwWFVWRnBfQkxhZmN3aE9XcTVyVkVvVkRWb09sRkFKMWpnbTZaa1pRSmxORTBVS2xVUEtvSm43MD18oCSPYwyWuG4Fi_L4i-Ck2AtkAP_DFNm2P25AONmh8PI=

View File

@ -0,0 +1 @@
MT=`

View File

@ -0,0 +1,9 @@
=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxBdWtBNGVWdUtUN2pwcFBUWGl0anpObmNRYmlkMkdZamxZTEotQk9UWHJpX19ydk51a0pkNklaRHN1SVVGYzdWSHRNRTRtZVdyT0VOTkZncUxPaWtZTkE5TzBOeTBOc0RyWEZuTzl6eEpHQ2lRSVh3MFNmc1JNekxfMzFkOVhmN0FldTdlMGFfbXh6bWRpYTZuQT09fIXGQXlpKRx2z84DdIjKzSaH-rt1LNVccss7Pok37t5R

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxzTl9JWlczZmFOeEltLU45SjQ5NDhkSEJkdnpBU091ODZPY04yQUJPV055cjJkaUVtdTJXbzd1WTZRdElzMlVBdUExeGVZZHo3ZHQ5SFRBZGs1cFhkVF8xRUxLOU5Tcm44Z1FyMm1INW9CeEFZbDJ2aUZyeHRfbTBlY3EzcXd2Vll1Q0tQQ2FkOHV2QmdUazdESXN0NWNqY0tILVBkd2FJbUhENVh4cXBPT1NhNG9LVlJUSWZ6eC00a1RLVmRXWUhBVFNjbUVDeWFHd0kyN2JDLVVrR0oyai1XRTJzQWdTZ1ZnMGNlVU1pTWtjc0VkQTNRdFJEdE1TdURyTnNCd0w2Mm5FV3Y3dUtpZ0J1eDhjQWVKWDJXSF9SR1pDS2s1Njk1OV9YSXNNbEg4Z0RQbW1lQnl3OVNRPT18xpN1Gzy5f8THuL4VpHgE6rkEAgP8s-JALzUMIdCy46s=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3Mnx4XzhJbWhsRF8tNXhHWE40QkJqSC12dVNPQVRZcHJYcXhOSlp1MHRERlA4Y2Nhd1dpV3YwRktxMy1WRDRkSHhsOEJhMnFmMms0d080dG9NMlM2Y3NSbzZoOWpjeUFkZjRod0xFNTF0RzI4ZDJlZzRzUzhXSDU2ZHZfdlhnY2RfNGRqTzQ5VUJCaHVVOWNXczR4bnF3cU5XQURvdmFDSkJKVy1HT3dvZ1VPVzVDOFliMFhaazBYVkJfVk1oU3B4UExYcllOU3VUTnAwYi0wa0dvd0JvcFF6dzVuQ3ljdENIUHzmuNnj2ddk2WHZr5R7DCU110FZIt0WYBt2eswzaM4gug==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3Mnx4ekswcTZlZk1PZ01kMGxjbERUTERudFVIOWVRRzduU1FrZG5GRWdYN2VIcC1JRjllQjZnT2t0WWxFM3JxMmxHTExtazhfNU54eHNJNnlobFJoQjZreVFteUE4WkVrbFJ5MTluTlFyaEcxT0w2VUV2aUtaYWhvUUJ5WW55LUVHSFBpZGlwQXpRYWVZVVpXMElrWHJjYURqQVgzaHlhaERxNktwU3VLa19iVkY4QUp0WjlPTXcwNzNVNVRqTDFRVHBxYkZGc1ctU2plNWtqX0FvWDA0OWpkV0YwREk0MGNEM3AwQXcyT2FkNGVWeGtyWG1QMkUyTElZQWphYjl6ZTNVaGVEZHJZa1NneE9UamhnVGZkVnFFQmRGN2JfZGhKUnZCcE12THV1eFdpX090RDVrNThheGthUFlJSjJPTnEwSGZCNm9scC15TGRMVjk0YkNUOUE9fBemXTR7HKYdKtHj4eD9GyTuMPweT6BzKJORecQUOHiY

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxpdTBEREVHaWx6OW9YZ04xX2ZwYTh0bVY1UXZYY1dGSk9XM0NFZ2VKektIR0F0dVY0RVVYNC1lLWtaWFdXSDl4aXlhQnNqQ3pMYlNxRFhXeTZtTkJxcmhKckd3U2hMV2xGeEJ5WWxsNFNxSVhFdW4wek9XdDJNTWI5d01tLWxITkk1Tl9IRjRxZnJnY0JPZ0VBS2cwc0Fya29qNG13ZHRvb25ESUp1UTlQM2hYSnFvelZyLWpYNHJqSnRnaTRFbkhVVnZyc3Fhb2UyQ3NkdnpQVjBxZkFVOVoyVmVOVExDUXpHaXVMNlEzQkNzdzF0M2RGODk0U1VVX3lGcDViVHpPTF95bFhGaFJkU2ZORDFkaDBfem12Xy1FV1VSR3ZKTFpJdW5ZZFJWSHZhVHlqbWN0ejkyOWlKY08yYnllSnVITlZTeWdDMVFSckI3dHFsdDdDSDNFUzNHUWwxRm5JT0NqVHpFPXy6hn09Iaig1LeW5S8uecM1E6X9JRmTLzFDWXDDklk92Q==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxYdjBGa0xlZFhqMmlPMFgwQUxxbmtjRlRCMWJKWWV6dkNvWE85ZElQeUtKQjFfRzRMa2pqbE4tUTM4djFUV2lzNTBLa21XMXVMSEx6TTR4Qjk2WmhiejVic0ZiOEQ4UTAzSFU0Q21QWlp1SmRQVEhGMjZXdFFTRXBCNlpWZVlhVEdFbG1PYnNkSWpmSVRFcUZDT19ZUVBuaHRIUXpaNGFiQnBTOHVrMGVTdFFvb0ExS0pYbWp8Vj60yLafH82y8qhmu1BxIr3gUFi963hxiFAdnBspPXY=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3Mnx2aGc2ZVB6blVXVmdKNWVXTjlkU3RvVlRNcTFqY3czVFRDMUlwVEVzX0p1UHlfRmpmWmdualRhZmo0LVh0THBPVUhmUDZoekFkZEVrcFRhVm83dnU1cmZPdktOcFJ6UTIyN1I0MjcyUkU1S3ZfMlVBSGx0MFU5TWRuRWotMGhiWmhELVV8610FbnSvRth9SdVC1Am-lp-2-VAR5tdLzBQL7kFPeKw=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxUY09CUnpyeFZzakpjOVg5d1VENEFnRzBUemZZM3VwUzZSZExXQXp3Qm51d3d0REV2OFdkS3NpTTFQVEtzRWdTSFBMdklSQVAzRk5yTzRKOUJhXzBIMm13MkxZSVB5VFZjclNXbWVTQnRCeWRrWVNjenl4R3FtUm80RkJwNTFNVWFjYUhlb0psUGowVC1EdU9fR2hLVE95SVgxak1QR0llU0JxWjRQcWc5WlQ3dUUxRGVaU255QVhGeHFGSmlFeks5Wk9TQnpnYURyZjYtMnQ5eGxiREhPMnQwQ0dGTDI3bkxBakY4LXVkT1BBM0Y1UnNRYV82QlVZNDRDYml4cVhFRjFBUHFmQy1Td1N3VWlEcjI4aGdqQjhId1lKQkZSdXd5eVVScWJPVXNBdWpPTUs2S2JzeDdBQzdDWkxMX2hENkVkeXhIUT09fFSsK7EVDyN-twBBPhUpAJbKWVJL3e3e-oryTS0Gptk_

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxrNlhBSTJrN3dKeVc4SzltRGVDNDVUcVpjSldJRklfaGtQcjMyN0EwVVp5ZFJUakZVM1ZzSlktdXBXVHF3bVl2ZFU2Y0xDTFRuRGJ5bGFvZWZJQ05qd1d3YkNNaVk5d3R4Qk9lR0lFX3A3UmxHQnZEUEhZMjF5Uzhra1pZaGxsVXVxN1ZkVHU2SnpkbUtCSmZmZ1JjRU9STkNLSkxmeGFfQThERG52VjlnM2g4ZU5oSVdCM218tzuauoYyLqD78b9QoY073Z90G2zU4SVn4AShBcQiZdk=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3Mnx4WE0wVjZ5eXRsN0ZSdzRnMkY3aUhQZHRjTjRlRXNuRDkxU3ZDeFBGUl9UelZPSnNsTVJuX1pNUWx3RW5USGoxbUtKNU9sT0dSZTRybnU5NEFrSmVDYy1SMEItVmVZblZqVHN0el9BMTBaY2NHZVlkMGE4ZDFKNTk3NnFnc0NweTFZdG4yUVItVG1rWV9ZdjYwai1XQTBXem1RZVJ0WUtqYmtuXzZVTGQ4b0JibklublZEWWJsUVRYaTRRNURSNWJUSDVEUlFvSDR2aEhqX009fHDobPXrZ7PCnuoYwkWqQHmvqwG9flgTnby1RqAp0eEk

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxPUzdKazJFaWlTQmtNVFltQ1hmb2FBdzZIZ1NndnlHWmNRbjBkeFE2b2ZZaF94TnVka09sUXJjUmw5UlZmYXdZTl92clpVV3ZxSzhWajBSUWtkV015STNtak5SNDNkSXc5NnNJTkk3SjVJTkVaQVJpaXpOVXl1R2ZlMldZa0lIVnprMk93TEl4UEd3TUhTNl91QU1BZ1p6dlBqSFdrOTlvcW8wbTlKa25KenNFS2Q0T0RPcy11cEp0ZVdrbG5kNlBkUk8zWG03VmF6TFdBLVVVYzJlQ3lvSVQtbDEtNmUtQUVQY2dFSHZtYUtpT0t4ZDZQNUliM01LbjJQdF9wc0lWNkFaNWdPSnMydz09fCUtVdRsGfGjq0xST1F2G02INSyzVO-RQV82fZAx-tF8

View File

@ -0,0 +1,38 @@
J

View File

@ -0,0 +1 @@
MTQzOTkyMzI3Mnx5UlRweXlJS0JZanJyRXNFeDBnVWNfUjhDb0dlWFVQNGpUSHdxSk81ZkRrRG1rTVppX3pSeEdFU0NGWnlJTnF5alJnT2lESDdRYnpxeWo3YU1aZVFuSkFYSlA4WjIwaVFQTFJrNTk2X0N0eHM1SURNbDR1Tkd0cmlXUEdzeDJFb2FSd2lfemN2NlJFOGt6TnJDRk9PejMzeWFFbzAwcUhzZTlXZVFpWmdEdEg1fKISvrG7Go5WiuNqKEVCmCg02rTvoDUJR1MDwNdR_a7Y

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxIWG9SVjBHTFFaZ1hTX0RYemlZZ3VtWktBSTNsYi1QZ25YbTdOV1ZWNTVNd1Z1a2ZzOU9sZzFyVklKUjJfbjY1bHNjbHRHZnR5Q3h5TVR3MGNXMlRDT0FqLVNnaGNfYmlGSllsSENJS2Zac2p3RHRwcm1hWER6eDdrVEdaT0ZuTy1YWlRoR2tPb1hWY2Q1ZmNVd2o1Znc0SHo1N3BUV2tmVk4weEZEMnRXRWhtTjlNSGRBUzRBZDNCWWVPMm4wVlA5TFNRR3l3Z2lMd0xyWVlzdEM1cHdoZzBvUjlVcThBN2dfQWt0NU9vR0ctX2h1U0hiUVFMfKEklV7w5Qdw5B-zHGdc_8KwMCEaJaU93kfrkF0UlCO9

View File

@ -0,0 +1 @@
MTQzOTkyMzI3Mnx4QmExOVdwZHNGcUxERzVObjVVcGwyS3BGQWwzbDRMSWVEU25MMllkUHhTWU94cHI2SFJ4VTBUOExZeVZpcXlTUXV1N1RfMWkySWVHallzRHNnY2Vqbm1QSzBuY1BWQURZT29fQ1NfZXFSaUEzY05xc0dzSmw3a3UyZlh3bDhlTUJMcmN8WV5M_DCWr0mpbvysNGaacX1PWwZukYRGCUd7zasT1Z0=

View File

@ -0,0 +1,7 @@
8Q==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxhWkw1N1lYaXhlYXd2ZmlIeXFKMGVwZWZrRG0tYmNBVzY5UG94U1lLTjlPcVNDS1JUR1NoNkd1cnpMbUQ3OHFmMVFMRDAwOUFBZzh1OGVJX2dPR3RlOWhUVVZXcEV1NGNBcGMtYlB0M2tidTNUWXpLTVlLMHAwZVRQN3JVcHk2QnVXSnJyRGVpWTEyREtEQ25KaUZmZGRsSTRtZzN6MFJKeFFjMVh4b1pvOXBOVFJTZDVhY3ZnaVJXa053bXRmSnRha3B6VkFxUFZrM1JtUWlLbWMxeXNuM0t4UmxGXzNBPXwxnzQayybnomVu9KKV09VJw2upuS6v6c1S3b0sJWkzYg==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3Mnx1WVpMRXFVYXY1X2JmVkd2X292V1NyYzdRc0k1ZGIwYm41all0Sy1veU5IWHNXYjg2OGxGdFQxdHNRR3RqS0pYZU10bmNVOHBEOG9OYXRSSXpnZnlwX2hlUV9aaU53dUZJWUdkM0FBcE1mTHc5QXpRWU5jYkxHY01SbDk1Qi1OaWRidmkwMnI1OXRIM1BPN3ZNMkx4M1NHRTVGb3pGaHQ5bnQ3U2dVOS00SmJ4MGZndW50T1ZUQllCWHBnZ2dxcTRZS09sSkJjTnNTZ0EyU0NufLwPEP2PJ8RYQ9tckzQTz1lelud5sVzo6Jlpg8JkdBnE

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxlM0tBMGdMZnE4V3JLTHAxMFdIOEZTTDcxMzFhNlFaa21sYWlVV0dPc01ST2t3eElrd0pYSk4tMzZEUUVCekdYYWo0aXVxdlNHRXJZN19YR3g4MDd5ODd2OUpMb2c4bUM4TDJCWmVqdGFwd3VBVHFqXzZaNFpoQzNqcGZmMzI5RUpOX3p3N29HUjNtdHV3MDNLb1o5Ui1HaDhEOWxIVmp3ekE0eEMzZlpEQTFWaUlKQjl4UzBleVZXajlsOHpKQm5PcjUySF8zRC04RnF3dV95SWdfcm96VnZQMFlNUTIxMkh2dkpvRGgtM1dNa3hhRElCVEdTWGhqQlFnTndEbjZZVXFiRUVQNVpmNFg0Uks0cU8ta2tmLUxwSTlBZW5KZ3g1WGJpMUtVT2RXSmxIOU1fOEV4cFc1Snc1c2h5eGlqWTkzQT18oYMWx-zYrvIFzHtsBzkW0omgLkRlrOi2tV236JFCT_M=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxwNXNlWnV2cS03bDdrdTItdUxtRUZyMC1KRWFJd2padHFyS2hhY005a0szS3hkanY4RUp5TnJPMU9Cd1BJVlduSV91SFhKQnBnZktlTUgxdG5MRV9IcWJEQ19fZzZzNDIxaF9hQ0J2YV91Undnc21XMlduMUptSV81Rl8xdnY5NWN1aFdmaDFQUTlkWXlnd2NsY0pLSlZGemR5UFNyMHdCMWc9PXz_khLrMOYAvmm8TxPWewFz30kjj7NEr2ySyO_Tmifbew==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxFY3ZmNU0xdF9GUGZJQ0FvRU5JOXRlWEFpcGZxTXNhQUFhZlJPMzlaT0tNZzY4Y0VZZ1ZxWDRtUkJhZXo2M2d4TERXd1Q0Tngyb0J1czdrMGV4RWVfLTFWZXFTR0hYZExSMDVuSUVNZ19RPT18GQy_KUXhl6Dgc-_uGeJPfHdhznbqAKhEA0jEZq0wSKM=

View File

@ -0,0 +1,2 @@


View File

@ -0,0 +1 @@
MTQzOTkyMzI3Mnx2bVUtU0tHRFM4cTlKbXJ5Z01TdjFoTXE2VHM0eGlSQ2czV1h3aFM0Ym05YXVkWThqWWpwLWZMbVp2Tm52R0Q0QXhMVGNhQUh6YzVWc19fd2lVMUNGYmFZOHVJWkd5SXhlODhtMFp6dV9vc04xdkpVRDctcTBGUk1MSG4tTE5KNlZLQWQ3OXdqMTMzc3dMZXpza2lSVmdmX3lpejJZcHp1RVlFQXg2aEx3VTlyZl8xbmZxdkhpcHZySUVsNUR6eU51NEE5NUFaR0xSNG8tSk9OQjVRLUxsWldNdUF5M3RhQ3FGdjV0Qlk5Wl9hRzdkZndtTTd5QnBPcVNjV2xmOEg0QVJkSEFwZnRKOG03MjR6OEJIZjA5UEVvMTNHVHwcuDVKBM6I7Zpg7kt4Pk-iLloKwO8M8f1qNQH7qLp0sg==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxoMjc5X2Fyb1dtWUk2MmZlV0NyNWZMU3BZUl92ay15blBZWnNmQk1qWUlkOS1pLWxkUDIyLUZwY3R2X1lRQzZNMmJnZV9iYXdYNG9pMmVISjZsUHNMSUVwQnBHdHFoSXc4Mm8zcVY3UnpjYWZJaWdSelZWMEI1V2NqOWpFY01oUTVXR053TzlyRnB6LWFzQzJKckZ1cDJtZDJndGFPZFRxdWYtc0dGUGRhRkVsdGJ2WmptUmNlQnZONjAwOEdoamk2anItSzFWVXwHNj5MIcwy6_5z9_v4k_oCTN1AX7sFtrk25QICzUSuQQ==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxsRmNtVjk1VXdqbnlWeDVDd0Q3QlZSaXdaWkx5Sks3QmVNb3hKVWU5cE0tdXBtQmJuSUkwNHJ6SlJwUmVjcjFhNWp3RDZNN293eGtTb19RU1Y2Q3NpcXFFQnhVdWR0eUFKYmNjT1dPNG1xZGQyeVMzYVFuOWROaTQ1allsRzloQ1NseVVzcDQxY0hGdVFGWnZyMzFWZkNuajBzbGZmY0M1WXZTckxSS0tYOGNJU1Rzay1WWXh3MHBhV3hQZmdFUnlpeTVUbXR5NzF1OW5CQ0h3SHhyLU15MzdhSmVMbVlNem50ODNxT1RmQTkyVEc4NksxVWk3SU4wbnNKY2xPdz09fEL3LkMkHs9AH_Kktdn22O9rjO5cdPayirCVWvy7NdFK

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxpUFhiYVl5dWhheFJxclp4RURnSWpUTnZLd1NDT0hLOW44bnRhc3dES3VZYVJsYzlBZkgySGhfTnJYcU02ZG5zY2M1TmFOZDhETTFqT0tMSklESmZTa2VRTmJYcm5UM005X2p3UE9aUmx1Uy03MEY2R3lMQjlqVFRGd1NHWXhGUXNLTkwwbFN3a0VFcTF1ZzZlbmtvQ3luRDRBd0x1dGZxZlIxUWhwWWZhcDlHS21jay1PeW5VV0hXSFAyRDlERGpTa0pwOHhXcU5yRkQ3NHRHOFFrZVBManJDRlFvRl9qZUJvR3Z4V2F2T3JDT0x1QUtScjlrMlZ6bmFlTzhtd2FId0xBekktS240ZHEwQTJ0TG03UmJFR2tPVVdpY3FiN0xuM01ib3Z4dy1HZEFOUzQtYi12WkIyOWxPV1QzMk03SG9RPT18Oy9xErnKlbCafCV5ZRcdNQ4oAkM6AS78DKMLRzE3Gp0=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxXZ0t5V0dfQnlNV3Y4d0dTN3JseVBuUTVsSTlYWGdyRE1XWGRNZ19ncUtZRFR0RWJMX2FaV2hxWVRwakx0VDdNQlBrOFlWdURTa09Jd1JSUlgxTV8yc0R1V3hmcXlwTmdyc2dXVDdBTjR4WUstZEV3TXdFU2Q0NUVzb1JKNnNzaTZBSnhweWhFZnoxV0Jta3hfQUtySE1ZLU5aWGQzcVlrbTJYNXlTOVNwbjFPMnNzYWZNTzRVWXpKSGFpejNrN3FUandSVVUtYml3d0pvSWVIQVFENV9TZUdvajdGSm94eDZBOGtWZFFPOWJfal9CR0dfaEI3bk5rbDVZX2ZPSnlJQlZBaFVXalllMDFQY3c0aWtoYkctQ1YtX1VKT2sydVVPUDg9fLemJf00wrx74T_1wH-isE4OGkygea21I7GLkI4X7udr

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnwxaDl4VUR6MnlJNHU1alhmRi1tWGdabVowaEJsbzdWb0xIekw2SGdVS29Td1BWZjZrQ3Z2ZmQ5cF9SZ256Qkc4cHM0QVRXMWpVVm1yS25HRzdkY0hWM00zc2MwTVVfaWFDM0RBSzlqQ0VzVko3MkhJdXAydzY0VmRWQkdXQV9FeUI5ZER6VFhpSzBWVDlFcXNkM09QUUxUN0F1bmpKQ2VWWm5oUzVEalZLbC1oellOMUZzQjBnS2VxX3puOFdJdm45alhXVHBIZ0VZVEdkaVpmN2NHSGVwU0FlcTdzc2Y0amM4bnMzZTF6ZGtXLUR1TTdSZV9XaWZwZUdTMkp8GA8K9swZ2XKR0-0_JudwK_Qa4BiuzOOxvZWn6Gt1pBo=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxYaDYzWUFLYXh4VWJFVlM4eWMwcVpkWlZ2bEJxOFNYdk5sUTJfQ3RPYUxKT1ZOTGlfYmNIT2tzWUprUkFWQTdzdUgwQUpOcjgyYU5nYjFDRXIwUVhIaHpQbkVheXxTuTszScurs8XNj14TW9ZRbnD2xmn-zFDAIyc8ZUDrXg==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3MnxEZHpBelhtbTZXUjQ1RGVsYmdvSEVCR3VtQk5vbEg0MDF5UUxwcmRGeEtjd2tqR2c0Y2VWMXlwanE5bnNndkllRTh0Yll2NU5aUXBSVTdwazE0bDZLNXF2bVZocHV4QVBpVlUxdjJJTWtHMy1VYTV1TXJvOGxPa3JXT3FFY3g2VDJiM2NEZ3ExTS1RUzB1SGgzVVl4el9hTkZycTZZU05vR1JSWVhocGNDeV8xT1dxNHViZndyS2VOeGJFbkxRPT18uzh6hDGbvGTPDjTotEtdXXbulR9ukML3n9YHQBzyX_U=

View File

@ -0,0 +1 @@
MTQzOTkyMzI3Mnwwanp6eU51aGxsSEt0b0ZRNXhkUjU3YzZXWjJySnc2aXo2c2FYWFB3NjBnUDRnQUpPQ082bUZrTmJ5V1pvZVJXRi1JTzlsXy1KLVhpMzNidnlrV2xOT2RIVE5QalFqWklhSTU5c1BoSmQzY24yLUU3RFNMSXExTTE0djdyMDZqY0FIanhYWk14WUFERWk2a0pFbE9BYTgyOGJKalVCRm9SVWVYb2lvNW5pUkQwb09hUXo1bXBiUWRBRmx6cWpmU09NbWRLVWJsbnyekkTo3BRb4h8NxFsA-u3yJovwUt6YiFZRA6601AWliQ==

View File

@ -0,0 +1 @@
MTQzOTkyMzI3Mnx6RXFNam1mMGdqdl9FdWdYbVhENlVnbElXVFVlVEloSWJFTFhQS1pqTzZONk90NDJIQ0pzTFdFMC1kdGlnaGJRR2lQTnZjVHVvbDd0SjlzUzhTdXJiNl9DMXl1eFN2Z2x6ZV9nSGJQNGxEQ1hDdHFoVGlSeGFmMzdsbG5ZcXZLbC0xMlJVOHJlU0E5WkFKcXBuVWNKbUQzRXhQdkswTlpNR1F5SFBndWs2dFZwRmNxS0Y2OVp2LWVvTmc9PXwa834Gqa_XEA5QQg7bVXgvdF3xnPxb8SYWMk2DYOmPfg==

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