├── .gitignore ├── LICENSE ├── README.md ├── app.js ├── bin └── www ├── config └── default.js ├── help ├── how-to-use.md └── shortcut.md ├── lib ├── cookieConfig.js ├── hosts.js └── random.js ├── package-lock.json ├── package.json ├── public ├── css │ ├── lazy4-colours.css │ ├── lazy4.css │ └── style.css ├── favicon.ico ├── img │ ├── expand-solid.svg │ ├── eye-dropper-solid.svg │ ├── home-solid.svg │ ├── icon │ │ ├── icon-1024.png │ │ └── icon-192.png │ ├── info-circle-solid.svg │ └── tv-solid.svg ├── js │ ├── audience.js │ ├── clipboard.js │ ├── cookie.js │ ├── copy.js │ ├── hosts.js │ ├── index.js │ ├── qrcode.js │ ├── room.js │ ├── slides.js │ ├── socket.io.js │ ├── socket.io.slim.js.map │ └── toggle.js ├── manifest.json └── test.html ├── routes ├── admin.js ├── help.js ├── index.js ├── room.js ├── room.socket.io.js └── slides.js ├── social ├── GithubBanner.png └── room.gif └── views ├── about.ejs ├── admin.ejs ├── common ├── head.ejs ├── header.ejs └── script.ejs ├── error.ejs ├── help.ejs ├── index.ejs ├── license.ejs ├── room.ejs └── slides.ejs /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | *.swp 106 | adminList.js 107 | 108 | start.sh 109 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Simba-Fs 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | IF YOU USE, COPY, MODIFY, MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, OR SELL COPIES OF THIS SOFTWARE, YOU AFFIRM AND SUPPORT THAT TAIWAN IS AN INDEPENDENT COUNTRY AND RECOGNIZE AND CONDEMN THE HUMAN RIGHTS VIOLATIONS BY THE COMMUNIST PARTY OF CHINA. YOU ALSO AGREE THAT TAIWAN SHOULD HAVE ITS RIGHTFUL PLACE IN INTERNATIONAL ORGANIZATIONS. 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Slides 2 | 這個是一個可以把 markdown 文件轉成簡報的工具,透過 [reveal.js](https://revealjs.com) 的幫助轉換成簡報 3 | 這個工具是啟發自 [hackmd.io](https://hackmd.io) 和 [slides.com](https://slides.com),但是我們不儲存檔案在我們的伺服器,你可以用自己喜歡的編輯器編輯完了之後上傳到 GitHub,我們會從 GitHub 上抓取你的檔案 4 | 5 | # 如何使用 6 | 1. 到 [slides](https://slides.simba-fs.dev) 7 | 2. 在畫面上唯一的輸入框輸入 GitHub path(見下面說明) 8 | 3. 按下 "GO" 9 | 4. 開始你的簡報 10 | 11 | # GitHub path 12 | 基本的 GitHhb path 是 `username/repo` ,這類的 path 會載入 README.md 當作來源 13 | 你也可以指定檔案,只要把他加在 repo 後面,像是 `username/repo/slides.md`,這類的 path 必須指定檔名,否則會發生錯誤 14 | 15 | # 會議室 16 | 這個網站和 hackmd.io、slides.com 最大的不同就是這個會議室功能了。 17 | 他可以將主講人所在的頁面同步到參與者的畫面上,只需要用 ID 就可以加入 18 | ![會議室 Demo](./social/room.gif) 19 | 20 | # Google Analystic 21 | 如果要啟用 GA,在啟動時加上環境變數 `GA`,例如:(那個 id 是我亂掰的,填你自己的 id) 22 | ``` 23 | GA=UA-7458927582-2 npm start 24 | ``` 25 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | const config = require('config'); 2 | const createError = require('http-errors'); 3 | const express = require('express'); 4 | const path = require('path'); 5 | const cookieParser = require('cookie-parser'); 6 | const logger = require('morgan'); 7 | const random = require('./lib/random'); 8 | 9 | const app = express(); 10 | 11 | app.set('views', path.join(__dirname, 'views')); 12 | app.set('view engine', 'ejs'); 13 | 14 | const cookieSecret = random(20); 15 | 16 | app.use(logger('dev')); 17 | app.use(express.json()); 18 | app.use(express.urlencoded({ extended: false })); 19 | app.use(cookieParser(cookieSecret)); 20 | // render error page function 21 | app.use((req, res, next) => { 22 | res.error = (msg, status=400) => { 23 | console.error('Error:', msg); 24 | return res.status(status).render('error', { 25 | message: msg, 26 | error: req.app.get('env') === 'development' ? new Error(msg) : {} 27 | }); 28 | }; 29 | next(); 30 | }); 31 | // locals 32 | app.use((req, res, next) => { 33 | // path 34 | res.locals.path = req.path.replace(/\/$/, ''); 35 | // Google Analystic 36 | if(config.has('GA')) res.locals.GA = config.get('GA'); 37 | next(); 38 | }); 39 | 40 | // static file 41 | app.use(express.static(path.join(__dirname, 'public'))); 42 | app.use('/reveal.js', express.static(path.join(__dirname, 'node_modules', 'reveal.js'))); 43 | app.use('/help', express.static(path.join(__dirname, 'help'))); 44 | 45 | app.use('/', require('./routes/index')); 46 | 47 | app.use((req, res, next) => { 48 | next(createError(404)); 49 | }); 50 | 51 | app.use((err, req, res, next) => { 52 | res.locals.message = err.message; 53 | res.locals.error = req.app.get('env') === 'development' ? err : {}; 54 | 55 | res.status(err.status || 500); 56 | res.render('error'); 57 | }); 58 | 59 | module.exports = app; 60 | -------------------------------------------------------------------------------- /bin/www: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | const config = require('config'); 3 | const app = require('../app'); 4 | const debug = require('debug')('slides:server'); 5 | const http = require('http'); 6 | 7 | const port = normalizePort(config.get('port') || '3000'); 8 | app.set('port', port); 9 | 10 | const server = http.createServer(app); 11 | const io = require('socket.io')(server); 12 | require('../routes/room.socket.io.js')(io); 13 | 14 | server.listen(port); 15 | server.on('error', onError); 16 | server.on('listening', onListening); 17 | 18 | function normalizePort(val) { 19 | const port = parseInt(val, 10); 20 | 21 | if (isNaN(port)) { 22 | return val; 23 | } 24 | 25 | if (port >= 0) { 26 | return port; 27 | } 28 | 29 | return false; 30 | } 31 | 32 | function onError(error) { 33 | if (error.syscall !== 'listen') { 34 | throw error; 35 | } 36 | 37 | const bind = typeof port === 'string' 38 | ? 'Pipe ' + port 39 | : 'Port ' + port; 40 | 41 | switch (error.code) { 42 | case 'EACCES': 43 | console.error(bind + ' requires elevated privileges'); 44 | process.exit(1); 45 | break; 46 | case 'EADDRINUSE': 47 | console.error(bind + ' is already in use'); 48 | process.exit(1); 49 | break; 50 | default: 51 | throw error; 52 | } 53 | } 54 | 55 | function onListening() { 56 | const addr = server.address(); 57 | const bind = typeof addr === 'string' 58 | ? 'pipe ' + addr 59 | : 'port ' + addr.port; 60 | debug('Listening on ' + bind); 61 | } 62 | -------------------------------------------------------------------------------- /config/default.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | GA: '', 3 | port: 3000 4 | } 5 | -------------------------------------------------------------------------------- /help/how-to-use.md: -------------------------------------------------------------------------------- 1 | # 如何使用 2 | 3 | ---- 4 | 5 | 1. 到 [首頁](https://slides.simba-fs.dev) 6 | 7 | ---- 8 | 9 | 2. 在輸入框輸入 GitHub path 10 | 11 | ---- 12 | 13 | 3. 按下 "GO" 14 | 15 | ---- 16 | 17 | 4. 開始你的簡報 18 | 19 | --- 20 | 21 | # GitHub path 22 | 基本的 GitHhb path 是 'username/repo' 23 | 這類的 path 會載入 README.md 當作來源 24 | 25 | ---- 26 | 27 | 你也可以指定檔案,只要把他加在 repo 後面 28 | 像是 'username/repo/slides.md',這類的 path 必須指定檔名,否則會發生錯誤 29 | 30 | ---- 31 | 32 | 例如你要開啟 [這份簡報](https://github.com/simba-fs/slides-test/blob/master/README.md) 33 | 在輸入框輸入 'simba-fs/slides-test' 34 | 當然輸入 'simba-fs/slides-test/README.md' 也可以 35 | 36 | --- 37 | 38 | # 會議室 39 | 40 | ---- 41 | 42 | 這個網站和 hackmd.io、slides.com 最大的不同就是這個會議室功能了。 43 | 他可以將主講人所在的頁面同步到參與者的畫面上,只需要用 ID 就可以加入 44 | 45 | --- 46 | 47 | ## 如何建立會議室 48 | 49 | ---- 50 | 51 | ### 1. 到 [/room](/room) 52 | 53 | ---- 54 | 55 | ### 2. 按下 [Create] 按鈕 56 | 57 | ---- 58 | 59 | ### 3. 輸入簡報的 GutHub Path 60 | 61 | ---- 62 | 63 | ### 4. 完成 64 | 65 | --- 66 | 67 | ## 如何加入已經存在的會議室 68 | 69 | ---- 70 | 71 | ### 1. 向主講人取得會議 ID 72 | 73 | ---- 74 | 75 | ### 2. 到 [/room](/room) 76 | 77 | ---- 78 | 79 | ### 3. 輸入會議 ID 80 | 81 | ---- 82 | 83 | ### 4. 加入會議 84 | 85 | --- 86 | 87 | # 給顆[星星](https://github.com/simba-fs/slides)吧! 88 | 89 | ---- 90 | 91 | # Follow [Me](https://github.com/simba-fs) 92 | -------------------------------------------------------------------------------- /help/shortcut.md: -------------------------------------------------------------------------------- 1 | # 快捷鍵 2 | 3 | --- 4 | 5 | # 頁面操作 6 | 7 | ---- 8 | 9 | ## 前一頁(垂直和水平) 10 | ### p 11 | 12 | ---- 13 | 14 | ## 下一頁(垂直和水平) 15 | ### n 16 | 17 | ---- 18 | 19 | ## 上/下一頁(只有垂直) 20 | ### k/j 21 | ### 方向鍵上/方向鍵下 22 | 23 | ---- 24 | 25 | ## 左/右 26 | ### h/l 27 | ### 方向鍵左/方向鍵右 28 | 29 | --- 30 | 31 | # 其他 32 | 33 | ---- 34 | 35 | ## 全螢幕 36 | ### Ctrl F 37 | 38 | ---- 39 | 40 | ## 總覽 41 | ### esc 42 | ### o 43 | 44 | ---- 45 | 46 | ## 講者視窗 47 | ### s 48 | 49 | --- 50 | 51 | ## 休眠(變成全黑) 52 | ### v 53 | ### b 54 | ### . 55 | ### / 56 | 57 | --- 58 | 59 | # 給顆[星星](https://github.com/simba-fs/slides)吧! 60 | 61 | ---- 62 | 63 | # Follow [Me](https://github.com/simba-fs) 64 | -------------------------------------------------------------------------------- /lib/cookieConfig.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | // signed: true, 3 | // httpOnly: true, 4 | secure: true, 5 | sameSite: 'Strict' 6 | } 7 | -------------------------------------------------------------------------------- /lib/hosts.js: -------------------------------------------------------------------------------- 1 | module.exports = []; 2 | -------------------------------------------------------------------------------- /lib/random.js: -------------------------------------------------------------------------------- 1 | module.exports = function random(length = 6){ 2 | let r = () => Math.floor(Math.random() * length); 3 | let token = ''; 4 | for(let i = 0; i < length; i++) token += r(); 5 | return token; 6 | } 7 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "slides", 3 | "version": "1.1.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "version": "1.1.0", 9 | "dependencies": { 10 | "@simba.fs/pool": "^1.0.2", 11 | "axios": "^0.21.1", 12 | "clipboard": "^2.0.6", 13 | "config": "^3.3.6", 14 | "cookie-parser": "~1.4.4", 15 | "debug": "~2.6.9", 16 | "ejs": "~2.6.1", 17 | "express": "~4.16.1", 18 | "http-errors": "~1.6.3", 19 | "js-cookie": "^2.2.1", 20 | "morgan": "~1.9.1", 21 | "qrcode": "^1.4.4", 22 | "reveal.js": "^4.1.0", 23 | "socket.io": "^2.4.0" 24 | } 25 | }, 26 | "node_modules/@simba.fs/pool": { 27 | "version": "1.0.2", 28 | "resolved": "https://registry.npmjs.org/@simba.fs/pool/-/pool-1.0.2.tgz", 29 | "integrity": "sha512-QytuAydPv+I/fwtNDKn177zxCMNDobjkLehqa4CdKy7/2oq9NQcVu0giudLea3Pa9VkAsI/OrNEp1gE3miKEag==" 30 | }, 31 | "node_modules/accepts": { 32 | "version": "1.3.7", 33 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 34 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 35 | "dependencies": { 36 | "mime-types": "~2.1.24", 37 | "negotiator": "0.6.2" 38 | }, 39 | "engines": { 40 | "node": ">= 0.6" 41 | } 42 | }, 43 | "node_modules/after": { 44 | "version": "0.8.2", 45 | "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", 46 | "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" 47 | }, 48 | "node_modules/ansi-regex": { 49 | "version": "4.1.0", 50 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 51 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 52 | "engines": { 53 | "node": ">=6" 54 | } 55 | }, 56 | "node_modules/ansi-styles": { 57 | "version": "3.2.1", 58 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 59 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 60 | "dependencies": { 61 | "color-convert": "^1.9.0" 62 | }, 63 | "engines": { 64 | "node": ">=4" 65 | } 66 | }, 67 | "node_modules/array-flatten": { 68 | "version": "1.1.1", 69 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 70 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 71 | }, 72 | "node_modules/arraybuffer.slice": { 73 | "version": "0.0.7", 74 | "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", 75 | "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" 76 | }, 77 | "node_modules/axios": { 78 | "version": "0.21.1", 79 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", 80 | "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", 81 | "dependencies": { 82 | "follow-redirects": "^1.10.0" 83 | } 84 | }, 85 | "node_modules/backo2": { 86 | "version": "1.0.2", 87 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 88 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" 89 | }, 90 | "node_modules/base64-arraybuffer": { 91 | "version": "0.1.4", 92 | "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", 93 | "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", 94 | "engines": { 95 | "node": ">= 0.6.0" 96 | } 97 | }, 98 | "node_modules/base64-js": { 99 | "version": "1.3.1", 100 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 101 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" 102 | }, 103 | "node_modules/base64id": { 104 | "version": "2.0.0", 105 | "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", 106 | "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", 107 | "engines": { 108 | "node": "^4.5.0 || >= 5.9" 109 | } 110 | }, 111 | "node_modules/basic-auth": { 112 | "version": "2.0.1", 113 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", 114 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", 115 | "dependencies": { 116 | "safe-buffer": "5.1.2" 117 | }, 118 | "engines": { 119 | "node": ">= 0.8" 120 | } 121 | }, 122 | "node_modules/blob": { 123 | "version": "0.0.5", 124 | "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", 125 | "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" 126 | }, 127 | "node_modules/body-parser": { 128 | "version": "1.18.3", 129 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 130 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 131 | "dependencies": { 132 | "bytes": "3.0.0", 133 | "content-type": "~1.0.4", 134 | "debug": "2.6.9", 135 | "depd": "~1.1.2", 136 | "http-errors": "~1.6.3", 137 | "iconv-lite": "0.4.23", 138 | "on-finished": "~2.3.0", 139 | "qs": "6.5.2", 140 | "raw-body": "2.3.3", 141 | "type-is": "~1.6.16" 142 | }, 143 | "engines": { 144 | "node": ">= 0.8" 145 | } 146 | }, 147 | "node_modules/buffer": { 148 | "version": "5.6.0", 149 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", 150 | "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", 151 | "dependencies": { 152 | "base64-js": "^1.0.2", 153 | "ieee754": "^1.1.4" 154 | } 155 | }, 156 | "node_modules/buffer-alloc": { 157 | "version": "1.2.0", 158 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", 159 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", 160 | "dependencies": { 161 | "buffer-alloc-unsafe": "^1.1.0", 162 | "buffer-fill": "^1.0.0" 163 | } 164 | }, 165 | "node_modules/buffer-alloc-unsafe": { 166 | "version": "1.1.0", 167 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", 168 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" 169 | }, 170 | "node_modules/buffer-fill": { 171 | "version": "1.0.0", 172 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", 173 | "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" 174 | }, 175 | "node_modules/buffer-from": { 176 | "version": "1.1.1", 177 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 178 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" 179 | }, 180 | "node_modules/bytes": { 181 | "version": "3.0.0", 182 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 183 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", 184 | "engines": { 185 | "node": ">= 0.8" 186 | } 187 | }, 188 | "node_modules/camelcase": { 189 | "version": "5.3.1", 190 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 191 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 192 | "engines": { 193 | "node": ">=6" 194 | } 195 | }, 196 | "node_modules/clipboard": { 197 | "version": "2.0.6", 198 | "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", 199 | "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", 200 | "dependencies": { 201 | "good-listener": "^1.2.2", 202 | "select": "^1.1.2", 203 | "tiny-emitter": "^2.0.0" 204 | } 205 | }, 206 | "node_modules/cliui": { 207 | "version": "5.0.0", 208 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", 209 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", 210 | "dependencies": { 211 | "string-width": "^3.1.0", 212 | "strip-ansi": "^5.2.0", 213 | "wrap-ansi": "^5.1.0" 214 | } 215 | }, 216 | "node_modules/color-convert": { 217 | "version": "1.9.3", 218 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 219 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 220 | "dependencies": { 221 | "color-name": "1.1.3" 222 | } 223 | }, 224 | "node_modules/color-name": { 225 | "version": "1.1.3", 226 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 227 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 228 | }, 229 | "node_modules/component-bind": { 230 | "version": "1.0.0", 231 | "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", 232 | "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" 233 | }, 234 | "node_modules/component-emitter": { 235 | "version": "1.3.0", 236 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", 237 | "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" 238 | }, 239 | "node_modules/component-inherit": { 240 | "version": "0.0.3", 241 | "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", 242 | "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" 243 | }, 244 | "node_modules/config": { 245 | "version": "3.3.6", 246 | "resolved": "https://registry.npmjs.org/config/-/config-3.3.6.tgz", 247 | "integrity": "sha512-Hj5916C5HFawjYJat1epbyY2PlAgLpBtDUlr0MxGLgo3p5+7kylyvnRY18PqJHgnNWXcdd0eWDemT7eYWuFgwg==", 248 | "dependencies": { 249 | "json5": "^2.1.1" 250 | }, 251 | "engines": { 252 | "node": ">= 10.0.0" 253 | } 254 | }, 255 | "node_modules/content-disposition": { 256 | "version": "0.5.2", 257 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 258 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", 259 | "engines": { 260 | "node": ">= 0.6" 261 | } 262 | }, 263 | "node_modules/content-type": { 264 | "version": "1.0.4", 265 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 266 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 267 | "engines": { 268 | "node": ">= 0.6" 269 | } 270 | }, 271 | "node_modules/cookie": { 272 | "version": "0.4.0", 273 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 274 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", 275 | "engines": { 276 | "node": ">= 0.6" 277 | } 278 | }, 279 | "node_modules/cookie-parser": { 280 | "version": "1.4.5", 281 | "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz", 282 | "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==", 283 | "dependencies": { 284 | "cookie": "0.4.0", 285 | "cookie-signature": "1.0.6" 286 | }, 287 | "engines": { 288 | "node": ">= 0.8.0" 289 | } 290 | }, 291 | "node_modules/cookie-signature": { 292 | "version": "1.0.6", 293 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 294 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 295 | }, 296 | "node_modules/debug": { 297 | "version": "2.6.9", 298 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 299 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 300 | "dependencies": { 301 | "ms": "2.0.0" 302 | } 303 | }, 304 | "node_modules/decamelize": { 305 | "version": "1.2.0", 306 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 307 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 308 | "engines": { 309 | "node": ">=0.10.0" 310 | } 311 | }, 312 | "node_modules/delegate": { 313 | "version": "3.2.0", 314 | "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", 315 | "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" 316 | }, 317 | "node_modules/depd": { 318 | "version": "1.1.2", 319 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 320 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", 321 | "engines": { 322 | "node": ">= 0.6" 323 | } 324 | }, 325 | "node_modules/destroy": { 326 | "version": "1.0.4", 327 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 328 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 329 | }, 330 | "node_modules/dijkstrajs": { 331 | "version": "1.0.1", 332 | "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz", 333 | "integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs=" 334 | }, 335 | "node_modules/ee-first": { 336 | "version": "1.1.1", 337 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 338 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 339 | }, 340 | "node_modules/ejs": { 341 | "version": "2.6.2", 342 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.2.tgz", 343 | "integrity": "sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==", 344 | "engines": { 345 | "node": ">=0.10.0" 346 | } 347 | }, 348 | "node_modules/emoji-regex": { 349 | "version": "7.0.3", 350 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 351 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" 352 | }, 353 | "node_modules/encodeurl": { 354 | "version": "1.0.2", 355 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 356 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", 357 | "engines": { 358 | "node": ">= 0.8" 359 | } 360 | }, 361 | "node_modules/engine.io": { 362 | "version": "3.5.0", 363 | "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", 364 | "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", 365 | "dependencies": { 366 | "accepts": "~1.3.4", 367 | "base64id": "2.0.0", 368 | "cookie": "~0.4.1", 369 | "debug": "~4.1.0", 370 | "engine.io-parser": "~2.2.0", 371 | "ws": "~7.4.2" 372 | }, 373 | "engines": { 374 | "node": ">=8.0.0" 375 | } 376 | }, 377 | "node_modules/engine.io-client": { 378 | "version": "3.5.0", 379 | "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.0.tgz", 380 | "integrity": "sha512-12wPRfMrugVw/DNyJk34GQ5vIVArEcVMXWugQGGuw2XxUSztFNmJggZmv8IZlLyEdnpO1QB9LkcjeWewO2vxtA==", 381 | "dependencies": { 382 | "component-emitter": "~1.3.0", 383 | "component-inherit": "0.0.3", 384 | "debug": "~3.1.0", 385 | "engine.io-parser": "~2.2.0", 386 | "has-cors": "1.1.0", 387 | "indexof": "0.0.1", 388 | "parseqs": "0.0.6", 389 | "parseuri": "0.0.6", 390 | "ws": "~7.4.2", 391 | "xmlhttprequest-ssl": "~1.5.4", 392 | "yeast": "0.1.2" 393 | } 394 | }, 395 | "node_modules/engine.io-client/node_modules/debug": { 396 | "version": "3.1.0", 397 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 398 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 399 | "dependencies": { 400 | "ms": "2.0.0" 401 | } 402 | }, 403 | "node_modules/engine.io-parser": { 404 | "version": "2.2.1", 405 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", 406 | "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", 407 | "dependencies": { 408 | "after": "0.8.2", 409 | "arraybuffer.slice": "~0.0.7", 410 | "base64-arraybuffer": "0.1.4", 411 | "blob": "0.0.5", 412 | "has-binary2": "~1.0.2" 413 | } 414 | }, 415 | "node_modules/engine.io/node_modules/cookie": { 416 | "version": "0.4.1", 417 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", 418 | "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", 419 | "engines": { 420 | "node": ">= 0.6" 421 | } 422 | }, 423 | "node_modules/engine.io/node_modules/debug": { 424 | "version": "4.1.1", 425 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 426 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 427 | "dependencies": { 428 | "ms": "^2.1.1" 429 | } 430 | }, 431 | "node_modules/engine.io/node_modules/ms": { 432 | "version": "2.1.3", 433 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 434 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 435 | }, 436 | "node_modules/escape-html": { 437 | "version": "1.0.3", 438 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 439 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 440 | }, 441 | "node_modules/etag": { 442 | "version": "1.8.1", 443 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 444 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", 445 | "engines": { 446 | "node": ">= 0.6" 447 | } 448 | }, 449 | "node_modules/express": { 450 | "version": "4.16.4", 451 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", 452 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", 453 | "dependencies": { 454 | "accepts": "~1.3.5", 455 | "array-flatten": "1.1.1", 456 | "body-parser": "1.18.3", 457 | "content-disposition": "0.5.2", 458 | "content-type": "~1.0.4", 459 | "cookie": "0.3.1", 460 | "cookie-signature": "1.0.6", 461 | "debug": "2.6.9", 462 | "depd": "~1.1.2", 463 | "encodeurl": "~1.0.2", 464 | "escape-html": "~1.0.3", 465 | "etag": "~1.8.1", 466 | "finalhandler": "1.1.1", 467 | "fresh": "0.5.2", 468 | "merge-descriptors": "1.0.1", 469 | "methods": "~1.1.2", 470 | "on-finished": "~2.3.0", 471 | "parseurl": "~1.3.2", 472 | "path-to-regexp": "0.1.7", 473 | "proxy-addr": "~2.0.4", 474 | "qs": "6.5.2", 475 | "range-parser": "~1.2.0", 476 | "safe-buffer": "5.1.2", 477 | "send": "0.16.2", 478 | "serve-static": "1.13.2", 479 | "setprototypeof": "1.1.0", 480 | "statuses": "~1.4.0", 481 | "type-is": "~1.6.16", 482 | "utils-merge": "1.0.1", 483 | "vary": "~1.1.2" 484 | }, 485 | "engines": { 486 | "node": ">= 0.10.0" 487 | } 488 | }, 489 | "node_modules/express/node_modules/cookie": { 490 | "version": "0.3.1", 491 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 492 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", 493 | "engines": { 494 | "node": ">= 0.6" 495 | } 496 | }, 497 | "node_modules/finalhandler": { 498 | "version": "1.1.1", 499 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 500 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 501 | "dependencies": { 502 | "debug": "2.6.9", 503 | "encodeurl": "~1.0.2", 504 | "escape-html": "~1.0.3", 505 | "on-finished": "~2.3.0", 506 | "parseurl": "~1.3.2", 507 | "statuses": "~1.4.0", 508 | "unpipe": "~1.0.0" 509 | }, 510 | "engines": { 511 | "node": ">= 0.8" 512 | } 513 | }, 514 | "node_modules/find-up": { 515 | "version": "3.0.0", 516 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 517 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 518 | "dependencies": { 519 | "locate-path": "^3.0.0" 520 | }, 521 | "engines": { 522 | "node": ">=6" 523 | } 524 | }, 525 | "node_modules/follow-redirects": { 526 | "version": "1.13.2", 527 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.2.tgz", 528 | "integrity": "sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==", 529 | "engines": { 530 | "node": ">=4.0" 531 | } 532 | }, 533 | "node_modules/forwarded": { 534 | "version": "0.1.2", 535 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 536 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", 537 | "engines": { 538 | "node": ">= 0.6" 539 | } 540 | }, 541 | "node_modules/fresh": { 542 | "version": "0.5.2", 543 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 544 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", 545 | "engines": { 546 | "node": ">= 0.6" 547 | } 548 | }, 549 | "node_modules/get-caller-file": { 550 | "version": "2.0.5", 551 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 552 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 553 | "engines": { 554 | "node": "6.* || 8.* || >= 10.*" 555 | } 556 | }, 557 | "node_modules/good-listener": { 558 | "version": "1.2.2", 559 | "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", 560 | "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", 561 | "dependencies": { 562 | "delegate": "^3.1.2" 563 | } 564 | }, 565 | "node_modules/has-binary2": { 566 | "version": "1.0.3", 567 | "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", 568 | "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", 569 | "dependencies": { 570 | "isarray": "2.0.1" 571 | } 572 | }, 573 | "node_modules/has-binary2/node_modules/isarray": { 574 | "version": "2.0.1", 575 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", 576 | "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" 577 | }, 578 | "node_modules/has-cors": { 579 | "version": "1.1.0", 580 | "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", 581 | "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" 582 | }, 583 | "node_modules/http-errors": { 584 | "version": "1.6.3", 585 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 586 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 587 | "dependencies": { 588 | "depd": "~1.1.2", 589 | "inherits": "2.0.3", 590 | "setprototypeof": "1.1.0", 591 | "statuses": ">= 1.4.0 < 2" 592 | }, 593 | "engines": { 594 | "node": ">= 0.6" 595 | } 596 | }, 597 | "node_modules/iconv-lite": { 598 | "version": "0.4.23", 599 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 600 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 601 | "dependencies": { 602 | "safer-buffer": ">= 2.1.2 < 3" 603 | }, 604 | "engines": { 605 | "node": ">=0.10.0" 606 | } 607 | }, 608 | "node_modules/ieee754": { 609 | "version": "1.1.13", 610 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 611 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" 612 | }, 613 | "node_modules/indexof": { 614 | "version": "0.0.1", 615 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", 616 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" 617 | }, 618 | "node_modules/inherits": { 619 | "version": "2.0.3", 620 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 621 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 622 | }, 623 | "node_modules/ipaddr.js": { 624 | "version": "1.9.1", 625 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 626 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 627 | "engines": { 628 | "node": ">= 0.10" 629 | } 630 | }, 631 | "node_modules/is-fullwidth-code-point": { 632 | "version": "2.0.0", 633 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 634 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 635 | "engines": { 636 | "node": ">=4" 637 | } 638 | }, 639 | "node_modules/isarray": { 640 | "version": "2.0.5", 641 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", 642 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" 643 | }, 644 | "node_modules/js-cookie": { 645 | "version": "2.2.1", 646 | "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", 647 | "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" 648 | }, 649 | "node_modules/json5": { 650 | "version": "2.2.0", 651 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", 652 | "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", 653 | "dependencies": { 654 | "minimist": "^1.2.5" 655 | }, 656 | "bin": { 657 | "json5": "lib/cli.js" 658 | }, 659 | "engines": { 660 | "node": ">=6" 661 | } 662 | }, 663 | "node_modules/locate-path": { 664 | "version": "3.0.0", 665 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 666 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 667 | "dependencies": { 668 | "p-locate": "^3.0.0", 669 | "path-exists": "^3.0.0" 670 | }, 671 | "engines": { 672 | "node": ">=6" 673 | } 674 | }, 675 | "node_modules/media-typer": { 676 | "version": "0.3.0", 677 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 678 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", 679 | "engines": { 680 | "node": ">= 0.6" 681 | } 682 | }, 683 | "node_modules/merge-descriptors": { 684 | "version": "1.0.1", 685 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 686 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 687 | }, 688 | "node_modules/methods": { 689 | "version": "1.1.2", 690 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 691 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", 692 | "engines": { 693 | "node": ">= 0.6" 694 | } 695 | }, 696 | "node_modules/mime": { 697 | "version": "1.4.1", 698 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 699 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", 700 | "bin": { 701 | "mime": "cli.js" 702 | } 703 | }, 704 | "node_modules/mime-db": { 705 | "version": "1.44.0", 706 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 707 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", 708 | "engines": { 709 | "node": ">= 0.6" 710 | } 711 | }, 712 | "node_modules/mime-types": { 713 | "version": "2.1.27", 714 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 715 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 716 | "dependencies": { 717 | "mime-db": "1.44.0" 718 | }, 719 | "engines": { 720 | "node": ">= 0.6" 721 | } 722 | }, 723 | "node_modules/minimist": { 724 | "version": "1.2.5", 725 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 726 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 727 | }, 728 | "node_modules/morgan": { 729 | "version": "1.9.1", 730 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", 731 | "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", 732 | "dependencies": { 733 | "basic-auth": "~2.0.0", 734 | "debug": "2.6.9", 735 | "depd": "~1.1.2", 736 | "on-finished": "~2.3.0", 737 | "on-headers": "~1.0.1" 738 | }, 739 | "engines": { 740 | "node": ">= 0.8.0" 741 | } 742 | }, 743 | "node_modules/ms": { 744 | "version": "2.0.0", 745 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 746 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 747 | }, 748 | "node_modules/negotiator": { 749 | "version": "0.6.2", 750 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 751 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", 752 | "engines": { 753 | "node": ">= 0.6" 754 | } 755 | }, 756 | "node_modules/on-finished": { 757 | "version": "2.3.0", 758 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 759 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 760 | "dependencies": { 761 | "ee-first": "1.1.1" 762 | }, 763 | "engines": { 764 | "node": ">= 0.8" 765 | } 766 | }, 767 | "node_modules/on-headers": { 768 | "version": "1.0.2", 769 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 770 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", 771 | "engines": { 772 | "node": ">= 0.8" 773 | } 774 | }, 775 | "node_modules/p-limit": { 776 | "version": "2.3.0", 777 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 778 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 779 | "dependencies": { 780 | "p-try": "^2.0.0" 781 | }, 782 | "engines": { 783 | "node": ">=6" 784 | } 785 | }, 786 | "node_modules/p-locate": { 787 | "version": "3.0.0", 788 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 789 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 790 | "dependencies": { 791 | "p-limit": "^2.0.0" 792 | }, 793 | "engines": { 794 | "node": ">=6" 795 | } 796 | }, 797 | "node_modules/p-try": { 798 | "version": "2.2.0", 799 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 800 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 801 | "engines": { 802 | "node": ">=6" 803 | } 804 | }, 805 | "node_modules/parseqs": { 806 | "version": "0.0.6", 807 | "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", 808 | "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" 809 | }, 810 | "node_modules/parseuri": { 811 | "version": "0.0.6", 812 | "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", 813 | "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" 814 | }, 815 | "node_modules/parseurl": { 816 | "version": "1.3.3", 817 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 818 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 819 | "engines": { 820 | "node": ">= 0.8" 821 | } 822 | }, 823 | "node_modules/path-exists": { 824 | "version": "3.0.0", 825 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 826 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 827 | "engines": { 828 | "node": ">=4" 829 | } 830 | }, 831 | "node_modules/path-to-regexp": { 832 | "version": "0.1.7", 833 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 834 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 835 | }, 836 | "node_modules/pngjs": { 837 | "version": "3.4.0", 838 | "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", 839 | "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", 840 | "engines": { 841 | "node": ">=4.0.0" 842 | } 843 | }, 844 | "node_modules/proxy-addr": { 845 | "version": "2.0.6", 846 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", 847 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", 848 | "dependencies": { 849 | "forwarded": "~0.1.2", 850 | "ipaddr.js": "1.9.1" 851 | }, 852 | "engines": { 853 | "node": ">= 0.10" 854 | } 855 | }, 856 | "node_modules/qrcode": { 857 | "version": "1.4.4", 858 | "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz", 859 | "integrity": "sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==", 860 | "dependencies": { 861 | "buffer": "^5.4.3", 862 | "buffer-alloc": "^1.2.0", 863 | "buffer-from": "^1.1.1", 864 | "dijkstrajs": "^1.0.1", 865 | "isarray": "^2.0.1", 866 | "pngjs": "^3.3.0", 867 | "yargs": "^13.2.4" 868 | }, 869 | "bin": { 870 | "qrcode": "bin/qrcode" 871 | }, 872 | "engines": { 873 | "node": ">=4" 874 | } 875 | }, 876 | "node_modules/qs": { 877 | "version": "6.5.2", 878 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 879 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 880 | "engines": { 881 | "node": ">=0.6" 882 | } 883 | }, 884 | "node_modules/range-parser": { 885 | "version": "1.2.1", 886 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 887 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 888 | "engines": { 889 | "node": ">= 0.6" 890 | } 891 | }, 892 | "node_modules/raw-body": { 893 | "version": "2.3.3", 894 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", 895 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", 896 | "dependencies": { 897 | "bytes": "3.0.0", 898 | "http-errors": "1.6.3", 899 | "iconv-lite": "0.4.23", 900 | "unpipe": "1.0.0" 901 | }, 902 | "engines": { 903 | "node": ">= 0.8" 904 | } 905 | }, 906 | "node_modules/require-directory": { 907 | "version": "2.1.1", 908 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 909 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 910 | "engines": { 911 | "node": ">=0.10.0" 912 | } 913 | }, 914 | "node_modules/require-main-filename": { 915 | "version": "2.0.0", 916 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 917 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" 918 | }, 919 | "node_modules/reveal.js": { 920 | "version": "4.1.0", 921 | "resolved": "https://registry.npmjs.org/reveal.js/-/reveal.js-4.1.0.tgz", 922 | "integrity": "sha512-lYOMhxSWgq5jtgspF7eRL0d2rBnHO/VGZ4/qp46yu+eGoWqJkYHEuepEXzx71M8MI6Rf8HBYWaTnKi5uHWcU1Q==", 923 | "engines": { 924 | "node": ">=10.0.0" 925 | } 926 | }, 927 | "node_modules/safe-buffer": { 928 | "version": "5.1.2", 929 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 930 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 931 | }, 932 | "node_modules/safer-buffer": { 933 | "version": "2.1.2", 934 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 935 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 936 | }, 937 | "node_modules/select": { 938 | "version": "1.1.2", 939 | "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", 940 | "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" 941 | }, 942 | "node_modules/send": { 943 | "version": "0.16.2", 944 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 945 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 946 | "dependencies": { 947 | "debug": "2.6.9", 948 | "depd": "~1.1.2", 949 | "destroy": "~1.0.4", 950 | "encodeurl": "~1.0.2", 951 | "escape-html": "~1.0.3", 952 | "etag": "~1.8.1", 953 | "fresh": "0.5.2", 954 | "http-errors": "~1.6.2", 955 | "mime": "1.4.1", 956 | "ms": "2.0.0", 957 | "on-finished": "~2.3.0", 958 | "range-parser": "~1.2.0", 959 | "statuses": "~1.4.0" 960 | }, 961 | "engines": { 962 | "node": ">= 0.8.0" 963 | } 964 | }, 965 | "node_modules/serve-static": { 966 | "version": "1.13.2", 967 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 968 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 969 | "dependencies": { 970 | "encodeurl": "~1.0.2", 971 | "escape-html": "~1.0.3", 972 | "parseurl": "~1.3.2", 973 | "send": "0.16.2" 974 | }, 975 | "engines": { 976 | "node": ">= 0.8.0" 977 | } 978 | }, 979 | "node_modules/set-blocking": { 980 | "version": "2.0.0", 981 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 982 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 983 | }, 984 | "node_modules/setprototypeof": { 985 | "version": "1.1.0", 986 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 987 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 988 | }, 989 | "node_modules/socket.io": { 990 | "version": "2.4.0", 991 | "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.0.tgz", 992 | "integrity": "sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ==", 993 | "dependencies": { 994 | "debug": "~4.1.0", 995 | "engine.io": "~3.5.0", 996 | "has-binary2": "~1.0.2", 997 | "socket.io-adapter": "~1.1.0", 998 | "socket.io-client": "2.4.0", 999 | "socket.io-parser": "~3.4.0" 1000 | } 1001 | }, 1002 | "node_modules/socket.io-adapter": { 1003 | "version": "1.1.2", 1004 | "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", 1005 | "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" 1006 | }, 1007 | "node_modules/socket.io-client": { 1008 | "version": "2.4.0", 1009 | "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", 1010 | "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", 1011 | "dependencies": { 1012 | "backo2": "1.0.2", 1013 | "component-bind": "1.0.0", 1014 | "component-emitter": "~1.3.0", 1015 | "debug": "~3.1.0", 1016 | "engine.io-client": "~3.5.0", 1017 | "has-binary2": "~1.0.2", 1018 | "indexof": "0.0.1", 1019 | "parseqs": "0.0.6", 1020 | "parseuri": "0.0.6", 1021 | "socket.io-parser": "~3.3.0", 1022 | "to-array": "0.1.4" 1023 | } 1024 | }, 1025 | "node_modules/socket.io-client/node_modules/debug": { 1026 | "version": "3.1.0", 1027 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 1028 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 1029 | "dependencies": { 1030 | "ms": "2.0.0" 1031 | } 1032 | }, 1033 | "node_modules/socket.io-client/node_modules/isarray": { 1034 | "version": "2.0.1", 1035 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", 1036 | "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" 1037 | }, 1038 | "node_modules/socket.io-client/node_modules/socket.io-parser": { 1039 | "version": "3.3.2", 1040 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", 1041 | "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", 1042 | "dependencies": { 1043 | "component-emitter": "~1.3.0", 1044 | "debug": "~3.1.0", 1045 | "isarray": "2.0.1" 1046 | } 1047 | }, 1048 | "node_modules/socket.io-parser": { 1049 | "version": "3.4.1", 1050 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", 1051 | "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", 1052 | "dependencies": { 1053 | "component-emitter": "1.2.1", 1054 | "debug": "~4.1.0", 1055 | "isarray": "2.0.1" 1056 | } 1057 | }, 1058 | "node_modules/socket.io-parser/node_modules/component-emitter": { 1059 | "version": "1.2.1", 1060 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 1061 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" 1062 | }, 1063 | "node_modules/socket.io-parser/node_modules/debug": { 1064 | "version": "4.1.1", 1065 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 1066 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 1067 | "dependencies": { 1068 | "ms": "^2.1.1" 1069 | } 1070 | }, 1071 | "node_modules/socket.io-parser/node_modules/isarray": { 1072 | "version": "2.0.1", 1073 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", 1074 | "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" 1075 | }, 1076 | "node_modules/socket.io-parser/node_modules/ms": { 1077 | "version": "2.1.3", 1078 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1079 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1080 | }, 1081 | "node_modules/socket.io/node_modules/debug": { 1082 | "version": "4.1.1", 1083 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 1084 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 1085 | "dependencies": { 1086 | "ms": "^2.1.1" 1087 | } 1088 | }, 1089 | "node_modules/socket.io/node_modules/ms": { 1090 | "version": "2.1.3", 1091 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1092 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1093 | }, 1094 | "node_modules/statuses": { 1095 | "version": "1.4.0", 1096 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 1097 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", 1098 | "engines": { 1099 | "node": ">= 0.6" 1100 | } 1101 | }, 1102 | "node_modules/string-width": { 1103 | "version": "3.1.0", 1104 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1105 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1106 | "dependencies": { 1107 | "emoji-regex": "^7.0.1", 1108 | "is-fullwidth-code-point": "^2.0.0", 1109 | "strip-ansi": "^5.1.0" 1110 | }, 1111 | "engines": { 1112 | "node": ">=6" 1113 | } 1114 | }, 1115 | "node_modules/strip-ansi": { 1116 | "version": "5.2.0", 1117 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1118 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1119 | "dependencies": { 1120 | "ansi-regex": "^4.1.0" 1121 | }, 1122 | "engines": { 1123 | "node": ">=6" 1124 | } 1125 | }, 1126 | "node_modules/tiny-emitter": { 1127 | "version": "2.1.0", 1128 | "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", 1129 | "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" 1130 | }, 1131 | "node_modules/to-array": { 1132 | "version": "0.1.4", 1133 | "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", 1134 | "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" 1135 | }, 1136 | "node_modules/type-is": { 1137 | "version": "1.6.18", 1138 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1139 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1140 | "dependencies": { 1141 | "media-typer": "0.3.0", 1142 | "mime-types": "~2.1.24" 1143 | }, 1144 | "engines": { 1145 | "node": ">= 0.6" 1146 | } 1147 | }, 1148 | "node_modules/unpipe": { 1149 | "version": "1.0.0", 1150 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1151 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", 1152 | "engines": { 1153 | "node": ">= 0.8" 1154 | } 1155 | }, 1156 | "node_modules/utils-merge": { 1157 | "version": "1.0.1", 1158 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1159 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", 1160 | "engines": { 1161 | "node": ">= 0.4.0" 1162 | } 1163 | }, 1164 | "node_modules/vary": { 1165 | "version": "1.1.2", 1166 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1167 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", 1168 | "engines": { 1169 | "node": ">= 0.8" 1170 | } 1171 | }, 1172 | "node_modules/which-module": { 1173 | "version": "2.0.0", 1174 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 1175 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" 1176 | }, 1177 | "node_modules/wrap-ansi": { 1178 | "version": "5.1.0", 1179 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", 1180 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", 1181 | "dependencies": { 1182 | "ansi-styles": "^3.2.0", 1183 | "string-width": "^3.0.0", 1184 | "strip-ansi": "^5.0.0" 1185 | }, 1186 | "engines": { 1187 | "node": ">=6" 1188 | } 1189 | }, 1190 | "node_modules/ws": { 1191 | "version": "7.4.3", 1192 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", 1193 | "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==", 1194 | "engines": { 1195 | "node": ">=8.3.0" 1196 | } 1197 | }, 1198 | "node_modules/xmlhttprequest-ssl": { 1199 | "version": "1.5.5", 1200 | "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", 1201 | "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", 1202 | "engines": { 1203 | "node": ">=0.4.0" 1204 | } 1205 | }, 1206 | "node_modules/y18n": { 1207 | "version": "4.0.1", 1208 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", 1209 | "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==" 1210 | }, 1211 | "node_modules/yargs": { 1212 | "version": "13.3.2", 1213 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", 1214 | "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", 1215 | "dependencies": { 1216 | "cliui": "^5.0.0", 1217 | "find-up": "^3.0.0", 1218 | "get-caller-file": "^2.0.1", 1219 | "require-directory": "^2.1.1", 1220 | "require-main-filename": "^2.0.0", 1221 | "set-blocking": "^2.0.0", 1222 | "string-width": "^3.0.0", 1223 | "which-module": "^2.0.0", 1224 | "y18n": "^4.0.0", 1225 | "yargs-parser": "^13.1.2" 1226 | } 1227 | }, 1228 | "node_modules/yargs-parser": { 1229 | "version": "13.1.2", 1230 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", 1231 | "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", 1232 | "dependencies": { 1233 | "camelcase": "^5.0.0", 1234 | "decamelize": "^1.2.0" 1235 | } 1236 | }, 1237 | "node_modules/yeast": { 1238 | "version": "0.1.2", 1239 | "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", 1240 | "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" 1241 | } 1242 | }, 1243 | "dependencies": { 1244 | "@simba.fs/pool": { 1245 | "version": "1.0.2", 1246 | "resolved": "https://registry.npmjs.org/@simba.fs/pool/-/pool-1.0.2.tgz", 1247 | "integrity": "sha512-QytuAydPv+I/fwtNDKn177zxCMNDobjkLehqa4CdKy7/2oq9NQcVu0giudLea3Pa9VkAsI/OrNEp1gE3miKEag==" 1248 | }, 1249 | "accepts": { 1250 | "version": "1.3.7", 1251 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 1252 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 1253 | "requires": { 1254 | "mime-types": "~2.1.24", 1255 | "negotiator": "0.6.2" 1256 | } 1257 | }, 1258 | "after": { 1259 | "version": "0.8.2", 1260 | "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", 1261 | "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" 1262 | }, 1263 | "ansi-regex": { 1264 | "version": "4.1.0", 1265 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 1266 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" 1267 | }, 1268 | "ansi-styles": { 1269 | "version": "3.2.1", 1270 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1271 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1272 | "requires": { 1273 | "color-convert": "^1.9.0" 1274 | } 1275 | }, 1276 | "array-flatten": { 1277 | "version": "1.1.1", 1278 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 1279 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 1280 | }, 1281 | "arraybuffer.slice": { 1282 | "version": "0.0.7", 1283 | "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", 1284 | "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" 1285 | }, 1286 | "axios": { 1287 | "version": "0.21.1", 1288 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", 1289 | "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", 1290 | "requires": { 1291 | "follow-redirects": "^1.10.0" 1292 | } 1293 | }, 1294 | "backo2": { 1295 | "version": "1.0.2", 1296 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 1297 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" 1298 | }, 1299 | "base64-arraybuffer": { 1300 | "version": "0.1.4", 1301 | "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", 1302 | "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" 1303 | }, 1304 | "base64-js": { 1305 | "version": "1.3.1", 1306 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 1307 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" 1308 | }, 1309 | "base64id": { 1310 | "version": "2.0.0", 1311 | "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", 1312 | "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" 1313 | }, 1314 | "basic-auth": { 1315 | "version": "2.0.1", 1316 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", 1317 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", 1318 | "requires": { 1319 | "safe-buffer": "5.1.2" 1320 | } 1321 | }, 1322 | "blob": { 1323 | "version": "0.0.5", 1324 | "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", 1325 | "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" 1326 | }, 1327 | "body-parser": { 1328 | "version": "1.18.3", 1329 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 1330 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 1331 | "requires": { 1332 | "bytes": "3.0.0", 1333 | "content-type": "~1.0.4", 1334 | "debug": "2.6.9", 1335 | "depd": "~1.1.2", 1336 | "http-errors": "~1.6.3", 1337 | "iconv-lite": "0.4.23", 1338 | "on-finished": "~2.3.0", 1339 | "qs": "6.5.2", 1340 | "raw-body": "2.3.3", 1341 | "type-is": "~1.6.16" 1342 | } 1343 | }, 1344 | "buffer": { 1345 | "version": "5.6.0", 1346 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", 1347 | "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", 1348 | "requires": { 1349 | "base64-js": "^1.0.2", 1350 | "ieee754": "^1.1.4" 1351 | } 1352 | }, 1353 | "buffer-alloc": { 1354 | "version": "1.2.0", 1355 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", 1356 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", 1357 | "requires": { 1358 | "buffer-alloc-unsafe": "^1.1.0", 1359 | "buffer-fill": "^1.0.0" 1360 | } 1361 | }, 1362 | "buffer-alloc-unsafe": { 1363 | "version": "1.1.0", 1364 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", 1365 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" 1366 | }, 1367 | "buffer-fill": { 1368 | "version": "1.0.0", 1369 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", 1370 | "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" 1371 | }, 1372 | "buffer-from": { 1373 | "version": "1.1.1", 1374 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 1375 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" 1376 | }, 1377 | "bytes": { 1378 | "version": "3.0.0", 1379 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 1380 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 1381 | }, 1382 | "camelcase": { 1383 | "version": "5.3.1", 1384 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 1385 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" 1386 | }, 1387 | "clipboard": { 1388 | "version": "2.0.6", 1389 | "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", 1390 | "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", 1391 | "requires": { 1392 | "good-listener": "^1.2.2", 1393 | "select": "^1.1.2", 1394 | "tiny-emitter": "^2.0.0" 1395 | } 1396 | }, 1397 | "cliui": { 1398 | "version": "5.0.0", 1399 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", 1400 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", 1401 | "requires": { 1402 | "string-width": "^3.1.0", 1403 | "strip-ansi": "^5.2.0", 1404 | "wrap-ansi": "^5.1.0" 1405 | } 1406 | }, 1407 | "color-convert": { 1408 | "version": "1.9.3", 1409 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1410 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1411 | "requires": { 1412 | "color-name": "1.1.3" 1413 | } 1414 | }, 1415 | "color-name": { 1416 | "version": "1.1.3", 1417 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1418 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 1419 | }, 1420 | "component-bind": { 1421 | "version": "1.0.0", 1422 | "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", 1423 | "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" 1424 | }, 1425 | "component-emitter": { 1426 | "version": "1.3.0", 1427 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", 1428 | "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" 1429 | }, 1430 | "component-inherit": { 1431 | "version": "0.0.3", 1432 | "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", 1433 | "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" 1434 | }, 1435 | "config": { 1436 | "version": "3.3.6", 1437 | "resolved": "https://registry.npmjs.org/config/-/config-3.3.6.tgz", 1438 | "integrity": "sha512-Hj5916C5HFawjYJat1epbyY2PlAgLpBtDUlr0MxGLgo3p5+7kylyvnRY18PqJHgnNWXcdd0eWDemT7eYWuFgwg==", 1439 | "requires": { 1440 | "json5": "^2.1.1" 1441 | } 1442 | }, 1443 | "content-disposition": { 1444 | "version": "0.5.2", 1445 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 1446 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 1447 | }, 1448 | "content-type": { 1449 | "version": "1.0.4", 1450 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 1451 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 1452 | }, 1453 | "cookie": { 1454 | "version": "0.4.0", 1455 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 1456 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 1457 | }, 1458 | "cookie-parser": { 1459 | "version": "1.4.5", 1460 | "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz", 1461 | "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==", 1462 | "requires": { 1463 | "cookie": "0.4.0", 1464 | "cookie-signature": "1.0.6" 1465 | } 1466 | }, 1467 | "cookie-signature": { 1468 | "version": "1.0.6", 1469 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 1470 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 1471 | }, 1472 | "debug": { 1473 | "version": "2.6.9", 1474 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1475 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1476 | "requires": { 1477 | "ms": "2.0.0" 1478 | } 1479 | }, 1480 | "decamelize": { 1481 | "version": "1.2.0", 1482 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 1483 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 1484 | }, 1485 | "delegate": { 1486 | "version": "3.2.0", 1487 | "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", 1488 | "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" 1489 | }, 1490 | "depd": { 1491 | "version": "1.1.2", 1492 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 1493 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 1494 | }, 1495 | "destroy": { 1496 | "version": "1.0.4", 1497 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 1498 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 1499 | }, 1500 | "dijkstrajs": { 1501 | "version": "1.0.1", 1502 | "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz", 1503 | "integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs=" 1504 | }, 1505 | "ee-first": { 1506 | "version": "1.1.1", 1507 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 1508 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 1509 | }, 1510 | "ejs": { 1511 | "version": "2.6.2", 1512 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.2.tgz", 1513 | "integrity": "sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==" 1514 | }, 1515 | "emoji-regex": { 1516 | "version": "7.0.3", 1517 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 1518 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" 1519 | }, 1520 | "encodeurl": { 1521 | "version": "1.0.2", 1522 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 1523 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 1524 | }, 1525 | "engine.io": { 1526 | "version": "3.5.0", 1527 | "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", 1528 | "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", 1529 | "requires": { 1530 | "accepts": "~1.3.4", 1531 | "base64id": "2.0.0", 1532 | "cookie": "~0.4.1", 1533 | "debug": "~4.1.0", 1534 | "engine.io-parser": "~2.2.0", 1535 | "ws": "~7.4.2" 1536 | }, 1537 | "dependencies": { 1538 | "cookie": { 1539 | "version": "0.4.1", 1540 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", 1541 | "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" 1542 | }, 1543 | "debug": { 1544 | "version": "4.1.1", 1545 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 1546 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 1547 | "requires": { 1548 | "ms": "^2.1.1" 1549 | } 1550 | }, 1551 | "ms": { 1552 | "version": "2.1.3", 1553 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1554 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1555 | } 1556 | } 1557 | }, 1558 | "engine.io-client": { 1559 | "version": "3.5.0", 1560 | "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.0.tgz", 1561 | "integrity": "sha512-12wPRfMrugVw/DNyJk34GQ5vIVArEcVMXWugQGGuw2XxUSztFNmJggZmv8IZlLyEdnpO1QB9LkcjeWewO2vxtA==", 1562 | "requires": { 1563 | "component-emitter": "~1.3.0", 1564 | "component-inherit": "0.0.3", 1565 | "debug": "~3.1.0", 1566 | "engine.io-parser": "~2.2.0", 1567 | "has-cors": "1.1.0", 1568 | "indexof": "0.0.1", 1569 | "parseqs": "0.0.6", 1570 | "parseuri": "0.0.6", 1571 | "ws": "~7.4.2", 1572 | "xmlhttprequest-ssl": "~1.5.4", 1573 | "yeast": "0.1.2" 1574 | }, 1575 | "dependencies": { 1576 | "debug": { 1577 | "version": "3.1.0", 1578 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 1579 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 1580 | "requires": { 1581 | "ms": "2.0.0" 1582 | } 1583 | } 1584 | } 1585 | }, 1586 | "engine.io-parser": { 1587 | "version": "2.2.1", 1588 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", 1589 | "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", 1590 | "requires": { 1591 | "after": "0.8.2", 1592 | "arraybuffer.slice": "~0.0.7", 1593 | "base64-arraybuffer": "0.1.4", 1594 | "blob": "0.0.5", 1595 | "has-binary2": "~1.0.2" 1596 | } 1597 | }, 1598 | "escape-html": { 1599 | "version": "1.0.3", 1600 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 1601 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 1602 | }, 1603 | "etag": { 1604 | "version": "1.8.1", 1605 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 1606 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 1607 | }, 1608 | "express": { 1609 | "version": "4.16.4", 1610 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", 1611 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", 1612 | "requires": { 1613 | "accepts": "~1.3.5", 1614 | "array-flatten": "1.1.1", 1615 | "body-parser": "1.18.3", 1616 | "content-disposition": "0.5.2", 1617 | "content-type": "~1.0.4", 1618 | "cookie": "0.3.1", 1619 | "cookie-signature": "1.0.6", 1620 | "debug": "2.6.9", 1621 | "depd": "~1.1.2", 1622 | "encodeurl": "~1.0.2", 1623 | "escape-html": "~1.0.3", 1624 | "etag": "~1.8.1", 1625 | "finalhandler": "1.1.1", 1626 | "fresh": "0.5.2", 1627 | "merge-descriptors": "1.0.1", 1628 | "methods": "~1.1.2", 1629 | "on-finished": "~2.3.0", 1630 | "parseurl": "~1.3.2", 1631 | "path-to-regexp": "0.1.7", 1632 | "proxy-addr": "~2.0.4", 1633 | "qs": "6.5.2", 1634 | "range-parser": "~1.2.0", 1635 | "safe-buffer": "5.1.2", 1636 | "send": "0.16.2", 1637 | "serve-static": "1.13.2", 1638 | "setprototypeof": "1.1.0", 1639 | "statuses": "~1.4.0", 1640 | "type-is": "~1.6.16", 1641 | "utils-merge": "1.0.1", 1642 | "vary": "~1.1.2" 1643 | }, 1644 | "dependencies": { 1645 | "cookie": { 1646 | "version": "0.3.1", 1647 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 1648 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 1649 | } 1650 | } 1651 | }, 1652 | "finalhandler": { 1653 | "version": "1.1.1", 1654 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 1655 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 1656 | "requires": { 1657 | "debug": "2.6.9", 1658 | "encodeurl": "~1.0.2", 1659 | "escape-html": "~1.0.3", 1660 | "on-finished": "~2.3.0", 1661 | "parseurl": "~1.3.2", 1662 | "statuses": "~1.4.0", 1663 | "unpipe": "~1.0.0" 1664 | } 1665 | }, 1666 | "find-up": { 1667 | "version": "3.0.0", 1668 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 1669 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 1670 | "requires": { 1671 | "locate-path": "^3.0.0" 1672 | } 1673 | }, 1674 | "follow-redirects": { 1675 | "version": "1.13.2", 1676 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.2.tgz", 1677 | "integrity": "sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==" 1678 | }, 1679 | "forwarded": { 1680 | "version": "0.1.2", 1681 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 1682 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 1683 | }, 1684 | "fresh": { 1685 | "version": "0.5.2", 1686 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 1687 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 1688 | }, 1689 | "get-caller-file": { 1690 | "version": "2.0.5", 1691 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1692 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 1693 | }, 1694 | "good-listener": { 1695 | "version": "1.2.2", 1696 | "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", 1697 | "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", 1698 | "requires": { 1699 | "delegate": "^3.1.2" 1700 | } 1701 | }, 1702 | "has-binary2": { 1703 | "version": "1.0.3", 1704 | "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", 1705 | "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", 1706 | "requires": { 1707 | "isarray": "2.0.1" 1708 | }, 1709 | "dependencies": { 1710 | "isarray": { 1711 | "version": "2.0.1", 1712 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", 1713 | "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" 1714 | } 1715 | } 1716 | }, 1717 | "has-cors": { 1718 | "version": "1.1.0", 1719 | "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", 1720 | "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" 1721 | }, 1722 | "http-errors": { 1723 | "version": "1.6.3", 1724 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 1725 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 1726 | "requires": { 1727 | "depd": "~1.1.2", 1728 | "inherits": "2.0.3", 1729 | "setprototypeof": "1.1.0", 1730 | "statuses": ">= 1.4.0 < 2" 1731 | } 1732 | }, 1733 | "iconv-lite": { 1734 | "version": "0.4.23", 1735 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 1736 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 1737 | "requires": { 1738 | "safer-buffer": ">= 2.1.2 < 3" 1739 | } 1740 | }, 1741 | "ieee754": { 1742 | "version": "1.1.13", 1743 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 1744 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" 1745 | }, 1746 | "indexof": { 1747 | "version": "0.0.1", 1748 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", 1749 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" 1750 | }, 1751 | "inherits": { 1752 | "version": "2.0.3", 1753 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1754 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1755 | }, 1756 | "ipaddr.js": { 1757 | "version": "1.9.1", 1758 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 1759 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 1760 | }, 1761 | "is-fullwidth-code-point": { 1762 | "version": "2.0.0", 1763 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1764 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 1765 | }, 1766 | "isarray": { 1767 | "version": "2.0.5", 1768 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", 1769 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" 1770 | }, 1771 | "js-cookie": { 1772 | "version": "2.2.1", 1773 | "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", 1774 | "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" 1775 | }, 1776 | "json5": { 1777 | "version": "2.2.0", 1778 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", 1779 | "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", 1780 | "requires": { 1781 | "minimist": "^1.2.5" 1782 | } 1783 | }, 1784 | "locate-path": { 1785 | "version": "3.0.0", 1786 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 1787 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 1788 | "requires": { 1789 | "p-locate": "^3.0.0", 1790 | "path-exists": "^3.0.0" 1791 | } 1792 | }, 1793 | "media-typer": { 1794 | "version": "0.3.0", 1795 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1796 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 1797 | }, 1798 | "merge-descriptors": { 1799 | "version": "1.0.1", 1800 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1801 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 1802 | }, 1803 | "methods": { 1804 | "version": "1.1.2", 1805 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1806 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 1807 | }, 1808 | "mime": { 1809 | "version": "1.4.1", 1810 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 1811 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 1812 | }, 1813 | "mime-db": { 1814 | "version": "1.44.0", 1815 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 1816 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" 1817 | }, 1818 | "mime-types": { 1819 | "version": "2.1.27", 1820 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 1821 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 1822 | "requires": { 1823 | "mime-db": "1.44.0" 1824 | } 1825 | }, 1826 | "minimist": { 1827 | "version": "1.2.5", 1828 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1829 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 1830 | }, 1831 | "morgan": { 1832 | "version": "1.9.1", 1833 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", 1834 | "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", 1835 | "requires": { 1836 | "basic-auth": "~2.0.0", 1837 | "debug": "2.6.9", 1838 | "depd": "~1.1.2", 1839 | "on-finished": "~2.3.0", 1840 | "on-headers": "~1.0.1" 1841 | } 1842 | }, 1843 | "ms": { 1844 | "version": "2.0.0", 1845 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1846 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1847 | }, 1848 | "negotiator": { 1849 | "version": "0.6.2", 1850 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 1851 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 1852 | }, 1853 | "on-finished": { 1854 | "version": "2.3.0", 1855 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1856 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 1857 | "requires": { 1858 | "ee-first": "1.1.1" 1859 | } 1860 | }, 1861 | "on-headers": { 1862 | "version": "1.0.2", 1863 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 1864 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" 1865 | }, 1866 | "p-limit": { 1867 | "version": "2.3.0", 1868 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1869 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1870 | "requires": { 1871 | "p-try": "^2.0.0" 1872 | } 1873 | }, 1874 | "p-locate": { 1875 | "version": "3.0.0", 1876 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 1877 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 1878 | "requires": { 1879 | "p-limit": "^2.0.0" 1880 | } 1881 | }, 1882 | "p-try": { 1883 | "version": "2.2.0", 1884 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1885 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 1886 | }, 1887 | "parseqs": { 1888 | "version": "0.0.6", 1889 | "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", 1890 | "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" 1891 | }, 1892 | "parseuri": { 1893 | "version": "0.0.6", 1894 | "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", 1895 | "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" 1896 | }, 1897 | "parseurl": { 1898 | "version": "1.3.3", 1899 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1900 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 1901 | }, 1902 | "path-exists": { 1903 | "version": "3.0.0", 1904 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1905 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" 1906 | }, 1907 | "path-to-regexp": { 1908 | "version": "0.1.7", 1909 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1910 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 1911 | }, 1912 | "pngjs": { 1913 | "version": "3.4.0", 1914 | "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", 1915 | "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" 1916 | }, 1917 | "proxy-addr": { 1918 | "version": "2.0.6", 1919 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", 1920 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", 1921 | "requires": { 1922 | "forwarded": "~0.1.2", 1923 | "ipaddr.js": "1.9.1" 1924 | } 1925 | }, 1926 | "qrcode": { 1927 | "version": "1.4.4", 1928 | "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz", 1929 | "integrity": "sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==", 1930 | "requires": { 1931 | "buffer": "^5.4.3", 1932 | "buffer-alloc": "^1.2.0", 1933 | "buffer-from": "^1.1.1", 1934 | "dijkstrajs": "^1.0.1", 1935 | "isarray": "^2.0.1", 1936 | "pngjs": "^3.3.0", 1937 | "yargs": "^13.2.4" 1938 | } 1939 | }, 1940 | "qs": { 1941 | "version": "6.5.2", 1942 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 1943 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 1944 | }, 1945 | "range-parser": { 1946 | "version": "1.2.1", 1947 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1948 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 1949 | }, 1950 | "raw-body": { 1951 | "version": "2.3.3", 1952 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", 1953 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", 1954 | "requires": { 1955 | "bytes": "3.0.0", 1956 | "http-errors": "1.6.3", 1957 | "iconv-lite": "0.4.23", 1958 | "unpipe": "1.0.0" 1959 | } 1960 | }, 1961 | "require-directory": { 1962 | "version": "2.1.1", 1963 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1964 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" 1965 | }, 1966 | "require-main-filename": { 1967 | "version": "2.0.0", 1968 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 1969 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" 1970 | }, 1971 | "reveal.js": { 1972 | "version": "4.1.0", 1973 | "resolved": "https://registry.npmjs.org/reveal.js/-/reveal.js-4.1.0.tgz", 1974 | "integrity": "sha512-lYOMhxSWgq5jtgspF7eRL0d2rBnHO/VGZ4/qp46yu+eGoWqJkYHEuepEXzx71M8MI6Rf8HBYWaTnKi5uHWcU1Q==" 1975 | }, 1976 | "safe-buffer": { 1977 | "version": "5.1.2", 1978 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1979 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1980 | }, 1981 | "safer-buffer": { 1982 | "version": "2.1.2", 1983 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1984 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1985 | }, 1986 | "select": { 1987 | "version": "1.1.2", 1988 | "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", 1989 | "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" 1990 | }, 1991 | "send": { 1992 | "version": "0.16.2", 1993 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 1994 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 1995 | "requires": { 1996 | "debug": "2.6.9", 1997 | "depd": "~1.1.2", 1998 | "destroy": "~1.0.4", 1999 | "encodeurl": "~1.0.2", 2000 | "escape-html": "~1.0.3", 2001 | "etag": "~1.8.1", 2002 | "fresh": "0.5.2", 2003 | "http-errors": "~1.6.2", 2004 | "mime": "1.4.1", 2005 | "ms": "2.0.0", 2006 | "on-finished": "~2.3.0", 2007 | "range-parser": "~1.2.0", 2008 | "statuses": "~1.4.0" 2009 | } 2010 | }, 2011 | "serve-static": { 2012 | "version": "1.13.2", 2013 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 2014 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 2015 | "requires": { 2016 | "encodeurl": "~1.0.2", 2017 | "escape-html": "~1.0.3", 2018 | "parseurl": "~1.3.2", 2019 | "send": "0.16.2" 2020 | } 2021 | }, 2022 | "set-blocking": { 2023 | "version": "2.0.0", 2024 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2025 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 2026 | }, 2027 | "setprototypeof": { 2028 | "version": "1.1.0", 2029 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 2030 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 2031 | }, 2032 | "socket.io": { 2033 | "version": "2.4.0", 2034 | "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.0.tgz", 2035 | "integrity": "sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ==", 2036 | "requires": { 2037 | "debug": "~4.1.0", 2038 | "engine.io": "~3.5.0", 2039 | "has-binary2": "~1.0.2", 2040 | "socket.io-adapter": "~1.1.0", 2041 | "socket.io-client": "2.4.0", 2042 | "socket.io-parser": "~3.4.0" 2043 | }, 2044 | "dependencies": { 2045 | "debug": { 2046 | "version": "4.1.1", 2047 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 2048 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 2049 | "requires": { 2050 | "ms": "^2.1.1" 2051 | } 2052 | }, 2053 | "ms": { 2054 | "version": "2.1.3", 2055 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2056 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 2057 | } 2058 | } 2059 | }, 2060 | "socket.io-adapter": { 2061 | "version": "1.1.2", 2062 | "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", 2063 | "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" 2064 | }, 2065 | "socket.io-client": { 2066 | "version": "2.4.0", 2067 | "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", 2068 | "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", 2069 | "requires": { 2070 | "backo2": "1.0.2", 2071 | "component-bind": "1.0.0", 2072 | "component-emitter": "~1.3.0", 2073 | "debug": "~3.1.0", 2074 | "engine.io-client": "~3.5.0", 2075 | "has-binary2": "~1.0.2", 2076 | "indexof": "0.0.1", 2077 | "parseqs": "0.0.6", 2078 | "parseuri": "0.0.6", 2079 | "socket.io-parser": "~3.3.0", 2080 | "to-array": "0.1.4" 2081 | }, 2082 | "dependencies": { 2083 | "debug": { 2084 | "version": "3.1.0", 2085 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 2086 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 2087 | "requires": { 2088 | "ms": "2.0.0" 2089 | } 2090 | }, 2091 | "isarray": { 2092 | "version": "2.0.1", 2093 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", 2094 | "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" 2095 | }, 2096 | "socket.io-parser": { 2097 | "version": "3.3.2", 2098 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", 2099 | "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", 2100 | "requires": { 2101 | "component-emitter": "~1.3.0", 2102 | "debug": "~3.1.0", 2103 | "isarray": "2.0.1" 2104 | } 2105 | } 2106 | } 2107 | }, 2108 | "socket.io-parser": { 2109 | "version": "3.4.1", 2110 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", 2111 | "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", 2112 | "requires": { 2113 | "component-emitter": "1.2.1", 2114 | "debug": "~4.1.0", 2115 | "isarray": "2.0.1" 2116 | }, 2117 | "dependencies": { 2118 | "component-emitter": { 2119 | "version": "1.2.1", 2120 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 2121 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" 2122 | }, 2123 | "debug": { 2124 | "version": "4.1.1", 2125 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 2126 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 2127 | "requires": { 2128 | "ms": "^2.1.1" 2129 | } 2130 | }, 2131 | "isarray": { 2132 | "version": "2.0.1", 2133 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", 2134 | "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" 2135 | }, 2136 | "ms": { 2137 | "version": "2.1.3", 2138 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2139 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 2140 | } 2141 | } 2142 | }, 2143 | "statuses": { 2144 | "version": "1.4.0", 2145 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 2146 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 2147 | }, 2148 | "string-width": { 2149 | "version": "3.1.0", 2150 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 2151 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 2152 | "requires": { 2153 | "emoji-regex": "^7.0.1", 2154 | "is-fullwidth-code-point": "^2.0.0", 2155 | "strip-ansi": "^5.1.0" 2156 | } 2157 | }, 2158 | "strip-ansi": { 2159 | "version": "5.2.0", 2160 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 2161 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 2162 | "requires": { 2163 | "ansi-regex": "^4.1.0" 2164 | } 2165 | }, 2166 | "tiny-emitter": { 2167 | "version": "2.1.0", 2168 | "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", 2169 | "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" 2170 | }, 2171 | "to-array": { 2172 | "version": "0.1.4", 2173 | "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", 2174 | "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" 2175 | }, 2176 | "type-is": { 2177 | "version": "1.6.18", 2178 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 2179 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 2180 | "requires": { 2181 | "media-typer": "0.3.0", 2182 | "mime-types": "~2.1.24" 2183 | } 2184 | }, 2185 | "unpipe": { 2186 | "version": "1.0.0", 2187 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2188 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 2189 | }, 2190 | "utils-merge": { 2191 | "version": "1.0.1", 2192 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2193 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 2194 | }, 2195 | "vary": { 2196 | "version": "1.1.2", 2197 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2198 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 2199 | }, 2200 | "which-module": { 2201 | "version": "2.0.0", 2202 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 2203 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" 2204 | }, 2205 | "wrap-ansi": { 2206 | "version": "5.1.0", 2207 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", 2208 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", 2209 | "requires": { 2210 | "ansi-styles": "^3.2.0", 2211 | "string-width": "^3.0.0", 2212 | "strip-ansi": "^5.0.0" 2213 | } 2214 | }, 2215 | "ws": { 2216 | "version": "7.4.3", 2217 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", 2218 | "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==" 2219 | }, 2220 | "xmlhttprequest-ssl": { 2221 | "version": "1.5.5", 2222 | "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", 2223 | "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" 2224 | }, 2225 | "y18n": { 2226 | "version": "4.0.1", 2227 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", 2228 | "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==" 2229 | }, 2230 | "yargs": { 2231 | "version": "13.3.2", 2232 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", 2233 | "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", 2234 | "requires": { 2235 | "cliui": "^5.0.0", 2236 | "find-up": "^3.0.0", 2237 | "get-caller-file": "^2.0.1", 2238 | "require-directory": "^2.1.1", 2239 | "require-main-filename": "^2.0.0", 2240 | "set-blocking": "^2.0.0", 2241 | "string-width": "^3.0.0", 2242 | "which-module": "^2.0.0", 2243 | "y18n": "^4.0.0", 2244 | "yargs-parser": "^13.1.2" 2245 | } 2246 | }, 2247 | "yargs-parser": { 2248 | "version": "13.1.2", 2249 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", 2250 | "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", 2251 | "requires": { 2252 | "camelcase": "^5.0.0", 2253 | "decamelize": "^1.2.0" 2254 | } 2255 | }, 2256 | "yeast": { 2257 | "version": "0.1.2", 2258 | "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", 2259 | "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" 2260 | } 2261 | } 2262 | } 2263 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "slides", 3 | "version": "1.1.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node ./bin/www" 7 | }, 8 | "dependencies": { 9 | "@simba.fs/pool": "^1.0.2", 10 | "axios": "^0.21.1", 11 | "clipboard": "^2.0.6", 12 | "config": "^3.3.6", 13 | "cookie-parser": "~1.4.4", 14 | "debug": "~2.6.9", 15 | "ejs": "~2.6.1", 16 | "express": "~4.16.1", 17 | "http-errors": "~1.6.3", 18 | "js-cookie": "^2.2.1", 19 | "morgan": "~1.9.1", 20 | "qrcode": "^1.4.4", 21 | "reveal.js": "^4.1.0", 22 | "socket.io": "^2.4.0" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /public/css/lazy4-colours.css: -------------------------------------------------------------------------------- 1 | .clr\:red.btn,.clr\:red.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#d0104c}.clr\:red.btn:hover,.clr\:red.btn.is\:hover,.clr\:red.btn-grp>.btn:hover,.clr\:red.btn-grp>.btn.is\:hover{background-color:#b20e41}.clr\:red.btn:active,.clr\:red.btn.is\:on,.clr\:red.btn-grp>.btn:active,.clr\:red.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#a30d3b}.clr\:red.btn>.badge,.clr\:red.btn-grp>.btn>.badge{color:#d0104c;background-color:rgba(255,255,255,.7)}.clr\:red.btn-outline,.clr\:red.btn-grp>.btn-outline{color:#d0104c;border-color:#d0104c}.clr\:red.btn-outline:hover,.clr\:red.btn-outline:active,.clr\:red.btn-outline.is\:on,.clr\:red.btn-grp>.btn-outline:hover,.clr\:red.btn-grp>.btn-outline:active,.clr\:red.btn-grp>.btn-outline.is\:on{background-color:rgba(208,16,76,.05)}.clr\:red.btn-outline>.badge,.clr\:red.btn-grp>.btn-outline>.badge{color:#d0104c;border-color:#d0104c}.clr\:red.tag{color:rgba(132,10,48,.87);border-color:rgba(149,11,54,.24);background-color:rgba(245,233,237,.56)}.clr\:red.tag .tag_append{color:rgba(255,255,255,.87);background-color:#d0104c}.clr\:red.ribbon{border-right-color:#d0104c;border-left-color:#ed195b}.clr\:red.timeline_item .timeline_axis:before{background-color:#d0104c}.clr\:red.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #d0104c,inset 0 0 0 3px #fff}.clr\:red.avatar:after{border-color:#d0104c}.clr\:red.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#d0104c}.clr\:red.label{color:#fff;background-color:#d0104c}.clr\:red.progress_bar{color:rgba(255,255,255,.87);background-color:#d0104c}.u-clr\:red{color:#d0104c}.u-bgc\:red{color:rgba(255,255,255,.87);background-color:#d0104c}.clr\:orange.btn,.clr\:orange.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#f75c2f}.clr\:orange.btn:hover,.clr\:orange.btn.is\:hover,.clr\:orange.btn-grp>.btn:hover,.clr\:orange.btn-grp>.btn.is\:hover{background-color:#f64310}.clr\:orange.btn:active,.clr\:orange.btn.is\:on,.clr\:orange.btn-grp>.btn:active,.clr\:orange.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#ec3c09}.clr\:orange.btn>.badge,.clr\:orange.btn-grp>.btn>.badge{color:#f75c2f;background-color:rgba(255,255,255,.7)}.clr\:orange.btn-outline,.clr\:orange.btn-grp>.btn-outline{color:#f75c2f;border-color:#f75c2f}.clr\:orange.btn-outline:hover,.clr\:orange.btn-outline:active,.clr\:orange.btn-outline.is\:on,.clr\:orange.btn-grp>.btn-outline:hover,.clr\:orange.btn-grp>.btn-outline:active,.clr\:orange.btn-grp>.btn-outline.is\:on{background-color:rgba(247,92,47,.05)}.clr\:orange.btn-outline>.badge,.clr\:orange.btn-grp>.btn-outline>.badge{color:#f75c2f;border-color:#f75c2f}.clr\:orange.tag{color:rgba(205,52,8,.87);border-color:rgba(222,56,9,.24);background-color:rgba(247,238,235,.56)}.clr\:orange.tag .tag_append{color:rgba(255,255,255,.87);background-color:#f75c2f}.clr\:orange.ribbon{border-right-color:#f75c2f;border-left-color:#f87954}.clr\:orange.timeline_item .timeline_axis:before{background-color:#f75c2f}.clr\:orange.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #f75c2f,inset 0 0 0 3px #fff}.clr\:orange.avatar:after{border-color:#f75c2f}.clr\:orange.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#f75c2f}.clr\:orange.label{color:#fff;background-color:#f75c2f}.clr\:orange.progress_bar{color:rgba(255,255,255,.87);background-color:#f75c2f}.u-clr\:orange{color:#f75c2f}.u-bgc\:orange{color:rgba(255,255,255,.87);background-color:#f75c2f}.clr\:fire.btn,.clr\:fire.btn-grp>.btn{color:rgba(92,69,24,.87);background-color:#ffb11b}.clr\:fire.btn:hover,.clr\:fire.btn.is\:hover,.clr\:fire.btn-grp>.btn:hover,.clr\:fire.btn-grp>.btn.is\:hover{background-color:#f9a400}.clr\:fire.btn:active,.clr\:fire.btn.is\:on,.clr\:fire.btn-grp>.btn:active,.clr\:fire.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#e99900}.clr\:fire.btn>.badge,.clr\:fire.btn-grp>.btn>.badge{color:rgba(92,69,24,.87);background-color:rgba(255,255,255,.7)}.clr\:fire.btn-outline,.clr\:fire.btn-grp>.btn-outline{color:#ffb11b;border-color:#ffb11b}.clr\:fire.btn-outline:hover,.clr\:fire.btn-outline:active,.clr\:fire.btn-outline.is\:on,.clr\:fire.btn-grp>.btn-outline:hover,.clr\:fire.btn-grp>.btn-outline:active,.clr\:fire.btn-grp>.btn-outline.is\:on{background-color:rgba(255,177,27,.05)}.clr\:fire.btn-outline>.badge,.clr\:fire.btn-grp>.btn-outline>.badge{color:#ffb11b;border-color:#ffb11b}.clr\:fire.tag{color:rgba(144,105,30,.87);border-color:rgba(218,144,0,.24);background-color:rgba(247,243,234,.56)}.clr\:fire.tag .tag_append{color:rgba(92,69,24,.87);background-color:#ffb11b}.clr\:fire.ribbon{border-right-color:#ffb11b;border-left-color:#ffbe41}.clr\:fire.timeline_item .timeline_axis:before{background-color:#ffb11b}.clr\:fire.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #ffb11b,inset 0 0 0 3px #fff}.clr\:fire.avatar:after{border-color:#ffb11b}.clr\:fire.avatar .avatar_obj{color:rgba(92,69,24,.87);background-color:#ffb11b}.clr\:fire.label{color:rgba(92,69,24,.87);background-color:#ffb11b}.clr\:fire.progress_bar{color:rgba(255,255,255,.87);background-color:#ffb11b}.u-clr\:fire{color:#ffb11b}.u-bgc\:fire{color:rgba(92,69,24,.87);background-color:#ffb11b}.clr\:yellow.btn,.clr\:yellow.btn-grp>.btn{color:rgba(98,90,43,.87);background-color:#fbe251}.clr\:yellow.btn:hover,.clr\:yellow.btn.is\:hover,.clr\:yellow.btn-grp>.btn:hover,.clr\:yellow.btn-grp>.btn.is\:hover{background-color:#fadd31}.clr\:yellow.btn:active,.clr\:yellow.btn.is\:on,.clr\:yellow.btn-grp>.btn:active,.clr\:yellow.btn-grp>.btn.is\:on{color:rgba(0,0,0,.87);background-color:#fada21}.clr\:yellow.btn>.badge,.clr\:yellow.btn-grp>.btn>.badge{color:rgba(255,255,255,.87);background-color:rgba(122,114,60,.7)}.clr\:yellow.btn-outline,.clr\:yellow.btn-grp>.btn-outline{color:#fbe251;border-color:#fbe251}.clr\:yellow.btn-outline:hover,.clr\:yellow.btn-outline:active,.clr\:yellow.btn-outline.is\:on,.clr\:yellow.btn-grp>.btn-outline:hover,.clr\:yellow.btn-grp>.btn-outline:active,.clr\:yellow.btn-grp>.btn-outline.is\:on{background-color:rgba(251,226,81,.05)}.clr\:yellow.btn-outline>.badge,.clr\:yellow.btn-grp>.btn-outline>.badge{color:#fbe251;border-color:#fbe251}.clr\:yellow.tag{color:rgba(142,130,57,.87);border-color:rgba(250,216,19,.24);background-color:rgba(247,246,237,.56)}.clr\:yellow.tag .tag_append{color:rgba(98,90,43,.87);background-color:#fbe251}.clr\:yellow.ribbon{border-right-color:#fbe251;border-left-color:#fce876}.clr\:yellow.timeline_item .timeline_axis:before{background-color:#fbe251}.clr\:yellow.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #fbe251,inset 0 0 0 3px #fff}.clr\:yellow.avatar:after{border-color:#fbe251}.clr\:yellow.avatar .avatar_obj{color:rgba(98,90,43,.87);background-color:#fbe251}.clr\:yellow.label{color:rgba(98,90,43,.87);background-color:#fbe251}.clr\:yellow.progress_bar{color:rgba(93,84,32,.87);background-color:#fbe251}.u-clr\:yellow{color:#fbe251}.u-bgc\:yellow{color:rgba(98,90,43,.87);background-color:#fbe251}.clr\:olive.btn,.clr\:olive.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#86c166}.clr\:olive.btn:hover,.clr\:olive.btn.is\:hover,.clr\:olive.btn-grp>.btn:hover,.clr\:olive.btn-grp>.btn.is\:hover{background-color:#74b84f}.clr\:olive.btn:active,.clr\:olive.btn.is\:on,.clr\:olive.btn-grp>.btn:active,.clr\:olive.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#6caf47}.clr\:olive.btn>.badge,.clr\:olive.btn-grp>.btn>.badge{color:#86c166;background-color:rgba(255,255,255,.7)}.clr\:olive.btn-outline,.clr\:olive.btn-grp>.btn-outline{color:#86c166;border-color:#86c166}.clr\:olive.btn-outline:hover,.clr\:olive.btn-outline:active,.clr\:olive.btn-outline.is\:on,.clr\:olive.btn-grp>.btn-outline:hover,.clr\:olive.btn-grp>.btn-outline:active,.clr\:olive.btn-grp>.btn-outline.is\:on{background-color:rgba(134,193,102,.05)}.clr\:olive.btn-outline>.badge,.clr\:olive.btn-grp>.btn-outline>.badge{color:#86c166;border-color:#86c166}.clr\:olive.tag{color:rgba(93,152,62,.87);border-color:rgba(101,165,67,.24);background-color:rgba(240,244,238,.56)}.clr\:olive.tag .tag_append{color:rgba(255,255,255,.87);background-color:#86c166}.clr\:olive.ribbon{border-right-color:#86c166;border-left-color:#9ccc81}.clr\:olive.timeline_item .timeline_axis:before{background-color:#86c166}.clr\:olive.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #86c166,inset 0 0 0 3px #fff}.clr\:olive.avatar:after{border-color:#86c166}.clr\:olive.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#86c166}.clr\:olive.label{color:#fff;background-color:#86c166}.clr\:olive.progress_bar{color:rgba(255,255,255,.87);background-color:#86c166}.u-clr\:olive{color:#86c166}.u-bgc\:olive{color:rgba(255,255,255,.87);background-color:#86c166}.clr\:sapphire.btn,.clr\:sapphire.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#66bab7}.clr\:sapphire.btn:hover,.clr\:sapphire.btn.is\:hover,.clr\:sapphire.btn-grp>.btn:hover,.clr\:sapphire.btn-grp>.btn.is\:hover{background-color:#50b0ac}.clr\:sapphire.btn:active,.clr\:sapphire.btn.is\:on,.clr\:sapphire.btn-grp>.btn:active,.clr\:sapphire.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#4aa5a2}.clr\:sapphire.btn>.badge,.clr\:sapphire.btn-grp>.btn>.badge{color:#66bab7;background-color:rgba(255,255,255,.7)}.clr\:sapphire.btn-outline,.clr\:sapphire.btn-grp>.btn-outline{color:#66bab7;border-color:#66bab7}.clr\:sapphire.btn-outline:hover,.clr\:sapphire.btn-outline:active,.clr\:sapphire.btn-outline.is\:on,.clr\:sapphire.btn-grp>.btn-outline:hover,.clr\:sapphire.btn-grp>.btn-outline:active,.clr\:sapphire.btn-grp>.btn-outline.is\:on{background-color:rgba(102,186,183,.05)}.clr\:sapphire.btn-outline>.badge,.clr\:sapphire.btn-grp>.btn-outline>.badge{color:#66bab7;border-color:#66bab7}.clr\:sapphire.tag{color:rgba(64,142,139,.87);border-color:rgba(70,155,152,.24);background-color:rgba(238,243,243,.56)}.clr\:sapphire.tag .tag_append{color:rgba(255,255,255,.87);background-color:#66bab7}.clr\:sapphire.ribbon{border-right-color:#66bab7;border-left-color:#80c6c3}.clr\:sapphire.timeline_item .timeline_axis:before{background-color:#66bab7}.clr\:sapphire.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #66bab7,inset 0 0 0 3px #fff}.clr\:sapphire.avatar:after{border-color:#66bab7}.clr\:sapphire.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#66bab7}.clr\:sapphire.label{color:#fff;background-color:#66bab7}.clr\:sapphire.progress_bar{color:rgba(255,255,255,.87);background-color:#66bab7}.u-clr\:sapphire{color:#66bab7}.u-bgc\:sapphire{color:rgba(255,255,255,.87);background-color:#66bab7}.clr\:cyan.btn,.clr\:cyan.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#2ea9df}.clr\:cyan.btn:hover,.clr\:cyan.btn.is\:hover,.clr\:cyan.btn-grp>.btn:hover,.clr\:cyan.btn-grp>.btn.is\:hover{background-color:#1f98cd}.clr\:cyan.btn:active,.clr\:cyan.btn.is\:on,.clr\:cyan.btn-grp>.btn:active,.clr\:cyan.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#1d8ebf}.clr\:cyan.btn>.badge,.clr\:cyan.btn-grp>.btn>.badge{color:#2ea9df;background-color:rgba(255,255,255,.7)}.clr\:cyan.btn-outline,.clr\:cyan.btn-grp>.btn-outline{color:#2ea9df;border-color:#2ea9df}.clr\:cyan.btn-outline:hover,.clr\:cyan.btn-outline:active,.clr\:cyan.btn-outline.is\:on,.clr\:cyan.btn-grp>.btn-outline:hover,.clr\:cyan.btn-grp>.btn-outline:active,.clr\:cyan.btn-grp>.btn-outline.is\:on{background-color:rgba(46,169,223,.05)}.clr\:cyan.btn-outline>.badge,.clr\:cyan.btn-grp>.btn-outline>.badge{color:#2ea9df;border-color:#2ea9df}.clr\:cyan.tag{color:rgba(25,121,163,.87);border-color:rgba(27,132,178,.24);background-color:rgba(235,242,246,.56)}.clr\:cyan.tag .tag_append{color:rgba(255,255,255,.87);background-color:#2ea9df}.clr\:cyan.ribbon{border-right-color:#2ea9df;border-left-color:#4fb7e4}.clr\:cyan.timeline_item .timeline_axis:before{background-color:#2ea9df}.clr\:cyan.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #2ea9df,inset 0 0 0 3px #fff}.clr\:cyan.avatar:after{border-color:#2ea9df}.clr\:cyan.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#2ea9df}.clr\:cyan.label{color:#fff;background-color:#2ea9df}.clr\:cyan.progress_bar{color:rgba(255,255,255,.87);background-color:#2ea9df}.u-clr\:cyan{color:#2ea9df}.u-bgc\:cyan{color:rgba(255,255,255,.87);background-color:#2ea9df}.clr\:magenta.btn,.clr\:magenta.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#c1328e}.clr\:magenta.btn:hover,.clr\:magenta.btn.is\:hover,.clr\:magenta.btn-grp>.btn:hover,.clr\:magenta.btn-grp>.btn.is\:hover{background-color:#a72b7b}.clr\:magenta.btn:active,.clr\:magenta.btn.is\:on,.clr\:magenta.btn-grp>.btn:active,.clr\:magenta.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#9a2871}.clr\:magenta.btn>.badge,.clr\:magenta.btn-grp>.btn>.badge{color:#c1328e;background-color:rgba(255,255,255,.7)}.clr\:magenta.btn-outline,.clr\:magenta.btn-grp>.btn-outline{color:#c1328e;border-color:#c1328e}.clr\:magenta.btn-outline:hover,.clr\:magenta.btn-outline:active,.clr\:magenta.btn-outline.is\:on,.clr\:magenta.btn-grp>.btn-outline:hover,.clr\:magenta.btn-grp>.btn-outline:active,.clr\:magenta.btn-grp>.btn-outline.is\:on{background-color:rgba(193,50,142,.05)}.clr\:magenta.btn-outline>.badge,.clr\:magenta.btn-grp>.btn-outline>.badge{color:#c1328e;border-color:#c1328e}.clr\:magenta.tag{color:rgba(128,33,94,.87);border-color:rgba(142,37,105,.24);background-color:rgba(244,235,241,.56)}.clr\:magenta.tag .tag_append{color:rgba(255,255,255,.87);background-color:#c1328e}.clr\:magenta.ribbon{border-right-color:#c1328e;border-left-color:#d049a0}.clr\:magenta.timeline_item .timeline_axis:before{background-color:#c1328e}.clr\:magenta.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #c1328e,inset 0 0 0 3px #fff}.clr\:magenta.avatar:after{border-color:#c1328e}.clr\:magenta.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#c1328e}.clr\:magenta.label{color:#fff;background-color:#c1328e}.clr\:magenta.progress_bar{color:rgba(255,255,255,.87);background-color:#c1328e}.u-clr\:magenta{color:#c1328e}.u-bgc\:magenta{color:rgba(255,255,255,.87);background-color:#c1328e}.clr\:bone.btn,.clr\:bone.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#b19693}.clr\:bone.btn:hover,.clr\:bone.btn.is\:hover,.clr\:bone.btn-grp>.btn:hover,.clr\:bone.btn-grp>.btn.is\:hover{background-color:#a38480}.clr\:bone.btn:active,.clr\:bone.btn.is\:on,.clr\:bone.btn-grp>.btn:active,.clr\:bone.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#9c7a77}.clr\:bone.btn>.badge,.clr\:bone.btn-grp>.btn>.badge{color:#b19693;background-color:rgba(255,255,255,.7)}.clr\:bone.btn-outline,.clr\:bone.btn-grp>.btn-outline{color:#b19693;border-color:#b19693}.clr\:bone.btn-outline:hover,.clr\:bone.btn-outline:active,.clr\:bone.btn-outline.is\:on,.clr\:bone.btn-grp>.btn-outline:hover,.clr\:bone.btn-grp>.btn-outline:active,.clr\:bone.btn-grp>.btn-outline.is\:on{background-color:rgba(177,150,147,.05)}.clr\:bone.btn-outline>.badge,.clr\:bone.btn-grp>.btn-outline>.badge{color:#b19693;border-color:#b19693}.clr\:bone.tag{color:rgba(141,106,102,.87);border-color:rgba(150,114,110,.24);background-color:rgba(243,241,241,.56)}.clr\:bone.tag .tag_append{color:rgba(255,255,255,.87);background-color:#b19693}.clr\:bone.ribbon{border-right-color:#b19693;border-left-color:#c1aca9}.clr\:bone.timeline_item .timeline_axis:before{background-color:#b19693}.clr\:bone.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #b19693,inset 0 0 0 3px #fff}.clr\:bone.avatar:after{border-color:#b19693}.clr\:bone.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#b19693}.clr\:bone.label{color:#fff;background-color:#b19693}.clr\:bone.progress_bar{color:rgba(255,255,255,.87);background-color:#b19693}.u-clr\:bone{color:#b19693}.u-bgc\:bone{color:rgba(255,255,255,.87);background-color:#b19693}.clr\:silver.btn,.clr\:silver.btn-grp>.btn{color:rgba(82,83,82,.87);background-color:#bdc0ba}.clr\:silver.btn:hover,.clr\:silver.btn.is\:hover,.clr\:silver.btn-grp>.btn:hover,.clr\:silver.btn-grp>.btn.is\:hover{background-color:#adb0a9}.clr\:silver.btn:active,.clr\:silver.btn.is\:on,.clr\:silver.btn-grp>.btn:active,.clr\:silver.btn-grp>.btn.is\:on{color:rgba(0,0,0,.87);background-color:#a5a9a0}.clr\:silver.btn>.badge,.clr\:silver.btn-grp>.btn>.badge{color:rgba(82,83,82,.87);background-color:rgba(255,255,255,.7)}.clr\:silver.btn-outline,.clr\:silver.btn-grp>.btn-outline{color:#bdc0ba;border-color:#bdc0ba}.clr\:silver.btn-outline:hover,.clr\:silver.btn-outline:active,.clr\:silver.btn-outline.is\:on,.clr\:silver.btn-grp>.btn-outline:hover,.clr\:silver.btn-grp>.btn-outline:active,.clr\:silver.btn-grp>.btn-outline.is\:on{background-color:rgba(189,192,186,.05)}.clr\:silver.btn-outline>.badge,.clr\:silver.btn-grp>.btn-outline>.badge{color:#bdc0ba;border-color:#bdc0ba}.clr\:silver.tag{color:rgba(111,113,110,.87);border-color:rgba(157,162,153,.24);background-color:rgba(244,244,243,.56)}.clr\:silver.tag .tag_append{color:rgba(82,83,82,.87);background-color:#bdc0ba}.clr\:silver.ribbon{border-right-color:#bdc0ba;border-left-color:#d0d2ce}.clr\:silver.timeline_item .timeline_axis:before{background-color:#bdc0ba}.clr\:silver.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #bdc0ba,inset 0 0 0 3px #fff}.clr\:silver.avatar:after{border-color:#bdc0ba}.clr\:silver.avatar .avatar_obj{color:rgba(82,83,82,.87);background-color:#bdc0ba}.clr\:silver.label{color:rgba(82,83,82,.87);background-color:#bdc0ba}.clr\:silver.progress_bar{color:rgba(74,75,74,.87);background-color:#bdc0ba}.u-clr\:silver{color:#bdc0ba}.u-bgc\:silver{color:rgba(82,83,82,.87);background-color:#bdc0ba}.clr\:momo.btn,.clr\:momo.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#f596aa}.clr\:momo.btn:hover,.clr\:momo.btn.is\:hover,.clr\:momo.btn-grp>.btn:hover,.clr\:momo.btn-grp>.btn.is\:hover{background-color:#f27892}.clr\:momo.btn:active,.clr\:momo.btn.is\:on,.clr\:momo.btn-grp>.btn:active,.clr\:momo.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#f16986}.clr\:momo.btn>.badge,.clr\:momo.btn-grp>.btn>.badge{color:#f596aa;background-color:rgba(255,255,255,.7)}.clr\:momo.btn-outline,.clr\:momo.btn-grp>.btn-outline{color:#f596aa;border-color:#f596aa}.clr\:momo.btn-outline:hover,.clr\:momo.btn-outline:active,.clr\:momo.btn-outline.is\:on,.clr\:momo.btn-grp>.btn-outline:hover,.clr\:momo.btn-grp>.btn-outline:active,.clr\:momo.btn-grp>.btn-outline.is\:on{background-color:rgba(245,150,170,.05)}.clr\:momo.btn-outline>.badge,.clr\:momo.btn-grp>.btn-outline>.badge{color:#f596aa;border-color:#f596aa}.clr\:momo.tag{color:rgba(238,75,110,.87);border-color:rgba(239,92,123,.24);background-color:rgba(247,241,242,.56)}.clr\:momo.tag .tag_append{color:rgba(255,255,255,.87);background-color:#f596aa}.clr\:momo.ribbon{border-right-color:#f596aa;border-left-color:#f8b9c6}.clr\:momo.timeline_item .timeline_axis:before{background-color:#f596aa}.clr\:momo.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #f596aa,inset 0 0 0 3px #fff}.clr\:momo.avatar:after{border-color:#f596aa}.clr\:momo.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#f596aa}.clr\:momo.label{color:#fff;background-color:#f596aa}.clr\:momo.progress_bar{color:rgba(255,255,255,.87);background-color:#f596aa}.u-clr\:momo{color:#f596aa}.u-bgc\:momo{color:rgba(255,255,255,.87);background-color:#f596aa}.clr\:rosewood.btn,.clr\:rosewood.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#b5495b}.clr\:rosewood.btn:hover,.clr\:rosewood.btn.is\:hover,.clr\:rosewood.btn-grp>.btn:hover,.clr\:rosewood.btn-grp>.btn.is\:hover{background-color:#9e404f}.clr\:rosewood.btn:active,.clr\:rosewood.btn.is\:on,.clr\:rosewood.btn-grp>.btn:active,.clr\:rosewood.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#923b49}.clr\:rosewood.btn>.badge,.clr\:rosewood.btn-grp>.btn>.badge{color:#b5495b;background-color:rgba(255,255,255,.7)}.clr\:rosewood.btn-outline,.clr\:rosewood.btn-grp>.btn-outline{color:#b5495b;border-color:#b5495b}.clr\:rosewood.btn-outline:hover,.clr\:rosewood.btn-outline:active,.clr\:rosewood.btn-outline.is\:on,.clr\:rosewood.btn-grp>.btn-outline:hover,.clr\:rosewood.btn-grp>.btn-outline:active,.clr\:rosewood.btn-grp>.btn-outline.is\:on{background-color:rgba(181,73,91,.05)}.clr\:rosewood.btn-outline>.badge,.clr\:rosewood.btn-grp>.btn-outline>.badge{color:#b5495b;border-color:#b5495b}.clr\:rosewood.tag{color:rgba(123,50,62,.87);border-color:rgba(136,55,68,.24);background-color:rgba(243,237,238,.56)}.clr\:rosewood.tag .tag_append{color:rgba(255,255,255,.87);background-color:#b5495b}.clr\:rosewood.ribbon{border-right-color:#b5495b;border-left-color:#c06473}.clr\:rosewood.timeline_item .timeline_axis:before{background-color:#b5495b}.clr\:rosewood.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #b5495b,inset 0 0 0 3px #fff}.clr\:rosewood.avatar:after{border-color:#b5495b}.clr\:rosewood.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#b5495b}.clr\:rosewood.label{color:#fff;background-color:#b5495b}.clr\:rosewood.progress_bar{color:rgba(255,255,255,.87);background-color:#b5495b}.u-clr\:rosewood{color:#b5495b}.u-bgc\:rosewood{color:rgba(255,255,255,.87);background-color:#b5495b}.clr\:skin.btn,.clr\:skin.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#d7b98e}.clr\:skin.btn:hover,.clr\:skin.btn.is\:hover,.clr\:skin.btn-grp>.btn:hover,.clr\:skin.btn-grp>.btn.is\:hover{background-color:#ceaa76}.clr\:skin.btn:active,.clr\:skin.btn.is\:on,.clr\:skin.btn-grp>.btn:active,.clr\:skin.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#caa36a}.clr\:skin.btn>.badge,.clr\:skin.btn-grp>.btn>.badge{color:#d7b98e;background-color:rgba(255,255,255,.7)}.clr\:skin.btn-outline,.clr\:skin.btn-grp>.btn-outline{color:#d7b98e;border-color:#d7b98e}.clr\:skin.btn-outline:hover,.clr\:skin.btn-outline:active,.clr\:skin.btn-outline.is\:on,.clr\:skin.btn-grp>.btn-outline:hover,.clr\:skin.btn-grp>.btn-outline:active,.clr\:skin.btn-grp>.btn-outline.is\:on{background-color:rgba(215,185,142,.05)}.clr\:skin.btn-outline>.badge,.clr\:skin.btn-grp>.btn-outline>.badge{color:#d7b98e;border-color:#d7b98e}.clr\:skin.tag{color:rgba(194,148,82,.87);border-color:rgba(198,156,95,.24);background-color:rgba(245,243,241,.56)}.clr\:skin.tag .tag_append{color:rgba(255,255,255,.87);background-color:#d7b98e}.clr\:skin.ribbon{border-right-color:#d7b98e;border-left-color:#e1cbaa}.clr\:skin.timeline_item .timeline_axis:before{background-color:#d7b98e}.clr\:skin.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #d7b98e,inset 0 0 0 3px #fff}.clr\:skin.avatar:after{border-color:#d7b98e}.clr\:skin.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#d7b98e}.clr\:skin.label{color:#fff;background-color:#d7b98e}.clr\:skin.progress_bar{color:rgba(255,255,255,.87);background-color:#d7b98e}.u-clr\:skin{color:#d7b98e}.u-bgc\:skin{color:rgba(255,255,255,.87);background-color:#d7b98e}.clr\:chartreuse.btn,.clr\:chartreuse.btn-grp>.btn{color:rgba(69,71,33,.87);background-color:#bec23f}.clr\:chartreuse.btn:hover,.clr\:chartreuse.btn.is\:hover,.clr\:chartreuse.btn-grp>.btn:hover,.clr\:chartreuse.btn-grp>.btn.is\:hover{background-color:#a7aa36}.clr\:chartreuse.btn:active,.clr\:chartreuse.btn.is\:on,.clr\:chartreuse.btn-grp>.btn:active,.clr\:chartreuse.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#9b9e32}.clr\:chartreuse.btn>.badge,.clr\:chartreuse.btn-grp>.btn>.badge{color:rgba(69,71,33,.87);background-color:rgba(255,255,255,.7)}.clr\:chartreuse.btn-outline,.clr\:chartreuse.btn-grp>.btn-outline{color:#bec23f;border-color:#bec23f}.clr\:chartreuse.btn-outline:hover,.clr\:chartreuse.btn-outline:active,.clr\:chartreuse.btn-outline.is\:on,.clr\:chartreuse.btn-grp>.btn-outline:hover,.clr\:chartreuse.btn-grp>.btn-outline:active,.clr\:chartreuse.btn-grp>.btn-outline.is\:on{background-color:rgba(190,194,63,.05)}.clr\:chartreuse.btn-outline>.badge,.clr\:chartreuse.btn-grp>.btn-outline>.badge{color:#bec23f;border-color:#bec23f}.clr\:chartreuse.tag{color:rgba(112,114,48,.87);border-color:rgba(144,147,47,.24);background-color:rgba(244,244,236,.56)}.clr\:chartreuse.tag .tag_append{color:rgba(69,71,33,.87);background-color:#bec23f}.clr\:chartreuse.ribbon{border-right-color:#bec23f;border-left-color:#c8cb5c}.clr\:chartreuse.timeline_item .timeline_axis:before{background-color:#bec23f}.clr\:chartreuse.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #bec23f,inset 0 0 0 3px #fff}.clr\:chartreuse.avatar:after{border-color:#bec23f}.clr\:chartreuse.avatar .avatar_obj{color:rgba(69,71,33,.87);background-color:#bec23f}.clr\:chartreuse.label{color:rgba(69,71,33,.87);background-color:#bec23f}.clr\:chartreuse.progress_bar{color:rgba(255,255,255,.87);background-color:#bec23f}.u-clr\:chartreuse{color:#bec23f}.u-bgc\:chartreuse{color:rgba(69,71,33,.87);background-color:#bec23f}.clr\:green.btn,.clr\:green.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#1b813e}.clr\:green.btn:hover,.clr\:green.btn.is\:hover,.clr\:green.btn-grp>.btn:hover,.clr\:green.btn-grp>.btn.is\:hover{background-color:#156631}.clr\:green.btn:active,.clr\:green.btn.is\:on,.clr\:green.btn-grp>.btn:active,.clr\:green.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#13592b}.clr\:green.btn>.badge,.clr\:green.btn-grp>.btn>.badge{color:#1b813e;background-color:rgba(255,255,255,.7)}.clr\:green.btn-outline,.clr\:green.btn-grp>.btn-outline{color:#1b813e;border-color:#1b813e}.clr\:green.btn-outline:hover,.clr\:green.btn-outline:active,.clr\:green.btn-outline.is\:on,.clr\:green.btn-grp>.btn-outline:hover,.clr\:green.btn-grp>.btn-outline:active,.clr\:green.btn-grp>.btn-outline.is\:on{background-color:rgba(27,129,62,.05)}.clr\:green.btn-outline>.badge,.clr\:green.btn-grp>.btn-outline>.badge{color:#1b813e;border-color:#1b813e}.clr\:green.tag{color:rgba(13,62,30,.87);border-color:rgba(16,76,37,.24);background-color:rgba(234,240,236,.56)}.clr\:green.tag .tag_append{color:rgba(255,255,255,.87);background-color:#1b813e}.clr\:green.ribbon{border-right-color:#1b813e;border-left-color:#22a14d}.clr\:green.timeline_item .timeline_axis:before{background-color:#1b813e}.clr\:green.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #1b813e,inset 0 0 0 3px #fff}.clr\:green.avatar:after{border-color:#1b813e}.clr\:green.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#1b813e}.clr\:green.label{color:#fff;background-color:#1b813e}.clr\:green.progress_bar{color:rgba(255,255,255,.87);background-color:#1b813e}.u-clr\:green{color:#1b813e}.u-bgc\:green{color:rgba(255,255,255,.87);background-color:#1b813e}.clr\:aegean.btn,.clr\:aegean.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#2b5f75}.clr\:aegean.btn:hover,.clr\:aegean.btn.is\:hover,.clr\:aegean.btn-grp>.btn:hover,.clr\:aegean.btn-grp>.btn.is\:hover{background-color:#224c5d}.clr\:aegean.btn:active,.clr\:aegean.btn.is\:on,.clr\:aegean.btn-grp>.btn:active,.clr\:aegean.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#1e4251}.clr\:aegean.btn>.badge,.clr\:aegean.btn-grp>.btn>.badge{color:#2b5f75;background-color:rgba(255,255,255,.7)}.clr\:aegean.btn-outline,.clr\:aegean.btn-grp>.btn-outline{color:#2b5f75;border-color:#2b5f75}.clr\:aegean.btn-outline:hover,.clr\:aegean.btn-outline:active,.clr\:aegean.btn-outline.is\:on,.clr\:aegean.btn-grp>.btn-outline:hover,.clr\:aegean.btn-grp>.btn-outline:active,.clr\:aegean.btn-grp>.btn-outline.is\:on{background-color:rgba(43,95,117,.05)}.clr\:aegean.btn-outline>.badge,.clr\:aegean.btn-grp>.btn-outline>.badge{color:#2b5f75;border-color:#2b5f75}.clr\:aegean.tag{color:rgba(21,47,57,.87);border-color:rgba(26,57,70,.24);background-color:rgba(235,238,239,.56)}.clr\:aegean.tag .tag_append{color:rgba(255,255,255,.87);background-color:#2b5f75}.clr\:aegean.ribbon{border-right-color:#2b5f75;border-left-color:#357691}.clr\:aegean.timeline_item .timeline_axis:before{background-color:#2b5f75}.clr\:aegean.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #2b5f75,inset 0 0 0 3px #fff}.clr\:aegean.avatar:after{border-color:#2b5f75}.clr\:aegean.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#2b5f75}.clr\:aegean.label{color:#fff;background-color:#2b5f75}.clr\:aegean.progress_bar{color:rgba(255,255,255,.87);background-color:#2b5f75}.u-clr\:aegean{color:#2b5f75}.u-bgc\:aegean{color:rgba(255,255,255,.87);background-color:#2b5f75}.clr\:blue.btn,.clr\:blue.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#005caf}.clr\:blue.btn:hover,.clr\:blue.btn.is\:hover,.clr\:blue.btn-grp>.btn:hover,.clr\:blue.btn-grp>.btn.is\:hover{background-color:#004b8e}.clr\:blue.btn:active,.clr\:blue.btn.is\:on,.clr\:blue.btn-grp>.btn:active,.clr\:blue.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#00427e}.clr\:blue.btn>.badge,.clr\:blue.btn-grp>.btn>.badge{color:#005caf;background-color:rgba(255,255,255,.7)}.clr\:blue.btn-outline,.clr\:blue.btn-grp>.btn-outline{color:#005caf;border-color:#005caf}.clr\:blue.btn-outline:hover,.clr\:blue.btn-outline:active,.clr\:blue.btn-outline.is\:on,.clr\:blue.btn-grp>.btn-outline:hover,.clr\:blue.btn-grp>.btn-outline:active,.clr\:blue.btn-grp>.btn-outline.is\:on{background-color:rgba(0,92,175,.05)}.clr\:blue.btn-outline>.badge,.clr\:blue.btn-grp>.btn-outline>.badge{color:#005caf;border-color:#005caf}.clr\:blue.tag{color:rgba(0,49,93,.87);border-color:rgba(0,58,111,.24);background-color:rgba(232,238,243,.56)}.clr\:blue.tag .tag_append{color:rgba(255,255,255,.87);background-color:#005caf}.clr\:blue.ribbon{border-right-color:#005caf;border-left-color:#0070d5}.clr\:blue.timeline_item .timeline_axis:before{background-color:#005caf}.clr\:blue.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #005caf,inset 0 0 0 3px #fff}.clr\:blue.avatar:after{border-color:#005caf}.clr\:blue.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#005caf}.clr\:blue.label{color:#fff;background-color:#005caf}.clr\:blue.progress_bar{color:rgba(255,255,255,.87);background-color:#005caf}.u-clr\:blue{color:#005caf}.u-bgc\:blue{color:rgba(255,255,255,.87);background-color:#005caf}.clr\:violet.btn,.clr\:violet.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#66327c}.clr\:violet.btn:hover,.clr\:violet.btn.is\:hover,.clr\:violet.btn-grp>.btn:hover,.clr\:violet.btn-grp>.btn.is\:hover{background-color:#532965}.clr\:violet.btn:active,.clr\:violet.btn.is\:on,.clr\:violet.btn-grp>.btn:active,.clr\:violet.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#492459}.clr\:violet.btn>.badge,.clr\:violet.btn-grp>.btn>.badge{color:#66327c;background-color:rgba(255,255,255,.7)}.clr\:violet.btn-outline,.clr\:violet.btn-grp>.btn-outline{color:#66327c;border-color:#66327c}.clr\:violet.btn-outline:hover,.clr\:violet.btn-outline:active,.clr\:violet.btn-outline.is\:on,.clr\:violet.btn-grp>.btn-outline:hover,.clr\:violet.btn-grp>.btn-outline:active,.clr\:violet.btn-grp>.btn-outline.is\:on{background-color:rgba(102,50,124,.05)}.clr\:violet.btn-outline>.badge,.clr\:violet.btn-grp>.btn-outline>.badge{color:#66327c;border-color:#66327c}.clr\:violet.tag{color:rgba(54,27,66,.87);border-color:rgba(65,32,79,.24);background-color:rgba(238,235,240,.56)}.clr\:violet.tag .tag_append{color:rgba(255,255,255,.87);background-color:#66327c}.clr\:violet.ribbon{border-right-color:#66327c;border-left-color:#7c3d97}.clr\:violet.timeline_item .timeline_axis:before{background-color:#66327c}.clr\:violet.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #66327c,inset 0 0 0 3px #fff}.clr\:violet.avatar:after{border-color:#66327c}.clr\:violet.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#66327c}.clr\:violet.label{color:#fff;background-color:#66327c}.clr\:violet.progress_bar{color:rgba(255,255,255,.87);background-color:#66327c}.u-clr\:violet{color:#66327c}.u-bgc\:violet{color:rgba(255,255,255,.87);background-color:#66327c}.clr\:brown.btn,.clr\:brown.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#563f2e}.clr\:brown.btn:hover,.clr\:brown.btn.is\:hover,.clr\:brown.btn-grp>.btn:hover,.clr\:brown.btn-grp>.btn.is\:hover{background-color:#412f23}.clr\:brown.btn:active,.clr\:brown.btn.is\:on,.clr\:brown.btn-grp>.btn:active,.clr\:brown.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#36281d}.clr\:brown.btn>.badge,.clr\:brown.btn-grp>.btn>.badge{color:#563f2e;background-color:rgba(255,255,255,.7)}.clr\:brown.btn-outline,.clr\:brown.btn-grp>.btn-outline{color:#563f2e;border-color:#563f2e}.clr\:brown.btn-outline:hover,.clr\:brown.btn-outline:active,.clr\:brown.btn-outline.is\:on,.clr\:brown.btn-grp>.btn-outline:hover,.clr\:brown.btn-grp>.btn-outline:active,.clr\:brown.btn-grp>.btn-outline.is\:on{background-color:rgba(86,63,46,.05)}.clr\:brown.btn-outline>.badge,.clr\:brown.btn-grp>.btn-outline>.badge{color:#563f2e;border-color:#563f2e}.clr\:brown.tag{color:rgba(33,24,18,.87);border-color:rgba(44,33,24,.24);background-color:rgba(237,236,235,.56)}.clr\:brown.tag .tag_append{color:rgba(255,255,255,.87);background-color:#563f2e}.clr\:brown.ribbon{border-right-color:#563f2e;border-left-color:#6f513b}.clr\:brown.timeline_item .timeline_axis:before{background-color:#563f2e}.clr\:brown.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #563f2e,inset 0 0 0 3px #fff}.clr\:brown.avatar:after{border-color:#563f2e}.clr\:brown.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#563f2e}.clr\:brown.label{color:#fff;background-color:#563f2e}.clr\:brown.progress_bar{color:rgba(255,255,255,.87);background-color:#563f2e}.u-clr\:brown{color:#563f2e}.u-bgc\:brown{color:rgba(255,255,255,.87);background-color:#563f2e}.clr\:gray.btn,.clr\:gray.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#646a68}.clr\:gray.btn:hover,.clr\:gray.btn.is\:hover,.clr\:gray.btn-grp>.btn:hover,.clr\:gray.btn-grp>.btn.is\:hover{background-color:#545958}.clr\:gray.btn:active,.clr\:gray.btn.is\:on,.clr\:gray.btn-grp>.btn:active,.clr\:gray.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#4c514f}.clr\:gray.btn>.badge,.clr\:gray.btn-grp>.btn>.badge{color:#646a68;background-color:rgba(255,255,255,.7)}.clr\:gray.btn-outline,.clr\:gray.btn-grp>.btn-outline{color:#646a68;border-color:#646a68}.clr\:gray.btn-outline:hover,.clr\:gray.btn-outline:active,.clr\:gray.btn-outline.is\:on,.clr\:gray.btn-grp>.btn-outline:hover,.clr\:gray.btn-grp>.btn-outline:active,.clr\:gray.btn-grp>.btn-outline.is\:on{background-color:rgba(100,106,104,.05)}.clr\:gray.btn-outline>.badge,.clr\:gray.btn-grp>.btn-outline>.badge{color:#646a68;border-color:#646a68}.clr\:gray.tag{color:rgba(60,64,63,.87);border-color:rgba(69,73,72,.24);background-color:rgba(238,239,238,.56)}.clr\:gray.tag .tag_append{color:rgba(255,255,255,.87);background-color:#646a68}.clr\:gray.ribbon{border-right-color:#646a68;border-left-color:#777e7b}.clr\:gray.timeline_item .timeline_axis:before{background-color:#646a68}.clr\:gray.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #646a68,inset 0 0 0 3px #fff}.clr\:gray.avatar:after{border-color:#646a68}.clr\:gray.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#646a68}.clr\:gray.label{color:#fff;background-color:#646a68}.clr\:gray.progress_bar{color:rgba(255,255,255,.87);background-color:#646a68}.u-clr\:gray{color:#646a68}.u-bgc\:gray{color:rgba(255,255,255,.87);background-color:#646a68}.clr\:black.btn,.clr\:black.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#000}.clr\:black.btn:hover,.clr\:black.btn.is\:hover,.clr\:black.btn-grp>.btn:hover,.clr\:black.btn-grp>.btn.is\:hover{background-color:#000}.clr\:black.btn:active,.clr\:black.btn.is\:on,.clr\:black.btn-grp>.btn:active,.clr\:black.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#000}.clr\:black.btn>.badge,.clr\:black.btn-grp>.btn>.badge{color:#000;background-color:rgba(255,255,255,.7)}.clr\:black.btn-outline,.clr\:black.btn-grp>.btn-outline{color:#000;border-color:#000}.clr\:black.btn-outline:hover,.clr\:black.btn-outline:active,.clr\:black.btn-outline.is\:on,.clr\:black.btn-grp>.btn-outline:hover,.clr\:black.btn-grp>.btn-outline:active,.clr\:black.btn-grp>.btn-outline.is\:on{background-color:rgba(0,0,0,.05)}.clr\:black.btn-outline>.badge,.clr\:black.btn-grp>.btn-outline>.badge{color:#000;border-color:#000}.clr\:black.tag{color:rgba(0,0,0,.87);border-color:rgba(0,0,0,.24);background-color:rgba(232,232,232,.56)}.clr\:black.tag .tag_append{color:rgba(255,255,255,.87);background-color:#000}.clr\:black.ribbon{border-right-color:#000;border-left-color:#131313}.clr\:black.timeline_item .timeline_axis:before{background-color:#000}.clr\:black.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #000,inset 0 0 0 3px #fff}.clr\:black.avatar:after{border-color:#000}.clr\:black.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#000}.clr\:black.label{color:#fff;background-color:#000}.clr\:black.progress_bar{color:rgba(255,255,255,.87);background-color:#000}.u-clr\:black{color:#000}.u-bgc\:black{color:rgba(255,255,255,.87);background-color:#000}.clr\:beige.btn,.clr\:beige.btn-grp>.btn{color:rgba(255,255,255,.87);background-color:#d2b89f}.clr\:beige.btn:hover,.clr\:beige.btn.is\:hover,.clr\:beige.btn-grp>.btn:hover,.clr\:beige.btn-grp>.btn.is\:hover{background-color:#c8a889}.clr\:beige.btn:active,.clr\:beige.btn.is\:on,.clr\:beige.btn-grp>.btn:active,.clr\:beige.btn-grp>.btn.is\:on{color:rgba(255,255,255,.87);background-color:#c29f7e}.clr\:beige.btn>.badge,.clr\:beige.btn-grp>.btn>.badge{color:#d2b89f;background-color:rgba(255,255,255,.7)}.clr\:beige.btn-outline,.clr\:beige.btn-grp>.btn-outline{color:#d2b89f;border-color:#d2b89f}.clr\:beige.btn-outline:hover,.clr\:beige.btn-outline:active,.clr\:beige.btn-outline.is\:on,.clr\:beige.btn-grp>.btn-outline:hover,.clr\:beige.btn-grp>.btn-outline:active,.clr\:beige.btn-grp>.btn-outline.is\:on{background-color:rgba(210,184,159,.05)}.clr\:beige.btn-outline>.badge,.clr\:beige.btn-grp>.btn-outline>.badge{color:#d2b89f;border-color:#d2b89f}.clr\:beige.tag{color:rgba(184,143,103,.87);border-color:rgba(190,152,116,.24);background-color:rgba(245,243,242,.56)}.clr\:beige.tag .tag_append{color:rgba(255,255,255,.87);background-color:#d2b89f}.clr\:beige.ribbon{border-right-color:#d2b89f;border-left-color:#decbb9}.clr\:beige.timeline_item .timeline_axis:before{background-color:#d2b89f}.clr\:beige.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #d2b89f,inset 0 0 0 3px #fff}.clr\:beige.avatar:after{border-color:#d2b89f}.clr\:beige.avatar .avatar_obj{color:rgba(255,255,255,.87);background-color:#d2b89f}.clr\:beige.label{color:#fff;background-color:#d2b89f}.clr\:beige.progress_bar{color:rgba(255,255,255,.87);background-color:#d2b89f}.u-clr\:beige{color:#d2b89f}.u-bgc\:beige{color:rgba(255,255,255,.87);background-color:#d2b89f}.clr\:khaki.btn,.clr\:khaki.btn-grp>.btn{color:rgba(81,75,65,.87);background-color:#c3b091}.clr\:khaki.btn:hover,.clr\:khaki.btn.is\:hover,.clr\:khaki.btn-grp>.btn:hover,.clr\:khaki.btn-grp>.btn.is\:hover{background-color:#b7a17c}.clr\:khaki.btn:active,.clr\:khaki.btn.is\:on,.clr\:khaki.btn-grp>.btn:active,.clr\:khaki.btn-grp>.btn.is\:on{color:rgba(0,0,0,.87);background-color:#b29971}.clr\:khaki.btn>.badge,.clr\:khaki.btn-grp>.btn>.badge{color:rgba(81,75,65,.87);background-color:rgba(255,255,255,.7)}.clr\:khaki.btn-outline,.clr\:khaki.btn-grp>.btn-outline{color:#c3b091;border-color:#c3b091}.clr\:khaki.btn-outline:hover,.clr\:khaki.btn-outline:active,.clr\:khaki.btn-outline.is\:on,.clr\:khaki.btn-grp>.btn-outline:hover,.clr\:khaki.btn-grp>.btn-outline:active,.clr\:khaki.btn-grp>.btn-outline.is\:on{background-color:rgba(195,176,145,.05)}.clr\:khaki.btn-outline>.badge,.clr\:khaki.btn-grp>.btn-outline>.badge{color:#c3b091;border-color:#c3b091}.clr\:khaki.tag{color:rgba(114,105,89,.87);border-color:rgba(173,146,104,.24);background-color:rgba(244,243,241,.56)}.clr\:khaki.tag .tag_append{color:rgba(81,75,65,.87);background-color:#c3b091}.clr\:khaki.ribbon{border-right-color:#c3b091;border-left-color:#d1c2aa}.clr\:khaki.timeline_item .timeline_axis:before{background-color:#c3b091}.clr\:khaki.timeline_item.is\:on .timeline_axis:before{box-shadow:0 0 0 2px #c3b091,inset 0 0 0 3px #fff}.clr\:khaki.avatar:after{border-color:#c3b091}.clr\:khaki.avatar .avatar_obj{color:rgba(81,75,65,.87);background-color:#c3b091}.clr\:khaki.label{color:rgba(81,75,65,.87);background-color:#c3b091}.clr\:khaki.progress_bar{color:rgba(74,67,56,.87);background-color:#c3b091}.u-clr\:khaki{color:#c3b091}.u-bgc\:khaki{color:rgba(81,75,65,.87);background-color:#c3b091} -------------------------------------------------------------------------------- /public/css/style.css: -------------------------------------------------------------------------------- 1 | body, html, .container { 2 | height: 100vh; 3 | } 4 | 5 | * { 6 | font-family: 'Ubuntu Mono', monospace; 7 | } 8 | 9 | .container>.f-row { 10 | height: 90%; 11 | } 12 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simbafs/slides/29df33688744e7927bc4f78bb43fa560fb37ce57/public/favicon.ico -------------------------------------------------------------------------------- /public/img/expand-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/img/eye-dropper-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/img/home-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/img/icon/icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simbafs/slides/29df33688744e7927bc4f78bb43fa560fb37ce57/public/img/icon/icon-1024.png -------------------------------------------------------------------------------- /public/img/icon/icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simbafs/slides/29df33688744e7927bc4f78bb43fa560fb37ce57/public/img/icon/icon-192.png -------------------------------------------------------------------------------- /public/img/info-circle-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/img/tv-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/js/audience.js: -------------------------------------------------------------------------------- 1 | ;(() => { 2 | console.log('audience.js loaded'); 3 | 4 | var id = location.pathname.split('/')[2]; 5 | var socket = io(); 6 | 7 | socket.emit('join', id); 8 | 9 | socket.on('msg', console.log); 10 | socket.on('changePage', e => { 11 | Reveal.slide(e.indexh, e.indexv); 12 | console.log(e); 13 | }); 14 | socket.on('hello', () => console.log('hello')); 15 | })(); 16 | -------------------------------------------------------------------------------- /public/js/clipboard.js: -------------------------------------------------------------------------------- 1 | ../../node_modules/clipboard/dist/clipboard.min.js -------------------------------------------------------------------------------- /public/js/cookie.js: -------------------------------------------------------------------------------- 1 | ../../node_modules/js-cookie/src/js.cookie.js -------------------------------------------------------------------------------- /public/js/copy.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simbafs/slides/29df33688744e7927bc4f78bb43fa560fb37ce57/public/js/copy.js -------------------------------------------------------------------------------- /public/js/hosts.js: -------------------------------------------------------------------------------- 1 | ;(() => { 2 | console.log('hosts.js loaded'); 3 | 4 | var id = location.pathname.split('/')[2]; 5 | var key = Cookies.get(id); 6 | var socket = io(); 7 | 8 | socket.on('hello', () => console.log('hello')); 9 | socket.on('msg', console.log); 10 | 11 | 12 | socket.emit('login', { id, key }); 13 | 14 | Reveal.on('slidechanged', (e) => { 15 | socket.emit('hostChange', { 16 | indexv: e.indexv, 17 | indexh: e.indexh 18 | }); 19 | }) 20 | })(); 21 | -------------------------------------------------------------------------------- /public/js/index.js: -------------------------------------------------------------------------------- 1 | var firstUseToggle = (() => { 2 | var firstUse = document.getElementById('firstUse'); 3 | var firstUseClose = document.getElementById('firstUseClose'); 4 | 5 | var firstUseToggle = () => firstUse.classList.toggle('is:on'); 6 | 7 | if(localStorage.getItem('visited') !== 'true'){ 8 | firstUseToggle(); 9 | localStorage.setItem('visited', 'true'); 10 | } 11 | 12 | firstUseClose.addEventListener('click', firstUseToggle); 13 | 14 | return firstUseToggle; 15 | })(); 16 | -------------------------------------------------------------------------------- /public/js/qrcode.js: -------------------------------------------------------------------------------- 1 | ../../node_modules/qrcode/build/qrcode.min.js -------------------------------------------------------------------------------- /public/js/room.js: -------------------------------------------------------------------------------- 1 | var step = (() => { 2 | var toggle = [ 3 | document.querySelector('#createPath'), 4 | document.querySelector('#createName'), 5 | document.querySelector('#createKey'), 6 | document.querySelector('#createSubmit') 7 | ]; 8 | var form = document.querySelector('#create form'); 9 | var steps = document.getElementById('createStep').children; 10 | var nowStep = 0; 11 | 12 | function step(n){ 13 | // check n 14 | if(n > 3 || n < 0) return; 15 | 16 | // check validation 17 | if(toggle[nowStep].checkValidity()){ 18 | toggle[nowStep].classList.remove('is:danger'); 19 | }else{ 20 | toggle[nowStep].classList.add('is:danger'); 21 | return; 22 | } 23 | 24 | for(i in toggle){ 25 | if(i == n) steps[i].classList.add('is:on'); 26 | else steps[i].classList.remove('is:on'); 27 | } 28 | toggle[n].focus ? toggle[n].focus() : null; 29 | nowStep = n; 30 | } 31 | 32 | toggle.forEach((item, index) => item.addEventListener('focus', () => step(index))); 33 | 34 | var query = location.search.slice(1).split('&').map(i => i.split('=')).reduce((a, b) => {a[b[0]] = b[1]; return a}, {}); 35 | 36 | if(query.path){ 37 | toggle[0].value = query.path 38 | step(1); 39 | } 40 | 41 | return step; 42 | })(); 43 | -------------------------------------------------------------------------------- /public/js/slides.js: -------------------------------------------------------------------------------- 1 | // theme picker 2 | var schema = (() => { 3 | var schemaBtn = document.getElementById('schemaBtn'); 4 | var schemaClose = document.getElementById('schemaClose'); 5 | var schemaPicker = document.getElementById('schemaPicker'); 6 | var schemaSchema = document.getElementsByClassName('schemaSchema'); 7 | var schemaStat = false; 8 | var dark = [ 9 | 'black', 10 | 'blood', 11 | 'league', 12 | 'moon', 13 | 'night' 14 | ]; 15 | var form = document.getElementsByTagName('form')[0]; 16 | var schema = 'white'; 17 | 18 | // set default theme, which gotten from localStrage 19 | schemaToggle(localStorage.getItem('schema') || 'white'); 20 | 21 | function schemaToggle(schema){ 22 | // change button color 23 | // if(dark.includes(schema)){ 24 | // schemaBtn.children[0].style.filter = 'invert(1)'; 25 | // }else{ 26 | // schemaBtn.children[0].style.filter = 'invert(0)'; 27 | // } 28 | 29 | // change css file 30 | document.getElementById('themeCSS').href = `/reveal.js/dist/theme/${schema}.css` 31 | 32 | localStorage.setItem('schema', schema); 33 | } 34 | 35 | form.addEventListener('submit', e => { 36 | e.preventDefault(); 37 | for(var i of e.target.elements){ 38 | if(i.checked) schema = i.value 39 | } 40 | schemaToggle(schema); 41 | }); 42 | 43 | schemaBtn.addEventListener('click', e => { 44 | console.log(e); 45 | schemaStat = !schemaStat; 46 | schemaPicker.classList.toggle('is:on', schemaStat); 47 | }); 48 | 49 | schemaClose.addEventListener('click', e => { 50 | schemaStat = false; 51 | schemaPicker.classList.toggle('is:on', false); 52 | }); 53 | 54 | return schemaToggle; 55 | })(); 56 | 57 | // info button 58 | var infoToggle = (() => { 59 | var infoBtn = document.getElementById('infoBtn'); 60 | var infoBox = document.getElementById('infoBox'); 61 | var infoClose = document.getElementById('infoClose'); 62 | var infoQrcode = document.getElementById('infoQrcode'); 63 | var infoToggle = () => { 64 | // generate qrcode 65 | QRCode.toCanvas(infoQrcode, location.href); 66 | 67 | // open info box 68 | infoBox.classList.toggle('is:on') 69 | }; 70 | 71 | infoBtn.addEventListener('click', infoToggle); 72 | infoClose.addEventListener('click', infoToggle); 73 | 74 | return infoToggle; 75 | })(); 76 | -------------------------------------------------------------------------------- /public/js/socket.io.js: -------------------------------------------------------------------------------- 1 | ../../node_modules/socket.io-client/dist/socket.io.slim.js -------------------------------------------------------------------------------- /public/js/socket.io.slim.js.map: -------------------------------------------------------------------------------- 1 | ../../node_modules/socket.io-client/dist/socket.io.slim.js.map -------------------------------------------------------------------------------- /public/js/toggle.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This js file help you toggle class. 3 | * Use data-toggle to set the target elements. The value should be a query string. 4 | * Use data-class to set which class to be toggled, default 'is:on' 5 | */ 6 | 7 | ;(() => { 8 | var buttons = [...document.querySelectorAll('[data-toggle]')]; 9 | buttons.forEach(i => i.addEventListener('click', function(e){ 10 | var selector = this['dataset']['toggle']; 11 | var targetClass = this['dataset']['class'] || 'is:on'; 12 | 13 | 14 | [...document.querySelectorAll(selector)].forEach(i => i.classList.toggle(targetClass)); 15 | })); 16 | })(); 17 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Slides", 3 | "short_name": "Slides", 4 | "lang": "zh-TW", 5 | "start_url": "/", 6 | "display": "standalone", 7 | "theme_color": "#23d386", 8 | "icons": [ 9 | { 10 | "src": "/img/icon/icon-192.png", 11 | "sizes": "192x192" 12 | }, 13 | { 14 | "src": "/img/icon/icon-1024.png", 15 | "sizes": "1024x1024" 16 | } 17 | ], 18 | "background_color": "#23d386" 19 | } 20 | -------------------------------------------------------------------------------- /public/test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |

Hello World

9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /routes/admin.js: -------------------------------------------------------------------------------- 1 | const router = require('express').Router(); 2 | const pool = require('@simba.fs/pool'); 3 | const admins = new pool(String); 4 | const random = require('../lib/random'); 5 | const cookieCongig = require('../lib/cookieConfig'); 6 | 7 | // This will be replace with other after login system is finished 8 | const adminList = require('../adminList.js') || []; 9 | 10 | let hosts = require('../lib/hosts'); 11 | 12 | router.get('/', (req, res, next) => { 13 | if(admins.has(req.cookies.admin)) return res.render('admin', { 14 | admin: true, 15 | hosts: hosts 16 | }); 17 | 18 | return res.render('admin'); 19 | }); 20 | 21 | router.post('/login', (req, res, next) => { 22 | console.log(adminList, req.body); 23 | if(!adminList.includes(req.body.key)) return res.error('Key is not matched anyone in the admin list'); 24 | 25 | let key = random(20); 26 | admins.add(key); 27 | res.cookie('admin', key, {...cookieCongig, httpOnly: true}); 28 | res.redirect('/admin'); 29 | }); 30 | 31 | module.exports = router; 32 | -------------------------------------------------------------------------------- /routes/help.js: -------------------------------------------------------------------------------- 1 | const router = require('express').Router(); 2 | 3 | router.get('/', (req, res, next) => { 4 | res.render('help'); 5 | }); 6 | 7 | router.get('/:page', (req, res, next) => { 8 | return res.render('slides', { 9 | url: `/help/${req.params.page}.md`, 10 | originUrl: `https://github.com/simba-fs/slides/blob/master/help/${req.params.page}.md` 11 | }); 12 | }); 13 | 14 | module.exports = router; 15 | -------------------------------------------------------------------------------- /routes/index.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | const path = require('path'); 4 | 5 | router.get('/', (req, res, next) => { 6 | return res.render('index'); 7 | }); 8 | 9 | router.get('/license', (req, res, next) => { 10 | return res.render('license'); 11 | }); 12 | 13 | router.get('/help', (req, res, next) => { 14 | return res.render('help'); 15 | }); 16 | 17 | router.get('/about', (req, res, next) => { 18 | return res.render('about'); 19 | }); 20 | 21 | router.use('/admin', require('./admin')); 22 | router.use('/s', require('./slides')); 23 | router.use('/h', require('./help')); 24 | // for /room and /host 25 | router.use('/', require('./room')); 26 | 27 | module.exports = router; 28 | -------------------------------------------------------------------------------- /routes/room.js: -------------------------------------------------------------------------------- 1 | const router = require('express').Router(); 2 | const random = require('../lib/random'); 3 | const axios = require('axios').create({ timeout: 10000 }); 4 | const cookieConfig = require('../lib/cookieConfig'); 5 | 6 | // room 7 | router.get('/room', (req, res, next) => { 8 | if(req.query.id) return res.redirect(`/room/${req.query.id}`); 9 | return res.render('room'); 10 | }); 11 | 12 | router.get('/room/:id', (req, res, next) => { 13 | let id = req.params.id; 14 | let data = hosts.find(i => i.id === id); 15 | 16 | if(!data) return res.redirect('/room'); 17 | 18 | return res.render('slides', { 19 | url: data.url, 20 | originUrl: data.originUrl, 21 | id, 22 | mode: 'audience' 23 | }); 24 | }); 25 | 26 | // host 27 | var hosts = require('../lib/hosts'); 28 | 29 | router.get('/host', (req, res, next) => { 30 | res.send('Get /host'); 31 | }); 32 | 33 | router.post('/host', (req, res, next) => { 34 | let data = {...req.body}; 35 | 36 | // parse data 37 | data.id = random(); 38 | if(!data.key) data.key = random(); 39 | if(!data.name) data.name = data.path; 40 | 41 | let src = data.path.split('/'); 42 | // https://github.com/simba-fs/slides-test/blob/master/folder1/folder2/slides.md 43 | if(src.length <= 2) src[2] = 'README.md'; 44 | let originUrl = `https://github.com/${src[0]}/${src[1]}/blob/master/${src.slice(2).join('/')}` 45 | let url = `https://raw.githubusercontent.com/${src[0]}/${src[1]}/master/${src.slice(2).join('/')}` 46 | 47 | data = { 48 | ...data, 49 | url, 50 | originUrl 51 | }; 52 | 53 | axios.head(url) 54 | .then((e) => { 55 | hosts.push(data); 56 | res.cookie(data.id, data.key, cookieConfig); 57 | res.redirect(`/host/${data.id}`) 58 | }) 59 | .catch(e => res.error(`Can\'t find ${url}`)) 60 | }); 61 | 62 | router.get('/host/:id', (req, res, next) => { 63 | let id = req.params.id; 64 | let data = hosts.find(i => i.id === id); 65 | 66 | if(!data) return res.redirect('/host'); 67 | if(data.key !== req.cookies[data.id]) return res.error('Key is not match'); 68 | 69 | return res.render('slides', { 70 | id, 71 | url: data.url, 72 | originUrl: data.originUrl, 73 | mode: 'host' 74 | }); 75 | }); 76 | 77 | module.exports = router; 78 | -------------------------------------------------------------------------------- /routes/room.socket.io.js: -------------------------------------------------------------------------------- 1 | let hosts = require('../lib/hosts'); 2 | 3 | module.exports = (io) => { 4 | io.on('connection', (socket) => { 5 | let id; 6 | console.log(`Socket: a new connection`); 7 | 8 | socket.emit('hello'); 9 | 10 | socket.on('login', e => { 11 | if(hosts.find(i => i.id === e.id).key === e.key) { 12 | socket.join(id); 13 | id = e.id; 14 | socket.emit('msg', 'logind'); 15 | }else{ 16 | socket.emit('msg', 'login failed'); 17 | } 18 | }); 19 | 20 | socket.on('join', e => { 21 | if(hosts.find(i => i.id === e)){ 22 | socket.join(e); 23 | id = e; 24 | socket.emit('msg', 'join' + e); 25 | }else{ 26 | socket.emit('msg', 'no such room'); 27 | } 28 | }) 29 | 30 | socket.on('hostChange', data => io.to(id).emit('changePage', data)); 31 | }); 32 | }; 33 | -------------------------------------------------------------------------------- /routes/slides.js: -------------------------------------------------------------------------------- 1 | const router = require('express').Router(); 2 | const axios = require('axios').create({ timeout: 10000 }); 3 | 4 | router.post('/', (req, res, next) => { 5 | let src = req.body.src; 6 | 7 | // check src 8 | if(!src || !src.match(/.*\/.*/)) return res.error('Src format error. It should match /.*\\/.*/'); 9 | res.redirect('/s/' + src); 10 | }); 11 | 12 | router.get(/^\/.*\/.*/, (req, res, next) => { 13 | let src = req.path.split('/').slice(1); 14 | // https://github.com/simba-fs/slides-test/blob/master/folder1/folder2/slides.md 15 | if(src.length <= 2) src[2] = 'README.md'; 16 | let originUrl = `https://github.com/${src[0]}/${src[1]}/blob/master/${src.slice(2).join('/')}` 17 | let url = `https://raw.githubusercontent.com/${src[0]}/${src[1]}/master/${src.slice(2).join('/')}` 18 | console.log({ url, originUrl }); 19 | axios.head(url) 20 | .then(e => res.render('slides', { url, originUrl })) 21 | .catch(e => res.error(`Can\'t find ${url}`)) 22 | }); 23 | 24 | module.exports = router; 25 | -------------------------------------------------------------------------------- /social/GithubBanner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simbafs/slides/29df33688744e7927bc4f78bb43fa560fb37ce57/social/GithubBanner.png -------------------------------------------------------------------------------- /social/room.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simbafs/slides/29df33688744e7927bc4f78bb43fa560fb37ce57/social/room.gif -------------------------------------------------------------------------------- /views/about.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <%- include('common/head.ejs') %> 5 | 6 | 7 |
8 | 9 | <%- include('common/header.ejs') %> 10 | 11 | 12 |
13 |
14 |

About

15 |

這個是一個可以把 markdown 文件轉成簡報的工具,透過 reveal.js 的幫助轉換成簡報 這個工具是啟發自 hackmd.io 和 slides.com,但是我們不儲存檔案在我們的伺服器,你可以用自己喜歡的編輯器編輯完了之後上傳到 GitHub,我們會從 GitHub 上抓取你的檔案,你可以透過 git 強大的版本管理回覆到任何版本以及與他人共同編輯

16 |
17 |
GitHub Repo
18 |
simba-fs
19 |
20 |
21 |
22 | 23 | 24 | -------------------------------------------------------------------------------- /views/admin.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <%- include('common/head.ejs') %> 5 | 6 | 7 |
8 | 9 | <%- include('common/header.ejs') %> 10 | 11 | 12 |
13 |
14 | <% if(locals.admin){ %> 15 |

Admin

16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | <% for(let i of (locals.hosts || [])){ %> 26 | 27 | 28 | 29 | 30 | 31 | <% } %> 32 | 33 |
PathIDKey
<%= i.path %><%= i.id %><%= i.key %>
34 | <% }else{ %> 35 |
36 | 40 | 41 |
42 | <% } %> 43 |
44 |
45 |
46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /views/common/head.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | Slides 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | <% if(locals.GA){ %> 33 | 34 | 35 | 42 | <% } %> 43 | -------------------------------------------------------------------------------- /views/common/header.ejs: -------------------------------------------------------------------------------- 1 | 21 | -------------------------------------------------------------------------------- /views/common/script.ejs: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /views/error.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <%- include('common/head.ejs') %> 5 | Slides - Error 6 | 7 | 8 |
9 | 10 | <%- include('common/header.ejs') %> 11 | 12 |
13 |
14 | <%- include('common/head.ejs') %> 15 |

<%= message %>

16 | <% if(locals.error){ %> 17 |
18 |

<%= error.status %>

19 |
<%= error.stack %>
20 | <% } %> 21 |
22 |
23 |
24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /views/help.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <%- include('common/head.ejs') %> 5 | 6 | 7 |
8 | 9 | <%- include('common/header.ejs') %> 10 | 11 | 12 |
13 |
14 |

Help

15 | 16 | 20 |
21 |
22 |
23 | 24 | 25 | -------------------------------------------------------------------------------- /views/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <%- include('common/head.ejs') %> 5 | 6 | 7 |
8 | 9 | <%- include('common/header.ejs') %> 10 | 11 | 12 | 27 | 28 | 29 |
30 |
31 | 32 |

Slides

33 |
34 |
35 | GitHub path 36 | 37 | 38 | 39 | 40 |
41 |
42 |
43 |
試試看這兩個範例吧!
44 | 48 |
49 |
50 |
51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /views/license.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <%- include('common/head.ejs') %> 5 | 6 | 7 |
8 | 9 | <%- include('common/header.ejs') %> 10 | 11 | 12 |
13 |
14 |

License

15 |
    16 |
  • 17 | Web Server 18 | 主要程式碼 19 |
  • 20 |
  • 21 | layz4.css 22 | CSS Framework 23 |
  • 24 |
  • 25 | fontawesome 26 | icons 27 |
  • 28 |
  • 29 | reveal.js 30 | 把 markdown 轉換成簡報的函式庫 31 |
  • 32 |
33 |
34 |
35 |
36 | 37 | 38 | -------------------------------------------------------------------------------- /views/room.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <%- include('common/head.ejs') %> 5 | 6 | 7 |
8 | 9 | <%- include('common/header.ejs') %> 10 | 11 | 12 |
13 |
14 |

Join Room

15 |
16 | ID 17 | 18 |
19 |
20 | 21 | 22 |
23 |
24 |
25 | 26 | 80 |
81 | 82 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /views/slides.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <%- include('common/head.ejs') %> 6 | Slides - slides 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 23 | 24 | 25 | 28 | 29 | 30 | 31 | home 32 | 33 | 34 | <% if(locals.id){ %> 35 | 38 | <% } %> 39 |
40 | 41 | 42 | 114 | 115 | 116 | 135 | 136 |
137 |
138 |
139 | <%= locals.markdown || '' %> 140 |
141 |
142 |
143 | 144 | 145 | 146 | 147 | 148 | 149 | 159 | 160 | 161 | 162 | 163 | <% if(locals.mode === 'host'){ %> 164 | 165 | 166 | 167 | 170 | 171 | <% }else if(locals.mode === 'audience'){ %> 172 | 173 | 174 | 177 | 178 | <% } %> 179 | 180 | 181 | --------------------------------------------------------------------------------