From d6c12b9311189978fdfa241f4d57d87e39b02938 Mon Sep 17 00:00:00 2001 From: Flummi Date: Wed, 3 Mar 2021 05:34:57 +0100 Subject: [PATCH] aktueller Stand --- package-lock.json | 6 +- package.json | 2 +- public/s/css/f0ck-custom.css | 680 ++++++++++++++++------ public/s/css/style.css | 2 +- public/s/img/broken.png | Bin 0 -> 4512 bytes public/s/js/bootstrap-native.min.js | 2 + public/s/js/scroller.js | 2 +- public/s/vcr.ttf | Bin 0 -> 75864 bytes src/inc/routes/{api.mjs => apiv1.mjs} | 28 +- src/inc/routes/inc/{api.mjs => apiv1.mjs} | 0 src/inc/routes/index.mjs | 58 +- src/inc/trigger/f0ckgag.mjs | 2 +- src/inc/trigger/parser.mjs | 6 +- views/index.html | 4 +- views/item.html | 11 +- views/main/footer.html | 10 +- views/main/header.html | 10 +- views/partials/pagination.html | 15 + views/snippets/navbar.html | 23 +- views/test.html | 16 + 20 files changed, 652 insertions(+), 225 deletions(-) create mode 100755 public/s/img/broken.png create mode 100644 public/s/js/bootstrap-native.min.js create mode 100644 public/s/vcr.ttf rename src/inc/routes/{api.mjs => apiv1.mjs} (75%) rename src/inc/routes/inc/{api.mjs => apiv1.mjs} (100%) create mode 100644 views/partials/pagination.html create mode 100644 views/test.html diff --git a/package-lock.json b/package-lock.json index ac483b7..7602e80 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,9 +15,9 @@ "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==" }, "cuffeo": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cuffeo/-/cuffeo-1.0.7.tgz", - "integrity": "sha512-9XpEUnN9jIfaiIMJwcfPW61PxTxBJUoa9VN/TjiWk7Z/jNStdrlPTdn6Y2cdclsWsHtAyabHdCNUAHscQ89WCQ==", + "version": "1.0.7-2", + "resolved": "https://registry.npmjs.org/cuffeo/-/cuffeo-1.0.7-2.tgz", + "integrity": "sha512-4ZrP6C5jpCu7+UtgB3rJl5wZJ48FSrdaTVgyx7bPtC0gMcEm0O5NcCjiZkJDvbLqsN92LAywFoGmdjt/rXG9EA==", "requires": { "flumm-fetch-cookies": "^1.3.5" } diff --git a/package.json b/package.json index 7acc4a6..919863e 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "author": "Flummi", "license": "MIT", "dependencies": { - "cuffeo": "^1.0.7", + "cuffeo": "^1.0.7-2", "flumm-fetch-cookies": "^1.4.0", "mariadb": "^2.5.2" } diff --git a/public/s/css/f0ck-custom.css b/public/s/css/f0ck-custom.css index 19d61eb..f057669 100644 --- a/public/s/css/f0ck-custom.css +++ b/public/s/css/f0ck-custom.css @@ -1,146 +1,161 @@ /* written by sirx for f0ck.me */ /* use whatever you like */ ul#posts { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); - grid-gap: 1em; - list-style: none; - padding: 0; - margin-top: 10px; + display: grid; + grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); + grid-gap: 1em; + list-style: none; + padding: 0; + margin-top: 10px; } .navbar { - background-color: #1b1b1b; - position: sticky; - top: 0; - z-index: 1; - font-family: monospace; - text-transform: uppercase; - text-shadow: 1px 1px black; + background-color: #1b1b1b; + position: sticky; + top: 0; + z-index: 1; + font-family: monospace; + text-transform: uppercase; + text-shadow: 1px 1px black; } body { - background-color: black; - color: white; + background-color: black; + color: white; } html { - background-color: black; + background-color: black; } .container.is-fluid { - padding-top: 10px; + padding-top: 10px; } li.post { - position: relative; + position: relative; } span.item-mime { - position: absolute; - right: 0; - top: 0; - color: #68da20; - text-shadow: 1px 1px black; - font-size: 11px; - text-transform: uppercase; - background: #000000b8; - visibility: hidden; + position: absolute; + right: 0; + top: 0; + color: #68da20; + text-shadow: 1px 1px black; + font-size: 11px; + text-transform: uppercase; + background: #000000b8; + visibility: hidden; } li.post:hover > span.item-mime { - visibility: visible; + visibility: visible; } a.navbar-item:focus, a.navbar-item:focus-within, a.navbar-item:hover, a.navbar-item.is-active, .navbar-link:focus, .navbar-link:focus-within, .navbar-link:hover, .navbar-link.is-active { - background-color: #000000; - color: #ffffff; + background-color: #000000; + color: #ffffff; } a#next, a#prev { - position: relative; - font-weight: normal; - top: 0px; - bottom: 932px; - margin: unset; - font-size: 30px; - color: #99ff00; - padding: 140px 40px 140px 40px; - cursor: pointer; - -webkit-transform: translateZ(0); - align-content: inherit; - align-self: center; - bottom: 0; + position: relative; + font-weight: normal; + top: 0px; + bottom: 932px; + margin: unset; + font-size: 30px; + color: #99ff00; + padding: 140px 40px 140px 40px; + cursor: pointer; + align-content: inherit; + align-self: center; + bottom: 0; } a#next, a#prev { - position: sticky; - top: 0; + position: sticky; + top: 0; } .content { - display: grid; - justify-content: space-around; - grid-template-columns: 0fr 1fr 0fr; + display: grid; + justify-content: space-around; + grid-template-columns: 0fr 1fr 0fr; } .previous-post, .next-post { - display: flex; + display: flex; } img#f0ck-image { - max-width: 100%; - max-height: 500px; + max-width: 100%; + max-height: 500px; } .metadata { - text-align: center; - position: sticky; - bottom: 0; + text-align: center; + position: sticky; + bottom: 0; } a:hover { - color: #99ff00; - opacity: 0.8; + color: #99ff00; + opacity: 0.8; } a { - color: #99ff00; - cursor: pointer; - text-decoration: none; + color: #99ff00; + cursor: pointer; + text-decoration: none; } .navbar-item, .navbar-link { - color: white; - text-shadow: 1px 1px black; + color: white; + text-shadow: 1px 1px black; } .media-object { - text-align: center; - align-self: center; + text-align: center; + align-self: center; } /*a.id-link { - padding-right: 5; +padding-right: 5; }*/ div#my-video { -max-height: unset; + max-height: unset; } -.box:not(:last-child), .content:not(:last-child), .notification:not(:last-child), .progress:not(:last-child), .table:not(:last-child), .table-container:not(:last-child), .title:not(:last-child), .subtitle:not(:last-child), .block:not(:last-child), .highlight:not(:last-child), .breadcrumb:not(:last-child), .level:not(:last-child), .list:not(:last-child), .message:not(:last-child), .pagination:not(:last-child), .tabs:not(:last-child) { - margin-bottom: 0; - margin-top: 0; +.box:not(:last-child), +.content:not(:last-child), +.notification:not(:last-child), +.progress:not(:last-child), +.table:not(:last-child), +.table-container:not(:last-child), +.title:not(:last-child), +.subtitle:not(:last-child), +.block:not(:last-child), +.highlight:not(:last-child), +.breadcrumb:not(:last-child), +.level:not(:last-child), +.list:not(:last-child), +.message:not(:last-child), +.pagination:not(:last-child), +.tabs:not(:last-child) { + margin-bottom: 0; + margin-top: 0; } .video-container { position: relative; - padding-bottom: 56.25%; /*16:9*/ - padding-top: 30px; - height: 0; + padding-bottom: 56.25%; + /*16:9*/ + padding-top: 30px; + height: 0; overflow: hidden; } - + .video-container video { position: absolute; top: 0; @@ -150,189 +165,516 @@ max-height: unset; } .irc { - padding: 10px; - color: white; + padding: 10px; + color: white; } a#next:hover { - box-shadow: -1px 0px #99ff001c; - transition: all .2s; + box-shadow: -1px 0px #99ff001c; + transition: all .2s; } a#prev:hover { - box-shadow: 1px 0px #99ff001c; - transition: all .2s; + box-shadow: 1px 0px #99ff001c; + transition: all .2s; } .navbar-brand a.navbar-item:focus, .navbar-brand a.navbar-item:hover { - background-color: black; + background-color: black; } .controls { - text-align: center; + text-align: center; } .content { - min-height: 517px; + min-height: 517px; } #themeselector { - color: #fff; - background-color: #343a40; - display: inline-block; - font-weight: 600; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: 0.25rem; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - border: 0; - outline: 0; + color: #fff; + background-color: #343a40; + display: inline-block; + font-weight: 600; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + border: 0; + outline: 0; } select { - font-size: small; + font-size: small; } @media (max-width: 600px) { - a#next, a#prev { - padding: 0; - } + a#next, a#prev { + padding: 0; + } - .content { - min-height: 0; - } + .content { + min-height: 0; + } } img#biohaz { - width: 28px; + width: 28px; } .metadata { - background: #1b1b1b; - border-top: 1px solid #262626; + background: #1b1b1b; + border-top: 1px solid #262626; } .content { - border-left: 1px solid #1b1b1b; - border-right: 1px solid #1b1b1b; + border-left: 1px solid #1b1b1b; + border-right: 1px solid #1b1b1b; } .controls { - border-left: 1px solid #1b1b1b; - border-right: 1px solid #1b1b1b; + border-left: 1px solid #1b1b1b; + border-right: 1px solid #1b1b1b; } - #themeselector { - padding: 0.04em 0.2em; - vertical-align: top; - font-weight: 560; + padding: 0.04em 0.2em; + vertical-align: top; + font-weight: 560; } span.badge.badge-dark { - margin-right: 5px; + margin-right: 5px; } .badge-dark, #themeselector { - color: #fff; - background-color: #000000; - border-radius: 0; - border-left: 1px solid #262626; - border-right: 1px solid #262626; - border-top: 1px solid #000; - border-bottom: 1px solid #262626; + color: #fff; + background-color: #000000; + border-radius: 0; + border-left: 1px solid #262626; + border-right: 1px solid #262626; + border-top: 1px solid #000; + border-bottom: 1px solid #262626; } + .video-js .vjs-control-bar { - background-color: #1b1b1b !important; + background-color: #1b1b1b !important; } a#rndbtn { - color: #fff; - background-color: #1b1b1b; - border-radius: 0; - border-left: 1px solid #262626; - border-right: 1px solid #262626; - border-top: 1px solid #262626; - border-bottom: 1px solid #262626; - padding: 0px 5px 0px 5px; - text-decoration: none; + color: #fff; + background-color: #1b1b1b; + border-radius: 0; + border-left: 1px solid #262626; + border-right: 1px solid #262626; + border-top: 1px solid #262626; + border-bottom: 1px solid #262626; + padding: 0px 5px 0px 5px; + text-decoration: none; } .contact { - border-left: 1px solid #1b1b1b; - border-right: 1px solid #1b1b1b; - border-bottom: 1px solid #1b1b1b; - padding: 5px; + border-left: 1px solid #1b1b1b; + border-right: 1px solid #1b1b1b; + border-bottom: 1px solid #1b1b1b; + padding: 5px; } .irc { - border-left: 1px solid #1b1b1b; - border-right: 1px solid #1b1b1b; - border-bottom: 1px solid #1b1b1b; - padding: 5px; + border-left: 1px solid #1b1b1b; + border-right: 1px solid #1b1b1b; + border-bottom: 1px solid #1b1b1b; + padding: 5px; } /* Testing Area */ .content { - position: relative; + position: relative; } a#next { - top: 0; - position: absolute; - z-index: 1; - left: 0; - background: transparent; - width: 25%; - height: 95%; + top: 0; + position: absolute; + z-index: 1; + left: 0; + background: transparent; + width: 25%; + height: 95%; } a#prev { - position: absolute; - z-index: 1; - right: 0; - background: transparent; - width: 25%; - height: 95%; + position: absolute; + z-index: 1; + right: 0; + background: transparent; + width: 25%; + height: 95%; } .vjs-control-bar { - z-index: 2; + z-index: 2; } .arrow-prev { - height: 100%; - display: flex; - width: 100%; - align-items: center; - justify-content: end; + height: 100%; + display: flex; + width: 100%; + align-items: center; + justify-content: end; } .arrow-next { - height: 100%; - display: flex; - width: 100%; - align-items: center; - justify-content: start; + height: 100%; + display: flex; + width: 100%; + align-items: center; + justify-content: start; } - a#next:hover { - opacity: 1; - box-shadow: none; + opacity: 1; + box-shadow: none; } a#next { - opacity: 0.2; + opacity: 0.2; } a#prev:hover { - opacity: 1; - box-shadow: none; + opacity: 1; + box-shadow: none; } a#prev { - opacity: 0.2; + opacity: 0.2; +} + +/* pagination */ +.pagination { + padding: 8px; + background-clip: padding-box; + border: 1px solid; + border-color: #070809 #0d0e0f #131517; + border-color: rgba(0, 0, 0, 0.8) rgba(0, 0, 0, 0.65) rgba(0, 0, 0, 0.5); + border-radius: 3px; + display: inline-block; + vertical-align: baseline; + zoom: 1; *display: inline; + *vertical-align: auto; + background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.12), rgba(0, 0, 0, 0)); + background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.12), rgba(0, 0, 0, 0)); + background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.12), rgba(0, 0, 0, 0)); + background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.12), rgba(0, 0, 0, 0)); + -webkit-box-shadow: 0 1px rgba(255, 255, 255, 0.05); + box-shadow: 0 1px rgba(255, 255, 255, 0.05); +} + +.pagination > a, .pagination > span { + float: left; + margin-left: 5px; + padding: 0 6px; + min-width: 17px; + line-height: 27px; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-size: 12px; + font-weight: 500; + color: #68da20; + text-align: center; + text-decoration: none; + border: 1px solid black; + border-radius: 3px; +} + +.pagination :first-child { + margin-left: 0; +} + +.pagination > a { + text-decoration: none; + text-shadow: 0 1px black; + background-clip: padding-box; + border-color: rgba(0, 0, 0, 0.9); + background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0)); + background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0)); + background-image: -o-linear-gradient(top, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0)); + background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0)); + -webkit-box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.04), inset 0 1px rgba(255, 255, 255, 0.04), inset 0 -1px rgba(0, 0, 0, 0.15), 0 1px 1px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.04), inset 0 1px rgba(255, 255, 255, 0.04), inset 0 -1px rgba(0, 0, 0, 0.15), 0 1px 1px rgba(0, 0, 0, 0.1); + -webkit-transition: 0.1s ease-out; + -moz-transition: 0.1s ease-out; + -o-transition: 0.1s ease-out; + transition: 0.1s ease-out; +} + +.pagination > a:hover { + background-color: #333; + background-color: rgba(255, 255, 255, 0.05); +} + +.pagination > span, .pagination > a:active { + color: #68da20; + text-shadow: 0 -1px black; + background: #1c1c1c; + background: rgba(255, 255, 255, 0.01); + border-color: black rgba(0, 0, 0, 0.65) rgba(0, 0, 0, 0.6); + -webkit-box-shadow: inset 0 1px rgba(0, 0, 0, 0.05), inset 0 2px 2px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.06); + box-shadow: inset 0 1px rgba(0, 0, 0, 0.05), inset 0 2px 2px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.06); +} + +.pagination .prev, .pagination .next { + font-family: Noteworthy, Arial, sans-serif; + font-size: 14px; +} + +@font-face { + font-family: 'VCR'; + src: url('/s/vcr.ttf') format('truetype'); +} + +span#f0ck { + font-family: 'VCR'; + font-size: xx-large; + text-shadow: 1px 1px 1px black, 0px 0px 0px #9f0, -1px -1px 0px black, 1px -1px 0px black, -1px 1px 0px black, 0px 0px 0px #9f0; +} + +.navbar-brand { + padding-bottom: 0; +} + +/* nav overhaul */ +.nav-item { + width: 100%; + text-align: center +} + +.navbar-brand { + padding-top: 0 +} + +.navbar-nav.mr-auto { + flex-flow: row; + justify-content: space-between +} + +.navbar.navbar-expand-lg { + background: #242424 +} + +.navigation-links { + display: flex; + background: #232323; + background-image: none; + border-radius: 3px; + border: 1px solid #000; + background-image: linear-gradient(to bottom,rgba(0,0,0,.12),rgba(0,0,0,0)); + -webkit-box-shadow: 0 1px rgba(255,255,255,.05); + box-shadow: 0 1px rgba(255,255,255,.05); + border: 1px solid; + border-top-color: currentcolor; + border-right-color: currentcolor; + border-bottom-color: currentcolor; + border-left-color: currentcolor; + border-top-color: currentcolor; + border-right-color: currentcolor; + border-bottom-color: currentcolor; + border-left-color: currentcolor; + border-color: #070809 #0d0e0f #131517; + border-color: rgba(0,0,0,.8) rgba(0,0,0,.65) rgba(0,0,0,.5); + border-radius: 3px +} + +.nav-link { + padding: 0; + display: flex; + border: 1px solid #000; + border-radius: 3px; + transition: .1s ease-out +} + +.nav-link { + min-width: 17px; + line-height: 27px; + background-image: -webkit-linear-gradient(top,rgba(255,255,255,.04),rgba(255,255,255,0)); + background-image: -moz-linear-gradient(top,rgba(255,255,255,.04),rgba(255,255,255,0)); + background-image: -o-linear-gradient(top,rgba(255,255,255,.04),rgba(255,255,255,0)); + background-image: linear-gradient(to bottom,rgba(255,255,255,.04),rgba(255,255,255,0)); + -webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 1px rgba(255,255,255,.04),inset 0 -1px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.1) +} + +.nav-item:hover>a:hover { + background-color: #333; + background-color: rgba(255,255,255,.05) +} + +.navbar-nav { + padding: 5px +} + +.nav-item { + width: 100%; + text-align: center +} + +#navbarSupportedContent { + padding: 5px +} + +.pagination-container-fluid { + display: flex; + margin-left: 15px +} + +.navbar-expand-lg .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + margin-right: 5px; + margin-left: 5px +} + +.pagination { + padding: 5px; + background-clip: padding-box; + border: 1px solid; + border-color: #070809 #0d0e0f #131517; + border-color: rgba(0,0,0,.8) rgba(0,0,0,.65) rgba(0,0,0,.5); + border-radius: 3px; + display: inline-block; + vertical-align: baseline; + zoom:1;background-image: -webkit-linear-gradient(top,rgba(0,0,0,.12),rgba(0,0,0,0)); + background-image: -moz-linear-gradient(top,rgba(0,0,0,.12),rgba(0,0,0,0)); + background-image: -o-linear-gradient(top,rgba(0,0,0,.12),rgba(0,0,0,0)); + background-image: linear-gradient(to bottom,rgba(0,0,0,.12),rgba(0,0,0,0)); + -webkit-box-shadow: 0 1px rgba(255,255,255,.05); + box-shadow: 0 1px rgba(255,255,255,.05) +} + +.pagination>a,.pagination>span { + float: left; + margin-left: 5px; + padding: 0 10px; + min-width: 17px; + line-height: 27px; + font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; + font-size: 12px; + font-weight: 500; + color: #68da20; + text-align: center; + text-decoration: none; + border: 1px solid #000; + border-radius: 3px +} + +.pagination :first-child { + margin-left: 0 +} + +.pagination>a { + text-decoration: none; + text-shadow: 0 1px #000; + background-clip: padding-box; + border-color: rgba(0,0,0,.9); + background-image: -webkit-linear-gradient(top,rgba(255,255,255,.04),rgba(255,255,255,0)); + background-image: -moz-linear-gradient(top,rgba(255,255,255,.04),rgba(255,255,255,0)); + background-image: -o-linear-gradient(top,rgba(255,255,255,.04),rgba(255,255,255,0)); + background-image: linear-gradient(to bottom,rgba(255,255,255,.04),rgba(255,255,255,0)); + -webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 1px rgba(255,255,255,.04),inset 0 -1px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.1); + box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 1px rgba(255,255,255,.04),inset 0 -1px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.1); + -webkit-transition: .1s ease-out; + -moz-transition: .1s ease-out; + -o-transition: .1s ease-out; + transition: .1s ease-out +} + +.pagination>a:hover { + background-color: #333; + background-color: rgba(255,255,255,.05) +} + +.pagination>a:active,.pagination>span { + color: #68da20; + text-shadow: 0 -1px #000; + background: #1c1c1c; + background: rgba(255,255,255,.01); + border-color: #000 rgba(0,0,0,.65) rgba(0,0,0,.6); + -webkit-box-shadow: inset 0 1px rgba(0,0,0,.05),inset 0 2px 2px rgba(0,0,0,.3),0 1px rgba(255,255,255,.06); + box-shadow: inset 0 1px rgba(0,0,0,.05),inset 0 2px 2px rgba(0,0,0,.3),0 1px rgba(255,255,255,.06) +} + +.pagination .next,.pagination .prev { + font-family: Noteworthy,Arial,sans-serif; + font-size: 14px +} + +.navbar-nav { + width: 100%; + padding: 5px +} + +.nav-link-identifier { + text-align: center; + width: 100% +} + +@media (max-width: 768px) { + ul#posts { + grid-template-columns: repeat(auto-fill,minmax(120px,1fr)); + text-align: center; + padding-top: 5px + } +} + +@media (max-width: 422px) { + ul#posts { + grid-column-gap: 0; + grid-row-gap: 5px + } + + .container-fluid,.container-lg,.container-md,.container-sm,.container-xl { + padding-right: 5px; + padding-left: 5px + } +} + +@media (max-width: 410px) { + ul#posts { + grid-column-gap: 15px; + grid-row-gap: 10px + } + + .container-fluid,.container-lg,.container-md,.container-sm,.container-xl { + padding-right: 15px; + padding-left: 15px + } +} + +@media (max-width: 991px) { + .navbar-nav { + width: 100%; + padding: 0 + } + + .navbar-expand-lg .navbar-nav .nav-link { + margin: 0 + } + + .pagination-container-fluid { + display: flex; + justify-content: center; + padding-top: 5px; + margin-bottom: 0 + } + + .navbar { + padding: .5rem 1rem 0 + } + + .navigation-links { + border-color: transparent transparent transparent + } + + .pagination-container-fluid { + margin-left: 0 + } } diff --git a/public/s/css/style.css b/public/s/css/style.css index e06cdc8..9d7e9b6 100644 --- a/public/s/css/style.css +++ b/public/s/css/style.css @@ -320,4 +320,4 @@ video#player { pre { letter-spacing: 7px; -} \ No newline at end of file +} diff --git a/public/s/img/broken.png b/public/s/img/broken.png new file mode 100755 index 0000000000000000000000000000000000000000..711447262ecc33e1c5c54ee6a1aaadfc1e6fd5d6 GIT binary patch literal 4512 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4mJh`hQoG=rx_R+*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>l<@V)7+DRZ|Hf%BFfhnwhD4M&=jZ08=9Msj zfOAo5Vo7R>LV0FMhJw4NZ$OG(Dmw#%Ad9DqV@SoVw{t5?LY^)>Q2+hhyp&D6H^V(o zuq9q!)zGkLtCbXs<&9I8-)!RJuX@>Xg$krtajjTjH}w&df3?lN@cFI|1vxKQhni`2 zNmu)D2snMq-K4(x&hLL5CdP~3_?-Ck_uNVQa<$_9ziapB@4e5&)aalfz`?@Qm{6ej zb?JeK+!F`)wIA+NnzXl{BVp^p>rx)mO_yYpsGO40nbhMsNw0oKh-heN#=ES?r}^in zoS(^Z<<&{YLvLO#x{QT#eY=$=O9)PM2=P#{itJWlHFW6`U$uYv zyBB%$V!liK7u86vu<;gdH$E=l<#E@L@7lBt6^Dgu)L3@(SlX#f`kiDnbM_Q}zZ4~_ z-gV{jH(s~>t$+A>Q~t~s8!lJ=`gKNBbWaG%$)yDff&L3QI^?!!!UG4g}y(@ZC-!R402`)US!Fr@EjDM!E zr@!psQ!}-9)+%r<;H|3N-?KyU<({eK#+RLR?bj6Tk;}+;c$stX?$x&Fj}JmauOze_ zz3drYt644OZ*)KLc(L98#m0v=oLu5QV(tq;bBSn z`&l$2fIERBHR_bayKXPX=eKv2mpffF>srlKxpVKt?X}X$wW7UzZE@~vqn^AD>yNBCb{zpCI3x7Mle#`TYx%Dz4A2n>CZ^yJ6%j5TI)Z_h98c6`m+;$oD1BH&Q%`mI+MgvdRsk9nK(^0naNRRO_H zpBL`myl~kJzpKk5wN6i{<8?Mt|MYu|oXIuI-=Qt|s2P(y(w%W{$;f+Gm z&`k?6r1ht~U+ntvSH0ZyUc+jw{j)Z=g@#EdHb*ryb{+0py|nGAyWR7tUCdjw7|-6k z;ls1@@{g^mb4|mf6`dLywHwz~u%AA?@1UecqpED|x!yBfUJs}4(`yuX@JKZv>UBiq zC;w^FYMU>={+KV}wtUgq-L3J*(mtuL?u}49aA3-T&;Rl(H>QYxyR?1f*Dz zTdk9fD)z4b#@E6yz45#J!>7r+BP(*ux5`bg_e|(>J-4&7=|g%R# zJ-+Y3%E$3RqBqn!d|W2iTVLCeb5A$It4Sc?f!Bv;AN6O3f3ln!xBY+mGL9v0R{C^F zo{BEFI~?lNz<6p`<)4>7rrSjAnHv<(sls`vO`(5BZ}j9(k><6Qkst-^pDX_#F}Ep7 zQBQ4bc0E?G7zPBxWg1_>`Ys@`&T!ynS=#$E-BS`d!Qto%BjS(Glo9gnrJ>Dnd7Y{rwVV1ubO;B_4Um*dkPhA zyK)xH^NDxsQ=PkgQ(nUJ8#Djp{>i!4yR*BVXYaJR6Fv7NY!$rQ?$vbO?_KJ-hyFi~ z-4(r{W}wWwf9jtr8~2z#w#*Y_n!|1!Zls*bBYphbgL^%lD#ub1I{aM4t$C8KgAGs!l!`sdGo{WmY( z?0IEfvc}lyT1wl}zQn6%L`66l&jmbpS4%!W%V*s?8RHKnZXWXIS6tALv%3D?>WxO1 z`10#_7dNOhYBEi}cjU?GpFFe0Hm+Ya;WxMa)71wiIi$C&(Oj~$_xaV`@hN>7ENpDo z9IA5ICYLVz{Cl4zpKpi}Ynb%;dD$O3cXvNp=C#X5@a|-5|GgJ4FYkG{bN>Ivl5qCw z(5Fh%)~wuNtJkL;=jG?$c6U$9qo&k9v#+0(FUm^^TCr4J`IMAImF&t%XFiwj_qfjf zIYOP~MdzF|CsY=lFXw0M6;l%OxGZ_Hb@O@mlC2weZ);I5yxC*%_qUWT&ukwrCq4h& zRsjzlUDGj}w`AcXhU_(FZ+_42gk z$A^<^6j@%Zo4nX`7x(IITi8k_)x48yJlywrUU=p9Wiys1w3$l zAzU9fwXt_^d)P4VuBS|y)VrEl?J6@(ZwBu?DDya2=)?r8XKGXVu^TPUD3|;MP z>)BoRHq^X$d1$TH^X*r?vu(5c-apKL+xw4qi?{3I))gs>O4L3v+uz>P^5~TF8LJ(w zyt=0UUaLASnvi5X)2vpq(uu+0W6_bwzRyhi{DVc+@6464oB!VWjYW3X&#V9XBjZbF zl)X=t@(Kzq2)pp)<)RNf-`B3zeQ54_`{q;Y9G(QvD|$83FZgEM zzZdTwtloV0`#bT9jT?JD7Dn2x?r~alF^gA)i*c9o%FpMPN5<@F{&Oeu$-LZd$)ns$ z<2UYKJ26zeaDG|B+N;N+x2pC`+8U#JvL)usyVO-(uUKTD+n`M7TPT)z*P@24<;<(|;rERaZ_&+|-k9)lL zSyo)pjq~}JGZhbrE=iCqd?q2L)}P|{Nkb><@X@#1R$g>W5xVt(rA_VW<_9O9->LY{ zz2--Poje!gudGMWbgLu9&szM{T`6=dZmC<#x_dHGKIg_dVv>JuuKLSC{$SG&K|SoXcG0)8dYO_386+d>(Cj&S_ConCnx&U%Y!JZ(Z8QN|k^63vPVOshFc1+Ir^Je?$E_Kcvzh zyj1j5HdOCVx)^)jFp#65)u5%Y`d3BT?Bofx#Tnkbrw;1otgtv?D=og^^%u`r@vg&t zn|IDSs=7NO=$Gi%eeMTO8!hQkwA7k;e686Rr-pmy|6aVf(nf50^Ud#7;nE_x$?3VA z-}CEUT`CtWzY%z^z9n>Nbwt>{`C|7EFYyud$b38_jq7=yqJw@i*Yj&rF2=mR{UUfz z!I$|m>upa7^I4yr{<&`L*EMz@P2X?5_HByVBo@P&GZqC^UdU1o;X1IBQOmKog<-EmUS#vV?;Psu zrTuD7@4IFd#{PQQY_Y)D_*3$8MR(MCHwJL4MS6D$ESO$!qj2k$PuE{LS^4$92^GC` zt)Qt~ul%CCN4oKAExv#y8n(ai$?vKuR3udQDHUsn2E zP22j@`;_ITs`-Dv!|2LUkm|BSX?=!&sp0RxiJ?h;4;0)v6j(U;R{c7h95C@hhlag( zQpN?AdH!p(7Bt;j&oV(JCT{!xH&LE$mtJh>NU>YZAl7@%-q$8}#VYfP^>dyoJpH%r zoY<|}^)Guo+>C!J%{+fe$$U~i&-eO`S1z_Z`pWX2=g9(&2QL>bT-#W5UtIlHfJ(8> z<6p05RBqUK>q2|vjHJGg>(!!PzxYrRcxOFJ!Ht#KtJBx-zP!FdS#f&Lg^W7QNx$1) zIL|Oh(YXH0&owx-AS~cr*7NSV>l``xPZqZYS=Fp}Ra@MB`q{yz)E*Jfchi3#R+?O4 zqIi9O@0EuxxvLVEANI@MFT7xL>snFvo3B4cMlZhTbnGin_s*`VVbY08FLzI08F?vU zu5IgWAHjdN4YwAXY&HGxJmH>w#@$Vea!dI3iutc-oj)u2NBF^IrV6dc3q!-Dg)gmt zmU4{cRM)nz=M%4Z`&3xI7b{vE6fx1X^=9K|KI`a!{x=UEKg){KyCt^gYnS8O>HK@A zHNW%wlx!rq?&8-o>r7jej;2gnclERJ(bFA0oFyqS{;?OgH5y+37h_rX)B6zzZ~<)^7Q|5z4PCLCRDY*JiXIO zar$*5btAK!jtX|c6E979)W2_9w6^i;-mg_VuOEBH{om2`62~@^DGNXDI$_e1c6!d#F>eE+o!l>mZ3~l2y2t*xVt+>T`>D;BrdGUodHQFk<+OVFBGK&;mpZt6-STY7^&oy$IIMVf(aBmFwFVdQ&MBb@0G0cLZ~y=R literal 0 HcmV?d00001 diff --git a/public/s/js/bootstrap-native.min.js b/public/s/js/bootstrap-native.min.js new file mode 100644 index 0000000..1ff3ee3 --- /dev/null +++ b/public/s/js/bootstrap-native.min.js @@ -0,0 +1,2 @@ +// Native JavaScript for Bootstrap v3.0.14f | 2021 © dnp_theme | MIT-License +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).BSN=e()}(this,(function(){"use strict";var t="webkitTransition"in document.head.style?"webkitTransitionEnd":"transitionend",e="webkitTransition"in document.head.style||"transition"in document.head.style,i="webkitTransition"in document.head.style?"webkitTransitionDuration":"transitionDuration",n="webkitTransition"in document.head.style?"webkitTransitionProperty":"transitionProperty";function o(t){var o=getComputedStyle(t),a=o[n],s=o[i],l=s.includes("ms")?1:1e3,c=e&&a&&"none"!==a?parseFloat(s)*l:0;return isNaN(c)?0:c}function a(e,i){var n=0,a=new Event(t),s=o(e);s?(e.addEventListener(t,(function o(a){a.target===e&&(i.apply(e,[a]),e.removeEventListener(t,o),n=1)})),setTimeout((function(){!n&&e.dispatchEvent(a)}),s+17)):i.apply(e,[a])}function s(t,e){var i=e&&e instanceof Element?e:document;return t instanceof Element?t:i.querySelector(t)}function l(t,e,i){var n=new CustomEvent(t+".bs."+e,{cancelable:!0});return void 0!==i&&Object.keys(i).forEach((function(t){Object.defineProperty(n,t,{value:i[t]})})),n}function c(t){this&&this.dispatchEvent(t)}function r(t){var e,i=this,n=l("close","alert"),o=l("closed","alert");function r(e){t[e=e?"addEventListener":"removeEventListener"]("click",d,!1)}function d(n){e=n&&n.target.closest(".alert"),(t=s('[data-dismiss="alert"]',e))&&e&&(t===n.target||t.contains(n.target))&&i.close()}function u(){r(),e.parentNode.removeChild(e),c.call(e,o)}i.close=function(){if(e&&t&&e.classList.contains("show")){if(c.call(e,n),n.defaultPrevented)return;i.dispose(),e.classList.remove("show"),e.classList.contains("fade")?a(e,u):u()}},i.dispose=function(){r(),delete t.Alert},t=s(t),e=t.closest(".alert"),t.Alert&&t.Alert.dispose(),t.Alert||r(1),i.element=t,t.Alert=i}function d(t){var e,i=l("change","button");function n(n){var o,a="LABEL"===n.target.tagName?n.target:n.target.closest("LABEL")?n.target.closest("LABEL"):null;if(o=a&&a.getElementsByTagName("INPUT")[0]){if(c.call(o,i),c.call(t,i),"checkbox"===o.type){if(i.defaultPrevented)return;o.checked?(a.classList.remove("active"),o.getAttribute("checked"),o.removeAttribute("checked"),o.checked=!1):(a.classList.add("active"),o.getAttribute("checked"),o.setAttribute("checked","checked"),o.checked=!0),t.toggled||(t.toggled=!0)}if("radio"===o.type&&!t.toggled){if(i.defaultPrevented)return;(!o.checked||0===n.screenX&&0==n.screenY)&&(a.classList.add("active"),a.classList.add("focus"),o.setAttribute("checked","checked"),o.checked=!0,t.toggled=!0,Array.from(e).map((function(t){var e=t.getElementsByTagName("INPUT")[0];t!==a&&t.classList.contains("active")&&(c.call(e,i),t.classList.remove("active"),e.removeAttribute("checked"),e.checked=!1)})))}setTimeout((function(){t.toggled=!1}),50)}}function o(t){32===(t.which||t.keyCode)&&t.target===document.activeElement&&n(t)}function a(t){32===(t.which||t.keyCode)&&t.preventDefault()}function r(t){if("INPUT"===t.target.tagName){var e="focusin"===t.type?"add":"remove";t.target.closest(".btn").classList[e]("focus")}}function d(e){t[e=e?"addEventListener":"removeEventListener"]("click",n,!1),t[e]("keyup",o,!1),t[e]("keydown",a,!1),t[e]("focusin",r,!1),t[e]("focusout",r,!1)}this.dispose=function(){d(),delete t.Button},(t=s(t)).Button&&t.Button.dispose(),(e=t.getElementsByClassName("btn")).length&&(t.Button||d(1),t.toggled=!1,t.Button=this,Array.from(e).map((function(t){!t.classList.contains("active")&&s("input:checked",t)&&t.classList.add("active"),t.classList.contains("active")&&!s("input:checked",t)&&t.classList.remove("active")})))}var u="onmouseleave"in document?["mouseenter","mouseleave"]:["mouseover","mouseout"],m=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});document.addEventListener("DOMContentLoaded",(function t(){document.removeEventListener("DOMContentLoaded",t,e)}),e)}catch(t){}return t}()&&{passive:!0};function f(t,e){e=e||{};var i,n,r,d,f,h,g,p,v,L=this;function b(){!1===n.interval||t.classList.contains("paused")||(t.classList.add("paused"),!i.isSliding&&(clearInterval(i.timer),i.timer=null))}function y(){!1!==n.interval&&t.classList.contains("paused")&&(t.classList.remove("paused"),!i.isSliding&&(clearInterval(i.timer),i.timer=null),!i.isSliding&&L.cycle())}function w(t){if(t.preventDefault(),!i.isSliding){var e=t.target;if(!e||e.classList.contains("active")||!e.getAttribute("data-slide-to"))return!1;i.index=parseInt(e.getAttribute("data-slide-to")),L.slideTo(i.index)}}function A(t){if(t.preventDefault(),!i.isSliding){var e=t.currentTarget||t.srcElement;e===g?i.index++:e===h&&i.index--,L.slideTo(i.index)}}function T(t){var e=t.which;if(!i.isSliding){switch(e){case 39:i.index++;break;case 37:i.index--;break;default:return}L.slideTo(i.index)}}function E(e){e=e?"addEventListener":"removeEventListener",n.pause&&n.interval&&(t[e](u[0],b,!1),t[e](u[1],y,!1),t[e]("touchstart",b,m),t[e]("touchend",y,m)),n.touch&&f.length>1&&t[e]("touchstart",x,m),g&&g[e]("click",A,!1),h&&h[e]("click",A,!1),p&&p[e]("click",w,!1),n.keyboard&&window[e]("keydown",T,!1)}function k(e){t[e=e?"addEventListener":"removeEventListener"]("touchmove",C,m),t[e]("touchend",N,m)}function x(e){i.isTouch||(i.touchPosition.startX=e.changedTouches[0].pageX,t.contains(e.target)&&(i.isTouch=!0,k(1)))}function C(t){if(i.isTouch)return i.touchPosition.currentX=t.changedTouches[0].pageX,"touchmove"===t.type&&t.changedTouches.length>1?(t.preventDefault(),!1):void 0;t.preventDefault()}function N(e){if(i.isTouch&&!i.isSliding&&(i.touchPosition.endX=i.touchPosition.currentX||e.changedTouches[0].pageX,i.isTouch)){if((!t.contains(e.target)||!t.contains(e.relatedTarget))&&Math.abs(i.touchPosition.startX-i.touchPosition.endX)<75)return!1;i.touchPosition.currentXi.touchPosition.startX&&i.index--,i.isTouch=!1,L.slideTo(i.index),k()}}function P(t){Array.from(v).map((function(t){t.classList.remove("active")})),v[t]&&v[t].classList.add("active")}function H(e){if(i.touchPosition){var o=i.index,a=e&&e.target!==f[o]?1e3*e.elapsedTime+100:20,s=L.getActiveIndex(),l="left"===i.direction?"next":"prev";i.isSliding&&setTimeout((function(){i.touchPosition&&(i.isSliding=!1,f[o].classList.add("active"),f[s].classList.remove("active"),f[o].classList.remove("carousel-item-"+l),f[o].classList.remove("carousel-item-"+i.direction),f[s].classList.remove("carousel-item-"+i.direction),c.call(t,d),document.hidden||!n.interval||t.classList.contains("paused")||L.cycle())}),a)}}if(L.cycle=function(){i.timer&&(clearInterval(i.timer),i.timer=null),i.timer=setInterval((function(){var e=i.index||L.getActiveIndex();(function(t){var e=t.getBoundingClientRect(),i=window.innerHeight||document.documentElement.clientHeight;return e.top<=i&&e.bottom>=0})(t)&&(e++,L.slideTo(e))}),n.interval)},L.slideTo=function(e){if(!i.isSliding){var s,u,m=L.getActiveIndex();m!==e&&(me||m===f.length-1&&0===e)&&(i.direction="right"),e<0?e=f.length-1:e>=f.length&&(e=0),s="left"===i.direction?"next":"prev",u={relatedTarget:f[e],direction:i.direction,from:m,to:e},r=l("slide","carousel",u),d=l("slid","carousel",u),c.call(t,r),r.defaultPrevented||(i.index=e,i.isSliding=!0,clearInterval(i.timer),i.timer=null,P(e),o(f[e])&&t.classList.contains("slide")?(f[e].classList.add("carousel-item-"+s),f[e].offsetWidth,f[e].classList.add("carousel-item-"+i.direction),f[m].classList.add("carousel-item-"+i.direction),a(f[e],H)):(f[e].classList.add("active"),f[e].offsetWidth,f[m].classList.remove("active"),setTimeout((function(){i.isSliding=!1,n.interval&&t&&!t.classList.contains("paused")&&L.cycle(),c.call(t,d)}),100))))}},L.getActiveIndex=function(){return Array.from(f).indexOf(t.getElementsByClassName("carousel-item active")[0])||0},L.dispose=function(){var e=["left","right","prev","next"];Array.from(f).map((function(t,i){t.classList.contains("active")&&P(i),e.map((function(e){return t.classList.remove("carousel-item-"+e)}))})),clearInterval(i.timer),E(),i={},n={},delete t.Carousel},(t=s(t)).Carousel&&t.Carousel.dispose(),f=t.getElementsByClassName("carousel-item"),h=t.getElementsByClassName("carousel-control-prev")[0],g=t.getElementsByClassName("carousel-control-next")[0],p=t.getElementsByClassName("carousel-indicators")[0],v=p&&p.getElementsByTagName("LI")||[],!(f.length<2)){var S=t.getAttribute("data-interval"),B="false"===S?0:parseInt(S),I="false"===t.getAttribute("data-touch")?0:1,M="hover"===t.getAttribute("data-pause")||!1,D="true"===t.getAttribute("data-keyboard")||!1,X=e.interval,W=e.touch;(n={}).keyboard=!0===e.keyboard||D,n.pause=!("hover"!==e.pause&&!M)&&"hover",n.touch=W||I,n.interval="number"==typeof X?X:!1===X||0===B||!1===B?0:isNaN(B)?5e3:B,L.getActiveIndex()<0&&(f.length&&f[0].classList.add("active"),v.length&&P(0)),(i={}).direction="left",i.index=0,i.timer=null,i.isSliding=!1,i.isTouch=!1,i.touchPosition={startX:0,currentX:0,endX:0},E(1),n.interval&&L.cycle(),t.Carousel=L}}function h(t,e){e=e||{};var i,n,o,r,d,u,m=this,f=null,h=null;function g(t,e){c.call(t,d),d.defaultPrevented||(t.isAnimating=!0,t.style.height=t.scrollHeight+"px",t.classList.remove("collapse"),t.classList.remove("show"),t.classList.add("collapsing"),t.offsetWidth,t.style.height="0px",a(t,(function(){t.isAnimating=!1,t.setAttribute("aria-expanded","false"),e.setAttribute("aria-expanded","false"),t.classList.remove("collapsing"),t.classList.add("collapse"),t.style.height="",c.call(t,u)})))}m.toggle=function(e){(e&&"A"===e.target.tagName||"A"===t.tagName)&&e.preventDefault(),(t.contains(e.target)||e.target===t)&&(h.classList.contains("show")?m.hide():m.show())},m.hide=function(){h.isAnimating||(g(h,t),t.classList.add("collapsed"))},m.show=function(){var e,l;f&&(i=f.getElementsByClassName("collapse show")[0],n=i&&(s('[data-target="#'+i.id+'"]',f)||s('[href="#'+i.id+'"]',f))),h.isAnimating||(n&&i!==h&&(g(i,n),n.classList.add("collapsed")),e=h,l=t,c.call(e,o),o.defaultPrevented||(e.isAnimating=!0,e.classList.add("collapsing"),e.classList.remove("collapse"),e.style.height=e.scrollHeight+"px",a(e,(function(){e.isAnimating=!1,e.setAttribute("aria-expanded","true"),l.setAttribute("aria-expanded","true"),e.classList.remove("collapsing"),e.classList.add("collapse"),e.classList.add("show"),e.style.height="",c.call(e,r)}))),t.classList.remove("collapsed"))},m.dispose=function(){t.removeEventListener("click",m.toggle,!1),delete t.Collapse},(t=s(t)).Collapse&&t.Collapse.dispose();var p=t.getAttribute("data-parent");o=l("show","collapse"),r=l("shown","collapse"),d=l("hide","collapse"),u=l("hidden","collapse"),null!==(h=s(e.target||t.getAttribute("data-target")||t.getAttribute("href")))&&(h.isAnimating=!1),f=t.closest(e.parent||p),t.Collapse||t.addEventListener("click",m.toggle,!1),t.Collapse=m}function g(t){t.focus?t.focus():t.setActive()}function p(t,e){var i,n,o,a,r,d,u,m=this,f=null,h=[];function p(t){(t.href&&"#"===t.href.slice(-1)||t.parentNode&&t.parentNode.href&&"#"===t.parentNode.href.slice(-1))&&this.preventDefault()}function v(){var e=t.open?"addEventListener":"removeEventListener";document[e]("click",L,!1),document[e]("keydown",y,!1),document[e]("keyup",w,!1),document[e]("focus",L,!1)}function L(e){var i=e.target,n=i&&(i.getAttribute("data-toggle")||i.parentNode&&i.parentNode.getAttribute&&i.parentNode.getAttribute("data-toggle"));("focus"!==e.type||i!==t&&i!==d&&!d.contains(i))&&(i!==d&&!d.contains(i)||!u&&!n)&&(f=i===t||t.contains(i)?t:null,m.hide(),p.call(e,i))}function b(e){f=t,m.show(),p.call(e,e.target)}function y(t){var e=t.which||t.keyCode;38!==e&&40!==e||t.preventDefault()}function w(e){var i=e.which||e.keyCode,n=document.activeElement,o=n===t,a=d.contains(n),s=n.parentNode===d||n.parentNode.parentNode===d,l=h.indexOf(n);s&&(l=o?0:38===i?l>1?l-1:0:40===i&&l=m,E=h.top+u/2+v/2>=f,k=h.top-u<0,x=h.left-d<0,C=h.top+u+v>=f,N=h.left+d+p>=m;i="right"===(i="left"===(i="bottom"===(i="top"===(i=("left"===i||"right"===i)&&x&&N?"top":i)&&k?"bottom":i)&&C?"top":i)&&x?"right":i)&&N?"left":i,-1===e.className.indexOf(i)&&(e.className=e.className.replace(/\b(top|bottom|left|right)+/,i)),c=y.offsetWidth,r=y.offsetHeight,"left"===i||"right"===i?(a="left"===i?h.left+g.x-d-(L?c:0):h.left+g.x+p,w?(o=h.top+g.y,s=v/2-c):E?(o=h.top+g.y-u+v,s=u-v/2-c):(o=h.top+g.y-u/2+v/2,s=u/2-(L?.9*r:r/2))):"top"!==i&&"bottom"!==i||(o="top"===i?h.top+g.y-u-(L?r:0):h.top+g.y+v,A?(a=0,l=h.left+p/2-c):T?(a=m-1.01*d,l=d-(m-h.left)+p/2-c/2):(a=h.left+g.x-d/2+p/2,l=d/2-(L?c:c/2))),e.style.top=o+"px",e.style.left=a+"px",s&&(y.style.top=s+"px"),l&&(y.style.left=l+"px")}function w(t,e){e=e||{};var i,n,o,r,d,f,h,g,p,v,b,w,A,T,E,k,x,C,N,P=this,H=null,S=0,B=/(iPhone|iPod|iPad)/.test(navigator.userAgent),I={};function M(t){null!==H&&t.target===s(".close",H)&&P.hide()}function D(){return{0:e.title||t.getAttribute("data-title")||null,1:e.content||t.getAttribute("data-content")||null}}function X(){null===H&&t.focus()}function W(e){e=e?"addEventListener":"removeEventListener","hover"===I.trigger?(t[e](L,P.show),t[e](u[0],P.show),I.dismissible||t[e](u[1],P.hide)):"click"==I.trigger?t[e](I.trigger,P.toggle):"focus"==I.trigger&&(B&&t[e]("click",X,!1),t[e](I.trigger,P.toggle))}function O(e){H&&H.contains(e.target)||e.target===t||t.contains(e.target)||P.hide()}function R(e){e=e?"addEventListener":"removeEventListener",I.dismissible?document[e]("click",M,!1):("focus"==I.trigger&&t[e]("blur",P.hide),"hover"==I.trigger&&document[e]("touchstart",O,m)),window[e]("resize",P.hide,m)}function j(){R(1),c.call(t,b)}function z(){R(),I.container.removeChild(H),S=null,H=null,c.call(t,A)}P.toggle=function(){null===H?P.show():P.hide()},P.show=function(){clearTimeout(S),S=setTimeout((function(){if(null===H){if(c.call(t,v),v.defaultPrevented)return;!function(){i=D()[0]||null,n=(n=D()[1])?n.trim():null,H=document.createElement("div");var t=document.createElement("div");if(t.classList.add("arrow"),H.appendChild(t),null!==n&&null===I.template){if(H.setAttribute("role","tooltip"),null!==i){var e=document.createElement("h3");e.classList.add("popover-header"),e.innerHTML=I.dismissible?i+p:i,H.appendChild(e)}var o=document.createElement("div");o.classList.add("popover-body"),o.innerHTML=I.dismissible&&null===i?n+p:n,H.appendChild(o)}else{var a=document.createElement("div");a.innerHTML=I.template.trim(),H.className=a.firstChild.className,H.innerHTML=a.firstChild.innerHTML;var l=s(".popover-header",H),c=s(".popover-body",H);i&&l&&(l.innerHTML=i.trim()),n&&c&&(c.innerHTML=n.trim())}I.container.appendChild(H),H.style.display="block",!H.classList.contains("popover")&&H.classList.add("popover"),!H.classList.contains(I.animation)&&H.classList.add(I.animation),!H.classList.contains(N)&&H.classList.add(N)}(),y(t,H,I.placement,I.container),!H.classList.contains("show")&&H.classList.add("show"),I.animation?a(H,j):j()}}),20)},P.hide=function(){clearTimeout(S),S=setTimeout((function(){if(H&&null!==H&&H.classList.contains("show")){if(c.call(t,w),w.defaultPrevented)return;H.classList.remove("show"),I.animation?a(H,z):z()}}),I.delay)},P.dispose=function(){P.hide(),W(),delete t.Popover},(t=s(t)).Popover&&t.Popover.dispose(),o=t.getAttribute("data-trigger"),r=t.getAttribute("data-animation"),d=t.getAttribute("data-placement"),f=t.getAttribute("data-dismissible"),h=t.getAttribute("data-delay"),g=t.getAttribute("data-container"),p='',v=l("show","popover"),b=l("shown","popover"),w=l("hide","popover"),A=l("hidden","popover"),T=s(e.container),E=s(g),k=t.closest(".modal"),x=t.closest(".fixed-top"),C=t.closest(".fixed-bottom"),I.template=e.template?e.template:null,I.trigger=e.trigger?e.trigger:o||"hover",I.animation=e.animation&&"fade"!==e.animation?e.animation:r||"fade",I.placement=e.placement?e.placement:d||"top",I.delay=parseInt(e.delay||h)||200,I.dismissible=!(!e.dismissible&&"true"!==f),I.container=T||(E||(x||(C||(k||document.body)))),N="bs-popover-"+I.placement;var U=D();i=U[0],((n=U[1])||I.template)&&(t.Popover||W(1),t.Popover=P)}function A(t,e){e=e||{};var i,n,o,a,r,d,u=this,f={};function h(){var e,o,a;(n=r.getElementsByTagName("A"),i.scrollTop=i.isWindow?b().y:t.scrollTop,i.length!==n.length||p()!==i.scrollHeight)&&(i.items=[],i.offsets=[],i.scrollHeight=p(),i.maxScroll=i.scrollHeight-(i.isWindow?window.innerHeight:t.getBoundingClientRect().height),Array.from(n).map((function(t){e=t.getAttribute("href"),(o=e&&"#"===e.charAt(0)&&"#"!==e.slice(-1)&&s(e))&&(i.items.push(t),a=o.getBoundingClientRect(),i.offsets.push((i.isWindow?a.top+i.scrollTop:o.offsetTop)-f.offset))})),i.length=i.items.length)}function g(t){d[t=t?"addEventListener":"removeEventListener"]("scroll",u.refresh,m),window[t]("resize",u.refresh,m)}function p(){return d.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}function v(){Array.from(n).map((function(t){return t.classList.contains("active")&&t.classList.remove("active")}))}function L(e){v(),i.activeItem=e,e.classList.add("active");for(var n=[];e.parentNode!==document.body;)e=e.parentNode,["dropdown-menu","nav"].some((function(t){return e.classList.contains(t)}))&&n.push(e);n.map((function(t){var e=t.previousElementSibling;e&&!e.classList.contains("active")&&e.classList.add("active")})),c.call(t,l("activate","scrollspy",{relatedTarget:i.activeItem}))}u.refresh=function(){if(h(),i.scrollTop>=i.maxScroll){var t=i.items[i.length-1];i.activeItem!==t&&L(t)}else{if(i.activeItem&&i.scrollTop0)return i.activeItem=null,void v();for(var e=i.length;e--;)i.activeItem!==i.items[e]&&i.scrollTop>=i.offsets[e]&&(void 0===i.offsets[e+1]||i.scrollTop1&&(t=e[e.length-1]):t=e[0],t}function N(){return s(C().getAttribute("href"))}function P(t){t.preventDefault(),h=t.currentTarget,!o.isAnimating&&A.show()}A.show=function(){if(!(h=h||t).classList.contains("active")){if(v=s(h.getAttribute("href")),g=C(),p=N(),m=l("hide","tab",{relatedTarget:h}),c.call(g,m),m.defaultPrevented)return;o.isAnimating=!0,g.classList.remove("active"),g.setAttribute("aria-selected","false"),h.classList.add("active"),h.setAttribute("aria-selected","true"),r&&(t.parentNode.classList.contains("dropdown-menu")?r.classList.contains("active")||r.classList.add("active"):r.classList.contains("active")&&r.classList.remove("active")),p.classList.contains("fade")?(p.classList.remove("show"),a(p,x)):x()}},A.dispose=function(){t.removeEventListener("click",P,!1),delete t.Tab},(t=s(t)).Tab&&t.Tab.dispose(),n=t.getAttribute("data-height"),o=t.closest(".nav"),r=o&&s(".dropdown-toggle",o),w=!(!e||!1===i.height||"false"===n),o.isAnimating=!1,t.Tab||t.addEventListener("click",P,!1),w&&(T=N().parentNode),t.Tab=A}function E(t,e){e=e||{};var i,n,o,r,d,u,m,f,h=this,g=0,p={};function v(){i.classList.remove("showing"),i.classList.add("show"),c.call(i,m),p.autohide&&h.hide()}function L(){i.classList.add("hide"),c.call(i,f)}function b(){i.classList.remove("show"),p.animation?a(i,L):L()}function y(){clearTimeout(g),t.removeEventListener("click",h.hide,!1),delete t.Toast}h.show=function(){if(i&&!i.classList.contains("show")){if(c.call(i,d),d.defaultPrevented)return;p.animation&&i.classList.add("fade"),i.classList.remove("hide"),i.offsetWidth,i.classList.add("showing"),p.animation?a(i,v):v()}},h.hide=function(t){if(i&&i.classList.contains("show")){if(c.call(i,u),u.defaultPrevented)return;t?b():g=setTimeout(b,p.delay)}},h.dispose=function(){p.animation?a(i,y):y()},(t=s(t)).Toast&&t.Toast.dispose(),i=t.closest(".toast"),n=t.getAttribute("data-animation"),o=t.getAttribute("data-autohide"),r=t.getAttribute("data-delay"),d=l("show","toast"),u=l("hide","toast"),m=l("shown","toast"),f=l("hidden","toast"),p.animation=!1===e.animation||"false"===n?0:1,p.autohide=!1===e.autohide||"false"===o?0:1,p.delay=parseInt(e.delay||r)||500,t.Toast||t.addEventListener("click",h.hide,!1),t.Toast=h}function k(t,e){e=e||{};var i,n,o,r,d,f,h,g,p,v,b,w,A,T,E,k=this,x=null,C=0,N={};function P(){return t.getAttribute("title")||t.getAttribute("data-title")||t.getAttribute("data-original-title")}function H(e){x&&x.contains(e.target)||e.target===t||t.contains(e.target)||k.hide()}function S(t){t=t?"addEventListener":"removeEventListener",document[t]("touchstart",H,m),window[t]("resize",k.hide,m)}function B(){S(1),c.call(t,h)}function I(){S(),N.container.removeChild(x),x=null,C=null,c.call(t,p)}function M(e){t[e=e?"addEventListener":"removeEventListener"](L,k.show,!1),t[e](u[0],k.show,!1),t[e](u[1],k.hide,!1)}k.show=function(){clearTimeout(C),C=setTimeout((function(){if(null===x){if(c.call(t,f),f.defaultPrevented)return;!1!==function(){if(i=P()){if(x=document.createElement("div"),N.template){var t=document.createElement("div");t.innerHTML=N.template.trim(),x.className=t.firstChild.className,x.innerHTML=t.firstChild.innerHTML,s(".tooltip-inner",x).innerHTML=i.trim()}else{var e=document.createElement("div");e.classList.add("arrow"),x.appendChild(e);var n=document.createElement("div");n.classList.add("tooltip-inner"),x.appendChild(n),n.innerHTML=i}x.style.left="0",x.style.top="0",x.setAttribute("role","tooltip"),!x.classList.contains("tooltip")&&x.classList.add("tooltip"),!x.classList.contains(N.animation)&&x.classList.add(N.animation),!x.classList.contains(E)&&x.classList.add(E),N.container.appendChild(x)}}()&&(y(t,x,N.placement,N.container),!x.classList.contains("show")&&x.classList.add("show"),N.animation?a(x,B):B())}}),20)},k.hide=function(){clearTimeout(C),C=setTimeout((function(){if(x&&x.classList.contains("show")){if(c.call(t,g),g.defaultPrevented)return;x.classList.remove("show"),N.animation?a(x,I):I()}}),N.delay)},k.toggle=function(){x?k.hide():k.show()},k.dispose=function(){M(),k.hide(),t.setAttribute("title",t.getAttribute("data-original-title")),t.removeAttribute("data-original-title"),delete t.Tooltip},(t=s(t)).Tooltip&&t.Tooltip.dispose(),n=t.getAttribute("data-animation"),o=t.getAttribute("data-placement"),r=t.getAttribute("data-delay"),d=t.getAttribute("data-container"),f=l("show","tooltip"),h=l("shown","tooltip"),g=l("hide","tooltip"),p=l("hidden","tooltip"),v=s(e.container),b=s(d),w=t.closest(".modal"),A=t.closest(".fixed-top"),T=t.closest(".fixed-bottom"),N.animation=e.animation&&"fade"!==e.animation?e.animation:n||"fade",N.placement=e.placement?e.placement:o||"top",N.template=e.template?e.template:null,N.delay=parseInt(e.delay||r)||200,N.container=v||(b||(A||(T||(w||document.body)))),E="bs-tooltip-"+N.placement,(i=P())&&(t.Tooltip||(t.setAttribute("data-original-title",i),t.removeAttribute("title"),M(1)),t.Tooltip=k)}var x={};function C(t,e){Array.from(e).map((function(e){return new t(e)}))}function N(t){for(var e in t=t||document,x)C(x[e][0],t.querySelectorAll(x[e][1]))}function P(t,e){Array.from(e).map((function(e){return e[t].dispose()}))}x.Alert=[r,'[data-dismiss="alert"]'],x.Button=[d,'[data-toggle="buttons"]'],x.Carousel=[f,'[data-ride="carousel"]'],x.Collapse=[h,'[data-toggle="collapse"]'],x.Dropdown=[p,'[data-toggle="dropdown"]'],x.Modal=[v,'[data-toggle="modal"]'],x.Popover=[w,'[data-toggle="popover"],[data-tip="popover"]'],x.ScrollSpy=[A,'[data-spy="scroll"]'],x.Tab=[T,'[data-toggle="tab"]'],x.Toast=[E,'[data-dismiss="toast"]'],x.Tooltip=[k,'[data-toggle="tooltip"],[data-tip="tooltip"]'],document.body?N():document.addEventListener("DOMContentLoaded",(function t(){N(),document.removeEventListener("DOMContentLoaded",t,!1)}),!1);return{Alert:r,Button:d,Carousel:f,Collapse:h,Dropdown:p,Modal:v,Popover:w,ScrollSpy:A,Tab:T,Toast:E,Tooltip:k,initCallback:N,removeDataAPI:function(t){for(var e in t=t||document,x)P(e,t.querySelectorAll(x[e][1]))},componentsInit:x,Version:"3.0.14f"}})); diff --git a/public/s/js/scroller.js b/public/s/js/scroller.js index cff0853..c1b7e9a 100644 --- a/public/s/js/scroller.js +++ b/public/s/js/scroller.js @@ -6,7 +6,7 @@ let load = false; if((((document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop + window.innerHeight) + 310 >= ((document.documentElement && document.documentElement.scrollHeight) || document.body.scrollHeight)) && !load) { load = true; - fetch(`./api/p/${posts.dataset.last}`) + fetch(`./api/v1/p/${posts.dataset.last}`) .then(res => res.json()) .then((msg, html = "") => { for(let i = 0; i < msg.items.length; i++) diff --git a/public/s/vcr.ttf b/public/s/vcr.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dcca687a434d5c7b6a3027e65e0b7d8728b25c71 GIT binary patch literal 75864 zcmZQzWME(rVPs%nVQ_GFadiXp8Pzv1Ffj1A2lxjwNHXv+FskoiU|^3-QoO~zih)rz zhk=2~vY;rn;E+*1$mjwF1_nP!*fBUIi9h3y=ePOFAkD!50_SrISwZwghgb7KG|L8d zkOU_K6Ntya0MZ8*Il%%7cLtUXAQ7k>ggOHjIl~adzy=lo#To+x7Xt$m1JhZs2s6tD z#t96p3>>VpSdAGN7>yw`^DKrmCLs=fCI&W6usVhY28Lz^28ApLkAXo!K|z7Rfq_Bw z2*eHS91Nh?1KYr|f%Ogp1A_ts$W34kAQwU~;{=us3?LV$uxwyJ!XR-*9gu4f@*qA) zEl3Wg7A%IO4NcPq1u25l6Bcqz0rOj3=PR1xSt(3^o%KzfeqxStRQP z`B?{=uF(8Ts##1CkT?RROArS63v33=4p5w9!ytP>7@J%Q%Lb6S3@Ho@3}<{885tQ} z7`0tMG?=5W4dQ8Q>uYO+#2B^p^|e7vZG8~eM;{`iukYjI!^j90V{`#20Li;Bg5X<>+9O(|*7(v!*gPr7q zB<%tga$$s6uEeMWVu8$L1eFGi3}7Y$55o_R{|p=q9RL3_aDquL2G0Ng8Mqm^{{Lg( zVc`D%kAatg=l?$jJ_g?Z{}}ig`2PQ65Mbc{|BpcsObRgw{Qt)w%pmyxAA<;k(Eoo7 zq71_S|1yX%i2VP{AkHBA|1X0CgV_JS43c0{ib4GUUj}IgiT{5YWEdp>|7DP6koy0Z zL5@NC|6c}q2AThV7!(*}|Nmi7WRUy+hd~KUDl^Fc|HGidpz!|>gDQjK|33_B3`+n1 zFsL&q|Nq0F!JzX04}&Iy>i^#iT3}L}LGAx<1|0_V|Gyb@88rU?X3%5M{QsLlpF!*Y zZw3Pf?f<_S3>kF(|7I`(lg13X|9>->FzEgN#bC;y|Nj?*8H2(9Ukv69hW~#tSTGp< z|HWX*VEq3VgB6&xW-$5xi@}D$^#3mgTL!cLzZmQo%>VynuxGIN|C7Oi!Ser421f>~ z|34X=7_9&QWN-$PE(|vRe=@i-*#7^?;KpG0|0jbxgZ=-X3?2*)|9>!eGC2PK!QjQ< z^#2EgH<;!I#11{|^Q~2G{>T82lOB{{LVIU~vEcgCUT?-x-3z zWC(-T|L+W;4Br30GlVht{Qu4n&fxq1J3|D6-~aCnkqrL-zcWNJ1pNQb5Dg|{7y|!) zXNYA8`u~j~jv@H}H->nIkpJHp5*R}Ne`82w2>btyA&DXU|2KwYhKT>)7*fDwDnsP| zZwzS+QUAX&q%%bS|H_cT5cB^lLncG)|E~;L3~~RzGGsHv|NqL61157B68?W>$YV(S z|CJ%1A?g2Dh60A<|6dsj8B+d#VJKoq{r`obm?7=|7lslrS;~<9{|iGIL&pCv4CM@& z|GzL)Fl7Dz!cfVO{r?L?6+_PdFAUWTx&J>i)PTuahP?lu8R{7F|9@tvXDImpnW2H9 z@c(CqMuwvQpBb7MivNFRXl5w+|CynMq4fV}hE_1y#!&YE6GJ;g`TtK09Sjx!KQVMN zRQ~_O(8W;o{}V$uL-qep3_T1r|35MGg2_IH+W(&z`Wfo}e`1)xQ2+lU!$gLL{~sA9 zF*N@F$S|3q>HkNDDGbg3KQc@OlhYVl{(oec&d~b*Bf|`aw*Ma)W-_$@|Hv?lq2vDt zhS?0A|35IyVd(n*fnhF~oX61p{{zE(hMxZ)7#1+}{{O(RkfHDY2Zluq{r^8OEM}PS z{{zDkhKc{*Gc0A8^#47>GBCNEVe{D04|l40uq_YA8Tru~1%ioChFSmLF>GL%{r?@qMus{6-!W`rnEU@7!)Atg|KBleVVM8_ z9m7_J1^?eMYy*?q85aJ3$FPH8(f@Z0I~f-Lf6K6oVaflu47(YY{(sA`hhf?Ow+wq3 zmj8dtun$b`XISz7EyDqZmH*!|9AsGa|1HBIhSmSyG8|@D^ZyOQ5r(z@-!L3ySoi-8 z!!d^S|KBhi2a_ilHvE6XaFSu;|2GV$7&iTX!*H5m^Zz#tXBf8pf5UK=Ve9|b4CffO z{eR7H9!y?f*#7@D!$pQ2|6em)V%YirHN$0wUH@M*Tw&P#|24x^hCTmZGhAcX`~Nk= zbuf8@Vc-8(3^y6}|9{1Bi{ZfkR}8lq4*q||aEIa0|5prm84mw{#c+?|$p2Ri_rc@? zhNJ&qF+5~A_Wu>bBZlMuUot#qIPw1_!xM&+|6ejZWjOW!CBrj@)Bj&GJZCub|0Tl< zF!_?UKcHdaD{gjqo4$*+5JX3$7U#gODO*d3G>|9m$Dc0g%xQ4E$VN44j;t z9AE?`I3WTc3P0w6OT$@k21p8QDqIA_gL6RABw%EH5H^H_7y)N9FbHsSgZ#tE$;kzh zLl7_#uqarVlM76NNDzaIiwmRUVK5t69wZ3GTp;ZrIS3!j0;>n}VJt4FsbE2n z@el@#1(t>g!7K;SFx{LC41(O;3?NnLm=j$98y}$v&H^*Q1lVO@+n`#xp){owC(L+E zgBTcud3YGOu>dYCVh|x72*u6K&BKjg!vwjYVj%sPvOJhV5RFiAkS>S-H#aww1EoO1 z5GEHFgof$?Nx(1zgD4*#1J6(fyga-J=QA)!2naCnVFCPD#4v;qir_3T15EJo@$rKY zjKjx^p`Sbfez=Jk`WYCc1qB%d1O)g6_yrJvUx1%afS(_PK!W@N0{r}Nd9W~;i!2B- z0HlNuWE4m%$WSm1k^z|_AP6Q=36K_$h#<&RxJrm9#9FXTFvGwSd{7}U2V@<{00?Ga zkQEYQ5Cj1M5CO#?s|5wXBuGR+5abjP3xW|c5I%?$5ClOGOHdGG6bOS@AW;ZgPzWN6 zLPDj$Dg}@@P(>hDBA8GXDh09tF2cZ|AR@vbj0K2b5hFzire8!D#v(>HidrZKN`bVC zK-f?UB!Y$+7!*ZCA^w3V1LFB=r z5G5c9kZvdjsTBrE!}!7=+rUP{?EwjaM8Qfx445?BtzbjpJYiu5232u!1~Du^6pI*! z5JHit7?cgBM8zOnFbx*L(289EMJ<#Ar9c`WOi@t?4H7}a3=CRQQVf!kk`j^<5|UsV zM1Xk`AOI2rOM;|9SW*%!ECEs?0TKXfg9}2{N+8pc5G5cAqycOsjDSjkYzLVJHWlO= zkh}!MF0c}a1juR#3#0}l4^jtWLug3`20a-W25D(&8EGUS1!co%X(=cROo2EchLn_) zjFhxAhzZjVW`pEG27u&25>TVTN?~%+5F^3rL299ct?Vi-bl7$T?waXu10%1XAP<^|0TUnw zZmbBGQj|xq;erYXF-0OwgX)8-MCesefEff9gUExKP#JlcyaLqeAd?svtW=a4l*k2& zaE)-5GE@jmD=I0eD5*e2l$4c}l)=I<0VEo#2t^vofl?sF5T-K7BoG%9GcY)7YA~p) zt80J}lu(BVfGGS}11=3`!5JVau&HnnO?7n*I0qz+gf$^-6lo|2Oo0iIE5S|!@jw`& z3CYzA4BooB3_1v)jbP$p>B1#+wGnK%pbkPzmk86K`k*QidUbSQ27$#O@?a)h2FBCT zfynCU=zymrnHd-um>C$D)xdM43=A?1%pew%00SH27qE)2AU>EyIsuyb0GZFiz{|V9sE{V98*` zV9j8|V9Q{~V9(&d;K<;_;LPB{;L6~};LhN|;K|^{;LYH};LG60;Li}i5Xcb35X=z5 z5Xun75Y7<65Xlh55X}(75X%t95YLdnkjTKmP{mNqP|Hxy(9Y1qFp*&z!&HXp3^N&K zFwA0@!!VCwF2j6=1q_QA7BVbmSi-Q3VFkl-hLsGf8CEf@V_3_uo&hu~oz0NMkj%iq zu!DhtVG2VQLpsAjhCGHe1_p*2hF*BEg66&89EJ=A(7gC;hBXYO45tvn44Djt3_BT^ z8Oj(c8M@)(+ZeVpY+=|6=5JYY9?W_$?ZM;+jSngwNIj5vAaZ{`1H--Lw}o$W+~&CTAD&jtz%H-=llTZJ6iH@= zQ{b2qV8~)P#&Ck+IKxSX)1#q+EmU?eFz9&iVBidh*vQD(7rBG+f9nng7ulT*oD9tI zak@Jg7( zBV1ji6%`|OLB)qQ!!8C!21W)ZZN^;;Oc2I?1||ke27Lw<1}O#s&{`jDhW!kT=t8>~ zm>HNE*tK^sFhG3Cz`&rza00wug@ILsfdRZ)g@FOQ+6KJJh6%JHhJlBHpJB=l1_AvY z49xmF7z6}%FmPVj!N3XP3+!azW?=fVi-CcGlYv`M$P(l@7>fxiwu6CFU?&3`SRF4^ zY!?F`oW&1i?O@;**ufxp2jorHh#d^v`qCidne8HXGjK65GVn66XoJ-31TFgcVqj>l z$jK-OMv8)pjEaoYnXCUfGk*W)^7jhk*1ykLHvA4?k^EE1csPY=@83nN<$qn6HvXE= zw1K(n#}Bq8e?esf6XOJi6s8E)JD`wZu-FX>PX;EiJ&Xc77+5asU|P>^td1UMi9tOAgL z*uel|F)}cI*}=ddu!Dj50>t5shEf{KES zg36-GrpkiMEh#CCI{$c5Qc_qpfSFeqb^cueu^5;bQb0aoy~7~QAkXl0H-ii~?XhTs zVup!<9UNjZUwNp2?#pDIN{$FMsQP$nIVNCg~f;U4udg+HG?w~10)pX!OoIkU}BI2 zvsf9J7`VU=ln~g#z;FQ)y-eWr!hT@~14tAUouG6Hax^O_#X!?3DD*&~sCZ!qgS@~_ z1{JU_Nr4>ADbz%BDBlvQ&gQ}n1{HxF47O1H z_E5ef*qu8VTtT^40v1n3plC6IBv)`eF@Xe_K=A~PNj;E&9!Ov}gE<2ugBUmrEEpIW zM8PajQO5#i@iH(n2!O+d30#^me%Z;u3QqKl0y`Nvz$_Ml9Soo(4+;}d7>Nn&WDo|+ zhzaaqkh-vgK~!J|gUp2;48j6C800SOV6YI_!Ju$q2ZOo54hAKtxXJ}c&Q!awgMn9I z2ZI(ULka9)(1H3<7n(K=pz1+k1}YV;pz1(j1abi=j5q{#FxXw#!N4Z4gTdj#4hB#- zfy{IQWk6$55CkPCQ1SvLHDysSGzE*9f@Fv8XZAo)al4 z5R{T~;sk_sA|(aH0h1ttwF0aLl$SvmBy<9ltsyw&_m-5D6vi(pDJcxB@HEQIz|SDe zV9(&pB(|g-pdVYZ&4ARgLm%Xrq0VFODjTun- z2I*72u!8|)D=2k?LR#&@E(U!DT?QSnZTk8<88pClfQmrP3p*GufR?Q7I69n<$O@O0Tt>} z0y`K)?(ARysRE^CkgGsx85BA^0y`K$=@+CHlzxQ-b}(o_LlKmIL3}-Ex(20Rkb0vF zI~WuNb}*Ph%La=JkWc`{kv-UUP|60W0EL02zzznG-<`oJ*i@NOR1us!6-A8&RgF!R znW5I$0ZPmud7czd&l6ncvMpg?XAoqtWPGxlfscWS zK@}X{rr;&SEZV!k-Ag`jno-e*rAtOoH7T%zLHG`&?El}#XVP#lAD6sUX$H3~qf9+YZ9 zaSgHul=?yTfXXhAxFx851*c*LP#R?brBP@RtpgI!K@uTrU zOOOviJ^}d<6qbhIlnD|6{LO9zx-!AaH_N-BcN zVNiO7q(e~QnF300;L;S_AOa;YkVr}j>m5*X`?~^^+EPHt4P5Ag%g+-aE+}E1U|?jN zz~aNS2i)#6fV3(>WhDco35^!cJ3$TlFQ8WD4hA-m`$0}IRTgC0lLEF6(gb5*WYl3u zVOC&U!XVACdp859#lQ&;ZwY9-YZn7M11Ez7I32U=?_`i-VEO`T;(*FqP?-UW4N&WW z6%-=^I~YJUB!~}dMSxnOAa$U&88f&k1Zn+(+GwC~2DQ;Z@}P7Lk_W{eh?WGU9Z>gx z30Cj(fKmt#D1|`NkO)XX1SDW!s0xk*P!$KR%#2Nqp#_97s5(o5W_<_+CYfJ=ficlnOz48Df1tJ#sGb4UH=yzhR9=DFji8(gN<*M>3M39Hr$FjJITuvUfa)MnIRvVMKLJ~;@MmURuREUGZc{iv6WdL>4 zc7vLW3=H6+pO1kN+GzoGO_{+(3AeybP&X6QEdwww*B~3xG2KNCYIKET}A~ zED9-YKnWk35+F?G7H|duH{XydOHdyJlqeV(QW$kud{{*oxEXwQGcZGIxE%~2r-EV} z%|PB1XS+qTLKK06pxKmni+DtkfYBgl=QauHOQg7Uer{!RuVa6SRmO`ynC1*Kde zkS0(^98pUe7&1cgET}~e#Yk-(aBIlan7IWWjc^8}DgpUA<=+)Z-2rNYBl?N_4Dt-d z3}1FL2r@7+7=RP58UqspH#mk2zTQF{Do%kN z44@Jl#0S;0AbC*21&M=lErnm zZ3^Q3;{nA0sOgxJ0vhuG)hj6}DaZ$q zG%rKP3sf0JA#Py?rvW(z(8wBSEKE*d2Lq^`3QD~oH^~Wr2FyUNgvA0gd=vmwtAo^m z;saC~fKoZgFQBvm5(lMoQ0##EULYD&n1Re!ho=DvP#TZ`r2&kR8kGG&6)|Ykg@b{S z0aA#78YVp8Xa}+Qz${RQ1609+oWU;u%4DGA18Ta090DqBg}{{#NEB4&!aD4r@)lId zf+`+R&?|uw38+K@WiUlpI)N6jNNGbmFdLL0 zKo}&C7WVp#ouG0NG|~!cW2iCkGB9g{A`;Ro0JXVz8Pve74p5s*1Kj4~1eYA3>H^fp z0MVe(2gM1<+aNwD^g(S9kcUCB01ACjDFX_95Fg}Ska|${0?HSl*Z}oHK~)Qg52{i? z@}O2RNIj@k43am5$Cex@w&ajvOB5s^3MuH>85kLKz=;Vo9;OFo@iQTikcU9sXi$Rzlr}&G1IT_*g8>vEAdl*S2Vo2hg_XfWBGA}2h0>rB0i2Iu zu?{JY6-|{-q?`bk1mM~c6u0oWPf7W^0u=k8G9m?}3{(fDfZOh%<~=C;fyX={<8`78 z@(iiF!R<^?Ljuw&2Gyn@2ZGv9AX*Gm7O=zW2WYK|(eeYA2Q2U$0!qoCt|TZ5#Xu<< zJmd&!0VqOR24If~gWH6lx`k;EXs{7no`H%oQ2(GJ<c(%tFEs zl;IgCq#(t!B7-)gJ|v_-y|vw-5i0OFBxpPkG}sO*SwW!zaw#ZuKrRK*AlI`A>|{^^ zhat$_AXOlDgJeM&0OT)F(FH2bKuI1X4yp%1d{7+-QV&Y%Aa&q2GPqX3XxAdwDypDv zBRG(y7#JC3!8sSyJy8G$EvPXAYSFTTc^m>e83Y+XL#B{Y7?kEfxeOG|pwbwmQW&ff zvZE?Ap9&f?w?IN3 z6ffX<8pKHXy8@J8|M7quwvbK^C~82hTX0@Hk@D{fXf6fOeiLN~+Q9&x4A2Kngo9!Q z6rP|O5Y*xTrD0zEoeVtS*Z`HdpwJZurBohR{)7%hv)e_2;uSpHuV|_W%V&u88*|H_ z2M9N%u!@`jj|co+0d7t(Alho&4C)NVj0+*T3o@Rk3hIx7qXkr@F@Rm8DgbjasLTLG z63pcwH-gd=C|7~nPM{PIiUbfJl!8F=pxzfK;6Vi_NI$5M1nCE*9FRItZ2;nfY6Flw zs8t2h2WnM;^qGRf0GzU=WWk}fyN{ozOASoEuhDbR97M%bd zNe2xVfl@Bx1jIh6V9K!3L`TL0J_~M$fKoDO z99aMyA)tZ;REmRK21?T)m7p306n&ty4N|ELRtc(OKoJabx3a(v22dHPaRIprAP6q= z!L=kT-jqS{$p|X`!Epzw*BK{(%YRsW{apd-2Y};D2OL#8Dc}|YcyI|c4h`ydpG;<8 zVw}LJ!xX_P0-hIk0yS@$u*?gCd$r*F!~zOE7D(d?HZQz`0W|i+3Ykn4RW=nC1$RbI zoM8NN;smn-s1M7;a01ka1>3{V;DBroXiNqI zV&H&_bLj76&;*xbOc!=As6%JSL3J{y50qLo1$Hv%gL$Cz0-B!zr4x_|pxP8<0w~3U zYycG#AR9nM5y%Cg8~}0wat?ZBhYAVE+X z1<@dUA_a6{Nebf^79SQLaJm#{02LyT-WI5X2L~7d&3V#Mr>ueVT?om`ja6CW?a#*Z@;vE!4hB%%gKPoCJ;)YN+=E;JihGbNKyeRp9jFvE6o92^P?@4H087arb)aesq#raR z1~MOL;(ou2}1gfAQm^cXa`jj zpe7n9$?yn(CWJvXJ*c4%N;IGZ0~!~A^eRCK0@M%!RT@&D+8b1ig8M|^VIgQRBg%hJ z9|<(74(ca?yK|s$1h+C%K;|g-NXn?ynkR%4G4?rOb zN>s=#CeYd#@e4Z{#J~v=6j~q=P^f_BE-CdX{%sDs-%pq7uQv8gdAbt9!^P%#2&qk<$-K%FO0%1>c_ z0c!O?8#@pMpg~UsP?-YZf_h<~fe+AHFUYtDH-j?6C&)-SXlf5MHV(?Th`tplt%J%> zP<()V3~I}PN_Tm1>II2_!crbI6#_~jpx&1Ptd*H!AOuPn&{`I{d;(mg zNJ6_Gpwf*IoF^eIWXL!IXq^umI8H&~56WX8yFqyj)NTfefl>n~WrOM`kZVEhOHghC zjdp`_38-cPsgnc6haxy4z-0-dCkP&0fEL<bG6Oj6e>uID+CC z6lNe7f$DBhI6=Y&GStc}2rG0!oh4;aSSO!R2UNcP<2k_$PFbLFHi!Ut;_7z*XeknS z#t0O6pcW0Nt^lvmV7@1S8bP{SKEZ4X-H3MtM(Q2+`$P-h0x?GY3JO~!*pU&O(Q6cmA=AO{uOAm@Tq z%7A4+$r4mpgB%Genm|Po$f2OB>>6lK37q~x(-WZRgG3}`q5?D` z35rNi4@wa{&k34YVDb6$fGOhd3efZc>m5)F`d`5b)(TKt0WlWE$zTVu7ve*>z3i}Z z4%u$Rz%Qna%7QTaPCzXCy8_)VRYqyZ_!4NaZx@3wgAjNw0yInq8pRcck1c^%kWmC# z0oXVgXmkve-a$DVl$=2IB8UdHAwX?kP(lRJu;d1+{Xixo=6{qx`9le*#D)%Xg9~WT z>;YuetuS=RcLxKgA;SPp*PvkyNKp+EgDhzSWkyg!0yzwnh(N_QC{u$H5-4GTMwfWO zxqLZpgKrUQP5aW8NB8g)Tw9M14R^gMp10&?Z~~3rKt?NItJYaT27}j;gK{@$Qx=OhWL+_2=>sSVK*0|xx;QU@ z`m~_MQ;?7ZwV6Ryrkr4Y0Ukv_P5PvGK_^m9fY;UhD}YY@fYuR!3KGzm2&^12W-J7S5hVOTGa0BoD9~sK z8-p}>l!QZn7XudqjK`(Fg8|e>0`-VN!|jk&LLm2ostL#%K#+^Y!IPe#aXrxL8ewo< z2I`eTTl~;jdQj^cR6T%lBq-T~Oa>);P>KUp4xowxR5^gufpRRU{R-->f$C{c&IPsR zL9KjH4hFSfL9KmI>mH;I)Vc?$0}Ymf%mKCXLFRzkw;+2!v;QD_K?s*qb0UUNF!}|EMLn<-4(lv~X>b(>iaXGnJ#ecFvUU&JiB>iR zB}-7g1+^m}bP9|K%N!74P@V?$0%5YCCN9$47%PJYsB&il4|Buv3$$PZr&~~Jg=9o? z@EVvDP}7FB;&%Y#oL5-7k!JY6gFyx~WB^(nt`Dl`KyeJ}w}8?p`yEGC1_uUqh5%3{ z73;{%Fab2U9t&D>1X2e|&wO{l!h8&jv0%k~3<03ks0L`Z0a-18!X9ARAA=wnv`GI9a$hp!OT6P6G9eK<)sgC{X(il&U~&X%G!+GlQZQ)RTa;`oSAu zz)dt&$TS~#Om!J;hKORtn6WaJ>6-oK?ASDI7paprA4QiWHl%WYyV}W+P zK-M}z+MFP_gX#rP^BJ@42?{Mx=ztmrpwbLHzsCuSd&JBss5FPIOa@JJLP7{shk()# zC~pda8V{iMr>U|jsIrCiY+x-=cyESP1hnWp|+AY z8t-OMU|?bZ&4YvXogn7@V0j)CFQB>s(pCWVSwL|DYLkKD1LQJLn+%leLGb~~2cVK2 z#0QPrfJ$aii4M{SD$zmeK_xm!9b#4o+J^?G6lDfR1{HA63Y2CbVGNpOf`kZYmIYK= zfzk)4#|cUsuuuZ20!<(9U;wFtg*YgEg32LKy#%V0KsrHn5@?(NG*`nY2x^CcvJ|)g z2hYneqs_E|x-H;Y8y$H6Ak#pf)imErI%wAYXvO9mEHPJ18H3d}uK;BW?2{Gh@LoHL=w0|g@#L;KhT;F<_l>w&^7B?U_g1=WHONtAZ1F=HuY3_=>5B0%Gtu#sX| zN(Hq_6u|8hP+0{U2>>DnCFi22i+x#6jT( z;)BvJNFJ1aK`jnY%LBwmp05U(i6uQwPKY70I9m529{mXD|SDF5vAQHdu*?Xg7e`E}%9!sC;4t zIa$#Z)E!o4{PM2=G>muxG@bZ60JR?=%+R@m0aRauieOOf465fC^+EfWKy4S$$P#2d z1}MdY$`w$40;L;JOA|3}fN%x0ZNdeLcrH-HgDMHw7C-?3B>_YYjo}YOD-7ZfNM9M$+JdB9P3<03U=8$$RGXrBRXbA`?-a)yZ z9n!94hqY^AjbK=RVP}waBZs($|yoRO_=$a^SkqcVa z2&r&EhJu=npz0FbF*F8+3K)aC6{gUZDQMFqxNQm|SnvGa!uaJM4~q{tU4WAYQeVNC z@hhZu2i2Xs8I&0y<7BwzOhN7kwX{Gf1k_pqm5`ve9ms#68~~CB`4`l;0!1jKpa6v$ z$k(8?1CSY4kqf&R#27djl)=4D(7Gp3EevWEDhupnkOj{@f%f|BU;q_Tkg<1A!2~Oy zK>a|_7(A$ef-TsfQA-%!Q~^!+n_QRl+r;} z2&jPpO5LDF2FSahDi>5WgB%OWa-fnJz)TM!BAW$L#)zBajc=m!eao{rt zjNtVpklGp4?*Zj0aJdXBxgpE_L7O-xKspqVO^hc%ZAwVD0;R5&XLt=MlR)(^C#a7J z$x)239L2~G06MuK7F2SB(hsP#h4eN+H8se)p!5dvE-YV(LQD{anIOs#0Ge}*1ufhK znE)C;0JVNVK@BO@K-nLZ{}2T-H2)zcazF#dpoRo!6*#CogG}gwVjMKM1foI798|7> zVj08-#VRP2LFE@Hdw|L>Rq#H0P*7tHXl3x0XJ}A@%P+{%?i8j7@Y1{#=o&4gd%f`JPX$iB4~;Jv7dkTC~PiwpM}4)8!UsKRBO@OK5f;CT82 z%4$$v0?C2OZcvc}3RzIX2FZbnFpwN5frF|ZSTP1l+>)T81QeiP3~up>DuY)TLedtf zcLUy53YoM8?fnD?C!7GqJ!qV21H%ahW(Fx(7(jiXn&bHqZOpD1v!-g z)Fgw<(Shn~);o}$DWH{DplTR&M2RxErh=SF0qSXjU)mC}2TbA3*+roHGOJ8^IDMXulIEr$W}tgM0%jvOq-|$mO8a0IE1ZsQ^@3f>Hoz z)^wYfxPQiU&}s0*VKa zI4Jx<`2iH}p!N=^iUx%esG0^f2Gqgj5-4OqW96z~9!MTEk^#~OYMX%cfvRVad7w55 z$b3-S1QgGReJ;=p4{rW}_Mk(ywXiZUGH8N(wxB~`Ky!1T(HKVPYA8@c0u+xRn?NZJ zWHTstgHi}6SA))p0HrukUl)|3K6*N=^i%n2Y zhj!#a`5ly>AXy2N&rg6F06Gx8mK`Ybz=}!G5G7<`4rstn5}bWNa-awRIRxZD&~ybTOM{XiC`p0L1Z6Rhnc(?x z@RAu&p$a;x2NXNtE;eYC2|ODF8ju2S#e_`nf#L%?IS$%B1Fp&-r7(yI3V4*fB+a1D z7_ggx7rwum6TWszQ6Ke)-h_iacne5IPbK zX^%kmkwC|5SvD}RGpI7$2Q^xmpeL|^PPKxp2mqBeu<=4ry#-m~0a}s)D)&LMpm+k& zpb`yKZh(4OAbE9Aet{iVwi|RX5d&l}614CJWH=-^K~11t3{nj8;KCSmSQBKx9+a{{ z1um!&0SZn~1cHJS6v3d33$hAS#lV6W#0TXNP!R=65Fqui1fc>dqQJqbD9Q*5Jun+} z1QwJ(6iva)nf?`k(mo<*r2KVBVVnToA`2^oKnlR+6J(1jv~34E-;AFj3$z3ovQHAS zt^+iR3~Kj)${$d9!*^!~_~bZ{7a==mVXYD5E~B|P*MU75$$47 zVh{l*7SNm*WI$6v094L^+NvNHq~HbF0&+Jf)IlK)s<}bMC@ArOid;~+0!k#Has}jK zP~HT&60}QwEsG|((jIvgoIPrT6D9FE@_`8CE3E~zu2L@&aK?ZM7^$uD20Lj6i zd;qc$M-8T1)>5Uv0fm9W$BKq0_#VHX1r0~dohxEAHn2i2)C9;i+Qt!@Cd zazIT9$mtEB8WS=<3~K2>)>wdY11J}O;v19;KzvXx0O9E>sU}KRECvx$f*!i)`2PlNU(v5 zaZrv0l@%ab9b9~aM{~hr4xr`?{Inc!E(G<|pm7bVIYGM!bU?KusAhyDLdXCVsOO+_ zg0%uN$_ol~kP0{rT0is!ban^$984ud_%rNa0J$ApP9b`X2H+)0OnXkS-ucymvPO+% z1A{ojPRLj>Wbb zs1FP~KM1sc1hV5D(YpuD3Zkw}1_dXmgaD;`P%RCjL9JR)?E-2gfoM>^0`)2sVXY%b zcN@{Q24zo3r3TUt3NX-MHe}2gRPcc;0mT`pHvx(>5DhAvLE_-T88q7i-V`EejMAY7 zb)-QV1Ju9=*GQn41I?L%GX*$W|M7sDlaK=XuM22W9~vg$HiJCFOGuj^R7QhNx&@uv z2ReI~m4N|V4uRIjgUT61ZyA)*K?x01Z-UArP{IS%OCZOBLIyO_F9B}HgG4}O4@dii~=eOL5&{p@DwxzK@~eIYHk1zRe>sX@Nr}*-~&rQsR}e80U8Mf z1>uQ*1&~2NaIJ^bcLI$UDKh+rlq^!<77l3DJE#VRtmB8IC{T$Daxkd=gUmdGoD32L zB>_-60=2|IvXGV-C~QG}bWqrW>IYD21JR(61l63%pf&(MtmK8Rnn8r5JgDg<4{3UV zmga(-vzq~QRxG4J0BV&((j+LgfhGb$(FIECAm@OZ9gvU&ISS-RP`U&a`k+t+^-MwO z6O@`k1-lHmd;#@8jX{;6s48fMBB=R*(k5qwEQ0_oOa+zWkZ~WzFU&7Mp$lqToJjc{ z0HUGY8&LZeI(NykfkBd?5)#6Y_A@9XSU}@ljQXHONw9r_pr#LK**|EhJ*?IS6+R$; zfm{trxS-?+8iE4_H6J*&fJ8uzTu@~PO2VMZ57gKN1+zHVZ{X1nQ)uZ4?s0>vf6yWt zkXJx0K=3{`P_u}|2V6UW2~ZJ)RCek!D(_%003Q^!gTVlLz71#|8FM}Zw9ZxooQpsK z4eE!2+OeRh0@dEo(@-Fz%#cAL&>aVm=Cud|Wa|TDjtZ2qL7TlGEBqk`5`&sypo3Nr zTaiFKP`rck4JeF2OGzN7+kmn&FF2GyO$1OPgrx#dD1q`9DAYhr4Nzwolo~+dphOB1 z2Q@K31qG;y0g4Au69bfLKurvgr$9{#P*j4t4xpXvpiVRVBouJR7<3{rO2C7}m;#N#K_<6BwK%9s762t1X!Au7eAqJhkY!_L1#oK>bkYfAp)S*& z6QGl*K@C>Kyco*{24RMLNIeT$iw)}AfFg|nK0gggA6(${0dg(Km7rh*RU)9^1=qEp zm6II$kTe2H1(3K0)jpsCofRCXpxg~g{jgbNP}v9?vw(!GsWRkn5$J{s$XX?41xQN^ zDP7AmEQQSBfwpgh$}Cj3f>x&Sf!zu!s6hn@$gQBH0!kv_8Uf^19;jPE9YRn?7IwZh zD1bqSPCx<}#W)LBRw{k)V_cN|7LOPz3~12bz5o2CbX`H6cJt zs3EH-z}Xnoz64=#)F4s{Xu=CNVgRZ-!Idj~JvGY)25E+)kae-B{sk4JtdJHTD?3tL&|aF@B)PoC?|u$1+?=N5-y+_Nzf5J;4ZE*Xw(WdOu#t|oCZM4 z2vT6_0Mw*FN(j*$A0U&!zK}iwhQ&1}lROncPQw%I+gQ6Lf z4?)okDx_ewA}CxyxWY6X;kKqWRv9jK!QQU@xzLFRx;Zjd>kk{eW_gF1(x>H3b@w1tnO}fGjBDKx+@I1a>fh0t}RZK>-HJD4=b(AbC(gf#g8}1=0`NehboX z0X=x!5;Qah-4hM!EW#@X&@=>WSvGha5R|1M6$G^W1tn!rPXUsD!TB3n4}e9$Y;g4r z;|ibv0hI-yhA8SvOppvL?ShIZke5MG z0-`}d4jP#Px9Gt23r4#bx)udIp$8flfut2sdVs7!0d=_$n;Sv#3Mx22;RtHifWliA z6n>y_MR4{8P1t}t->{Gawb(#C3Gfz2a908nBA{RZPsgQzhPS{?U(iMwP^L$;%@i5r z89>Mb%dfU+6rd^AP|&}b^82@RSqf>fuV8W$AI;C0rZLzV=U zLANS^4sZci`%DqwrU=OGC%}8(u7G!l{<{J?CSBB2{t|f zI#W~-bYSucwk1CgusOimEo>maPl2=%KutFe{T&QkcVH(uf>I%qv4v4Q}cvgN~*a1RX=I zET||7KD6N96;NJd)M35zkLScco)e5Z;NyfCbwJxqKy?UH1n5Q)25E*y21r0dtO9Lo z1eJTBVROj(K{og?+#pYY#y>!ogIcbj$N)9oKxGH0Dgl*M$aw)I4yrUj;-JbDRJMW2 zN{~KKSqYK{)rpLdiE2=i1(zz|90Ov3&UMv+3_8MQ3m`{r!pe%26Uh4})EV>{yFlp& zbm0tWI1@B356Qluvy4GYB_U_-fgBGi5J8RyjiQ56D5$#&S&<2HDo7OML{PB|D#k&@ zF>>(@;)9B5kSU;sHE3Oe9=H|-70#dl0u|1n!X7+wrv~dgB3iT1g+$P0P>9YXbb%+h z_|XMlLk02)X!cnd+}{<1ZmfZpxg&a zd7$nYsM`Qa$Dn))nJNXj6jWA%{0us=0aRXsPGkU8T_8TF+ysxifL3lo?*;%(qJsPm z@-e6w1dUaKd<{|u>Rd2_>kaS}HfXpJQcoa>fnpehL8T<n6=AX*mGzW|s0 z7_lJ&>d7N--A3N`0ICc?Jz~&4McC>NP%{wHBY_mZkiCeYFooS10?Pfc3;-%2AqQH5 zL_p~Zl)gY=463t09XU`I18+iw7UJN74O9n%N8(_;VepDBWyT3idqBlFa<>?CjxwmT z0~%)pjnk(OdtPs4EIedmwR8VE`JS zgR}-g=?yeA0y$M3H02Lkg9^Es1{4;c5Cx?>P}%}DkwEDR)ItZ9D2hQXKTwqb@(w6z zDuaq}QDsmC4aU&i0m==C?g99ON^r3bnw$h-aI8Wa4WJG!qYk+024x9I2Nz0$;+}zl z38~IwXHZ4ddY}d^d4^QQ(xg2v()by!81 zL4A2<26l$%9Soq_5VZUsly*TW1Tm`ysybL1n7*K`Fhi{Sg>E5)2*4*HK`{WnzyK67 zqRODNy_q6FHTntA*;CBWv&kzMgc;Ns%$W)x=hH(*13@J|q^1PziZun7$e`2sf~93p847YA(V$X%cw5Gd(dg2pMqB^ySyf>@>o%@T-nrXb5EL4%f% z{bi6NlNc`SWH5o(Dxj6E24Eg2tUxCgL24BcO96ah4rC=Hs7?fh9%z6H6l$O}0SYxx zKMWLJpsF8KB7(vUbk+^1gaD1sftn4Vuz{5n;A{u&V}j~fP^JROgX$+xY6aC#AhSUk z4P-VbtU-3d!WdL8fYgEdmLUD0t`kT-D6Bzo0;;n>Aq{c^sJjF*8`Mn#=>hdCL2d$t zE@+?()LjC_0>~c7y&#~L3TVs~v=#`oOiR=laRelE;8IXolo?#PfvP>oMK$09H6W)+ zf#wXLM?iw=wG>bh4r;f8&((pAhJ#z;@Yw{==@sBsIpdcU24;p6pcNJ1c{XkaMTT=b z7?kvPFo^1dj%Njx+MqNKs_Q`E2HJ4}%9o%L8dP$F4n*Jv=L}H!4H5-~9;kQ%g&wFz zQh?Wx(6MfC!3pY?LAubOjZ&aa2jt`>&|(zO!~vu%0S#wEhBHBN42oY++6NVqpp*(K zAVJMOP&|U#P@udacL6j$04iQV^YV(|B2m#)RS4;(%@NZ(D`PdI}KPiFvv65Go1x>{~^1V zc7sll16@@Ly3!DQ@!c-)<%PoF`jAy0;x|y)0BYqyM%O@T9MpP(gd?c!2$_Wg74D#P z4)QC=|DZx16b2wagVH#t9|Q^ukUCH~0jeEAVFC($P+WoJL16=u2c>b4IiNHSG6xh( zAag)r2GR$rL_qpLS zr2@%=#$7<>fNs75nFBhX3Sf-Xek(|K@M6{%E$mIyg~IbsPC~GyxIxW zAAwy?1#3)!k~OI5#C8Fc&_PKCl(0b!V925sP}T+|aZq*!1v@C~gNhVTA_paIP#q1b zgF(RxDuzMwpkM^m>!4r+=>rvEAag)X43J%*A_P=yfdUd%gn*(4RD6KsLBmuac~J0y z^npfUK<0sh4`d!F_(1l7iWQK3pkf8&9#EkTat|n2K}!KZ!3rA20tG856M}*jG@Jzr zPLMn(7(w!&U_E*(P(vIt3IHmX z;Da{cRyMf2ffA512+9Fdkb(#_YzuCEfW_b}kbY1*oRtB5t|aRn22KWE20;c@21_Pu z$jBsQ>I5_s3~79sGeCAXgGLKMtLZ^^3_<$LkSK+eCZNFDOOM~W~A@io7fCS|?kV;U#0!1(= zp@0smhpaFMB^OXC2PG2_4T@e+QUR$1)iNLxKuH9&9uZW#fM`(EgTz5m4vI=pRD)!!JR(P=q03>1sy*LnM(u(4d}2T&^j6D zpaAq@LQqi!8tej9yr2RD6f_{`fPw^cNU9pRA_oNwXf6s=6@mf>)Et8BOa&E8pr8U3 zNT9$01uv*D0u@9c`(?oTL4gViDo_A{nmeHU1PUaOO`yC3qCwq3&`>QXZ-4?0lzu_Q z3n+j<`2Z9!pdta32SDi`qz9D#L5&^IC?sgLA^2J+K~@lDEUL^3TJR2<`UKA~z9xSAf=9fmXGE+q}XI z@}O1Ih_$=y3{2qS3(^^Y6i|>6G0it1Za{;A6P|*PjXi(sSY5k52~!ex1xzdiX!l7Z=f+Kc=&>PD=8_UbKF3kcv#qjMM3L`beLa&?`)w3=YW>zLFyM!R~}Lf zfyTQa{U;Rt{d4ro~lY_T@z z4gk=sAY>B&B>q8;0yXO(Gx(rJBgjfnk_M#$2~dbYb0;|3L9>3K`UbQ!*4R`LQgQsd z0;xJcd6LZm6fP;C?kTk50Nr!90i3@`*k1$+evm!JrjWB=koFfbGERV|A8rOO&{9Ll zI4@{@9Bd~!$Wx%S!U<~Yf-ZUk=QrdLY0w5#$k+}jdvJlg3APS=9ECBch6JsI0^15I zQ9$({a=VtSzPBthhu!CZr z9TM}1Mm=J^3aDm*te65#eY1i~dyvCGRV^rsf$9`cz5r!2P=W(l2}%*5LU=ns6_hJLc?aYb$UG4!v_N4DihYomKq^4q0eKPR zC6GKQe}VE5D0D%g3<_P4I4GZi#6cxDNFT`iAbp@90GS600#Jz#swzQuX+duC0JR%H z%}P+^3u#rrDqc_@4OBUTRDdc*SnB~K4{A7qDnd{z0@RKMRhS@gP-O`c2UVCLeV_^x zqz}}(0GS7BhlBb9p!PS&?Y5xRwxAhK(B?DHWEvxMw|*5%>b$uKxHUo@EMdIK-C$jkOI{cpz01(SAaS$ zpcVrt@IWmFP+);t4Io=U%_>kJf`SSZsGwE^D9}O8E08>>c?FUOwOBy)@}WmW?6 zut_;kj(}kBgdl_oB_TrxU=FAp1v4O}ERBt$~z!g$jSPkYEc(_Xa=aZ0v*OJ10Gcajp4#>yahEo zLBRydL$Ia;sHF}{ARuv2G63;G$p93rpkx3N2SqM<&Ngq~dLYm~DP9NWeoeYSq0xD%d zV+D}oTR}+%6egfj8x$s>Bo7J`P?82^36PsXJq%FK0hHuHZiOXvP!b234@$bAqzX#9 zAU}c122c_Pl?k9$gEhQ!2(7h16*XwQ8Qd9UHdPiChHiC(rbkHc5z>={li*g_zXH&) zsgNQYk=!7O4oretJfMp3uM21n2UItnIKi?3!Uip90WZV?58=YjF$SkgMFv+Uf!z$& z(A(%BH!FjhX*(FK1$Ht(R;<7ZB2cOXtvLauN{}q%WD8KL1a(Xx{YOwi1zPpFlL55H z4Rm85D6N7@cF^1yWX(6Id<2!@pfCg#V6eCVWouBe1*$&Ku;Lt)RzYbO z6h5G|3(B{kv>QaDGFQ{4r zHLOA6pmre06v&!GPznIW0H~q?wL(CAP%8vf0fJf|prI&Gs{_Iw);} z(jX{JgYp0L$Hbw{<`vaB5AX`CYFvwO=T!X>_l=eY> z2Bm$F4?$@k%}2l)(?_Cb75+6T$ILGPUQ0QCk1b})E?PRSJ5!QchHlXwS%_XW@% zyd4Za7j`g!?Dx9>@pS<7Zu&q_-T|Gm=BN+aw#Uc-nN)}MdLV^7=)95L3>xse4SgA4 zdzC?_kwAKjpj`!s-VrGKf-;aV^eP4rAJkF?WeZTj1Ii|#rX(mEfQlQ?R03$&8*+~! zsL=+>OrT?U)WNN7&=Mt3kb~5Nf*dp`0Ln(7;s%tBK<0w75y&1;kb@Q}gR&9G%b=hI z=?4WV$R6hlpc9mLFo1#(6cw(}D|g&4K(-))f(+z7e^3VpR6T$&XbA>dKMu4T3^XAJ zsTGK=IzZhdaGe3JGC;jQun1`69$c%SWW$t{6tuqKuQ!mK2fB6!M_mHjV{wN8bZ^Nj z&~jGDhzuw)AtU^d30_cs1I^w+#_U144O9w)Y5@=ps)0dy3e*|_rASbz1_~AxP>KPU zw#Wl3pp9~%88gtXJILZ$$Pf!;XbzNOK|Ksm`v}rx2IXK-SqI9opfVA>Ny5|^GDieD z!3`9u;JOzS@{p~y;3^ulQ0xn6dI;1bf-VjQh1m(v9dh7H~+AlHLR6;SR4 zg%zm82Gx`x6F^}Gk_Xk0AoZZq1EdaAl7Q5KS}h=Tpd<~dc@4qip!$%7Rp2m2%vD##`(&>BC`y)h{)K5R=Eu*4ZGrXaIc zpspGuO@rbLR98S&+kxT=TbzMvSCC&}=^PX%ptu9Y1t`uy`jF!cq#jgzgVcfI4y2E` zI0J2sfSi{BYLCz}&Okk4&{-Np#TjJc7Ti0-6=$FpzzNWyvydo5i8NT}3@M-SgYRwp z3R)Y)1ilReQu=_}T##EoK{15hCV-4bfKnnT9zn4HszgAc4XQjqsTb4+1BruT6;vOB zN-Izf1C=8nb)cFbqz;rbL9qpjWl*UFO3|QH52{u`>%Jjp4}e5Ktuv5~p!f#yL3tF! z2gNr?C#c#1nS>ngAR9o{56EUv%@1-BsOAT`$QV>Uf_hIXu+=w+ovF|fY3O(pVgL$p zsxDLobeR=+)&o@Us)1)c}fD#kv;&RYn?oQBH>KD*bNYDaI&>>8aU1}glgNk_2 z=oBdPg9>0!aDv1^g#f780UGWBP3?mU08mu`S?U0qp#TLesBsD^+CT+0D0_g40+4D@ z76H+q&KIbW11iQq*#VT~z~{QbiU4qeGB$-CP75i&aTFV%QBhFa5+Fb1uB1f4qp*~SMtCmOW!1{7GJ-Vdnn2nrNX;DFkfpqK{* z5U2zI1rDeb1f@ApFBa5#g)DCZ$%29kqzhCBfOLUU9LO|KiUT!2Kq(Hy2L%?04+<=h zdQkfkq#o411epU$U!Zas6o??(KKSvGH z&jB^TAiZ$Va6Y6)18o~O0w)=5_=YS^_21@*5~YfcyeV6d?8Bm5-o>dXU5bTJ$X{ z2-@8NUK+0~3fc_`s_a1+oNl0X3g{w7=)HZgh7q_{Kk;`3sCNP$(K+#_1|s&42Q^iI z#-0&lJ)rtSok1IPD6@+v46K(Pj@H9%<^RHlQ{G$__Uu?XUWVhlKwvjj<;NP^k`Go`gL~ya45I&>q)+S3nE( zp?w=R(2Wm@40}O)0+_(3jDUvmVSO9W_#dcj2lZY+WjiQFx$Z#jMgp-xZ3vJWP{{`3 zgW3ilFUy1TAZS8J1{5hWNUIQ#Z*c|{xS&0ayBR=>&>;ujfM$(AjZjc$3%1)8lrTWW z3aH@^sx&}+&_p+AXcxSs89XnnEXW8N!vSODq7Za6G0D`+!4C@?@1_W!Oh z?E!TgL2F;Zn;9njD*zwAm6CD-w3h*TZo58XGH4$O69Z(12((28H01&5nL&1jgJxhr zxn&0fs0IMlSD+>VsNDk!B~T3k>LY-f3Lr0l#6fupqz)8%pil#a9w^O&T2>%FsGbAS zpacX`4@y8Fb0B>iQ0VG_LRSYVbfFzdR?um;JPfkn({4fc9zhB^P-O<{T7m{JK-D*B z&K@+l18L=e7N$TtIiRQnMLWnNpo$h0^^k%bGW-m3B*+t>j0ze!0uAm#2A)CL9W;^v zayqDL17&-VYEWSfQVm+^1Zp*bvOg$)faZH38w@~2B4``{a()kFNEv1P7`!?IQrm$S z{wsI1NiX3&I(gob&X2py=P+~*$ zzd`HTg&Dd)qYbbV-B{tbwSrnPpxFpedkIpefJ8tY4N!&zt>^%?e|X@r4Ly?#9NVy% z1+Bq{jnRWzv5?sgP^kgxz<|sF6{MhDWSo#&zfFxrRY4UCvR8FZfOm8u;+ypjsI39M zU+xMh##uJN&t(F|wKzizsJMo$ga8%Kh%|{4UUqpcRtO$ei59GE;kfT5Y zkdWL2D(6A90Vuja&I46vpj-qJ2d&va4jM*NNT(IDF&z;+;2TxISqK(H;GPM%lwn|C zhVK*QX5eQK2Hp4yYTScn>=?o8wjlK|XjO(IGsAn(rJSJCnet(b319|D5oGBnC;&M? z+xFjsmIFhSa)9>lgYLWnF?ND#gD;>ReUSB|kh%br6G2)*-Up>oP_GtLnSqKDP#l2* z0mMh_Ld6!)kU9gBFL9?UP^Aen7gTA2cBP^OB514}lxJb-zW|gCKzFU2H~~&vpv;O? z9<$zI0QKWH?P3sO-~%@aKr0JDbpzmkBgR3n_U(eg%~lAisi&RLK5C zP-PEliGZRQ6uqE68_36qwP4T&2zXULsFnoHT!H!z{D1Z#DK*kthJ_LmvsFwgr zKA+nG%o}juC)N%tA#h{&Qpgaee zR)(zgf!6i>4El_Ypi>MXrSA>~P|}8+)B`GcK}*p<{s*}cv}zb~q6?@W4$Ai+mx0PB zPzZp+2b2~-r7|p>Kz(~qngG!tpMa_nP}Ks8Ls0bsQU?k-kbaO4LHa>s93XQ+{U%Ub z5Y%r1tuTVD?g5E_nouAYfO<|Km7t~+$OKT&31kAObqKNn)N=yapbsk51od|?z|V7o zR;q~gdB_`dKx?xgOPoM;D5z1hg8|g$0|f`jdQc_uphOPd8Vt(Ckj5Ek=)qKy z5qz=^Y|H_?bs92k4IvpPfcm8;PJo&b;4BT|f@fqv*etK`h7>b)fz1I51<$a#WqL|G-rTZ z_X!g?ObnC{K%orD7vMk#t%d_JU?YIPI>76Y|E>VlpO8Kyk}4s>@A{O_>RX zH*{1VTYy7b%fH^>2yo;yF3+IPmFo0Tg zpqvjXqd@&dP?-&)L1_zAQh>@H5DiLGpn3}w-XK1xWC5uIg*!+;Xbc9_rAG8Gp{tb; zZ42nK5QKm>s0XTz)B}aKKERDq(5@TEz#yob0hz!ASqMrlp!Nf#w+UiFw)}z09ZNC0^$2BtptPKsCafF;P1S*I@>Xd`jfdU9*k{+lg0gs?!i`3l= zpp`$MdD7hsIt+{qir^Vj+C(&H76~+@0ILT)2K1dp0yjYe?o z1Ug0&do+Ug6M*Wa6G-cHKyj$dpw6g-9E+fx!k}p;M2-dBVW7sK3T|hCTCAXC392VR zxe*kvpahMcdqKGrRC0o13KYknBnygTkX}$6g9dIOaSRdx#W5(&fX+mM-14glo&g7q z5@C-$1vl{Mpg`?kP}>3&cc7XL)Ib82o}fYt)baxrS|A$Kx&X~$fpQ;ceG@2NLFzzZ11j7= zxe%1wK)DZe9tNnG0`<=!t71We#UNSGoG3^ZG7b)kRaH>QtBO?eYJvnbK?0BlH>h#4 zg8{Vn3epq-B__~3B&g&BIU3Z=05u#z(`z6{ff|yatPhgYhi58K{U@p{430L?#FD8o zBe=~6IuZsn4XFsuP@v;-K#S-=L#&`S2K<;G*yaqzFW_k=&|*38{wZdKl)o+~PMiR> z)lWcAUOABhI+G5iy$;G>^C73wi9&C?19^j2AGRVG6a%0N1hMB1<3bV&W^)eIs08(YAzLFr5fAFPfcm@O9V)Oo!c-YNKMNVV zM4Z0|Yl_k^4Z1pHC+K#sFOaet%H7Z=j8hxC0fG6G1@-T2%oWX~GsnpvAnP zDO8l80k8Z6ZJGlWIMBQYx-#^{36!yRZAN?01~%9&HlUGOPzM>bl?4_qpc01Z!Y&3u z22KW6aQzPIdV@+OP`H4?2QC$wvaYAr~(63XrKxVv?>%- zfq~lDpoFUhS{w_iLy)>qj9Aa@1Rnto9wvZIG(g4zq4PMP23HEK1^w>|sH>Wi0=bJY z)MXNI(+A#<6K5du(K3zQ>4I~}2``JpR(L8%v%PeDNe z>aT)YSD+bB@X77Wpvw$l;f_3>2Rbbav|0o*a0(ht2aP6y_S8W}YC)#Lj~zxD$6|yI zV1Y)hKve_i&?%5VKsST1-T`?Kv{amF&p#eeWeJ&sWCq>Irw+Th8+20CE(UQ13GiJT zAb+u4*u}ufAOXE~fKwlGZ|N=udAOK7{QM43X#{Fhf|3C!Ie_vhB8`I5ASl{FDnL;V zDy<+Zyg{iFR33rWUVxelps0tXR!~v^rE2h5N#Jr8W2F|x!YoAl1(cr{!Q~8S#t1Td z0XeG)ROW+PV36)1C;@{SC*Y%vU^Bd+$`{0j(4wHb9KfjwRR4l*Cj(t_3F@4IS|$H@ zK)rJii?!m{8*qa@KEYNH=lOV zz?sFdrw!-|H&A&ESt|{yF+sC=sAHv|ngz6W8q%!;#T2MC291D$N@Gw52viD#Xi$9z z8hiw)0hP!gF;IyNie*rv2y})SsMLqp0V<C01VGt<5qixcXuK6PvACPTh=CEh zR0*{HjdsO6=$I!paGC)ndXPs!Bdj2gf)1F2jj%%2^oZgq_CaggAcs1DwgwrCq7Bd? z7a91=e(>cUphhETjT>~`D)=ljb_QVvUB-OS0Z@>(JLK#JP|$#8K_wVCz^!-C+5Di9 z^<50Q3@p$Vy)Nh+jSHZ59;9^#8qosP-=NV)P;VR*hoHI<6xX1-5k!Mh5{L$+5|BDj zj}BDMgIZ7^aZri^@j+UsJQ}as(_lq zpw0}adIvRVL0$zlQ9uJ*pbP;TkO1`%K+XeoRX|-CP)Y#x9<)K_f~m16sP_dLXD6Hr zKuzKkpnLKrz)sWw9o~Yd_90y~(2x;mVHf0<7f>G;Qd=;<*1JOM2+$5nLk3gEGoUO& zy_y0P1E3ZWC?|tb0f+|0HYlb*!4HsDIs<; zXn|uL6o8;O1{KGUwd?M= z{JR3W)f(KUWZA#~TFa%#a29mLHRJ|3(A}d<&;u|)BPWnqJJ1G8(1;L-2Bi~Fj{wxF z2KB!{y)00+0`WopFwn*k(0B=CcP&TvBMrf~plz(F7Vq0u@c5o;)aVf-D5(Ur=)%lz&0_8g#Ziqp_(nXpadi z_=F`;X9_gFt0-zL2wuQwsti5?`~)bIg4$}JgH=v|FE|CQtW9B7I05QTfldepH^x(- zD{VpZ_|S9aSt}Uy8J$6E5@9E4gLV&yfCni+js^AcKa5K^-NK1)$*tP(lYy>3{|lKv4`EX#pM016t$; znxuhD|ASP35(LOeAg_VST2KK3YL-B<6sWiWnG32kK<0uvSfFA9d}}JWj|5u@D+)Pp z4?Ic_+Sm?RoBXgb42~>m2G~df=zucN$$+4? zH~I=gP>_Rqub^rS6!f58D=6qeV;Z1r0qWhtQWGc@fz*LYXOKFOTS3#!kX{i;C8!+- znvn$ej$ln((E3Dh_#<}Rf)CmTT}BGtmCFc{P!v@L$H)or0T`eoE}-!MzStIgkNUp? z@HtSRcJS{lAQC*u42d>S9)#YdfQTbma9>w!H)stTctta0JPb6s0a>8}N|vBeBT(W4 zB|=aw1xl8X*+h^CsMG%F^2gC>Y7-Rw>evo^qhyh4YR|Yhl09tt_ z4vrttVsuCYM1X-2dNL}g%?oO5fbuFR|AR~hr5I3#0JX0`c^VX3prj9q9gsRu-Uq1z zWf9OAl{~l+3Q`GbS%K0HC~aZsy%H5CplbtQ6C0pyw74P$bUZewqytqB&~sr?A_f$< zpeRG^sbjsv0E!<|#&}x94=8Pd;ty1dg5n8Oi-JPQ9G;Kx_B;nq#DSVXpbWMXbXLNb z9SmgjNQsMRSayX@px}+{381zns8b3)$`LagLKY-K;~UZU0L8Z^gDz-Q4`|&b7r6DM z&A`L}y69~egA9Wf^nN25_`P7Doq(W{6cm@B+zO&WZADO34w3`489?!hoP$9vC{XUe z%*h}fpwbMKgOPJINC&8N1Fiam^fo|dB6=5yJPoZKp`#SwLU{0`6;LLJG%`UAN^qZ( zsJMr1uEQ7Spp~?^GB@KFkSwTe!^{A>`v7!qJuibagF2%HWZnT3)1br7c7jUcFQ5hk z)0bTgYz$ls+~B?@8$7;2a}rG8HV$as0n|bSm35$)2gL{|)OM6GX{DsG_+9z<-zAVLDTGz`}aUG0~!usoR9(A*fvoN(Z3$0>v9BzCiH=s@Xt%#B9r8 ziYH-k=7TH=fZmgc6i=Wc6x3?L7fqlu=s|lTpz);5n2pF!==le-9uhPEfJ7j(e4r47 zrAkmv0;PO%au6uQK`{f;4~h{`&Hn1Cod3APxA)9U^9+WvBwEgRTG>=>_e7 z1ohq^(=yb^QVIe)85F@gHRQkzBJ?Zg(6S0pvli5B05yHVOX=`rLG;y- zn9&Q$jiA{!@E%og_QS}BDJcvrDCMO*gEFJ$ZqPk`44^hDWV8k}AGM2ti$R7#9$Z#( z>4Ppx0j{{j>r)QWFVyn@VAgvTfJvJ1pw5NLdY>qP3uC+G?~$eGxn zqy?V%#1lWD-8G=mHq3Yd-GvMq<-o{x(4FF-=}qvs2Acx|CxbF*KQKrLvU>w`_5)}^ z0i-U2gg>ag4hk7ijslHHfpQe6%mUR#AU>!r0<||lbrFaU%PF9`1|$w%kt3!L8ia*( z10btDKvVUg?HQ0$u^>aPpm7XPx`u4P0(A^PSq&7`pixFpg#zj*fGQMFM*@6{G2{|s zMN#lr2I!18&>SOZ(}F1IvUFw8S;CNejKRY{;C;Xaj1$1!VbHYu1dvDyxc3DruTGo* zEfYbkGhn^L09v193h7sYGB9KvHmJo03KLNGA2gH-Ir9KiGlKe?u)Z+o9niK!(A+Sn zUIe97&^~*}I(m@DK(#t({Tis|1oeqQ9t4SlYI9KS0P-lv7ElieBo8W+K=Pp40;CU= zW5&-e{)PpuRK$kgP*uemD zIw+1nP6u_#KwEkkA(Qp6^Ls%%c|;izb3)+NgrIR?@U`clkqY?c5oQJ0g@S(`fSTH% zMH8UXB?UCpk1}Tu+9&c3`&7f2aqCq1Mp#BPY9Ta#Dbs)kRHYPxLKL~W;Blw~;Xdwd&NYcU>v>(J8 z)IfmDU_e$hLq?WCi{l{eAJ8Z~Xx0i+4uQ%aPzeDlqd{$MP*Dk@LFouoM1tDlAR5$) z0hK7AFb45K?Mje3P*{WXgSu0oQ3S+zDWbB2wq{g7tr-1r4c!i#CEWNZRHOP;UgiU_+TUhVAbFk9W&6fcAIDBj-TS{tnO?LXb7T zpd1L=-=RX{{ti$H2P*wQ83U9vK@}vZ)dWh=pd1QnK|n@iK_Z~M3L4pgoVEtam5BWv zi0T^}d(d17uFny%N4;DLs^uYZ2I@r+6GyO?Dc0NtYn+ApyBI_mgctR>G_nG2v5lne|?VDmsLC>6lwfyzlx@dENZXf-6L`vfYmKt&LU4=R2@ ze9$O4C{`^&b9UwokkjuWi|il^M?upHpi&Ry7*GWW(gbQSgBr-l4Q7zMDtPh}bSn*H z7Y6=)80yfQpurWED6;~r3IZ?0hfJ!2Tf3lvk(87a$aSYFka_eI(2>m(;41$FI94E& z4AAxY;P$UP!z9SQ40h?_!GPGGAOb3I zz}KUK#>F8)1yCER!(?PS=pa|XxI;jDC(s4WKCI{`U)8zcg9G$?(5N+D35faMKPdI5zu zsQd@51%Rysh3?`*j66Ws{DVt*(9!Fl)jWi<3~2Q}q<;nq9Z-J^Tb6GUzgjK}PF9&H;7rVfR3Q#?2Tm>|y}%Av-0Q^mj0T`T-yr zkdHx82`Ym@Q4Mk)=x`{=y}ck2P<;t1r9rJ#5Fb(FYF2UK!{whVyi6j0g4DgtJvAoh^4g6^@EXSfUUJ#0S& z=)6Bj(;VbdP)`^%`T*()?_!W(U}N9}*L4#5urvQaBMG3m0r?YD=7MyA{0ZWN>P?V5 zD6T-I0Bj@zRJw!4_`xL}Wd8){7<)$O;kBThc91NBI>G>11Of_3P(BCMg`j{2)sdh& z5tNfbJp)iwgNl1lq5-d10gWesF7E{8aBwgxnleMTp@EwHps@sSFAS7_K|^4m30hFV zv5J7^3{pUwEm9!&eS#JMA&nz|*7sbbms=7=LH&z zfpuv(FM!4_Ve1FEKvy3_k8cMp7XhUwP>ldePoPmtQ22s$gVH|8+aPa(#6jT*QU^-; zpkRTd{GAMtdwxKzK~->j1SAJa{UEbJT_I3=Q5!zvi+7D6X!{yuB@t*nAZSs=E(T== zesHz`6+n=_8z_^43NTQj<^@;7pbaCCRYss8CQt?d#S^Ic3W|78!T>o26mOt$WsrwJ z@}PJF$%7IKDB*zHG_VzdgtLbZsI>W4fSEBM>jFWihJd0Fw6p~rwUFivC_gYoFt>p3 z0Apt0X7GgUa07XJ2LouQEo8SZC^kW%&IB4S16?|ez5YTh88R>gjavzVmPQ$y8Z)^Vhx&ZA{Vw{iyI)93}g((8O{*;@+VmAW^sComhl>ylc8A%1@K~Sz@1=$Naga>Rd z8>l_R2I_!;PG&O(o$aa!O5Gq2f-uNB(CUMK1u39=BTg{4Fu#D>1FDNIg4V{sdYvo` zObig;f<_D=x4eOT3mSI;wXQ&JfrJ4lXM@53ak>=3yU_X@akm>(05J{&6+krQAOl^H zqwqlWHmE=a6(XSY0!k|g%RxPSND&OG(?Nv`D06`FKPcaefopJOQ$}c5vqEX`!DU}S z4LMMJ|KkDA0)kHdy90^~@ZF5i)uf=FIks@R4T%%b=r-hhZN$h5Bz8by1360@RM&tU z2Z}3D4hH2qM0kPvf;$+%JI2uB4;m`a&Bx&CoAC~4G8i+AWK2H22@;tsvb}Y2n$V6u>o=ns2Bl-EI7nWjYS!i1;NQi6-u+38jCXR z0Tp_nM8x<7yocuR3h)MOXmSEwp;iE@O2Bs|f^rUv4+A%YJ!B<4sNja2Dgi1KK-O|x zU;tI>psEykcBF+#31rsMI{y-zXpv6z7%7XA-An3GnP}DK%z{*`Pi=Ba+p?e1d z59n+!(Cr)Wd2&!3u-$QFWpH3%V+deiV_*Uu-Zg=Nje#*1a%L0cUOO((;a(FMxIkxm zffREw1Tb(hFvY@7^Wp{d$UuveAkhu-1|l1RQtb`~P*Dzw1+d$pM-wPQ4&7pk0G+o5 zu2>*<4l#n}vzYcUzhICD&76Sh3rIMD3}(JC*zbI1*uem*q9pVU3>hKww%|4iWF8k( zt->baO_f2Z29!1s7+e~InPI$he4Ua2hxK=^oBt;f<_%ceJPMjh4ptb2!ZQvko!Q%4BTT9 zg3Zt%%2WeGMo3>4)Nq7iP>ToZRB%L@8beR41-T5~t!KRhYCM93Qoto4n1$?4L52*_ zrfVh!NLmGj8YmNhXi#wjax?f8NBF!Eq9p+u4TD_&3W{Au22kum){KMd6;Q(gGFbeoS5{y=s-fx-fmcUd9nSpagrKd6}p3K3AV z50v*n&2~^f0pwp$^AF@-Q2Q2CJ%GXmlm|fJ0^)frS4z=4G4k^2DNEH5dkXeL3~is0wsG;p#y5+ zLRMjeq72k>1$hC~wFB`%105h5G$Su8s0`ZP4T>pIPz?b(3q=uBe3&YOlDeR>C^JY- zP}vl8M-gc74YZIDRPBMM6~OC8|M9R^q=3gkQ$QIZfC$b0~DU2$6>kKv~uRl4W7zN080TpzA3h85OeekDCFO zWkD4HD9%AE>mg@dgDMw?C?Od$vJg4TH`g6kznb_cH>2NezwF-R>X2&%6^7*Y{H&%_3$EzpJx5QZ+c zg4YF*^aq`T1eFGmdI2P?1LK0$G_rtJV1es1P@hSdL7L$JWK0W^wLoWKfW{F(9eXAQ z(56GkVhvDM0_9a$Jq=1rpfUh_LMW^L4hDYx9Sl;idJg0I7G6;7@`7R)8voEEdcg4y zDrGpqK?SOxgfGAv(V!9t)bIs0m_gYW)HVR|L6Hh-4}i)a$Z^if;4BHM)y+WzX3fh4AyW#|Bvjk{7HSqWW-FOM&fC_R*e+Jav%kegtwEKqU-#R({1gUV%) zyFlRsay7Wu0ylZXb1^WWezH=K!qM?rL1vG~O8Xt!?i{Vo#;HZM7TTuQ^ z5n$j4hnEn1^br(Zpb=M4;SCBm$o+btTm}j|NN)iYP9Qa)G65DAurL6LgTesB2Nmcb zc~I*ER2zY6HBc=D3L8+t4JzP4@}Ter$%EHTfl4cI(-Aty3JxpK_B%+83o6h-=7V}3 zkP-$OKHxGMx}h1m{tOag#-fmuRzV3V1$25bI2%E-HcCi=ayTR8j&fEJ26;w5Pzx0@ zio1&eG@`=@4l5SW@iYRU@&(l8-U(Vo`32T_-N^tMJqMMGppXEC5NJUmFSw-!nu7qP zCwT$T)-+HH0TiZ?H9MeE0aS{D!W`010gW6%PB8+76)1gy!U|Nf!on7mUO-_BY1zSM zEuhD~z{3sH;Rf|OUp=hyiVtgJgcx=m1qcs+X9cy1A+<6n6hYnqm6qTUR#2ZGIYij)A|dSv$T%yzv7j>O?C=vO zz=O(vBtUH;(B9P(EIuq77{nRUL4#b7d35bN(gMx~n-T=7_%q@^1 z8F2V8>VRBZ#sGoK7`YhNF#TgmV_n30hAn{Y3i~|{84d@I5RM#<1Dti7N4T1}TezR_ zRPg%nPUBm{-^9O-|AW9efp>y8gla?>L{^Dfi2e`@6PqMM-sb^?7 zX>8E=rfH@5OG`>?j@A$DCLJ}M8@g6{Y*BHtfE;D>$u>7+1lAw*(uo{a^!Q$aWQe(=Q_i!$bEyy4$moGi@Z&I zlzb|D&iF?79`Y0MOY{5TKP5mS;9KB^pp4+S5Qk8n&<|mGVQ<2hMd(FxM3zMvM2kfK zisgtCiRVeMOSqM|BdIGnDkUh@BTXjlL;8b^Rhc$fTv_|F3v&E&4RU|w?a4RFUs2#v zaH4QRkzTPxaY%7TiA>3sl2@f3r5DP)%I1}QC|^)fRk^9kuBxT#QZ-MtTlKw~l3JHK zjyj9FK2X#!@H2px3W1oQz6q!V0kJ_>rGhT&0I``Fq!@%5KrJEAcr_3BkX?{CD}xAw zB~%==g$Q(WFi4z}ft?{7DlWvp!w|>7%)rP3n%9wF$bzz&82A{PploIa6NU*;HVcCU z!x1Q(l|h36bk8kFFB^jhBMVfVlYx&>BFs5R!9UnV!8boIKPWZ5G$*kLS;#6ZwWv5V zKTp9>&%nSCSq3bi;G0;KoS|TBsH0$HU}zfV9ONJD0y4_C$Tu-BwFFrMLl}cILlA=k zgFizsgA0QKgD*oqLmopuLl8qMLpnn#Lk>eCLlI6@Rt#YbsSHI7#SEEXeF_YQ40;R( z3G489DB40#Nx3?&Sp zp)>{thX3je)4;7!Q2Zd{GYkxjprV5rbhHQq8v{E72LmT)I~W5G11|#~13!ZRgCK(t zgD`^#gD8U-_=q=21}O$<1{nrf1~~?K1_cI11|V8O#{W87vqq8LSwr8EhDA8SEJB85|fK8JrlL8C)1#8Qd7$89W#~ z8N3+08GIOg8T=Uh83Gsr8G;ys8A2FB8NwLC86p@W8KM}X8Dbb>8R8h?84?&08Cn=x z8KyD3VCZA$W|+&clA(*CnUR^1g`t;`m0=#kDu%BNUl_hIEMi#8aFXFT!#ai}hGd2b z3@Hq!8B!TeFq~pI&v1s}EW|yxM$i~Rd$idLV$jQjX$j!*Z$jivb$j>Oi zu$WPh#V^#yhrKi})4;&V2ud46X-k%z%%ViLg4E*Fl0+8Q(xQC!lA_GS^r8|7os$Nk zQ}Q5mX#rROEMs7gz^7>&_o7=113SG z02c!f10R?NAs}LM40;TVIf*5Cpy5f7#Q*=`GJr9yC^4CV12pFePJv7eYz&~<9aPeQ zCLcjF?t2&*8NdtC!74x^It-u#EEK>O5%Dn;GcYskVGv~~0@I)|78ZsQI2$w+D8|45 E0C5zG4gdfE literal 0 HcmV?d00001 diff --git a/src/inc/routes/api.mjs b/src/inc/routes/apiv1.mjs similarity index 75% rename from src/inc/routes/api.mjs rename to src/inc/routes/apiv1.mjs index e9f4b74..509b31c 100644 --- a/src/inc/routes/api.mjs +++ b/src/inc/routes/apiv1.mjs @@ -3,22 +3,22 @@ import sql from "../sql.mjs"; import { parse } from "url"; import cfg from "../../../config.json"; -import { mimes, queries } from "./inc/api.mjs"; +import { mimes, queries } from "./inc/apiv1.mjs"; -router.get("/api", (req, res) => { +router.get("/api/v1", (req, res) => { res.end("api lol"); }); -router.get(/^\/api\/random(\/user\/.+|\/image|\/video|\/audio)?$/, async (req, res) => { +router.get(/^\/api\/v1\/random(\/user\/.+|\/image|\/video|\/audio)?$/, async (req, res) => { const args = []; let q = queries.random.main; - if(req.url.split[2] === "user") { + if(req.url.split[3] === "user") { q += queries.random.where("username like ?"); - args.push(req.url.split[3] || "flummi"); + args.push(req.url.split[4] || "flummi"); } else - q += queries.random.where(mimes[req.url.split[2]] ? mimes[req.url.split[2]].map(mime => `mime = "${mime}"`).join(" or ") : null); + q += queries.random.where(mimes[req.url.split[3]] ? mimes[req.url.split[3]].map(mime => `mime = "${mime}"`).join(" or ") : null); try { const rows = await sql.query(q, args); @@ -32,7 +32,7 @@ router.get(/^\/api\/random(\/user\/.+|\/image|\/video|\/audio)?$/, async (req, r } }); -router.get("/api/p", async (req, res) => { +router.get("/api/v1/p", async (req, res) => { let id = parseInt(req.url.qs.id) || 99999999; const eps = Math.min(parseInt(req.url.qs.eps) || 100, 200); let [ order, trend ] = req.url.qs.order === "asc" ? [ "asc", ">" ] : [ "desc", "<" ]; @@ -67,9 +67,9 @@ router.get("/api/p", async (req, res) => { } }); -router.get(/^\/api\/p\/([0-9]+)/, async (req, res) => { // legacy +router.get(/^\/api\/v1\/p\/([0-9]+)/, async (req, res) => { // legacy let eps = 100; - let id = +req.url.split[2]; + let id = +req.url.split[3]; const query = await sql.query("select * from items where id < ? order by id desc limit ?", [ id, eps ]); const items = { @@ -81,9 +81,9 @@ router.get(/^\/api\/p\/([0-9]+)/, async (req, res) => { // legacy res.end(JSON.stringify(items), "utf-8"); }); -router.get(/^\/api\/item\/[0-9]+$/, async (req, res) => { +router.get(/^\/api\/v1\/item\/[0-9]+$/, async (req, res) => { try { - const rows = await sql.query(queries.item, Array(3).fill(req.url.split[2])); + const rows = await sql.query(queries.item, Array(3).fill(req.url.split[3])); res.reply({ type: "application/json", body: JSON.stringify(rows?.shift() || []) @@ -96,9 +96,9 @@ router.get(/^\/api\/item\/[0-9]+$/, async (req, res) => { } }); -router.get(/^\/api\/user\/.*(\/[0-9]+)?$/, async (req, res) => { // auf qs umstellen - const user = req.url.split[2]; - const eps = Math.min(req.url.split[3] || 50, 50); +router.get(/^\/api\/v1\/user\/.*(\/[0-9]+)?$/, async (req, res) => { // auf qs umstellen + const user = req.url.split[3]; + const eps = Math.min(req.url.split[4] || 50, 50); try { const rows = await sql.query(queries.user, [ user, eps ]); res.reply({ diff --git a/src/inc/routes/inc/api.mjs b/src/inc/routes/inc/apiv1.mjs similarity index 100% rename from src/inc/routes/inc/api.mjs rename to src/inc/routes/inc/apiv1.mjs diff --git a/src/inc/routes/index.mjs b/src/inc/routes/index.mjs index 9b58464..94cce67 100644 --- a/src/inc/routes/index.mjs +++ b/src/inc/routes/index.mjs @@ -1,6 +1,7 @@ import router from "../router.mjs"; import cfg from "../../../config.json"; import url from "url"; +import fs from "fs"; import { queries } from "./inc/index.mjs"; import sql from "../sql.mjs"; import lib from "../lib.mjs"; @@ -8,22 +9,55 @@ import tpl from "../tpl.mjs"; tpl.readdir("views"); -router.get("/", async (req, res) => { - const query = await sql.query("select id, mime from items order by id desc limit 300"); - const data = { - items: query, - last: query[query.length - 1].id - }; +router.get(/\/(p\/\d+)?$/, async (req, res) => { + try { + const total = (await sql.query("select count(*) as total from items"))[0].total; + const limit = 299; + const pages = +Math.ceil(total / limit); + const page = Math.min(pages, +req.url.split[1] || 1); + const offset = (page - 1) * limit; - res.reply({ body: tpl.render("views/index", data) }); + const query = await sql.query("select id, mime from items order by id desc limit ?, ?", [ offset, limit ]); + + let cheat = []; + for(let i = Math.max(1, page - 3); i <= Math.min(page + 3, pages); i++) + cheat.push(i); + + query.forEach(e => { + if(!fs.existsSync(`public/t/${e.id}.png`)) + fs.copyFileSync("public/s/img/broken.png", `public/t/${e.id}.png`); + }); + + const data = { + items: query, + pagination: { + end: pages, + prev: (page > 1) ? page - 1 : null, + next: (page < pages) ? page + 1 : null, + page: page, + cheat: cheat, + link: "/p/" + }, + last: query[query.length - 1].id + }; + + res.reply({ body: tpl.render("views/index", data) }); + } catch(err) { + res.reply({ body: "error :(" }); + } }); router.get(/^\/([0-9]+)$/, async (req, res) => { const query = (await sql.query(queries.item, Array(3).fill(req.url.split[0])))?.shift(); + const qmax = (await sql.query("select id from items order by id desc limit 1"))[0].id; if(!query?.id) return res.redirect("/404"); + let cheat = []; + for(let i = Math.min(query.id + 3, qmax); i >= Math.max(1, query.id - 3); i--) + cheat.push(i); + const data = { user: { name: query.username, @@ -44,7 +78,15 @@ router.get(/^\/([0-9]+)$/, async (req, res) => { }, next: query.next ? query.next : null, prev: query.prev ? query.prev : null, - title: `${query.id} - f0ck.me` + title: `${query.id} - f0ck.me`, + pagination: { + end: 1, + prev: query.id + 1, + next: Math.max(query.id - 1, 1), + page: query.id, + cheat: cheat, + link: "/" + } }; res.reply({ body: tpl.render("views/item", data) }); }); diff --git a/src/inc/trigger/f0ckgag.mjs b/src/inc/trigger/f0ckgag.mjs index eda975d..7364097 100644 --- a/src/inc/trigger/f0ckgag.mjs +++ b/src/inc/trigger/f0ckgag.mjs @@ -3,7 +3,7 @@ import sql from "../sql.mjs"; import lib from "../lib.mjs"; const _query = "select id, mime, size, username, userchannel, usernetwork, stamp from items where "; -const regex = /https\:\/\/f0ck\.me\/(\d+|(?:b\/)(\w{8})\.(jpg|webm|gif|mp4|png|mov|mp3|ogg|flac))/gi; +const regex = /(https\:\/\/f0ck\.me|http\:\/\/fockmoonsb24iczs7odozzy5uktlzbcgp337nabrgffzxv5ihabgpvyd\.onion)\/(\d+|(?:b\/)(\w{8})\.(jpg|webm|gif|mp4|png|mov|mp3|ogg|flac))/gi; export default async bot => { diff --git a/src/inc/trigger/parser.mjs b/src/inc/trigger/parser.mjs index f04b689..95e1618 100644 --- a/src/inc/trigger/parser.mjs +++ b/src/inc/trigger/parser.mjs @@ -132,9 +132,9 @@ export default async bot => { speed = !Number.isFinite(speed) ? "yes" : `${speed.toFixed(2)} Mbit/s`; e.reply([ - `title: ${meta.fulltitle}`, - `size: ${lib.formatSize(size)} speed: ${speed}`, - `link: ${cfg.main.url}/${insertq.insertId}` + //`title: ${meta.fulltitle}`, + `link: ${cfg.main.url}/${insertq.insertId} | size: ${lib.formatSize(size)} | speed: ${speed}` + //`link: ${cfg.main.url}/${insertq.insertId}` ]); }); diff --git a/views/index.html b/views/index.html index fda41ac..3204000 100644 --- a/views/index.html +++ b/views/index.html @@ -1,10 +1,10 @@ {{include main/header}}
-
    +
      {{each items as item}}
    • - + {{=item.mime}}
    • diff --git a/views/item.html b/views/item.html index 795b9fd..ed2e2e3 100644 --- a/views/item.html +++ b/views/item.html @@ -1,8 +1,5 @@ {{include main/header}}
      -
      - Random -
      @@ -37,7 +36,9 @@
      »
      {{else}} - + {{/if}}
      diff --git a/views/main/footer.html b/views/main/footer.html index 697c2e8..4dfea42 100644 --- a/views/main/footer.html +++ b/views/main/footer.html @@ -1,7 +1,7 @@ - - - - - + + + + + diff --git a/views/main/header.html b/views/main/header.html index b9c5463..2ebf066 100644 --- a/views/main/header.html +++ b/views/main/header.html @@ -2,11 +2,11 @@ {{if data.title}}{{=data.title}}{{else}}f0ck!{{/if}} - - - - - + + + + + {{if data.item}} diff --git a/views/partials/pagination.html b/views/partials/pagination.html new file mode 100644 index 0000000..285d9df --- /dev/null +++ b/views/partials/pagination.html @@ -0,0 +1,15 @@ +{{if typeof pagination !== "undefined"}} + +{{/if}} \ No newline at end of file diff --git a/views/snippets/navbar.html b/views/snippets/navbar.html index 1237777..fceb4b9 100644 --- a/views/snippets/navbar.html +++ b/views/snippets/navbar.html @@ -1,18 +1,27 @@ diff --git a/views/test.html b/views/test.html new file mode 100644 index 0000000..10eb606 --- /dev/null +++ b/views/test.html @@ -0,0 +1,16 @@ +{{include main/header}} +
      + {{include partials/pagination}} + + {{include partials/pagination}} +
      +{{include main/footer}}