From 2e4febb3e81f4db83172ee5073c682fd2a031f38 Mon Sep 17 00:00:00 2001 From: Jemma Date: Sun, 22 Oct 2023 15:08:33 -0500 Subject: [PATCH] Database refactor (#46) * Created the new database models, removed the user model (this *will* break everything) https://tenor.com/uqNk.gif * began implementing the updated database models in requests. While all should be working now, more testing is still required * cleaned up now unused middleware. More work on implementing the db rewrite * Finished moving messages over to new db model. Fixed a bug where the userMap was pulling an incorrect value for the scrren_name. * More work on dynamic notifications * moved notifications render to be async in order to support database calls for dynamic notification content. * Fixed followers not displaying on user pages. Cleaned up a lot of the UI. Implemented dynamic notifications system * Fixed cdn urls on the Wii U pages. Fixed a bug with messages pages showing your own name and Mii in threads. Added a flag for removing a post * Updated some localization text. Added check to prevent notifications breaking when a reference ID does not resolve to a valid user. Updated the following list to use the correct cdn url for community icons. * Fixed typo in header URL for the announcements page * Update drawing and screenshot domains to resolve http errors when loading some images * Removed add friend button. Added profile badges to me page. Fixed typo in paintings domain that prevented them from loading * Fixed (most) of the web frontend. * updated auth urls * Updated post meta data domains * Fixed post length check not being performed. Updated portal css to prevent text from running off the screen * Added service notice messages to Juxt web login * Fixed bug that prevented users from posting. Added additional filtering to new post body content * Added missing doctype flag at beginning of portal files. Re-worked notification object in DB and fixed bug where notifications would not be marked read. Added initial schema to support reporting a post * UI redesign (#45) * Added PID to all requests. Added 404 page. Added new CSS. Updated communities and all communities page * Added community, feed, messages, and post template redesigns. Fixed relevant endpoints * Added redesigned user pages. Added dedicated endpoint for images. Moved user endpoint to be /users/:id * Added support to Yeah! on a post. Began trimming down the juxt.js file. General code cleanup * Added settings page. More code cleanup * Updated Yeah! function to update the parent element and the yeah count text * Added badges and other profile content to the profile page. Added ratelimit to empathy count. Yeah count is now updated locally before confirming with the server * Moved partial templates to separate directory. Combined me and user pages to reduce repeated code. Added support for viewing followers and following. Added support for only sending template content for user pages when the pjax flag is set (yay faster loading times on the Wii U!) * Added support for tab view in communities page. Fixed Yeah! button not working when new tab is loaded. Added post view page with replies. * Added support for message threads * Added support for loading more posts in user pages and communities. Implemented proper error page. * Added support for making posts to communities * Added support for following users * Implemented saving settings. Added support for sending messages. Added option to send screenshot in user messages * Added support for replies. Added notification templates. * Added support for new account creation. Added additional checks for user accounts existing before displaying a page. * Finished implementing new user setup. Known Issues: [ ] Notifications are not implemented [ ] You cannot select your game experience on the first_run.ejs page using the d-pad [ ] Spoilers are not respected in post view [ ] Messages button does not work on profile pages [ ] Back button is not implemented [ ] While loading, the messages page does not always scroll to the bottom of the page * Fixed auth being flagged for the background image (lol) * Fixed titles page not showing new communities. Fixed rate limit to address duplicate posts from being created. Fixed alignment of replies on post page. General code cleanup * Fixed user tabs not loading correctly. Fixed community links on user pages not loading. Fixed the bug where all tabs would increasingly send more requests each time you click one. Created new handling for duplicate posts error pages * Locked user operation when new post is created. Added 1 level of proxy trust to (hopefully) fix the rate limit issue. * Added message to indicate features that aren't ready yet. Updated dependencies. Added another layer of trust to the rate limiter. Addressed invalid config from updated mongoose library. * Fixed load more being shown on every post. Fixed new message button on profile pages not working. Addressed sounds not being played consistently when interacting with the UI. Added minified css and js. Added support for refreshing the page (Y) and going back (B) using the button inputs on the gamepad. * Began implementation of notifications. Implemented back button on nav bar. Increased message thread limit. * Added support for new account creation. Added additional checks for user accounts existing before displaying a page. * Fixed some characters incorrectly being caught by the text filter. Fixed the nav-bar sometimes not re-appearing when using the back button. Fixed an error where attempting to reply to a post in the announcements community would result in being soft-locked in the applet with a forbidden message. Fixed the nav-bar showing a scroll bar on the 404 page * Fixed nav-bar sometimes having a scroll bar. Replaced the popular communities query to now look at the number of new posts in the last 24 hours to determine the order * Fixed issue where follow notifications would stack no matter how long the last notification was last updated. * Tweaked some logic with notifications * WIP community structure changes * Fixed /titles/show redirecting to the wrong place. Minor css tweaks, code cleanup * Added support for spoiler posts * Addressed issue where using certain unicode characters in a name would reverse the text on a notification * Began work on fixing Juxt web client * Reworked web UI to work with rewrite. Lots and lots of small bug fixes * Added error page for message threads on web. CSS tweaks. Added lang tag to html documents * Update login cookie domain * Updated cdn URL's for web interface * updated web cdn (again, sorry) * Fixed url for the mii image on nav-bar for users on Chromium browsers * updating CDN url for messages and notifications * fixed web user page banner * Fixed crash when web token fails to fetch. Fixed typo on communities page that prevented it from loading sometimes * Fixed crash when web token fails to fetch. Fixed typo on communities page that prevented it from loading sometimes * (hopefully) Fixed negative yeahs from occurring * Update post.js to simplify empathy logic * Added view to see the most recent people to yeah! a post. Added tab to user page to view yeahed! posts. CSS tweaks * Updated yeah endpoint to actually show posts in the order of most recently yeahed! * Fixed scrolling in activity feed. Fixed tapping back button refreshing page. Added support for Related Communities. Fixed Related communities showing up in popular page. CSS tweaks * 3DS redesign start. Added communities and all communities page * Finished styling the users yeah list. Added support for displaying topic tags in the post body. Fixed spoiler button not disappearing after clicking it. Added additional check to ensure yeah count cannot be negative. * Added support for browsing topic tags in the applet * Added check to open communities from WWP * Re-added support for downloading user data. Fixed mii images not working on Juxt mobile. * Updated web icons and manifest * Updated check for newer Mii name to actually update the user settings object * Added Content-Disposition header to user data export file * More 3DS work. Changed post ID format to be inline with the official format * Finished schema refactor and related upkeep on portal endpoint TODO: web and ctr * Fixed posts and user page on web. Added missing elements on PNID schema. Fixed head partials * Fixed communities db query not including announcement communities. Added check to see if community is sub community when displaying icons * Updated post id length. Updated schema for reports * Fixed notifications schema * Fixed new messages not being created. Changed new message button to check for being friends instead of mutual followers. Fixed follower notifications not working correctly. Added friends tab to user profile page. Added support for viewing pending friend requests (WIP, somewhat broken). Fixed notification and message badges not showing up on the Wii U. * Updated to new token format * Fixed token variable name in processServiceToken * updated token format * Implemented /titles and /titles/:id/new on 3DS. Began implementing new custom Pjax module for 3DS. Changed friends GRPC variable names in anticipation of adding support for accounts GRPC functionality * Reworked auth middleware to support new login system. Fix bug where usernames were not shown in notifications in the web client. Added error page for when a user attempts to log into Juxt on the web for the first time. Updated dependencies * Refactored auth middleware. Added typescript and linter config files. Updated grpc dependency to use typescript version (still needs to be build manually...will fix tomorrow). Added minified 3DS css and js files. * Finished refactor of auth middleware. Removed account database connection and updated relevant files to reflect this change. General code cleanup * Fixed typo in auth middleware * CSS tweaks on 3DS. Added new cdn domain for 3DS to test * Removed unused admin files. Updated header files for Portal, CTR, and Web to use built in CF cache instead of BunnyCDN * Removed unused admin files. Updated header files for Portal, CTR, and Web to use built in CF cache instead of BunnyCDN * Added support for the activity feed, user page, and topic tags on 3DS. Added additional error pages for missing features on 3DS * Adding support for posting from the 3DS. Added pjax support for tabs. Added support for notifications and viewing friend requests. Added support for bmp paintings from the 3DS. CSS tweaks and bug fixes. * Added support for the first run experience on 3DS * Added support for following users and communities on 3DS. Added check to see if title supports screenshots before allowing user to select them * Added support for following users and communities on 3DS. Added check to see if title supports screenshots before allowing user to select them * Fixed alignment issue with follow button when related communities are displayed. Added support for viewing related communities * Added support for viewing and sending messages on 3DS. Moved friend requests tab to the user page * Added support for reporting a post on the Wii U * Added report type for piracy, fixed typo * Added support for removing your own posts and replies * Added support for viewing user reports on Juxt web. Added deleted profile page. Added bandwidth to the 404 page. CSS fixes * Fixed posts not being marked as verified from the applet. Added support for reporting replies. Added support for moderators deleting posts and replies from the applet. * Added more meta-data to reports for tracking purposes. Reports are now filtered out of the admin page if they have already been resolved. Fixed artifact issue with the nav_bar in the web endpoint * Updated auth middleware to catch issues with authenticating with the account server. * Fixed web manifest not being allowed through auth middleware * Fixed manifest images not loading in chrome * Updated manifest to use absolute url to fix the PWA breaking on mobile * fixed PWA start path (sorry, it worked the first time I tested) * Fixed font rendering on posts on the mobile site. Updated the forgot password link on the login page. Fixed user banners not being loaded. * temp - added explicit beta checks in middleware * updated beta checks * Updated auth to support different domains. Started working on segregated auth middleware --------- Co-authored-by: CaramelKat Co-authored-by: Jemma Poffinbarger Co-authored-by: Jonathan Barrow --------- Co-authored-by: Jemma Co-authored-by: CaramelKat Co-authored-by: Jonathan Barrow --- .eslintignore | 2 + .eslintrc.json | 59 + config.example.json | 16 +- package-lock.json | 10309 +++++++++++++--- package.json | 25 +- src/accountdb.js | 44 - src/database.js | 300 +- src/middleware/auth.js | 192 +- src/middleware/client-header.js | 38 - src/middleware/consoleAuth.js | 71 + src/middleware/pnid.js | 50 - src/middleware/ratelimit.js | 7 - src/middleware/session.js | 23 - src/middleware/staticFiles.js | 33 + src/middleware/webAuth.js | 68 + src/middleware/xml-parser.js | 35 - src/models/communities.js | 19 +- src/models/content.js | 60 + src/models/conversation.js | 18 +- src/models/endpoint.js | 30 +- src/models/notifications.js | 26 + src/models/pnid.js | 52 - src/models/post.js | 74 +- src/models/report.js | 33 + src/models/settings.js | 95 + src/models/user.js | 278 - src/server.js | 21 +- src/services/juxt-web/index.js | 25 +- src/services/juxt-web/routes/admin/admin.js | 57 + src/services/juxt-web/routes/admin/api.js | 433 - src/services/juxt-web/routes/admin/home.js | 327 - .../juxt-web/routes/console/communities.js | 224 +- src/services/juxt-web/routes/console/feed.js | 74 +- .../juxt-web/routes/console/messages.js | 176 +- .../juxt-web/routes/console/notifications.js | 71 +- src/services/juxt-web/routes/console/posts.js | 367 +- src/services/juxt-web/routes/console/show.js | 123 +- .../juxt-web/routes/console/topics.js | 89 + .../juxt-web/routes/console/userpage.js | 451 +- src/services/juxt-web/routes/console/web.js | 53 +- src/services/juxt-web/routes/index.js | 4 +- src/services/juxt-web/routes/web/login.js | 114 +- src/services/juxt-web/routes/web/pwa.js | 4 +- src/services/juxt-web/routes/web/robots.js | 4 +- src/translations/en.json | 4 +- src/util.js | 333 +- src/webfiles/admin/admin_announcements.ejs | 164 - src/webfiles/admin/admin_audit.ejs | 30 - src/webfiles/admin/admin_communities.ejs | 139 - src/webfiles/admin/admin_community.ejs | 164 - src/webfiles/admin/admin_discovery.ejs | 47 - src/webfiles/admin/admin_edit_community.ejs | 185 - .../admin/admin_edit_sub_community.ejs | 185 - src/webfiles/admin/admin_edit_user.ejs | 71 - src/webfiles/admin/admin_home.ejs | 32 - src/webfiles/admin/admin_login.ejs | 105 - src/webfiles/admin/admin_new_community.ejs | 158 - src/webfiles/admin/admin_new_post.ejs | 135 - src/webfiles/admin/admin_sub_communities.ejs | 139 - src/webfiles/admin/admin_user.ejs | 168 - src/webfiles/admin/admin_users.ejs | 127 - src/webfiles/admin/css/juxt.css | 785 -- src/webfiles/ctr/all_communities.ejs | 73 +- src/webfiles/ctr/communities.ejs | 130 +- src/webfiles/ctr/community.ejs | 210 +- src/webfiles/ctr/css/juxt.css | 2053 ++- src/webfiles/ctr/css/juxt.min.css | 1 + src/webfiles/ctr/error.ejs | 15 + src/webfiles/ctr/feed.ejs | 41 +- src/webfiles/ctr/first_run.ejs | 488 +- src/webfiles/ctr/images/background.png | Bin 0 -> 10860 bytes src/webfiles/ctr/images/banner.png | Bin 0 -> 20734 bytes src/webfiles/ctr/images/icons.png | Bin 0 -> 31115 bytes src/webfiles/ctr/js/debug.js | 722 ++ src/webfiles/ctr/js/juxt.js | 1281 +- src/webfiles/ctr/js/juxt.min.js | 1 + src/webfiles/ctr/js/pjax.js | 117 +- src/webfiles/ctr/js/pjax.min.js | 1 + src/webfiles/ctr/me_page.ejs | 76 - src/webfiles/ctr/message_thread.ejs | 39 + src/webfiles/ctr/messages.ejs | 33 + src/webfiles/ctr/notifications.ejs | 72 +- src/webfiles/ctr/partials/following_list.ejs | 27 + src/webfiles/ctr/partials/head.ejs | 9 + src/webfiles/ctr/partials/new_post.ejs | 86 + src/webfiles/ctr/partials/notifications.ejs | 37 + src/webfiles/ctr/partials/post_template.ejs | 72 + src/webfiles/ctr/partials/posts_list.ejs | 11 + src/webfiles/ctr/partials/requests.ejs | 20 + src/webfiles/ctr/post.ejs | 45 +- src/webfiles/ctr/post_template.ejs | 49 - src/webfiles/ctr/settings.ejs | 15 + src/webfiles/ctr/sub_communities.ejs | 31 + src/webfiles/ctr/user_menu.ejs | 54 +- src/webfiles/ctr/user_page.ejs | 139 +- src/webfiles/portal/all_communities.ejs | 58 +- src/webfiles/portal/announcements.ejs | 46 - src/webfiles/portal/communities.ejs | 107 +- src/webfiles/portal/community.ejs | 206 +- src/webfiles/portal/css/background.png | Bin 666518 -> 0 bytes src/webfiles/portal/css/juxt.css | 3513 +++--- src/webfiles/portal/css/juxt.min.css | 1 + src/webfiles/portal/error.ejs | 30 + src/webfiles/portal/feed.ejs | 38 +- src/webfiles/portal/first_run.ejs | 417 +- src/webfiles/portal/following_list.ejs | 37 - src/webfiles/portal/guest_notice.ejs | 1 + .../portal/images/add-post-no-image.png | Bin 0 -> 12183 bytes src/webfiles/portal/images/background.png | Bin 0 -> 278655 bytes src/webfiles/portal/images/bandwidthlost.png | Bin 0 -> 114375 bytes src/webfiles/portal/images/banner.png | Bin 0 -> 20734 bytes src/webfiles/portal/images/favicon.ico | Bin 0 -> 12862 bytes .../{css => images}/splash-background.png | Bin src/webfiles/portal/js/debug.js | 311 + src/webfiles/portal/js/juxt.js | 1150 +- src/webfiles/portal/js/juxt.min.js | 1 + src/webfiles/portal/me_page.ejs | 182 - src/webfiles/portal/message_thread.ejs | 99 +- src/webfiles/portal/messages.ejs | 87 +- src/webfiles/portal/nav_bar.ejs | 54 - src/webfiles/portal/notifications.ejs | 68 +- .../{ => partials}/ban_notification.ejs | 0 .../portal/partials/following_list.ejs | 27 + src/webfiles/portal/partials/head.ejs | 7 + src/webfiles/portal/partials/nav_bar.ejs | 28 + src/webfiles/portal/partials/new_post.ejs | 93 + src/webfiles/portal/partials/not_ready.ejs | 1 + .../portal/partials/notifications.ejs | 37 + .../portal/partials/post_template.ejs | 88 + src/webfiles/portal/partials/posts_list.ejs | 11 + src/webfiles/portal/partials/requests.ejs | 20 + src/webfiles/portal/partials/updates.ejs | 26 + src/webfiles/portal/post.ejs | 203 +- src/webfiles/portal/post_template.ejs | 55 - src/webfiles/portal/settings.ejs | 47 + src/webfiles/portal/sub_communities.ejs | 32 + src/webfiles/portal/user_page.ejs | 290 +- src/webfiles/web/all_communities.ejs | 24 +- src/webfiles/web/communities.ejs | 35 +- src/webfiles/web/community.ejs | 82 +- src/webfiles/web/css/juxt.css | 587 - src/webfiles/web/css/login.css | 38 +- src/webfiles/web/css/web.css | 602 + src/webfiles/web/css/web.min.css | 1 + src/webfiles/web/error.ejs | 74 + src/webfiles/web/feed.ejs | 52 +- src/webfiles/web/first_run.ejs | 74 + src/webfiles/web/images/banner.png | Bin 0 -> 20734 bytes .../{portal/css => web/images}/favicon.ico | Bin .../web/images/icons/icon-128x128.png | Bin 5087 -> 12645 bytes .../web/images/icons/icon-144x144.png | Bin 5819 -> 13334 bytes .../web/images/icons/icon-152x152.png | Bin 6119 -> 13349 bytes .../web/images/icons/icon-192x192.png | Bin 8024 -> 14969 bytes .../web/images/icons/icon-384x384.png | Bin 24074 -> 28768 bytes .../web/images/icons/icon-512x512.png | Bin 40465 -> 39257 bytes src/webfiles/web/images/icons/icon-72x72.png | Bin 2557 -> 11008 bytes src/webfiles/web/images/icons/icon-96x96.png | Bin 3637 -> 11274 bytes src/webfiles/web/images/splash-background.png | Bin 0 -> 44394 bytes src/webfiles/web/js/pjax.min.js | 2 + src/webfiles/web/js/web.js | 317 + src/webfiles/web/js/web.min.js | 1 + src/webfiles/web/login.ejs | 22 +- src/webfiles/web/manifest.json | 22 +- src/webfiles/web/me_page.ejs | 97 +- src/webfiles/web/message_thread.ejs | 15 + src/webfiles/web/messages.ejs | 101 +- src/webfiles/web/more_posts.ejs | 3 - src/webfiles/web/notifications.ejs | 53 +- src/webfiles/web/partials/head.ejs | 13 + .../{portal => web/partials}/more_posts.ejs | 0 src/webfiles/web/{ => partials}/nav_bar.ejs | 30 +- src/webfiles/web/partials/notifications.ejs | 37 + .../web/{ => partials}/post_template.ejs | 12 +- src/webfiles/web/partials/posts_list.ejs | 11 + src/webfiles/web/post.ejs | 55 +- src/webfiles/web/reports.ejs | 92 + src/webfiles/web/user_page.ejs | 160 +- tsconfig.json | 25 + 178 files changed, 18683 insertions(+), 14818 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.json delete mode 100644 src/accountdb.js delete mode 100644 src/middleware/client-header.js create mode 100644 src/middleware/consoleAuth.js delete mode 100644 src/middleware/pnid.js delete mode 100644 src/middleware/ratelimit.js delete mode 100644 src/middleware/session.js create mode 100644 src/middleware/staticFiles.js create mode 100644 src/middleware/webAuth.js delete mode 100644 src/middleware/xml-parser.js create mode 100644 src/models/content.js create mode 100644 src/models/notifications.js delete mode 100644 src/models/pnid.js create mode 100644 src/models/report.js create mode 100644 src/models/settings.js delete mode 100644 src/models/user.js create mode 100644 src/services/juxt-web/routes/admin/admin.js delete mode 100644 src/services/juxt-web/routes/admin/api.js delete mode 100644 src/services/juxt-web/routes/admin/home.js create mode 100644 src/services/juxt-web/routes/console/topics.js delete mode 100644 src/webfiles/admin/admin_announcements.ejs delete mode 100644 src/webfiles/admin/admin_audit.ejs delete mode 100644 src/webfiles/admin/admin_communities.ejs delete mode 100644 src/webfiles/admin/admin_community.ejs delete mode 100644 src/webfiles/admin/admin_discovery.ejs delete mode 100644 src/webfiles/admin/admin_edit_community.ejs delete mode 100644 src/webfiles/admin/admin_edit_sub_community.ejs delete mode 100644 src/webfiles/admin/admin_edit_user.ejs delete mode 100644 src/webfiles/admin/admin_home.ejs delete mode 100644 src/webfiles/admin/admin_login.ejs delete mode 100644 src/webfiles/admin/admin_new_community.ejs delete mode 100644 src/webfiles/admin/admin_new_post.ejs delete mode 100644 src/webfiles/admin/admin_sub_communities.ejs delete mode 100644 src/webfiles/admin/admin_user.ejs delete mode 100644 src/webfiles/admin/admin_users.ejs delete mode 100644 src/webfiles/admin/css/juxt.css create mode 100644 src/webfiles/ctr/css/juxt.min.css create mode 100644 src/webfiles/ctr/error.ejs create mode 100644 src/webfiles/ctr/images/background.png create mode 100644 src/webfiles/ctr/images/banner.png create mode 100644 src/webfiles/ctr/images/icons.png create mode 100644 src/webfiles/ctr/js/debug.js create mode 100644 src/webfiles/ctr/js/juxt.min.js create mode 100644 src/webfiles/ctr/js/pjax.min.js delete mode 100644 src/webfiles/ctr/me_page.ejs create mode 100644 src/webfiles/ctr/message_thread.ejs create mode 100644 src/webfiles/ctr/messages.ejs create mode 100644 src/webfiles/ctr/partials/following_list.ejs create mode 100644 src/webfiles/ctr/partials/head.ejs create mode 100644 src/webfiles/ctr/partials/new_post.ejs create mode 100644 src/webfiles/ctr/partials/notifications.ejs create mode 100644 src/webfiles/ctr/partials/post_template.ejs create mode 100644 src/webfiles/ctr/partials/posts_list.ejs create mode 100644 src/webfiles/ctr/partials/requests.ejs delete mode 100644 src/webfiles/ctr/post_template.ejs create mode 100644 src/webfiles/ctr/settings.ejs create mode 100644 src/webfiles/ctr/sub_communities.ejs delete mode 100644 src/webfiles/portal/announcements.ejs delete mode 100644 src/webfiles/portal/css/background.png create mode 100644 src/webfiles/portal/css/juxt.min.css create mode 100644 src/webfiles/portal/error.ejs delete mode 100644 src/webfiles/portal/following_list.ejs create mode 100644 src/webfiles/portal/images/add-post-no-image.png create mode 100644 src/webfiles/portal/images/background.png create mode 100644 src/webfiles/portal/images/bandwidthlost.png create mode 100644 src/webfiles/portal/images/banner.png create mode 100644 src/webfiles/portal/images/favicon.ico rename src/webfiles/portal/{css => images}/splash-background.png (100%) create mode 100644 src/webfiles/portal/js/debug.js create mode 100644 src/webfiles/portal/js/juxt.min.js delete mode 100644 src/webfiles/portal/me_page.ejs delete mode 100644 src/webfiles/portal/nav_bar.ejs rename src/webfiles/portal/{ => partials}/ban_notification.ejs (100%) create mode 100644 src/webfiles/portal/partials/following_list.ejs create mode 100644 src/webfiles/portal/partials/head.ejs create mode 100644 src/webfiles/portal/partials/nav_bar.ejs create mode 100644 src/webfiles/portal/partials/new_post.ejs create mode 100644 src/webfiles/portal/partials/not_ready.ejs create mode 100644 src/webfiles/portal/partials/notifications.ejs create mode 100644 src/webfiles/portal/partials/post_template.ejs create mode 100644 src/webfiles/portal/partials/posts_list.ejs create mode 100644 src/webfiles/portal/partials/requests.ejs create mode 100644 src/webfiles/portal/partials/updates.ejs delete mode 100644 src/webfiles/portal/post_template.ejs create mode 100644 src/webfiles/portal/settings.ejs create mode 100644 src/webfiles/portal/sub_communities.ejs delete mode 100644 src/webfiles/web/css/juxt.css create mode 100644 src/webfiles/web/css/web.css create mode 100644 src/webfiles/web/css/web.min.css create mode 100644 src/webfiles/web/error.ejs create mode 100644 src/webfiles/web/first_run.ejs create mode 100644 src/webfiles/web/images/banner.png rename src/webfiles/{portal/css => web/images}/favicon.ico (100%) create mode 100644 src/webfiles/web/images/splash-background.png create mode 100644 src/webfiles/web/js/pjax.min.js create mode 100644 src/webfiles/web/js/web.js create mode 100644 src/webfiles/web/js/web.min.js create mode 100644 src/webfiles/web/message_thread.ejs delete mode 100644 src/webfiles/web/more_posts.ejs create mode 100644 src/webfiles/web/partials/head.ejs rename src/webfiles/{portal => web/partials}/more_posts.ejs (100%) rename src/webfiles/web/{ => partials}/nav_bar.ejs (62%) create mode 100644 src/webfiles/web/partials/notifications.ejs rename src/webfiles/web/{ => partials}/post_template.ejs (62%) create mode 100644 src/webfiles/web/partials/posts_list.ejs create mode 100644 src/webfiles/web/reports.ejs create mode 100644 tsconfig.json diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..f4013e9 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +dist +*.min.js \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..17d5c80 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,59 @@ +{ + "env": { + "node": true, + "commonjs": true, + "es6": true + }, + "parser": "@typescript-eslint/parser", + "globals": { + "BigInt": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended" + ], + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "require-atomic-updates": "warn", + "no-case-declarations": "off", + "no-empty": "off", + "no-console": "off", + "linebreak-style": "off", + "no-global-assign": "off", + "prefer-const": "error", + "no-var": "error", + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }], + "no-extra-semi": "off", + "@typescript-eslint/no-extra-semi": "error", + "@typescript-eslint/no-empty-interface": "warn", + "@typescript-eslint/no-inferrable-types": "off", + "@typescript-eslint/typedef": "error", + "@typescript-eslint/explicit-function-return-type": "error", + "keyword-spacing": "off", + "@typescript-eslint/keyword-spacing": "error", + "curly": "error", + "brace-style": "error", + "one-var": [ + "error", + "never" + ], + "indent": [ + "error", + "tab", + { + "SwitchCase": 1 + } + ], + "quotes": [ + "error", + "single" + ], + "semi": [ + "error", + "always" + ] + } +} \ No newline at end of file diff --git a/config.example.json b/config.example.json index eb83b56..025b5ed 100644 --- a/config.example.json +++ b/config.example.json @@ -3,12 +3,13 @@ "port": 80 }, "account_server_domain": "", + "account_server": "", "account_server_secret": "", "X-Nintendo-Client-ID": "", "X-Nintendo-Client-Secret": "", "mongoose": { "uri": "mongodb://localhost:27017", - "database": "name", + "database": "database", "options": { "useNewUrlParser": true, "useUnifiedTopology": true @@ -16,13 +17,16 @@ }, "account_db": { "uri": "mongodb://localhost:27017", - "database": "name", + "database": "database", "options": { "useNewUrlParser": true, "useUnifiedTopology": true } }, - "authorized_PNIDs" : [ - 0 - ] -} + "aws": { + "spaces": { + "key": "", + "secret": "" + } + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 63a416b..a178c65 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,44 +9,1355 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "aws-sdk": "^2.1192.0", "body-parser": "^1.19.0", "colors": "^1.4.0", "cookie-parser": "^1.4.5", + "crc": "^4.3.2", + "date-fns": "^2.29.3", "express": "^4.17.1", + "express-rate-limit": "^6.7.0", "fs-extra": "^9.0.1", "hashmap": "^2.4.0", - "image-pixels": "^2.2.2", + "image-pixels": "^1.1.1", "memory-cache": "^0.2.0", "moment": "^2.29.1", "mongoose": "^6.0.13", "mongoose-fuzzy-search-next": "^1.0.13", "mongoose-unique-validator": "^3.0.0", "morgan": "^1.10.0", + "nice-grpc": "^2.1.4", "node-rsa": "^1.1.1", "node-snowflake": "0.0.1", "pako": "^2.0.2", "pngjs": "^6.0.0", - "sharp": "^0.28.1", + "pretendo-grpc": "github:PretendoNetwork/grpc-ts", + "sharp": "^0.31.3", "tga": "^1.0.4", "xml2js": "^0.4.23", - "xmlbuilder": "^15.1.1", - "xmlbuilder2": "^2.4.0" + "xmlbuilder2": "^3.0.2" }, "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.59.11", + "@typescript-eslint/parser": "^5.59.11", "bmp-js": "^0.1.0", "ejs": "^3.1.5", + "eslint": "^8.42.0", "express-slow-down": "^1.4.0", "express-subdomain": "^1.0.5", "multer": "^1.4.2", - "object-to-xml": "^2.0.0", "request": "^2.88.2", - "xml2json": "^0.12.0" + "tsc-alias": "^1.8.6", + "typescript": "^5.1.3" + } + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "optional": true, + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "optional": true, + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "optional": true, + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "optional": true, + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-sdk/abort-controller": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.289.0.tgz", + "integrity": "sha512-Xakz8EeTl0Q3KaWRdCaRQrrYxBAkQGj6eeT+DVmMLMz4gzTcSHwvfR5tVBIPHk4+IjboJJKM5l1xAZ90AGFPAQ==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.289.0.tgz", + "integrity": "sha512-rerSVZadAQu34Dxhsx+tpUdhru8Dpu/oW/ABJnVBZMbs5kXtl3wgWw8vRPiE0jFfjeA+dPZRXfuBzDulzsMcsg==", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.289.0", + "@aws-sdk/config-resolver": "3.289.0", + "@aws-sdk/credential-provider-node": "3.289.0", + "@aws-sdk/fetch-http-handler": "3.289.0", + "@aws-sdk/hash-node": "3.289.0", + "@aws-sdk/invalid-dependency": "3.289.0", + "@aws-sdk/middleware-content-length": "3.289.0", + "@aws-sdk/middleware-endpoint": "3.289.0", + "@aws-sdk/middleware-host-header": "3.289.0", + "@aws-sdk/middleware-logger": "3.289.0", + "@aws-sdk/middleware-recursion-detection": "3.289.0", + "@aws-sdk/middleware-retry": "3.289.0", + "@aws-sdk/middleware-serde": "3.289.0", + "@aws-sdk/middleware-signing": "3.289.0", + "@aws-sdk/middleware-stack": "3.289.0", + "@aws-sdk/middleware-user-agent": "3.289.0", + "@aws-sdk/node-config-provider": "3.289.0", + "@aws-sdk/node-http-handler": "3.289.0", + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/smithy-client": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/url-parser": "3.289.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.289.0", + "@aws-sdk/util-defaults-mode-node": "3.289.0", + "@aws-sdk/util-endpoints": "3.289.0", + "@aws-sdk/util-retry": "3.289.0", + "@aws-sdk/util-user-agent-browser": "3.289.0", + "@aws-sdk/util-user-agent-node": "3.289.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.289.0.tgz", + "integrity": "sha512-GIpxPaEwqXC+P8wH+G4mIDnxYFJ+2SyYTrnoxb4OUH+gAkU6tybgvsv0fy+jsVD6GAWPdfU1AYk2ZjofdFiHeA==", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.289.0", + "@aws-sdk/fetch-http-handler": "3.289.0", + "@aws-sdk/hash-node": "3.289.0", + "@aws-sdk/invalid-dependency": "3.289.0", + "@aws-sdk/middleware-content-length": "3.289.0", + "@aws-sdk/middleware-endpoint": "3.289.0", + "@aws-sdk/middleware-host-header": "3.289.0", + "@aws-sdk/middleware-logger": "3.289.0", + "@aws-sdk/middleware-recursion-detection": "3.289.0", + "@aws-sdk/middleware-retry": "3.289.0", + "@aws-sdk/middleware-serde": "3.289.0", + "@aws-sdk/middleware-stack": "3.289.0", + "@aws-sdk/middleware-user-agent": "3.289.0", + "@aws-sdk/node-config-provider": "3.289.0", + "@aws-sdk/node-http-handler": "3.289.0", + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/smithy-client": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/url-parser": "3.289.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.289.0", + "@aws-sdk/util-defaults-mode-node": "3.289.0", + "@aws-sdk/util-endpoints": "3.289.0", + "@aws-sdk/util-retry": "3.289.0", + "@aws-sdk/util-user-agent-browser": "3.289.0", + "@aws-sdk/util-user-agent-node": "3.289.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.289.0.tgz", + "integrity": "sha512-+09EK4aWdNjF+5+nK6Dmlwx3es8NTkyABTOj9H4eKB90rXQVX8PjoaFhK/b+NcNKDxgb1E6k6evZEpAb8dYQHg==", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.289.0", + "@aws-sdk/fetch-http-handler": "3.289.0", + "@aws-sdk/hash-node": "3.289.0", + "@aws-sdk/invalid-dependency": "3.289.0", + "@aws-sdk/middleware-content-length": "3.289.0", + "@aws-sdk/middleware-endpoint": "3.289.0", + "@aws-sdk/middleware-host-header": "3.289.0", + "@aws-sdk/middleware-logger": "3.289.0", + "@aws-sdk/middleware-recursion-detection": "3.289.0", + "@aws-sdk/middleware-retry": "3.289.0", + "@aws-sdk/middleware-serde": "3.289.0", + "@aws-sdk/middleware-stack": "3.289.0", + "@aws-sdk/middleware-user-agent": "3.289.0", + "@aws-sdk/node-config-provider": "3.289.0", + "@aws-sdk/node-http-handler": "3.289.0", + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/smithy-client": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/url-parser": "3.289.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.289.0", + "@aws-sdk/util-defaults-mode-node": "3.289.0", + "@aws-sdk/util-endpoints": "3.289.0", + "@aws-sdk/util-retry": "3.289.0", + "@aws-sdk/util-user-agent-browser": "3.289.0", + "@aws-sdk/util-user-agent-node": "3.289.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.289.0.tgz", + "integrity": "sha512-n+8zDCzk0NvCIXX3MGS8RV/+/MkJso0jkqkPOgPcS8Kf7Zbjlx8FyeGQ5LS7HjhCDk+jExH/s9h1kd3sL1pHQA==", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.289.0", + "@aws-sdk/credential-provider-node": "3.289.0", + "@aws-sdk/fetch-http-handler": "3.289.0", + "@aws-sdk/hash-node": "3.289.0", + "@aws-sdk/invalid-dependency": "3.289.0", + "@aws-sdk/middleware-content-length": "3.289.0", + "@aws-sdk/middleware-endpoint": "3.289.0", + "@aws-sdk/middleware-host-header": "3.289.0", + "@aws-sdk/middleware-logger": "3.289.0", + "@aws-sdk/middleware-recursion-detection": "3.289.0", + "@aws-sdk/middleware-retry": "3.289.0", + "@aws-sdk/middleware-sdk-sts": "3.289.0", + "@aws-sdk/middleware-serde": "3.289.0", + "@aws-sdk/middleware-signing": "3.289.0", + "@aws-sdk/middleware-stack": "3.289.0", + "@aws-sdk/middleware-user-agent": "3.289.0", + "@aws-sdk/node-config-provider": "3.289.0", + "@aws-sdk/node-http-handler": "3.289.0", + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/smithy-client": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/url-parser": "3.289.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.289.0", + "@aws-sdk/util-defaults-mode-node": "3.289.0", + "@aws-sdk/util-endpoints": "3.289.0", + "@aws-sdk/util-retry": "3.289.0", + "@aws-sdk/util-user-agent-browser": "3.289.0", + "@aws-sdk/util-user-agent-node": "3.289.0", + "@aws-sdk/util-utf8": "3.254.0", + "fast-xml-parser": "4.1.2", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/config-resolver": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.289.0.tgz", + "integrity": "sha512-QYrBJeFJwx9wL73xMJgSTS6zY5SQh0tbZXpVlSZcNDuOufsu5zdcZZCOp0I20yGf8zxKX59u7O73OUlppkk+Wg==", + "optional": true, + "dependencies": { + "@aws-sdk/signature-v4": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/util-config-provider": "3.208.0", + "@aws-sdk/util-middleware": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.289.0.tgz", + "integrity": "sha512-RrK15OhL6UR8QKD415hggKfl8wcsMBqafcw/uYDESlvuAQVIi7hLgf5/2Onbhbc+m3huTBHY9e1D1n7u9hf9Bw==", + "optional": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.289.0.tgz", + "integrity": "sha512-h4yNEW2ZJATKVxL0Bvz/WWXUmBr+AhsTyjUNge734306lXNG5/FM7zYp2v6dSQWt02WwBXyfkP3lr+A0n4rHyA==", + "optional": true, + "dependencies": { + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-imds": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.289.0.tgz", + "integrity": "sha512-SIl+iLQpDR6HA9CKTebui7NLop5GxnCkufbM3tbSqrQcPcEfYLOwXpu5gpKO2unQzRykCoyRVia1lr7Pc9Hgdg==", + "optional": true, + "dependencies": { + "@aws-sdk/node-config-provider": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/url-parser": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.289.0.tgz", + "integrity": "sha512-kvNUn3v4FTRRiqCOXl46v51VTGOM76j5Szcrhkk9qeFW6zt4iFodp6tQ4ynDtDxYxOvjuEfm3ii1YN5nkI1uKA==", + "optional": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.289.0", + "@aws-sdk/credential-provider-imds": "3.289.0", + "@aws-sdk/credential-provider-process": "3.289.0", + "@aws-sdk/credential-provider-sso": "3.289.0", + "@aws-sdk/credential-provider-web-identity": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/shared-ini-file-loader": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.289.0.tgz", + "integrity": "sha512-05CYPGnk5cDiOQDIaXNVibNOwQdI34MDiL17YkSfPv779A+uq4vqg/aBfL41BDJjr1gSGgyvVhlcUdBKnlp93Q==", + "optional": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.289.0", + "@aws-sdk/credential-provider-imds": "3.289.0", + "@aws-sdk/credential-provider-ini": "3.289.0", + "@aws-sdk/credential-provider-process": "3.289.0", + "@aws-sdk/credential-provider-sso": "3.289.0", + "@aws-sdk/credential-provider-web-identity": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/shared-ini-file-loader": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.289.0.tgz", + "integrity": "sha512-t39CJHj1/f2DcRbEUSJ1ixwDsgaElDpJPynn59MOdNnrSh5bYuYmkrum/GYXYSsk+HoSK21JvwgvjnrkA9WZKQ==", + "optional": true, + "dependencies": { + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/shared-ini-file-loader": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.289.0.tgz", + "integrity": "sha512-8+DjOqj5JCpVdT4EJtdfis6OioAdiDKM1mvgDTG8R43MSThc+RGfzqaDJQdM+8+hzkYhxYfyI9XB0H+X3rDNsA==", + "optional": true, + "dependencies": { + "@aws-sdk/client-sso": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/shared-ini-file-loader": "3.289.0", + "@aws-sdk/token-providers": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.289.0.tgz", + "integrity": "sha512-jZ9hQvr0I7Z2DekDtZytViYn7zNNJG06N0CinAJzzvreAQ1I61rU7mhaWc05jhBSdeA3f82XoDAgxqY4xIh9pQ==", + "optional": true, + "dependencies": { + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.289.0.tgz", + "integrity": "sha512-kXNhi0s0oZ8k2cv3D5350glKutV4Lgg/hVBAAU/AnjFl5JFiZZKFpTs3N8p0MLCESipL2uCws7R0UU7uy8sKIQ==", + "optional": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.289.0", + "@aws-sdk/client-sso": "3.289.0", + "@aws-sdk/client-sts": "3.289.0", + "@aws-sdk/credential-provider-cognito-identity": "3.289.0", + "@aws-sdk/credential-provider-env": "3.289.0", + "@aws-sdk/credential-provider-imds": "3.289.0", + "@aws-sdk/credential-provider-ini": "3.289.0", + "@aws-sdk/credential-provider-node": "3.289.0", + "@aws-sdk/credential-provider-process": "3.289.0", + "@aws-sdk/credential-provider-sso": "3.289.0", + "@aws-sdk/credential-provider-web-identity": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/shared-ini-file-loader": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/fetch-http-handler": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.289.0.tgz", + "integrity": "sha512-tksh2GnDV1JaI+NO9x+pgyB3VNwjnUdtoMcFGmTDm1TrcPNj0FLX2hLiunlVG7fFMfGLXC2aco0sUra5/5US9Q==", + "optional": true, + "dependencies": { + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/querystring-builder": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/util-base64": "3.208.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/hash-node": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.289.0.tgz", + "integrity": "sha512-fL7Pt4LU+tluHn0+BSIFVD2ZVJ5fuXvd1hQt4aTYrgkna1RR5v55Hdy2rNrp/syrkyE+Wv92S3hgZ7ZTBeXFZA==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.289.0", + "@aws-sdk/util-buffer-from": "3.208.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/invalid-dependency": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.289.0.tgz", + "integrity": "sha512-VpXadvpqXFUA8gBH6TAAJzsKfEQ4IvsiD7d9b2B+jw1YtaPFTqEEuDjN6ngpad8PCPCNWl8CI6oBCdMOK+L48A==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/is-array-buffer": { + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", + "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==", + "optional": true, + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-content-length": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.289.0.tgz", + "integrity": "sha512-D7vGeuaAzKiq0aFPwme1Xy4x69Jn4v0YJ3Xa4J+keNep0yZ9LfU5KSngqsxeTefCqS+2tdaArkBN2VdexmPagw==", + "optional": true, + "dependencies": { + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-endpoint": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.289.0.tgz", + "integrity": "sha512-nxaQFOG1IurwCHWP22RxgTFZdILsdBg6wbg4GeFpNBtE3bi0zIUYKrUhpdRr/pZyGAboD1oD9iQtxuGb/M6f+w==", + "optional": true, + "dependencies": { + "@aws-sdk/middleware-serde": "3.289.0", + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/signature-v4": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/url-parser": "3.289.0", + "@aws-sdk/util-config-provider": "3.208.0", + "@aws-sdk/util-middleware": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.289.0.tgz", + "integrity": "sha512-yFBOKvKBnITO08JCx+65vXPe9Uo4gZuth/ka9v5swa4wtV8AP+kkOwFrNxSi2iAFLJ4Mg21vGQceeL0bErF6KQ==", + "optional": true, + "dependencies": { + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.289.0.tgz", + "integrity": "sha512-c5W7AlOdoyTXRoNl2yOVkhbTjp8tX0z65GDb3+/1yYcv+GRtz67WMZscWMQJwEfdCLdDE2GtBe+t2xyFGnmJvA==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.289.0.tgz", + "integrity": "sha512-r2NrfnTG0UZRXeFjoyapAake7b1rUo6SC52/UV4Pdm8cHoYMmljnaGLjiAfzt6vWv6cSVCJq1r28Ne4slAoMAg==", + "optional": true, + "dependencies": { + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-retry": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.289.0.tgz", + "integrity": "sha512-Su+iGv5mrFjVCXJmjohX00o3HzkwnhY0TDhIltgolB6ZfOqy3Dfopjj21OWtqY9VYCUiLGC4KRfeb2feyrz5BA==", + "optional": true, + "dependencies": { + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/service-error-classification": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/util-middleware": "3.289.0", + "@aws-sdk/util-retry": "3.289.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-retry/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.289.0.tgz", + "integrity": "sha512-9WzUVPEqJcvggGCk9JHXnwhj7fjuMXE/JM3gx7eMSStJCcK+3BARZ1RZnggUN4vN9iTSzdA+r0OpC1XnUGKB2g==", + "optional": true, + "dependencies": { + "@aws-sdk/middleware-signing": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/signature-v4": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-serde": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.289.0.tgz", + "integrity": "sha512-pygC+LsEBVAxOzfoxA9jgvqfO1PLivh8s2Yr/aNQOwx49fmTHMvPwRYUGDV38Du6bRYcKI6nxYqkbJFkQkRESQ==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.289.0.tgz", + "integrity": "sha512-9SLATNvibxg4hpr4ldU18LwB6AVzovONWeJLt49FKISz7ZwGF6WVJYUMWeScj4+Z51Gozi7+pUIaFn7i6N3UbA==", + "optional": true, + "dependencies": { + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/signature-v4": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/util-middleware": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-stack": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.289.0.tgz", + "integrity": "sha512-3rWx+UkV//dv/cLIrXmzIa+FZcn6n76JevGHYCTReiRpcvv+xECxgXH2crMYtzbu05WdxGYD6P0IP5tMwH0yXA==", + "optional": true, + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.289.0.tgz", + "integrity": "sha512-XPhB9mgko66BouyxA+7z7SjUaNHyr58Xe/OB8GII5R/JiR3A/lpc8+jm9gEEpjEI/HpF8jLFDnTMbgabVAHOeA==", + "optional": true, + "dependencies": { + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/node-config-provider": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.289.0.tgz", + "integrity": "sha512-rR41c3Y7MYEP8TG9X1whHyrXEXOZzi4blSDqeJflwtNt3r3HvErGZiNBdVv368ycPPuu1YRSqTkgOYNCv02vlw==", + "optional": true, + "dependencies": { + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/shared-ini-file-loader": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/node-http-handler": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.289.0.tgz", + "integrity": "sha512-zKknSaOY2GNmqH/eoZndmQWoEKhYPV0qRZtAMxuS3DVI5fipBipNzbVBaXrHRjxARx7/VLWnvNArchRoHfOlmw==", + "optional": true, + "dependencies": { + "@aws-sdk/abort-controller": "3.289.0", + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/querystring-builder": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/property-provider": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.289.0.tgz", + "integrity": "sha512-Raf4lTWPTmEGFV7Lkbfet2n/4Ybz5vQiiU45l56kgIQA88mLUuE4dshgNsM0Zb2rflsTaiN1JR2+RS/8lNtI8A==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/protocol-http": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.289.0.tgz", + "integrity": "sha512-/2jOQ3MJZx1xk6BHEOW47ItGo1tgA9cP9a2saYneon05VIV6OuYefO5pG2G0nPnImTbff++N7aioXe5XKrnorw==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/querystring-builder": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.289.0.tgz", + "integrity": "sha512-llJCS8mAJfBYBjkKeriRmBuDr2jIozrMWhJOkz95SQGFsx1sKBPQMMOV6zunwhQux8bjtjf5wYiR1TM2jNUKqQ==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.289.0", + "@aws-sdk/util-uri-escape": "3.201.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/querystring-parser": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.289.0.tgz", + "integrity": "sha512-84zXKXIYtnTCrez/gGZIGuqfUJezzaOMm7BQwnOnq/sN21ou63jF3Q+tIMhLO/EvDcvmxEOlUXN1kfMQcjEjSw==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/service-error-classification": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.289.0.tgz", + "integrity": "sha512-+d1Vlb45Bs2gbTmXpRCGQrX4AQDETjA5sx1zLvq1NZGSnTX6LdroYPtXu3dRWJwDHHQpCMN/XfFN8jTw0IzBOg==", + "optional": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/shared-ini-file-loader": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.289.0.tgz", + "integrity": "sha512-XG9Pfn3itf3Z0p6nY6UuMVMhzZb+oX7L28oyby8REl8BAwfPkcziLxXlZsBHf6KcgYDG1R6z945hvIwZhJbjvA==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.289.0.tgz", + "integrity": "sha512-IQyYHx3zp7PHxFA17YDb6WVx8ejXDxrsnKspFXgZQyoZOPfReqWQs32dcJYXff/IdSzxjwOpwBFbmIt2vbdKnQ==", + "optional": true, + "dependencies": { + "@aws-sdk/is-array-buffer": "3.201.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/util-hex-encoding": "3.201.0", + "@aws-sdk/util-middleware": "3.289.0", + "@aws-sdk/util-uri-escape": "3.201.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/smithy-client": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.289.0.tgz", + "integrity": "sha512-miPMdnv4Ivv8RN65LJ9dxzkQNHn9Tp9wzZJXwBcPqGdXyRlkWSuIOIIhhAqQoV9R9ByeshnCWBpwqlITIjNPVw==", + "optional": true, + "dependencies": { + "@aws-sdk/middleware-stack": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.289.0.tgz", + "integrity": "sha512-fzvGIfJNoLR5g24ok8cRwc9AMLXoEOyfi+eHocAF6eyfe0NWlQtpsmLe7XXx5I9yZ51lclzV49rEz9ynp243RA==", + "optional": true, + "dependencies": { + "@aws-sdk/client-sso-oidc": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/shared-ini-file-loader": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.289.0.tgz", + "integrity": "sha512-wwUC+VwoNlEkgDzK/aJG3+zeMcYRcYFQV4mbZaicYdp3v8hmkUkJUhyxuZYl/FmY46WG+DYv+/Y3NilgfsE+Wg==", + "optional": true, + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/url-parser": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.289.0.tgz", + "integrity": "sha512-rbtW3O6UBX+eWR/+UiCDNFUVwN8hp82JPy+NGv3NeOvRjBsxkKmcH4UJTHDIeT+suqTDNEdV5nz438u3dHdHrQ==", + "optional": true, + "dependencies": { + "@aws-sdk/querystring-parser": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/util-base64": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz", + "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==", + "optional": true, + "dependencies": { + "@aws-sdk/util-buffer-from": "3.208.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-body-length-browser": { + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz", + "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==", + "optional": true, + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/util-body-length-node": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz", + "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==", + "optional": true, + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-buffer-from": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", + "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==", + "optional": true, + "dependencies": { + "@aws-sdk/is-array-buffer": "3.201.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-config-provider": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz", + "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==", + "optional": true, + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-browser": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.289.0.tgz", + "integrity": "sha512-sYrDwjX3s54cvGq69PJpP2vDpJ5BJXhg2KEHbK92Qr2AUqMUgidwZCw4oBaIqKDXcPIrjmhod31s3tTfYmtTMQ==", + "optional": true, + "dependencies": { + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/types": "3.289.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-node": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.289.0.tgz", + "integrity": "sha512-PsP40+9peN7kpEmQ2GhEAGwUwD9F/R/BI/1kzjW0nbBsMrTnkUnlZlaitwpBX/OWNV/YZTdVAOvD50j/ACyXlg==", + "optional": true, + "dependencies": { + "@aws-sdk/config-resolver": "3.289.0", + "@aws-sdk/credential-provider-imds": "3.289.0", + "@aws-sdk/node-config-provider": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.289.0.tgz", + "integrity": "sha512-PmsgqL9jdNTz3p0eW83nZZGcngAdoIWidXCc32G5tIIYvJutdgkiObAaydtXaMgk5CRvjenngFf6Zg9JyVHOLQ==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-hex-encoding": { + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz", + "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==", + "optional": true, + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", + "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==", + "optional": true, + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-middleware": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.289.0.tgz", + "integrity": "sha512-hw3WHQU9Wk7a1H3x+JhwMA4ECCleeuNlob3fXSYJmXgvZyuWfpMYZi4iSkqoWGFAXYpAtZZLIu45iIcd7F296g==", + "optional": true, + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-retry": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.289.0.tgz", + "integrity": "sha512-noFn++ZKH11ExTBqUU/b9wsOjqxYlDnN/8xq+9oCsyBnEZztVgM/AM3WP5qBPRskk1WzDprID5fb5V87113Uug==", + "optional": true, + "dependencies": { + "@aws-sdk/service-error-classification": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/util-uri-escape": { + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", + "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==", + "optional": true, + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.289.0.tgz", + "integrity": "sha512-BDXYgNzzz2iNPTkl9MQf7pT4G80V6O6ICwJyH93a5EEdljl7oPrt8i4MS5S0BDAWx58LqjWtVw98GOZfy5BYhw==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.289.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.289.0.tgz", + "integrity": "sha512-f32g9KS7pwO6FQ9N1CtqQPIS6jhvwv/y0+NHNoo9zLTBH0jol3+C2ELIE3N1wB6xvwhsdPqR3WuOiNiCiv8YAQ==", + "optional": true, + "dependencies": { + "@aws-sdk/node-config-provider": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-utf8": { + "version": "3.254.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.254.0.tgz", + "integrity": "sha512-14Kso/eIt5/qfIBmhEL9L1IfyUqswjSTqO2mY7KOzUZ9SZbwn3rpxmtkhmATkRjD7XIlLKaxBkI7tU9Zjzj8Kw==", + "optional": true, + "dependencies": { + "@aws-sdk/util-buffer-from": "3.208.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "optional": true, + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz", + "integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.14.tgz", + "integrity": "sha512-w84maJ6CKl5aApCMzFll0hxtFNT6or9WwMslobKaqWUEf1K+zhlL43bSQhFreyYWIWR+Z0xnVFC1KtLm4ZpM/A==", + "dependencies": { + "@grpc/proto-loader": "^0.7.0", + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.6.tgz", + "integrity": "sha512-QyAXR8Hyh7uMDmveWxDSUcJr9NAWaZ2I6IXgAYvQmfflwouTM+rArE2eEaCtLlRqO81j7pRLCt81IefUei6Zbw==", + "dependencies": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^7.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, "node_modules/@oozcitak/dom": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.8.tgz", - "integrity": "sha512-MoOnLBNsF+ok0HjpAvxYxR4piUhRDCEWK0ot3upwOOHYudJd30j6M+LNcE8RKpwfnclAX9T66nXXzkytd29XSw==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.10.tgz", + "integrity": "sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==", "dependencies": { "@oozcitak/infra": "1.0.8", "@oozcitak/url": "1.0.4", @@ -87,37 +1398,444 @@ "node": ">=8.0" } }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, "node_modules/@types/node": { "version": "14.6.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.2.tgz", "integrity": "sha512-onlIwbaeqvZyniGPfdw/TEhKIh79pz66L1q06WUQqJLnAb6wbjvOtepLYTGHTqzdXgBYIE3ZdmqHDGsRsbBz7A==" }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, "node_modules/@types/webidl-conversions": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", - "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" }, "node_modules/@types/whatwg-url": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz", - "integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", "dependencies": { "@types/node": "*", "@types/webidl-conversions": "*" } }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.11.tgz", + "integrity": "sha512-XxuOfTkCUiOSyBWIvHlUraLw/JT/6Io1365RO6ZuI88STKMavJZPNMU0lFcUTeQXEhHiv64CbxYxBNoDVSmghg==", + "dev": true, "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.11", + "@typescript-eslint/type-utils": "5.59.11", + "@typescript-eslint/utils": "5.59.11", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.11.tgz", + "integrity": "sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.59.11", + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/typescript-estree": "5.59.11", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.11.tgz", + "integrity": "sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/visitor-keys": "5.59.11" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.11.tgz", + "integrity": "sha512-LZqVY8hMiVRF2a7/swmkStMYSoXMFlzL6sXV6U/2gL5cwnLWQgLEG8tjWPpaE4rMIdZ6VKWwcffPlo1jPfk43g==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.59.11", + "@typescript-eslint/utils": "5.59.11", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@typescript-eslint/types": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.11.tgz", + "integrity": "sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.11.tgz", + "integrity": "sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/visitor-keys": "5.59.11", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.11.tgz", + "integrity": "sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.11", + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/typescript-estree": "5.59.11", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.11.tgz", + "integrity": "sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.11", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/abort-controller-x": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/abort-controller-x/-/abort-controller-x-0.4.1.tgz", + "integrity": "sha512-lJ2ssrl3FoTK3cX/g15lRCkXFWKiwRTRtBjfwounO2EM/Q65rI/MEZsfsch1juWU2pH2aLSaq0HGowlDP/imrw==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -134,23 +1852,38 @@ } }, "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, "node_modules/append-field": { @@ -159,20 +1892,6 @@ "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=", "dev": true }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -194,6 +1913,20 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "node_modules/array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/arraybuffer-to-string": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/arraybuffer-to-string/-/arraybuffer-to-string-1.0.2.tgz", @@ -216,9 +1949,9 @@ } }, "node_modules/async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "node_modules/asynckit": { @@ -237,7 +1970,83 @@ "node_modules/atob-lite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", - "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=" + "integrity": "sha512-LEeSAWeh2Gfa2FtlQE1shxQ8zi5F9GHarrGKz08TMdODD5T4eH6BMsvtnhbWZ+XQn+Gb6om/917ucvRu7l7ukw==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sdk": { + "version": "2.1192.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1192.0.tgz", + "integrity": "sha512-6uzrlG1Ow3qcOnL0+et+DBTGhYgJzgNydVvos1Eg01vPc/ZhxR7roZ3epZQcPmOR0thQuzzckTq7FBO6wzZA2w==", + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.4.19" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-sdk/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/aws-sdk/node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/aws-sdk/node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" + }, + "node_modules/aws-sdk/node_modules/uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/aws-sdk/node_modules/xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "node_modules/aws-sdk/node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==", + "engines": { + "node": ">=4.0" + } }, "node_modules/aws-sign2": { "version": "0.7.0", @@ -253,9 +2062,9 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "node_modules/base64-js": { @@ -296,62 +2105,26 @@ "tweetnacl": "^0.14.3" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bmp-js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", - "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" - }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/bson": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.6.0.tgz", - "integrity": "sha512-8jw1NU1hglS+Da1jDOUYuNcBJ4cNHCFIqzlwoFNnsTOg2R/ox0aTYcTiBN4dzRa9q7Cvy6XErh3L8ReTEb9AQQ==", - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/buffer": { + "node_modules/bl/node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", @@ -374,21 +2147,186 @@ "ieee754": "^1.1.13" } }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "optional": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brfs": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", + "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", + "dependencies": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^3.0.2", + "through2": "^2.0.0" + }, + "bin": { + "brfs": "bin/cmd.js" + } + }, + "node_modules/bson": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", + "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==", + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/bson/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "peer": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==" }, "node_modules/buffer-to-uint8array": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/buffer-to-uint8array/-/buffer-to-uint8array-1.1.0.tgz", - "integrity": "sha1-z29BKHwCL0WNp1LDkcGo1TXsX3I=" + "integrity": "sha512-JVTSbtA6YuOGdu5NL0ffizsBwuwbTXfV7OC91FhazMz9UKP/KlDS+Z7wuiSRClbnTQz52fJgVXI9YDXQRVl2sQ==" }, "node_modules/busboy": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", - "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "integrity": "sha512-InWFDomvlkEj+xWLBfU3AvnbVYqeTWmQopiW0tWWEy5yehYm2YkGEc59sUmw/4ty5Zj/b0WHGs1LgecuBSBGrg==", "dev": true, "dependencies": { "dicer": "0.2.5", @@ -423,30 +2361,92 @@ "dev": true }, "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/chownr": { @@ -454,16 +2454,21 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, - "node_modules/clamp": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", - "integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ=" - }, "node_modules/clip-pixels": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/clip-pixels/-/clip-pixels-1.0.1.tgz", "integrity": "sha512-nJ22fZvCwkJfMppkOEE7GciLX08rDnVzEJ+U46kBFZtwNzH2V4tNxMWa9Tc365WspCxy1c3NtGJ5EeT4SgjmCA==" }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", @@ -473,40 +2478,38 @@ "node": ">=0.8" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -531,29 +2534,25 @@ "node": ">= 0.8" } }, - "node_modules/compute-dims": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/compute-dims/-/compute-dims-1.1.0.tgz", - "integrity": "sha512-YHMiIKjH/8Eom8zATk3g8/lH3HxGCZcVQyEfEoVrfWI7od/WRpTgRGShnei3jArYSx77mQqPxZNokjGHCdLfxg==", - "dependencies": { - "utils-copy": "^1.0.0", - "validate.io-array": "^1.0.6", - "validate.io-matrix-like": "^1.0.2", - "validate.io-ndarray-like": "^1.0.0", - "validate.io-positive-integer": "^1.0.0" + "node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" } }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "node_modules/concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, "engines": [ "node >= 0.8" ], @@ -564,32 +2563,36 @@ "typedarray": "^0.0.6" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "node_modules/const-max-uint32": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/const-max-uint32/-/const-max-uint32-1.0.2.tgz", - "integrity": "sha1-8Am7YjDmeO2HTdLWqc2ePL+rtnY=" - }, - "node_modules/const-pinf-float64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/const-pinf-float64/-/const-pinf-float64-1.0.0.tgz", - "integrity": "sha1-9u+w15+cCYbT558pI6v5twtj1yY=" - }, "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dependencies": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" }, "engines": { "node": ">= 0.6" } }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", @@ -598,6 +2601,11 @@ "node": ">= 0.6" } }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, "node_modules/cookie": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", @@ -628,17 +2636,49 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "node_modules/dank-each": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dank-each/-/dank-each-1.0.0.tgz", - "integrity": "sha1-qGE0Okso02IgPUBcd4ZNyaZANzA=", - "dev": true + "node_modules/crc": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/crc/-/crc-4.3.2.tgz", + "integrity": "sha512-uGDHf4KLLh2zsHa8D8hIQ1H/HtFQhyHrc0uhHBcoKGol/Xnb+MPYfUMw7cvON6ze/GUESTudKayDcJC5HnJv1A==", + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "buffer": ">=6.0.3" + }, + "peerDependenciesMeta": { + "buffer": { + "optional": true + } + } }, - "node_modules/dank-map": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dank-map/-/dank-map-0.1.0.tgz", - "integrity": "sha1-6Z5384LGjy5asrPzqCuAMZV1Kag=", - "dev": true + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==" }, "node_modules/dashdash": { "version": "1.14.1", @@ -651,6 +2691,18 @@ "node": ">=0.10" } }, + "node_modules/date-fns": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -660,14 +2712,17 @@ } }, "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dependencies": { - "mimic-response": "^2.0.0" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/deep-extend": { @@ -678,6 +2733,11 @@ "node": ">=4.0.0" } }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, "node_modules/defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", @@ -687,6 +2747,21 @@ "clone": "^1.0.2" } }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -695,47 +2770,35 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "node_modules/denque": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", - "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==", - "engines": { - "node": ">=0.10" - } - }, "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", "engines": { - "node": ">=0.10" + "node": ">=8" } }, "node_modules/dicer": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", - "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "integrity": "sha512-FDvbtnq7dzlPz0wyYlOExifDEZcu8h+rErEXgfxqmLfRfC/kJidEFh4+effJRO3P0xmfqyPbSMG0LveNRfTKVg==", "dev": true, "dependencies": { "readable-stream": "1.1.x", @@ -769,14 +2832,46 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/dtype": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", - "integrity": "sha1-zQUjI84GFETs0uj1dI9popvihDQ=", + "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==", "engines": { "node": ">= 0.8.0" } }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -792,12 +2887,12 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/ejs": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.5.tgz", - "integrity": "sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", "dev": true, "dependencies": { - "jake": "^10.6.1" + "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" @@ -806,10 +2901,15 @@ "node": ">=0.10.0" } }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } @@ -822,18 +2922,406 @@ "once": "^1.4.0" } }, + "node_modules/es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-set": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-set/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint": { + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz", + "integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.42.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, "node_modules/esprima": { @@ -848,14 +3336,94 @@ "node": ">=4" } }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { "node": ">= 0.6" } }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -865,37 +3433,38 @@ } }, "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dependencies": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -904,6 +3473,17 @@ "node": ">= 0.10.0" } }, + "node_modules/express-rate-limit": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.7.0.tgz", + "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA==", + "engines": { + "node": ">= 12.9.0" + }, + "peerDependencies": { + "express": "^4 || ^5" + } + }, "node_modules/express-slow-down": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/express-slow-down/-/express-slow-down-1.4.0.tgz", @@ -919,6 +3499,57 @@ "integrity": "sha1-mQ75eUC39MKCPZWTZIt5voWKY4s=", "dev": true }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -937,11 +3568,81 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fast-xml-parser": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz", + "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==", + "optional": true, + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/file-type": { "version": "10.11.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", @@ -950,38 +3651,111 @@ "node": ">=6" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true - }, "node_modules/filelist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz", - "integrity": "sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, "dependencies": { - "minimatch": "^3.0.4" + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "node_modules/flatten-vertex-data": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz", @@ -995,6 +3769,14 @@ "resolved": "https://registry.npmjs.org/flip-pixels/-/flip-pixels-1.0.2.tgz", "integrity": "sha512-oXbJGbjDnfJRWPC7Va38EFhd+A8JWE5/hCiKcK8qjCdbLj9DTpsq6MEudwpRTH+V4qq+Jw7d3pUgQdSr3x3mTA==" }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -1017,9 +3799,9 @@ } }, "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "engines": { "node": ">= 0.6" } @@ -1027,7 +3809,7 @@ "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } @@ -1051,19 +3833,95 @@ "node": ">=10" } }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/getpass": { @@ -1077,13 +3935,92 @@ "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -1105,19 +4042,69 @@ "node": ">=6" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, "engines": { - "node": ">=4" + "node": ">= 0.4.0" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/hashmap": { "version": "2.4.0", @@ -1127,29 +4114,19 @@ "node": "*" } }, - "node_modules/hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", - "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/http-signature": { @@ -1196,27 +4173,49 @@ } ] }, - "node_modules/image-decode": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/image-decode/-/image-decode-1.2.2.tgz", - "integrity": "sha512-WJSWrPNmEnWVYGkY22bA6206MKYjfGl01fdlwIp6ovdnPL2qGJyC3wQj8QqYbdblchzwgglFg8Jcb/1f6fhaTQ==", - "dependencies": { - "bmp-js": "^0.1.0", - "buffer-to-uint8array": "^1.1.0", - "image-type": "^3.0.0", - "jpeg-js": "^0.3.4", - "omggif": "^1.0.9", - "pngjs": "^3.3.3", - "to-array-buffer": "^3.0.0", - "utif": "^2.0.1" + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" } }, - "node_modules/image-decode/node_modules/jpeg-js": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz", - "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==" + "node_modules/image-pixels": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-pixels/-/image-pixels-1.1.1.tgz", + "integrity": "sha512-NQgoJVHiOWfmQnkEPSvOD8iuKUfm3AUXKdelCN8tQWT9NtwOd5qHofUci0Fcua6d28eq4gBXRKz7MQd8QK53rg==", + "dependencies": { + "arr-flatten": "^1.1.0", + "arraybuffer-to-string": "^1.0.2", + "bmp-js": "^0.1.0", + "brfs": "^2.0.1", + "buffer-to-arraybuffer": "0.0.5", + "buffer-to-uint8array": "^1.1.0", + "clip-pixels": "^1.0.1", + "es6-weak-map": "^2.0.2", + "flip-pixels": "^1.0.1", + "image-type": "^3.0.0", + "is-base64": "0.0.6", + "is-blob": "^2.0.0", + "is-browser": "^2.1.0", + "is-buffer": "^2.0.3", + "is-plain-obj": "^1.1.0", + "is-promise": "^2.1.0", + "is-url": "^1.2.4", + "jpeg-js": "^0.3.4", + "object-assign": "^4.1.1", + "omggif": "^1.0.9", + "parse-rect": "^1.2.0", + "pngjs": "^3.3.3", + "primitive-pool": "^1.1.0", + "request": "^2.88.0", + "string-to-arraybuffer": "^1.0.1", + "to-array-buffer": "^2.1.0" + } }, - "node_modules/image-decode/node_modules/pngjs": { + "node_modules/image-pixels/node_modules/pngjs": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", @@ -1224,36 +4223,6 @@ "node": ">=4.0.0" } }, - "node_modules/image-pixels": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/image-pixels/-/image-pixels-2.2.2.tgz", - "integrity": "sha512-jcHECwLUEUBMQLqpZF0Bs0ac/jvZXs/97JwD6J39rP98vgTyvvNKhUjYaWf+BSKKPYXfenctOQV95sDC7Z/aZQ==", - "dependencies": { - "arr-flatten": "^1.1.0", - "arraybuffer-to-string": "^1.0.2", - "clip-pixels": "^1.0.1", - "flip-pixels": "^1.0.1", - "image-decode": "^1.1.0", - "image-type": "^3.0.0", - "is-base64": "^0.1.0", - "is-blob": "^2.0.0", - "is-browser": "^2.1.0", - "is-buffer": "^2.0.3", - "is-float-array": "^1.0.0", - "is-plain-obj": "^1.1.0", - "is-promise": "^2.1.0", - "is-relative": "^1.0.0", - "is-url": "^1.2.4", - "object-assign": "^4.1.1", - "parse-rect": "^1.2.0", - "primitive-pool": "^1.1.0", - "pxls": "^2.3.2", - "request": "^2.88.0", - "to-array-buffer": "^3.1.1", - "to-uint8": "^1.4.0", - "weak-map": "^1.0.5" - } - }, "node_modules/image-type": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/image-type/-/image-type-3.1.0.tgz", @@ -1265,16 +4234,69 @@ "node": ">=6" } }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -1283,15 +4305,53 @@ "node": ">= 0.10" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "node_modules/is-base64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-0.1.0.tgz", - "integrity": "sha512-WRRyllsGXJM7ZN7gPTCCQ/6wNPTRDwiWdPK66l5sJzcU/oOzcIcRRf0Rux8bkpox/1yjt0F6VJRsQOIG2qz5sg==" + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-0.0.6.tgz", + "integrity": "sha512-u1cuGk5DbKVfoKvqtF+nV4a4VWN+0npvTuOzyEcScqriIJbQrExdEr2lVkqt3pCIgW5aS7hI1Us9qYaK4FXrZQ==" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/is-blob": { "version": "2.1.0", @@ -1304,6 +4364,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-browser": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-browser/-/is-browser-2.1.0.tgz", @@ -1331,22 +4406,128 @@ "node": ">=4" } }, - "node_modules/is-float-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-float-array/-/is-float-array-1.0.0.tgz", - "integrity": "sha512-4ew1Sx6B6kEAl3T3NOM0yB94J3NZnBdNt4paw0e8nY73yHHTeTEhyQ3Lj7EQEnv5LD+GxNTaT4L46jcKjjpLiQ==" + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dependencies": { - "number-is-nan": "^1.0.0" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" }, "engines": { "node": ">=0.10.0" } }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -1360,15 +4541,76 @@ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { - "is-unc-path": "^1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-typedarray": { @@ -1376,38 +4618,32 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dependencies": { - "unc-path-regex": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-url": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "node_modules/isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "dev": true, - "dependencies": { - "punycode": "2.x.x" - }, - "engines": { - "node": ">=4.0.0" - } + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/isstream": { "version": "0.1.2", @@ -1415,13 +4651,13 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "node_modules/jake": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", - "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", "dev": true, "dependencies": { - "async": "0.9.x", - "chalk": "^2.4.2", + "async": "^3.2.3", + "chalk": "^4.0.2", "filelist": "^1.0.1", "minimatch": "^3.0.4" }, @@ -1429,33 +4665,21 @@ "jake": "bin/cli.js" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/joi": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", - "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", - "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", - "dev": true, - "dependencies": { - "hoek": "5.x.x", - "isemail": "3.x.x", - "topo": "3.x.x" - }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", "engines": { - "node": ">=8.9.0" + "node": ">= 0.6.0" } }, - "node_modules/joi/node_modules/hoek": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", - "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", - "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", - "dev": true, - "engines": { - "node": ">=8.9.0" - } + "node_modules/jpeg-js": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz", + "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==" }, "node_modules/js-yaml": { "version": "3.14.0", @@ -1475,15 +4699,21 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -1509,23 +4739,58 @@ } }, "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "engines": [ - "node >=0.6.0" - ], + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" } }, "node_modules/kareem": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", - "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, "node_modules/lodash.foreach": { "version": "4.5.0", @@ -1542,6 +4807,11 @@ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -1553,6 +4823,14 @@ "node": ">=10" } }, + "node_modules/magic-string": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "dependencies": { + "sourcemap-codec": "^1.4.1" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1577,6 +4855,31 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "node_modules/merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -1585,6 +4888,19 @@ "node": ">= 0.6" } }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -1597,39 +4913,39 @@ } }, "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "mime-db": "1.44.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -1639,9 +4955,12 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/mkdirp": { "version": "0.5.5", @@ -1661,52 +4980,51 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", "engines": { "node": "*" } }, "node_modules/mongodb": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.1.4.tgz", - "integrity": "sha512-Cv/sk8on/tpvvqbEvR1h03mdyNdyvvO+WhtFlL4jrZ+DSsN/oSQHVqmJQI/sBCqqbOArFcYCAYDfyzqFwV4GSQ==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.14.0.tgz", + "integrity": "sha512-coGKkWXIBczZPr284tYKFLg+KbGPPLlSbdgfKAb6QqCFt5bo5VFZ50O3FFzsw4rnkqjwT6D8Qcoo9nshYKM7Mg==", "dependencies": { - "bson": "^4.5.4", - "denque": "^2.0.1", - "mongodb-connection-string-url": "^2.1.0" + "bson": "^4.7.0", + "mongodb-connection-string-url": "^2.5.4", + "socks": "^2.7.1" }, "engines": { "node": ">=12.9.0" }, "optionalDependencies": { + "@aws-sdk/credential-providers": "^3.186.0", "saslprep": "^1.0.3" } }, "node_modules/mongodb-connection-string-url": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.2.0.tgz", - "integrity": "sha512-U0cDxLUrQrl7DZA828CA+o69EuWPWEJTwdMPozyd7cy/dbtncUZczMw7wRHcwMD7oKOn0NM2tF9jdf5FFVW9CA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", "dependencies": { "@types/whatwg-url": "^8.2.1", "whatwg-url": "^11.0.0" } }, "node_modules/mongoose": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.0.13.tgz", - "integrity": "sha512-/M/YKgx23fCX+j0lwObaHbCibXnMjyWeQrXZf0WaQeS/hL86wQVSmaOxh+kZXfyLOUr+vT2Hl44o50GZHUrKWw==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.10.2.tgz", + "integrity": "sha512-9/AbheG2PiVVBWLx3S6LgCIEQNdMppjdnp/WH9nLGjFzjJeb9LiHNPEtsOGOm8qXmuICHMdbn5iUFAsLWWvpEw==", "dependencies": { - "bson": "^4.2.2", - "kareem": "2.3.2", - "mongodb": "4.1.4", - "mpath": "0.8.4", - "mquery": "4.0.0", - "ms": "2.1.2", - "regexp-clone": "1.0.0", - "sift": "13.5.2", - "sliced": "1.0.1" + "bson": "^4.7.0", + "kareem": "2.5.1", + "mongodb": "4.14.0", + "mpath": "0.9.0", + "mquery": "4.0.3", + "ms": "2.1.3", + "sift": "16.0.1" }, "engines": { "node": ">=12.0.0" @@ -1735,9 +5053,9 @@ } }, "node_modules/mongoose/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/morgan": { "version": "1.10.0", @@ -1754,39 +5072,29 @@ "node": ">= 0.8.0" } }, - "node_modules/morgan/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/mpath": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", - "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", "engines": { "node": ">=4.0.0" } }, "node_modules/mquery": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.0.tgz", - "integrity": "sha512-nGjm89lHja+T/b8cybAby6H0YgA4qYC/lx6UlwvHGqvTq8bDaNeCwl1sY8uRELrNbVWJzIihxVd+vphGGn1vBw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz", + "integrity": "sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==", "dependencies": { - "debug": "4.x", - "regexp-clone": "^1.0.0", - "sliced": "1.0.1" + "debug": "4.x" }, "engines": { "node": ">=12.0.0" } }, "node_modules/mquery/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -1810,15 +5118,16 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/multer": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", - "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", + "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", + "deprecated": "Multer 1.x is affected by CVE-2022-24434. This is fixed in v1.4.4-lts.1 which drops support for versions of Node.js before 6. Please upgrade to at least Node.js 6 and version 1.4.4-lts.1 of Multer. If you need support for older versions of Node.js, we are open to accepting patches that would fix the CVE on the main 1.x release line, whilst maintaining compatibility with Node.js 0.10.", "dev": true, "dependencies": { "append-field": "^1.0.0", "busboy": "^0.2.11", "concat-stream": "^1.5.2", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.4", "object-assign": "^4.1.1", "on-finished": "^2.3.0", "type-is": "^1.6.4", @@ -1828,48 +5137,82 @@ "node": ">= 0.10.0" } }, - "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "dev": true + "node_modules/mylas": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/mylas/-/mylas-2.1.13.tgz", + "integrity": "sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==", + "dev": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/raouldeheer" + } }, "node_modules/napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { "node": ">= 0.6" } }, - "node_modules/node-abi": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.26.0.tgz", - "integrity": "sha512-ag/Vos/mXXpWLLAYWsAoQdgS+gW7IwvgMLOgqopm/DbzAjazLltzgzpVMsFlgmo9TzG5hGXeaBZx2AI731RIsQ==", + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/nice-grpc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/nice-grpc/-/nice-grpc-2.1.4.tgz", + "integrity": "sha512-ZCSnFxg/k6PM1zZ2u/SbuySTrpK7q4klwRE4ymAdiMfZM3Rl1LRUdqUslKSbSjd9XQHzi80Y5JJL5fE58lSrVA==", "dependencies": { - "semver": "^5.4.1" + "@grpc/grpc-js": "^1.7.3", + "abort-controller-x": "^0.4.0", + "nice-grpc-common": "^2.0.2" + } + }, + "node_modules/nice-grpc-common": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/nice-grpc-common/-/nice-grpc-common-2.0.2.tgz", + "integrity": "sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ==", + "dependencies": { + "ts-error": "^1.0.6" + } + }, + "node_modules/node-abi": { + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.33.0.tgz", + "integrity": "sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" } }, "node_modules/node-addon-api": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", - "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==" - }, - "node_modules/node-expat": { - "version": "2.3.18", - "resolved": "https://registry.npmjs.org/node-expat/-/node-expat-2.3.18.tgz", - "integrity": "sha512-9dIrDxXePa9HSn+hhlAg1wXkvqOjxefEbMclGxk2cEnq/Y3U7Qo5HNNqeo3fQ4bVmLhcdt3YN1TZy7WMZy4MHw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.13.2" - } + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" }, "node_modules/node-rsa": { "version": "1.1.1", @@ -1884,26 +5227,11 @@ "resolved": "https://registry.npmjs.org/node-snowflake/-/node-snowflake-0.0.1.tgz", "integrity": "sha1-C+XqvVsRMfY55j6JxfgtqoFLOrk=" }, - "node_modules/noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" - }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -1924,6 +5252,14 @@ "node": ">=0.10.0" } }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -1932,15 +5268,21 @@ "node": ">= 0.4" } }, - "node_modules/object-to-xml": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/object-to-xml/-/object-to-xml-2.0.0.tgz", - "integrity": "sha512-bArXy7WCF1V9R88/zF9adSZSeFQnFmmKhMqNuNLAxqrbkvzcWP8HgnaRCcVJsfvIgvpdHiYd0qzJi7LM7QFfcQ==", - "dev": true, + "node_modules/object.assign": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.3.tgz", + "integrity": "sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA==", "dependencies": { - "dank-each": "^1.0.0", - "dank-map": "~0.1.0", - "sanitizer": "0.1.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/omggif": { @@ -1970,16 +5312,74 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pako": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.2.tgz", "integrity": "sha512-9e8DRI3+dRLomCmMBAH30B2ejh+blwXr7VmMEx/pVFZlSDA7oyI8uKMhKXr8IrZpoxBF2YlxUvhqRXzTT1i0NA==" }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parse-rect": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/parse-rect/-/parse-rect-1.2.0.tgz", @@ -1996,11 +5396,52 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -2011,6 +5452,27 @@ "resolved": "https://registry.npmjs.org/pick-by-alias/-/pick-by-alias-1.2.0.tgz", "integrity": "sha1-X3yysfIabh6ISgyHhVqko3NhEHs=" }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/plimit-lit": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/plimit-lit/-/plimit-lit-1.5.0.tgz", + "integrity": "sha512-Eb/MqCb1Iv/ok4m1FqIXqvUKPISufcjZ605hl3KM/n8GaX8zfhtgdLwZU3vKjuHGh2O9Rjog/bHTq8ofIShdng==", + "dev": true, + "dependencies": { + "queue-lit": "^1.5.0" + } + }, "node_modules/pngjs": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", @@ -2020,22 +5482,20 @@ } }, "node_modules/prebuild-install": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.2.tgz", - "integrity": "sha512-PzYWIKZeP+967WuKYXlTOhYBgGOvTRSfaKI89XnfJ0ansRAH7hDU45X+K+FZeI1Wb/7p/NnuctPH3g0IqKUuSQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", "dependencies": { - "detect-libc": "^1.0.3", + "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", + "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", - "simple-get": "^3.0.3", + "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, @@ -2043,9 +5503,33 @@ "prebuild-install": "bin.js" }, "engines": { - "node": ">=6" + "node": ">=10" } }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretendo-grpc": { + "name": "pretendo-grpc-ts", + "version": "1.0.0", + "resolved": "git+ssh://git@github.com/PretendoNetwork/grpc-ts.git#b7bcb0d691cec3f88ff0627cb7431c14dd2d2d1d", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "long": "^5.2.1", + "protobufjs": "^7.2.3" + } + }, + "node_modules/pretendo-grpc/node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, "node_modules/primitive-pool": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/primitive-pool/-/primitive-pool-1.1.0.tgz", @@ -2056,12 +5540,40 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "node_modules/protobufjs": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.3.tgz", + "integrity": "sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==", + "hasInstallScript": true, "dependencies": { - "forwarded": "~0.1.2", + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/protobufjs/node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" }, "engines": { @@ -2090,25 +5602,66 @@ "node": ">=6" } }, - "node_modules/pxls": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/pxls/-/pxls-2.3.2.tgz", - "integrity": "sha512-pQkwgbLqWPcuES5iEmGa10OlCf5xG0blkIF3dg7PpRZShbTYcvAdfFfGL03SMrkaSUaa/V0UpN9HWg40O2AIIw==", - "dependencies": { - "arr-flatten": "^1.1.0", - "compute-dims": "^1.1.0", - "flip-pixels": "^1.0.2", - "is-browser": "^2.1.0", - "is-buffer": "^2.0.3", - "to-uint8": "^1.4.1" - } - }, "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue-lit": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/queue-lit/-/queue-lit-1.5.0.tgz", + "integrity": "sha512-IslToJ4eiCEE9xwMzq3viOO5nH8sUWUCwoElrhNMozzr9IIt2qqvB4I+uHu/zJTQVqc9R5DFwok4ijNK1pU3fA==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "dependencies": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + }, + "bin": { + "quote-stream": "bin/cmd.js" } }, "node_modules/range-parser": { @@ -2120,12 +5673,12 @@ } }, "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -2161,15 +5714,33 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/regex-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regex-regex/-/regex-regex-1.0.0.tgz", - "integrity": "sha1-kEih6uuHD01IDavHb8Qs3MC8OnI=" + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } }, - "node_modules/regexp-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", - "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/request": { "version": "2.88.2", @@ -2203,13 +5774,94 @@ } }, "node_modules/request/node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "engines": { "node": ">=0.6" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -2220,12 +5872,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/sanitizer": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/sanitizer/-/sanitizer-0.1.3.tgz", - "integrity": "sha1-1PCvdHXZp7ryqeWmEXGLqheKOeE=", - "dev": true - }, "node_modules/saslprep": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", @@ -2243,92 +5889,24 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, + "node_modules/scope-analyzer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", + "dependencies": { + "array-from": "^2.1.1", + "dash-ast": "^2.0.1", + "es6-map": "^0.1.5", + "es6-set": "^0.1.5", + "es6-symbol": "^3.1.1", + "estree-is-function": "^1.0.0", + "get-assigned-identifiers": "^1.1.0" + } + }, "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "node_modules/sharp": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.28.1.tgz", - "integrity": "sha512-4mCGMEN4ntaVuFGwHx7FvkJQkIgbI+S+F9a3bI7ugdvKjPr4sF7/ibvlRKhJyzhoQi+ODM+XYY1de8xs7MHbfA==", - "hasInstallScript": true, - "dependencies": { - "color": "^3.1.3", - "detect-libc": "^1.0.3", - "node-addon-api": "^3.1.0", - "prebuild-install": "^6.1.1", - "semver": "^7.3.5", - "simple-get": "^3.1.0", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/sharp/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2339,15 +5917,129 @@ "node": ">=10" } }, - "node_modules/sift": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", - "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==" + }, + "node_modules/sharp": { + "version": "0.31.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.31.3.tgz", + "integrity": "sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==", + "hasInstallScript": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.1", + "node-addon-api": "^5.0.0", + "prebuild-install": "^7.1.1", + "semver": "^7.3.8", + "simple-get": "^4.0.1", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" }, "node_modules/simple-concat": { "version": "1.0.1", @@ -2369,11 +6061,25 @@ ] }, "node_modules/simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "decompress-response": "^4.2.0", + "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } @@ -2381,20 +6087,61 @@ "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "dependencies": { "is-arrayish": "^0.3.1" } }, - "node_modules/sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" }, "node_modules/sparse-bitfield": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", "optional": true, "dependencies": { "memory-pager": "^1.0.2" @@ -2403,7 +6150,7 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/sshpk": { "version": "1.16.1", @@ -2429,12 +6176,41 @@ "node": ">=0.10.0" } }, + "node_modules/static-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", + "dependencies": { + "escodegen": "^1.11.1" + } + }, + "node_modules/static-module": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", + "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", + "dependencies": { + "acorn-node": "^1.3.0", + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "^1.11.1", + "has": "^1.0.1", + "magic-string": "0.25.1", + "merge-source-map": "1.0.4", + "object-inspect": "^1.6.0", + "readable-stream": "~2.3.3", + "scope-analyzer": "^2.0.1", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.5", + "through2": "~2.0.3" + } + }, "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/streamsearch": { @@ -2463,48 +6239,96 @@ "is-base64": "^0.1.0" } }, + "node_modules/string-to-arraybuffer/node_modules/is-base64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-0.1.0.tgz", + "integrity": "sha512-WRRyllsGXJM7ZN7gPTCCQ/6wNPTRDwiWdPK66l5sJzcU/oOzcIcRRf0Rux8bkpox/1yjt0F6VJRsQOIG2qz5sg==" + }, "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "engines": { "node": ">=0.10.0" } }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "optional": true + }, "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/tar-fs": { @@ -2533,25 +6357,10 @@ "node": ">=6" } }, - "node_modules/tar-stream/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/tar-stream/node_modules/bl/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -2561,6 +6370,12 @@ "node": ">= 6" } }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, "node_modules/tga": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tga/-/tga-1.0.4.tgz", @@ -2572,53 +6387,45 @@ "node": ">=6.0.0" } }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, "node_modules/to-array-buffer": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/to-array-buffer/-/to-array-buffer-3.2.0.tgz", - "integrity": "sha512-zN33mwi0gpL+7xW1ITLfJ48CEj6ZQW0ZAP0MU+2W3kEY0PAIncyuxmD4OqkUVhPAbTP7amq9j/iwvZKYS+lzSQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/to-array-buffer/-/to-array-buffer-2.2.2.tgz", + "integrity": "sha512-ZLcA71btdGxBs6WH2559ybYfoQ23756bZACcU9pIUwbBJ4Bwr1DHW96XfXQoKSk87pYo9zp2VsWrcX+At988Bw==", "dependencies": { "flatten-vertex-data": "^1.0.2", "is-blob": "^2.0.1", "string-to-arraybuffer": "^1.0.0" } }, - "node_modules/to-uint8": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/to-uint8/-/to-uint8-1.4.1.tgz", - "integrity": "sha512-o+ochsMlTZyucbww8It401FC2Rx+OP2RpDeYbA6h+y9HgedDl1UjdsJ9CmzKEG7AFP9es5PmJ4eDWeeeXihESg==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "clamp": "^1.0.1", - "is-base64": "^0.1.0", - "is-float-array": "^1.0.0", - "to-array-buffer": "^3.0.0" + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "engines": { "node": ">=0.6" } }, - "node_modules/topo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", - "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", - "deprecated": "This module has moved and is now available at @hapi/topo. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", - "dev": true, - "dependencies": { - "hoek": "6.x.x" - } - }, - "node_modules/topo/node_modules/hoek": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", - "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", - "deprecated": "This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.", - "dev": true - }, "node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -2642,6 +6449,55 @@ "node": ">=12" } }, + "node_modules/ts-error": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/ts-error/-/ts-error-1.0.6.tgz", + "integrity": "sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==" + }, + "node_modules/tsc-alias": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/tsc-alias/-/tsc-alias-1.8.6.tgz", + "integrity": "sha512-vq+i6VpE83IeMsSJVcFN03ZBofADhr8/gIJXjxpbnTRfN/MFXy0+SBaKG2o7p95QqXBGkeG98HYz3IkOOveFbg==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.3", + "commander": "^9.0.0", + "globby": "^11.0.4", + "mylas": "^2.1.9", + "normalize-path": "^3.0.0", + "plimit-lit": "^1.2.6" + }, + "bin": { + "tsc-alias": "dist/bin/index.js" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "optional": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -2658,6 +6514,34 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -2670,23 +6554,36 @@ "node": ">= 0.6" } }, - "node_modules/type-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/type-name/-/type-name-2.0.2.tgz", - "integrity": "sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q=" - }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "node_modules/typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=0.10.0" + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/universalify": { @@ -2700,7 +6597,7 @@ "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "engines": { "node": ">= 0.8" } @@ -2713,58 +6610,38 @@ "punycode": "^2.1.0" } }, - "node_modules/utif": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", - "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", "dependencies": { - "pako": "^1.0.5" + "punycode": "1.3.2", + "querystring": "0.2.0" } }, - "node_modules/utif/node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + }, + "node_modules/util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "node_modules/utils-copy": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/utils-copy/-/utils-copy-1.1.1.tgz", - "integrity": "sha1-biuXmCqozXPhGCo+b4vsPA9AWKc=", - "dependencies": { - "const-pinf-float64": "^1.0.0", - "object-keys": "^1.0.9", - "type-name": "^2.0.0", - "utils-copy-error": "^1.0.0", - "utils-indexof": "^1.0.0", - "utils-regex-from-string": "^1.0.0", - "validate.io-array": "^1.0.3", - "validate.io-buffer": "^1.0.1", - "validate.io-nonnegative-integer": "^1.0.0" - } - }, - "node_modules/utils-copy-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-copy-error/-/utils-copy-error-1.0.1.tgz", - "integrity": "sha1-eR3jk8DwmJCv1Z88vqY18HmpT6U=", - "dependencies": { - "object-keys": "^1.0.9", - "utils-copy": "^1.1.0" - } - }, - "node_modules/utils-indexof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-indexof/-/utils-indexof-1.0.0.tgz", - "integrity": "sha1-IP6r8J7xAYtSNkPoOA57yD7GG1w=", - "dependencies": { - "validate.io-array-like": "^1.0.1", - "validate.io-integer-primitive": "^1.0.0" - } - }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -2773,15 +6650,6 @@ "node": ">= 0.4.0" } }, - "node_modules/utils-regex-from-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-regex-from-string/-/utils-regex-from-string-1.0.0.tgz", - "integrity": "sha1-/hopCfjeD/DVGCyA+8ZU1qaH0Yk=", - "dependencies": { - "regex-regex": "^1.0.0", - "validate.io-string-primitive": "^1.0.0" - } - }, "node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -2791,82 +6659,6 @@ "uuid": "bin/uuid" } }, - "node_modules/validate.io-array": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", - "integrity": "sha1-W1osr9j4uFq7L4hroVPy2Tond00=" - }, - "node_modules/validate.io-array-like": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/validate.io-array-like/-/validate.io-array-like-1.0.2.tgz", - "integrity": "sha1-evn363tRcVvrIhVmjsXM5U+t21o=", - "dependencies": { - "const-max-uint32": "^1.0.2", - "validate.io-integer-primitive": "^1.0.0" - } - }, - "node_modules/validate.io-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/validate.io-buffer/-/validate.io-buffer-1.0.2.tgz", - "integrity": "sha1-hS1nNAIZFNXROvwyUxdh43IO1E4=" - }, - "node_modules/validate.io-integer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", - "integrity": "sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg=", - "dependencies": { - "validate.io-number": "^1.0.3" - } - }, - "node_modules/validate.io-integer-primitive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-integer-primitive/-/validate.io-integer-primitive-1.0.0.tgz", - "integrity": "sha1-qaoBA1X+hoHA/qbBp0rSQZyt3cY=", - "dependencies": { - "validate.io-number-primitive": "^1.0.0" - } - }, - "node_modules/validate.io-matrix-like": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/validate.io-matrix-like/-/validate.io-matrix-like-1.0.2.tgz", - "integrity": "sha1-XsMqddCInaxzbepovdYUWxVe38M=" - }, - "node_modules/validate.io-ndarray-like": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-ndarray-like/-/validate.io-ndarray-like-1.0.0.tgz", - "integrity": "sha1-2KOw7RZbvx0vwNAHMnDPpVIpWRk=" - }, - "node_modules/validate.io-nonnegative-integer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-nonnegative-integer/-/validate.io-nonnegative-integer-1.0.0.tgz", - "integrity": "sha1-gGkkOgjF+Y6VQTySnf17GPP28p8=", - "dependencies": { - "validate.io-integer": "^1.0.5" - } - }, - "node_modules/validate.io-number": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", - "integrity": "sha1-9j/+2iSL8opnqNSODjtGGhZluvg=" - }, - "node_modules/validate.io-number-primitive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-number-primitive/-/validate.io-number-primitive-1.0.0.tgz", - "integrity": "sha1-0uAfICmJNp3PEVVElWQgOv5YTlU=" - }, - "node_modules/validate.io-positive-integer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-positive-integer/-/validate.io-positive-integer-1.0.0.tgz", - "integrity": "sha1-ftLQO0wnVYzGagCqsPDpIYFKZYI=", - "dependencies": { - "validate.io-integer": "^1.0.5" - } - }, - "node_modules/validate.io-string-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/validate.io-string-primitive/-/validate.io-string-primitive-1.0.1.tgz", - "integrity": "sha1-uBNbn7E3K94C/dU60dDM1t55j+4=" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -2888,11 +6680,6 @@ "extsprintf": "^1.2.0" } }, - "node_modules/weak-map": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.5.tgz", - "integrity": "sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes=" - }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -2913,18 +6700,83 @@ "node": ">=12" } }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { - "string-width": "^1.0.2 || 2" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/xml2js": { "version": "0.4.23", @@ -2946,63 +6798,1160 @@ "node": ">=4.0" } }, - "node_modules/xml2json": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/xml2json/-/xml2json-0.12.0.tgz", - "integrity": "sha512-EPJHRWJnJUYbJlzR4pBhZODwWdi2IaYGtDdteJi0JpZ4OD31IplWALuit8r73dJuM4iHZdDVKY1tLqY2UICejg==", - "dev": true, - "dependencies": { - "hoek": "^4.2.1", - "joi": "^13.1.2", - "node-expat": "^2.3.18" - }, - "bin": { - "xml2json": "bin/xml2json" - } - }, - "node_modules/xmlbuilder": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", - "engines": { - "node": ">=8.0" - } - }, "node_modules/xmlbuilder2": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-2.4.0.tgz", - "integrity": "sha512-KrOVUGD65xTQ7ZA+GMQGdBSpe1Ufu5ylCQSYVk6QostySDkxPmAQ0WWIu7dR3JjLfVbF22RFQX7KyrZ6VTLcQg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-3.0.2.tgz", + "integrity": "sha512-h4MUawGY21CTdhV4xm3DG9dgsqyhDkZvVJBx88beqX8wJs3VgyGQgAn5VreHuae6unTQxh115aMK5InCVmOIKw==", "dependencies": { - "@oozcitak/dom": "1.15.8", + "@oozcitak/dom": "1.15.10", "@oozcitak/infra": "1.0.8", "@oozcitak/util": "8.3.8", - "@types/node": "14.6.2", + "@types/node": "*", "js-yaml": "3.14.0" }, "engines": { - "node": ">=10.0" + "node": ">=12.0" } }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, "engines": { "node": ">=0.4" } }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } }, "dependencies": { + "@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "optional": true, + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + } + } + }, + "@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "optional": true, + "requires": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + } + } + }, + "@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "optional": true, + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + } + } + }, + "@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "optional": true, + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + } + } + }, + "@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "optional": true, + "requires": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + } + } + }, + "@aws-sdk/abort-controller": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.289.0.tgz", + "integrity": "sha512-Xakz8EeTl0Q3KaWRdCaRQrrYxBAkQGj6eeT+DVmMLMz4gzTcSHwvfR5tVBIPHk4+IjboJJKM5l1xAZ90AGFPAQ==", + "optional": true, + "requires": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/client-cognito-identity": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.289.0.tgz", + "integrity": "sha512-rerSVZadAQu34Dxhsx+tpUdhru8Dpu/oW/ABJnVBZMbs5kXtl3wgWw8vRPiE0jFfjeA+dPZRXfuBzDulzsMcsg==", + "optional": true, + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.289.0", + "@aws-sdk/config-resolver": "3.289.0", + "@aws-sdk/credential-provider-node": "3.289.0", + "@aws-sdk/fetch-http-handler": "3.289.0", + "@aws-sdk/hash-node": "3.289.0", + "@aws-sdk/invalid-dependency": "3.289.0", + "@aws-sdk/middleware-content-length": "3.289.0", + "@aws-sdk/middleware-endpoint": "3.289.0", + "@aws-sdk/middleware-host-header": "3.289.0", + "@aws-sdk/middleware-logger": "3.289.0", + "@aws-sdk/middleware-recursion-detection": "3.289.0", + "@aws-sdk/middleware-retry": "3.289.0", + "@aws-sdk/middleware-serde": "3.289.0", + "@aws-sdk/middleware-signing": "3.289.0", + "@aws-sdk/middleware-stack": "3.289.0", + "@aws-sdk/middleware-user-agent": "3.289.0", + "@aws-sdk/node-config-provider": "3.289.0", + "@aws-sdk/node-http-handler": "3.289.0", + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/smithy-client": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/url-parser": "3.289.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.289.0", + "@aws-sdk/util-defaults-mode-node": "3.289.0", + "@aws-sdk/util-endpoints": "3.289.0", + "@aws-sdk/util-retry": "3.289.0", + "@aws-sdk/util-user-agent-browser": "3.289.0", + "@aws-sdk/util-user-agent-node": "3.289.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/client-sso": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.289.0.tgz", + "integrity": "sha512-GIpxPaEwqXC+P8wH+G4mIDnxYFJ+2SyYTrnoxb4OUH+gAkU6tybgvsv0fy+jsVD6GAWPdfU1AYk2ZjofdFiHeA==", + "optional": true, + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.289.0", + "@aws-sdk/fetch-http-handler": "3.289.0", + "@aws-sdk/hash-node": "3.289.0", + "@aws-sdk/invalid-dependency": "3.289.0", + "@aws-sdk/middleware-content-length": "3.289.0", + "@aws-sdk/middleware-endpoint": "3.289.0", + "@aws-sdk/middleware-host-header": "3.289.0", + "@aws-sdk/middleware-logger": "3.289.0", + "@aws-sdk/middleware-recursion-detection": "3.289.0", + "@aws-sdk/middleware-retry": "3.289.0", + "@aws-sdk/middleware-serde": "3.289.0", + "@aws-sdk/middleware-stack": "3.289.0", + "@aws-sdk/middleware-user-agent": "3.289.0", + "@aws-sdk/node-config-provider": "3.289.0", + "@aws-sdk/node-http-handler": "3.289.0", + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/smithy-client": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/url-parser": "3.289.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.289.0", + "@aws-sdk/util-defaults-mode-node": "3.289.0", + "@aws-sdk/util-endpoints": "3.289.0", + "@aws-sdk/util-retry": "3.289.0", + "@aws-sdk/util-user-agent-browser": "3.289.0", + "@aws-sdk/util-user-agent-node": "3.289.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/client-sso-oidc": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.289.0.tgz", + "integrity": "sha512-+09EK4aWdNjF+5+nK6Dmlwx3es8NTkyABTOj9H4eKB90rXQVX8PjoaFhK/b+NcNKDxgb1E6k6evZEpAb8dYQHg==", + "optional": true, + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.289.0", + "@aws-sdk/fetch-http-handler": "3.289.0", + "@aws-sdk/hash-node": "3.289.0", + "@aws-sdk/invalid-dependency": "3.289.0", + "@aws-sdk/middleware-content-length": "3.289.0", + "@aws-sdk/middleware-endpoint": "3.289.0", + "@aws-sdk/middleware-host-header": "3.289.0", + "@aws-sdk/middleware-logger": "3.289.0", + "@aws-sdk/middleware-recursion-detection": "3.289.0", + "@aws-sdk/middleware-retry": "3.289.0", + "@aws-sdk/middleware-serde": "3.289.0", + "@aws-sdk/middleware-stack": "3.289.0", + "@aws-sdk/middleware-user-agent": "3.289.0", + "@aws-sdk/node-config-provider": "3.289.0", + "@aws-sdk/node-http-handler": "3.289.0", + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/smithy-client": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/url-parser": "3.289.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.289.0", + "@aws-sdk/util-defaults-mode-node": "3.289.0", + "@aws-sdk/util-endpoints": "3.289.0", + "@aws-sdk/util-retry": "3.289.0", + "@aws-sdk/util-user-agent-browser": "3.289.0", + "@aws-sdk/util-user-agent-node": "3.289.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/client-sts": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.289.0.tgz", + "integrity": "sha512-n+8zDCzk0NvCIXX3MGS8RV/+/MkJso0jkqkPOgPcS8Kf7Zbjlx8FyeGQ5LS7HjhCDk+jExH/s9h1kd3sL1pHQA==", + "optional": true, + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.289.0", + "@aws-sdk/credential-provider-node": "3.289.0", + "@aws-sdk/fetch-http-handler": "3.289.0", + "@aws-sdk/hash-node": "3.289.0", + "@aws-sdk/invalid-dependency": "3.289.0", + "@aws-sdk/middleware-content-length": "3.289.0", + "@aws-sdk/middleware-endpoint": "3.289.0", + "@aws-sdk/middleware-host-header": "3.289.0", + "@aws-sdk/middleware-logger": "3.289.0", + "@aws-sdk/middleware-recursion-detection": "3.289.0", + "@aws-sdk/middleware-retry": "3.289.0", + "@aws-sdk/middleware-sdk-sts": "3.289.0", + "@aws-sdk/middleware-serde": "3.289.0", + "@aws-sdk/middleware-signing": "3.289.0", + "@aws-sdk/middleware-stack": "3.289.0", + "@aws-sdk/middleware-user-agent": "3.289.0", + "@aws-sdk/node-config-provider": "3.289.0", + "@aws-sdk/node-http-handler": "3.289.0", + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/smithy-client": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/url-parser": "3.289.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.289.0", + "@aws-sdk/util-defaults-mode-node": "3.289.0", + "@aws-sdk/util-endpoints": "3.289.0", + "@aws-sdk/util-retry": "3.289.0", + "@aws-sdk/util-user-agent-browser": "3.289.0", + "@aws-sdk/util-user-agent-node": "3.289.0", + "@aws-sdk/util-utf8": "3.254.0", + "fast-xml-parser": "4.1.2", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/config-resolver": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.289.0.tgz", + "integrity": "sha512-QYrBJeFJwx9wL73xMJgSTS6zY5SQh0tbZXpVlSZcNDuOufsu5zdcZZCOp0I20yGf8zxKX59u7O73OUlppkk+Wg==", + "optional": true, + "requires": { + "@aws-sdk/signature-v4": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/util-config-provider": "3.208.0", + "@aws-sdk/util-middleware": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-cognito-identity": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.289.0.tgz", + "integrity": "sha512-RrK15OhL6UR8QKD415hggKfl8wcsMBqafcw/uYDESlvuAQVIi7hLgf5/2Onbhbc+m3huTBHY9e1D1n7u9hf9Bw==", + "optional": true, + "requires": { + "@aws-sdk/client-cognito-identity": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.289.0.tgz", + "integrity": "sha512-h4yNEW2ZJATKVxL0Bvz/WWXUmBr+AhsTyjUNge734306lXNG5/FM7zYp2v6dSQWt02WwBXyfkP3lr+A0n4rHyA==", + "optional": true, + "requires": { + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-imds": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.289.0.tgz", + "integrity": "sha512-SIl+iLQpDR6HA9CKTebui7NLop5GxnCkufbM3tbSqrQcPcEfYLOwXpu5gpKO2unQzRykCoyRVia1lr7Pc9Hgdg==", + "optional": true, + "requires": { + "@aws-sdk/node-config-provider": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/url-parser": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.289.0.tgz", + "integrity": "sha512-kvNUn3v4FTRRiqCOXl46v51VTGOM76j5Szcrhkk9qeFW6zt4iFodp6tQ4ynDtDxYxOvjuEfm3ii1YN5nkI1uKA==", + "optional": true, + "requires": { + "@aws-sdk/credential-provider-env": "3.289.0", + "@aws-sdk/credential-provider-imds": "3.289.0", + "@aws-sdk/credential-provider-process": "3.289.0", + "@aws-sdk/credential-provider-sso": "3.289.0", + "@aws-sdk/credential-provider-web-identity": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/shared-ini-file-loader": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.289.0.tgz", + "integrity": "sha512-05CYPGnk5cDiOQDIaXNVibNOwQdI34MDiL17YkSfPv779A+uq4vqg/aBfL41BDJjr1gSGgyvVhlcUdBKnlp93Q==", + "optional": true, + "requires": { + "@aws-sdk/credential-provider-env": "3.289.0", + "@aws-sdk/credential-provider-imds": "3.289.0", + "@aws-sdk/credential-provider-ini": "3.289.0", + "@aws-sdk/credential-provider-process": "3.289.0", + "@aws-sdk/credential-provider-sso": "3.289.0", + "@aws-sdk/credential-provider-web-identity": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/shared-ini-file-loader": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.289.0.tgz", + "integrity": "sha512-t39CJHj1/f2DcRbEUSJ1ixwDsgaElDpJPynn59MOdNnrSh5bYuYmkrum/GYXYSsk+HoSK21JvwgvjnrkA9WZKQ==", + "optional": true, + "requires": { + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/shared-ini-file-loader": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-sso": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.289.0.tgz", + "integrity": "sha512-8+DjOqj5JCpVdT4EJtdfis6OioAdiDKM1mvgDTG8R43MSThc+RGfzqaDJQdM+8+hzkYhxYfyI9XB0H+X3rDNsA==", + "optional": true, + "requires": { + "@aws-sdk/client-sso": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/shared-ini-file-loader": "3.289.0", + "@aws-sdk/token-providers": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-web-identity": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.289.0.tgz", + "integrity": "sha512-jZ9hQvr0I7Z2DekDtZytViYn7zNNJG06N0CinAJzzvreAQ1I61rU7mhaWc05jhBSdeA3f82XoDAgxqY4xIh9pQ==", + "optional": true, + "requires": { + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-providers": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.289.0.tgz", + "integrity": "sha512-kXNhi0s0oZ8k2cv3D5350glKutV4Lgg/hVBAAU/AnjFl5JFiZZKFpTs3N8p0MLCESipL2uCws7R0UU7uy8sKIQ==", + "optional": true, + "requires": { + "@aws-sdk/client-cognito-identity": "3.289.0", + "@aws-sdk/client-sso": "3.289.0", + "@aws-sdk/client-sts": "3.289.0", + "@aws-sdk/credential-provider-cognito-identity": "3.289.0", + "@aws-sdk/credential-provider-env": "3.289.0", + "@aws-sdk/credential-provider-imds": "3.289.0", + "@aws-sdk/credential-provider-ini": "3.289.0", + "@aws-sdk/credential-provider-node": "3.289.0", + "@aws-sdk/credential-provider-process": "3.289.0", + "@aws-sdk/credential-provider-sso": "3.289.0", + "@aws-sdk/credential-provider-web-identity": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/shared-ini-file-loader": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/fetch-http-handler": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.289.0.tgz", + "integrity": "sha512-tksh2GnDV1JaI+NO9x+pgyB3VNwjnUdtoMcFGmTDm1TrcPNj0FLX2hLiunlVG7fFMfGLXC2aco0sUra5/5US9Q==", + "optional": true, + "requires": { + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/querystring-builder": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/util-base64": "3.208.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/hash-node": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.289.0.tgz", + "integrity": "sha512-fL7Pt4LU+tluHn0+BSIFVD2ZVJ5fuXvd1hQt4aTYrgkna1RR5v55Hdy2rNrp/syrkyE+Wv92S3hgZ7ZTBeXFZA==", + "optional": true, + "requires": { + "@aws-sdk/types": "3.289.0", + "@aws-sdk/util-buffer-from": "3.208.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/invalid-dependency": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.289.0.tgz", + "integrity": "sha512-VpXadvpqXFUA8gBH6TAAJzsKfEQ4IvsiD7d9b2B+jw1YtaPFTqEEuDjN6ngpad8PCPCNWl8CI6oBCdMOK+L48A==", + "optional": true, + "requires": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/is-array-buffer": { + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", + "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==", + "optional": true, + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-content-length": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.289.0.tgz", + "integrity": "sha512-D7vGeuaAzKiq0aFPwme1Xy4x69Jn4v0YJ3Xa4J+keNep0yZ9LfU5KSngqsxeTefCqS+2tdaArkBN2VdexmPagw==", + "optional": true, + "requires": { + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-endpoint": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.289.0.tgz", + "integrity": "sha512-nxaQFOG1IurwCHWP22RxgTFZdILsdBg6wbg4GeFpNBtE3bi0zIUYKrUhpdRr/pZyGAboD1oD9iQtxuGb/M6f+w==", + "optional": true, + "requires": { + "@aws-sdk/middleware-serde": "3.289.0", + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/signature-v4": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/url-parser": "3.289.0", + "@aws-sdk/util-config-provider": "3.208.0", + "@aws-sdk/util-middleware": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.289.0.tgz", + "integrity": "sha512-yFBOKvKBnITO08JCx+65vXPe9Uo4gZuth/ka9v5swa4wtV8AP+kkOwFrNxSi2iAFLJ4Mg21vGQceeL0bErF6KQ==", + "optional": true, + "requires": { + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.289.0.tgz", + "integrity": "sha512-c5W7AlOdoyTXRoNl2yOVkhbTjp8tX0z65GDb3+/1yYcv+GRtz67WMZscWMQJwEfdCLdDE2GtBe+t2xyFGnmJvA==", + "optional": true, + "requires": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-recursion-detection": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.289.0.tgz", + "integrity": "sha512-r2NrfnTG0UZRXeFjoyapAake7b1rUo6SC52/UV4Pdm8cHoYMmljnaGLjiAfzt6vWv6cSVCJq1r28Ne4slAoMAg==", + "optional": true, + "requires": { + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-retry": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.289.0.tgz", + "integrity": "sha512-Su+iGv5mrFjVCXJmjohX00o3HzkwnhY0TDhIltgolB6ZfOqy3Dfopjj21OWtqY9VYCUiLGC4KRfeb2feyrz5BA==", + "optional": true, + "requires": { + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/service-error-classification": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/util-middleware": "3.289.0", + "@aws-sdk/util-retry": "3.289.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "optional": true + } + } + }, + "@aws-sdk/middleware-sdk-sts": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.289.0.tgz", + "integrity": "sha512-9WzUVPEqJcvggGCk9JHXnwhj7fjuMXE/JM3gx7eMSStJCcK+3BARZ1RZnggUN4vN9iTSzdA+r0OpC1XnUGKB2g==", + "optional": true, + "requires": { + "@aws-sdk/middleware-signing": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/signature-v4": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-serde": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.289.0.tgz", + "integrity": "sha512-pygC+LsEBVAxOzfoxA9jgvqfO1PLivh8s2Yr/aNQOwx49fmTHMvPwRYUGDV38Du6bRYcKI6nxYqkbJFkQkRESQ==", + "optional": true, + "requires": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-signing": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.289.0.tgz", + "integrity": "sha512-9SLATNvibxg4hpr4ldU18LwB6AVzovONWeJLt49FKISz7ZwGF6WVJYUMWeScj4+Z51Gozi7+pUIaFn7i6N3UbA==", + "optional": true, + "requires": { + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/signature-v4": "3.289.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/util-middleware": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-stack": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.289.0.tgz", + "integrity": "sha512-3rWx+UkV//dv/cLIrXmzIa+FZcn6n76JevGHYCTReiRpcvv+xECxgXH2crMYtzbu05WdxGYD6P0IP5tMwH0yXA==", + "optional": true, + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.289.0.tgz", + "integrity": "sha512-XPhB9mgko66BouyxA+7z7SjUaNHyr58Xe/OB8GII5R/JiR3A/lpc8+jm9gEEpjEI/HpF8jLFDnTMbgabVAHOeA==", + "optional": true, + "requires": { + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-config-provider": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.289.0.tgz", + "integrity": "sha512-rR41c3Y7MYEP8TG9X1whHyrXEXOZzi4blSDqeJflwtNt3r3HvErGZiNBdVv368ycPPuu1YRSqTkgOYNCv02vlw==", + "optional": true, + "requires": { + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/shared-ini-file-loader": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-http-handler": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.289.0.tgz", + "integrity": "sha512-zKknSaOY2GNmqH/eoZndmQWoEKhYPV0qRZtAMxuS3DVI5fipBipNzbVBaXrHRjxARx7/VLWnvNArchRoHfOlmw==", + "optional": true, + "requires": { + "@aws-sdk/abort-controller": "3.289.0", + "@aws-sdk/protocol-http": "3.289.0", + "@aws-sdk/querystring-builder": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/property-provider": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.289.0.tgz", + "integrity": "sha512-Raf4lTWPTmEGFV7Lkbfet2n/4Ybz5vQiiU45l56kgIQA88mLUuE4dshgNsM0Zb2rflsTaiN1JR2+RS/8lNtI8A==", + "optional": true, + "requires": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/protocol-http": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.289.0.tgz", + "integrity": "sha512-/2jOQ3MJZx1xk6BHEOW47ItGo1tgA9cP9a2saYneon05VIV6OuYefO5pG2G0nPnImTbff++N7aioXe5XKrnorw==", + "optional": true, + "requires": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-builder": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.289.0.tgz", + "integrity": "sha512-llJCS8mAJfBYBjkKeriRmBuDr2jIozrMWhJOkz95SQGFsx1sKBPQMMOV6zunwhQux8bjtjf5wYiR1TM2jNUKqQ==", + "optional": true, + "requires": { + "@aws-sdk/types": "3.289.0", + "@aws-sdk/util-uri-escape": "3.201.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-parser": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.289.0.tgz", + "integrity": "sha512-84zXKXIYtnTCrez/gGZIGuqfUJezzaOMm7BQwnOnq/sN21ou63jF3Q+tIMhLO/EvDcvmxEOlUXN1kfMQcjEjSw==", + "optional": true, + "requires": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/service-error-classification": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.289.0.tgz", + "integrity": "sha512-+d1Vlb45Bs2gbTmXpRCGQrX4AQDETjA5sx1zLvq1NZGSnTX6LdroYPtXu3dRWJwDHHQpCMN/XfFN8jTw0IzBOg==", + "optional": true + }, + "@aws-sdk/shared-ini-file-loader": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.289.0.tgz", + "integrity": "sha512-XG9Pfn3itf3Z0p6nY6UuMVMhzZb+oX7L28oyby8REl8BAwfPkcziLxXlZsBHf6KcgYDG1R6z945hvIwZhJbjvA==", + "optional": true, + "requires": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/signature-v4": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.289.0.tgz", + "integrity": "sha512-IQyYHx3zp7PHxFA17YDb6WVx8ejXDxrsnKspFXgZQyoZOPfReqWQs32dcJYXff/IdSzxjwOpwBFbmIt2vbdKnQ==", + "optional": true, + "requires": { + "@aws-sdk/is-array-buffer": "3.201.0", + "@aws-sdk/types": "3.289.0", + "@aws-sdk/util-hex-encoding": "3.201.0", + "@aws-sdk/util-middleware": "3.289.0", + "@aws-sdk/util-uri-escape": "3.201.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/smithy-client": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.289.0.tgz", + "integrity": "sha512-miPMdnv4Ivv8RN65LJ9dxzkQNHn9Tp9wzZJXwBcPqGdXyRlkWSuIOIIhhAqQoV9R9ByeshnCWBpwqlITIjNPVw==", + "optional": true, + "requires": { + "@aws-sdk/middleware-stack": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/token-providers": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.289.0.tgz", + "integrity": "sha512-fzvGIfJNoLR5g24ok8cRwc9AMLXoEOyfi+eHocAF6eyfe0NWlQtpsmLe7XXx5I9yZ51lclzV49rEz9ynp243RA==", + "optional": true, + "requires": { + "@aws-sdk/client-sso-oidc": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/shared-ini-file-loader": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.289.0.tgz", + "integrity": "sha512-wwUC+VwoNlEkgDzK/aJG3+zeMcYRcYFQV4mbZaicYdp3v8hmkUkJUhyxuZYl/FmY46WG+DYv+/Y3NilgfsE+Wg==", + "optional": true, + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/url-parser": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.289.0.tgz", + "integrity": "sha512-rbtW3O6UBX+eWR/+UiCDNFUVwN8hp82JPy+NGv3NeOvRjBsxkKmcH4UJTHDIeT+suqTDNEdV5nz438u3dHdHrQ==", + "optional": true, + "requires": { + "@aws-sdk/querystring-parser": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-base64": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz", + "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==", + "optional": true, + "requires": { + "@aws-sdk/util-buffer-from": "3.208.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-body-length-browser": { + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz", + "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==", + "optional": true, + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-body-length-node": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz", + "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==", + "optional": true, + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-buffer-from": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", + "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==", + "optional": true, + "requires": { + "@aws-sdk/is-array-buffer": "3.201.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-config-provider": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz", + "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==", + "optional": true, + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-defaults-mode-browser": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.289.0.tgz", + "integrity": "sha512-sYrDwjX3s54cvGq69PJpP2vDpJ5BJXhg2KEHbK92Qr2AUqMUgidwZCw4oBaIqKDXcPIrjmhod31s3tTfYmtTMQ==", + "optional": true, + "requires": { + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/types": "3.289.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-defaults-mode-node": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.289.0.tgz", + "integrity": "sha512-PsP40+9peN7kpEmQ2GhEAGwUwD9F/R/BI/1kzjW0nbBsMrTnkUnlZlaitwpBX/OWNV/YZTdVAOvD50j/ACyXlg==", + "optional": true, + "requires": { + "@aws-sdk/config-resolver": "3.289.0", + "@aws-sdk/credential-provider-imds": "3.289.0", + "@aws-sdk/node-config-provider": "3.289.0", + "@aws-sdk/property-provider": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-endpoints": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.289.0.tgz", + "integrity": "sha512-PmsgqL9jdNTz3p0eW83nZZGcngAdoIWidXCc32G5tIIYvJutdgkiObAaydtXaMgk5CRvjenngFf6Zg9JyVHOLQ==", + "optional": true, + "requires": { + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-hex-encoding": { + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz", + "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==", + "optional": true, + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-locate-window": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", + "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==", + "optional": true, + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-middleware": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.289.0.tgz", + "integrity": "sha512-hw3WHQU9Wk7a1H3x+JhwMA4ECCleeuNlob3fXSYJmXgvZyuWfpMYZi4iSkqoWGFAXYpAtZZLIu45iIcd7F296g==", + "optional": true, + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-retry": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.289.0.tgz", + "integrity": "sha512-noFn++ZKH11ExTBqUU/b9wsOjqxYlDnN/8xq+9oCsyBnEZztVgM/AM3WP5qBPRskk1WzDprID5fb5V87113Uug==", + "optional": true, + "requires": { + "@aws-sdk/service-error-classification": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-uri-escape": { + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", + "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==", + "optional": true, + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.289.0.tgz", + "integrity": "sha512-BDXYgNzzz2iNPTkl9MQf7pT4G80V6O6ICwJyH93a5EEdljl7oPrt8i4MS5S0BDAWx58LqjWtVw98GOZfy5BYhw==", + "optional": true, + "requires": { + "@aws-sdk/types": "3.289.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.289.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.289.0.tgz", + "integrity": "sha512-f32g9KS7pwO6FQ9N1CtqQPIS6jhvwv/y0+NHNoo9zLTBH0jol3+C2ELIE3N1wB6xvwhsdPqR3WuOiNiCiv8YAQ==", + "optional": true, + "requires": { + "@aws-sdk/node-config-provider": "3.289.0", + "@aws-sdk/types": "3.289.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-utf8": { + "version": "3.254.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.254.0.tgz", + "integrity": "sha512-14Kso/eIt5/qfIBmhEL9L1IfyUqswjSTqO2mY7KOzUZ9SZbwn3rpxmtkhmATkRjD7XIlLKaxBkI7tU9Zjzj8Kw==", + "optional": true, + "requires": { + "@aws-sdk/util-buffer-from": "3.208.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "optional": true, + "requires": { + "tslib": "^2.3.1" + } + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + } + } + }, + "@eslint/js": { + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz", + "integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==", + "dev": true + }, + "@grpc/grpc-js": { + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.14.tgz", + "integrity": "sha512-w84maJ6CKl5aApCMzFll0hxtFNT6or9WwMslobKaqWUEf1K+zhlL43bSQhFreyYWIWR+Z0xnVFC1KtLm4ZpM/A==", + "requires": { + "@grpc/proto-loader": "^0.7.0", + "@types/node": ">=12.12.47" + } + }, + "@grpc/proto-loader": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.6.tgz", + "integrity": "sha512-QyAXR8Hyh7uMDmveWxDSUcJr9NAWaZ2I6IXgAYvQmfflwouTM+rArE2eEaCtLlRqO81j7pRLCt81IefUei6Zbw==", + "requires": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^7.0.0", + "yargs": "^16.2.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@oozcitak/dom": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.8.tgz", - "integrity": "sha512-MoOnLBNsF+ok0HjpAvxYxR4piUhRDCEWK0ot3upwOOHYudJd30j6M+LNcE8RKpwfnclAX9T66nXXzkytd29XSw==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.10.tgz", + "integrity": "sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==", "requires": { "@oozcitak/infra": "1.0.8", "@oozcitak/url": "1.0.4", @@ -3031,34 +7980,316 @@ "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.3.8.tgz", "integrity": "sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==" }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, "@types/node": { "version": "14.6.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.2.tgz", "integrity": "sha512-onlIwbaeqvZyniGPfdw/TEhKIh79pz66L1q06WUQqJLnAb6wbjvOtepLYTGHTqzdXgBYIE3ZdmqHDGsRsbBz7A==" }, + "@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, "@types/webidl-conversions": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", - "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" }, "@types/whatwg-url": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz", - "integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", "requires": { "@types/node": "*", "@types/webidl-conversions": "*" } }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "@typescript-eslint/eslint-plugin": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.11.tgz", + "integrity": "sha512-XxuOfTkCUiOSyBWIvHlUraLw/JT/6Io1365RO6ZuI88STKMavJZPNMU0lFcUTeQXEhHiv64CbxYxBNoDVSmghg==", + "dev": true, "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.11", + "@typescript-eslint/type-utils": "5.59.11", + "@typescript-eslint/utils": "5.59.11", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, + "@typescript-eslint/parser": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.11.tgz", + "integrity": "sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.59.11", + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/typescript-estree": "5.59.11", + "debug": "^4.3.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.11.tgz", + "integrity": "sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/visitor-keys": "5.59.11" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.11.tgz", + "integrity": "sha512-LZqVY8hMiVRF2a7/swmkStMYSoXMFlzL6sXV6U/2gL5cwnLWQgLEG8tjWPpaE4rMIdZ6VKWwcffPlo1jPfk43g==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.59.11", + "@typescript-eslint/utils": "5.59.11", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/types": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.11.tgz", + "integrity": "sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.11.tgz", + "integrity": "sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/visitor-keys": "5.59.11", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.11.tgz", + "integrity": "sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.11", + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/typescript-estree": "5.59.11", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.11.tgz", + "integrity": "sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.11", + "eslint-visitor-keys": "^3.3.0" + } + }, + "abort-controller-x": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/abort-controller-x/-/abort-controller-x-0.4.1.tgz", + "integrity": "sha512-lJ2ssrl3FoTK3cX/g15lRCkXFWKiwRTRtBjfwounO2EM/Q65rI/MEZsfsch1juWU2pH2aLSaq0HGowlDP/imrw==" + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -3071,17 +8302,26 @@ } }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, "append-field": { @@ -3090,20 +8330,6 @@ "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=", "dev": true }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -3122,6 +8348,17 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==" + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, "arraybuffer-to-string": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/arraybuffer-to-string/-/arraybuffer-to-string-1.0.2.tgz", @@ -3141,9 +8378,9 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "asynckit": { @@ -3159,7 +8396,70 @@ "atob-lite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", - "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=" + "integrity": "sha512-LEeSAWeh2Gfa2FtlQE1shxQ8zi5F9GHarrGKz08TMdODD5T4eH6BMsvtnhbWZ+XQn+Gb6om/917ucvRu7l7ukw==" + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "aws-sdk": { + "version": "2.1192.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1192.0.tgz", + "integrity": "sha512-6uzrlG1Ow3qcOnL0+et+DBTGhYgJzgNydVvos1Eg01vPc/ZhxR7roZ3epZQcPmOR0thQuzzckTq7FBO6wzZA2w==", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.4.19" + }, + "dependencies": { + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" + }, + "uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==" + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==" + } + } }, "aws-sign2": { "version": "0.7.0", @@ -3172,9 +8472,9 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "base64-js": { @@ -3198,13 +8498,41 @@ "tweetnacl": "^0.14.3" } }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "requires": { - "file-uri-to-path": "1.0.0" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "bmp-js": { @@ -3213,22 +8541,40 @@ "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "requires": { - "bytes": "3.1.0", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + } } }, + "bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "optional": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3239,38 +8585,80 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brfs": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", + "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", + "requires": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^3.0.2", + "through2": "^2.0.0" + } + }, "bson": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.6.0.tgz", - "integrity": "sha512-8jw1NU1hglS+Da1jDOUYuNcBJ4cNHCFIqzlwoFNnsTOg2R/ox0aTYcTiBN4dzRa9q7Cvy6XErh3L8ReTEb9AQQ==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", + "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==", "requires": { "buffer": "^5.6.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + } } }, "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "optional": true, + "peer": true, "requires": { "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "ieee754": "^1.2.1" } }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==" + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==" }, "buffer-to-uint8array": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/buffer-to-uint8array/-/buffer-to-uint8array-1.1.0.tgz", - "integrity": "sha1-z29BKHwCL0WNp1LDkcGo1TXsX3I=" + "integrity": "sha512-JVTSbtA6YuOGdu5NL0ffizsBwuwbTXfV7OC91FhazMz9UKP/KlDS+Z7wuiSRClbnTQz52fJgVXI9YDXQRVl2sQ==" }, "busboy": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", - "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "integrity": "sha512-InWFDomvlkEj+xWLBfU3AvnbVYqeTWmQopiW0tWWEy5yehYm2YkGEc59sUmw/4ty5Zj/b0WHGs1LgecuBSBGrg==", "dev": true, "requires": { "dicer": "0.2.5", @@ -3304,9 +8692,24 @@ } }, "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true }, "caseless": { "version": "0.12.0", @@ -3314,14 +8717,40 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "chownr": { @@ -3329,53 +8758,53 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, - "clamp": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", - "integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ=" - }, "clip-pixels": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/clip-pixels/-/clip-pixels-1.0.1.tgz", "integrity": "sha512-nJ22fZvCwkJfMppkOEE7GciLX08rDnVzEJ+U46kBFZtwNzH2V4tNxMWa9Tc365WspCxy1c3NtGJ5EeT4SgjmCA==" }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" + "color-convert": "^2.0.1", + "color-string": "^1.9.0" } }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -3394,29 +8823,22 @@ "delayed-stream": "~1.0.0" } }, - "compute-dims": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/compute-dims/-/compute-dims-1.1.0.tgz", - "integrity": "sha512-YHMiIKjH/8Eom8zATk3g8/lH3HxGCZcVQyEfEoVrfWI7od/WRpTgRGShnei3jArYSx77mQqPxZNokjGHCdLfxg==", - "requires": { - "utils-copy": "^1.0.0", - "validate.io-array": "^1.0.6", - "validate.io-matrix-like": "^1.0.2", - "validate.io-ndarray-like": "^1.0.0", - "validate.io-positive-integer": "^1.0.0" - } + "commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -3424,27 +8846,19 @@ "typedarray": "^0.0.6" } }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "const-max-uint32": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/const-max-uint32/-/const-max-uint32-1.0.2.tgz", - "integrity": "sha1-8Am7YjDmeO2HTdLWqc2ePL+rtnY=" - }, - "const-pinf-float64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/const-pinf-float64/-/const-pinf-float64-1.0.0.tgz", - "integrity": "sha1-9u+w15+cCYbT558pI6v5twtj1yY=" - }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, "content-type": { @@ -3452,6 +8866,11 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, "cookie": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", @@ -3476,17 +8895,36 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "dank-each": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dank-each/-/dank-each-1.0.0.tgz", - "integrity": "sha1-qGE0Okso02IgPUBcd4ZNyaZANzA=", - "dev": true + "crc": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/crc/-/crc-4.3.2.tgz", + "integrity": "sha512-uGDHf4KLLh2zsHa8D8hIQ1H/HtFQhyHrc0uhHBcoKGol/Xnb+MPYfUMw7cvON6ze/GUESTudKayDcJC5HnJv1A==", + "requires": {} }, - "dank-map": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dank-map/-/dank-map-0.1.0.tgz", - "integrity": "sha1-6Z5384LGjy5asrPzqCuAMZV1Kag=", - "dev": true + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==" }, "dashdash": { "version": "1.14.1", @@ -3496,6 +8934,11 @@ "assert-plus": "^1.0.0" } }, + "date-fns": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -3505,11 +8948,11 @@ } }, "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "requires": { - "mimic-response": "^2.0.0" + "mimic-response": "^3.1.0" } }, "deep-extend": { @@ -3517,6 +8960,11 @@ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, "defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", @@ -3526,40 +8974,39 @@ "clone": "^1.0.2" } }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "denque": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", - "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==" - }, "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" }, "dicer": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", - "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "integrity": "sha512-FDvbtnq7dzlPz0wyYlOExifDEZcu8h+rErEXgfxqmLfRfC/kJidEFh4+effJRO3P0xmfqyPbSMG0LveNRfTKVg==", "dev": true, "requires": { "readable-stream": "1.1.x", @@ -3592,10 +9039,36 @@ } } }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dtype": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", - "integrity": "sha1-zQUjI84GFETs0uj1dI9popvihDQ=" + "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==" + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "requires": { + "readable-stream": "^2.0.2" + } }, "ecc-jsbn": { "version": "0.1.2", @@ -3612,18 +9085,23 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.5.tgz", - "integrity": "sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", "dev": true, "requires": { - "jake": "^10.6.1" + "jake": "^10.8.5" } }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "end-of-stream": { "version": "1.4.4", @@ -3633,26 +9111,386 @@ "once": "^1.4.0" } }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-set": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + } + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "eslint": { + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz", + "integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.42.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + } + } + }, + "eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true + }, + "espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "dependencies": { + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true + } + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "estree-is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==" }, "expand-template": { "version": "2.0.3", @@ -3660,42 +9498,69 @@ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "requires": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" + }, + "dependencies": { + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, + "express-rate-limit": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.7.0.tgz", + "integrity": "sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA==", + "requires": {} + }, "express-slow-down": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/express-slow-down/-/express-slow-down-1.4.0.tgz", @@ -3711,6 +9576,21 @@ "integrity": "sha1-mQ75eUC39MKCPZWTZIt5voWKY4s=", "dev": true }, + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "requires": { + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + } + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -3726,45 +9606,160 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "fast-xml-parser": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz", + "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==", + "optional": true, + "requires": { + "strnum": "^1.0.5" + } + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, "file-type": { "version": "10.11.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==" }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true - }, "filelist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz", - "integrity": "sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, "requires": { - "minimatch": "^3.0.4" + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" } }, "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" + }, + "dependencies": { + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + } } }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "flatten-vertex-data": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz", @@ -3778,6 +9773,14 @@ "resolved": "https://registry.npmjs.org/flip-pixels/-/flip-pixels-1.0.2.tgz", "integrity": "sha512-oXbJGbjDnfJRWPC7Va38EFhd+A8JWE5/hCiKcK8qjCdbLj9DTpsq6MEudwpRTH+V4qq+Jw7d3pUgQdSr3x3mTA==" }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -3794,14 +9797,14 @@ } }, "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, "fs-constants": { "version": "1.0.0", @@ -3819,19 +9822,67 @@ "universalify": "^1.0.0" } }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" } }, "getpass": { @@ -3845,13 +9896,71 @@ "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } }, "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -3866,38 +9975,61 @@ "har-schema": "^2.0.0" } }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } }, "hashmap": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/hashmap/-/hashmap-2.4.0.tgz", "integrity": "sha512-Ngj48lhnxJdnBAEVbubKBJuN1elfVLZJs94ZixRi98X3GCU4v6pgj9qRkHt6H8WaVJ69Wv0r1GhtS7hvF9zCgg==" }, - "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", - "dev": true - }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" } }, "http-signature": { @@ -3923,26 +10055,45 @@ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, - "image-decode": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/image-decode/-/image-decode-1.2.2.tgz", - "integrity": "sha512-WJSWrPNmEnWVYGkY22bA6206MKYjfGl01fdlwIp6ovdnPL2qGJyC3wQj8QqYbdblchzwgglFg8Jcb/1f6fhaTQ==", + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "image-pixels": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-pixels/-/image-pixels-1.1.1.tgz", + "integrity": "sha512-NQgoJVHiOWfmQnkEPSvOD8iuKUfm3AUXKdelCN8tQWT9NtwOd5qHofUci0Fcua6d28eq4gBXRKz7MQd8QK53rg==", "requires": { + "arr-flatten": "^1.1.0", + "arraybuffer-to-string": "^1.0.2", "bmp-js": "^0.1.0", + "brfs": "^2.0.1", + "buffer-to-arraybuffer": "0.0.5", "buffer-to-uint8array": "^1.1.0", + "clip-pixels": "^1.0.1", + "es6-weak-map": "^2.0.2", + "flip-pixels": "^1.0.1", "image-type": "^3.0.0", + "is-base64": "0.0.6", + "is-blob": "^2.0.0", + "is-browser": "^2.1.0", + "is-buffer": "^2.0.3", + "is-plain-obj": "^1.1.0", + "is-promise": "^2.1.0", + "is-url": "^1.2.4", "jpeg-js": "^0.3.4", + "object-assign": "^4.1.1", "omggif": "^1.0.9", + "parse-rect": "^1.2.0", "pngjs": "^3.3.3", - "to-array-buffer": "^3.0.0", - "utif": "^2.0.1" + "primitive-pool": "^1.1.0", + "request": "^2.88.0", + "string-to-arraybuffer": "^1.0.1", + "to-array-buffer": "^2.1.0" }, "dependencies": { - "jpeg-js": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz", - "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==" - }, "pngjs": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", @@ -3950,36 +10101,6 @@ } } }, - "image-pixels": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/image-pixels/-/image-pixels-2.2.2.tgz", - "integrity": "sha512-jcHECwLUEUBMQLqpZF0Bs0ac/jvZXs/97JwD6J39rP98vgTyvvNKhUjYaWf+BSKKPYXfenctOQV95sDC7Z/aZQ==", - "requires": { - "arr-flatten": "^1.1.0", - "arraybuffer-to-string": "^1.0.2", - "clip-pixels": "^1.0.1", - "flip-pixels": "^1.0.1", - "image-decode": "^1.1.0", - "image-type": "^3.0.0", - "is-base64": "^0.1.0", - "is-blob": "^2.0.0", - "is-browser": "^2.1.0", - "is-buffer": "^2.0.3", - "is-float-array": "^1.0.0", - "is-plain-obj": "^1.1.0", - "is-promise": "^2.1.0", - "is-relative": "^1.0.0", - "is-url": "^1.2.4", - "object-assign": "^4.1.1", - "parse-rect": "^1.2.0", - "primitive-pool": "^1.1.0", - "pxls": "^2.3.2", - "request": "^2.88.0", - "to-array-buffer": "^3.1.1", - "to-uint8": "^1.4.0", - "weak-map": "^1.0.5" - } - }, "image-type": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/image-type/-/image-type-3.1.0.tgz", @@ -3988,36 +10109,112 @@ "file-type": "^10.9.0" } }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "is-base64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-0.1.0.tgz", - "integrity": "sha512-WRRyllsGXJM7ZN7gPTCCQ/6wNPTRDwiWdPK66l5sJzcU/oOzcIcRRf0Rux8bkpox/1yjt0F6VJRsQOIG2qz5sg==" + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-0.0.6.tgz", + "integrity": "sha512-u1cuGk5DbKVfoKvqtF+nV4a4VWN+0npvTuOzyEcScqriIJbQrExdEr2lVkqt3pCIgW5aS7hI1Us9qYaK4FXrZQ==" + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } }, "is-blob": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-blob/-/is-blob-2.1.0.tgz", "integrity": "sha512-SZ/fTft5eUhQM6oF/ZaASFDEdbFVe89Imltn9uZr03wdKMcWNVYSMjQPFtg05QuNkt5l5c135ElvXEQG0rk4tw==" }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-browser": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-browser/-/is-browser-2.1.0.tgz", @@ -4028,19 +10225,80 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, - "is-float-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-float-array/-/is-float-array-1.0.0.tgz", - "integrity": "sha512-4ew1Sx6B6kEAl3T3NOM0yB94J3NZnBdNt4paw0e8nY73yHHTeTEhyQ3Lj7EQEnv5LD+GxNTaT4L46jcKjjpLiQ==" + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "requires": { - "number-is-nan": "^1.0.0" + "has-tostringtag": "^1.0.0" } }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -4051,12 +10309,49 @@ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "requires": { - "is-unc-path": "^1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" } }, "is-typedarray": { @@ -4064,32 +10359,29 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "requires": { - "unc-path-regex": "^0.1.2" - } - }, "is-url": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "dev": true, - "requires": { - "punycode": "2.x.x" - } + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "isstream": { "version": "0.1.2", @@ -4097,35 +10389,26 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "jake": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", - "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", "dev": true, "requires": { - "async": "0.9.x", - "chalk": "^2.4.2", + "async": "^3.2.3", + "chalk": "^4.0.2", "filelist": "^1.0.1", "minimatch": "^3.0.4" } }, - "joi": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", - "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", - "dev": true, - "requires": { - "hoek": "5.x.x", - "isemail": "3.x.x", - "topo": "3.x.x" - }, - "dependencies": { - "hoek": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", - "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", - "dev": true - } - } + "jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==" + }, + "jpeg-js": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz", + "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==" }, "js-yaml": { "version": "3.14.0", @@ -4142,15 +10425,21 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -4173,20 +10462,43 @@ } }, "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" } }, "kareem": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", - "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, "lodash.foreach": { "version": "4.5.0", @@ -4203,6 +10515,11 @@ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -4211,6 +10528,14 @@ "yallist": "^4.0.0" } }, + "magic-string": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "requires": { + "sourcemap-codec": "^1.4.1" + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -4232,47 +10557,78 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "requires": { + "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + } + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.44.0" + "mime-db": "1.52.0" } }, "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "mkdirp": { "version": "0.5.5", @@ -4289,50 +10645,49 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, "mongodb": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.1.4.tgz", - "integrity": "sha512-Cv/sk8on/tpvvqbEvR1h03mdyNdyvvO+WhtFlL4jrZ+DSsN/oSQHVqmJQI/sBCqqbOArFcYCAYDfyzqFwV4GSQ==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.14.0.tgz", + "integrity": "sha512-coGKkWXIBczZPr284tYKFLg+KbGPPLlSbdgfKAb6QqCFt5bo5VFZ50O3FFzsw4rnkqjwT6D8Qcoo9nshYKM7Mg==", "requires": { - "bson": "^4.5.4", - "denque": "^2.0.1", - "mongodb-connection-string-url": "^2.1.0", - "saslprep": "^1.0.3" + "@aws-sdk/credential-providers": "^3.186.0", + "bson": "^4.7.0", + "mongodb-connection-string-url": "^2.5.4", + "saslprep": "^1.0.3", + "socks": "^2.7.1" } }, "mongodb-connection-string-url": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.2.0.tgz", - "integrity": "sha512-U0cDxLUrQrl7DZA828CA+o69EuWPWEJTwdMPozyd7cy/dbtncUZczMw7wRHcwMD7oKOn0NM2tF9jdf5FFVW9CA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", "requires": { "@types/whatwg-url": "^8.2.1", "whatwg-url": "^11.0.0" } }, "mongoose": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.0.13.tgz", - "integrity": "sha512-/M/YKgx23fCX+j0lwObaHbCibXnMjyWeQrXZf0WaQeS/hL86wQVSmaOxh+kZXfyLOUr+vT2Hl44o50GZHUrKWw==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.10.2.tgz", + "integrity": "sha512-9/AbheG2PiVVBWLx3S6LgCIEQNdMppjdnp/WH9nLGjFzjJeb9LiHNPEtsOGOm8qXmuICHMdbn5iUFAsLWWvpEw==", "requires": { - "bson": "^4.2.2", - "kareem": "2.3.2", - "mongodb": "4.1.4", - "mpath": "0.8.4", - "mquery": "4.0.0", - "ms": "2.1.2", - "regexp-clone": "1.0.0", - "sift": "13.5.2", - "sliced": "1.0.1" + "bson": "^4.7.0", + "kareem": "2.5.1", + "mongodb": "4.14.0", + "mpath": "0.9.0", + "mquery": "4.0.3", + "ms": "2.1.3", + "sift": "16.0.1" }, "dependencies": { "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, @@ -4361,34 +10716,25 @@ "depd": "~2.0.0", "on-finished": "~2.3.0", "on-headers": "~1.0.2" - }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - } } }, "mpath": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", - "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==" }, "mquery": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.0.tgz", - "integrity": "sha512-nGjm89lHja+T/b8cybAby6H0YgA4qYC/lx6UlwvHGqvTq8bDaNeCwl1sY8uRELrNbVWJzIihxVd+vphGGn1vBw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz", + "integrity": "sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==", "requires": { - "debug": "4.x", - "regexp-clone": "^1.0.0", - "sliced": "1.0.1" + "debug": "4.x" }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -4406,25 +10752,25 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "multer": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", - "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", + "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", "dev": true, "requires": { "append-field": "^1.0.0", "busboy": "^0.2.11", "concat-stream": "^1.5.2", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.4", "object-assign": "^4.1.1", "on-finished": "^2.3.0", "type-is": "^1.6.4", "xtend": "^4.0.0" } }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "mylas": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/mylas/-/mylas-2.1.13.tgz", + "integrity": "sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==", "dev": true }, "napi-build-utils": { @@ -4432,33 +10778,58 @@ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "nice-grpc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/nice-grpc/-/nice-grpc-2.1.4.tgz", + "integrity": "sha512-ZCSnFxg/k6PM1zZ2u/SbuySTrpK7q4klwRE4ymAdiMfZM3Rl1LRUdqUslKSbSjd9XQHzi80Y5JJL5fE58lSrVA==", + "requires": { + "@grpc/grpc-js": "^1.7.3", + "abort-controller-x": "^0.4.0", + "nice-grpc-common": "^2.0.2" + } + }, + "nice-grpc-common": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/nice-grpc-common/-/nice-grpc-common-2.0.2.tgz", + "integrity": "sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ==", + "requires": { + "ts-error": "^1.0.6" + } }, "node-abi": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.26.0.tgz", - "integrity": "sha512-ag/Vos/mXXpWLLAYWsAoQdgS+gW7IwvgMLOgqopm/DbzAjazLltzgzpVMsFlgmo9TzG5hGXeaBZx2AI731RIsQ==", + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.33.0.tgz", + "integrity": "sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==", "requires": { - "semver": "^5.4.1" + "semver": "^7.3.5" } }, "node-addon-api": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", - "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==" - }, - "node-expat": { - "version": "2.3.18", - "resolved": "https://registry.npmjs.org/node-expat/-/node-expat-2.3.18.tgz", - "integrity": "sha512-9dIrDxXePa9HSn+hhlAg1wXkvqOjxefEbMclGxk2cEnq/Y3U7Qo5HNNqeo3fQ4bVmLhcdt3YN1TZy7WMZy4MHw==", - "dev": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.13.2" - } + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" }, "node-rsa": { "version": "1.1.1", @@ -4473,26 +10844,11 @@ "resolved": "https://registry.npmjs.org/node-snowflake/-/node-snowflake-0.0.1.tgz", "integrity": "sha1-C+XqvVsRMfY55j6JxfgtqoFLOrk=" }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "oauth-sign": { "version": "0.9.0", @@ -4504,20 +10860,25 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, - "object-to-xml": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/object-to-xml/-/object-to-xml-2.0.0.tgz", - "integrity": "sha512-bArXy7WCF1V9R88/zF9adSZSeFQnFmmKhMqNuNLAxqrbkvzcWP8HgnaRCcVJsfvIgvpdHiYd0qzJi7LM7QFfcQ==", - "dev": true, + "object.assign": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.3.tgz", + "integrity": "sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA==", "requires": { - "dank-each": "^1.0.0", - "dank-map": "~0.1.0", - "sanitizer": "0.1.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" } }, "omggif": { @@ -4541,16 +10902,56 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "requires": { "wrappy": "1" } }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, "pako": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.2.tgz", "integrity": "sha512-9e8DRI3+dRLomCmMBAH30B2ejh+blwXr7VmMEx/pVFZlSDA7oyI8uKMhKXr8IrZpoxBF2YlxUvhqRXzTT1i0NA==" }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-rect": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/parse-rect/-/parse-rect-1.2.0.tgz", @@ -4564,11 +10965,40 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -4579,32 +11009,65 @@ "resolved": "https://registry.npmjs.org/pick-by-alias/-/pick-by-alias-1.2.0.tgz", "integrity": "sha1-X3yysfIabh6ISgyHhVqko3NhEHs=" }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "plimit-lit": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/plimit-lit/-/plimit-lit-1.5.0.tgz", + "integrity": "sha512-Eb/MqCb1Iv/ok4m1FqIXqvUKPISufcjZ605hl3KM/n8GaX8zfhtgdLwZU3vKjuHGh2O9Rjog/bHTq8ofIShdng==", + "dev": true, + "requires": { + "queue-lit": "^1.5.0" + } + }, "pngjs": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==" }, "prebuild-install": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.2.tgz", - "integrity": "sha512-PzYWIKZeP+967WuKYXlTOhYBgGOvTRSfaKI89XnfJ0ansRAH7hDU45X+K+FZeI1Wb/7p/NnuctPH3g0IqKUuSQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", "requires": { - "detect-libc": "^1.0.3", + "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", + "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", - "simple-get": "^3.0.3", + "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" } }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + }, + "pretendo-grpc": { + "version": "git+ssh://git@github.com/PretendoNetwork/grpc-ts.git#b7bcb0d691cec3f88ff0627cb7431c14dd2d2d1d", + "from": "pretendo-grpc@github:PretendoNetwork/grpc-ts", + "requires": { + "long": "^5.2.1", + "protobufjs": "^7.2.3" + }, + "dependencies": { + "long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + } + } + }, "primitive-pool": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/primitive-pool/-/primitive-pool-1.1.0.tgz", @@ -4615,12 +11078,38 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "protobufjs": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.3.tgz", + "integrity": "sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==", "requires": { - "forwarded": "~0.1.2", + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "dependencies": { + "long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + } + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, @@ -4643,23 +11132,40 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, - "pxls": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/pxls/-/pxls-2.3.2.tgz", - "integrity": "sha512-pQkwgbLqWPcuES5iEmGa10OlCf5xG0blkIF3dg7PpRZShbTYcvAdfFfGL03SMrkaSUaa/V0UpN9HWg40O2AIIw==", + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "requires": { - "arr-flatten": "^1.1.0", - "compute-dims": "^1.1.0", - "flip-pixels": "^1.0.2", - "is-browser": "^2.1.0", - "is-buffer": "^2.0.3", - "to-uint8": "^1.4.1" + "side-channel": "^1.0.4" } }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" + }, + "queue-lit": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/queue-lit/-/queue-lit-1.5.0.tgz", + "integrity": "sha512-IslToJ4eiCEE9xwMzq3viOO5nH8sUWUCwoElrhNMozzr9IIt2qqvB4I+uHu/zJTQVqc9R5DFwok4ijNK1pU3fA==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "requires": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + } }, "range-parser": { "version": "1.2.1", @@ -4667,12 +11173,12 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } @@ -4702,15 +11208,24 @@ "util-deprecate": "~1.0.1" } }, - "regex-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regex-regex/-/regex-regex-1.0.0.tgz", - "integrity": "sha1-kEih6uuHD01IDavHb8Qs3MC8OnI=" + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } }, - "regexp-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", - "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } }, "request": { "version": "2.88.2", @@ -4740,12 +11255,57 @@ }, "dependencies": { "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" } } }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -4756,12 +11316,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "sanitizer": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/sanitizer/-/sanitizer-0.1.3.tgz", - "integrity": "sha1-1PCvdHXZp7ryqeWmEXGLqheKOeE=", - "dev": true - }, "saslprep": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", @@ -4776,93 +11330,128 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, + "scope-analyzer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", + "requires": { + "array-from": "^2.1.1", + "dash-ast": "^2.0.1", + "es6-map": "^0.1.5", + "es6-set": "^0.1.5", + "es6-symbol": "^3.1.1", + "estree-is-function": "^1.0.0", + "get-assigned-identifiers": "^1.1.0" + } + }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "2.0.0", "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", + "ms": "2.1.3", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "dependencies": { "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "sharp": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.28.1.tgz", - "integrity": "sha512-4mCGMEN4ntaVuFGwHx7FvkJQkIgbI+S+F9a3bI7ugdvKjPr4sF7/ibvlRKhJyzhoQi+ODM+XYY1de8xs7MHbfA==", - "requires": { - "color": "^3.1.3", - "detect-libc": "^1.0.3", - "node-addon-api": "^3.1.0", - "prebuild-install": "^6.1.1", - "semver": "^7.3.5", - "simple-get": "^3.1.0", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "requires": { - "lru-cache": "^6.0.0" + "ee-first": "1.1.1" } } } }, - "sift": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", - "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==" + }, + "sharp": { + "version": "0.31.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.31.3.tgz", + "integrity": "sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==", + "requires": { + "color": "^4.2.3", + "detect-libc": "^2.0.1", + "node-addon-api": "^5.0.0", + "prebuild-install": "^7.1.1", + "semver": "^7.3.8", + "simple-get": "^4.0.1", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" }, "simple-concat": { "version": "1.0.1", @@ -4870,11 +11459,11 @@ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" }, "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "requires": { - "decompress-response": "^4.2.0", + "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } @@ -4882,20 +11471,46 @@ "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "requires": { "is-arrayish": "^0.3.1" } }, - "sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, "sparse-bitfield": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", "optional": true, "requires": { "memory-pager": "^1.0.2" @@ -4904,7 +11519,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "sshpk": { "version": "1.16.1", @@ -4922,10 +11537,39 @@ "tweetnacl": "~0.14.0" } }, + "static-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", + "requires": { + "escodegen": "^1.11.1" + } + }, + "static-module": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", + "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", + "requires": { + "acorn-node": "^1.3.0", + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "^1.11.1", + "has": "^1.0.1", + "magic-string": "0.25.1", + "merge-source-map": "1.0.4", + "object-inspect": "^1.6.0", + "readable-stream": "~2.3.3", + "scope-analyzer": "^2.0.1", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.5", + "through2": "~2.0.3" + } + }, "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, "streamsearch": { "version": "0.1.2", @@ -4948,40 +11592,78 @@ "requires": { "atob-lite": "^2.0.0", "is-base64": "^0.1.0" + }, + "dependencies": { + "is-base64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-0.1.0.tgz", + "integrity": "sha512-WRRyllsGXJM7ZN7gPTCCQ/6wNPTRDwiWdPK66l5sJzcU/oOzcIcRRf0Rux8bkpox/1yjt0F6VJRsQOIG2qz5sg==" + } } }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" } }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "optional": true }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", @@ -5005,27 +11687,10 @@ "readable-stream": "^3.1.1" }, "dependencies": { - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - } - } - }, "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -5034,6 +11699,12 @@ } } }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, "tga": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tga/-/tga-1.0.4.tgz", @@ -5042,49 +11713,38 @@ "debug": "^2.6.1" } }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, "to-array-buffer": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/to-array-buffer/-/to-array-buffer-3.2.0.tgz", - "integrity": "sha512-zN33mwi0gpL+7xW1ITLfJ48CEj6ZQW0ZAP0MU+2W3kEY0PAIncyuxmD4OqkUVhPAbTP7amq9j/iwvZKYS+lzSQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/to-array-buffer/-/to-array-buffer-2.2.2.tgz", + "integrity": "sha512-ZLcA71btdGxBs6WH2559ybYfoQ23756bZACcU9pIUwbBJ4Bwr1DHW96XfXQoKSk87pYo9zp2VsWrcX+At988Bw==", "requires": { "flatten-vertex-data": "^1.0.2", "is-blob": "^2.0.1", "string-to-arraybuffer": "^1.0.0" } }, - "to-uint8": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/to-uint8/-/to-uint8-1.4.1.tgz", - "integrity": "sha512-o+ochsMlTZyucbww8It401FC2Rx+OP2RpDeYbA6h+y9HgedDl1UjdsJ9CmzKEG7AFP9es5PmJ4eDWeeeXihESg==", + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "clamp": "^1.0.1", - "is-base64": "^0.1.0", - "is-float-array": "^1.0.0", - "to-array-buffer": "^3.0.0" + "is-number": "^7.0.0" } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "topo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", - "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", - "dev": true, - "requires": { - "hoek": "6.x.x" - }, - "dependencies": { - "hoek": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", - "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", - "dev": true - } - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tough-cookie": { "version": "2.5.0", @@ -5103,6 +11763,48 @@ "punycode": "^2.1.1" } }, + "ts-error": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/ts-error/-/ts-error-1.0.6.tgz", + "integrity": "sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==" + }, + "tsc-alias": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/tsc-alias/-/tsc-alias-1.8.6.tgz", + "integrity": "sha512-vq+i6VpE83IeMsSJVcFN03ZBofADhr8/gIJXjxpbnTRfN/MFXy0+SBaKG2o7p95QqXBGkeG98HYz3IkOOveFbg==", + "dev": true, + "requires": { + "chokidar": "^3.5.3", + "commander": "^9.0.0", + "globby": "^11.0.4", + "mylas": "^2.1.9", + "normalize-path": "^3.0.0", + "plimit-lit": "^1.2.6" + } + }, + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "optional": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -5116,6 +11818,25 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -5125,21 +11846,27 @@ "mime-types": "~2.1.24" } }, - "type-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/type-name/-/type-name-2.0.2.tgz", - "integrity": "sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q=" - }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } }, "universalify": { "version": "1.0.0", @@ -5149,7 +11876,7 @@ "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "uri-js": { "version": "4.4.0", @@ -5159,155 +11886,50 @@ "punycode": "^2.1.0" } }, - "utif": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", - "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", "requires": { - "pako": "^1.0.5" + "punycode": "1.3.2", + "querystring": "0.2.0" }, "dependencies": { - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" } } }, + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "utils-copy": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/utils-copy/-/utils-copy-1.1.1.tgz", - "integrity": "sha1-biuXmCqozXPhGCo+b4vsPA9AWKc=", - "requires": { - "const-pinf-float64": "^1.0.0", - "object-keys": "^1.0.9", - "type-name": "^2.0.0", - "utils-copy-error": "^1.0.0", - "utils-indexof": "^1.0.0", - "utils-regex-from-string": "^1.0.0", - "validate.io-array": "^1.0.3", - "validate.io-buffer": "^1.0.1", - "validate.io-nonnegative-integer": "^1.0.0" - } - }, - "utils-copy-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-copy-error/-/utils-copy-error-1.0.1.tgz", - "integrity": "sha1-eR3jk8DwmJCv1Z88vqY18HmpT6U=", - "requires": { - "object-keys": "^1.0.9", - "utils-copy": "^1.1.0" - } - }, - "utils-indexof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-indexof/-/utils-indexof-1.0.0.tgz", - "integrity": "sha1-IP6r8J7xAYtSNkPoOA57yD7GG1w=", - "requires": { - "validate.io-array-like": "^1.0.1", - "validate.io-integer-primitive": "^1.0.0" - } - }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, - "utils-regex-from-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-regex-from-string/-/utils-regex-from-string-1.0.0.tgz", - "integrity": "sha1-/hopCfjeD/DVGCyA+8ZU1qaH0Yk=", - "requires": { - "regex-regex": "^1.0.0", - "validate.io-string-primitive": "^1.0.0" - } - }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, - "validate.io-array": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", - "integrity": "sha1-W1osr9j4uFq7L4hroVPy2Tond00=" - }, - "validate.io-array-like": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/validate.io-array-like/-/validate.io-array-like-1.0.2.tgz", - "integrity": "sha1-evn363tRcVvrIhVmjsXM5U+t21o=", - "requires": { - "const-max-uint32": "^1.0.2", - "validate.io-integer-primitive": "^1.0.0" - } - }, - "validate.io-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/validate.io-buffer/-/validate.io-buffer-1.0.2.tgz", - "integrity": "sha1-hS1nNAIZFNXROvwyUxdh43IO1E4=" - }, - "validate.io-integer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", - "integrity": "sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg=", - "requires": { - "validate.io-number": "^1.0.3" - } - }, - "validate.io-integer-primitive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-integer-primitive/-/validate.io-integer-primitive-1.0.0.tgz", - "integrity": "sha1-qaoBA1X+hoHA/qbBp0rSQZyt3cY=", - "requires": { - "validate.io-number-primitive": "^1.0.0" - } - }, - "validate.io-matrix-like": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/validate.io-matrix-like/-/validate.io-matrix-like-1.0.2.tgz", - "integrity": "sha1-XsMqddCInaxzbepovdYUWxVe38M=" - }, - "validate.io-ndarray-like": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-ndarray-like/-/validate.io-ndarray-like-1.0.0.tgz", - "integrity": "sha1-2KOw7RZbvx0vwNAHMnDPpVIpWRk=" - }, - "validate.io-nonnegative-integer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-nonnegative-integer/-/validate.io-nonnegative-integer-1.0.0.tgz", - "integrity": "sha1-gGkkOgjF+Y6VQTySnf17GPP28p8=", - "requires": { - "validate.io-integer": "^1.0.5" - } - }, - "validate.io-number": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", - "integrity": "sha1-9j/+2iSL8opnqNSODjtGGhZluvg=" - }, - "validate.io-number-primitive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-number-primitive/-/validate.io-number-primitive-1.0.0.tgz", - "integrity": "sha1-0uAfICmJNp3PEVVElWQgOv5YTlU=" - }, - "validate.io-positive-integer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-positive-integer/-/validate.io-positive-integer-1.0.0.tgz", - "integrity": "sha1-ftLQO0wnVYzGagCqsPDpIYFKZYI=", - "requires": { - "validate.io-integer": "^1.0.5" - } - }, - "validate.io-string-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/validate.io-string-primitive/-/validate.io-string-primitive-1.0.1.tgz", - "integrity": "sha1-uBNbn7E3K94C/dU60dDM1t55j+4=" - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -5323,11 +11945,6 @@ "extsprintf": "^1.2.0" } }, - "weak-map": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.5.tgz", - "integrity": "sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes=" - }, "webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -5342,18 +11959,59 @@ "webidl-conversions": "^7.0.0" } }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "requires": { - "string-width": "^1.0.2 || 2" + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "xml2js": { "version": "0.4.23", @@ -5371,44 +12029,57 @@ } } }, - "xml2json": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/xml2json/-/xml2json-0.12.0.tgz", - "integrity": "sha512-EPJHRWJnJUYbJlzR4pBhZODwWdi2IaYGtDdteJi0JpZ4OD31IplWALuit8r73dJuM4iHZdDVKY1tLqY2UICejg==", - "dev": true, - "requires": { - "hoek": "^4.2.1", - "joi": "^13.1.2", - "node-expat": "^2.3.18" - } - }, - "xmlbuilder": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==" - }, "xmlbuilder2": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-2.4.0.tgz", - "integrity": "sha512-KrOVUGD65xTQ7ZA+GMQGdBSpe1Ufu5ylCQSYVk6QostySDkxPmAQ0WWIu7dR3JjLfVbF22RFQX7KyrZ6VTLcQg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-3.0.2.tgz", + "integrity": "sha512-h4MUawGY21CTdhV4xm3DG9dgsqyhDkZvVJBx88beqX8wJs3VgyGQgAn5VreHuae6unTQxh115aMK5InCVmOIKw==", "requires": { - "@oozcitak/dom": "1.15.8", + "@oozcitak/dom": "1.15.10", "@oozcitak/infra": "1.0.8", "@oozcitak/util": "8.3.8", - "@types/node": "14.6.2", + "@types/node": "*", "js-yaml": "3.14.0" } }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index c49e5d0..0e99efd 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,10 @@ "description": "Web frontend for the Pretendo Network miiverse replacement, Juxt.", "main": "./src/server", "scripts": { - "start": "node ." + "start": "node .", + "lint": "npx eslint .", + "build": "npm run lint && npm run clean && npx tsc && npx tsc-alias", + "clean": "rimraf ./dist" }, "repository": { "type": "git", @@ -18,37 +21,45 @@ }, "homepage": "https://github.com/PretendoNetwork/juxt-web#readme", "dependencies": { + "aws-sdk": "^2.1192.0", "body-parser": "^1.19.0", "colors": "^1.4.0", "cookie-parser": "^1.4.5", + "crc": "^4.3.2", + "date-fns": "^2.29.3", "express": "^4.17.1", + "express-rate-limit": "^6.7.0", "fs-extra": "^9.0.1", "hashmap": "^2.4.0", - "image-pixels": "^2.2.2", + "image-pixels": "^1.1.1", "memory-cache": "^0.2.0", "moment": "^2.29.1", "mongoose": "^6.0.13", "mongoose-fuzzy-search-next": "^1.0.13", "mongoose-unique-validator": "^3.0.0", "morgan": "^1.10.0", + "nice-grpc": "^2.1.4", "node-rsa": "^1.1.1", "node-snowflake": "0.0.1", "pako": "^2.0.2", "pngjs": "^6.0.0", - "sharp": "^0.28.1", + "pretendo-grpc": "github:PretendoNetwork/grpc-ts", + "sharp": "^0.31.3", "tga": "^1.0.4", "xml2js": "^0.4.23", - "xmlbuilder": "^15.1.1", - "xmlbuilder2": "^2.4.0" + "xmlbuilder2": "^3.0.2" }, "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.59.11", + "@typescript-eslint/parser": "^5.59.11", "bmp-js": "^0.1.0", "ejs": "^3.1.5", + "eslint": "^8.42.0", "express-slow-down": "^1.4.0", "express-subdomain": "^1.0.5", "multer": "^1.4.2", - "object-to-xml": "^2.0.0", "request": "^2.88.2", - "xml2json": "^0.12.0" + "tsc-alias": "^1.8.6", + "typescript": "^5.1.3" } } diff --git a/src/accountdb.js b/src/accountdb.js deleted file mode 100644 index 284d46d..0000000 --- a/src/accountdb.js +++ /dev/null @@ -1,44 +0,0 @@ -const mongoose = require('mongoose'); -const { account_db: mongooseConfig } = require('../config.json'); -const { uri, database, options } = mongooseConfig; -const logger = require('./logger'); - -let pnidConnection; - -function connect() { - if(!pnidConnection) - pnidConnection = makeNewConnection(`${uri}/${database}`, options); -} - -function verifyConnected() { - if (!pnidConnection) { - throw new Error('Cannot make database requests without being connected'); - } -} - -function makeNewConnection(uri) { - pnidConnection = mongoose.createConnection(uri, options); - - pnidConnection.on('error', function (error) { - logger.error(`MongoDB connection ${this.name} ${JSON.stringify(error)}`); - pnidConnection.close().catch(() => logger.error(`MongoDB failed to close connection ${this.name}`)); - }); - - pnidConnection.on('connected', function () { - logger.info(`MongoDB connected ${this.name} / ${uri}`); - }); - - pnidConnection.on('disconnected', function () { - logger.info(`MongoDB disconnected ${this.name}`); - }); - - return pnidConnection; -} - -pnidConnection = makeNewConnection(`${uri}/${database}`, options); - -module.exports = { - pnidConnection, - connect, - verifyConnected -}; diff --git a/src/database.js b/src/database.js index 87680c6..84cbfed 100644 --- a/src/database.js +++ b/src/database.js @@ -1,16 +1,19 @@ const mongoose = require('mongoose'); const { mongoose: mongooseConfig } = require('../config.json'); -const { ENDPOINT } = require('./models/endpoint'); const { COMMUNITY } = require('./models/communities'); -const { POST } = require('./models/post'); -const { USER } = require('./models/user'); +const { CONTENT } = require('./models/content'); const { CONVERSATION } = require('./models/conversation'); +const { ENDPOINT } = require('./models/endpoint'); +const { NOTIFICATION } = require('./models/notifications'); +const { POST } = require('./models/post'); +const { SETTINGS } = require('./models/settings'); +const { REPORT } = require('./models/report'); + const { uri, database, options } = mongooseConfig; -const { PNID } = require('./models/pnid'); const logger = require('./logger'); -const accountDB = require('./accountdb'); let connection; +mongoose.set('strictQuery', true); async function connect() { await mongoose.connect(`${uri}/${database}`, options); @@ -33,9 +36,9 @@ function verifyConnected() { async function getCommunities(numberOfCommunities) { verifyConnected(); if(numberOfCommunities === -1) - return COMMUNITY.find({ parent: null, type: 0 }); + return COMMUNITY.find({ parent: null, type: [0,2] }); else - return COMMUNITY.find({ parent: null, type: 0 }).limit(numberOfCommunities); + return COMMUNITY.find({ parent: null, type: [0,2] }).limit(numberOfCommunities); } async function getMostPopularCommunities(numberOfCommunities) { @@ -65,21 +68,21 @@ async function getCommunityByTitleID(title_id) { async function getCommunityByID(community_id) { verifyConnected(); return COMMUNITY.findOne({ - community_id: community_id + olive_community_id: community_id }); } async function getTotalPostsByCommunity(community) { verifyConnected(); return POST.find({ - title_id: community.title_id, - parent: null + community_id: community.olive_community_id, + parent: null, + removed: false }).countDocuments(); } async function getPostByID(postID) { verifyConnected(); - return POST.findOne({ id: postID }); @@ -89,14 +92,16 @@ async function getPostsByUserID(userID) { verifyConnected(); return POST.find({ pid: userID, - parent: null + parent: null, + removed: false }); } async function getPostReplies(postID, number) { verifyConnected(); return POST.find({ - parent: postID + parent: postID, + removed: false }).limit(number); } @@ -107,7 +112,8 @@ async function getDuplicatePosts(pid, post) { body: post.body, painting: post.painting, screenshot: post.screenshot, - parent: null + parent: null, + removed: false }); } @@ -116,7 +122,8 @@ async function getUserPostRepliesAfterTimestamp(post, numberOfPosts) { return POST.find({ parent: post.pid, created_at: { $lt: post.created_at }, - message_to_pid: null + message_to_pid: null, + removed: false }).limit(numberOfPosts); } @@ -125,7 +132,8 @@ async function getNumberUserPostsByID(userID, number) { return POST.find({ pid: userID, parent: null, - message_to_pid: null + message_to_pid: null, + removed: false }).sort({ created_at: -1}).limit(number); } @@ -134,68 +142,93 @@ async function getTotalPostsByUserID(userID) { return POST.find({ pid: userID, parent: null, - message_to_pid: null + message_to_pid: null, + removed: false }).countDocuments(); } async function getHotPostsByCommunity(community, numberOfPosts) { verifyConnected(); return POST.find({ - title_id: community.title_id, - parent: null + community_id: community.olive_community_id, + parent: null, + removed: false }).sort({empathy_count: -1}).limit(numberOfPosts); } async function getNumberNewCommunityPostsByID(community, number) { verifyConnected(); return POST.find({ - title_id: community.title_id, - parent: null + community_id: community.olive_community_id, + parent: null, + removed: false }).sort({ created_at: -1}).limit(number); } async function getNumberPopularCommunityPostsByID(community, limit, offset) { verifyConnected(); return POST.find({ - title_id: community.title_id, - parent: null + community_id: community.olive_community_id, + parent: null, + removed: false }).sort({ empathy_count: -1}).skip(offset).limit(limit); } async function getNumberVerifiedCommunityPostsByID(community, limit, offset) { verifyConnected(); return POST.find({ - title_id: community.title_id, + community_id: community.olive_community_id, verified: true, - parent: null + parent: null, + removed: false }).sort({ created_at: -1}).skip(offset).limit(limit); } async function getPostsByCommunity(community, numberOfPosts) { verifyConnected(); return POST.find({ - title_id: community.title_id, - parent: null + community_id: community.olive_community_id, + parent: null, + removed: false }).limit(numberOfPosts); } async function getPostsByCommunityKey(community, numberOfPosts, search_key) { verifyConnected(); return POST.find({ - title_id: community.title_id, + community_id: community.olive_community_id, search_key: search_key, - parent: null + parent: null, + removed: false }).limit(numberOfPosts); } async function getNewPostsByCommunity(community, limit, offset) { verifyConnected(); return POST.find({ - community_id: community.community_id, - parent: null + community_id: community.olive_community_id, + parent: null, + removed: false }).sort({ created_at: -1 }).skip(offset).limit(limit); } +async function getAllUserPosts(pid) { + verifyConnected(); + return POST.find({ + pid: pid, + message_to_pid: null + }); +} + +async function getRemovedUserPosts(pid) { + verifyConnected(); + return POST.find({ + pid: pid, + message_to_pid: null, + removed: true + }); +} + async function getUserPostsAfterTimestamp(post, numberOfPosts) { verifyConnected(); return POST.find({ @@ -203,6 +236,7 @@ async function getUserPostsAfterTimestamp(post, numberOfPosts) { created_at: { $lt: post.created_at }, parent: null, message_to_pid: null, + removed: false }).limit(numberOfPosts); } @@ -211,118 +245,113 @@ async function getUserPostsOffset(pid, limit, offset) { return POST.find({ pid: pid, parent: null, - message_to_pid: null + message_to_pid: null, + removed: false }).skip(offset).limit(limit).sort({ created_at: -1}); } async function getCommunityPostsAfterTimestamp(post, numberOfPosts) { verifyConnected(); return POST.find({ - title_id: post.title_id, + community_id: post.community_id, created_at: { $lt: post.created_at }, - parent: null + parent: null, + removed: false }).limit(numberOfPosts); } -async function pushNewNotificationByPID(PID, content, link) { +async function getEndpoints() { verifyConnected(); - return USER.update( - { pid: PID }, { $push: { notification_list: { content: content, link: link, read: false, created_at: Date() }}}); + return ENDPOINT.find({}); } -async function pushNewNotificationToAll(content, link) { - verifyConnected(); - return USER.updateMany( - {}, { $push: { notification_list: { content: content, link: link, read: false, created_at: Date() }}}); -} - -async function getDiscoveryHosts() { +async function getEndPoint(accessLevel) { verifyConnected(); return ENDPOINT.findOne({ - version: 1 - }); + server_access_level: accessLevel + }) } -async function getUsers(numberOfUsers) { +async function getUsersSettings(numberOfUsers) { verifyConnected(); if(numberOfUsers === -1) - return USER.find({}); + return SETTINGS.find({}); else - return USER.find({}).limit(numberOfUsers); + return SETTINGS.find({}).limit(numberOfUsers); } -async function getFollowingUsers(user) { +async function getUsersContent(numberOfUsers) { verifyConnected(); - return USER.find({ - pid: user.following_users + if(numberOfUsers === -1) + return SETTINGS.find({}); + else + return SETTINGS.find({}).limit(numberOfUsers); +} + +async function getUserSettings(pid) { + verifyConnected(); + return SETTINGS.findOne({pid: pid}); +} + +async function getUserContent(pid) { + verifyConnected(); + return CONTENT.findOne({pid: pid}); +} + +async function getFollowingUsers(content) { + verifyConnected(); + return SETTINGS.find({ + pid: content.following_users }); } -async function getFollowedUsers(user) { +async function getFollowedUsers(content) { verifyConnected(); - return USER.find({ - pid: user.followed_users + return SETTINGS.find({ + pid: content.followed_users }); } -async function getUserByPID(PID) { - verifyConnected(); - - return USER.findOne({ - pid: PID - }); -} - -async function getUserByUsername(user_id) { - verifyConnected(); - - return USER.findOne({ - pnid: new RegExp(`^${user_id}$`, 'i') - }); -} - -async function getServerConfig() { - verifyConnected(); - return ENDPOINT.findOne(); -} - -async function getNewsFeed(user, numberOfPosts) { +async function getNewsFeed(content, numberOfPosts) { verifyConnected(); return POST.find({ $or: [ - {pid: user.followed_users}, - {pid: user.pid}, - {community_id: user.followed_communities}, + {pid: content.followed_users}, + {pid: content.pid}, + {community_id: content.followed_communities}, ], parent: null, - message_to_pid: null + message_to_pid: null, + removed: false }).limit(numberOfPosts).sort({ created_at: -1}); } -async function getNewsFeedAfterTimestamp(user, numberOfPosts, post) { +async function getNewsFeedAfterTimestamp(content, numberOfPosts, post) { verifyConnected(); return POST.find({ $or: [ - {pid: user.followed_users}, - {pid: user.pid}, - {community_id: user.followed_communities}, + {pid: content.followed_users}, + {pid: content.pid}, + {community_id: content.followed_communities}, ], created_at: { $lt: post.created_at }, parent: null, - message_to_pid: null + message_to_pid: null, + removed: false }).limit(numberOfPosts).sort({ created_at: -1}); } -async function getNewsFeedOffset(user, limit, offset) { +async function getNewsFeedOffset(content, limit, offset) { verifyConnected(); return POST.find({ $or: [ - {pid: user.followed_users}, - {pid: user.pid}, - {community_id: user.followed_communities}, + {pid: content.followed_users}, + {pid: content.pid}, + {community_id: content.followed_communities}, ], parent: null, - message_to_pid: null + message_to_pid: null, + removed: false }).skip(offset).limit(limit).sort({ created_at: -1}); } @@ -356,7 +385,8 @@ async function getConversationMessages(community_id, limit, offset) { verifyConnected(); return POST.find({ community_id: community_id, - parent: null + parent: null, + removed: false }).sort({created_at: 1}).skip(offset).limit(limit); } @@ -376,22 +406,66 @@ async function getLatestMessage(pid, pid2) { $or: [ {pid: pid, message_to_pid: pid2}, {pid: pid2, message_to_pid: pid} - ] + ], + removed: false }) } -async function getPNIDS() { - accountDB.verifyConnected(); - return PNID.find({}); +async function getNotifications(pid, limit, offset) { + verifyConnected(); + return NOTIFICATION.find({ + pid: pid, + }).sort({lastUpdated: -1}).skip(offset).limit(limit); } -async function getPNID(pid) { - accountDB.verifyConnected(); - return PNID.findOne({ +async function getNotification(pid, type, reference_id) { + verifyConnected(); + return NOTIFICATION.findOne({ + pid: pid, + type: type, + reference_id: reference_id + }) +} + +async function getLastNotification(pid) { + verifyConnected(); + return NOTIFICATION.findOne({ pid: pid - }); + }).sort({lastUpdated: -1}).limit(1); } +async function getUnreadNotificationCount(pid) { + verifyConnected(); + return NOTIFICATION.find({ + pid: pid, + read: false + }).countDocuments(); +} + +async function getAllReports(offset, limit) { + verifyConnected(); + return REPORT.find().sort({created_at: -1}).skip(offset).limit(limit); +} + +async function getAllOpenReports(offset, limit) { + verifyConnected(); + return REPORT.find({ resolved: false }).sort({created_at: -1}).skip(offset).limit(limit); +} + +async function getReportsByUser(pid, offset, limit) { + verifyConnected(); + return REPORT.find({ reported_by: pid }).sort({created_at: -1}).skip(offset).limit(limit); +} + +async function getReportsByPost(postID, offset, limit) { + verifyConnected(); + return REPORT.find({ post_id: postID }).sort({created_at: -1}).skip(offset).limit(limit); +} + +async function getReportById(id) { + verifyConnected(); + return REPORT.findById(id); +} module.exports = { @@ -403,7 +477,6 @@ module.exports = { getCommunityByTitleID, getCommunityByID, getTotalPostsByCommunity, - getDiscoveryHosts, getPostsByCommunity, getHotPostsByCommunity, getNumberNewCommunityPostsByID, @@ -418,15 +491,11 @@ module.exports = { getTotalPostsByUserID, getPostByID, getDuplicatePosts, - getUsers, - getUserByPID, - getUserByUsername, + getEndpoints, + getEndPoint, getUserPostsAfterTimestamp, getUserPostsOffset, getCommunityPostsAfterTimestamp, - getServerConfig, - pushNewNotificationByPID, - pushNewNotificationToAll, getNewsFeed, getNewsFeedAfterTimestamp, getNewsFeedOffset, @@ -438,6 +507,19 @@ module.exports = { getConversationMessages, getUnreadConversationCount, getLatestMessage, - getPNID, - getPNIDS + getUsersSettings, + getUsersContent, + getUserSettings, + getUserContent, + getNotifications, + getUnreadNotificationCount, + getNotification, + getLastNotification, + getAllUserPosts, + getRemovedUserPosts, + getAllReports, + getAllOpenReports, + getReportsByUser, + getReportsByPost, + getReportById }; diff --git a/src/middleware/auth.js b/src/middleware/auth.js index 87bddc0..c619c55 100644 --- a/src/middleware/auth.js +++ b/src/middleware/auth.js @@ -1,104 +1,136 @@ const config = require('../../config.json'); const util = require('../util'); +const moment = require("moment/moment"); +const db = require('../database'); -function auth(request, response, next) { - if(request.path.includes('/css/') || request.path.includes('/fonts/') - || request.path.includes('/js/') || request.path.includes('/icons/') - || request.path.includes('/banner/') || request.path.includes('/drawing/') - || request.path.includes('/screenshot/') || request.path.includes('/web/')) { - if(request.subdomains.indexOf('juxt') !== -1) { +async function auth(request, response, next) { + // Web files + if(isStartOfPath(request.path, '/css/') || + isStartOfPath(request.path, '/fonts/') || + isStartOfPath(request.path, '/js/') || + request.path === '/favicon.ico' || + isStartOfPath(request.path, '/web/') || + isStartOfPath(request.path, '/images/') || + isStartOfPath(request.path, '/image/')) { + request.lang = util.data.processLanguage(); + if(includes(request, 'juxt')) request.directory = 'web'; - request.lang = util.data.processLanguage(); - } - else { - request.directory = request.subdomains[1]; - } + else + request.directory = includes(request, 'portal') ? 'portal' : 'ctr'; return next() } - if(request.subdomains.indexOf('juxt') !== -1) { - request.directory = 'web'; - if(request.path === '/login' || request.path === '/favicon.ico' || - (request.path.includes('/posts/') && !request.path.includes('/empathy'))) { - request.lang = util.data.processLanguage(); - request.pid = util.data.processServiceToken(request.cookies.access_token) || 1000000000; - request.paramPackData = null; - request.directory = 'web'; - return next(); + // Get pid and fetch user data + if(request.cookies.access_token) { + try { + request.user = await util.data.getUserDataFromToken(request.cookies.access_token); } - else { - if(request.cookies.access_token === undefined || request.cookies.access_token === null) - { - return response.redirect('/login'); - } - let pid = util.data.processServiceToken(request.cookies.access_token); - if(pid === null) - { - return response.redirect('/login'); - } - else { - request.lang = util.data.processLanguage(); - request.pid = pid; - request.paramPackData = null; - request.directory = 'web'; - return next(); - } + catch(e) { + return response.render('web/login.ejs', {toast: 'Unable to reach the account server. Try again later.', cdnURL: config.CDN_domain,}); + } + request.pid = request.user ? request.user.pid : null; + } + else if(request.headers["x-nintendo-servicetoken"]) { + request.pid = request.headers["x-nintendo-servicetoken"] ? await util.data.processServiceToken(request.headers["x-nintendo-servicetoken"]) : null; + request.user = request.pid ? await util.data.getUserDataFromPid(request.pid) : null; + } + + // Set headers + request.paramPackData = request.headers["x-nintendo-parampack"] ? util.data.decodeParamPack(request.headers["x-nintendo-parampack"]) : null; + response.header('X-Nintendo-WhiteList', config.whitelist); + + // Ban check + if(request.user) { + if (request.user.serverAccessLevel !== 'test' && request.user.serverAccessLevel !== 'dev') { + response.status(500); + return response.send('No access. Must be tester or dev'); + } + // Set moderator status + request.moderator = request.user.accessLevel >= 2; + const user = await db.getUserSettings(request.pid); + if(user && moment(user.ban_lift_date) <= moment() && user.account_status !== 3) { + user.account_status = 0; + await user.save() + } + // This includes ban checks for both Juxt specifically and the account server, ideally this should be squashed + // assuming we support more gradual bans on PNID's + if(user && (user.account_status < 0 || user.account_status > 1 || request.user.accessLevel < 0)) + { + response.render(request.directory + '/partials/ban_notification.ejs', { + user: user, + moment: moment, + cdnURL: config.CDN_domain, + lang: request.lang, + pid: request.pid + }); } } - if(request.subdomains.indexOf('admin') !== -1) { - if(request.path === '/login' || request.path === '/token' || request.path === '/favicon.ico') { - return next() + // Juxt Website + if(includes(request, 'juxt')) { + request.lang = util.data.processLanguage(); + request.token = request.cookies.access_token; + request.paramPackData = null; + request.directory = 'web'; + + // Open access pages + if(isStartOfPath(request.path, '/users/') || + (isStartOfPath(request.path, '/titles/') && request.path !== '/titles/show') || + (isStartOfPath(request.path, '/posts/') && !request.path.includes('/empathy'))) { + if(!request.pid) + request.pid = 1000000000; + return next(); } - else { - if(request.cookies.token === undefined || request.cookies.token === null) - { - return response.redirect('/login'); - } - let pid = util.data.processServiceToken(request.cookies.token); - if(pid === null) - { - return response.redirect('/login'); - } - else { - request.pid = pid; - return next(); - } + // Login endpoint + if(request.path === '/login') { + if(request.pid) + return response.redirect('/titles/show?src=login'); + return next(); } + if(!request.pid) + return response.redirect('/login'); + + return next(); } else { - let token = request.cookies.token || request.headers["x-nintendo-servicetoken"]; - if(!token) { - return response.render('portal/ban_notification.ejs', { + // This section includes checks if a user is a developer and adds exceptions for these cases + if(!request.pid) { + return response.render('portal/partials/ban_notification.ejs', { + user: null, + error: "Unable to parse service token. Are you using a Nintendo Network ID?" + }); + } + if(request.user.accessLevel < 3 && !request.paramPackData) { + return response.render('portal/partials/ban_notification.ejs', { user: null, error: "Missing auth headers" }); } - else { - let pid = util.data.processServiceToken(token); - let paramPackData; - if(request.headers["x-nintendo-parampack"]) - paramPackData = util.data.decodeParamPack(request.headers["x-nintendo-parampack"]); - else - paramPackData = null; - if(pid === null) { - return response.render('portal/ban_notification.ejs', { - user: null, - error: "Unable to parse service token. Are you using a Nintendo Network ID?" - }); - } - - else { - response.header('X-Nintendo-WhiteList', config.whitelist); - let paramPack = request.headers["x-nintendo-parampack"] || undefined; - request.lang = util.data.processLanguage(paramPack); - request.pid = pid; - request.paramPackData = paramPackData; - request.directory = request.subdomains[1]; - return next(); - } + if(!request.user) { + return response.render('portal/partials/ban_notification.ejs', { + user: null, + error: "Unable to fetch user data. Please try again later." + }); } + let userAgent = request.headers['user-agent']; + if(request.user.accessLevel < 3 && (request.cookies.access_token || (!userAgent.includes('Nintendo WiiU') && !userAgent.includes('Nintendo 3DS')))) + return response.render('portal/partials/ban_notification.ejs', { + user: null, + error: "Invalid authentication method used." + }); + + request.lang = util.data.processLanguage(request.paramPackData); + request.directory = includes(request, 'portal') ? 'portal' : 'ctr'; + return next(); } } +function isStartOfPath(path, value) { + return path.indexOf(value) === 0; +} + +function includes(request, domain) { + return request.subdomains.findIndex(element => element.includes(domain)) !== -1 +} + module.exports = auth; diff --git a/src/middleware/client-header.js b/src/middleware/client-header.js deleted file mode 100644 index e722968..0000000 --- a/src/middleware/client-header.js +++ /dev/null @@ -1,38 +0,0 @@ -const xmlbuilder = require('xmlbuilder'); - -const VALID_CLIENT_ID_SECRET_PAIRS = { - // 'Key' is the client ID, 'Value' is the client secret - 'a2efa818a34fa16b8afbc8a74eba3eda': 'c91cdb5658bd4954ade78533a339cf9a', // Possibly WiiU exclusive? - 'daf6227853bcbdce3d75baee8332b': '3eff548eac636e2bf45bb7b375e7b6b0', // Possibly 3DS exclusive? - 'ea25c66c26b403376b4c5ed94ab9cdea': 'd137be62cb6a2b831cad8c013b92fb55', // Possibly 3DS exclusive? -}; - - -function nintendoClientHeaderCheck(request, response, next) { - response.set('Content-Type', 'text/xml'); - response.set('Server', 'Nintendo 3DS (http)'); - response.set('X-Nintendo-Date', new Date().getTime()); - - const {headers} = request; - - if ( - !headers['x-nintendo-client-id'] || - !headers['x-nintendo-client-secret'] || - !VALID_CLIENT_ID_SECRET_PAIRS[headers['x-nintendo-client-id']] || - headers['x-nintendo-client-secret'] !== VALID_CLIENT_ID_SECRET_PAIRS[headers['x-nintendo-client-id']] - ) { - return response.send(xmlbuilder.create({ - errors: { - error: { - cause: 'client_id', - code: '0004', - message: 'API application invalid or incorrect application credentials' - } - } - }).end()); - } - - return next(); -} - -module.exports = nintendoClientHeaderCheck; \ No newline at end of file diff --git a/src/middleware/consoleAuth.js b/src/middleware/consoleAuth.js new file mode 100644 index 0000000..8baf643 --- /dev/null +++ b/src/middleware/consoleAuth.js @@ -0,0 +1,71 @@ +const config = require('../../config.json'); +const util = require('../util'); +const moment = require("moment/moment"); +const db = require('../database'); + +async function auth(request, response, next) { + // Get pid and fetch user data + if(request.headers["x-nintendo-servicetoken"]) { + request.pid = request.headers["x-nintendo-servicetoken"] ? await util.data.processServiceToken(request.headers["x-nintendo-servicetoken"]) : null; + request.user = request.pid ? await util.data.getUserDataFromPid(request.pid) : null; + } + + // Set headers + request.paramPackData = request.headers["x-nintendo-parampack"] ? util.data.decodeParamPack(request.headers["x-nintendo-parampack"]) : null; + response.header('X-Nintendo-WhiteList', config.whitelist); + + // Ban check + if(request.user) { + // Set moderator status + request.moderator = request.user.accessLevel >= 2; + const user = await db.getUserSettings(request.pid); + if(user && moment(user.ban_lift_date) <= moment() && user.account_status !== 3) { + user.account_status = 0; + await user.save() + } + // This includes ban checks for both Juxt specifically and the account server, ideally this should be squashed + // assuming we support more gradual bans on PNID's + if(user && (user.account_status < 0 || user.account_status > 1 || request.user.accessLevel < 0)) + { + response.render(request.directory + '/partials/ban_notification.ejs', { + user: user, + moment: moment, + cdnURL: config.CDN_domain, + lang: request.lang, + pid: request.pid + }); + } + } + + // This section includes checks if a user is a developer and adds exceptions for these cases + if(!request.pid) { + return response.render('portal/partials/ban_notification.ejs', { + user: null, + error: "Unable to parse service token. Are you using a Nintendo Network ID?" + }); + } + if(request.user.accessLevel < 3 && !request.paramPackData) { + return response.render('portal/partials/ban_notification.ejs', { + user: null, + error: "Missing auth headers" + }); + } + if(!request.user) { + return response.render('portal/partials/ban_notification.ejs', { + user: null, + error: "Unable to fetch user data. Please try again later." + }); + } + let userAgent = request.headers['user-agent']; + if(request.user.accessLevel < 3 && (request.cookies.access_token || (!userAgent.includes('Nintendo WiiU') && !userAgent.includes('Nintendo 3DS')))) + return response.render('portal/partials/ban_notification.ejs', { + user: null, + error: "Invalid authentication method used." + }); + + request.lang = util.data.processLanguage(request.paramPackData); + request.directory = request.subdomains[1]; + return next(); +} + +module.exports = auth; diff --git a/src/middleware/pnid.js b/src/middleware/pnid.js deleted file mode 100644 index 5d47cde..0000000 --- a/src/middleware/pnid.js +++ /dev/null @@ -1,50 +0,0 @@ -const xmlbuilder = require('xmlbuilder'); -const database = require('../database'); - -async function PNIDMiddleware(request, response, next) { - const { headers } = request; - - if (!headers.authorization || !(headers.authorization.startsWith('Bearer') || headers.authorization.startsWith('Basic'))) { - return next(); - } - - const [type, token] = headers.authorization.split(' '); - let user; - - if (type === 'Basic') { - user = await database.getUserBasic(token); - } else { - user = await database.getUserBearer(token); - } - - if (!user) { - response.status(401); - - if (type === 'Bearer') { - return response.send(xmlbuilder.create({ - errors: { - error: { - cause: 'access_token', - code: '0005', - message: 'Invalid access token' - } - } - }).end()); - } - - return response.send(xmlbuilder.create({ - errors: { - error: { - code: '1105', - message: 'Email address, username, or password, is not valid' - } - } - }).end()); - } - - request.pnid = user; - - return next(); -} - -module.exports = PNIDMiddleware; \ No newline at end of file diff --git a/src/middleware/ratelimit.js b/src/middleware/ratelimit.js deleted file mode 100644 index c354b99..0000000 --- a/src/middleware/ratelimit.js +++ /dev/null @@ -1,7 +0,0 @@ -const slowDown = require("express-slow-down"); - -module.exports = resetPasswordSpeedLimiter = slowDown({ - windowMs: 2 * 60 * 1000, - delayAfter: 10, - delayMs: 100 -}); diff --git a/src/middleware/session.js b/src/middleware/session.js deleted file mode 100644 index e8b663f..0000000 --- a/src/middleware/session.js +++ /dev/null @@ -1,23 +0,0 @@ -// super basic and there's probably a much better way to do this - -// this will only be used during the registration process, to track the progress of the user -// express-session uses cookies which the WiiU does not support during the registration process - -// temp, in-memory session storage -const sessionStore = {}; - -function sessionMiddlware(request, response, next) { - const ip = request.headers['x-forwarded-for'] || request.connection.remoteAddress; - - if (!sessionStore[ip]) { - sessionStore[ip] = {}; - } - - const session = sessionStore[ip]; - - request.session = session; - - return next(); -} - -module.exports = sessionMiddlware; \ No newline at end of file diff --git a/src/middleware/staticFiles.js b/src/middleware/staticFiles.js new file mode 100644 index 0000000..3ff02c1 --- /dev/null +++ b/src/middleware/staticFiles.js @@ -0,0 +1,33 @@ +const util = require('../util'); + +async function staticFiles(request, response, next) { + // Web files + if(isStartOfPath(request.path, '/css/') || + isStartOfPath(request.path, '/fonts/') || + isStartOfPath(request.path, '/js/') || + request.path === '/favicon.ico' || + isStartOfPath(request.path, '/web/') || + isStartOfPath(request.path, '/images/') || + isStartOfPath(request.path, '/image/')) { + + request.lang = util.data.processLanguage(); + + if(request.subdomains.includes('juxt')) + request.directory = 'web'; + else + request.directory = request.subdomains[1]; + return next() + } + else if(request.path === "/") { + return response.redirect('/titles/show'); + } + else + return response.sendStatus(404); +} + +function isStartOfPath(path, value) { + return path.indexOf(value) === 0; +} + + +module.exports = staticFiles; diff --git a/src/middleware/webAuth.js b/src/middleware/webAuth.js new file mode 100644 index 0000000..b861a69 --- /dev/null +++ b/src/middleware/webAuth.js @@ -0,0 +1,68 @@ +const config = require('../../config.json'); +const util = require('../util'); +const moment = require("moment/moment"); +const db = require('../database'); + +async function auth(request, response, next) { + // Get pid and fetch user data + request.lang = util.data.processLanguage(); + request.paramPackData = null; + request.directory = 'web'; + request.token = request.cookies.access_token; + if(request.cookies.access_token) { + try { + request.user = await util.data.getUserDataFromToken(request.token); + } + catch(e) { + console.log(e); + if(request.path === "/login") { + return next(); + } + return response.render('web/login.ejs', {toast: 'Unable to reach the account server. Try again later.', cdnURL: config.CDN_domain,}); + } + request.pid = request.user ? request.user.pid : null; + } + + // Ban check + if(request.user) { + // Set moderator status + request.moderator = request.user.accessLevel >= 2; + const user = await db.getUserSettings(request.pid); + if(user && moment(user.ban_lift_date) <= moment() && user.account_status !== 3) { + user.account_status = 0; + await user.save() + } + // This includes ban checks for both Juxt specifically and the account server, ideally this should be squashed + // assuming we support more gradual bans on PNID's + if(user && (user.account_status < 0 || user.account_status > 1 || request.user.accessLevel < 0)) + { + return response.render('web/login.ejs', {toast: 'Your account has been suspended. For more information, log into https://pretendo.network/account', cdnURL: config.CDN_domain,}); + } + } + + // Open access pages + if(isStartOfPath(request.path, '/users/') || + (isStartOfPath(request.path, '/titles/') && request.path !== '/titles/show') || + (isStartOfPath(request.path, '/posts/') && !request.path.includes('/empathy'))) { + if(!request.pid) + request.pid = 1000000000; + return next(); + } + // Login endpoint + if(request.path === '/login') { + if(request.pid) + return response.redirect('/titles/show?src=login'); + return next(); + } + console.log(request.route); + if(!request.user && request.path !== '/') + return response.redirect('/login'); + + return next(); +} + +function isStartOfPath(path, value) { + return path.indexOf(value) === 0; +} + +module.exports = auth; diff --git a/src/middleware/xml-parser.js b/src/middleware/xml-parser.js deleted file mode 100644 index 12fb614..0000000 --- a/src/middleware/xml-parser.js +++ /dev/null @@ -1,35 +0,0 @@ -const { document: xmlParser } = require('xmlbuilder2'); - -function XMLMiddleware(request, response, next) { - if (request.method == 'POST' || request.method == 'PUT') { - const headers = request.headers; - let body = ''; - - if ( - !headers['content-type'] || - !headers['content-type'].toLowerCase().includes('xml') - ) { - return next(); - } - - request.setEncoding('utf-8'); - request.on('data', (chunk) => { - body += chunk; - }); - - request.on('end', () => { - try { - request.body = xmlParser(body); - request.body = request.body.toObject(); - } catch (error) { - return next(); - } - - next(); - }); - } else { - next(); - } -} - -module.exports = XMLMiddleware; \ No newline at end of file diff --git a/src/models/communities.js b/src/models/communities.js index a911486..865fa41 100644 --- a/src/models/communities.js +++ b/src/models/communities.js @@ -1,5 +1,4 @@ const { Schema, model } = require('mongoose'); -const moment = require("moment"); const CommunitySchema = new Schema({ platform_id: Number, @@ -9,6 +8,10 @@ const CommunitySchema = new Schema({ type: Boolean, default: true }, + allows_comments: { + type: Boolean, + default: true + }, /** * 0: Main Community * 1: Sub-Community @@ -20,11 +23,11 @@ const CommunitySchema = new Schema({ default: 0 }, parent: { - type: Number, + type: String, default: null }, admins: { - type: [String], + type: [Number], default: undefined }, created_at: { @@ -39,10 +42,6 @@ const CommunitySchema = new Schema({ type: Number, default: 0 }, - id: { - type: Number, - default: 0 - }, has_shop_page: { type: Number, default: 0 @@ -57,14 +56,12 @@ const CommunitySchema = new Schema({ default: undefined }, community_id: String, + olive_community_id: String, is_recommended: { type: Number, default: 0 }, - browser_icon: String, - browser_thumbnail: String, - CTR_browser_header: String, - WiiU_browser_header: String, + app_data: String, }); CommunitySchema.methods.upEmpathy = async function() { diff --git a/src/models/content.js b/src/models/content.js new file mode 100644 index 0000000..cae5841 --- /dev/null +++ b/src/models/content.js @@ -0,0 +1,60 @@ +const { Schema, model } = require('mongoose'); + +const ContentSchema = new Schema({ + pid: Number, + followed_communities: { + type: [String], + default: [0] + }, + followed_users: { + type: [Number], + default: [0] + }, + following_users: { + type: [Number], + default: [0] + }, +}); + +ContentSchema.methods.addToCommunities = async function(postID) { + const communities = this.get('followed_communities'); + communities.addToSet(postID); + await this.save(); +} + +ContentSchema.methods.removeFromCommunities = async function(postID) { + const communities = this.get('followed_communities'); + communities.pull(postID); + await this.save(); +} + +ContentSchema.methods.addToUsers = async function(postID) { + const users = this.get('followed_users'); + users.addToSet(postID); + await this.save(); +} + +ContentSchema.methods.removeFromUsers = async function(postID) { + const users = this.get('followed_users'); + users.pull(postID); + await this.save(); +} + +ContentSchema.methods.addToFollowers = async function(postID) { + const users = this.get('following_users'); + users.addToSet(postID); + await this.save(); +} + +ContentSchema.methods.removeFromFollowers = async function(postID) { + const users = this.get('following_users'); + users.pull(postID); + await this.save(); +} + +const CONTENT = model('CONTENT', ContentSchema); + +module.exports = { + ContentSchema, + CONTENT +}; diff --git a/src/models/conversation.js b/src/models/conversation.js index 934ac6f..8243197 100644 --- a/src/models/conversation.js +++ b/src/models/conversation.js @@ -3,7 +3,7 @@ const moment = require("moment"); const snowflake = require('node-snowflake').Snowflake; const user = new Schema({ - pid: String, + pid: Number, official: { type: Boolean, default: false @@ -35,16 +35,14 @@ const ConversationSchema = new Schema({ }); ConversationSchema.methods.newMessage = async function(message, fromPid) { - const users = this.get('users'); - if(users[0].pid === fromPid) { - users[0].read = false; - users[1].read = true; + if(this.users[0].pid === fromPid) { + this.users[1].read = false; + this.markModified('users[1].read'); } else { - users[0].read = true; - users[1].read = false; + this.users[0].read = false; + this.markModified('users[0].read'); } - this.set('users', users); this.set('last_updated', moment(new Date())); this.set('message_preview', message); await this.save(); @@ -52,9 +50,9 @@ ConversationSchema.methods.newMessage = async function(message, fromPid) { ConversationSchema.methods.markAsRead = async function(pid) { let users = this.get('users'); - if(users[0].pid === pid.toString()) + if(users[0].pid === pid) users[0].read = true; - else if(users[1].pid === pid.toString()) + else if(users[1].pid === pid) users[1].read = true; this.set('users', users) this.markModified('users'); diff --git a/src/models/endpoint.js b/src/models/endpoint.js index ae4ac2a..fe2a94b 100644 --- a/src/models/endpoint.js +++ b/src/models/endpoint.js @@ -1,30 +1,16 @@ const { Schema, model } = require('mongoose'); const endpointSchema = new Schema({ - has_error: Number, - version: Number, - endpoint: { - host: String, - api_host: String, - portal_host: String, - n3ds_host: String - }, - guest: Boolean, + status: Number, + server_access_level: String, + topics: Boolean, + guest_access: Boolean, + host: String, + api_host: String, + portal_host: String, + n3ds_host: String }); -endpointSchema.methods.updateHosts = async function({host, api_host, portal_host, n3ds_host}) { - this.set('endpoint.host', host); - this.set('endpoint.api_host', api_host); - this.set('endpoint.portal_host', portal_host); - this.set('endpoint.n3ds_host', n3ds_host); - await this.save(); -}; - -endpointSchema.methods.updateGuest = async function(mode) { - this.set('guest', mode); - await this.save(); -} - const ENDPOINT = model('ENDPOINT', endpointSchema); module.exports = { diff --git a/src/models/notifications.js b/src/models/notifications.js new file mode 100644 index 0000000..0835463 --- /dev/null +++ b/src/models/notifications.js @@ -0,0 +1,26 @@ +const { Schema, model } = require('mongoose'); + +const NotificationSchema = new Schema({ + pid: String, + type: String, + link: String, + objectID: String, + users: [{ + user: String, + timestamp: Date + }], + read: Boolean, + lastUpdated: Date +}); + +NotificationSchema.methods.markRead = async function() { + this.set('read', true); + await this.save(); +}; + +const NOTIFICATION = model('NOTIFICATION', NotificationSchema); + +module.exports = { + NotificationSchema, + NOTIFICATION +}; diff --git a/src/models/pnid.js b/src/models/pnid.js deleted file mode 100644 index 90e111a..0000000 --- a/src/models/pnid.js +++ /dev/null @@ -1,52 +0,0 @@ -const mongoose = require('mongoose'); -const {pnidConnection} = require('../accountdb'); - -const PNIDSchema = new mongoose.Schema({ - access_level: { - type: Number, - default: 0 // 0: standard, 1: tester, 2: mod?, 3: dev - }, - server_access_level: { - type: String, - default: 'prod' // everyone is in production by default - }, - pid: { - type: Number, - unique: true - }, - username: { - type: String, - unique: true, - minlength: 6, - maxlength: 16 - }, - password: String, - birthdate: String, - country: String, - language: String, - region: Number, - mii: { - name: String, - primary: Boolean, - data: String, - id: { - type: Number, - unique: true - }, - hash: { - type: String, - unique: true - }, - image_url: String, - image_id: { - type: Number, - unique: true - }, - }, -}); - -const PNID = pnidConnection.model('PNID', PNIDSchema); - -module.exports = { - PNID, -}; diff --git a/src/models/post.js b/src/models/post.js index 7941bf9..eb511ed 100644 --- a/src/models/post.js +++ b/src/models/post.js @@ -1,30 +1,28 @@ const { Schema, model } = require('mongoose'); const PostSchema = new Schema({ + id: String, title_id: String, screen_name: String, body: String, app_data: String, painting: String, - painting_uri: String, screenshot: String, - url: String, + screenshot_length: Number, search_key: { type: [String], default: undefined }, topic_tag: { - type: [String], + type: String, default: undefined }, community_id: { type: String, default: undefined }, - country_id: Number, created_at: Date, feeling_id: Number, - id: String, is_autopost: { type: Number, default: 0 @@ -43,7 +41,12 @@ const PostSchema = new Schema({ }, empathy_count: { type: Number, - default: 0 + default: 0, + min: 0 + }, + country_id: { + type: Number, + default: 49 }, language_id: { type: Number, @@ -51,14 +54,10 @@ const PostSchema = new Schema({ }, mii: String, mii_face_url: String, - number: { - type: Number, - default: 1 - }, pid: Number, platform_id: Number, region_id: Number, - parent_post: String, + parent: String, reply_count: { type: Number, default: 0 @@ -67,45 +66,54 @@ const PostSchema = new Schema({ type: Boolean, default: false }, - parent: { - type: String, - default: null - }, message_to_pid: { type: String, default: null - } + }, + removed: { + type: Boolean, + default: false + }, + removed_reason: String, + removed_by: Number, + removed_at: Date, + yeahs: [Number] }); - -PostSchema.methods.upEmpathy = async function() { - const empathy = this.get('empathy_count'); - this.set('empathy_count', empathy + 1); - - await this.save(); -}; - -PostSchema.methods.downEmpathy = async function() { - const empathy = this.get('empathy_count'); - this.set('empathy_count', empathy - 1); - - await this.save(); -}; - PostSchema.methods.upReply = async function() { const replyCount = this.get('reply_count'); - this.set('reply_count', replyCount + 1); + if(replyCount + 1 < 0) + this.set('reply_count', 0); + else + this.set('reply_count', replyCount + 1); await this.save(); }; PostSchema.methods.downReply = async function() { const replyCount = this.get('reply_count'); - this.set('reply_count', replyCount - 1); + if(replyCount - 1 < 0) + this.set('reply_count', 0); + else + this.set('reply_count', replyCount - 1); await this.save(); }; +PostSchema.methods.removePost = async function(reason, pid) { + this.set('removed', true); + this.set('removed_reason', reason); + this.set('removed_by', pid); + this.set('removed_at', new Date()) + await this.save(); +}; + +PostSchema.methods.unRemove = async function(reason) { + this.set('removed', false); + this.set('removed_reason', reason); + await this.save(); +}; + const POST = model('POST', PostSchema); module.exports = { diff --git a/src/models/report.js b/src/models/report.js new file mode 100644 index 0000000..7e1ebca --- /dev/null +++ b/src/models/report.js @@ -0,0 +1,33 @@ +const { Schema, model } = require('mongoose'); + +const ReportSchema = new Schema({ + pid: Number, + reported_by: Number, + post_id: String, + reason: Number, + message: String, + created_at: { + type: Date, + default: new Date() + }, + resolved: { + type: Boolean, + default: false + }, + resolved_by: Number, + resolved_at: Date, +}); + +ReportSchema.methods.resolve = async function(pid) { + this.set('resolved', true); + this.set('resolved_by', pid); + this.set('resolved_at', new Date()) + await this.save(); +}; + +const REPORT = model('REPORT', ReportSchema); + +module.exports = { + ReportSchema, + REPORT +}; diff --git a/src/models/settings.js b/src/models/settings.js new file mode 100644 index 0000000..f23d101 --- /dev/null +++ b/src/models/settings.js @@ -0,0 +1,95 @@ +const { Schema, model } = require('mongoose'); + +const SettingsSchema = new Schema({ + pid: Number, + screen_name: String, + account_status: { + type: Number, + default: 0 + }, + ban_lift_date: Date, + ban_reason: String, + profile_comment: { + type: String, + default: undefined + }, + profile_comment_visibility: { + type: Boolean, + default: true + }, + game_skill: { + type: Number, + default: 0 + }, + game_skill_visibility: { + type: Boolean, + default: true + }, + birthday_visibility: { + type: Boolean, + default: false + }, + relationship_visibility: { + type: Boolean, + default: false + }, + country_visibility: { + type: Boolean, + default: false + }, + profile_favorite_community_visibility: { + type: Boolean, + default: true + }, + receive_notifications: { + type: Boolean, + default: true + } +}); + +SettingsSchema.methods.updateComment = async function(comment) { + this.set('profile_comment', comment); + await this.save(); +}; + +SettingsSchema.methods.updateSkill = async function(skill) { + this.set('game_skill', skill); + await this.save(); +}; + +SettingsSchema.methods.commentVisible = async function(active) { + this.set('profile_comment_visibility', active); + await this.save(); +}; + +SettingsSchema.methods.skillVisible = async function(active) { + this.set('game_skill_visibility', active); + await this.save(); +}; + +SettingsSchema.methods.birthdayVisible = async function(active) { + this.set('birthday_visibility', active); + await this.save(); +}; + +SettingsSchema.methods.relationshipVisible = async function(active) { + this.set('relationship_visibility', active); + await this.save(); +}; + +SettingsSchema.methods.countryVisible = async function(active) { + this.set('country_visibility', active); + await this.save(); +}; + +SettingsSchema.methods.favCommunityVisible = async function(active) { + this.set('profile_favorite_community_visibility', active); + await this.save(); +}; + +const SETTINGS = model('SETTINGS', SettingsSchema); + +module.exports = { + SettingsSchema, + SETTINGS +}; diff --git a/src/models/user.js b/src/models/user.js deleted file mode 100644 index ade5e1a..0000000 --- a/src/models/user.js +++ /dev/null @@ -1,278 +0,0 @@ -const { Schema, model } = require('mongoose'); - -const notification = new Schema({ - content: String, - link: String, - read: Boolean, - created_at: Date, -}); - -const UserSchema = new Schema({ - pid: Number, - created_at: Date, - user_id: String, - pnid: String, - birthday: Date, - country: String, - pfp_uri: String, - mii: String, - mii_face_url: String, - /** - * Account Status - * 0 - Fine - * 1 - Limited from Posting - * 2 - Temporary Ban - * 3 - Forever Ban - */ - account_status: { - type: Number, - default: 0 - }, - ban_lift_date: Date, - ban_reason: String, - official: { - type: Boolean, - default: false - }, - profile_comment: { - type: String, - default: undefined - }, - game_skill: { - type: Number, - default: 0 - }, - game_skill_visibility: { - type: Boolean, - default: true - }, - profile_comment_visibility: { - type: Boolean, - default: true - }, - birthday_visibility: { - type: Boolean, - default: false - }, - relationship_visibility: { - type: Boolean, - default: false - }, - country_visibility: { - type: Boolean, - default: false - }, - profile_favorite_community_visibility: { - type: Boolean, - default: true - }, - notifications: { - type: Boolean, - default: false - }, - likes: { - type: [String], - default: [0] - }, - followed_communities: { - type: [String], - default: [0] - }, - followed_users: { - type: [String], - default: [0] - }, - following_users: { - type: [String], - default: [0] - }, - followers: { - type: Number, - default: 0 - }, - following: { - type: Number, - default: 0 - }, - notification_list: { - type: [notification], - default: [{ - content: 'This is your notifications! You\'ll see more stuff here soon!', - link: '/users/me', - read: false, - created_at: new Date(), - }] - } - -}); - -UserSchema.methods.getAccountStatus = async function() { - return this.get('account_status'); -}; - -UserSchema.methods.setAccountStatus = async function(accountStatus) { - this.set('account_status', accountStatus); - await this.save(); -}; -UserSchema.methods.getBanDate = async function() { - return this.get('ban_lift_date'); -}; - -UserSchema.methods.setBanData = async function(banDate) { - this.set('ban_lift_date', banDate); - await this.save(); -}; -UserSchema.methods.getProfileComment = async function() { - return this.get('profile_comment'); -}; -UserSchema.methods.setProfileComment = async function(profileComment) { - this.set('profile_comment', profileComment); - await this.save(); -}; - -UserSchema.methods.getGameSkill = async function() { - return this.get('game_skill'); -}; - -UserSchema.methods.setGameSkill = async function(gameSkill) { - this.set('game_skill', gameSkill); - await this.save(); -}; -UserSchema.methods.getGameSkillVisibility = async function() { - return this.get('game_skill_visibility'); -}; - -UserSchema.methods.setGameSkillVisibility = async function(gameSkillVisibility) { - this.set('game_skill_visibility', gameSkillVisibility); - await this.save(); -}; -UserSchema.methods.getProfileCommentVisibility = async function() { - return this.get('profile_comment_visibility'); -}; - -UserSchema.methods.setProfileCommentVisibility = async function(profileCommentVisibility) { - this.set('profile_comment_visibility', profileCommentVisibility); - await this.save(); -}; -UserSchema.methods.getBirthdayVisibility = async function() { - return this.get('birthday_visibility'); -}; - -UserSchema.methods.setBirthdayVisibility = async function(birthdayVisibility) { - this.set('birthday_visibility', birthdayVisibility); - await this.save(); -}; -UserSchema.methods.getRelationshipVisibility = async function() { - return this.get('relationship_visibility'); -}; - -UserSchema.methods.setRelationshipVisibility = async function(accountStatus) { - this.set('relationship_visibility', accountStatus); - await this.save(); -}; -UserSchema.methods.getFavoriteCommunityVisibility = async function() { - return this.get('profile_favorite_community_visibility'); -}; - -UserSchema.methods.setFavoriteCommunityVisibility = async function(favoriteCommunityVisibility) { - this.set('profile_favorite_community_visibility', favoriteCommunityVisibility); - await this.save(); -}; - -UserSchema.methods.getCountryVisibility = async function() { - return this.get('country_visibility'); -}; - -UserSchema.methods.setCountryVisibility = async function(countryVisibility) { - this.set('country_visibility', countryVisibility); - await this.save(); -}; - -UserSchema.methods.addToLikes = async function(postID) { - const likes = this.get('likes'); - likes.addToSet(postID); - await this.save(); -} - -UserSchema.methods.removeFromLike = async function(postID) { - const likes = this.get('likes'); - likes.pull(postID); - await this.save(); -} - -UserSchema.methods.addToCommunities = async function(postID) { - const communities = this.get('followed_communities'); - communities.addToSet(postID); - await this.upFollowing(); - await this.save(); -} - -UserSchema.methods.removeFromCommunities = async function(postID) { - const communities = this.get('followed_communities'); - communities.pull(postID); - await this.downFollowing(); - await this.save(); -} - -UserSchema.methods.addToUsers = async function(postID) { - const users = this.get('followed_users'); - users.addToSet(postID); - await this.upFollowing(); - await this.save(); -} - -UserSchema.methods.removeFromUsers = async function(postID) { - const users = this.get('followed_users'); - users.pull(postID); - await this.downFollowing(); - await this.save(); -} - -UserSchema.methods.addToFollowers = async function(postID) { - const users = this.get('following_users'); - users.addToSet(postID); - await this.upFollower(); - await this.save(); -} - -UserSchema.methods.removeFromFollowers = async function(postID) { - const users = this.get('following_users'); - users.pull(postID); - await this.downFollower(); - await this.save(); -} - -UserSchema.methods.upFollower = async function() { - const followers = this.get('followers'); - this.set('followers', followers + 1); - - await this.save(); -}; - -UserSchema.methods.downFollower = async function() { - const followers = this.get('followers'); - if(followers > 0) - this.set('followers', followers - 1); - await this.save(); -}; - -UserSchema.methods.upFollowing = async function() { - const following = this.get('following'); - this.set('following', following + 1); - - await this.save(); -}; - -UserSchema.methods.downFollowing = async function() { - const following = this.get('following'); - if(following > 0) - this.set('following', following - 1); - await this.save(); -}; - -const USER = model('USER', UserSchema); - -module.exports = { - UserSchema, - USER -}; diff --git a/src/server.js b/src/server.js index ed36d5f..c9eb41f 100644 --- a/src/server.js +++ b/src/server.js @@ -1,8 +1,7 @@ -process.title = 'Pretendo - Miiverse'; +process.title = 'Pretendo - Juxt-Web'; const express = require('express'); const morgan = require('morgan'); const ejs = require('ejs'); -const xmlparser = require('./middleware/xml-parser'); const cookieParser = require('cookie-parser'); const auth = require('./middleware/auth'); const database = require('./database'); @@ -18,6 +17,8 @@ app.set('etag', false); app.disable('x-powered-by'); app.set('view engine', 'ejs'); app.set('views', __dirname + '/webfiles'); +app.set('trust proxy', 2) +app.get('/ip', (request, response) => response.send(request.ip)) // Create router logger.info('Setting up Middleware'); @@ -28,9 +29,8 @@ app.use(express.json()); app.use(express.urlencoded({ extended: true, limit: '1mb', - parameterLimit: 100000 })); -app.use(xmlparser); + app.use(cookieParser()); app.use(auth); @@ -40,10 +40,15 @@ app.use(juxt_web); // 404 handler logger.info('Creating 404 status handler'); -app.use((request, response) => { - //logger.warn(request.protocol + '://' + request.get('host') + request.originalUrl); - response.status(404); - response.send(); +app.use((req, res) => { + logger.warn(req.protocol + '://' + req.get('host') + req.originalUrl); + res.render(req.directory + '/error.ejs', { + code: 404, + message: "Page not found", + cdnURL: config.CDN_domain, + lang: req.lang, + pid: req.pid + }); }); // non-404 error handler diff --git a/src/services/juxt-web/index.js b/src/services/juxt-web/index.js index 2625361..d2e9a3a 100644 --- a/src/services/juxt-web/index.js +++ b/src/services/juxt-web/index.js @@ -4,40 +4,39 @@ const logger = require('../../logger'); const routes = require('./routes'); const router = express.Router(); - const console = express.Router(); -const admin = express.Router(); // Create subdomains logger.info('[JUXT-WEB] Creating \'Web\' subdomain'); router.use(subdomain('juxt', console)); +router.use(subdomain('juxt-beta', console)); +router.use(subdomain('juxt-dev', console)); logger.info('[JUXT-WEB] Creating \'Wii U\' subdomain'); router.use(subdomain('portal.olv', console)); +router.use(subdomain('portal-beta.olv', console)); +router.use(subdomain('portal-dev.olv', console)); + logger.info('[JUXT-WEB] Creating \'3DS\' subdomain'); router.use(subdomain('ctr.olv', console)); - -logger.info('[JUXT-WEB] Creating \'Admin\' subdomain'); -router.use(subdomain('admin.olv', admin)); - -logger.info('[JUXT-WEB] Creating \'Web API\' subdomain'); -router.use(subdomain('web_api.olv', admin)); +router.use(subdomain('ctr-beta.olv', console)); +router.use(subdomain('ctr-dev.olv', console)); // Setup routes console.use('/titles/show', routes.PORTAL_SHOW); +console.use('/titles', routes.PORTAL_COMMUNITIES); console.use('/communities', routes.PORTAL_COMMUNITIES); +console.use('/topics', routes.PORTAL_TOPICS); console.use('/users', routes.PORTAL_USER); console.use('/posts', routes.PORTAL_POST); -console.use('/activity-feed', routes.PORTAL_FEED); -console.use('/messages', routes.PORTAL_MESSAGES); +console.use('/feed', routes.PORTAL_FEED); +console.use('/friend_messages', routes.PORTAL_MESSAGES); console.use('/news', routes.PORTAL_NEWS); console.use('/', routes.PORTAL_WEB); console.use('/login', routes.WEB_LOGIN); console.use('/robots.txt', routes.ROBOTS); console.use('/web', routes.PWA); - -admin.use('/', routes.WEB_ADMIN); -admin.use('/v1/', routes.WEB_API); +console.use('/admin', routes.ADMIN); module.exports = router; diff --git a/src/services/juxt-web/routes/admin/admin.js b/src/services/juxt-web/routes/admin/admin.js new file mode 100644 index 0000000..ef3b7f0 --- /dev/null +++ b/src/services/juxt-web/routes/admin/admin.js @@ -0,0 +1,57 @@ +const express = require('express'); +const database = require('../../../../database'); +const { POST } = require('../../../../models/post'); +const util = require('../../../../util'); +const moment = require('moment'); +const config = require("../../../../../config.json"); +const router = express.Router(); + +router.get('/', async function (req, res) { + if(!req.moderator) + return res.redirect('/login'); + + const reports = await database.getAllOpenReports(); + const communityMap = await util.data.getCommunityHash(); + const userContent = await database.getUserContent(req.pid); + const userMap = util.data.getUserHash(); + const postIDs = reports.map(obj => obj.post_id); + + const posts = await POST.aggregate([ + { $match: { id: { $in: postIDs } } }, + {$addFields: { + "__order": { $indexOfArray: [ postIDs, "$id" ] } + }}, + { $sort: { "__order": 1 } }, + { $project: { index: 0, _id: 0 } } + ]); + + res.render(req.directory + '/reports.ejs', { + lang: req.lang, + moment: moment, + cdnURL: config.CDN_domain, + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + moderator: req.moderator, + userMap, + communityMap, + userContent, + reports, + posts + }); +}); + +router.delete('/:reportID', async function (req, res) { + let report = await database.getReportById(req.params.reportID); + if(!report) return res.sendStatus(402); + let post = await database.getPostByID(report.post_id); + if(!post) return res.sendStatus(404); + + if(!req.moderator) return res.sendStatus(401); + + await post.removePost(req.query.reason ? req.query.reason : 'Removed by moderator', req.pid); + await report.resolve(req.pid); + + return res.sendStatus(200); +}); + +module.exports = router; diff --git a/src/services/juxt-web/routes/admin/api.js b/src/services/juxt-web/routes/admin/api.js deleted file mode 100644 index 90e21e8..0000000 --- a/src/services/juxt-web/routes/admin/api.js +++ /dev/null @@ -1,433 +0,0 @@ -var express = require('express'); -const database = require('../../../../database'); -const logger = require('../../../../logger'); -const util = require('../../../../util'); -const config = require('../../../../../config.json'); -const { COMMUNITY } = require('../../../../models/communities'); -const { POST } = require('../../../../models/post'); -var router = express.Router(); -const moment = require('moment'); -var multer = require('multer'); -const snowflake = require('node-snowflake').Snowflake; -var storage = multer.memoryStorage(); -var upload = multer({ storage: storage }); - -router.get('/communities/all', async function(req, res) { - let user = await database.getUserByPID(req.pid); - let pnid = await database.getPNID(req.pid) - if(user !== null) - { - if(pnid.access_level !== 3) - throw new Error('Invalid credentials supplied'); - res.send(await database.getCommunities(-1)) - } - else - throw new Error('Invalid account ID or password'); -}); - -router.get('/communities/:communityID', async function (req, res) { - let user = await database.getUserByPID(req.pid); - let pnid = await database.getPNID(req.pid) - if(user !== null) - { - if(pnid.access_level !== 3) - throw new Error('Invalid credentials supplied'); - res.send(await database.getCommunityByID(req.params.communityID)) - } - else - throw new Error('Invalid account ID or password'); -}); - -router.post('/communities/:communityID/delete', async function (req, res) { - let user = await database.getUserByPID(req.pid); - let pnid = await database.getPNID(req.pid) - if(user !== null) - { - if(pnid.access_level !== 3) { - logger.audit('[' + user.user_id + ' - ' + user.pid + '] attempted to delete a community and is not authorized'); - throw new Error('Invalid credentials supplied'); - } - let community = await database.getCommunityByID(req.params.communityID); - if(community !== null) { - community.delete().then(err => function () { - res.send(err); - }); - res.sendStatus(200); - logger.audit('[' + user.user_id + ' - ' + user.pid + '] deleted community ' + community.name); - } - } - else - throw new Error('Invalid account ID or password'); -}); - -router.post('/communities/:communityID/update', upload.fields([{name: 'browserIcon', maxCount: 1}, { name: 'CTRbrowserHeader', maxCount: 1}, { name: 'WiiUbrowserHeader', maxCount: 1}]), async function(req, res) { - let user = await database.getUserByPID(req.pid); - let pnid = await database.getPNID(req.pid) - if(user !== null) - { - if(pnid.access_level !== 3) { - logger.audit('[' + user.user_id + ' - ' + user.pid + '] attempted to update a community and is not authorized'); - throw new Error('Invalid credentials supplied'); - } - const community = await database.getCommunityByID(req.params.communityID); - const files = JSON.parse(JSON.stringify(req.files)); - - if(req.body.name && community.name !== req.body.name) - community.name = req.body.name; - - if(req.body.description && community.description !== req.body.description) - community.description = req.body.description; - - if(req.body.title_ids[0] !== community.title_ids[0] && req.body.title_ids[1] !== community.title_ids[1] && req.body.title_ids[2] !== community.title_ids[2] - && req.body.title_ids[0] !== '' && req.body.title_ids[1] !== '' && req.body.title_ids[2] !== '') { - community.title_id = req.body.title_ids; - community.title_ids = req.body.title_ids; - } - - if(req.body.icon && community.icon !== req.body.icon) - community.icon = req.body.icon; - - if(req.files.browserIcon) { - community.browser_icon = `data:image/png;base64,${req.files.browserIcon[0].buffer.toString('base64')}`; - community.browser_thumbnail = `data:image/png;base64,${req.files.browserIcon[0].buffer.toString('base64')}`; - } - if(req.files.CTRbrowserHeader) - community.CTR_browser_header = `data:image/png;base64,${req.files.CTRbrowserHeader[0].buffer.toString('base64')}`; - - if(req.files.WiiUbrowserHeader) - community.WiiU_browser_header = `data:image/png;base64,${req.files.WiiUbrowserHeader[0].buffer.toString('base64')}`; - - if(req.body.is_recommended) - community.is_recommended = req.body.is_recommended; - - if(req.body.has_shop_page) - community.has_shop_page = req.body.has_shop_page; - - if(req.body.platform_id) - community.platform_id = req.body.platform_id; - - community.save(); - res.sendStatus(200); - util.data.refreshCache(); - logger.audit('[' + user.user_id + ' - ' + user.pid + '] updated community ' + community.name); - } - else - throw new Error('Invalid account ID or password'); -}); - -router.post('/communities/new', upload.fields([{name: 'browserIcon', maxCount: 1}, { name: 'CTRbrowserHeader', maxCount: 1}, { name: 'WiiUbrowserHeader', maxCount: 1}]), async function(req, res) { - let user = await database.getUserByPID(req.pid); - let pnid = await database.getPNID(req.pid) - - if(user !== null) - { - if(pnid.access_level !== 3) { - logger.audit('[' + user.user_id + ' - ' + user.pid + '] attempted to create a community and is not authorized'); - throw new Error('Invalid credentials supplied'); - } - JSON.parse(JSON.stringify(req.files)); - let browserIcon, CTRHeader, WiiUHeader, thumb; - if(req.files.browserIcon) { - browserIcon = `data:image/png;base64,${req.files.browserIcon[0].buffer.toString('base64')}`; - thumb = `data:image/png;base64,${req.files.browserIcon[0].buffer.toString('base64')}`; - } - if(req.files.CTRbrowserHeader) - CTRHeader = `data:image/png;base64,${req.files.CTRbrowserHeader[0].buffer.toString('base64')}`; - - if(req.files.WiiUbrowserHeader) - WiiUHeader = `data:image/png;base64,${req.files.WiiUbrowserHeader[0].buffer.toString('base64')}`; - const document = { - empathy_count: 0, - id: snowflake.nextId(), - has_shop_page: req.body.has_shop_page, - platform_id: req.body.platform_ID, - icon: req.body.icon, - created_at: moment(new Date()), - title_ids: req.body.title_ids, - title_id: req.body.title_ids, - community_id: snowflake.nextId(), - is_recommended: req.body.is_recommended, - name: req.body.name, - browser_icon: `data:image/png;base64,${browserIcon.toString('base64')}`, - CTR_browser_header: `data:image/png;base64,${CTRHeader.toString('base64')}`, - WiiU_browser_header: `data:image/png;base64,${WiiUHeader.toString('base64')}`, - browser_thumbnail: `data:image/png;base64,${thumb.toString('base64')}`, - description: req.body.description, - }; - const newCommunity = new COMMUNITY(document); - newCommunity.save(); - res.sendStatus(200); - logger.audit('[' + user.user_id + ' - ' + user.pid + '] created community ' + newCommunity.name); - } - else - throw new Error('Invalid account ID or password'); -}); - -router.post('/communities/:communityID/sub/new', upload.fields([{name: 'browserIcon', maxCount: 1}, { name: 'CTRbrowserHeader', maxCount: 1}, { name: 'WiiUbrowserHeader', maxCount: 1}]), async function(req, res) { - let user = await database.getUserByPID(req.pid); - let pnid = await database.getPNID(req.pid) - - if(user !== null) - { - if(pnid.access_level !== 3) { - logger.audit('[' + user.user_id + ' - ' + user.pid + '] attempted to create a community and is not authorized'); - throw new Error('Invalid credentials supplied'); - } - const community = await database.getCommunityByID(req.params.communityID); - let browserIcon, CTRHeader, WiiUHeader, thumb; - if(req.files.browserIcon) { - browserIcon = `data:image/png;base64,${req.files.browserIcon[0].buffer.toString('base64')}`; - } - else { - browserIcon = community.browser_icon; - thumb = community.browser_thumbnail; - } - if(req.files.CTRbrowserHeader) - CTRHeader = `data:image/png;base64,${req.files.CTRbrowserHeader[0].buffer.toString('base64')}`; - else - CTRHeader = community.CTR_browser_header; - if(req.files.WiiUbrowserHeader) - WiiUHeader = `data:image/png;base64,${req.files.WiiUbrowserHeader[0].buffer.toString('base64')}`; - else - WiiUHeader = community.WiiU_browser_header; - JSON.parse(JSON.stringify(req.files)); - const document = { - name: req.body.name, - description: req.body.description, - parent: req.body.parent, - type: req.body.type, - empathy_count: 0, - id: snowflake.nextId(), - has_shop_page: req.body.has_shop_page, - platform_id: req.body.platform_ID, - icon: req.body.icon, - created_at: moment(new Date()), - title_ids: req.body.title_ids, - title_id: req.body.title_ids, - community_id: snowflake.nextId(), - is_recommended: req.body.is_recommended, - browser_icon: browserIcon, - browser_thumbnail: thumb, - CTR_browser_header: CTRHeader, - WiiU_browser_header: WiiUHeader, - }; - const newCommunity = new COMMUNITY(document); - newCommunity.save(); - res.sendStatus(200); - logger.audit('[' + user.user_id + ' - ' + user.pid + '] created community ' + newCommunity.name); - } - else - throw new Error('Invalid account ID or password'); -}); - -router.post('/discovery/update', upload.none(), async function(req, res) { - let user = await database.getUserByPID(req.pid); - let pnid = await database.getPNID(req.pid) - - if(user !== null) - { - if(pnid.access_level !== 3) - throw new Error('Invalid credentials supplied'); - let endpoint = await database.getServerConfig(); - endpoint.has_error = req.body.has_error; - endpoint.save(); - res.send(endpoint); - } - else - throw new Error('Invalid account ID or password'); -}); - -router.get('/users/all', async function (req, res) { - let user = await database.getUserByPID(req.pid); - let pnid = await database.getPNID(req.pid) - - if(user !== null) - { - if(pnid.access_level !== 3) - throw new Error('Invalid credentials supplied'); - - res.send(await database.getUsers(-1)) - } - else - throw new Error('Invalid account ID or password'); -}); - -router.get('/users/loadPosts', async function (req, res) { - let user = await database.getUserByPID(req.pid); - let pnid = await database.getPNID(req.pid) - - if(user !== null) - { - if(pnid.access_level !== 3) - throw new Error('Invalid credentials supplied'); - - let post = await database.getPostByID(req.query.postID); - let newPosts = await database.getUserPostsAfterTimestamp(post, 5); - let communityMap = await util.data.getCommunityHash(); - if(newPosts.length > 0) - { - res.render('console/more_posts.ejs', { - communityMap: communityMap, - moment: moment, - user: user, - newPosts: newPosts, - account_server: config.account_server_domain.slice(8), - }); - } - else - { - res.sendStatus(204); - } - } - else - throw new Error('Invalid account ID or password'); -}); - -router.get('/users/:userID', async function (req, res) { - let user = await database.getUserByPID(req.pid); - let pnid = await database.getPNID(req.pid) - - if(user !== null) - { - if(pnid.access_level !== 3) - throw new Error('Invalid credentials supplied'); - - res.send(await database.getUserByPID(req.params.userID)) - } - else - throw new Error('Invalid account ID or password'); -}); - -router.post('/users/:userID/update', upload.none(), async function(req, res) { - let parentUser = await database.getUserByPID(req.pid); - let user = await database.getUserByPID(req.params.userID); - - if(user !== null) - { - if(config.authorized_PNIDs.indexOf(parentUser.pid) === -1) - throw new Error('Invalid credentials supplied'); - user.account_status = req.body.account_status; - user.ban_reason = req.body.ban_reason; - user.ban_lift_date = moment(req.body.ban_date); - user.save(); - res.sendStatus(200); - util.data.refreshCache(); - logger.audit('[' + parentUser.user_id + ' - ' + parentUser.pid + '] banned ' + user.user_id + ' until ' + user.ban_lift_date + ' for ' + user.ban_reason); - } - else - throw new Error('Invalid account ID or password'); -}); - -router.post('/posts/:postID/delete', async function(req, res) { - let user = await database.getUserByPID(req.pid); - let pnid = await database.getPNID(req.pid) - if(user !== null) - { - if(pnid.access_level !== 3) { - logger.audit('[' + user.user_id + ' - ' + user.pid + '] attempted to delete a post and is not authorized'); - throw new Error('Invalid credentials supplied'); - } - let post = await database.getPostByID(req.params.postID); - if(post !== null) { - post.delete().then(err => function () { - res.send(err); - }); - res.sendStatus(200); - logger.audit('[' + user.user_id + ' - ' + user.pid + '] deleted post by ' + post.screen_name); - } - else - res.sendStatus(404) - } - else - throw new Error('Invalid account ID or password'); -}); - -router.get('/notifications', async function(req, res) { - await database.pushNewNotificationToAll('Testing a system wide notification and linking to a post', '/users/me') - res.sendStatus(200); -}); - -router.post('/posts/new', upload.none(), async function(req, res) { - let user = await database.getUserByPID(req.pid); - let pnid = await database.getPNID(req.pid) - - if(user !== null) - { - if(pnid.access_level !== 3) { - logger.audit('[' + user.user_id + ' - ' + user.pid + '] attempted to create a community and is not authorized'); - throw new Error('Invalid credentials supplied'); - } - let community = await database.getCommunityByID(req.body.olive_community_id); - let appData = ""; - if (req.body.app_data) { - appData = req.body.app_data.replace(/\0/g, "").trim(); - } - let painting = "", paintingURI = ""; - if (req.body.painting && req.body.painting !== 'eJztwTEBACAMA7DCNRlIQRbu4ZoEviTJTNvjZNUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL55fYLL3w==') { - painting = req.body.painting.replace(/\0/g, "").trim(); - paintingURI = await util.data.processPainting(painting); - } - let screenshot = ""; - if (req.body.screenshot) { - screenshot = req.body.screenshot.replace(/\0/g, "").trim(); - } - - let miiFace; - switch (parseInt(req.body.emotion)) { - case 1: - miiFace = 'smile_open_mouth.png'; - break; - case 2: - miiFace = 'wink_left.png'; - break; - case 3: - miiFace = 'surprise_open_mouth.png'; - break; - case 4: - miiFace = 'frustrated.png'; - break; - case 5: - miiFace = 'sorrow.png'; - break; - default: - miiFace = 'normal_face.png'; - break; - } - - const document = { - title_id: community.title_id[0], - community_id: community.community_id, - screen_name: user.user_id, - body: req.body.body, - app_data: appData, - painting: painting, - painting_uri: paintingURI, - screenshot: screenshot, - country_id: 49, - created_at: new Date(), - feeling_id: req.body.emotion, - id: snowflake.nextId(), - is_autopost: req.body.is_autopost, - is_spoiler: req.body.is_spoiler, - is_app_jumpable: req.body.is_app_jumpable, - language_id: req.body.language_id, - mii: user.mii, - mii_face_url: `http://mii.olv.pretendo.cc/mii/${user.pid}/${miiFace}`, - pid: req.body.pid, - platform_id: 0, - region_id: 2, - verified: user.official - }; - let duplicatePost = await database.getDuplicatePosts(req.pid, document); - if(duplicatePost) - return res.redirect('/communities/' + community.community_id + '/new'); - const newPost = new POST(document); - newPost.save(); - res.sendStatus(200); - logger.audit(`[${user.pnid} - ${user.pid}] posed to the ${community.name} community.`); - } - else - throw new Error('Invalid account ID or password'); -}); - -module.exports = router; diff --git a/src/services/juxt-web/routes/admin/home.js b/src/services/juxt-web/routes/admin/home.js deleted file mode 100644 index 2f58c62..0000000 --- a/src/services/juxt-web/routes/admin/home.js +++ /dev/null @@ -1,327 +0,0 @@ -var express = require('express'); -var xml = require('object-to-xml'); -const database = require('../../../../database'); -const logger = require('../../../../logger'); -const util = require('../../../../util'); -const config = require('../../../../../config.json'); -const request = require("request"); -var path = require('path'); -var moment = require('moment'); -var multer = require('multer'); -var upload = multer({ dest: 'uploads/' }); -var router = express.Router(); - -router.get('/', upload.none(), async function (req, res) { - let user = await database.getUserByPID(req.pid); - res.render('admin/admin_home.ejs', { - user: user, - account_server: config.account_server_domain.slice(8), - mii_image_CDN: config.mii_image_CDN - }); -}); - -router.get('/css/juxt.css', function (req, res) { - res.sendFile('css/juxt.css', {root: path.join(__dirname, '../../../../webfiles/admin/')}); -}); - -router.get('/favicon.ico', function (req, res) { - res.sendFile('css/favicon.ico', {root: path.join(__dirname, '../../../../webfiles/console/')}); -}); - -router.get('/icons/:image_id.png', async function (req, res) { - let community = await database.getCommunityByID(req.params.image_id.toString()); - if(community !== null) { - if(community.browser_icon.indexOf('data:image/png;base64,') !== -1) - res.send(Buffer.from(community.browser_icon.replace('data:image/png;base64,',''), 'base64')); - else - res.send(Buffer.from(community.browser_icon, 'base64')); - } - else { - let user = await database.getUserByPID(req.params.image_id.toString()); - if(user !== null) - if(user.pfp_uri.indexOf('data:image/png;base64,') !== -1) - res.send(Buffer.from(user.pfp_uri.replace('data:image/png;base64,',''), 'base64')); - else - res.send(Buffer.from(user.pfp_uri, 'base64')); - else - res.sendStatus(404); - } -}); - -router.get('/banner/:image_id.png', async function (req, res) { - let community = await database.getCommunityByID(req.params.image_id.toString()); - if(community !== null) - if(community.WiiU_browser_header.indexOf('data:image/png;base64,') !== -1) - res.send(Buffer.from(community.WiiU_browser_header.replace('data:image/png;base64,',''), 'base64')); - else - res.send(Buffer.from(community.WiiU_browser_header, 'base64')); - else - res.sendStatus(404); -}); - -router.get('/discovery', upload.none(), async function (req, res) { - let user = await database.getUserByPID(req.pid); - res.render('admin/admin_discovery.ejs', { - user: user, - account_server: config.account_server_domain.slice(8), - mii_image_CDN: config.mii_image_CDN - }); -}); - -router.get('/communities', upload.none(), async function (req, res) { - let user = await database.getUserByPID(req.pid); - let communities = await database.getCommunities(500) - - res.render('admin/admin_communities.ejs', { - user: user, - account_server: config.account_server_domain.slice(8), - communities: communities, - moment: moment, - mii_image_CDN: config.mii_image_CDN - }); -}); - -router.get('/audit', upload.none(), async function (req, res) { - let user = await database.getUserByPID(req.pid); - res.render('admin/admin_audit.ejs', { - user: user, - account_server: config.account_server_domain.slice(8), - mii_image_CDN: config.mii_image_CDN - }); -}); - -router.get('/announcements', upload.none(), async function (req, res) { - let user = await database.getUserByPID(req.pid); - let community = await database.getCommunityByID('announcements'); - let newPosts = await database.getNewPostsByCommunity(community, 500); - let totalNumPosts = await database.getTotalPostsByCommunity(community); - - res.render('admin/admin_announcements.ejs', { - community: community, - newPosts: newPosts, - totalNumPosts: totalNumPosts, - user: user, - account_server: config.account_server_domain.slice(8), - mii_image_CDN: config.mii_image_CDN - }); -}); - -router.get('/communities/new', upload.none(), async function (req, res) { - var communityID = req.query.CID; - let user = await database.getUserByPID(req.pid); - res.render('admin/admin_new_community.ejs', { - user: user, - account_server: config.account_server_domain.slice(8), - communityID: communityID, - mii_image_CDN: config.mii_image_CDN - }); -}); - -router.get('/communities/:communityID', upload.none(), async function (req, res) { - let user = await database.getUserByPID(req.pid); - let community = await database.getCommunityByID(req.params.communityID.toString()); - let newPosts = await database.getNewPostsByCommunity(community, 500); - let totalNumPosts = await database.getTotalPostsByCommunity(community); - - res.render('admin/admin_community.ejs', { - community: community, - newPosts: newPosts, - totalNumPosts: totalNumPosts, - user: user, - account_server: config.account_server_domain.slice(8), - mii_image_CDN: config.mii_image_CDN - }); -}); - -router.get('/communities/:communityID/edit', upload.none(), async function (req, res) { - let user = await database.getUserByPID(req.pid); - let community = await database.getCommunityByID(req.params.communityID.toString()); - res.render('admin/admin_edit_community.ejs', { - user: user, - account_server: config.account_server_domain.slice(8), - community: community, - mii_image_CDN: config.mii_image_CDN - }); -}); - -router.get('/communities/:communityID/sub', upload.none(), async function (req, res) { - let user = await database.getUserByPID(req.pid); - let communities = await database.getSubCommunities(req.params.communityID.toString()); - - res.render('admin/admin_sub_communities.ejs', { - user: user, - account_server: config.account_server_domain.slice(8), - communities: communities, - moment: moment, - communityID: req.params.communityID.toString(), - mii_image_CDN: config.mii_image_CDN - }); -}); - -router.get('/communities/:communityID/sub/new', upload.none(), async function (req, res) { - let user = await database.getUserByPID(req.pid); - let community = await database.getCommunityByID(req.params.communityID.toString()); - res.render('admin/admin_edit_sub_community.ejs', { - user: user, - account_server: config.account_server_domain.slice(8), - community: community, - mii_image_CDN: config.mii_image_CDN - }); -}); - -router.get('/users', upload.none(), async function (req, res) { - let user = await database.getUserByPID(req.pid); - let users = await database.getUsers(500); - res.render('admin/admin_users.ejs', { - user: user, - account_server: config.account_server_domain.slice(8), - users: users, - moment: moment, - mii_image_CDN: config.mii_image_CDN - }); -}); - -router.get('/users/:userID', upload.none(), async function (req, res) { - let user = await database.getUserByPID(req.params.userID); - let parentUser = await database.getUserByPID(req.pid) - if(user === null) - res.sendStatus(404); - let newPosts = await database.getNumberUserPostsByID(req.params.userID, 500); - let numPosts = await database.getTotalPostsByUserID(req.params.userID); - let communityMap = await util.data.getCommunityHash(); - - res.render('admin/admin_user.ejs', { - communityMap: communityMap, - moment: moment, - parentUser: parentUser, - user: user, - account_server: config.account_server_domain.slice(8), - newPosts: newPosts, - numPosts: numPosts, - mii_image_CDN: config.mii_image_CDN - }); -}); - -router.get('/users/:userID/edit', upload.none(), async function (req, res) { - let user = await database.getUserByPID(req.params.userID); - let parentUser = await database.getUserByPID(req.pid) - if(user === null) - res.sendStatus(404); - let newPosts = await database.getNumberUserPostsByID(req.params.userID, 50); - let numPosts = await database.getTotalPostsByUserID(req.params.userID); - - res.render('admin/admin_edit_user.ejs', { - moment: moment, - parentUser: parentUser, - user: user, - account_server: config.account_server_domain.slice(8), - newPosts: newPosts, - numPosts: numPosts, - mii_image_CDN: config.mii_image_CDN - }); -}); - -router.get('/posts/new', upload.none(), async function (req, res) { - let user = await database.getUserByPID(req.pid); - let community = await database.getCommunityByID('announcements'); - - res.render('admin/admin_new_post.ejs', { - community: community, - user: user, - account_server: config.account_server_domain.slice(8), - mii_image_CDN: config.mii_image_CDN - }); -}); - -router.get('/login', upload.none(), async function (req, res) { - if(req.cookies.token === undefined) - { - return res.render('admin/admin_login.ejs', {}); - } - else - res.redirect('/'); -}); - -router.get('/token', upload.none(), async function (req, res) { - let port; - let headers = { - 'X-Nintendo-Client-ID': config["X-Nintendo-Client-ID"], - 'X-Nintendo-Client-Secret': config["X-Nintendo-Client-Secret"], - 'X-Nintendo-Title-ID': req.headers['x-nintendo-title-id'], - 'authorization': req.headers['authorization'], - } - request.get({ - url: 'https://' + config.account_server_domain + "/v1/api/provider/service_token/@me", - headers: headers - }, function (error, response, body) { - if (!error && response.statusCode === 200) { - res.send(body); - } - else - { - res.statusCode = 400; - let response = { - error_code: 400, - message: body - }; - res.send(response); - } - - }); -}); - -router.post('/login', upload.none(), async function (req, res) { - let user_id = req.body.user_id; - let user = await database.getUserByUsername(user_id); - let pnid = await database.getPNID(user.pid) - let password = req.body.password; - if(password !== null && pnid !== null) { - if(pnid.access_level !== 3) { - logger.audit('[' + user.user_id + ' - ' + user.pid + '] is not authorized to access the application'); - res.statusCode = 403; - let response = { - error_code: 403, - message: 'You are not authorized to access this application' - }; - return res.send(response); - } - let password_hash = await util.data.nintendoPasswordHash(password, user.pid); - await request.post({ - url: 'https://' + config.account_server_domain + "/v1/api/oauth20/access_token/generate", - headers: { - 'X-Nintendo-Client-ID': config["X-Nintendo-Client-ID"], - 'X-Nintendo-Client-Secret': config["X-Nintendo-Client-Secret"], - 'X-Nintendo-Title-ID': '0005001010040100' - }, - form: { - user_id: user_id, - password_type: 'hash', - password: password_hash, - grant_type: 'password' - } - }, function (error, response, body) { - if (!error && response.statusCode === 200) { - logger.audit('[' + user.user_id + ' - ' + user.pid + '] signed into the application'); - return res.send(body); - } - else { - res.statusCode = 403; - let response = { - error_code: 403, - message: body - }; - return res.send(response); - } - }); - } - else { - res.statusCode = 403; - let response = { - error_code: 403, - message: 'Invalid account ID or passwordddddd' - }; - return res.send(response); - } -}); - -module.exports = router; diff --git a/src/services/juxt-web/routes/console/communities.js b/src/services/juxt-web/routes/console/communities.js index 89fbe48..268822a 100644 --- a/src/services/juxt-web/routes/console/communities.js +++ b/src/services/juxt-web/routes/console/communities.js @@ -1,22 +1,35 @@ -var express = require('express'); -var xml = require('object-to-xml'); +const express = require('express'); const database = require('../../../../database'); const util = require('../../../../util'); const config = require('../../../../../config.json'); -var multer = require('multer'); -var moment = require('moment'); -var upload = multer({ dest: 'uploads/' }); -var router = express.Router(); +const multer = require('multer'); +const moment = require('moment'); +const upload = multer({dest: 'uploads/'}); +const router = express.Router(); +const { POST } = require('../../../../models/post'); +const { COMMUNITY } = require('../../../../models/communities'); router.get('/', async function (req, res) { - let popularCommunities = await database.getMostPopularCommunities(9); - let newCommunities = await database.getCommunities(6); + let newCommunities = await database.getNewCommunities(6); + let last24Hours = await calculateMostPopularCommunities(); + let popularCommunities = await COMMUNITY.aggregate([ + { $match: { olive_community_id: { $in: last24Hours }, parent: null } }, + {$addFields: { + index: { $indexOfArray: [ last24Hours, "$olive_community_id" ] } + }}, + { $sort: { index: 1 } }, + { $limit : 9 }, + { $project: { index: 0, _id: 0 } } + ]); res.render(req.directory + '/communities.ejs', { cache: true, popularCommunities: popularCommunities, newCommunities: newCommunities, cdnURL: config.CDN_domain, - lang: req.lang + lang: req.lang, + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + moderator: req.moderator }); }); @@ -25,88 +38,120 @@ router.get('/all', async function (req, res) { res.render(req.directory + '/all_communities.ejs', { communities: communities, cdnURL: config.CDN_domain, - lang: req.lang - }); -}); - -router.get('/announcements', async function (req, res) { - let user = await database.getUserByPID(req.pid); - let community = await database.getCommunityByID('announcements'); - let communityMap = await util.data.getCommunityHash(); - let newPosts = await database.getNumberNewCommunityPostsByID(community, config.post_limit); - let totalNumPosts = await database.getTotalPostsByCommunity(community); - res.render(req.directory + '/announcements.ejs', { - moment: moment, - community: community, - newPosts: newPosts, - communityMap: communityMap, - user: user, - totalNumPosts: totalNumPosts, - account_server: config.account_server_domain.slice(8), - cdnURL: config.CDN_domain, lang: req.lang, - mii_image_CDN: config.mii_image_CDN + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + moderator: req.moderator }); }); router.get('/:communityID', async function (req, res) { - let user = await database.getUserByPID(req.pid); - if(req.params.communityID === 'announcements') - return res.redirect('/communities/announcements') + if(req.query.title_id) { + let community = await database.getCommunityByTitleID(req.query.title_id); + if(!community) return res.redirect('/404'); + return res.redirect(`/titles/${community.olive_community_id}/new`); + } + res.redirect(`/titles/${req.params.communityID}/new`); +}); + +router.get('/:communityID/related', async function (req, res) { + let userSettings = await database.getUserSettings(req.pid); + let userContent = await database.getUserContent(req.pid); + if(!userContent || !userSettings) + return res.redirect('/404'); let community = await database.getCommunityByID(req.params.communityID.toString()); - if(community === null && req.query.title_id) - community = await database.getCommunityByTitleID(req.query.title_id) - if(community === null) - return res.sendStatus(404); + if(!community) return res.render(req.directory + '/error.ejs', {code: 404, message: "Community not Found", pid: req.pid, lang: req.lang, cdnURL: config.CDN_domain }); let communityMap = await util.data.getCommunityHash(); - let newPosts = await database.getNumberNewCommunityPostsByID(community, config.post_limit); - let totalNumPosts = await database.getTotalPostsByCommunity(community) - res.render(req.directory + '/community.ejs', { - // EJS variable and server-side variable - moment: moment, - community: community, - communityMap: communityMap, - newPosts: newPosts, - totalNumPosts: totalNumPosts, - user: user, - account_server: config.account_server_domain.slice(8), + let children = await database.getSubCommunities(community.olive_community_id); + if(!children) + return res.redirect(`/titles/${community.olive_community_id}/new`); + + res.render(req.directory + '/sub_communities.ejs', { + selection: 2, + communityMap, + community, + children, cdnURL: config.CDN_domain, lang: req.lang, - mii_image_CDN: config.mii_image_CDN + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + moderator: req.moderator }); + }); router.get('/:communityID/:type', async function (req, res) { - let user = await database.getUserByPID(req.pid); - if(req.params.communityID === 'announcements') - res.redirect('/communities/announcements') + let userSettings = await database.getUserSettings(req.pid); + let userContent = await database.getUserContent(req.pid); + if(!userContent || !userSettings) + return res.redirect('/404'); let community = await database.getCommunityByID(req.params.communityID.toString()); - if(!community) return res.sendStatus(404); + if(!community) return res.render(req.directory + '/error.ejs', {code: 404, message: "Community not Found", pid: req.pid, lang: req.lang, cdnURL: config.CDN_domain }); let communityMap = await util.data.getCommunityHash(); - let newPosts = await database.getNumberNewCommunityPostsByID(community, config.post_limit); - let totalNumPosts = await database.getTotalPostsByCommunity(community) + let children = await database.getSubCommunities(community.olive_community_id); + if(children.length === 0) + children = null; + let posts, type; + + if(req.params.type === 'hot') { + posts = await database.getNumberPopularCommunityPostsByID(community, config.post_limit); + type = 1; + } else if(req.params.type === 'verified') { + posts = await database.getNumberVerifiedCommunityPostsByID(community, config.post_limit); + type = 2; + } else { + posts = await database.getNewPostsByCommunity(community, config.post_limit); + type = 0; + } + let numPosts = await database.getTotalPostsByCommunity(community) + + let bundle = { + posts, + open: community.open, + numPosts, + communityMap, + userContent, + lang: req.lang, + mii_image_CDN: config.mii_image_CDN, + link: `/titles/${req.params.communityID}/${req.params.type}/more?offset=${posts.length}&pjax=true` + } + + if(req.query.pjax) + return res.render(req.directory + '/partials/posts_list.ejs', { + bundle, + moment, + lang: req.lang + }); + res.render(req.directory + '/community.ejs', { // EJS variable and server-side variable moment: moment, community: community, communityMap: communityMap, - newPosts: newPosts, - totalNumPosts: totalNumPosts, - user: user, + posts: posts, + totalNumPosts: numPosts, + userSettings: userSettings, + userContent: userContent, account_server: config.account_server_domain.slice(8), cdnURL: config.CDN_domain, lang: req.lang, - mii_image_CDN: config.mii_image_CDN + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + children, + type, + bundle, + template: 'posts_list', + moderator: req.moderator }); }); -router.get('/:communityID/:type/loadPosts', async function (req, res) { +router.get('/:communityID/:type/more', async function (req, res) { let offset = parseInt(req.query.offset); - let user = await database.getUserByPID(req.pid); + let userContent = await database.getUserContent(req.pid); let communityMap = await util.data.getCommunityHash(); let posts; let community = await database.getCommunityByID(req.params.communityID) - if(!community) return res.sendStatus(404); + if(!community) return res.redirect('/404'); if(!offset) offset = 0; switch (req.params.type) { @@ -120,43 +165,70 @@ router.get('/:communityID/:type/loadPosts', async function (req, res) { posts = await database.getNewPostsByCommunity(community, config.post_limit, offset); break; } + + let bundle = { + posts, + open: true, + numPosts: posts.length, + communityMap, + userContent, + lang: req.lang, + mii_image_CDN: config.mii_image_CDN, + link: `/titles/${req.params.communityID}/${req.params.type}/more?offset=${offset + posts.length}&pjax=true` + } + if(posts.length > 0) { - res.render(req.directory + '/more_posts.ejs', { + res.render(req.directory + '/partials/posts_list.ejs', { communityMap: communityMap, moment: moment, database: database, - user: user, - newPosts: posts, + bundle, account_server: config.account_server_domain.slice(8), cdnURL: config.CDN_domain, lang: req.lang, - mii_image_CDN: config.mii_image_CDN + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + moderator: req.moderator }); } else - { res.sendStatus(204); - } }); router.post('/follow', upload.none(), async function (req, res) { - let community = await database.getCommunityByID(req.body.communityID); - let user = await database.getUserByPID(req.pid); - if(req.body.type === 'true' && user !== null && user.followed_communities.indexOf(community.community_id) === -1) + let community = await database.getCommunityByID(req.body.id); + let userContent = await database.getUserContent(req.pid); + if(userContent !== null && userContent.followed_communities.indexOf(community.olive_community_id) === -1) { community.upFollower(); - user.addToCommunities(community.community_id); - res.sendStatus(200); + userContent.addToCommunities(community.olive_community_id); + res.send({ status: 200, id: community.olive_community_id, count: community.followers }); } - else if(req.body.type === 'false' && user !== null && user.followed_communities.indexOf(community.community_id) !== -1) + else if(userContent !== null && userContent.followed_communities.indexOf(community.olive_community_id) !== -1) { community.downFollower(); - user.removeFromCommunities(community.community_id); - res.sendStatus(200); + userContent.removeFromCommunities(community.olive_community_id); + res.send({ status: 200, id: community.olive_community_id, count: community.followers }); } else - res.sendStatus(423); + res.send({ status: 423, id: community.olive_community_id, count: community.followers }); }); +async function calculateMostPopularCommunities() { + const now = new Date(); + const last24Hours = new Date(now.getTime() - 24 * 60 * 60 * 1000); + + const posts = await POST.find({ created_at: { $gte: last24Hours }, message_to_pid: null }).lean(); + + const communityIds = {}; + for (const post of posts) { + const communityId = post.community_id; + communityIds[communityId] = (communityIds[communityId] || 0) + 1; + } + return Object.entries(communityIds) + .sort((a, b) => b[1] - a[1]) + .map((entry) => entry[0]); +} + module.exports = router; diff --git a/src/services/juxt-web/routes/console/feed.js b/src/services/juxt-web/routes/console/feed.js index 516e9ff..0d7af69 100644 --- a/src/services/juxt-web/routes/console/feed.js +++ b/src/services/juxt-web/routes/console/feed.js @@ -1,54 +1,88 @@ -var express = require('express'); -var xml = require('object-to-xml'); +const express = require('express'); const database = require('../../../../database'); const util = require('../../../../util'); const config = require('../../../../../config.json'); -var moment = require('moment'); -var router = express.Router(); +const moment = require('moment'); +const router = express.Router(); router.get('/', async function (req, res) { - let user = await database.getUserByPID(req.pid); + let userContent = await database.getUserContent(req.pid); let communityMap = await util.data.getCommunityHash(); - let posts = await database.getNewsFeed(user, config.post_limit); + if(!userContent) + return res.redirect('/404'); + let posts = await database.getNewsFeed(userContent, config.post_limit); + + let bundle = { + posts, + open: true, + communityMap, + userContent, + lang: req.lang, + mii_image_CDN: config.mii_image_CDN, + link: `/feed/more?offset=${posts.length}&pjax=true` + } + + if(req.query.pjax) + return res.render(req.directory + '/partials/posts_list.ejs', { + bundle, + moment, + lang: req.lang + }); + res.render(req.directory + '/feed.ejs', { moment: moment, - user: user, + title: req.lang.global.activity_feed, + userContent: userContent, posts: posts, communityMap: communityMap, account_server: config.account_server_domain.slice(8), cdnURL: config.CDN_domain, lang: req.lang, - mii_image_CDN: config.mii_image_CDN + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + bundle, + template: 'posts_list', + moderator: req.moderator }); }); -router.get('/loadposts', async function (req, res) { +router.get('/more', async function (req, res) { let offset = parseInt(req.query.offset); - let user = await database.getUserByPID(req.pid); + let userContent = await database.getUserContent(req.pid); let communityMap = await util.data.getCommunityHash(); let posts; - if(offset !== null) - posts = await database.getNewsFeedOffset(user, config.post_limit, offset); - if(posts === undefined) - return res.sendStatus(204); + if(!offset) offset = 0; + posts = await database.getNewsFeedOffset(userContent, config.post_limit, offset); + + let bundle = { + posts, + numPosts: posts.length, + open: true, + communityMap, + userContent, + lang: req.lang, + mii_image_CDN: config.mii_image_CDN, + link: `/feed/more?offset=${offset + posts.length}&pjax=true`, + moderator: req.moderator + } + if(posts.length > 0) { - res.render(req.directory + '/more_posts.ejs', { + res.render(req.directory + '/partials/posts_list.ejs', { communityMap: communityMap, moment: moment, database: database, - user: user, - newPosts: posts, + bundle, account_server: config.account_server_domain.slice(8), cdnURL: config.CDN_domain, lang: req.lang, - mii_image_CDN: config.mii_image_CDN + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + moderator: req.moderator }); } else - { res.sendStatus(204); - } }); module.exports = router; diff --git a/src/services/juxt-web/routes/console/messages.js b/src/services/juxt-web/routes/console/messages.js index 068fed2..2b9467f 100644 --- a/src/services/juxt-web/routes/console/messages.js +++ b/src/services/juxt-web/routes/console/messages.js @@ -1,34 +1,35 @@ -var express = require('express'); -var xml = require('object-to-xml'); +const express = require('express'); const database = require('../../../../database'); const util = require('../../../../util'); const config = require('../../../../../config.json'); const { POST } = require('../../../../models/post'); -var moment = require('moment'); +const moment = require('moment'); const {CONVERSATION} = require("../../../../models/conversation"); +const crypto = require("crypto"); const snowflake = require('node-snowflake').Snowflake; -var router = express.Router(); +const router = express.Router(); router.get('/', async function (req, res) { - let user = await database.getUserByPID(req.pid); - let conversations = await database.getConversations(user.pid.toString()); + let conversations = await database.getConversations(req.pid); let usersMap = await util.data.getUserHash(); res.render(req.directory + '/messages.ejs', { moment: moment, - user: user, + pid: req.pid, conversations: conversations, cdnURL: config.CDN_domain, usersMap: usersMap, lang: req.lang, - mii_image_CDN: config.mii_image_CDN + mii_image_CDN: config.mii_image_CDN, + moderator: req.moderator }); }); router.post('/new', async function (req, res, next) { - let conversation = await database.getConversationByID(req.body.conversationID); - let user = await database.getUserByPID(req.pid); - let user2 = await database.getUserByPID(req.body.message_to_pid); - if(req.body.conversationID === 0) + let conversation = await database.getConversationByID(req.body.community_id); + let user2 = await util.data.getUserDataFromPid(req.body.message_to_pid); + let postID = await generatePostUID(21); + let friends = await util.data.getFriends(user2.pid); + if(req.body.community_id === 0) return res.sendStatus(404); if(!conversation) { if(!user || !user2) @@ -37,13 +38,13 @@ router.post('/new', async function (req, res, next) { id: snowflake.nextId(), users: [ { - pid: user.pid, - official: user.official, + pid: req.pid, + official: (req.user.accessLevel >= 2), read: true }, { pid: user2.pid, - official: user2.official, + official: (user2.accessLevel >= 2), read: false }, ] @@ -54,24 +55,78 @@ router.post('/new', async function (req, res, next) { } if(!conversation) return res.sendStatus(404); - let document = { - screen_name: user.user_id, - body: req.body.body, - painting: req.body.raw, - painting_uri: req.body.drawing, - created_at: new Date(), - id: snowflake.nextId(), - mii: user.mii, - mii_face_url: `https://mii.olv.pretendo.cc/${user.pid}/normal_face.png`, - pid: user.pid, - verified: user.official, - parent: null, + if(!friends || friends.indexOf(req.pid) === -1) + return res.sendStatus(422); + if(req.body.body === '' && req.body.painting === '' && req.body.screenshot === '') { + res.status(422); + return res.redirect(`/friend_messages/${conversation.id}`); + } + let painting = "", paintingURI = "", screenshot = null; + if (req.body._post_type === 'painting' && req.body.painting) { + painting = req.body.painting.replace(/\0/g, "").trim(); + paintingURI = await util.data.processPainting(painting, true); + await util.data.uploadCDNAsset('pn-cdn', `paintings/${req.pid}/${postID}.png`, paintingURI, 'public-read'); + } + if (req.body.screenshot) { + screenshot = req.body.screenshot.replace(/\0/g, "").trim(); + await util.data.uploadCDNAsset('pn-cdn', `screenshots/${req.pid}/${postID}.jpg`, Buffer.from(screenshot, 'base64'), 'public-read'); + } + + let miiFace; + switch (parseInt(req.body.feeling_id)) { + case 1: + miiFace = 'smile_open_mouth.png'; + break; + case 2: + miiFace = 'wink_left.png'; + break; + case 3: + miiFace = 'surprise_open_mouth.png'; + break; + case 4: + miiFace = 'frustrated.png'; + break; + case 5: + miiFace = 'sorrow.png'; + break; + default: + miiFace = 'normal_face.png'; + break; + } + let body = req.body.body; + if(body) + body = req.body.body.replace(/[^A-Za-z\d\s-_!@#$%^&*(){}‛¨ƒºª«»“”„¿¡←→↑↓√§¶†‡¦–—⇒⇔¤¢€£¥™©®+×÷=±∞ˇ˘˙¸˛˜′″µ°¹²³♭♪•…¬¯‰¼½¾♡♥●◆■▲▼☆★♀♂,./?;:'"\\<>]/g, ""); + if(body.length > 280) + body = body.substring(0,280); + const document = { community_id: conversation.id, - message_to_pid: req.body.message_to_pid + screen_name: req.user.mii.name, + body: body, + painting: painting, + screenshot: screenshot ? `/screenshots/${req.pid}/${postID}.jpg`: "", + country_id: req.paramPackData ? req.paramPackData.country_id : 49, + created_at: new Date(), + feeling_id: req.body.feeling_id, + id: postID, + is_autopost: 0, + is_spoiler: (req.body.spoiler) ? 1 : 0, + is_app_jumpable: req.body.is_app_jumpable, + language_id: req.body.language_id, + mii: req.user.mii.data, + mii_face_url: `https://mii.olv.pretendo.cc/mii/${req.pid}/${miiFace}`, + pid: req.pid, + platform_id: req.paramPackData ? req.paramPackData.platform_id : 0, + region_id: req.paramPackData ? req.paramPackData.region_id : 2, + verified: (req.user.accessLevel >= 2), + message_to_pid: req.body.message_to_pid, + moderator: req.moderator }; + let duplicatePost = await database.getDuplicatePosts(req.pid, document); + if(duplicatePost && req.params.post_id) + return res.redirect('/posts/' + req.params.post_id); const newPost = new POST(document); newPost.save(); - res.sendStatus(200); + res.redirect(`/friend_messages/${conversation.id}`); let postPreviewText; if(document.painting) postPreviewText = 'sent a Drawing' @@ -79,29 +134,31 @@ router.post('/new', async function (req, res, next) { postPreviewText = document.body.substring(0, 25) + '...'; else postPreviewText = document.body; - await conversation.newMessage(postPreviewText, document.message_to_pid); + await conversation.newMessage(postPreviewText, user2.pid); }); router.get('/new/:pid', async function (req, res, next) { - let user = await database.getUserByPID(req.pid); - let user2 = await database.getUserByPID(req.params.pid.toString()); - if(!user || !user2) + let user = await util.data.getUserDataFromPid(req.pid); + let user2 = await util.data.getUserDataFromPid(req.params.pid); + let friends = await util.data.getFriends(user2.pid); + if(!req.user || !user2) return res.sendStatus(422) - let conversation = await database.getConversationByUsers([user.pid, user2.pid]); - console.log(conversation); + let conversation = await database.getConversationByUsers([req.pid, user2.pid]); if(conversation) - return res.redirect(`/messages/${conversation.id}`); + return res.redirect(`/friend_messages/${conversation.id}`); + if(!friends || friends.indexOf(req.pid) === -1) + return res.sendStatus(422); let document = { id: snowflake.nextId(), users: [ { - pid: user.pid, - official: user.official, + pid: req.user.pid, + official: (req.user.accessLevel >= 2), read: true }, { pid: user2.pid, - official: user2.official, + official: (user2.accessLevel >= 2), read: false }, ] @@ -111,24 +168,24 @@ router.get('/new/:pid', async function (req, res, next) { conversation = await database.getConversationByID(document.id); if(!conversation) return res.sendStatus(404); - let body = `${user.user_id} started a new chat!`; + let body = `${req.user.mii.name} started a new chat!`; let newMessage = { - screen_name: user.user_id, + screen_name: req.user.mii.name, body: body, created_at: new Date(), - id: snowflake.nextId(), - mii: user.mii, - mii_face_url: `https://mii.olv.pretendo.cc/${user.pid}/normal_face.png`, - pid: user.pid, - verified: user.official, + id: await generatePostUID(21), + mii: req.user.mii.data, + mii_face_url: `https://mii.olv.pretendo.cc/mii/${req.pid}/normal_face.png`, + pid: req.pid, + verified: (req.user.accessLevel >= 2), parent: null, community_id: conversation.id, message_to_pid: user2.pid }; const newPost = new POST(newMessage); newPost.save(); - await conversation.newMessage(`${user.user_id} started a new chat!`, newMessage.message_to_pid); - res.redirect(`/messages/${conversation.id}`); + await conversation.newMessage(`${req.user.mii.name} started a new chat!`, user2.pid); + res.redirect(`/friend_messages/${conversation.id}`); }); router.get('/:message_id', async function (req, res) { @@ -136,21 +193,32 @@ router.get('/:message_id', async function (req, res) { if(!conversation) { return res.sendStatus(404); } - let user = await database.getUserByPID(req.pid); - let otherUserPid = conversation.users[0].pid.toString() === user.pid.toString() ? conversation.users[1].pid : conversation.users[0].pid; - let user2 = await database.getUserByPID(otherUserPid); - let messages = await database.getConversationMessages(conversation.id, 100, 0) + let user2 = conversation.users[0].pid === req.pid ? conversation.users[1] : conversation.users[0]; + if(req.pid !== conversation.users[0].pid && req.pid !== conversation.users[1].pid) + res.redirect('/') + let messages = await database.getConversationMessages(conversation.id, 200, 0); + let userMap = await util.data.getUserHash(); res.render(req.directory + '/message_thread.ejs', { moment: moment, - user: user, user2: user2, conversation: conversation, messages: messages, + userMap: userMap, cdnURL: config.CDN_domain, lang: req.lang, - mii_image_CDN: config.mii_image_CDN + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + moderator: req.moderator }); await conversation.markAsRead(req.pid); }); +async function generatePostUID(length) { + let id = Buffer.from(String.fromCharCode(...crypto.getRandomValues(new Uint8Array(length * 2))), 'binary').toString('base64').replace(/[+/]/g, "").substring(0, length); + const inuse = await POST.findOne({ id }); + id = (inuse ? await generatePostUID() : id); + return id; +} + + module.exports = router; diff --git a/src/services/juxt-web/routes/console/notifications.js b/src/services/juxt-web/routes/console/notifications.js index 61b6779..2bd4ead 100644 --- a/src/services/juxt-web/routes/console/notifications.js +++ b/src/services/juxt-web/routes/console/notifications.js @@ -1,24 +1,67 @@ -var express = require('express'); -var xml = require('object-to-xml'); +const express = require('express'); const database = require('../../../../database'); -const util = require('../../../../util'); const config = require('../../../../../config.json'); -var moment = require('moment'); -var router = express.Router(); +const util = require('../../../../util'); +const moment = require('moment'); +const router = express.Router(); + +router.get('/my_news', async function (req, res) { + let notifications = await database.getNotifications(req.pid, 25, 0); + let userMap = util.data.getUserHash(); + let bundle = { + notifications, + userMap + } + + if(req.query.pjax) + return res.render(req.directory + '/partials/notifications.ejs', { + bundle, + lang: req.lang, + moment + }); -router.get('/', async function (req, res) { - let user = await database.getUserByPID(req.pid); res.render(req.directory + '/notifications.ejs', { - moment: moment, - user: user, + moment, + selection: 0, + bundle, cdnURL: config.CDN_domain, - lang: req.lang + lang: req.lang, + pid: req.pid, + template: 'notifications', + moderator: req.moderator }); - user.notification_list.filter(noti => noti.read === false).forEach(function(notification) { - notification.read = true; + notifications.filter(noti => noti.read === false).forEach(function(notification) { + notification.markRead(); + }); +}); + +router.get('/friend_requests', async function (req, res) { + let requests = (await util.data.getFriendRequests(req.pid)).reverse(); + const now = new Date(); + requests = requests.filter(request => new Date(request.expires * 1000) > new Date(now.getTime() - 29 * 24 * 60 * 60 * 1000)) + let userMap = util.data.getUserHash(); + let bundle = { + requests: requests ? requests : [], + userMap + } + + if(req.query.pjax) + return res.render(req.directory + '/partials/requests.ejs', { + bundle, + lang: req.lang, + moment + }); + + res.render(req.directory + '/notifications.ejs', { + moment, + selection: 1, + bundle, + cdnURL: config.CDN_domain, + lang: req.lang, + pid: req.pid, + template: 'requests', + moderator: req.moderator }); - user.markModified('notification_list'); - user.save(); }); module.exports = router; diff --git a/src/services/juxt-web/routes/console/posts.js b/src/services/juxt-web/routes/console/posts.js index 57e3408..f1f644a 100644 --- a/src/services/juxt-web/routes/console/posts.js +++ b/src/services/juxt-web/routes/console/posts.js @@ -1,86 +1,208 @@ -var express = require('express'); +const express = require('express'); const database = require('../../../../database'); const util = require('../../../../util'); const config = require('../../../../../config.json'); -const { POST } = require('../../../../models/post'); -const rateLimit = require('../../../../middleware/ratelimit'); -var multer = require('multer'); -var moment = require('moment'); -var upload = multer({ dest: 'uploads/' }); -const snowflake = require('node-snowflake').Snowflake; -var router = express.Router(); +const {POST} = require('../../../../models/post'); +const multer = require('multer'); +const moment = require('moment'); +const rateLimit = require('express-rate-limit') +const {REPORT} = require("../../../../models/report"); +const upload = multer({dest: 'uploads/'}); +const crypto = require('crypto') +const router = express.Router(); -router.post('/empathy', rateLimit, async function (req, res) { +const postLimit = rateLimit({ + windowMs: 15 * 1000, // 30 seconds + max: 10, // Limit each IP to 1 request per `window` + standardHeaders: true, + legacyHeaders: true, + message: "New post limit reached. Try again in a minute", + handler: function (req, res) { + if (req.params.post_id) + res.redirect('/posts/' + req.params.post_id.toString()); + else if (req.body.community_id) + res.redirect('/titles/' + req.body.community_id); + else { + res.render(req.directory + '/error.ejs', { + code: 429, + message: "Too many new posts have been created.", + cdnURL: config.CDN_domain, + lang: req.lang, + pid: req.pid + }); + } + }, +}) + +const yeahLimit = rateLimit({ + windowMs: 60 * 1000, // 1 minute + max: 10, // Limit each IP to 60 requests per `window` + standardHeaders: true, + legacyHeaders: true, +}) + +router.post('/empathy', yeahLimit, async function (req, res) { let post = await database.getPostByID(req.body.postID); - let user = await database.getUserByPID(req.pid); - if(!user) - return res.sendStatus(423); - if(req.body.type === 'up' && user.likes.indexOf(post.id) === -1 && user.id !== post.pid) - { - post.upEmpathy(); - user.addToLikes(post.id) - res.sendStatus(200); - } - else if(req.body.type === 'down' && user.likes.indexOf(post.id) !== -1 && user.id !== post.pid) - { - post.downEmpathy(); - user.removeFromLike(post.id); - res.sendStatus(200); - } - else - res.sendStatus(423); + if (!post) + return res.sendStatus(404); + if (post.yeahs.indexOf(req.pid) === -1) { + await POST.updateOne({ + id: post.id, + yeahs: { + $ne: req.pid + } + }, + { + $inc: { + empathy_count: 1 + }, + $push: { + yeahs: req.pid + } + }); + res.send({status: 200, id: post.id, count: post.empathy_count + 1}); + if (req.pid !== post.pid) + await util.data.newNotification({ + pid: post.pid, + type: "yeah", + objectID: post.id, + userPID: req.pid, + link: `/posts/${post.id}` + }); + } else if (post.yeahs.indexOf(req.pid) !== -1) { + await POST.updateOne({ + id: post.id, + yeahs: { + $eq: req.pid + } + }, + { + $inc: { + empathy_count: -1 + }, + $pull: { + yeahs: req.pid + } + }); + res.send({status: 200, id: post.id, count: post.empathy_count - 1}); + } else + res.send({status: 423, id: post.id, count: post.empathy_count}); +}); + +router.post('/new', postLimit, upload.none(), async function (req, res) { + await newPost(req, res) }); router.get('/:post_id', async function (req, res) { - let user = await database.getUserByPID(req.pid); + let userSettings = await database.getUserSettings(req.pid); + let userContent = await database.getUserContent(req.pid); let post = await database.getPostByID(req.params.post_id.toString()); - if(post === null) - return res.sendStatus(404); + if (post === null) return res.redirect('/404'); + if (post.parent) { + post = await database.getPostByID(post.parent); + if (post === null) + return res.sendStatus(404); + return res.redirect(`/posts/${post.id}`); + } let community = await database.getCommunityByID(post.community_id); let communityMap = await util.data.getCommunityHash(); let replies = await database.getPostReplies(req.params.post_id.toString(), 25) res.render(req.directory + '/post.ejs', { moment: moment, - user: user, + userSettings: userSettings, + userContent: userContent, post: post, replies: replies, community: community, communityMap: communityMap, cdnURL: config.CDN_domain, lang: req.lang, - mii_image_CDN: config.mii_image_CDN + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + moderator: req.moderator }); }); -router.post('/:post_id/new', rateLimit, upload.none(), async function (req, res, next) { - let user = await database.getUserByPID(req.pid); - if(user.account_status !== 0 || req.body.olive_community_id === 'announcements') { - throw new Error('User not allowed to post') +router.delete('/:post_id', async function (req, res) { + let post = await database.getPostByID(req.params.post_id); + if(!post) return res.sendStatus(404); + if(req.pid !== post.pid && !req.moderator) return res.sendStatus(401); + if(req.moderator && req.pid !== post.pid) + await post.removePost(req.query.reason ? req.query.reason : 'Removed by moderator', req.pid); + else + await post.removePost('User requested removal', req.pid); + + res.statusCode = 200; + if(post.parent) + res.send(`/posts/${post.parent}`); + else + res.send('/users/me'); +}); + +router.post('/:post_id/new', postLimit, upload.none(), async function (req, res) { + await newPost(req, res); +}); + +router.post('/:post_id/report', upload.none(), async function (req, res) { + const { reason, message, post_id } = req.body; + const post = await database.getPostByID(post_id); + if(!reason || !post_id || !post) + return res.redirect('/404'); + + const reportDoc = { + pid: post.pid, + reported_by: req.pid, + post_id, + reason, + message, + created_at: new Date() } - let parentPost = await database.getPostByID(req.params.post_id.toString()); - if(!parentPost) - return res.sendStatus(403); - let community = await database.getCommunityByID(req.body.olive_community_id); - if(req.body.body === '' && req.body.painting === '' && req.body.screenshot === '') { + + const reportObj = new REPORT(reportDoc); + await reportObj.save(); + + return res.redirect(`/posts/${post.id}`); +}); + +async function newPost(req, res) { + let userSettings = await database.getUserSettings(req.pid), parentPost = null, postID = await generatePostUID(21); + let community = await database.getCommunityByID(req.body.community_id); + if (!community || !userSettings || !req.user) { + res.status(403); + console.log('missing data') + return res.redirect(`/titles/show`); + } + if (req.params.post_id && (req.body.body === '' && req.body.painting === '' && req.body.screenshot === '')) { res.status(422); return res.redirect('/posts/' + req.params.post_id.toString()); } - let appData = ""; - if (req.body.app_data) { - appData = req.body.app_data.replace(/\0/g, "").trim(); + if (req.params.post_id) { + parentPost = await database.getPostByID(req.params.post_id.toString()); + if (!parentPost) + return res.sendStatus(403); } - let painting = "", paintingURI = ""; - if (req.body.painting && req.body.painting !== 'eJztwTEBACAMA7DCNRlIQRbu4ZoEviTJTNvjZNUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL55fYLL3w==') { - painting = req.body.painting.replace(/\0/g, "").trim(); + if (!(community.admins && community.admins.indexOf(req.pid) !== -1 && userSettings.account_status === 0) + && (community.type >= 2) && !(parentPost && community.allows_comments && community.open)) { + res.status(403); + return res.redirect(`/titles/${community.olive_community_id}/new`); + } + + let painting = "", paintingURI = "", screenshot = null; + if (req.body._post_type === 'painting' && req.body.painting) { + if(req.body.bmp === 'true') + painting = await util.data.processPainting(req.body.painting.replace(/\0/g, "").trim(), false); + else + painting = req.body.painting; paintingURI = await util.data.processPainting(painting, true); + await util.data.uploadCDNAsset('pn-cdn', `paintings/${req.pid}/${postID}.png`, paintingURI, 'public-read'); } - let screenshot = ""; if (req.body.screenshot) { screenshot = req.body.screenshot.replace(/\0/g, "").trim(); + await util.data.uploadCDNAsset('pn-cdn', `screenshots/${req.pid}/${postID}.jpg`, Buffer.from(screenshot, 'base64'), 'public-read'); } let miiFace; - switch (parseInt(req.body.emotion)) { + switch (parseInt(req.body.feeling_id)) { case 1: miiFace = 'smile_open_mouth.png'; break; @@ -100,124 +222,65 @@ router.post('/:post_id/new', rateLimit, upload.none(), async function (req, res, miiFace = 'normal_face.png'; break; } - - - parentPost.reply_count = parentPost.reply_count + 1; - parentPost.save(); + let body = req.body.body; + if (body) + body = req.body.body.replace(/[^A-Za-z\d\s-_!@#$%^&*(){}‛¨ƒºª«»“”„¿¡←→↑↓√§¶†‡¦–—⇒⇔¤¢€£¥™©®+×÷=±∞ˇ˘˙¸˛˜′″µ°¹²³♭♪•…¬¯‰¼½¾♡♥●◆■▲▼☆★♀♂,./?;:'"\\<>]/g, ""); + if (body.length > 280) + body = body.substring(0, 280); const document = { title_id: community.title_id[0], - community_id: community.community_id, - screen_name: user.user_id, - body: req.body.body, - app_data: appData, + community_id: community.olive_community_id, + screen_name: userSettings.screen_name, + body: body, painting: painting, - painting_uri: paintingURI, - screenshot: screenshot, - country_id: req.paramPackData.country_id, + screenshot: screenshot ? `/screenshots/${req.pid}/${postID}.jpg` : "", + country_id: req.paramPackData ? req.paramPackData.country_id : 49, created_at: new Date(), - feeling_id: req.body.emotion, - id: snowflake.nextId(), - is_autopost: req.body.is_autopost, + feeling_id: req.body.feeling_id, + id: postID, + is_autopost: 0, is_spoiler: (req.body.spoiler) ? 1 : 0, is_app_jumpable: req.body.is_app_jumpable, language_id: req.body.language_id, - mii: user.mii, - mii_face_url: `http://mii.olv.pretendo.cc/mii/${user.pid}/${miiFace}`, + mii: req.user.mii.data, + mii_face_url: `https://mii.olv.pretendo.cc/mii/${req.user.pid}/${miiFace}`, pid: req.pid, - platform_id: req.paramPackData.platform_id, - region_id: req.paramPackData.region_id, - verified: user.official, - parent: parentPost.id + platform_id: req.paramPackData ? req.paramPackData.platform_id : 0, + region_id: req.paramPackData ? req.paramPackData.region_id : 2, + verified: req.moderator, + parent: parentPost ? parentPost.id : null, + moderator: req.moderator }; let duplicatePost = await database.getDuplicatePosts(req.pid, document); - if(duplicatePost) + if (duplicatePost && req.params.post_id) return res.redirect('/posts/' + req.params.post_id.toString()); + if (document.body === '' && document.painting === '' && document.screenshot === '') + return res.redirect('/titles/' + community.olive_community_id + '/new'); const newPost = new POST(document); newPost.save(); - if(parentPost.pid !== user.pid) - await database.pushNewNotificationByPID(parentPost.pid, user.user_id + ' replied to your post!', '/posts/' + parentPost.id) - res.redirect('/posts/' + req.params.post_id.toString()); -}); + if (parentPost) { + parentPost.reply_count = parentPost.reply_count + 1; + parentPost.save(); + } + if (parentPost && (parentPost.pid !== req.user.pid)) + await util.data.newNotification({ + pid: parentPost.pid, + type: "reply", + user: req.pid, + link: `/posts/${parentPost.id}` + }); + if (parentPost) + res.redirect('/posts/' + req.params.post_id.toString()); + else + res.redirect('/titles/' + community.olive_community_id + '/new'); +} -router.post('/new', rateLimit, upload.none(), async function (req, res, next) { - let user = await database.getUserByPID(req.pid); - if(user.account_status !== 0) { - throw new Error('User not allowed to post') - } - let community = await database.getCommunityByID(req.body.olive_community_id); - if(community.community_id === 'announcements') - return res.sendStatus(403) - if(req.body.body === '' && req.body.painting === '' && req.body.screenshot === '') { - res.status(422); - return res.redirect('/communities/' + community.community_id + '/new'); - } - let appData = ""; - if (req.body.app_data) { - appData = req.body.app_data.replace(/\0/g, "").trim(); - } - let painting = "", paintingURI = ""; - if (req.body.painting && req.body.painting !== 'eJztwTEBACAMA7DCNRlIQRbu4ZoEviTJTNvjZNUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL55fYLL3w==') { - painting = req.body.painting.replace(/\0/g, "").trim(); - paintingURI = await util.data.processPainting(painting, true); - } - let screenshot = ""; - if (req.body.screenshot) { - screenshot = req.body.screenshot.replace(/\0/g, "").trim(); - } +async function generatePostUID(length) { + let id = Buffer.from(String.fromCharCode(...crypto.getRandomValues(new Uint8Array(length * 2))), 'binary').toString('base64').replace(/[+/]/g, "").substring(0, length); + const inuse = await POST.findOne({id}); + id = (inuse ? await generatePostUID() : id); + return id; +} - let miiFace; - console.log(parseInt(req.body.emotion)) - switch (parseInt(req.body.emotion)) { - case 1: - miiFace = 'smile_open_mouth.png'; - break; - case 2: - miiFace = 'wink_left.png'; - break; - case 3: - miiFace = 'surprise_open_mouth.png'; - break; - case 4: - miiFace = 'frustrated.png'; - break; - case 5: - miiFace = 'sorrow.png'; - break; - default: - miiFace = 'normal_face.png'; - break; - } - - const document = { - title_id: community.title_id[0], - community_id: community.community_id, - screen_name: user.user_id, - body: req.body.body, - app_data: appData, - painting: painting, - painting_uri: paintingURI, - screenshot: screenshot, - country_id: req.paramPackData.country_id, - created_at: new Date(), - feeling_id: req.body.emotion, - id: snowflake.nextId(), - is_autopost: req.body.is_autopost, - is_spoiler: (req.body.spoiler) ? 1 : 0, - is_app_jumpable: req.body.is_app_jumpable, - language_id: req.body.language_id, - mii: user.mii, - mii_face_url: `http://mii.olv.pretendo.cc/mii/${user.pid}/${miiFace}`, - pid: req.pid, - platform_id: req.paramPackData.platform_id, - region_id: req.paramPackData.region_id, - verified: user.official - }; - let duplicatePost = await database.getDuplicatePosts(req.pid, document); - if(duplicatePost) - return res.redirect('/communities/' + community.community_id + '/new'); - const newPost = new POST(document); - newPost.save(); - res.redirect('/communities/' + community.community_id + '/new'); -}); module.exports = router; diff --git a/src/services/juxt-web/routes/console/show.js b/src/services/juxt-web/routes/console/show.js index be9c7ba..0e78ab8 100644 --- a/src/services/juxt-web/routes/console/show.js +++ b/src/services/juxt-web/routes/console/show.js @@ -1,67 +1,43 @@ -var express = require('express'); -var xml = require('object-to-xml'); +const express = require('express'); const database = require('../../../../database'); const util = require('../../../../util'); const config = require('../../../../../config.json'); - -var moment = require('moment'); -var router = express.Router(); +const router = express.Router(); router.get('/', async function (req, res) { - try { - if(req.pid === 1000000000) { - res.render(req.directory + '/guest_notice.ejs', { - cdnURL: config.CDN_domain, - lang: req.lang, - }); - } - else { - let user = await database.getUserByPID(req.pid); - if(user === null) - { - res.render(req.directory + '/first_run.ejs', { - cdnURL: config.CDN_domain, - lang: req.lang, - }); - } - else { - if(moment(user.ban_lift_date).format('YYYY-MM-DD') <= moment().format('YYYY-MM-DD') && user.account_status !== 3) { - user.account_status = 0; - user.save() - } - /** - * Account Status - * 0 - Fine - * 1 - Limited from Posting - * 2 - Temporary Ban - * 3 - Forever Ban - */ - if(user.account_status !== 0) - { - res.render(req.directory + '/ban_notification.ejs', { - user: user, - moment: moment, - cdnURL: config.CDN_domain, - lang: req.lang, - }); - } - else - { - let popularCommunities = await database.getMostPopularCommunities(9); - let newCommunities = await database.getNewCommunities(6); - res.render(req.directory + '/communities.ejs', { - popularCommunities: popularCommunities, - newCommunities: newCommunities, - cdnURL: config.CDN_domain, - lang: req.lang - }); - } - } - - } + if(req.pid === 1000000000) { + return res.render(req.directory + '/guest_notice.ejs', { + cdnURL: config.CDN_domain, + lang: req.lang, + moderator: req.moderator + }); } - catch (e) { - console.log(e) + + let user = await database.getUserSettings(req.pid); + let content = await database.getUserContent(req.pid) + if(!user || !content) { + res.render(req.directory + '/first_run.ejs', { + cdnURL: config.CDN_domain, + lang: req.lang, + pid: req.pid, + moderator: req.moderator + }); + } + + if(req.query.topic_tag) { + res.redirect(`/topics?topic_tag=${req.query.topic_tag}`) + } + else if(req.query.pid) { + res.redirect(`/users/${req.query.pid}`) + } + else + res.redirect('/titles') + + let usrMii = await database.getUserSettings(req.pid); + if(req.user.mii.name !== usrMii.screen_name) { + util.data.setName(req.pid, req.user.mii.name); + usrMii.screen_name = req.user.mii.name; + await usrMii.save(); } }); @@ -69,31 +45,24 @@ router.get('/first', async function (req, res) { res.render(req.directory + '/first_run.ejs', { cdnURL: config.CDN_domain, lang: req.lang, + moderator: req.moderator }); }); router.post('/newUser', async function (req, res) { if(req.pid === null) - { - res.sendStatus(401); - } + return res.sendStatus(401); + + let user = await database.getUserSettings(req.pid); + if(user) + return res.sendStatus(504); + + await util.data.create_user(req.pid, req.body.experience, req.body.notifications); + if(await database.getUserSettings(req.pid) !== null) + res.sendStatus(200); else - { - let user = await database.getUserByPID(req.pid); - if(user === null) - { - await util.data.create_user(req.pid, req.body.experience, req.body.notifications, req.body.region); - util.data.refreshCache(); - if(await database.getUserByPID(req.pid) !== null) - res.sendStatus(200); - else - res.sendStatus(504); - } - else - { - res.sendStatus(504); - } - } + res.sendStatus(504); + }); module.exports = router; diff --git a/src/services/juxt-web/routes/console/topics.js b/src/services/juxt-web/routes/console/topics.js new file mode 100644 index 0000000..e4f1d48 --- /dev/null +++ b/src/services/juxt-web/routes/console/topics.js @@ -0,0 +1,89 @@ +const express = require('express'); +const database = require('../../../../database'); +const util = require('../../../../util'); +const config = require('../../../../../config.json'); +const moment = require('moment'); +const { POST } = require('../../../../models/post'); +const router = express.Router(); + +router.get('/', async function (req, res) { + let userContent = await database.getUserContent(req.pid); + let communityMap = await util.data.getCommunityHash(); + let tag = req.query.topic_tag; + console.log(tag) + if(!userContent || !tag) + return res.redirect('/404'); + let posts = await POST.find({ topic_tag: req.query.topic_tag }).sort({ created_at: -1}).limit(parseInt(req.query.limit)); + + let bundle = { + posts, + open: true, + communityMap, + userContent, + lang: req.lang, + mii_image_CDN: config.mii_image_CDN, + link: `/topics/more?tag=${tag}&offset=${posts.length}&pjax=true` + } + + if(req.query.pjax) + return res.render(req.directory + '/partials/posts_list.ejs', { + bundle, + moment, + lang: req.lang + }); + + res.render(req.directory + '/feed.ejs', { + moment: moment, + title: tag, + userContent: userContent, + posts: posts, + communityMap: communityMap, + account_server: config.account_server_domain.slice(8), + cdnURL: config.CDN_domain, + lang: req.lang, + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + bundle, + template: 'posts_list', + moderator: req.moderator + }); +}); + +router.get('/more', async function (req, res) { + let offset = req.query.offset ? parseInt(req.query.offset) : 0; + let userContent = await database.getUserContent(req.pid); + let communityMap = await util.data.getCommunityHash(); + let tag = req.query.topic_tag; + if(!tag) return res.sendStatus(204); + let posts = await POST.find({ topic_tag: req.query.topic_tag }).sort({ created_at: -1}).limit(parseInt(req.query.limit)); + + let bundle = { + posts, + numPosts: posts.length, + open: true, + communityMap, + userContent, + lang: req.lang, + mii_image_CDN: config.mii_image_CDN, + link: `/topics/more?tag=${tag}&offset=${posts.length}&pjax=true` + } + + if(posts.length > 0) { + res.render(req.directory + '/partials/posts_list.ejs', { + communityMap: communityMap, + moment: moment, + database: database, + bundle, + account_server: config.account_server_domain.slice(8), + cdnURL: config.CDN_domain, + lang: req.lang, + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + moderator: req.moderator + }); + } + else + res.sendStatus(204); +}); + +module.exports = router; diff --git a/src/services/juxt-web/routes/console/userpage.js b/src/services/juxt-web/routes/console/userpage.js index 6234c63..d1ea861 100644 --- a/src/services/juxt-web/routes/console/userpage.js +++ b/src/services/juxt-web/routes/console/userpage.js @@ -1,221 +1,360 @@ -var express = require('express'); -var xml = require('object-to-xml'); +const express = require('express'); const database = require('../../../../database'); const util = require('../../../../util'); const config = require('../../../../../config.json'); -var multer = require('multer'); -var moment = require('moment'); -var upload = multer({ dest: 'uploads/' }); -var router = express.Router(); +const multer = require('multer'); +const moment = require('moment'); +const upload = multer({ dest: 'uploads/' }); +const { POST } = require('../../../../models/post'); +const {SETTINGS} = require("../../../../models/settings"); +const router = express.Router(); router.get('/menu', async function (req, res) { - let user = await database.getUserByPID(req.pid); + let user = await database.getUserSettings(req.pid); res.render('ctr/user_menu.ejs', { user: user, }); }); -router.get('/me', async function (req, res) { - let user = await database.getUserByPID(req.pid); - let newPosts = await database.getNumberUserPostsByID(req.pid, config.post_limit); - let numPosts = await database.getTotalPostsByUserID(req.pid); +router.get('/me', async function (req, res) { await userPage(req, res, req.pid) }); + +router.get('/me/settings', async function (req, res) { + let userSettings = await database.getUserSettings(req.pid); let communityMap = await util.data.getCommunityHash(); - res.render(req.directory + '/me_page.ejs', { + res.render(req.directory + '/settings.ejs', { communityMap: communityMap, moment: moment, - user: user, - newPosts: newPosts, - numPosts: numPosts, + userSettings: userSettings, account_server: config.account_server_domain.slice(8), cdnURL: config.CDN_domain, lang: req.lang, - mii_image_CDN: config.mii_image_CDN + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + moderator: req.moderator }); }); -router.post('/me', upload.none(), async function (req, res) { - let user = await database.getUserByPID(req.pid); +router.get('/me/:type', async function (req, res) { await userRelations(req, res, req.pid) }); - user.country_visibility = !!req.body.country; - user.birthday_visibility = !!req.body.birthday; - user.game_skill_visibility = !!req.body.experience; - user.profile_comment_visibility = !!req.body.commentShow; +router.post('/me/settings', upload.none(), async function (req, res) { + let userSettings = await database.getUserSettings(req.pid); + + userSettings.country_visibility = !!req.body.country; + userSettings.birthday_visibility = !!req.body.birthday; + userSettings.game_skill_visibility = !!req.body.experience; + userSettings.profile_comment_visibility = !!req.body.comment; if (req.body.comment) - user.setProfileComment(req.body.comment); + userSettings.updateComment(req.body.comment); else - user.setProfileComment(''); + userSettings.updateComment(''); res.redirect('/users/me'); }); router.get('/show', async function (req, res) { - var userID = req.query.pid; - if(userID === 'me') { - res.sendStatus(504); - return; + res.redirect(`/users/${req.query.pid}`); +}); + +router.get('/:pid/more', async function (req, res) { await morePosts(req, res, req.params.pid) }); + +router.get('/:pid/yeahs/more', async function (req, res) { await moreYeahPosts(req, res, req.params.pid) }); + +router.get('/:pid/:type', async function (req, res) { await userRelations(req, res, req.params.pid) }); + +// TODO: Remove the need for a parameter to toggle the following state +router.post('/follow', upload.none(), async function (req, res) { + let userToFollowContent = await database.getUserContent(req.body.id); + let userContent = await database.getUserContent(req.pid); + if(userContent !== null && userContent.followed_users.indexOf(userToFollowContent.pid) === -1) + { + userToFollowContent.addToFollowers(userContent.pid); + userContent.addToUsers(userToFollowContent.pid); + res.send({ status: 200, id: userToFollowContent.pid, count: userToFollowContent.following_users.length - 1 }); + let picked = await database.getNotification(userToFollowContent.pid, 2, userContent.pid); + //pid, type, reference_id, origin_pid, title, content + if(picked === null) + await util.data.newNotification({ pid: userToFollowContent.pid, type: "follow", objectID: req.pid, link: `/users/${req.pid}` }); } - let parentUser = await database.getUserByPID(req.pid); - let user = await database.getUserByPID(userID); - if(user === null) - return res.sendStatus(404); - if(parentUser.pid === user.pid) + else if(userContent !== null && userContent.followed_users.indexOf(userToFollowContent.pid) !== -1) + { + userToFollowContent.removeFromFollowers(userContent.pid); + userContent.removeFromUsers(userToFollowContent.pid); + res.send({ status: 200, id: userToFollowContent.pid, count: userToFollowContent.following_users.length - 1 }); + } + else + res.send({ status: 423, id: userToFollowContent.pid, count: userToFollowContent.following_users.length - 1 }); +}); + +router.get('/:pid', async function (req, res) { + const userID = req.params.pid; + if(userID === 'me' || Number(userID) === req.pid) return res.redirect('/users/me'); - let newPosts = await database.getNumberUserPostsByID(user.pid, config.post_limit); - let numPosts = await database.getTotalPostsByUserID(user.pid); + await userPage(req, res, userID); +}); + +router.get('/:pid/:type', async function (req, res) { + const userID = req.params.pid; + if(userID === 'me' || Number(userID) === req.pid) + return res.redirect('/users/me'); + await userRelations(req, res, userID); +}); + +async function userPage(req, res, userID) { + let pnid = userID === req.pid ? req.user : await util.data.getUserDataFromPid(userID).catch((e) => { + console.log(e.details); + }); + let userContent = await database.getUserContent(userID); + if(isNaN(userID) || !pnid || !userContent) + return res.redirect('/404'); + let userSettings = await database.getUserSettings(userID); + let posts = await database.getNumberUserPostsByID(userID, config.post_limit); + let numPosts = await database.getTotalPostsByUserID(userID); let communityMap = await util.data.getCommunityHash(); + let friends = await util.data.getFriends(userID); + let parentUserContent; + if(pnid.pid !== req.pid) + parentUserContent = await database.getUserContent(req.pid); + + let bundle = { + posts, + open: true, + numPosts, + communityMap, + userContent: parentUserContent ? parentUserContent : userContent, + lang: req.lang, + mii_image_CDN: config.mii_image_CDN, + link: `/users/${userID}/more?offset=${posts.length}&pjax=true` + } + + if(req.query.pjax) + return res.render(req.directory + '/partials/posts_list.ejs', { + bundle, + lang: req.lang, + moment + }); + let link = (pnid.pid === req.pid) ? '/users/me/' : `/users/${userID}/`; res.render(req.directory + '/user_page.ejs', { - // EJS variable and server-side variable - communityMap: communityMap, - moment: moment, - user: user, - newPosts: newPosts, - numPosts: numPosts, - parentUser: parentUser, + template: 'posts_list', + selection: 0, + moment, + pnid, + numPosts, + userContent, + userSettings, + bundle, account_server: config.account_server_domain.slice(8), cdnURL: config.CDN_domain, lang: req.lang, - mii_image_CDN: config.mii_image_CDN + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + link, + friends, + parentUserContent, + moderator: req.moderator }); -}); +} -router.get('/loadPosts', async function (req, res) { - let offset = parseInt(req.query.offset); - let pid; - if(req.query.pid) - pid = req.query.pid - else - pid = req.pid - let user = await database.getUserByPID(pid); - let newPosts = await database.getUserPostsOffset(pid, config.post_limit, offset); - let communityMap = await util.data.getCommunityHash(); - if(newPosts.length > 0) - { - res.render(req.directory + '/more_posts.ejs', { - communityMap: communityMap, - moment: moment, - user: user, - newPosts: newPosts, - account_server: config.account_server_domain.slice(8), - cdnURL: config.CDN_domain, +async function userRelations(req, res, userID) { + let pnid = userID === req.pid ? req.user : await util.data.getUserDataFromPid(userID); + let userContent = await database.getUserContent(userID); + let link = (pnid.pid === req.pid) ? '/users/me/' : `/users/${userID}/`; + let userSettings = await database.getUserSettings(userID); + let numPosts = await database.getTotalPostsByUserID(userID); + let friends = await util.data.getFriends(userID); + let parentUserContent; + if(pnid.pid !== req.pid) + parentUserContent = await database.getUserContent(req.pid); + if(isNaN(userID) || !pnid) + return res.redirect('/404'); + + let followers, communities, communityMap, selection; + + if(req.params.type === 'yeahs') { + let posts = await POST.find({ yeahs: req.pid, removed: false }).sort({created_at: -1}); + /*let posts = await POST.aggregate([ + { $match: { id: { $in: likesArray } } }, + {$addFields: { + "__order": { $indexOfArray: [ likesArray, "$id" ] } + }}, + { $sort: { "__order": 1 } }, + { $project: { index: 0, _id: 0 } }, + { $limit: config.post_limit } + ]);*/ + let communityMap = await util.data.getCommunityHash(); + let bundle = { + posts, + open: true, + numPosts: posts.length, + communityMap, + userContent: parentUserContent ? parentUserContent : userContent, lang: req.lang, - mii_image_CDN: config.mii_image_CDN - }); + mii_image_CDN: config.mii_image_CDN, + link: `/users/${userID}/yeahs/more?offset=${posts.length}&pjax=true` + } + + if(req.query.pjax) + return res.render(req.directory + '/partials/posts_list.ejs', { + bundle, + lang: req.lang, + moment + }); + else + return res.render(req.directory + '/user_page.ejs', { + template: 'posts_list', + selection: 4, + moment, + pnid, + numPosts, + userContent, + userSettings, + bundle, + account_server: config.account_server_domain.slice(8), + cdnURL: config.CDN_domain, + lang: req.lang, + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + link, + friends, + parentUserContent, + moderator: req.moderator + }); } - else - { - res.status(204) - res.send('

' + req.lang.global.no_posts + '

') + + if(req.params.type === 'friends') { + followers = await SETTINGS.find({ pid: friends }); + communities = []; + selection = 2; + } + else if(req.params.type === 'followers') { + followers = await database.getFollowingUsers(userContent); + communities = []; + selection = 3; + } + else { + followers = await database.getFollowedUsers(userContent); + communities = userContent.followed_communities; + communityMap = await util.data.getCommunityHash(); + selection = 2; } -}); -router.get('/following', async function (req, res) { - let user = await database.getUserByPID(req.query.pid); - let followers = await database.getFollowedUsers(user); - let communities = user.followed_communities; - let communityMap = await util.data.getCommunityHash(); - - - - if(user.followed_users[0] === '0') + if(followers[0] === '0') followers.splice(0, 0); if(communities[0] === '0') communities.splice(0, 1); - if(user.following > 0) + let bundle = { + followers: followers ? followers : [], + communities: communities, + communityMap: communityMap + } + + if(req.query.pjax) + return res.render(req.directory + '/partials/following_list.ejs', { + bundle, + }); + res.render(req.directory + '/user_page.ejs', { + template: 'following_list', + selection: selection, + moment, + pnid, + numPosts, + userContent, + userSettings, + bundle, + account_server: config.account_server_domain.slice(8), + cdnURL: config.CDN_domain, + lang: req.lang, + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + link, + parentUserContent, + moderator: req.moderator + }); +} + +async function morePosts(req, res, userID) { + let offset = parseInt(req.query.offset); + let userContent = await database.getUserContent(req.pid); + let communityMap = await util.data.getCommunityHash(); + if(!offset) offset = 0; + let posts = await database.getUserPostsOffset(userID, config.post_limit, offset); + + let bundle = { + posts, + numPosts: posts.length, + open: true, + communityMap, + userContent, + lang: req.lang, + mii_image_CDN: config.mii_image_CDN, + link: `/users/${userID}/more?offset=${offset + posts.length}&pjax=true` + } + + if(posts.length > 0) { - res.render(req.directory + '/following_list.ejs', { - moment: moment, - user: user, - followers: followers, - communities: communities, + res.render(req.directory + '/partials/posts_list.ejs', { communityMap: communityMap, - account_server: config.account_server_domain.slice(8), - cdnURL: config.CDN_domain, - lang: req.lang, - mii_image_CDN: config.mii_image_CDN - }); - } - else - { - res.send('

' + req.lang.user_page.no_following + '

') - } -}); - -router.get('/followers', async function (req, res) { - let user = await database.getUserByPID(req.query.pid); - let followers = await database.getFollowingUsers(user); - let communities = []; - let userMap = await util.data.getUserHash(); - - if(followers[0] === '0') - followers.splice(0, 1); - - if(user.followers > 0) - { - res.render(req.directory + '/following_list.ejs', { moment: moment, - user: user, - followers: followers, - communities: communities, - userMap: userMap, + database: database, + bundle, account_server: config.account_server_domain.slice(8), cdnURL: config.CDN_domain, lang: req.lang, - mii_image_CDN: config.mii_image_CDN + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + moderator: req.moderator }); } else - { - res.send('

' + req.lang.user_page.no_followers + '

') + res.sendStatus(204); +} + +async function moreYeahPosts(req, res, userID) { + let offset = parseInt(req.query.offset); + let parentUserContent = await database.getUserContent(userID); + let userContent = await database.getUserContent(req.pid); + let communityMap = await util.data.getCommunityHash(); + if(!offset) offset = 0; + let likesArray = await userContent.likes.slice().reverse(); + let posts = await POST.aggregate([ + { $match: { id: { $in: likesArray }, removed: false } }, + {$addFields: { + "__order": { $indexOfArray: [ likesArray, "$id" ] } + }}, + { $sort: { "__order": 1 } }, + { $project: { index: 0, _id: 0 } }, + { $skip : offset }, + { $limit: config.post_limit } + ]); + + let bundle = { + posts: posts.reverse(), + numPosts: posts.length, + open: true, + communityMap, + userContent, + lang: req.lang, + mii_image_CDN: config.mii_image_CDN, + link: `/users/${userID}/yeahs/more?offset=${offset + posts.length}&pjax=true` } -}); -router.get('/friends', async function (req, res) { - let user = await database.getUserByPID(req.query.pid); - let friends = null; - let userMap = await util.data.getUserHash(); - - if(friends) + if(posts.length > 0) { - res.render(req.directory + '/following_list.ejs', { + res.render(req.directory + '/partials/posts_list.ejs', { + communityMap: communityMap, moment: moment, - user: user, - friends: friends, - userMap: userMap, + database: database, + bundle, account_server: config.account_server_domain.slice(8), cdnURL: config.CDN_domain, lang: req.lang, - mii_image_CDN: config.mii_image_CDN + mii_image_CDN: config.mii_image_CDN, + pid: req.pid, + moderator: req.moderator }); } else - { - res.send('

' + req.lang.user_page.no_friends + '

') - } -}); - -router.post('/follow', upload.none(), async function (req, res) { - let userToFollow = await database.getUserByPID(req.body.userID); - let user = await database.getUserByPID(req.pid); - if(req.body.type === 'true' && user !== null && user.followed_users.indexOf(userToFollow.pid) === -1) - { - userToFollow.addToFollowers(user.pid); - user.addToUsers(userToFollow.pid); - res.sendStatus(200); - let content = user.user_id + ' NEW_FOLLOWER'; - var picked = userToFollow.notification_list.find(o => o.content === content); - if(picked === undefined) - await database.pushNewNotificationByPID(userToFollow.pid, content, '/users/show?pid=' + user.pid) - } - else if(req.body.type === 'false' && user !== null && user.followed_users.indexOf(userToFollow.pid) !== -1) - { - userToFollow.removeFromFollowers(user.pid); - user.removeFromUsers(userToFollow.pid); - res.sendStatus(200); - } - else - res.sendStatus(423); -}); - + res.sendStatus(204); +} module.exports = router; diff --git a/src/services/juxt-web/routes/console/web.js b/src/services/juxt-web/routes/console/web.js index fa01f8d..86410d0 100644 --- a/src/services/juxt-web/routes/console/web.js +++ b/src/services/juxt-web/routes/console/web.js @@ -1,12 +1,11 @@ -var express = require('express'); -var router = express.Router(); -var xml = require('object-to-xml'); +const express = require('express'); +const router = express.Router(); const database = require('../../../../database'); -const util = require('../../../../util'); -var path = require('path'); +const { POST } = require('../../../../models/post'); +const path = require('path'); router.get('/', function (req, res) { - res.redirect('/activity-feed') + res.redirect('/titles/show') }); router.get('/css/:filename', function (req, res) { @@ -19,6 +18,11 @@ router.get('/js/:filename', function (req, res) { res.sendFile('/js/' + req.params.filename, {root: path.join(__dirname, '../../../../webfiles/' + req.directory)}); }); +router.get('/images/:filename', function (req, res) { + res.set("Content-Type", "image/png"); + res.sendFile('/images/' + req.params.filename, {root: path.join(__dirname, '../../../../webfiles/' + req.directory)}); +}); + router.get('/fonts/:filename', function (req, res) { res.set("Content-Type", "font/woff"); res.sendFile('/fonts/' + req.params.filename, {root: path.join(__dirname, '../../../../webfiles/' + req.directory)}); @@ -26,20 +30,20 @@ router.get('/fonts/:filename', function (req, res) { router.get('/favicon.ico', function (req, res) { res.set("Content-Type", "image/x-icon"); - res.sendFile('/css/favicon.ico', {root: path.join(__dirname, '../../../../webfiles/' + req.directory)}); + res.sendFile('/images/favicon.ico', {root: path.join(__dirname, '../../../../webfiles/' + req.directory)}); }); router.get('/icons/:image_id.png', async function (req, res) { res.set("Content-Type", "image/png"); let community = await database.getCommunityByID(req.params.image_id.toString()); - if(community !== null) { + if(community !== null && community.browser_icon) { if(community.browser_icon.indexOf('data:image/png;base64,') !== -1) res.send(Buffer.from(community.browser_icon.replace('data:image/png;base64,',''), 'base64')); else res.send(Buffer.from(community.browser_icon, 'base64')); } else { - let user = await database.getUserByPID(req.params.image_id.toString()); + let user = await database.getUserSettings(req.params.image_id.toString()); if(user !== null) if(user.pfp_uri.indexOf('data:image/png;base64,') !== -1) res.send(Buffer.from(user.pfp_uri.replace('data:image/png;base64,',''), 'base64')); @@ -75,7 +79,7 @@ router.get('/tip/:image_id.png', async function (req, res) { router.get('/banner/:image_id.png', async function (req, res) { res.set("Content-Type", "image/png"); let community = await database.getCommunityByID(req.params.image_id.toString()); - if(community !== null) + if(community !== null && community.WiiU_browser_header !== undefined) if(community.WiiU_browser_header.indexOf('data:image/png;base64,') !== -1) res.send(Buffer.from(community.WiiU_browser_header.replace('data:image/png;base64,',''), 'base64')); else @@ -109,18 +113,14 @@ router.get('/drawing/:image_id.png', async function (req, res) { }); router.get('/notifications.json', async function (req, res) { - let user = await database.getUserByPID(req.pid); - if(!user) - return res.sendStatus(403); + let notifications = await database.getUnreadNotificationCount(req.pid); let messagesCount = await database.getUnreadConversationCount(req.pid); - if(user.notification_list) { - res.send( - { - message_count: messagesCount, - notification_count: user.notification_list.filter(notification => notification.read === false).length, - } - ) - } + res.send( + { + message_count: messagesCount, + notification_count: notifications, + } + ) }); router.get('/:post_id/oembed.json', async function (req, res) { @@ -135,11 +135,14 @@ router.get('/:post_id/oembed.json', async function (req, res) { router.get('/downloadUserData.json', async function (req, res) { res.set("Content-Type", "text/json"); - let posts = await database.getUserPostsOffset(req.pid, 100000, 0); - let user = await database.getUserByPID(req.pid); + res.set('Content-Disposition', `attachment; filename="${req.pid}_user_data.json"`); + let posts = await POST.find({ pid: req.pid }) + let userContent = await database.getUserSettings(req.pid); + let userSettings = await database.getUserContent(req.pid); let doc = { - "user": user, - "content": posts, + "user_content": userContent, + "user_settings": userSettings, + "posts": posts, } res.send(doc) }); diff --git a/src/services/juxt-web/routes/index.js b/src/services/juxt-web/routes/index.js index 7e6ea7b..758996d 100644 --- a/src/services/juxt-web/routes/index.js +++ b/src/services/juxt-web/routes/index.js @@ -7,9 +7,9 @@ module.exports = { PORTAL_FEED: require('./console/feed'), PORTAL_NEWS: require('./console/notifications'), PORTAL_MESSAGES: require('./console/messages'), - WEB_ADMIN: require('./admin/home'), - WEB_API: require('./admin/api'), + PORTAL_TOPICS: require('./console/topics'), WEB_LOGIN: require('./web/login'), ROBOTS: require('./web/robots'), PWA: require('./web/pwa'), + ADMIN: require('./admin/admin'), }; \ No newline at end of file diff --git a/src/services/juxt-web/routes/web/login.js b/src/services/juxt-web/routes/web/login.js index c343068..0474dbb 100644 --- a/src/services/juxt-web/routes/web/login.js +++ b/src/services/juxt-web/routes/web/login.js @@ -1,78 +1,68 @@ -var express = require('express'); -var router = express.Router(); -var parseString = require('xml2js').parseString; +const express = require('express'); +const router = express.Router(); +const parseString = require('xml2js').parseString; const database = require('../../../../database'); const util = require('../../../../util'); -var path = require('path'); const config = require("../../../../../config.json"); const request = require("request"); const logger = require("../../../../logger"); router.get('/', async function (req, res) { - res.render(req.directory + '/login.ejs'); + res.render(req.directory + '/login.ejs', {toast: null, cdnURL: config.CDN_domain,}); }); router.post('/', async (req, res) => { const { username, password } = req.body; - let user = await database.getUserByUsername(username); - if(!user) { - res.cookie('error', 'User not found.', { domain: '.pretendo.cc' }); - return res.redirect('/account/login'); - } - let password_hash = await util.data.nintendoPasswordHash(password, user.pid); - let auth, token; - await request.post({ - url: `https://${config.account_server_domain}/v1/api/oauth20/access_token/generate`, - headers: { - 'X-Nintendo-Client-ID': config["X-Nintendo-Client-ID"], - 'X-Nintendo-Client-Secret': config["X-Nintendo-Client-Secret"], - 'X-Nintendo-Title-ID': '0005001010040100' - }, - form: { - user_id: username, - password_type: 'hash', - password: password_hash, - grant_type: 'password' - } - }, function (error, response, body) { - if (!error && response.statusCode === 200) { - logger.audit('[' + user.user_id + ' - ' + user.pid + '] signed into the application'); - parseString(body, async function (err, result) { - auth = result.OAuth20.access_token[0].token[0]; - await request.get({ - url: 'https://' + config.account_server_domain + "/v1/api/provider/service_token/@me", - headers: { - 'X-Nintendo-Client-ID': config["X-Nintendo-Client-ID"], - 'X-Nintendo-Client-Secret': config["X-Nintendo-Client-Secret"], - 'X-Nintendo-Title-ID': '000500301001610A', - 'authorization': `Bearer ${auth}`, - } - }, function (error, response, body) { - if (!error && response.statusCode === 200) { - parseString(body, async function (err, result) { - token = result.service_token.token[0]; - console.log(req.hostname); - let cookieDomain = (req.hostname === 'juxt.miiverse.cc') ? '.miiverse.cc' : '.pretendo.cc'; - res.cookie('access_token', token, { domain : cookieDomain }); - res.redirect('/activity-feed'); - }); - } - else - { - console.log(error); - } - }); - }); - } - else { - res.statusCode = 403; - let response = { - error_code: 403, - message: 'Invalid account ID or password' - }; - return res.send(response); + const login = await util.data.login(username, password).catch((e) => { + console.log(e.details); + switch (e.details) { + case 'INVALID_ARGUMENT: User not found': + res.render(req.directory + '/login.ejs', {toast: 'Username was invalid.', cdnURL: config.CDN_domain,}); + break; + case 'INVALID_ARGUMENT: Password is incorrect': + res.render(req.directory + '/login.ejs', {toast: 'Password was incorrect.', cdnURL: config.CDN_domain,}); + break; + default: + res.render(req.directory + '/login.ejs', {toast: 'Invalid username or password.', cdnURL: config.CDN_domain,}); + break; } }); + if(!login) return; + + const PNID = await util.data.getUserDataFromToken(login.accessToken); + if(!PNID) + return res.render(req.directory + '/login.ejs', {toast: 'Invalid username or password.', cdnURL: config.CDN_domain,}); + + const pid = PNID.pid; + + let discovery = await database.getEndPoint(PNID.serverAccessLevel); + let message = ''; + switch (discovery.status) { + case 3: + message = "Juxt is currently undergoing maintenance. Please try again later."; + break; + case 4: + message = "Juxt is currently closed. Thank you for your interest."; + break; + default: + message = "Juxt is currently unavailable. Please try again later."; + break; + } + if(discovery.status !== 0) { + return res.render(req.directory + '/error.ejs', { + code: 504, + message: message, + cdnURL: config.CDN_domain, + lang: req.lang, + pid: pid, + moderator: req.moderator + }); + } + let cookieDomain = (req.hostname.indexOf('miiverse') !== -1) ? '.miiverse.cc' : '.pretendo.network'; + let expiration = (req.hostname.indexOf('miiverse') !== -1) ? login.expiresIn * 60 * 60 * 24 : login.expiresIn * 60 * 60 + res.cookie('access_token', login.accessToken, { domain : cookieDomain, maxAge: expiration }); + res.cookie('refresh_token', login.refreshToken, { domain : cookieDomain }); + res.redirect('/'); }); diff --git a/src/services/juxt-web/routes/web/pwa.js b/src/services/juxt-web/routes/web/pwa.js index 8a0e2c4..6756caf 100644 --- a/src/services/juxt-web/routes/web/pwa.js +++ b/src/services/juxt-web/routes/web/pwa.js @@ -1,6 +1,6 @@ -var express = require('express'); +const express = require('express'); const path = require("path"); -var router = express.Router(); +const router = express.Router(); router.get('/icons/:filename', function (req, res) { res.set("Content-Type", "image/png"); diff --git a/src/services/juxt-web/routes/web/robots.js b/src/services/juxt-web/routes/web/robots.js index ac4681d..c016aa5 100644 --- a/src/services/juxt-web/routes/web/robots.js +++ b/src/services/juxt-web/routes/web/robots.js @@ -1,6 +1,6 @@ -var express = require('express'); +const express = require('express'); const path = require("path"); -var router = express.Router(); +const router = express.Router(); router.get('/', function (req, res) { res.set("Content-Type", "text/css"); diff --git a/src/translations/en.json b/src/translations/en.json index 687a1ed..37db11d 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -77,14 +77,14 @@ "swearing": "Post cannot contain explicit language." }, "messages": { - "coming_soon": "Messages isn't ready yet. Check back soon!" + "coming_soon": "No Messages" }, "setup": { "welcome": "Welcome to Juxtaposition!", "welcome_text": "Juxt is a gaming community that connects people from all over the world using Mii characters. Use Juxt to share your gaming experiences and meet people from around the world.", "beta": "Beta Disclaimer", "beta_text": { - "first": "You are about to try out the first public beta of Juxt. This means that a lot is still up in the air, and a lot can change at any time.", + "first": "Welcome to the Pretendo Network Public Beta! While a lot has changed from the first public beta, Juxt is still a work in progress and a lot can change at any time.", "second": "This can and may include a total wipe of the database at the conclusion or during the beta period.", "third": "The website, its software and all content found on it are provided on an “as is” and “as available” basis. The Pretendo Network does not give any warranties, whether express or implied, as to the suitability or usability of the website, its software or any of its content." }, diff --git a/src/util.js b/src/util.js index bd5d78b..b1e31f7 100644 --- a/src/util.js +++ b/src/util.js @@ -3,43 +3,70 @@ const NodeRSA = require('node-rsa'); const fs = require('fs-extra'); const database = require('./database'); const logger = require('./logger'); +const grpc = require('nice-grpc'); const config = require('../config.json'); -const { USER } = require('./models/user'); +const { SETTINGS } = require('./models/settings'); +const { CONTENT } = require('./models/content'); +const { NOTIFICATION } = require('./models/notifications'); +const { COMMUNITY } = require('./models/communities'); +const { AccountDefinition } = require('pretendo-grpc/dist/account/account_service'); +const { FriendsDefinition } = require('pretendo-grpc/dist/friends/friends_service'); +const { APIDefinition } = require('pretendo-grpc/dist/api/api_service'); const translations = require('./translations') -var HashMap = require('hashmap'); -let TGA = require('tga'); -let pako = require('pako'); -let PNG = require('pngjs').PNG; -var bmp = require("bmp-js"); +const HashMap = require('hashmap'); +const TGA = require('tga'); +const pako = require('pako'); +const PNG = require('pngjs').PNG; +const bmp = require("bmp-js"); +const aws = require('aws-sdk'); +const crc32 = require('crc/crc32'); let communityMap = new HashMap(); let userMap = new HashMap(); +const { ip: friendsIP, port: friendsPort, api_key: friendsKey } = config.grpc.friends; +const friendsChannel = grpc.createChannel(`${friendsIP}:${friendsPort}`); +const friendsClient = grpc.createClient(FriendsDefinition, friendsChannel); + +const { ip: apiIP, port: apiPort, api_key: apiKey } = config.grpc.account; +const apiChannel = grpc.createChannel(`${apiIP}:${apiPort}`); +const apiClient = grpc.createClient(APIDefinition, apiChannel); + +const accountChannel = grpc.createChannel(`${apiIP}:${apiPort}`); +const accountClient = grpc.createClient(AccountDefinition, accountChannel); + +const spacesEndpoint = new aws.Endpoint('nyc3.digitaloceanspaces.com'); +const s3 = new aws.S3({ + endpoint: spacesEndpoint, + accessKeyId: config.aws.spaces.key, + secretAccessKey: config.aws.spaces.secret +}); + nameCache(); function nameCache() { database.connect().then(async e => { - let communities = await database.getCommunities(); + let communities = await COMMUNITY.find(); if(communities !== null) { for(let i = 0; i < communities.length; i++ ) { if(communities[i].title_id !== null) { for(let j = 0; j < communities[i].title_id.length; j++) { communityMap.set(communities[i].title_id[j], communities[i].name); - communityMap.set(communities[i].title_id[j] + '-id', communities[i].community_id); + communityMap.set(communities[i].title_id[j] + '-id', communities[i].olive_community_id); } - communityMap.set(communities[i].community_id, communities[i].name); + communityMap.set(communities[i].olive_community_id, communities[i].name); } } + logger.success('Created community index of ' + communities.length + ' communities'); } - logger.success('Created community index') - let users = await database.getUsers(1000); + let users = await database.getUsersSettings(-1); if(users !== null) { for(let i = 0; i < users.length; i++ ) { if(users[i].pid !== null) { - userMap.set(users[i].pid.toString(), users[i].user_id); + userMap.set(users[i].pid, users[i].screen_name.replace(/[\u{0080}-\u{FFFF}]/gu,"")); } } + logger.success('Created user index of ' + users.length + ' users') } - logger.success('Created user index of ' + users.length + ' user(s)') }).catch(error => { logger.error(error); @@ -47,25 +74,26 @@ function nameCache() { } let methods = { - create_user: async function(pid, experience, notifications, region) { - const pnid = await database.getPNID(pid); + create_user: async function(pid, experience, notifications) { + const pnid = await this.getUserDataFromPid(pid); if(!pnid) return; - const newUsr = { + let newSettings = { pid: pid, - created_at: new Date(), - user_id: pnid.mii.name, - pnid: pnid.username, - birthday: new Date(pnid.birthdate), - account_status: 0, - mii: pnid.mii.data, + screen_name: pnid.mii.name, game_skill: experience, - notifications: notifications, - official: pnid.access_level === 3, - country: region, - }; - const newUsrObj = new USER(newUsr); - await newUsrObj.save(); + receive_notifications: notifications, + } + let newContent = { + pid: pid + } + const newSettingsObj = new SETTINGS(newSettings); + await newSettingsObj.save(); + + const newContentObj = new CONTENT(newContent); + await newContentObj.save(); + + this.setName(pid, pnid.mii.name); }, decodeParamPack: function (paramPack) { /* Decode base64 */ @@ -79,80 +107,54 @@ let methods = { } return out; }, - processServiceToken: function(token) { + processServiceToken: function(encryptedToken) { try { - let B64token = Buffer.from(token, 'base64'); + let B64token = Buffer.from(encryptedToken, 'base64'); let decryptedToken = this.decryptToken(B64token); - return decryptedToken.readUInt32LE(0x2); + const token = this.unpackToken(decryptedToken); + return token.pid; } catch(e) { - //console.log(e) + console.log(e) return null; } }, decryptToken: function(token) { - // Access and refresh tokens use a different format since they must be much smaller - // Assume a small length means access or refresh token - if (token.length <= 32) { - const cryptoPath = `${__dirname}/../certs/access`; - const aesKey = Buffer.from(fs.readFileSync(`${cryptoPath}/aes.key`, { encoding: 'utf8' }), 'hex'); - - const iv = Buffer.alloc(16); - - const decipher = crypto.createDecipheriv('aes-128-cbc', aesKey, iv); - - let decryptedBody = decipher.update(token); - decryptedBody = Buffer.concat([decryptedBody, decipher.final()]); - - return decryptedBody; + if (!config.aes_key) { + throw new Error('Service token AES key not found. Set config.aes_key'); } - const cryptoPath = `${__dirname}/certs/access`; + const iv = Buffer.alloc(16); + const key = Buffer.from(config.aes_key, 'hex'); - const cryptoOptions = { - private_key: fs.readFileSync(`${cryptoPath}/private.pem`), - hmac_secret: config.account_server_secret - }; + const expectedChecksum = token.readUint32BE(); + const encryptedBody = token.subarray(4); - const privateKey = new NodeRSA(cryptoOptions.private_key, 'pkcs1-private-pem', { - environment: 'browser', - encryptionScheme: { - 'hash': 'sha256', - } - }); + const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv); - const cryptoConfig = token.subarray(0, 0x82); - const signature = token.subarray(0x82, 0x96); - const encryptedBody = token.subarray(0x96); - - const encryptedAESKey = cryptoConfig.subarray(0, 128); - const point1 = cryptoConfig.readInt8(0x80); - const point2 = cryptoConfig.readInt8(0x81); - - const iv = Buffer.concat([ - Buffer.from(encryptedAESKey.subarray(point1, point1 + 8)), - Buffer.from(encryptedAESKey.subarray(point2, point2 + 8)) + const decrypted = Buffer.concat([ + decipher.update(encryptedBody), + decipher.final() ]); - const decryptedAESKey = privateKey.decrypt(encryptedAESKey); - - const decipher = crypto.createDecipheriv('aes-128-cbc', decryptedAESKey, iv); - - let decryptedBody = decipher.update(encryptedBody); - decryptedBody = Buffer.concat([decryptedBody, decipher.final()]); - - const hmac = crypto.createHmac('sha1', cryptoOptions.hmac_secret).update(decryptedBody); - const calculatedSignature = hmac.digest(); - - if (Buffer.compare(calculatedSignature, signature) !== 0) { - console.log('Token signature did not match'); - return null; + if (expectedChecksum !== crc32(decrypted)) { + throw new Error('Checksum did not match. Failed decrypt. Are you using the right key?'); } - return decryptedBody; + return decrypted; + }, + unpackToken: function(token) { + return { + system_type: token.readUInt8(0x0), + token_type: token.readUInt8(0x1), + pid: token.readUInt32LE(0x2), + expire_time: token.readBigUInt64LE(0x6), + title_id: token.readBigUInt64LE(0xE), + access_level: token.readInt8(0x16) + }; }, processPainting: async function (painting, isTGA) { if (isTGA) { @@ -163,14 +165,21 @@ let methods = { } catch (err) { console.error(err); } - let tga = new TGA(Buffer.from(output)); + let tga; + try { + tga = new TGA(Buffer.from(output)); + } + catch (e) { + console.log(e) + return null; + } let png = new PNG({ width: tga.width, height: tga.height }); png.data = tga.pixels; - let pngBuffer = PNG.sync.write(png); - return `data:image/png;base64,${pngBuffer.toString('base64')}`; + return PNG.sync.write(png); + //return `data:image/png;base64,${pngBuffer.toString('base64')}`; } else { let paintingBuffer = Buffer.from(painting, 'base64'); @@ -178,15 +187,12 @@ let methods = { const tga = this.createBMPTgaBuffer(bitmap.width, bitmap.height, bitmap.data, false); let output; - try - { + try { output = pako.deflate(tga, {level: 6}); } - catch (err) - { + catch (err) { console.error(err); } - return new Buffer(output).toString('base64') } }, @@ -210,6 +216,12 @@ let methods = { refreshCache: function () { nameCache(); }, + setName: function (pid, name) { + if(!pid || !name) + return; + userMap.delete(pid); + userMap.set(pid, name); + }, resizeImage: function (file, width, height) { sharp(file) .resize({ height: height, width: width }) @@ -247,10 +259,9 @@ let methods = { return buffer; }, - processLanguage: function (header) { - if(!header) + processLanguage: function (paramPackData) { + if(!paramPackData) return translations.EN; - let paramPackData = this.decodeParamPack(header); switch (paramPackData.language_id) { case '0': return translations.JA @@ -279,6 +290,142 @@ let methods = { default: return translations.EN } + }, + uploadCDNAsset: async function(bucket, key, data, acl) { + const awsPutParams = { + Body: data, + Key: key, + Bucket: bucket, + ACL: acl + }; + + await s3.putObject(awsPutParams).promise(); + }, + newNotification: async function(notification) { + const now = new Date(); + if(notification.type === 'follow') { + // { pid: userToFollowContent.pid, type: "follow", objectID: req.pid, link: `/users/${req.pid}` } + let existingNotification = await NOTIFICATION.findOne({ pid: notification.pid, objectID: notification.objectID }) + if(existingNotification) { + existingNotification.lastUpdated = now; + existingNotification.read = false; + return await existingNotification.save(); + } + const last10min = new Date(now.getTime() - 10 * 60 * 1000); + existingNotification = await NOTIFICATION.findOne({ pid: notification.pid, type: 'follow', lastUpdated: { $gte: last10min } }); + if(existingNotification) { + existingNotification.users.push({ + user: notification.objectID, + timeStamp: now + }); + existingNotification.lastUpdated = now; + existingNotification.link = notification.link; + existingNotification.objectID = notification.objectID; + existingNotification.read = false; + return await existingNotification.save(); + } + else { + let newNotification = new NOTIFICATION({ + pid: notification.pid, + type: notification.type, + users: [{ + user: notification.objectID, + timestamp: now + }], + link: notification.link, + objectID: notification.objectID, + read: false, + lastUpdated: now + }); + await newNotification.save(); + } + } + /*else if(notification.type === 'yeah') { + // { pid: userToFollowContent.pid, type: "follow", objectID: req.pid, link: `/users/${req.pid}` } + let existingNotification = await NOTIFICATION.findOne({ pid: notification.pid, objectID: notification.objectID }) + if(existingNotification) { + existingNotification.lastUpdated = new Date(); + return await existingNotification.save(); + } + existingNotification = await NOTIFICATION.findOne({ pid: notification.pid, type: 'yeah' }); + if(existingNotification) { + existingNotification.users.push({ + user: notification.objectID, + timeStamp: new Date() + }); + existingNotification.lastUpdated = new Date(); + existingNotification.link = notification.link; + existingNotification.objectID = notification.objectID; + return await existingNotification.save(); + } + else { + let newNotification = new NOTIFICATION({ + pid: notification.pid, + type: notification.type, + users: [{ + user: notification.objectID, + timestamp: new Date() + }], + link: notification.link, + objectID: notification.objectID, + read: false, + lastUpdated: new Date() + }); + await newNotification.save(); + } + }*/ + }, + getFriends: async function(pid) { + const pids = await friendsClient.getUserFriendPIDs({ + pid: pid + }, { + metadata: grpc.Metadata({ + 'X-API-Key': friendsKey + }) + }); + return pids.pids; + }, + getFriendRequests: async function(pid) { + const requests = await friendsClient.getUserFriendRequestsIncoming({ + pid: pid + }, { + metadata: grpc.Metadata({ + 'X-API-Key': friendsKey + }) + }); + return requests.friendRequests; + }, + login: async function(username, password) { + return await apiClient.login({ + username: username, + password: password, + grantType: 'password' + }, { + metadata: grpc.Metadata({ + 'X-API-Key': apiKey + }) + }); + }, + getUserDataFromToken: async function(token) { + return apiClient.getUserData({}, { + metadata: grpc.Metadata({ + 'X-API-Key': apiKey, + 'X-Token': token + }) + }); + }, + getUserDataFromPid: async function(pid) { + return accountClient.getUserData({ + pid: pid + }, { + metadata: grpc.Metadata({ + 'X-API-Key': apiKey + }) + }); + }, + getPid: async function(token) { + const user = await this.getUserDataFromToken(token); + return user.pid; } }; exports.data = methods; diff --git a/src/webfiles/admin/admin_announcements.ejs b/src/webfiles/admin/admin_announcements.ejs deleted file mode 100644 index 8f6a4f9..0000000 --- a/src/webfiles/admin/admin_announcements.ejs +++ /dev/null @@ -1,164 +0,0 @@ - - - - - Juxt Admin Panel - - - - -

Juxt Admin Panel - <%= user.user_id %>

- -
- - -
-

<%= community.name %>

-
- - - - - - - -
- - -

<%= community.description %>

-
- - -
- - - - - - - - -
-
-

Followers

-

<%= community.followers %>

-
-
-
-

Posts

-

<%=totalNumPosts%>

-
-
-
-

Tags

-

N/A

-
-
-
-
- <% newPosts.forEach(function(post) { %> -
- -
- <% if(post.body !== '' && post.painting === '' && post.screenshot === '' && !post.url) { %> -

<%= post.body %>

- <%} else { %> - <% if(post.screenshot !== '') { %> - - <%}%> - <% if(post.painting !== '') { %> - - <%}%> - <% if(post.url) { %> - - <%}%> - <% if(post.body) { %> -
-

<%= post.body %>

-
- <%}%> - <%}%> -
-
- <% }); %> -
-
-
- - - diff --git a/src/webfiles/admin/admin_audit.ejs b/src/webfiles/admin/admin_audit.ejs deleted file mode 100644 index a17a369..0000000 --- a/src/webfiles/admin/admin_audit.ejs +++ /dev/null @@ -1,30 +0,0 @@ - - - - - Juxt Admin Panel - - - - -

Juxt Admin Panel - <%= user.user_id %>

- -
- - -
-

Audit Log

-
-
- - - diff --git a/src/webfiles/admin/admin_communities.ejs b/src/webfiles/admin/admin_communities.ejs deleted file mode 100644 index 85f59cb..0000000 --- a/src/webfiles/admin/admin_communities.ejs +++ /dev/null @@ -1,139 +0,0 @@ - - - - - Juxt Admin Panel - - - - - -

Juxt Admin Panel - <%= user.user_id %>

- -
- - -
-

Communities

- - - - - - - - - - - - - <% for(var i = 0; i < communities.length; i++) { %> - - - - - - - - <%}%> - -
IconNameCreated AtTitle ID'sFollowers
<%= communities[i].name %><%= moment(communities[i].created_at).fromNow() %><%= communities[i].title_ids %><%= communities[i].followers %>
-
-
- - - diff --git a/src/webfiles/admin/admin_community.ejs b/src/webfiles/admin/admin_community.ejs deleted file mode 100644 index 537e400..0000000 --- a/src/webfiles/admin/admin_community.ejs +++ /dev/null @@ -1,164 +0,0 @@ - - - - - Juxt Admin Panel - - - - -

Juxt Admin Panel - <%= user.user_id %>

- -
- - -
-

<%= community.name %>

-
- - - - - - - -
- - -

<%= community.description %>

-
- - -
- - - - - - - - -
-
-

Followers

-

<%= community.followers %>

-
-
-
-

Posts

-

<%=totalNumPosts%>

-
-
-
-

Tags

-

N/A

-
-
-
-
- <% newPosts.forEach(function(post) { %> -
- -
- <% if(post.body !== '' && post.painting === '' && post.screenshot === '' && !post.url) { %> -

<%= post.body %>

- <%} else { %> - <% if(post.screenshot !== '') { %> - - <%}%> - <% if(post.painting !== '') { %> - - <%}%> - <% if(post.url) { %> - - <%}%> - <% if(post.body) { %> -
-

<%= post.body %>

-
- <%}%> - <%}%> -
-
- <% }); %> -
-
-
- - - diff --git a/src/webfiles/admin/admin_discovery.ejs b/src/webfiles/admin/admin_discovery.ejs deleted file mode 100644 index ef58871..0000000 --- a/src/webfiles/admin/admin_discovery.ejs +++ /dev/null @@ -1,47 +0,0 @@ - - - - - Juxt Admin Panel - - - - -

Juxt Admin Panel - <%= user.user_id %>

- -
- - -
-

Discovery Server Status

-
- - -
-
- -
-
-
- - - diff --git a/src/webfiles/admin/admin_edit_community.ejs b/src/webfiles/admin/admin_edit_community.ejs deleted file mode 100644 index 7b612ea..0000000 --- a/src/webfiles/admin/admin_edit_community.ejs +++ /dev/null @@ -1,185 +0,0 @@ - - - - - Edit - <%= community.name %> - - - - -

Juxt Admin Panel - <%= user.user_id %>

- -
- - -
-

Update <%=community.name%>

-
-
- -
-
- - -
- -
- - -
- -
-
- - -
- -
- - -
- -
- - -
- -
- - -
-
-
-
- -
- -
-
-
- Browser Icon (128px x 128px) - -
-
- -
-
- -
- -
-
- 3DS Browser Banner (400px x 220px) - -
-
- -
-
- -
- -
- Wii U Browser Banner (1498px x 328px) - - -
- -
- -
- Is Recommended? - checked <%}%>> - - checked <%}%>> - -
- -
- Has Shop Page? - checked <%}%>> - - checked <%}%>> - -
- -
- Platform - checked <%}%>> - - checked <%}%>> - - checked <%}%>> - -
- -
- Type - checked <%}%>> - - checked <%}%>> - - checked <%}%>> - -
- -
- - -
-
-
- -
- -
-
- - -
- -
-
-
-
-
- - - - diff --git a/src/webfiles/admin/admin_edit_sub_community.ejs b/src/webfiles/admin/admin_edit_sub_community.ejs deleted file mode 100644 index 65ecb1c..0000000 --- a/src/webfiles/admin/admin_edit_sub_community.ejs +++ /dev/null @@ -1,185 +0,0 @@ - - - - - Edit - <%= community.name %> - - - - -

Juxt Admin Panel - <%= user.user_id %>

- -
- - -
-

New <%=community.name%> Sub-Community

-
-
- -
-
- - -
- -
- - -
- -
-
- - -
- -
- - -
- -
- - -
- -
- - -
-
-
-
- -
- -
-
-
- Browser Icon (128px x 128px) - -
-
- -
-
- -
- -
-
- 3DS Browser Banner (400px x 220px) - -
-
- -
-
- -
- -
- Wii U Browser Banner (1498px x 328px) - - -
- -
- -
- Is Recommended? - checked <%}%>> - - checked <%}%>> - -
- -
- Has Shop Page? - checked <%}%>> - - checked <%}%>> - -
- -
- Platform - checked <%}%>> - - checked <%}%>> - - checked <%}%>> - -
- -
- Type - - - - - - -
- -
- - -
-
-
- -
- -
-
- - -
- -
-
-
-
-
- - - - diff --git a/src/webfiles/admin/admin_edit_user.ejs b/src/webfiles/admin/admin_edit_user.ejs deleted file mode 100644 index 18b9dba..0000000 --- a/src/webfiles/admin/admin_edit_user.ejs +++ /dev/null @@ -1,71 +0,0 @@ - - - - - Edit - <%= user.user_id %> - - - - -

Juxt Admin Panel - <%= parentUser.user_id %>

- -
- - -
-

Update <%= user.user_id %>

-
-
- -
-
- Account Status - checked <%}%>> - - checked <%}%>> - - checked <%}%>> - - checked <%}%>> - -
- - - - -
- - -
- -
-
- -
- -
-
- -
- -
-
-
-
-
- - diff --git a/src/webfiles/admin/admin_home.ejs b/src/webfiles/admin/admin_home.ejs deleted file mode 100644 index 91c2c88..0000000 --- a/src/webfiles/admin/admin_home.ejs +++ /dev/null @@ -1,32 +0,0 @@ - - - - - Juxt Admin Panel - - - - -

Juxt Admin Panel - <%= user.user_id %>

- -
- - -
-

Home

-

This is a temporary admin panel for Juxt that will likely be used throughout the beta, or at least until the main Pretendo Network Admin Panel is done lol.

-

If you can see this and your not a developer. Please tell Jemma how on earth you pulled it off, cause we kinda need this website to be secure :p

-
-
- - - diff --git a/src/webfiles/admin/admin_login.ejs b/src/webfiles/admin/admin_login.ejs deleted file mode 100644 index 25f7e05..0000000 --- a/src/webfiles/admin/admin_login.ejs +++ /dev/null @@ -1,105 +0,0 @@ - - - - - Juxt Admin Login - - - - - - - - - diff --git a/src/webfiles/admin/admin_new_community.ejs b/src/webfiles/admin/admin_new_community.ejs deleted file mode 100644 index 764e1dc..0000000 --- a/src/webfiles/admin/admin_new_community.ejs +++ /dev/null @@ -1,158 +0,0 @@ - - - - - Juxt Admin Panel - - - - -

Juxt Admin Panel - <%= user.user_id %>

- -
- - -
-

New Community

-
-
- -
-
- - -
- -
- - -
- -
-
- - -
- -
- - -
- -
- - -
- -
- - -
-
-
-
- -
- -
-
-
- Browser Icon (512px x 512px) - -
-
- -
- -
-
- 3DS Browser Banner - -
-
- -
- -
- Wii U Browser Banner (1498px x 328px) - -
- -
- -
- Is Recommended? - - - - -
- -
- Has Shop Page? - - - - -
- -
- Platform - - - - - - -
- -
- Type - - - checked<%}%>> - - - -
- -
- - -
-
-
- -
- -
-
- -
- -
-
-
-
-
- - - diff --git a/src/webfiles/admin/admin_new_post.ejs b/src/webfiles/admin/admin_new_post.ejs deleted file mode 100644 index fa74b29..0000000 --- a/src/webfiles/admin/admin_new_post.ejs +++ /dev/null @@ -1,135 +0,0 @@ - - - - - Edit - <%= community.name %> - - - - -

Juxt Admin Panel - <%= user.user_id %>

- -
- - -
-

New Announcement

-
- - - - - - - - - -
- - - - -
- - - - - - -
- - - - - - -
-
-
- -
-
- -
-
- -
- -
-
- -
-
- - - diff --git a/src/webfiles/admin/admin_sub_communities.ejs b/src/webfiles/admin/admin_sub_communities.ejs deleted file mode 100644 index 69d16a6..0000000 --- a/src/webfiles/admin/admin_sub_communities.ejs +++ /dev/null @@ -1,139 +0,0 @@ - - - - - Juxt Admin Panel - - - - - -

Juxt Admin Panel - <%= user.user_id %>

- -
- - -
-

Communities

- - - - - - - - - - - - - <% for(var i = 0; i < communities.length; i++) { %> - - - - - - - - <%}%> - -
IconNameCreated AtTitle ID'sFollowers
<%= communities[i].name %><%= moment(communities[i].created_at).fromNow() %><%= communities[i].title_ids %><%= communities[i].followers %>
-
-
- - - diff --git a/src/webfiles/admin/admin_user.ejs b/src/webfiles/admin/admin_user.ejs deleted file mode 100644 index 9a70126..0000000 --- a/src/webfiles/admin/admin_user.ejs +++ /dev/null @@ -1,168 +0,0 @@ - - - - - Juxt Admin Panel - - - - -

Juxt Admin Panel - <%= parentUser.user_id %>

- -
- - -
-
- -

<%= user.user_id %>

-

<%= user.profile_comment %>

- -
- - - - - - - - -
-
-

Country

-

<%=user.country%>

-
-
-
-

Birthday

-

N/A

-
-
-
-

Game experience

-

- <%if(user.game_skill === 0) {%> - Beginner - <%} else if(user.game_skill === 1) {%> - Intermediate - <%} else if(user.game_skill === 2) {%> - Expert - <%} else {%> - N/A - <%}%> -

-
-
-
-
- <% if(numPosts === 0) {%> -

No Posts

- <%} else { %> - <% newPosts.forEach(function(post) { %> -
- -
- <% if(post.body !== '' && post.painting === '' && post.screenshot === '' && !post.url) { %> -

<%= post.body %>

- <%} else { %> - <% if(post.screenshot !== '') { %> - - <%}%> - <% if(post.painting !== '') { %> - - <%}%> - <% if(post.url) { %> - - <%}%> - <% if(post.body) { %> -
-

<%= post.body %>

-
- <%}%> - <%}%> -
-
- <% }); %> - - <%}%> -
-
-
- - - diff --git a/src/webfiles/admin/admin_users.ejs b/src/webfiles/admin/admin_users.ejs deleted file mode 100644 index 0e15856..0000000 --- a/src/webfiles/admin/admin_users.ejs +++ /dev/null @@ -1,127 +0,0 @@ - - - - - Juxt Admin Panel - - - - - -

Juxt Admin Panel - <%= user.user_id %>

- -
- - -
-

Communities

- - - - - - - - - - - <% for(var i = 0; i < users.length; i++) { %> - - - - - - - - <%}%> - -
IconNameCreated AtAccount StatusFollowers
<%= users[i].user_id %> (<%= users[i].pnid %>)<%= moment(users[i].created_at).fromNow() %><%= users[i].account_status %><%= users[i].followers %>
-
-
- - - - diff --git a/src/webfiles/admin/css/juxt.css b/src/webfiles/admin/css/juxt.css deleted file mode 100644 index ddf763c..0000000 --- a/src/webfiles/admin/css/juxt.css +++ /dev/null @@ -1,785 +0,0 @@ - -/* Themes */ -:root { - - --pretendo: #673db6; - - --body: #eee; - --content: white; - - --text: #191919; - --text-secondary: #4c4c4c; - - --hover: #eee; - --shadow: rgba(0, 0, 0, 0.15); - --border: #d3d3d3; - --input-bg: #f5f5f5; -} - -@media (prefers-color-scheme: dark) { - :root { - --body: #1f1f1f; - --content: #1b1b1b; - - --text: white; - --text-secondary: #8f8e8e; - - --hover: rgba(255, 255, 255, 0.1); - --shadow: rgba(255, 255, 255, 0.05); - --border: rgba(255, 255, 255, 0.1); - --input-bg: #191919; - } -} - -/* Basic styles */ -body { - font-family: Arial, Helvetica, sans-serif; - background: var(--body); - color: var(--text); - margin: 0; - border-top: 5px solid var(--pretendo); -} - -* { - box-sizing: border-box; -} - -/* Create a column layout with Flexbox */ -.row { - display: grid; - grid-template-columns: 350px 1fr; - grid-gap: 20px; - max-width: 1300px; - width: calc(100% - 40px); - margin: 30px auto; -} -.row > .left { - display: inline-table; - position: sticky; -} -.row > .left, .row > .right { - background: var(--content) !important; - width: 100%; - max-width: 100% !important; - border-radius: 6px; - box-shadow: 0 3px 5px var(--shadow); - padding: 20px; -} - -/* Form styles */ -.form-section { - display: grid; - grid-template-columns: 1fr 2fr; - grid-gap: 20px; - padding: 30px 0; -} -.form-section + .form-section { - border-top: 1px solid var(--border); -} -.section-inputs { - display: grid; - grid-template-columns: 100%; - grid-gap: 10px; -} -.section-inputs .input-grid { - display: grid; - grid-template-columns: 1fr 1fr; - grid-gap: 10px; -} -.form-section .section-inputs img { - max-width: 100%; - border-radius: 4px; -} -.form-section .section-inputs input, .form-section .section-inputs textarea { - background: var(--input-bg); -} -.form-section .section-inputs textarea { - min-height: 80px; - height: 100px; - resize: vertical; - max-height: 300px; -} -.form-section .section-inputs .do-input-cols { - display: grid; - grid-template-columns: 1fr 200px; - grid-gap: 10px; - align-items: center; -} -.form-section .section-inputs hr { - border: 0; - margin: 30px; - width: calc(100% - 60px); - height: 1px; - background: var(--border) -} - -/* Buttons */ -.btn { - padding: 8px 16px; - display: inline-block; - border-radius: 6px; - font-size: 1rem; - text-transform: uppercase; - background: var(--pretendo); - border: 0; - font-weight: bold; -} - -/* Style the search box */ -#mySearch { - width: 100%; - font-size: 18px; - padding: 11px; - border: 1px solid #ddd; -} - -/* Style the navigation menu inside the left column */ -#myMenu { - list-style-type: none; - padding: 0; - margin: 0; -} -#myMenu li a { - display: block; - color: var(--text); - text-decoration: none; - padding: 10px; - margin: 0 -10px; - border-radius: 6px; -} - -#myMenu li a:hover { - background-color: var(--hover); -} - -/* Style inputs */ -[type="text"] { - font-family: Arial; - width: 100%; - box-sizing: border-box; - padding: 8px; - font-size: 1rem; - border: 1px solid var(--border); - border-radius: 4px; - appearance: none; - -webkit-appearance: none; - background: transparent; - color: var(--text); -} - -/* Full-width input fields */ -.modal input[type=text], .modal input[type=password] { - width: 100%; - padding: 12px 20px; - margin: 8px 0; - display: inline-block; - border: 1px solid #ccc; - box-sizing: border-box; - user-select: none; -} - -/* Set a style for all buttons */ -button { - background-color: #4CAF50; - color: white; - padding: 14px 20px; - margin: 8px 0; - border: none; - cursor: pointer; - width: 100%; - user-select: none; -} - -button:hover { - opacity: 0.8; -} - -.container { - padding: 16px; -} - -/* The Modal (background) */ -.modal { - display: block; /* Hidden by default */ - position: fixed; /* Stay in place */ - z-index: 1; /* Sit on top */ - left: 0; - top: 0; - width: 100%; /* Full width */ - height: 100%; /* Full height */ - overflow: auto; /* Enable scroll if needed */ - background-color: rgb(0,0,0); /* Fallback color */ - background-color: rgba(0,0,0,0.4); /* Black w/ opacity */ - padding-top: 60px; - background-image: url("data:image/png;base64,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BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQiBAAtAtKKbBlZHMcsGzf2LqteyG8Rna16YSrTUu5P/q9qXoyHMO1nbsW/mv7jze3RDOd6PelMH8CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQFcFBAC7yq/4iwncdf+6WLrisGg0G12DaqaTWdBpc9fqK0zg5wUGa4tiqLa4qzCTrdGYam3rag+KEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIOAHQHii5wI1rfhAnnHFMV7tsplPPhADTrvahOIH2qX8DtQVdhdj+/8OmrvagOAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwHYBJwDaCaUXuGTVRXHOBWd2tc9W2pwOAabR7GofiverQBILartEvTbUVYA0bcVYc2P2/0Grq30oToAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsF1AANBOqITA6ed+Ia68/vKu9pqmaUy0tkT7WmAPgaIEksjCf/XdopYMFFXyBeu09387BNuKqa72oTgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMDPBAQA7YZKCLRarTj2tKNi9dpbut7vVGs0JpujWXzWlcBdX4webyCJehb+2zUL/9W7PtOJ5kg00rGu96EBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBnwkIANoNlRGYnJyIT634RNy3/t6u99xMp2KiucVVqF1fid5toJ4Mx3Bt50iSpOuTnGqNxWRrpOt9aIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOD5AgKAdkSlBLaObIlDlx8YT218sut9p2kruxJ1iytRu74SvdZAkgX/FsdAbWEpJtZojWdXX28tRS+aIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeL6AAKAdUTmBx558ND5x3EExOrat672n2S3AU+m2aF8L7CEwX4FaduXvcEmu/G3PpdGayMJ/W+Y7Ld8TIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjkJCAAmBOsYfMVuOv+dbF0xWHRaDbyLTTD0RutyWeCUlki0ENg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gAABAgQIECBQLgEBwHKtRyW7eWzDI/Hx5fsI/1Vy9TRNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBVBQQAq7pyJel74+YNcdBx+8TjWQjQQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLFCQgAFmfdc5W2btsSBx//gWhf/+shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWIFBACL9e6Zau3w3yc/t3/cvX5dz8zJRAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAlAQHAKq1WSXodGx+LT5z4IeG/kqyHNggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6E8BAcD+XPc5z3pyajI++fn94/a718x5DB8SIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwPwFBADnb9g3IzSazfjMFw6OW9Z+v2/mbKIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoq4AAYFlXpmR9tcN/x5+1NL5365Ul60w7BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6E8BAcD+XPdZzbrVasXyM48Q/puVmpcJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQr4AAYL6+PTH65792TFx+/YU9MReTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQK8ICAD2ykrmNI+zLjg1Vn7nnJxGNywBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIzFVAAHCucj3+XZqmceq5x8W3r/1Wj8/U9AgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBNAQHAaq5brl03ms046ezPxNU3X55rHYMTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwNwFBADnbteTX7bDf0ef/om44bbv9eT8TIoAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQK9IiAA2Csr2YF5TDWm4pgvHyb81wFLQxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCBvAQHAvIUrMv74xFgc+cWD47Z1t1SkY20SIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgvwUEAPt7/adnv210JD558sfizvtvp0GAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECFREQAKzIQuXV5qatG+Pwz+0f9z98d14ljEuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECOQgIAOaAWpUhn9z4eCxZsV88+sT6qrSsTwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4RkAAsE+3Qjv8d/BxH4j2bw8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIVE9AALB6azbvjh/JTvw7LDv5T/hv3pQGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQNcEBAC7Rt+dwvc/fHccvmL/2DSysTsNqEqAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECHREQAOwIYzUGWXvPbbH01INidGykGg3rkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgR2KCAA2Ceb47s3fjs+99Wjo9Gc6pMZmyYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgR6W0AAsLfXd3p25152Vpxz8Zf6YKamSIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgf4READs4bVuNKZixdeOjlXZ6X8eAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOgtAQHA3lrPn85mdGwklp56UKy957YenaFpESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoL8FBAB7cP0fe+qR+PSpH4/1j93Xg7MzJQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBoCwgA9tg+uPvBO+JTJx8QW0Y29djMTIcAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnisgANhD++H7a66O48/6dExMjvfQrEyFAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBF5IQACwR/bFP1+zMr503gmRpmmPzMg0CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODFBAQAK74/ms1WnL7yxGgHAD0ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0D8CAoAVXuv2Vb/LvnRo/PAnN1Z4FlonQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbkICADORa0E3zzw8D2x7PQl8egT60vQjRYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoGgBAcCixTtQ7/ofrorjv/LpmJya6MBohiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBKgoIAFZo1RqNqTh95Yq45NpvVqhrrRIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAHgICgHmo5jDmxi0b4jNfPDjuvP8nOYxuSAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBComoAAYAVW7Md3rY5jz/hktEOAHgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0BYQACz5Prho1XlxxjdXRLPVKnmn2iNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBIgUEAIvUnkWt0YnRWHH2srh+9apZfOVVAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOgXAQHAEq70I0+sjyNOPSgezX57CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDACwkIAJZsX1z/w1Wx4pxl0T4B0EOAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBHYkIABYkr3RaEzF6StXxCXXfrMkHWmDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMosIABYgtV57KlH4vizlsYd9/24BN1ogQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqICAA2OVVuvz6C+PLKz8XYxNjXe5EeQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCokoAAYJdWa9voSBz/lU/HTT++rksdKEuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECVRYQAOzC6t227pY44ewjY8OmJ7tQXUkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6AUBAcACV3FyajLOvODkuOSalZGmaYGVlSJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBXhMQACxoRe996M447sylsf6x+wuqqAwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI9LKAAGDOq9s+6e+iVedNn/zXbDZyrmZ4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOgXAQHAHFd6w6Yn44Szj4zb1t2SYxVDEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEA/CggA5rTq195yZZzyjWNj29hIThUMS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQL9LCAA2OHV37h5Q5xy7vK4Yc21HR7ZcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4GcCAoAd2g2tVisuuWZlfPWS02PUqX8dUjUMAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOxIQACwA3vjgYfviZO+uizufnBdB0YzBAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeGkBAcCXNtrhG1ONqTj3srPi/CvOiWazMY+RfEqAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBGYnIAA4O6+fvn373bfFiq8dFY8+sX6OI/iMAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjMXUAAcJZ2W0Y2xZe/dXKsuvHbkabpLL/2OgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6IyAAOAsHK+++Yo47fyToh0C9BAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgW4KCADOQP+Jpx+Lk79+dPzwJzfN4G2vECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB/AUEAF/EuNlsxLeu+kace9lZMT4xlsmrwNgAACAASURBVP9qqECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBGYoIAC4A6g1d9wcp39zRTzwyL0zpPQaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoTkAA8OesH3n8wTj13ONjzbqbi1sFlQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwCwFBACfAdu0dWN87ZLT4zvfvziazeYsGb1OgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSKFej7AODE5Hhc+N3/G9+84qsxOjFarL5qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgjgJ9GwBM0zSuveXKOONbn4+nNz81Rz6fESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB7gj0ZQDwJ/f+KE47/8S4+8F13VFXlQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIzFOgrwKAj214JL5y4RfiuluvmiebzwkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHcF+iIAODK6Nf7vt8+MS675ZjSaU90VV50AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHRAoKcDgNtGR+KiVedO/2wbG+kAlyEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEA5BHoyACj4V47NpQsCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQyE+gpwKAgn/5bRQjEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEC5BHoiACj4V65NpRsCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQyF+g0gFAwb/8N4gKBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBOgUoGAMfGx+KSa1fGyivOiW1jI+WU1RUBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEMhRoFIBwGeDfxdc9Y3YMrIpRxZDEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBcgtUIgD49Oan4p+vPj8uu+7CGBndWm5R3REgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgQIESh0AvPehO+PCq86Na2+9MprNRgEcShAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWoIlC4AmKZp3PTj6+Ki754bP7rrh9VQ1CUBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChYoDQBwKnGVKy66bJYecVX49EnHyqYQTkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAtga4HADdt3Rjf/t634tJrV8bmrZuqpadbAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQJYGuBQAffPTeuDC75vfq7NS/9ul/HgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGDmAoUHAG9de2NctOob8cOf3DjzLr1JgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIPE+gkADg4xsejat+cEl898ZvxxNPP2YJCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgXkK5BYAbGTX+t5w27XxnR/8c6y+46ZI03SerfqcAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeFag4wHABx+9Nwv9XRJX3XBpjGzbQpoAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDIQaAjAcDRsZG45pYr4zvfvzjufvCOHNo0JAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPBcgXkFAG+/e830Fb/X3XpVTE5NkCVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKEph1APC+h+6K63743bj6psvjyY2PF9SmMgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBzBWYUAHw29Pe97KS/x556mCABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQZYEdBgCF/rq8MsoTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEXEXheAPDBR++L67PrfVdl1/s66c++IUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC5RVIzjvlzrQd+mtf7/vQ4w+Ut1OdESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAj8VSF71y3+Q8iBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqJSAAWK310i0BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJgWEAC0EQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQAUFBAAruGhaJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAoD2AAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqKCAAGAFF03LBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAANAeIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECFRQQAKzgommZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgIANoDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgggICgBVcNC0TIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEBQHuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUUEAAsIKLpmUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAAaA8QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEKCggAVnDRtEyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAQA7QECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBBAQHACi6algkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgACgPUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCooIABYwUXTMgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEAC0BwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQAUFBAAruGhaJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAoD2AAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqKBA8qo9/yCtYN9aJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECfS0gANjXy2/yBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBVAQHAqq6cvgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgrwUEAPt6+U2eAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoqIABY1ZXTN4E+EdhpwR6x28J/GQO1wRibGonxxrYYm9wak42xPhEwTQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIvLCAAaGcQIFAagYHaUPzGK/9z/PYv/Vm8YtdfjT12+lc77G3r+NOx9pHvxe0PXR33PXVbaeagEQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJFCQgAFiWtDgECOxT4pZf9ZvzeL//X+Pd7vj6GBxfNWqodBrzxngviurvPj6nmxKy/9wEBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBKgoIAFZx1fRMoEcE9thpz3j9b74jfutfvS6SJJn3rLaMPRVXrj0z1qy/Ipqt5rzHMwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBMgsIAJZ5dfRGoEcFFg/vGn/+6nfGa3/1f0S9Vu/4LJ/auj4uv/20+Mkj13V8bAMSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKIuAAGBZVkIfBPpEYM/sut+3/+cjYtHwLrnOeHxqW1xw63Hx44evzrWOwQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh0S0AAsFvy6hLoQ4Hf2fPP482v/WgM1AYLm/11d58fl//oC9FKW4XVVIgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAEQICgEUoq0GgzwWSSOK/vea98Se//tauSFz+4y/FtXd+oyu1FSVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQl4AAYF6yxiVA4KcCv/crfxFvee3HuibSPv3v7OsPjbsev6lrPShMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoNMCAoCdFjUeAQLPE9jzZa+O9/6X5VGvDXRVZnxqW5zy3Q/EhpGHutqH4gQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQ6JSAA2ClJ4xAg8AsCuyz4F/FPrz8lFg/vWgqd+568LU6/dv9S9KIJAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvMVEACcr6DvCRDYocA7/ujI+LVX/H6phE675qNx/1NrStWTZggQIECAAAECBAgQIECA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3uaqyhEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAJwnkMgC4+yMPxPDh8U6aQ1t7OfmHL8T6zFJbaypGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAp0lkMsA4J6PPRhDB8Y6axJt7Ob0n74cqxfn21hRKQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoNIFcBgB3/tA9se2+vZ02i7b1M/F/vxPVhdW21VOIAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBDpPIJcBwB2PHoqxxw523jTa0VGzGW//zjeiWWu0o5oaBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINChArkMAI4kd//bldwFsBuv+lo1jv/vZ7txa/ZE1mLNvAAAIABJREFUgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAlcI5DIAOHhwLPb+jQe78iCsX1qKk597oSv3ZlMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8NcCuQwA9u4cjgM/9WhXnoPls7Nx9vNHu3JvNkWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECfy2QywBgoVyMu/7BM1EoFbvuLMx891TMPH+i6/ZlQwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDwgwK5DAC2CFqPAG49CrjbrlN/8lKsTS5027bshwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQ2COQ2ADj8gV2x+0fu66oDUV+txvHPPttVe7IZAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIELi6QG4DgKW+Shz+e09FoVDomrMx99q5mPzmW12zHxshQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWsL5DYA2CLZ9zc/FP17tnXN+TjzhaOxcma2a/ZjIwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBwbYFcBwAHD43F3o8+2BXno7qwGhO//1xEs9kV+7EJAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHh/gSQA+FSuE2MHPvV49I4OZv6cnPviq7E0MZ35fdgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNyYQO4DgP17t8W+n/jQjWl16LfWphbj1B+/2KHdaYsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0hDIfQCwhXrHJx6OgTu2p+Gbfs3k/o2n/+zlWL04n/5aViBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBjhEQAExG0bNjMA4mjwKOQsfM5YYbWTozG+e+cPSGv++LBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINAdAgKA35vjjkcPxdhjBzM11fpqNU794QtRW17PVN+aJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHbFxAAvMJwz0ceiKHD47evugkVmvXG5Uf/rk0tbsJqliBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBThMQALxiIoVSMfZ98kPRNz7caXP6wX6aEee+dCyWJqY6u0/dESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBqAgKAG2hLfZXY/1OPRmW4LzX02y08/eKJmH3p1O2W8XsCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQyLCAAOBVhlca6Ik7PvZQ9I4NddRom81mTD9/Ii4dOd1RfWmGAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBDZfQADwGuatxwHv/rH7Y+jQ2OZP5SorNqr1OJ889nf5zGxH9KMJAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIENhaAQHA6/jveORAjD52KAqFwpZNqrq4Gme/cDSqcytb1oOFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCzBAQAb2AefbtGYucz90Tv6OANfLt9X2nWm3Hp2JmYefFkNGv19hVWiQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQyLyAAeKMjTO4AuO3+vTH2+KEo9pRv9Fe3/L2VC/Nx8a/eiOq8u/7dMqIfEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIsFBABvcrilvnKMffiuGL5nVyqPBa4trcXUt9+JxRNTN9mZrxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAngQEAG9x2j3J44CH79wZA/t2RO/Y0C1W+f8/a6zXYvnspVg+PRML70xGs964rXp+TIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLdLyAA2IYZl/orSRBwNAb374iebQNR7KtEeaDnqpWb1XrUVtaTdzVWk8f8Lp+ejtbjfl0ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOBmBAQAb0brJr/bCgaW+nuiWC5FfbUa1fmVm6zg6wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4OoCAoBOBgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQyKCAAGAGh6ZlAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgAOgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBDAoIAGZwaFomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQICgM4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDIoIAAYAaHpmUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAA6AwQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEMCggAZnBoWiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgKAzgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEMiggABgBoemZQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIADoDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgQwKCABmcGhaJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAoDOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQyKCAAGAGh6ZlAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgAOgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBDAoIAGZwaFomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQICgM4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDIoIAAYAaHpmUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAA6AwQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEMCggAZnBoWiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgKAzgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEMiggABgBoemZQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIADoDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgQwKCABmcGhaJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAoDOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQyKCAAGAGh6ZlAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgAOgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBDAoIAGZwaFomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQICgM4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDIoIAAYAaHpmUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAA6AwQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEMCggAZnBoWiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgKAzgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEMiggABgBoemZQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIADoDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgQwKCABmcGhaJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAoDOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQyKCAAGAGh6ZlAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgAOgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBDAoIAGZwaFomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQICgM4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDIoIAAYAaHpmUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAA6AwQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEMCggAZnBoWiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgKAzgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEMiggABgBoemZQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIADoDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgQwKCABmcGhaJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAoDOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQyKCAAGAGh6ZlAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgAOgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBDAoIAGZwaFomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQICgM4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDIoIAAYAaHpmUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAA6AwQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEMCggAZnBoWiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgKAzgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEMiggABgBoemZQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIADoDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgQwKCABmcGhaJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAoDOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQyKCAAGAGh6ZlAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgAOgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBDAoIAGZwaFomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQICgM4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDIoIAAYAaHpmUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAA6AwQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEMCggAZnBoWiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgKAzgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEMiggABgBoemZQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIADoDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgQwKCABmcGhaJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAoDOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQyKCAAGAGh6ZlAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgAOgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBDAoIAGZwaFomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQICgM4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDIoIAAYAaHpmUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAA6AwQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEMCggAZnBoWiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgKAzgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEMiggABgBoemZQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIADoDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgQwKCABmcGhaJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAoDOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQyKBAEgB8spnBvrVMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRyLSAAmOvx2zwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIZFVAADCrk9M3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECORaQAAw1+O3eQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDIqoAAYFYnp28CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQyLWAAGCux2/zBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBVAQHArE5O3wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQawEBwFyP3+YJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIKsCAoBZnZy+CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCDXAgKAuR6/zRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAVgUEALM6OX0TIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQK4FBABzPX6bJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGsCggAZnVy+iZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBXAsIAOZ6/DZPgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAlkVEADM6uT0TYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQK5FhAAzPX4bZ4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEsiogAJjVyembAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBHItIACY6/HbPAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhkVUAAMKuT0zcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5FpAADDX47d5AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEMiqgABgVienbwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDItYAAYK7Hb/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkFUBAcCsTk7fBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBrAQHAXI/f5gkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgqwICgFmdnL4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAINcCAoC5Hr/NEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBWBQQAszo5fRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBArgUEAHM9fpsnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgawKCABmdXL6JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFcCwgA5nr8Nk+AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECWRUQAMzq5PRNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABArkWEADM9fhtngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSyKiAAmNXJ6ZsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEci0gAJjr8ds8AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGRVQAAwq5PTNwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjkWkAAMNfjt3kCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQyKqAAGBWJ6dvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEMi1gABgrsdv8wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQVYFUA4DFQiXKpXKUipUoForRTJQajVo0m/VoNBtRbzSSz2pW7fRNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgS2TOCWA4DFYil6y4PJuz95D0RP8q6UepPAX+Vy4K+cvG/0qjWqsVpdjJXkvV5dvvy5lrxbIUEXAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8F6BGw4A9iRBv5G+nTHcPxq9lcGoFHtS91xam4+ltZlYWJuN5bVLqa9nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBWB9w0A9vcMXw79jQzsjL7kDn9bedWTRwcvJiHA+ZWLyXvS3QG3chjWJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEtF3hPALBUqMT48P4Kp8l5AAAgAElEQVTYPrAneaxv35Y3eLUG6s16zC1fiJmlc7GyPt+RPWqKAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAikKfD9AGDrEb/jQ/tjLHln6VqrLcXU4pm4lIQBG81GllrXKwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQuGWBwl13f6y5c/hQbOsfv+UinfDDamM9phdOx0wSBqw3a53Qkh4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBqAoWPP/NrzdSqb0HhVvivFQKcXDgV9UZ1CzqwJAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSF+g6wKA75K1goAX5o7H9OLp9BWtQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIENlmgawOA7zqurC/E6ZljsVpb2mRayxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgfQEuj4A2KJrNhuXHwl8ceHE5T+7CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gVyEQB8d0gr1YWYmDoa1fpq1uemfwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDIuUCuAoCtWdca1Tg1/Wosrs3kfPS2T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJZFshdALA1rGazGRfmjyePBZ7I8uz0ToAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQI5FshlAPDdeV9aPh+nZo7lePy2ToAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJZFch1ALA1tLmVyeSRwK9EM3m5CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAVgRyHwBsDWpxbTYmpr4bjWYjK3PTJwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjkXEAA8HsHYGltLgkBvhz1Zj3nR8L2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCALAgKAV0xpZX0hjk++KASYhZOrRwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECORcQABwwwFYSh4HfDx5HHDT44Bz/l/D9gkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINDZAgKAV5nP3PJknJw52tmT0x0BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5FpAAPAa45+cPxnn59/O9eGweQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoXIHUA4C1xnpU62tRb9SiVKxEpdQb5eQzC9eZS2/EzOKZLLSqRwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDImUBbAoC1RjUWV2djZX0hqo21qCWBv2p9NdZrq9fk7Cn3JWHAvigngcBKqScGKttiuH80ioVSR43g7ckXY3ntUkf1pBkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIHBLAcBGox7L1flYXJmJhbWZWK0utkWyUCjEUN9YbOvfGcPJZyfcKbBaX483zn8rGs1aW/aoCAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaIfATQUA12pLcX7ueHK3v+kkENdox/rvW2O4dzRGBnbGSP94EgbsSX29ay0wvzIVE9NHtmx9CxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgY0CNxQAXK+txMX5EzG7fH5LBAtRiPHhA7Fr5PCWPSL4zMzrMbN8dkv2b1ECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBR4H0DgK3H304uTMTM0tlobsId/643nkqpN/aPPhBDvTuu99W2/3s9eQTwm+e/HdX6WttrK0iAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBG5W4JoBwMW12Tg5dTRawbdOu0b6d8be7R+IniQQuJnX3PLFODnzymYuaS0CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIHBVgasGACcXTsb5ubc7mqxYqMTh8YdjsHfbpvZ5fPKlaIUjXQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYCsFfiAA2GjW49TMqzG/MrWVPd3w2oVCMfbveCC2D+y64d/c7hfXasvx5oXvdMQjkW93L35PgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAtkVKHz86V9rttpfr6/ExOSRWK0tZW43e7bdFTuHD21a3+fn3onJhYlNW89CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgo8DlAGDrkbYnp45GvVnLrNCOgb2xb/S+KCSvtK/WnRKPnf1GNDLslbaR+gQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQrkDh8Q/+XPPcpTfTXWWTqg/1jsbB8YeiVCinvqK7AKZObAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeB+Bwt79T15+BHC3XCP943Fo7OHUt1NrVOP1c627ADZSX8sCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgo0DXBQBbG9w1cmfsHjmc+rTPzL4RM0tnUl/HAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKNAVwYAW5ts3QWwdTfANK/1+lq8ce6b0UxeLgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsJkCXRsALBZKcc/uD0dveSBVz+NTL8fi6kyqayhOgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQ2CnRtALC10d7KQNy968NRSsKAaV2zS+fj9OyxtMqrS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIErirQ1QHA1o5HB/fFvh33pjb+RrMex87+VTSajdTWUJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGwU6PoAYCEKce/ep6Kn1J/a9CemjsT86lRq9RUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIbBbo+ANja8Lb+XXFw7KHUpj+3fDFOzrySWn2FCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDARoFcBABbm75n9xPRXxlK5QS0HgP86pmvRTN5uQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwGYI5CYAONi7I+7a+Whqpm9dfC5W1hdSq68wAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC4UiA3AcDWpu9MAoBDSRAwjevcpTdjavF0GqXVJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7xHIVQBwuH88Do89nMoxmF+ZionpI6nUVpQAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGwUyFUAsFgoxgP7fjSKyavdV71Zi1fPfK3dZdUjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJXFchVALAlcGj84RjpG0/lOLx27ptRra+mUltRAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBwpUDuAoCjg3fEvh33pXIK3pl8KZbWZlOprSgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIELhSIHcBwHKpJx7Y+8OpnIIzl96ImcUzqdRWlAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIXCmQuwBga/P37H4i+itDbT8JUwun4tzcW22vqyABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIENgokMsA4K6RO2P3yOG2n4a51ak4OXWk7XUVJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECGwVyGQAc6dsZh8Y/2PbTsFpdjjcvfKvtdRUkQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIbBXIZABzo2RZ373q87aeh1qzFsTNfa3tdBQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwEaBXAYAe8uDce+eJ1M5DUdOfymVuooSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIErBXIZACwVK/HgHT+Sykk4cvrLSd1mKrUVJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7wrkMgDY2vzD+z+Syil4JXkEcCN5FLCLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAikKZDbAOADd/xwlIs9bbd97dw3olpfa3tdBQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwJUCuQ0A3rvnqegtD7T9NLxx/tlYq620va6CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgSoHcBgA/kAQA+wQA/W8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYwK5DYA+MAdP5I8ArjS9rG9dvbrUW2st72uggQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4EqBXAYAi4ViPLTvx1I5CUfPfDWazXoqtRUlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLvCuQyANiTPPr3vuQRwO2+mtGMo6e/3O6y6hEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgfcI5DIAONi7I+7a+Wjbj0MtefTvseQRwC4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJC2QC4DgNsH9saB0fvbbrtaXY43L3yr7XUVJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECGwWSAOATzbyx7Bw5HHtG7mz7tpfX5+Pti8+3va6CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgo0AuA4B37LgvxgbvaPtpmFu+GCdnXml7XQUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBGgVwGAO/Z/WT0VwbbfhouzJ+Ii/PH215XQQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFEgdwHAnvJA3LfnqVROwsnpV2Ju5WIqtRUlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJXCuQuADg+fCj2brsrlVPwxoVvx1p1KZXaihIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgSsFchcAvGfXh6O/ZziVU3D0zFei2WykUltRAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBwpUCuAoCVUl/cv/eZVE7AyvpCvHXxuVRqK0qAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBDYK5CoAOD50IPZuvyeVUzC5cCrOz72VSm1FCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDARoHcBAALUYh7k7v/9ZR6UzkFx6dejsXVmVRqK0qAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBDYK5CYAmObd/5rRjFfPfDUazYYTRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIENkUgFwHAYqEc9yd3/ysVy6mgLq3NxTuTL6RSW1ECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIHA1gVwEAPduuyfGhw+kdgIuLJyIi3PHU6uvMAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ2CjQ9QHASqkv7t37VBSTV1rXWxefi5X1hbTKq0uAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBN4j0PUBwAOjD8b2gd2pjX6tthxvnP9WavUVJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECVxPo6gDgtiT4dzAJAKZ5nb30Zkwvnk5zCbUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMB7BLo2ADjQMxJ37nos1Uf/NqMZx85+PeqNqqNFgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQ2VaArA4CVUl/cs/vDUS5WUsWcW5mMk9NHU11DcQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgcDWBrgsAlgqluHv3E9Fb7k994m9dfD5W1udTX8cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgo0Dh4KEfbVbrq10jc+fOR2Ood0fq+1lcm43jky+lvo4FCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA1QQKH33yXzVPTH03uZPdQuaF9u24P0YH927KPt6efCGW1+Y2ZS2LECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBjQKFjz/9q81GNOPU9NGYX5nKpFCxUIyDYx+M4b6xTel/YXU2Tky5+9+mYFuEAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBK4qcDkA2PqXZvK6MHc8JhcmMkXVU+6PQ+Mfir7ywKb1/dbF55M7Js5v2noWIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECGwW+HwB89x9ml8/H6ZnXkr9ezgV29DXUO5rc+e+hKBXLm9bn3PLFODnzyqatZyECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIHA1gfcEAFtfWq0uxenZ1zr6Lne7hg/Frm13RiF5bdZVb9bj9XPfjHqjullLWocAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFxV4KoBwHe/eSm5G+C5S29HrbHeMXwDPdti7/YPxEDP8Kb3dHr29ZhdOrvp61qQAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhsFHjfAGDry6273k3OT8TUwsnkocBb91jgvvJg7N5+d4z0jW3JFJfW5+Odi89vydoWJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECGwWuGwB89wdrtZXkboBvxsLq9KYqVkq9sXvbXbF9YPemPu73yk02oxFvnP9OrNeWN3XvFiNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAtcSuOEA4LsF1pIQ3NzK1OUg4PLapVRky6WeGOnfFdv6x2Owd1sS/Cumss6NFj0z+0bMLJ250a/7HgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSF3gpgOAV3ZUa6wnQcCZmE8CgYtJILDRbNxywz3lgST0N568d8ZAz/CW3e1v4wYuLZ+PUzPHbnlffkiAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNIQuK0A4MaGqvX1WK+vRi35rDbWolZbi2o9+UzeratUqkSxUIlysXz5z+ViJUqFcvSU+6OvMpjG/m6r5vL6YhyffP62go231YAfEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBawi0NQDYTcq1RjXeuvBcEmBc7aZt2QsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIdImAAOBVBtl6lPE7ky/EyvpCl4zZNggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg2wQEADdMtBmNODF5JBbXZrpt1vZDgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAl0kIAB4xTCb0YyT06/E/MpkF43YVggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgGwUEAK+Y6unZYzG7dL4b52xPBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINBlAgKA3xvomUtvxMzimS4br+0QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQLcK5D4A2IhGnJp+1WN/u/WE2xcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgS6VCDXAcB6sxYTU0diae1Sl47XtggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgWwVyGwBcr6/GxOR3Y7W21K2ztS8CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6GKBXAYAF9dm4+T0K1FvVLt4tLZGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAt0skKsAYDOacWHueEwuTHTzTO2NAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBHIgkJsA4Hp9Lbnr39FYWZ/PwVhtkQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgS6XSAXAcCF1ZnLj/xtNGvdPk/7I0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGcCHR1AHCtvpo88vedmFu+kJNx2iYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5EWgKwOA9WY9phZOxuTCRDSbzbzM0j4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIEcChY8++a+b5WKlK7bcCv7NLJ2NyfmJqDeqXbEnmyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAlcTKOw78FRz+8CeGBvaH32VwUwq1ZKw3/TimZheOBX1Zi2Te9A0AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC4GYHC3v1PfP8ZuUO9ozE+vD+G+kajkLw6/arW12Nq8VTMLJ6ORrPR6e3qjwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQItE3gBwKA71atlHpjpH9nbBvYFQM9Ix0VBmzd7W9hZTrmVi7G4upMNJOXiwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5E3gqgHAKxHKpZ7Y1r8rRpIw4FDPti3xWa0uxdL6pZhPgn+Lq9Nb0oNFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAJwlcNwB4ZbOtMOBgz/boLQ9Eb6U/Kslnf2UoioVi2/a0Xl+L9dpKrKzPxdLaXCwn73qz1rb6ChEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgW4QuKkA4LU23HpkcE+5P0rFSpSLPclnOUql1p8rUSqUo5j8PZJH9TYa9Wi9mo1GNJrJZ/KuJo/0XasuR622Gqu1pW4wtQcCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJC6QIubrWEAACAASURBVFsCgKl3aQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgBwQEAB0IAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQQQEBwAwOTcsECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEAA0BkgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIZFBAAzODQtEyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAQAnQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBBAQHADA5NywQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQADQGSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhkUEADM4NC0TOD/sWsHxQ1EQQwFa1HYFYeEnYQ/tJ+l8UrNQNOaowgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDAANAPECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBoMD1/P47wdwiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBaQEDwOn6HU+AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECVQEDwGpzchMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAtIAB4HT9jidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBqoABYLU5uQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgWsAAcLp+xxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAVcAAsNqc3AQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwLWAAOF2/4wkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgKmAAWG1ObgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCYFjAAnK7f8QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQFTAArDYnNwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhMCxgATtfveAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoChgAVpuTmwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSmBQwAp+t3PAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUBQwAq83JTYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLTAgaA0/U7ngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqAgaA1ebkJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFpAQPA6fodT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJVAQPAanNyEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMC0gAHgdP2OJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGqgAFgtTm5CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBawABwun7HEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBVwACw2pzcBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDAtYAA4Xb/jCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAqYABYbU5uAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJgWMACcrt/xBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAVMACsNic3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECEwLGABO1+94AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKgKGABWm5ObAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKYFDACn63c8AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFQFDACrzclNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAtMCBoDT9TueAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoCBoDV5uQmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWkBA8Dp+h1PgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAlUBA8Bqc3ITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwLSAAeB0/Y4nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgaqAAWC1ObkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYFrAAHC6fscTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQFXAALDanNwECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMC1gADhdv+MJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoCpgAFhtTm4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQmBa4B4C/Z1rA8QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIChgABgsTWQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIGAA6AcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBQwAAwWJrIBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDAANAPECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBoIABYLA0kQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgAGgHyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBA8BgaSITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEDQD9AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSCAgaAwdJEJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBoB+gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIBAUMAIOliUyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAwA/QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEAgKGAAGSxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgYAPoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAQFDAADJYmMgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQMAD0AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIChgABgsTWQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIGAA6AcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBQwAAwWJrIBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDAANAPECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBoIABYLA0kQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgAGgHyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBA8BgaSITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEDQD9AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSCAgaAwdJEJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBoB+gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIBAUMAIOliUyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAwA/QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEAgKGAAGSxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgYAPoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAQFDAADJYmMgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQMAD0AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIChgABgsTWQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIGAA6AcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBQwAAwWJrIBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDAANAPECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBoIABYLA0kQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgAGgHyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBA8BgaSITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEDQD9AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSCAgaAwdJEJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBoB+gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIBAUMAIOliUyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAwA/QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEAgKGAAGSxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgYAPoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAQFDAADJYmMgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQMAD0AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIChgABgsTWQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIGAA6AcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBQwAAwWJrIBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDAANAPECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBoIABYLA0kQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgAGgHyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBA8BgaSITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEDQD9AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSCAgaAwdJEJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBoB+gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIBAUMAIOliUyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAwA/QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEAgKGAAGSxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgYAPoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAQFDAADJYmMgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQMAD0AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIChgABgsTWQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIGAA6AcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBQwAAwWJrIBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDAANAPECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBoIABYLA0kQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgAGgHyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBA8BgaSITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEDQD9AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSCAgaAwdJEJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBoB+gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIBAUMAIOliUyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAwA/QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEAgKGAAGSxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgYAPoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAQFDAADJYmMgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQMAD0AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIChgABgsTWQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIGAA6AcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBQwAAwWJrIBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDAANAPECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBoIABYLA0kQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgAGgHyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBA8BgaSITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEDQD9AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSCAgaAwdJEJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBoB+gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIBAUMAIOliUyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAwA/QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEAgKGAAGSxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgYAPoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAQFDAADJYmMgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQMAD0AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIChgABgsTWQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIGAA6AcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBQwAAwWJrIBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDAANAPECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBoIABYLA0kQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgAGgHyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkGB6/n6OcHcIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWkBA8Dp+h1PgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAlUBA8Bqc3ITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwLSAAeB0/Y4nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgaqAAWC1ObkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYFrAAHC6fscTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQFXAALDanNwECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMC1gADhdv+MJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoCpgAFhtTm4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQmBYwAJyu3/EECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUBUwAKw2JzcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQITAsYAE7X73gCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqAoYAFabk5sAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEpgUMAKfrdzwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIVAUMAKvNyU2AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC0wIGgNP1O54AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgIGgNXm5CZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBaQEDwOn6HU+AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAN/8UGQAAIABJREFUAAECVQEDwGpzchMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAtIAB4HT9jidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBqoABYLU5uQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgWsAAcLp+xxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAVcAAsNqc3AQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwLWAAOF2/4wkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgKmAAWG1ObgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCYFjAAnK7f8QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQFTAArDYnNwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhMCxgATtfveAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoChgAVpuTmwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSmBQwAp+t3PAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUBQwAq83JTYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLTAgaA0/U7ngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqAgaA1ebkJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFpAQPA6fodT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJVAQPAanNyEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMC0gAHgdP2OJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGqgAFgtTm5CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBawABwun7HEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBVwACw2pzcBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDAtYAA4Xb/jCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAqYABYbU5uAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJgWMACcrt/xBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAVMACsNic3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECEwLGABO1+94AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKgKGABWm5ObAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKYFDACn63c8AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFQFDACrzclNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAtMCBoDT9TueAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoCBoDV5uQmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWkBA8Dp+h1PgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAlUBA8Bqc3ITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwLSAAeB0/Y4nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgaqAAWC1ObkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYFrAAHC6fscTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQFXAALDanNwECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMC1gADhdv+MJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoCpgAFhtTm4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQmBYwAJyu3/EECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUBUwAKw2JzcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQITAsYAE7X73gCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqAoYAFabk5sAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEpgUMAKfrdzwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIVAUMAKvNyU2AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC0wIGgNP1O54AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgIGgNXm5CZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBaQEDwOn6HU+AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECVQEDwGpzchMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAtIAB4HT9jidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBqoABYLU5uQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgWsAAcLp+xxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAVcAAsNqc3AQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwLWAAOF2/4wkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgKmAAWG1ObgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCYFjAAnK7f8QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQFTAArDYnNwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhMCxgATtfveAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoChgAVpuTmwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSmBQwAp+t3PAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUBQwAq83JTYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLTAgaA0/U7ngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqAgaA1ebkJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFpAQPA6fodT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJVAQPAanNyEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMC0gAHgdP2OJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGqgAFgtTm5CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBawABwun7HEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBVwACw2pzcBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDAtYAA4Xb/jCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAqYABYbU5uAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJgWMACcrt/xBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAVMACsNic3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECEwLGABO1+94AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKgKGABWm5ObAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKYFDACn63c8AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFQFDACrzclNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAtMCBoDT9TueAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoCBoDV5uQmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWkBA8Dp+h1PgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAlUBA8Bqc3ITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwLSAAeB0/Y4nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgaqAAWC1ObkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYFrAAHC6fscTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQFXAALDanNwECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMC1wDwA/Z1rA8QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIChgABgsTWQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIGAA6AcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBQwAAwWJrIBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDAANAPECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBoIABYLA0kQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgAGgHyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBA8BgaSITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEDQD9AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSCAgaAwdJEJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBoB+gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIBAUMAIOliUyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAwA/QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEAgKGAAGSxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgYAPoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAQFDAADJYmMgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQMAD0AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIChgABgsTWQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIGAA6AcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBQwAAwWJrIBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDAANAPECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBoIABYLA0kQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgAGgHyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBA8BgaSITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEDQD9AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSCAgaAwdJEJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBoB+gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIBAUMAIOliUyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAwA/QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEAgKGAAGSxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgYAPoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAQFDAADJYmMgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQMAD0AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIChgABgsTWQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIGAA6AcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBQwAAwWJrIBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDAANAPECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBoIABYLA0kQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgAGgHyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBA8BgaSITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEDQD9AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSCAtfj9TnB3CITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFpAQPA6fodT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJVAQPAanNyEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMC0gAHgdP2OJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGqgAFgtTm5CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBawABwun7HEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBVwACw2pzcBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDAtYAA4Xb/jCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAqYABYbU5uAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJgWMACcrt/xBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAVMACsNic3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECEwLGABO1+94AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKgKGABWm5ObAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKYFDACn63c8AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFQFDACrzclNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAtMCBoDT9TueAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoCBoDV5uQmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWkBA8Dp+h1PgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAlUBA8Bqc3ITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwLSAAeB0/Y4nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgaqAAWC1ObkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYFrAAHC6fscTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQFXAALDanNwECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMC1gADhdv+MJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoCpgAFhtTm4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQmBYwAJyu3/EECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUBUwAKw2JzcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQITAsYAE7X73gCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqAoYAFabk5sAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEpgUMAKfrdzwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIVAUMAKvNyU2AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC0wIGgNP1O54AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgIGgNXm5CZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBaQEDwOn6HU+AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECVQEDwGpzchMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAtIAB4HT9jidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBqoABYLU5uQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgWsAAcLp+xxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAVcAAsNqc3AQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwLWAAOF2/4wkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgKmAAWG1ObgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCYFjAAnK7f8QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQFTAArDYnNwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhMCxgATtfveAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoChgAVpuTmwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSmBQwAp+t3PAECBAgQIECAAAECBAhcmUWRAAAgAElEQVQQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUBQwAq83JTYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLTAgaA0/U7ngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqAgaA1ebkJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFpAQPA6fodT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJVAQPAanNyEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMC0gAHgdP2OJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGqgAFgtTm5CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBawABwun7HEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBVwACw2pzcBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDAtYAA4Xb/jCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAqYABYbU5uAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJgWMACcrt/xBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAVMACsNic3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECEwLGABO1+94AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKgKGABWm5ObAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKYFDACn63c8AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFQF7gHg+1TDy02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBFYFDABXm3c3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFDADT9QlPgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqsCBoCrzbubAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNICBoDp+oQnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgVUBA8DV5t1NgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAmkBA8B0fcITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwKqAAeBq8+4mQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAAWC6PuEJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYFXAAHC1eXcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQFrAADBdn/AECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsCpgALjavLsJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIC1gAJiuT3gCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWBUwAFxt3t0ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwAEzXJzwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrAoYAK42724CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSAsYAKbrE54AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEVgUMAFebdzcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIpAUMANP1CU+AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECqwIGgKvNu5sAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gIGgOn6hCdAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBVQEDwNXm3U2AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECaQEDwHR9whMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAqoAB4Grz7iZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtIABYLo+4QkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgVcAAcLV5dxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAAMF2f8AQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwKmAAuNq8uwkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgLWAAmK5PeAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYFTAAXG3e3QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQFjAATNcnPAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAisChgArjbvbgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxgApusTngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRWBQwAV5t3NwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAikBa7H1/ukLxCeAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMChgADpbuZAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoCxgA9jt0AQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMChgADpbuZAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoCxgA9jt0AQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMChgADpbuZAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoCxgA9jt0AQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMChgADpbuZAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoCxgA9jt0AQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMChgADpbuZAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoCxgA9jt0AQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMChgADpbuZAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoCxgA9jt0AQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMChgADpbuZAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoCxgA9jt0AQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMChgADpbuZAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoCxgA9jt0AQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMChgADpbuZAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoCxgA9jt0AQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMChgADpbuZAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoCxgA9jt0AQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMChgADpbuZAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoCxgA9jt0AQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBP7Zu/dYyc/yPuDPXM999+zVXuPbGmPjFGwCONDFSdomJbRRS9JQKBBoS0XrtImqNhFQRUGlatXcm/iP0qAgBRARRW2CCqpEpZbGBteEuxMKNvgGttf2es/u2cu5zqVzlpIGajNnzjkz877zfgYdrdH8fu/zPJ9n/vzq9yNQoIAAYIFLNzIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5C8gAJj/Dk1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgUKCAAWuHQjEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgED+AgKA+e/QBAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQoIAAYIFLNzIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5C8gAJj/Dk1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgUKCAAWuHQjEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgED+AgKA+e/QBAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQoIAAYIFLNzIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5C8gAJj/Dk1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgUKCAAWuHQjEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgED+AgKA+e/QBAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQoIAAYIFLNzIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5C8gAJj/Dk1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgUKCAAWuHQjEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgED+AgKA+e/QBAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQoIAAYIFLNzIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5C8gAJj/Dk1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgUKCAAWuHQjEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgED+AgKA+e/QBAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQoIAAYIFLNzIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5C8gAJj/Dk1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgUKCAAWuHQjEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgED+AgKA+e/QBAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQoIAAYIFLNzIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5C8gAJj/Dk1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgUKCAAWuHQjEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgED+AgKA+e/QBAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQoIAAYIFLNzIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5C8gAJj/Dk1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgUKCAAWuHQjEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgED+AgKA+e/QBAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQoIAAYIFLNzIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5C8gAJj/Dk1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgUKCAAWuHQjEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgED+AgKA+e/QBAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQoIAAYIFLNzIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5C8gAJj/Dk1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgUKCAAWuHQjEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgED+AgKA+e/QBAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQoIAAYIFLNzIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5C8gAJj/Dk1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgUKCAAWuHQjEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgED+AgKA+e/QBAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQoIAAYIFLNzIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI5C8gAJj/Dk1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgUK9AKAL+oWOLeRCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAAGCpmzc3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGQtIACY9fo0T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKlCggAlrp5cxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAAGCpmzc3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGQtIACY9fo0T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKlCggAlrp5cxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAAGCpmzc3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGQtIACY9fo0T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKlCggAlrp5cxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAAGCpmzc3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGQtIACY9fo0T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKlCggAlrp5cxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAAGCpmzc3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGQtIACY9fo0T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKlCggAlrp5cxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAAGCpmzc3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGQtIACY9fo0T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKlCggAlrp5cxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAAGCpmzc3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGQtIACY9fo0T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKlCggAlrp5cxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAAGCpmzc3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGQtIACY9fo0T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKlCggAlrp5cxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAAGCpmzc3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGQtIACY9fo0T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKlCggAlrp5cxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAAGCpmzc3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGQtIACY9fo0T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKlCggAlrp5cxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAAGCpmzc3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGQtIACY9fo0T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKlCggAlrp5cxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAAGCpmzc3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAexc8WYAACAASURBVAIECGQtIACY9fo0T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKlCggAlrp5cxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAAGCpmzc3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGQtIACY9fo0T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKlCggAlrp5cxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAAGCpmzc3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGQtIACY9fo0T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKlCggAlrp5cxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAAGCpmzc3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGQtIACY9fo0T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKlCggAlrp5cxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAAGCpmzc3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGQtIACY9fo0T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKlCggAlrp5cxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1gICgFmvT/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCYDIFapR61WiMqUY1OtxXtTie60Y5utzMZAw5hCgHAIaA6kgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeXaDSi/lNNxdirrk/GrXpqNemnvXidmczVjbPxerGcqxvrmD9cwICgH4OBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDASgWZ9Nuam9sdsczGqldrANbfCgBfWluL82une0wE9GVAAcOCfkBsIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYBCBenUq9s8ciZneE/8qlcogtz7jtVtBwOXVJ+Pi+nLv++6uz8v1AAHAXDenbwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQuUK3WesG/o71X/R7ck+Dfd4+72V6LsytPxVrvFcElfgQAS9y6mQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBkga3X/R6evzpq1fpQK3W67Vi6+Hisbmw9DbCsjwBgWfs2LQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBIYuMNt71e/Buef0nvpXHXqtbxc4t/Z0LK88MbJ6KRQSAExhC3ogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAhAjsn7ks9s0cGcs0Z3sBwPO9IGApHwHAUjZtTgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAxZYG5qMQ5sPfmv979xfLrRjafPPxJrmxfGUX7kNQUAR06uIAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCZPoFmfiaMLx0f62t9nUux02/Hk8gPR6mxMHvJ3TSQAOPErNiABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSGK1Cr1uOyfdfH1r8pfLaeAHjq/MMptDLUHgQAh8rrcAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECEy+wOH5a2KmuZDUoE+eezA2WitJ9bTXzQgA7rWo8wgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFCQwFR9Po7uuza5iUt4CqAAYHI/Ow0RIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgH4HL918fjdp0kg1P+lMABQCT/NlpigABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAukLzDT3xeH5q5Nt9MLa6TizcjLZ/nbbmADgbgXdT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUIFDs1fFbPN/clOv9lZjyfOfi3Z/nbbmADgbgXdT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgQIFKpVqPGfx+bH1b8qfk2fvj1ZnI+UWd9ybAOCO6dxIgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBcgVSf/3vtzdz5uLjcWF9aSIXJQA4kWs1FAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBIYrcHDuypibWhxukT04/cLa6TizcnIPTkrvCAHA9HaiIwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQvcPni86JRnUq+z4vrZ2Pp4qPJ97mTBgUAd6LmHgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQucOWBm6JSqSWvsLpxPp6+8Ejyfe6kQQHAnai5hwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgULVKIaVx78viwE1jcvxlPnH8qi10GbFAAcVMz1BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKFygXm3GscUbslBY27wQp84/nEWvgzYpADiomOsJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQuECtWo8rFp+fhcKF9aU4c/HxLHodtEkBwEHFXE+AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHSBboRVx16QRYKy6tPxrnVU1n0OmiTAoCDirmeAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOLKAzdFpVJLXuL0hUdjZeNs8n3upEEBwJ2ouYcAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKFCxzbf2PUa43kFU6evT9anY3k+9xJgwKAO1FzDwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAoXODx/Tcw0F5JWWG+txlPnHki6x900JwC4Gz33EiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFCB+amDcWDuiqSnP7vyRJxfezrpHnfTnADgbvTcS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUIF6tVmHFu8IenpJ/n1v1vwAoBJ//w0R4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgXQFLl98XjSqU0k2uLpxPp6+8EiSve1VUwKAeyXpHAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQmsG/mSOyfuSy5qbvRjSeWvx6t9npyve1lQwKAe6npLAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQkUKnU4tj+66NWbSQ19YW103Fm5WRSPQ2jGQHAYag6kwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUIzE8djANzVyQzbafbjpNn74+tfyf9IwA46Rs2HwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBIYoUIlKHFu8IZmnAC5deCwubpwZ4sTpHC0AmM4udEKAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEsBaYbC3F44epeFLAy1v5LefXvt5EFAMf6c1OcAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECkyGwMH04FmcvH9sw662L8dS5h3v1u2PrYdSFewHAW8qZdtS66hEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAggYNzV8bc1OLIJ251NuLJ5Qei022PvPY4CwoAjlNfbQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECEyUQCUOzB6L+emDI5vq4vrZWLr4WK9eec/CEwAc2c9MIQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECJQhMDd14FIQsFKpDm3gbrcbZ1efiAtrp4dWI/WDBQBT35D+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkKFAsz4bh+evjlq1vufdr2yci3OrT8Vme23Pz87pQAHAnLalVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGQkUK3Ueq8DPnTplcC1yu6DgOutlTi7cjI2WqsZKQyvVQHA4dk6mQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgR6AluvAt56LfBMYz6mGwsDmay3V2Jt/Vysbp7vPfFvfaB7J/1iAcBJ37D5CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkJBAJSox1Xs9cLMxF1tPCNz62woIVqvV6HTa0epsRLvTinZ749KT/trdVkLdp9WKAGBa+9ANAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDYloAA4LaYXESAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNISEABMax+6IUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC2xIQANwWk4sIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBaAgKAae1DNwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYFsCAoDbYnIRAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBIS0AAMK196IYAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGxLQABwW0wuIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECaQkIAKa1D90QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFtCQgAbovJRQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIC0BAcC09qEbAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwLQEBwG0xuYgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQlIACY1j50Q4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEtiUgALgtJhcRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG0BCpHr7ilm1ZLuiFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgT6CQgA9hPyPQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSFBAADDBpWiJAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAj0ExAA7CfkewIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkKCAAGCCS9ESAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoJyAA2E/I9wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIEEBAcAEl6IlAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQT0AAsJ+Q7wkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQIICAoAJLkVLBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgn4AAYD8h3xMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgQQFBAATXIqWCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAPwEBwH5CvidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgkKCAAmuBQtESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBfgICgP2EfE+AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBIUEABMcClaIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC/QQEAPsJ+Z4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQoIACY4FK0RIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE+gkIAPYT8j0BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEhQQAAwwaVoiQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI9BMQAOwn5HsCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJCggABggkvREgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6CcgANhPyPcECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCBBAQHABJeiJQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0E9AALCfkO8JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECCAgKACS5FSwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoJ+AAGA/Id8TIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEEBQQAE1yKlggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQD8BAcB+Qr4nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIJCggAJrgULREgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgX4CAoD9hHxPgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQSFBAATHApWiJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAv0EBAD7CfmeAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgkKCAAmOBStESAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPoJCAD2E/I9AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBIUEAAMMGlaIkAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECPQTEADsJ+R7AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQoIAAYIJL0RIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOgnIADYT8j3BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgQQEBwASXoiUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINBPQACwn5DvCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAggICgAkuRUsECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCfgABgPyHfEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBBAUEABNcipYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEA/AQHAfkK+J0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCQoIACa4FC0RIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIF+AgKA/YR8T4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEEhQQAExwKVoiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQL9BAQA+wn5ngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBkQjMHFuM+WuORHP/XDQP9P4WZy/9d326GRvLK7Fx9kLvbzXWe/+un74Qy/c9Fp2N1kh6U4RAigKVo8du6abYmJ4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJh8gZljB+Ky226My048P+aPHx1o4PbaRjz9mQfiybvvi9Ofe1AYcCA9F0+CgADgJGzRDAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQyEqg263HVj78kLv/hm2L+2sFCf882Znu9Fac+fX9882Ofj3P3P56RhlYJ7FxAAHDndu4kQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAAgUqtGlf81Zvj+GtPxNTB+QHuHOzSU3/8tfj6+++MlUdPD3ajqwlkJiAAmNnCtEuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgO4FKJY6+4vnx3DfeFrO9V/6O4tPtdOLk//xyPPT7n4q1p8+NoqQaBEYuIAA4cnIFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECJQjUJtpxgvf9uo49P3HxzJ0e30zvvzvPhan7vnaWOorSmCYAgKAw9R1NgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGCBWavOBC3/NJrRvbUv+9F/cgffjoe+MCd0e10C96I0SdNQABw0jZqHgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIJCBx66XPjhb/wN6I23Uygm2+1sHTvI/Env/KRaF1cT6YnjRDYjYAA4G703EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwP8ncO1PvTye+6YfSlJm7dS5+Pw7/2OsnjyTZH+aIjCIgADgIFquJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgewocPXFjvPBtr05a6eJjS/GZn39ftNc2k+5TcwT6CQgA9hPyPQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC2xJYuP7yeOm/fUNUG/VtXT/Oi57+3IPxpX/9nyK64+xCbQK7ExAA3J2fuwkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6Ak0D8zFy37r70dz/2w2Hg//wT3xwPvvzKZfjRL4bgEBQL8JAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgR2JVCp1+LWX/vpWDh+2a7OGcfNf/Jr/yWe+tRXx1FaTQK7FhAA3DWhAwgQIECAAAECBAgQIECAAAECBAgQIECAAAECvVp+VwAAIABJREFUBAgQIECAAAECBAiULXD89bfFda87kSVCe20jPvnW/xCt82tZ9q/psgUEAMvev+kJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI7EqgPj8dt/3u7VGbbu7qnHHe/I2Pfia+9t5PjLMFtQnsSEAAcEdsbiJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEvg+rf85bjmb96aNUZnsx133/6eWD99Pus5NF+egABgeTs3MQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIE9EZg6NB8nfucfRbVe25PzxnnIY//tS/HVf//xcbagNoGBBQQAByZzAwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECWwI3vPVH4qoff8nEYHzyre+O9VOeAjgxCy1gEAHAApZsRAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLDEPih9/9cNPbNDOPosZx5/3v/e3zzo58bS21FCexEQABwJ2ruIUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFC4wML1l8cP/PqbJ0ph6d5vxBfe+aGJmskwky0gADjZ+zUdAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgaEIXPfG2+L43z4xlLPHdWi33Yk/etMd0V7ZGFcL6hIYSEAAcCAuFxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsCXwA7/192Lh2qMTh/Gnv/HRePKur0zcXAaaTAEBwMncq6kIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIDE1g+ui+eMV7bh/a+eM8+Ik7vxJf/s2PjrMFtQlsW0AAcNtULiRAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEvgyMtviJvf8RMTiXHxsaW455/87kTOZqjJExAAnLydmogAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAUAWueNWL4qbbXznUGuM6fPPCWtz503eMq7y6BAYSEAAciMvFBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgcf92JuO71t00sxP94za9Ht9WZ2PkMNjkCAoCTs0uTECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBiJwI3/8Efjyr/+4pHUGkeRu97y7thYOj+O0moSGEhAAHAgLhcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPDCt706jp64cWIhPv3P3xcXHnxyYucz2OQICABOzi5NQoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAkArf84t+Kw7deP5Ja4yjy2X/xwVj+ymPjKK0mgYEEBAAH4nIxAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLP/8c/Fs955S0TC/Gpn3lPrJ08O7HzGWxyBAQAJ2eXJiFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwEoHjr78trnvdiZHUGkeRT7z2N6Oz0RpHaTUJDCQgADgQl4sJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIELjiVS+Km25/5URCtFbW4o/ecMdEzmaoyRMQAJy8nZqIAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwFAFjrz8eXHzO35yqDXGdfjFR0/HPT/73nGVV5fAQAICgANxuZgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgX03HItbf/VNEwmxdO834gvv/NBEzmaoyRMQAJy8nZqIAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwFAFqs16/PAH/2lUG7Wh1hnH4Q//wT3xwPvvHEdpNQkMLNALAN7cHfguNxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgULTAzb/4U3Hk1usnzuCzb/9ALN/3+MTNZaDJFBAAnMy9mooAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAUAWO/ejN8X0/+9eGWmPUh2+eW40733zHqMuqR2DHAgKAO6ZzIwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFyBRoLM/GD7/+5qFQqE4Pw6Me/GPe9++MTM49BJl9AAHDyd2xCAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkMReMm/eUMs/oWrhnL2OA79wr/6cCx9/qFxlFaTwI4EBAB3xOYmAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSO/MUb4ua3/+REQKw+tRx33/47EZ3uRMxjiDIEBADL2LMpCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAxF4GW//ZaYv+bIUM4e5aH3/upH4tTd942ypFoEdi0gALhrQgcQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKFfgwC3XxIvf9XeyBjj3wBPxmZ9/X9YzaL5MAQHAMvduagIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJ7JvD973pdHLzl2j07b9QHffbtH4jl+x4fdVn1COxaQABw14QOIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFC2wNzVh+Pld/yDLBGWvvBQfOFdH86yd00TEAD0GyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYNcCx19/W1z3ulfs+pxRHrBxbiX++J/9XqyfPj/KsmoR2DMBAcA9o3QQAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbIFXvi2n4ijJ27MAqGz2YrPvuODcf6BJ7LoV5MEnklAANDvggABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBPRGo1Gvx0l9+Y+y7/tienDfMQ+79lT+MU//r/mGWcDaBoQsIAA6dWAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC5Qg0Fmbi1t/4uzFzdH+yQz/4+3fFQx++O9n+NEZguwICgNuVch0BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAtsSaB6Yjxf90mti4brLtnX9qC7qdjrx4Afviof/8z2jKqkOgaEKCAAOldfhBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMoUqDZq8YJfeHUcednzkgBor23Evb/8kVj64kNJ9KMJAnshIAC4F4rOIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgGQWufe2JuO71t0WlUhmb0OpTy/HFf/nhWHl8aWw9KExgGAICgMNQdSYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAn8msP/GK+LGn/mxWLj26EhVOq12PPqxz8WDH/pktNc2R1pbMQKjEBAAHIWyGgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKF6hUK/GcV704rnvjD0ZjbmroGme/8mj87zv+a6yePDP0WgoQGJeAAOC45NUlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUKBAY/9sXP/mvxTH/soLhvJa4LXT5+Lrv/eJePKurxaoa+TSBAQAS9u4eQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgkILBw/GgcecVNcfgl18XWf+/m01pZj6UvPRKnP/v1eOKTX43Outf97sbTvfkICADmsyudEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJhIgebiXBx68fE49NLnxtyxg7H1/5sH5p5x1nYv3Ldx5mKsLZ2P5a8+Fqc/92Cc/fI3J9LFUAT6CQgA9hPyPQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYxG4FATs/dWmm7GxfDFWT54ZSx+KEkhVQAAw1c3oiwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIfA8BAUA/DwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkKGAAGCGS9MyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAQAPQbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECGQoIAGa4NC0TIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEBQL8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQoYAAYIZL0zIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBAA9BsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIZCggAZrg0LRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQFAvwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJChgABghkvTMgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEAD0GyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhkKCABmuDQtEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAUC/AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkKGAAGCGS9MyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAQAPQbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECGQoIAGa4NC0TIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEBQL8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQkUC1Uo9adSYEADNamlYJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoDyBSi/w16jNRK0yFfVe8K9arV9CEAAs77dgYgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBIWOA7An+16ahWGs/YrQBgwkvUGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhMvsDWK33r1elLr/Wt16aeNfD33RICgJP/2zAhAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQmsPVUv0Zt7tJfrdrcUXcCgDticxMBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBhMYOvVvs0/C/1NDXbzM1wtALhrQgcQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFnFqhUar2n/M1Hs9p70l/v9b57+REA3EtNZxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA8QKVqEajPv+t1/tWpqJSqQzFRABwKKwOJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGSBLZCfvVq70l/9a3Q30wv9Df86QUAh2+sAgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhMqEC1Uo+p+v5LT/zbevLfKD8CgKPUVosAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEJkKgVmn2gn+LUa/NDu0Vv/2gBAD7CfmeAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAj8X4F6debSE//qtZmxmwgAjn0FGiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB1AXq1bmYbixGrdpMplUBwGRWoRECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSEugEs36QkzV9kW12kirtV43AoDJrURDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBOgUqlF/yr7e+F/3rBv0ptnK18z9oCgMmuRmMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMGqBZn1/TNUXe8G/6qhLD1xPAHBgMjcQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwKQJ1KuzMd08ELVKM5vRBACzWZVGCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCvBaqVRkw3DkWjNrPXRw/9PAHAoRMrQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKpCVSi2gv+HegF//ZFpZJad9vrRwBwe06uIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEJEZiq749mfTGqlWrWEwkAZr0+zRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAdgXqtdmYrh+MWrWx3VuSvk4AMOn1aI4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEditQrTRipnE46rXp3R6V1P0CgEmtQzMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsJcCzdq+mG4eiErk/brfZzIRANzLX4qzCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCARgVrMTR2JenUmkX72vg0BwL03dSIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjFFgK/Q30zwS1UptjF0Mv7QA4PCNVSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBUQh0K73X/R6MZm0hKpXKKCqOtEan24l2ezVandXY7P0JAI6UXzECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGIZAtVKPueZlUa02h3H8WM7sdrvR7qz1An9bf6u9/17/jj4EAMeyFkUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYK8EmrV9Md040HvqX3WvjhzbOZ3ORu/pfluBv5Votdd6fXSftRcBwLGtSWECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ2J1ALWabh6NRm93dMWO+u91txWbrQmy0z0e399/b/QgAblfKdQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQjECtOt0L/x2NaqWWTE+DNNLtdi495W+jdf7SK3538hEA3ImaewgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgbAJTtf0xdemVv5Wx9bDTwluv9d1sX+j9Xey93Lez02Mu3ScAuCs+NxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAKAVmGoeiWd83ypK7rtXpvdZ3oxf623ra3yCv+O1XWACwn5DvCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCABgUrvlb+XRaM2k0Av22uh3dmM9daZS0/7G8ZHAHAYqs4kQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgT0TqEQ1Zqcuj3p1as/OHOZBrc5672l/y0ML/n27dwHAYW7R2QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwK4FqpRFzU5fF1r+pf1qdtd4T/5aj1V4ZSasCgCNhVoQAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBhWo9Z74N9u8vBf+qw5660ivb7VXY611Ntq9AOAoPwKAo9RWiwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgS2JVCvzcZc82jv2sq2rh/HRe3uZqxuPD3y4N+3ZxUAHMfW1SRAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBZxWYqi3GVGMxKpU0w3+dbqf3qt+zsdF73e84PwKA49RXmwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+Q2CmcSia9X1JqnS73dhoX4j1zaXoRmfsPQoAjn0FGiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBLYGZxtFe+G8uSYxWZ/3S63473Y1k+hMATGYVGiFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEC5Aqk++a/TacVa60xs9p78l9pHADC1jeiHAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGKpAszYdzcZsVHv/a3U2o937a3U2ev+2hlrX4QQIECDw7ALTjYMxVd+fGFG3F/xb7r3u92yvr25ivX2rHQHAJNeiKQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAvBKqVahyce04cXrg65qb2x3Rj4VmP3WitxumLj8bp89+M5dVTe1HeGQQIECCwDYGp2mJMNw9s48rRXdLubsbK+pO91/1ujq7oDioJAO4AzS0ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA2gIL04fiyL5r4+jCNVGrNgZudisMeHL5a/H4mft74Y/2wPe7gQABAgS2J9Cs7YuZ5qHtXTyiq9Zb52Jtc6lXLc2n/v15BgHAEf0olCFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSGLzDTe8Lf1YdeEIfmr4pKpbLrguubK/GNpT+NU+ce6cVAOrs+zwEECBAg8P8EGrX5mG0eSYak2wt8r2yc6r0WfjWZnvo1IgDYT8j3BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQPIC9drUpeDf5fuu6wX/qnve7+rGuXj49L2xdOGxPT/bgQQIEChRoFGbi5nGkT0Ja++F31bobyv8txUCzOkjAJjTtvRKgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4P+0d6fPll5XfYDXmc+de+7brZ4ltTXaaDC2kWdsghUTCGFM4EMKqHzJn5OqVBGqCAUkriRFAhgM2BhbNmBbk2XJsqZWt3qehzue+eRtGQqwpL73dp99hnue4+qSXNrvb639vK/0adXeBAgQIEDgHQIz1R1x/96PRikbAkz5a3ea8caFp+Py0qmUZWQTIEBg0wsU85PZyX+7s+G/YdhqN1ab16LRujEMzWy4BwOAGybzAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDAsAjtnDsa9uz+YDZEU+tbS2WuvxonLL2RXAnf7VlMhAgQIbBaBQn4ipiu7s+0Mfvqv3W1mp/5djE6nMbK8BgBH9tVpnAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjLfAwe3vj33b7h8IwolLL8SZ668MpLaiBAgQGFWBQr4SU+X5JFe1b9Sk3lqIWvNq9thoD3MbANzom7eeAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGLjArtnDb5/8N6gTpLrdbvzg7Dfi2sq5gVtogAABAqMgkMsVs5P/7op8Lj/QdrP/fL996l+rszzQPnpV3ABgryTlECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAn0RmKluj4f3fXrgJ0i12o343qmvxGpzsS/7VoQAAQKjK5DLhv/2RiFfHugWut1OLDcuRLtTG2gfvSxuALCXmrIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBpALl4kT82IF/FaVCJWmd9YbfWLkQL5352nqXW0eAAIGxFKgWt0elNDvQvXc6rWz473x0us2B9tHr4gYAey0qjwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEgm8MDej8fWqT3J8m8n+MXTX42F1UuIZomtAAAgAElEQVS386hnCBAgsOkFSoXpmCzvHOg+251mrNTPRSfaA+0jRXEDgClUZRIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQI9F9gyMR8P7vtEz3PvNNApgHcq6HkCBDarQD678ne6sidykR/YFlvt1ezkv4tZ/c7AekhZ2ABgSl3ZBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQM8EHjn409kpUnM9y+tlkFMAe6kpiwCBzSCQy+Wy4b+7Ip8rDWw7zfZSrDQ29wmtBgAH9nkpTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKxXYPv0gbhvz0fWu7zv685ffyOOXXq273UVJECAwLAKTJXno1iYGFh7tea1qLeuD6x+vwobAOyXtDoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAbQvct+eJ2D6977afT/1grbkcz574Yuoy8gkQIDASAuXCXEyUtw2s19XGlWi0FwZWv5+FDQD2U1stAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYMMChXwxPnTk30Yul9/ws/184LkTfx6rzcV+llSLAAECQydQzFez69rns/9m5wbS27ic/PePuAYAB/KZKUqAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAisV2DYr//9x328een5OHf9tfVuyzoCBAhsOoFcFGKmelc2/FcYyN7qzRtRa10dSO1BFTUAOCh5dQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIF1CRzd/eHYOXtwXWsHuej89Tfi2KVnB9mC2gQIEBiowFRlbxTzlYH00GgtZKewXhlI7UEWNQA4SH21CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTUFHjv0+aiWptZcN+gFlxbeitcufGvQbahPgACBgQhUSlujWtwykNr11mLUmpcHUnvQRQ0ADvoNqE+AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjcUuAjd/9C5PODuU5yI6/m2vK5ePnsUxt5xFoCBAhsCoFCrhxTlZtX//Z/O43Wcnby38X+Fx6SigYAh+RFaIMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4p0AhX4oP3/3zI0GzuHolvnf6KyPRqyYJECDQS4HpbPivkC/3MnJdWc32Sqw0Lqxr7WZdZABws75Z+yJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAptAYKI0E48eenIkdnJj5UK8dOZrI9GrJgkQINArgXJhNibK23sVt+6cVns1luvZ8F+uu+5nNuPCbADw4fEW2Ixv1Z4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAmESgXJ+ODh39mJHZzYeF4vHHhOyPRqyYJECDQC4Fcrhiz1f1ZVH/v/m21a7HcOJfVNfpmALAXX7IMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIIlALvLxE/f+YpLsXoeevPJSnLr6/V7HyiNAgMDQCkyV90SxMNHX/jrdZizVT0e3a/jvJrwBwL5+fooRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECGxX4yN2/GPl8fqOP9X396+e/HRcXT/S9roIECBAYhEApPx2TlV19Ld2NTjb8dzY6nUZf6w5zMQOAw/x29EaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhkVwD/bJSL1aGXeO7El2K1uTD0fWqQAAECdy5QiJns6t98rr/D2SuNi9FsL915+5sowQDgJnqZtkKAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBDajwAN7Px5bp/YM9daW69fjuyf/cqh71BwBAgR6JTBR2pkNZs/0Km5dOfVswLrWuryuteO0yADgOL1teyVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAiMosGfL0Tiy85Gh7vzEpRfizPVXhrpHzREgQKAXAsX8RExV+juU3c6u/F2qn8na7/ZiC5sq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e6NYqCbv2+l/vSU2ANhbT2kECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYKYF8rhQz1f3Je3b6X++JDQD23lQiAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIERkagUtwW1dKW5P3Wm9ei1rqWvM44FTAAOE5v214JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDwIwKz1YORyxWSujj9Lw2vAcA0rlIJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAw9ALF/GRMVeaT91nLTv+rO/2v584GAHtOKpAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKjITBR2h3l4lTSZp3+l47XAGA6W8kECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYWoFc5GPm7et/c0l7rLduRK15JWmNcQ03ADiub96+CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYa4FyYS4mytuTGyzWTken20heZxwLGAAcx7duzwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjL3AdGV/FPKlpA7tTjOW6qeS1hjncAOA4/z27Z0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbEUKOTKMV3dl3zvq43L0WgvJK8zrgUMAI7rm7dvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTGVqBa3BGV0mzS/Xe73VisvRXd6CStM87hBgDH+e3bOwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYykwUz0U+Vw+6d4breVYbV5IWmPcww0AjvsXYP8ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIyVQD67/nemD9f/LtfPR6uzMla2/d6sAcB+i6tHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBAQqUC7MxUd6RtINutx0L2fW/fmkFDACm9ZVOgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBoRKYLM9HqTCZtKda83rUW1eT1hAeYQDQV0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExEpitHopcLp90x4u1U9HpNpPWEG4A0DdAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBsRHI5yoxU70r6X5b7VosN84mrSH8hwJOAPQlECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEwEKoUtUS1vS7rb1fqlaHQWk9YQ/kMBA4C+BAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJDKlDMl6NQKEUhV4xiPvtr9vc3r27tdrvR6TSjlf1pd1rZn2Y02/Uh3YW2hklgqrwnioWJpC0trJ6I7AtNWkP4DwUMAPoSCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAxQYLa6I6ar22KyMvfDP+WZ7E92SltpasNd3RwCXFi9HIu1K9mf7K+r17L/fyk63daGszywGQVyMVs9lA2R5pJtrp19g0uNM8nyBf9LAQOAvggCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECfRLI5wqxZWo+tk7uia1Te2Jb9qdYKCetfvO0wBurF+Py4qm4tPhWXF++4HS2pOLDG17IT8R0ZU/SBmvN61FvXU1aQ/g/CRgA9DUQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSCywd8vRmN9yd8zP3Z240trxrXYjriydjvM33sz+vPH2FcJ+4yFQKW7NTpbcmnSzS7Vz0e6uJq0h/J8EDAD6GggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgkENg5cyD2bXsgds4ejGK+lKDCnUc2O404f/2NOHXl5bi+cv7OAyUMtcBU5a7sW6wk6zE7bDIWasez/Oxv/PoiYACwL8yKECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjIvAXdvuj3t2PhZT1S0jteXl2vV468r34tTVl50KOFJvbn3N5iIfM9WDkcvl1vfAbaxqtVdjuXHuNp70yO0KGAC8XTnPESBAgAABAgQIECBAgAAB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BAgQIECAAAECBAgQIECAAAECIyLw4bv/XWyb3tPzbl3/+07Sxw//TOyaPdhz65uBf/OD34vVxmKS7HEKLRdmswHAHcm23GgtxGrzcrJ8wWsLGABc28gKAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBERH4qYf/UxTzpZ53u7B6Ob752hd6njvKgQe2PxQP7ftkki18+9gfx5WlU0myxym0VJiJyfLOZFtutpZipXkxWb7gtQUMAK5tZAUBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAICJQK1exa2t9M0umr574Vxy4+kyR7VEMrpan49AP/MXIJNvDS6a/HySsvJkger8hifjKmKvPJNt1qr8Zy41yyfMFrCxgAXNvICgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgREQ2Da1Nz58z8/3vFPX/7436UeP/krMTvT+itnjl16IH5z9Rs/f5bgFFnLlmK7uS7btTqcZi3UnNSYDXkewAcB1IFlCgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAw/AL7tz0YD+//VM8brbdq8dff/52e526GwHt3fzjunX+851u5uPBWPHP8T3ueO26BuShkA5oHk2272+3GQu1Eln9zTNZvEAIGAAehriYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDPBe6d/1Dcu/uDPc9dWL0c33ztCz3P3QyB83N3x6OHPtfzrSzVr8dTr/xBz3PHMXC2ejhyuRQXNf9Qc3H1ZHSiNY60Q7FnA4BD8Ro0QYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgcKcCD+z9WBza+YE7jXnH8xcWTsSzx7/Y89zNELg1u3b5IwmuXW52GvHlF397MxANfA/TlQNRyBeT9bFUPxftzmqyfMG3FjAA6AshQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDYFALv3/+Z2Lftvp7v5a3LL8b3z3y957mbIXCqsjU+cd9/6PlWbl4o+6UX/kvPc8cxcLK8N0qFarKtrzQuRbO9mCxf8K0FDAD6QggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBDaFwKOHnoz5uSM938ur5/4+jl18tue5myGwXJiIzzz0G0m28hff+6/R6baTZI9T6ERpV5SL08m2XGtdj3rzarJ8wbcWMADoCyFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIENgUAj9+5Odix8y+nu/luye/EmevvdLz3M0S+LkP/OfIJdjMl1/6b9nJcvUEyeMVWSlui2ppS7JNN1pLsdq8mCxf8K0FDAD6QggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBDaFwBNHfznmJnb2fC/fOvZ/4+rSmZ7nbpbAzzz4m9kJc72/YvarL//3qDWXNgvTwPZRLszGRHlHsvqtTj2W6/79SAa8RrABwEHJq0uAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINBTgY+979/HTHVbTzNvhj316v+IpZorTt8L9hPv+7WYqvb+hLmvv/IH2WDZ9Z6/z3ELLOQnY7oyn2zb3W43FmrHk+ULvrXA/wcgFIgsh3eICQAAAABJRU5ErkJggg=="); -} - -/* Modal Content/Box */ -.modal-content { - background-color: #fefefe; - margin: 5% auto 15% auto; /* 5% from the top, 15% from the bottom and centered */ - border: 1px solid #888; - width: 80%; /* Could be more or less, depending on screen size */ -} - -/* Add Zoom Animation */ -.animate { - -webkit-animation: animatezoom 0.6s; - animation: animatezoom 0.6s; - max-width: 35%; - min-width: 320px; - border-radius: 10px; -} - -@-webkit-keyframes animatezoom { - from {-webkit-transform: scale(0)} - to {-webkit-transform: scale(1)} -} - -@keyframes animatezoom { - from {transform: scale(0)} - to {transform: scale(1)} -} - -/* Community and User Page Styles */ -.community-page-info-icon { - width: 100px; -} - -/*community page*/ - -.community-page-header-overlay { - z-index: 2; - position: absolute; - background-color: rgba(41, 200, 83, 0.75); - margin-left: -45px; - margin-top: -330px; - min-height: 242px; - width: 86%; -} - -.community-page-header { - z-index: 1; - background-size: 100%; - margin-left: -45px; - min-height: 328px; - background-repeat: no-repeat !important; -} - -.community-page-info-container { - z-index: 3; - min-height: 255px; - background-color: rgba(255,255,255,1); - border: 1.5px solid #00000000; - border-radius: 10px; - margin-left: -15px; - margin-bottom: 15px; -} - -.community-page-table-wrapper { - border-top: #D6D2D2; - border-width: 5px; - position: absolute; - padding-top: 25px; - margin-left: 17px; - line-height: 20px; -} - -.community-page-table-label { - color: #673DB6; - padding-left: 15px; - font-size: larger; - margin-top: 15px; -} - -.community-page-table-text { - color: black; - padding-left: 15px; - margin-top: -15px; - font-size: large; -} - -.community-page-margin-line { - border-top: 2px solid #D6D2D2; - width: 760px; - height: 5px; - position: absolute; - z-index: 5; - margin-left: 20px; -} - -.community-page-shaded-info-container { - z-index: 3; - width: 240px; - height: 85px; - background-color: rgb(233, 233, 233); - border: 1.5px solid #e9e9e9; - border-radius: 10px; -} - -.community-page-info-icon { - width: 150px; - border-radius: 10px; - margin: 20px; - float: left; -} - -.community-page-title { - margin-bottom: 0; -} - -.community-page-description { - width: 550px; - line-height: 20px; -} - -.community-page-posts-wrapper { - position: relative; - z-index: 3; - background-color: rgba(255,255,255,1); - border: 1.5px solid #00000000; - border-radius: 10px; - margin-top: 125px; - margin-left: 5px; -} - -.community-page-posts-header { - margin-top: 25px; - margin-left: auto; - margin-right: auto; -} - -.community-page-posts-header-tab { - padding-left: 10px; - padding-right: 10px; - font-size: 21px; - cursor: pointer; -} -.community-page-posts-header-tab.active { - color: #673DB6; -} - -.community-page-post-wrapper { - padding-top: 25px; - margin-left: 0; - margin-bottom: 90px; - width: 760px; - -} - -.community-page-post-screenshot { - width: 760px; - border: 1.5px solid #d6d2d2; - border-radius: 10px; -} - -.community-page-post-painting { - width: 760px; - height: 285px; -} - -.community-page-post-yeah-button-wrapper { - padding-bottom: 150px; - margin-left: 380px; - margin-top: -160px; - background-repeat: no-repeat !important; - background: url('data:image/png;base64,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') - 310px 65px; -} - -.community-page-post-yeah-button { - cursor: pointer; - position: absolute; - margin-left: 310px; - height: 60px; - width: 66px; - margin-top: 65px; - margin-bottom: 0; - padding-bottom: 0; -} - -.community-page-post-yeah-count { - color: #673DB6; - margin-left: 435px; - margin-bottom: 0; - margin-top: -65px; - font-weight: bold; - font-size: large; - position: absolute; - text-align: right; - height: 33px; - width: 250px; - -} - -.community-page-post-user-info-wrapper { - background-color: rgba(255,255,255,1); - margin-bottom: 15px; - margin-left: 80px; - min-width: 520px; -} - -.community-page-post-user-icon { - width: 90px; - border-radius: 10px; - margin-right: 15px; - float: left; -} -.community-page-post-user-icon.verified{ - width: 90px; - margin-right: 15px; - float: left; - border: 5px solid #673DB6; - border-radius: 10px; -} - -.community-page-verified-user-badge { - position: absolute; - min-width: 28px; - height: 28px; - margin-left: -28px; - margin-top: -14px; - padding: 6px 6px 4px 5px; - border: 3px solid #673DB6; - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAALCAYAAABPhbxiAAAABHNCSVQICAgIfAhkiAAAAI5JREFUKFOV0lERgzAQRdH7FBQpSKgTpgrQgIPioE7AAg4qAQfLLE0YyBBC+cgH2TObt4n44zOzCmiBXnddQANQA90tmKAJeBbhKZJmhY1GUp8eO4e8zuE7BP5IekV8hSL0sCPwAFZcQiv0xcwOOEzO//0GIc1pjG04Cfa6LNo67nLFzt9cp1hbvI7cA1kA5mlGowbMjrkAAAAASUVORK5CYII='); - background-color: #673DB6; - background-position: 4px 6px; - background-size: 65%; - background-repeat: no-repeat !important; - font-size: 20px; - font-weight: bold; - text-align: center; - line-height: 18px; - -webkit-border-radius: 20px; -} - -.community-page-post-username { - padding-top: 15px; - margin-bottom: 0; -} - -.community-page-post-text-overlay { - position: relative; - z-index: 5; - width: 730px; - min-height: 50px; - background-color: rgba(255,255,255,0.95); - border: 1.5px solid #d6d2d2; - border-radius: 10px; - margin-top: -80px; - margin-left: 13px; -} - -h3 { - padding-left: 20px; -} - -iframe { - border: 1.5px solid #d6d2d2; - border-radius: 10px; -} - -.checkbox-container { - display: block; - position: relative; - padding-top: 3px; - padding-left: 60px; - margin-bottom: 30px; - cursor: pointer; - font-size: xx-large; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.checkbox-container input { - position: absolute; - opacity: 0; - cursor: pointer; - height: 0; - width: 0; -} - -.checkmark { - position: absolute; - top: 0; - left: 0; - height: 50px; - width: 50px; - background-color: #eee; - border-radius: 5px; -} - -.checkbox-container input:checked ~ .checkmark { - background-color: #4F279B; -} - -.checkmark:after { - content: ""; - position: absolute; - display: none; -} - -.checkbox-container input:checked ~ .checkmark:after { - display: block; -} - -.checkbox-container .checkmark:after { - left: 18px; - top: 10px; - width: 10px; - height: 20px; - border: solid white; - border-width: 0 6px 6px 0; - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); - border-radius: 2px; -} - -.checkbox-post { - margin-left: -335px; - width: 130px; -} - -.user-input-text-area { - background-color: #eee; - border-style: none; - border-radius: 5px; - width: 900px; - height: 100px; - margin-bottom: 50px; - resize: none; - font-size: x-large; -} - -.submit-button { - height: 40px; - width: 122px; - font-size: x-large; - color: #673DB6; - background-color: white; - border-radius: 5px; - border-color: #673DB6; - border-style: solid; - border-width: initial; - margin-left: -203px; - margin-top: -238px; - position: absolute; - cursor: pointer; -} - -.post-type-button-text { - background-color: #eee; - color: black; - font-size: 100px; - margin-left: 50px; - text-align: center; - width: 120px; - height: 150px; - border-top-left-radius: 5px; - margin-bottom: -5px; - -webkit-user-select: none; - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TpSJVB1sQcchQnSyIijhKFYtgobQVWnUwufQLmjQkKS6OgmvBwY/FqoOLs64OroIg+AHi5uak6CIl/i8ptIjx4Lgf7+497t4BQqPCVLNrAlA1y0jFY2I2tyoGXiEgDD/6EZaYqSfSixl4jq97+Ph6F+VZ3uf+HH1K3mSATySeY7phEW8Qz2xaOud94hArSQrxOfG4QRckfuS67PIb56LDAs8MGZnUPHGIWCx2sNzBrGSoxNPEEUXVKF/Iuqxw3uKsVmqsdU/+wmBeW0lzneYI4lhCAkmIkFFDGRVYiNKqkWIiRfsxD/+w40+SSyZXGYwcC6hCheT4wf/gd7dmYWrSTQrGgO4X2/4YBQK7QLNu29/Htt08AfzPwJXW9lcbwOwn6fW2FjkCBraBi+u2Ju8BlzvA0JMuGZIj+WkKhQLwfkbflAMGb4HeNbe31j5OH4AMdbV8AxwcAmNFyl73eHdPZ2//nmn19wMlNnKIx2t1DgAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+UCFQMRIYqsWUsAAANZSURBVHja7d27a1NRAMfxb2NaNxUq1T7whQ4uiuLkICi6iYJSQdDVWvs/OHd3sUInVy0qtFgf+B8UH4OD1CqtUkUUa4c2GuuQOxREzEnuTe7j+4GDVXLTy/n9crg5uRiQJEmSJEmSlH8dCT9/F9ADDADbor/r/yrAJ2Ah+vNnlk6+FxgCpoAVYM3R1FiJ5nII2J7m4LuBUUNPdFSAsWg1TZVrwJIBtWx8B66mIfgycMNA2jbGgM52hd8FPDKEto+H7SrBTSc/NWO81eGPOOmpGw1dEzSyD7AVmAU2+XY9VX4Ae4HPIQdtaOAXjQLHnO/U2RhdC0wnuQL0Au/c0UutVWBntHtY99u4EGcaCP85cAeYy9qWZht1AbuAQeBg4CpwFriV1IlNBe5aXWnB5w151gEMR3NZ77xPJnUynYHbvEPmF5thwj47KCdxEjsCTmLGV37sK8GLgPkfqPeJS4EXgPW6G52I4rEWzWm9+pIoQMhHkXNmFrvZJF6sIQUIufr3aj9+lSSyKjmvxWYBLIAsgCyALIAsgCyALIAsgCyALIAsgCyALIAsgCyALIAsgCyALIAsgCyALIAsgCyALIAsgCyALIAsgCyALIAsgCyALIAsgCyALIAsgCyALIAsgCyALIAsgCyALIAsgCyALIAsgCyA/rI54LFLFiB/Qr5D+KMFyJctwEULUExlYBzorvPxi8BXC5AP+4Fp4FzAMQ8I+Nrecsqafho4CfQUPPhOYA9woIFj74dOehrspvblyId80TdlHniatQLsA54B/ebXtOvAapb2AQw/Pq+A26EHlQw/F5aBS0A1KwUw/Pj8Bi4DLxs5uGT4mfYLGAHuNfPWy/Cz6RtwAXjSzJOUDD+TJoAjzYbfygIYfvOqwGPgKHAeeBvHk5YNP5Uq1Pb0F4D31LaDJ4Evcf+icorDXwROAK/tQ3JKhm8BDF91GaT2MWM9oxrw2PVjISqPMr4ClBp85Z8C3hhLPq4BXPYtgOFbAMO3AIZvAQzfAhi+BTD81Gnl/QAfgOO+zy/mCuAmT4EL4LJf4AIYfo4KsGz4xdZL7RZkP9UrsAnDL7Y+aveo/Sv8ecPPv/5oJVh/00c1+jdv/MyYjiZXg8PRzzME/LckkiRJkiRJkqRW+gMZ7X1Vhp5apwAAAABJRU5ErkJggg=='); - background-size: 60%; - background-position: center; - background-repeat: no-repeat !important; -} - -.post-type-button-painting { - background-color: #eee; - color: black; - font-size: 100px; - text-align: center; - margin-left: 50px; - height: 150px; - border-bottom-left-radius: 5px; - -webkit-user-select: none; - background-image: url('data:image/png;base64,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'); - background-size: 60%; - background-position: center; - background-repeat: no-repeat !important; -} - -.post-type-button-text.selected { - background-color: #673DB6; - color: white; - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TpSJVB1sQcchQnSyIijhKFYtgobQVWnUwufQLmjQkKS6OgmvBwY/FqoOLs64OroIg+AHi5uak6CIl/i8ptIjx4Lgf7+497t4BQqPCVLNrAlA1y0jFY2I2tyoGXiEgDD/6EZaYqSfSixl4jq97+Ph6F+VZ3uf+HH1K3mSATySeY7phEW8Qz2xaOud94hArSQrxOfG4QRckfuS67PIb56LDAs8MGZnUPHGIWCx2sNzBrGSoxNPEEUXVKF/Iuqxw3uKsVmqsdU/+wmBeW0lzneYI4lhCAkmIkFFDGRVYiNKqkWIiRfsxD/+w40+SSyZXGYwcC6hCheT4wf/gd7dmYWrSTQrGgO4X2/4YBQK7QLNu29/Htt08AfzPwJXW9lcbwOwn6fW2FjkCBraBi+u2Ju8BlzvA0JMuGZIj+WkKhQLwfkbflAMGb4HeNbe31j5OH4AMdbV8AxwcAmNFyl73eHdPZ2//nmn19wMlNnKIx2t1DgAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+UCFQMROgDJkKcAAAOsSURBVHja7d27i1xlGIDx5x0mmyoqRGI2Cd7QwkZRrOwMhjQxghJB0MZCjUlhI2KztZ1gJYFgYWsWVxIhxMt/ELwUFhJjyBp2RRRiiuzGzWuxUynofOeye86Z59cF5swcvvc5Z2e+DAxIkiRJkiRJGr5o88kzcw7YAxwA7gHmXPKprAOrwDKwGhG3ehNAZs4DR4HngIPATudZyxrwFbAELEXESicDyMzdwNvAWw69NbeAj4CFiFjtTACZ+SbwHrDLGW2J68A7EfHhtgaQmWPgfeCkM9kWp4CTdd4jRI3hzwFngUPOYVudB56tGsGoxgt/4PA74TBQ+U/BqOLVfwJ43bXvjFcz840t+ROQmXcDl4A7XPdO+RN4KCJ+bfsOsODwO2kX8G6rd4DJJs/PuKPXVWvAfSV7BOPCFzhaYfjfAJ8AlycbGfp/c8D9wDHgsYLjdrK5A3uqlbPKzM9zeuuZ+VpmhvOsvN6Rmccnazmtc22dzI7MvFlwIn5KaG7tjxes+83JBl3jJ3FvwUlc9Mpv/E7wbcH6H2jjU8B8wWPPREQ6umZM1vJMwSH72ghgb8FjLzu2xl1q42ItCaDk3b/v9pu33sasRq7rbDMAA5AByABkADIAGYAMQAYgA5AByABkADIAGYAMQAYgA5AByABkADIAGYAMQAYgA5AByABkADIAGYAMQAYgA5AByABkADIAGYAMQAYgA5AByABkADIAGYAMQAYgA5AByAD0L3cWPPa6AQxPyW8IXzOAAcnMu4CXDGA2hz8GTgO7pzxkBfjdAIYx/EeA88DzBYd9VvKzveOOlX4EeAbYM+Oz3wE8CDxa4dilkgePOzL8B9j8ceTHve5ruQp82asAMvNh4Gtgv/OrbSEi1nqzD+DwG/U98HHpQSOHPwg3gJcjYqMXATj8Rt0GXomI76ocPHL4vfYXcCIiPq36BGOH31t/AC9GxBd1nmTk8HtpEXiy7vC3LACH34gN4ALwVES8EBE/NfGkY4ffSets7ukvA1fY3A4+FxG/Nf1C4w4PfwU4GBE/2EN7Rg7fANrg8IcmM4/l9DaymuXJnUM9vwOMKl75hyLiR8cygPcA3vYNwOEbgMM3AIdvAA7fABy+ATj8LtrK7wP8Ajzt5/zZvAO4yTPDAXjbn+EAHP6AArjh8GdYZs5n5m3/V2+2I1h0+LMdwL7MvPIfw7/q8Icfwf7JnWDjH18AWcxMv/jZM1HnbgA8MfnnxYi45nJKkiRJkiRJUhf9DSNBEBI1q2RhAAAAAElFTkSuQmCC'); - background-size: 60%; - background-position: center; - background-repeat: no-repeat !important; -} - -.post-type-button-painting.selected { - background-color: #673DB6; - color: white; - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TpSJVB1sQcchQnSyIijhKFYtgobQVWnUwufQLmjQkKS6OgmvBwY/FqoOLs64OroIg+AHi5uak6CIl/i8ptIjx4Lgf7+497t4BQqPCVLNrAlA1y0jFY2I2tyoGXiEgDD/6EZaYqSfSixl4jq97+Ph6F+VZ3uf+HH1K3mSATySeY7phEW8Qz2xaOud94hArSQrxOfG4QRckfuS67PIb56LDAs8MGZnUPHGIWCx2sNzBrGSoxNPEEUXVKF/Iuqxw3uKsVmqsdU/+wmBeW0lzneYI4lhCAkmIkFFDGRVYiNKqkWIiRfsxD/+w40+SSyZXGYwcC6hCheT4wf/gd7dmYWrSTQrGgO4X2/4YBQK7QLNu29/Htt08AfzPwJXW9lcbwOwn6fW2FjkCBraBi+u2Ju8BlzvA0JMuGZIj+WkKhQLwfkbflAMGb4HeNbe31j5OH4AMdbV8AxwcAmNFyl73eHdPZ2//nmn19wMlNnKIx2t1DgAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+UCFQMRLhoTRNoAAApNSURBVHja7Z1djFVXFcf/C2SoBQXa0joN2gKO0g+IZRgjykwjpdUXqWhLbCWx7UMLTU2TxhdMm9jUJhpp2ppYqygpBBAsLY1Jq1E0zgzDwwzlSwY0pZSqZdRWoAVbGGD+PpzdeHOdmXv2xzn37HPXeiEhe/bHWr+99trr7L0voKKioqKioqKiolItJG8h2U3ydZL7SD5JskU1U37DX0ByP0eWAZIbSa4geQ1JUa3FJzIKAP0Arrao6y0A2wF0AegGsFtEzquKIwSA5C0AnvWs+ySAHgNDF4A+ETmjKo8DgC4A7YHbOg2gF0Cn8RQ7ROSUmqCYABwGMD3jts8B2FXhIbaLyDE1STEA2Adgds59GQJwwHiIbgDdInJUTVQfAH4I4JsF6N+AWS62AegRkX41WT4AfALAXwrY338Y79BjwNgtIkNqxmy2gUcBNBe8/++YwHKbgaJXRAbVrGEA2AjgtsjGcxLAjorAsle3nu4ArADwVOTjOwdgb4WH6BaRE2r2dABcA2B/ycarW08LAATAPwFMLbkODld4iE4ReV0B+B8EWwF8OVBbrNVeQaShtp61AHgAwGMB2/s3gJ8C+DiAhQAujkBHpd561gJgHoC+DBS6UEQOkpwBYBGABQCuB/CxCHRWqq1nLQA+AOAYgA9lBUFVezMMDJ8z/14dgQ7/A2BPxbKxXUROlwIAY5TfAPhCRq71/yCoarvZgPA+FNcBGKNbzxyF5LeZnQyQvMqiL1NJLiH5OMmdJM+x+HKW5HaStxXx1FQaD9Bu9sxZBlmjeoJR+vZh4xnaAXQAaAPQVOD5tAnAsiKdlEoDwHgAJwBckOFWzxmCqr5+EMCnTUDZDmA+gAkFg+AhEfluNAAYxXaaGZZG3nRMHgWBYJggtrXCQywAMKXOOj8J4DIReS+mOOARizXv+yT/nkdM4DCOMSRnk7yP5GaSR+sUFyyKLRC80WJwvyLZUlQIhhlbC8m7SD5D8nBOAKyMDYCJJppNI8fMTIsGgqqxTiN5O8kfk+wnOZQBAFti3A72WgxwTsXsig6C6p0GyUUkv2e2c2cCAPBajACsshjgfVUuNmoIqvQwwQDxHZK/I/me49guiQ2AxRaD2zzMOlsaCKq3niSvJ/kQyYMW47opNgAuInk+5eCOjhBslRKCijEujy0QTJ1XNydnDqQs3lx9g1hEXgHweQBvOPTzIwD+EAEEOy3KtkYFgBGblHDHMBCVHYJ9AAbLDEC3Rdn2ETxJaSEw5wLSniC6sgiBoC0Anb4ANIAneNmi7NyoABCRAQCHUhafQfKjDQiBDQCtsXmAIMtAySHYqQCkBKCkEEQXCNrudWda7HX7LeoNnicg2WRy+58heTPJDpKfJDkhYx3tKm1G0AzwrykHN0Ty0jwhINlM8h6SL5E8PUr5PSQfJjk3A/2sLm1G0AzwFxYDXGJZtw8Epxw/1vSQXBBQP9FkBF1P2AaNAwLGBBPgdibwswC6SK4nObHRAkEXwq+1IHynYxs+nsBH9pGc7qmfJgtPFOWnYSH5ZsoBniM5KTII/uW7s4glEHRaAkSESG7CpJGxSE7nurTjsxz4yFQAL3oaJoqMoM8tm8zigIJAMB3AJpJjcgCgtewAdPh0so4Q3AD3Z3KiCASdrypZXhwdBDBFRN71XFdbkLzwMTFHHR0BMMv2rSGSTUjuAKTZlRwRkelReQAROYfkQaY00oTk2pavnAIwPmcdXQngGw76ieLTsO9N29yWASOLAYyz/Ju9AB4E8HUkj18+D8D2bt6tZQ4EfVxyu8VW57cB2nvJcjv3g+Fu5JK8juSrFvUMkpzs0N/ozgjaDnC8xbHoUyTHebQ1rkZuv1oeq1HfTJInLOr7ikOf5xX9sojXEmACo96UxScgeeDBVZot1v89AL5Vo++vAlhl0f4VDn0u/KfhEK9teB0UtQQgrWwxyapa8pxFnZeXMRAMAUAuCSEAl1qUTfvWn00e/rIcAsH55pLJV0nOyeNFkRAA7EDyLk4qADwya+9YlJ0cuJxt+64APAvgjwC2mN3LAZI3FhoA87Mvu1MWnwLgWsemBizKLgxcDnDPQtpkBKtjnFkAfk3yjiJ7ANs4wHUZsPn1kMUkP1VrBwNgZUbtuwaCw8lYAGtILi8yAJnHAcbT7LNQ2nMkZ45i/GcsvVGPY79tAsERqwHwVFYQhMgH2FwcHfBo52HLRNBxkg+SnGUOaTSbxx/+ZFnPfk/9rA50TmGoyBDYKLXFsY25dXrT51FP3SwP2JegEIR8dTPzfICI7ALw+5zZPg3gac86Xg7Yn6DLQUgAbOIAnxO4K5G8R5iXPCEif/OsY69nIFj8mIDk5RZu7LBnW+tzcv0DLh+BhunvhSTfzaB/50neWSQIXrHo/DSPdiaS3Jux8c+Q7Ahk/CzfI/SKCUK/vJ3L+QCzJbwZyaukWcndItLla3wkt6mz/Pk9r+UgNAB5JITeh+AIkoei/xx4DGcA3CUiayMwfrFigqwujqbIQWwLuObPD9AnX7ffF21MYHGRYyjU509zUeVWkoc81vsnAwZ8PsZ/whx+eT7KZBHJjVldHE3RdhPJu80DjoNpvBDJR30C0sDGX1tRVy4QSAYA3AvgRymLPy4iD2QE4mQkdwmuADANyff840i+Kr4BYIeIHArYnu+av0FEllXVOQ7AZgAuE4UA7hWRp/P2AJlfHC1gGtx35q8fpe64loO8Lo6WyPhrU7QxjuRWj8BwSd5KecGig19U46dqyweCEyQvyiMP4JIQao/V+J5r/joRSX3jSETOAlgK4AWHtiYhuRiTm3LaLOjs1plv1barJ1iTpwfYjeRiZBppY/JrX40y8zfYzPyQXc8NAMuLo+OR/NRbo7j9ZT6zH8Av4faL7nvy9AC2cUBHAxh/jc/M9zT+2wA25K0wm4ujB82xqTZzYLNsa/7PPduPaxtoOm1zcbRSzpoU7TqS95NcUM8YIcskTw7GHyJ5Tz1nTmegr3R1gUKN76/AR5idDJqn2FZnsXzUc6tXCuObQdyU8/HtIFCo8cMBYPOLo1mJ1fKhbj88BF0sngzrKXTmZwPA7YxDBj2PbqvxRxiYWJ4SilHU+DUGOJbJT6u+rcYvlvElZxAuRHKUex6SR5FakTzEGKusq2N6lwBWiMhPogFgBCVMAjC7AohWAFcVoW81ZEMdP+wEMX6Rl4yLTQ5hJcktJF9Ttx/Rmp+VpzB7+PvNnr7fKCNv0X1+A0NRz5lfrJvADQiFGj/ymOJLtHtruFJ+psaPH4IORwOsUuOXA4DFDgboo/8L52r8ggAwx9EQW10gUOMXDwAxZw8zh0CNX1wIFnqcT0gFgRq/+BDcwfSvmlpBoMZvDAheHO6YmWb4GhgCNX4DQ6DGjx+COz1jAl3zG9wT6MxXCNT4CoEaX2MCXfPVE+jMVwjU+AqBGl9jAl3zG9sT6MxvYAjU+A0MgRq/ASBYyuQXSavlOMmlsY1H1KROEFwC4GsA2sx/9QHYJCJvqXZUVFRUVFRUVFQKL/8FM5F/qoire/AAAAAASUVORK5CYII='); - background-size: 60%; - background-position: center; - background-repeat: no-repeat !important; -} - -.post-textarea { - margin-bottom: 0; - height: 299px; - width: 835px; - margin-left: -4px; - padding: 10px; - border-radius: 10px; -} - -.post-memo { - background-color: #eee; - margin-bottom: 0; - height: 300px; - width: 835px; - border-top-left-radius: 0; - border-bottom-left-radius: 0; - margin-left: -4px; - text-align: center; -} - -.post-memo-preview { - vertical-align: middle; - text-align: center; - margin-top: 30px; -} - -.post-user-icon { - margin: -15px 0 10px 50px; - width: 100px; - height: 100px; - border-radius: 10px; - float: left; -} - -.post-emotions-wrapper { - margin-top: -25px; - margin-left: -655px; - background-color: #eee; - width: 305px; - padding: 20px; - border-radius: 5px; -} - -.post-emotions-arrow-left { - position: absolute; - margin-top: -59px; - margin-left: -680px; - width: 0; - height: 0; - border-top: 20px solid transparent; - border-bottom: 20px solid transparent; - border-right: 26px solid #eee; -} - -.post-emotion-radio label > input[type='radio'] { - visibility: hidden; - position: absolute; -} - -.post-emotion-radio label > input[type='radio'] ~ span { - cursor: pointer; - width: 40px; - height: 40px; - display: inline-block; - background-size: 40px 40px; - background-repeat: no-repeat; - vertical-align: middle; -} -/** - Emotion icons created by NinStar#8700 on Discord - https://ninstars.blogspot.com/ - */ -.post-emotion-0 { - background-image: url('data:image/png;base64,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'); - padding-right: 5px; -} - -.post-emotion-1 { - background-image: url('data:image/png;base64,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'); - padding-right: 5px; -} - -.post-emotion-2 { - background-image: url('data:image/png;base64,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'); - padding-right: 5px; -} - -.post-emotion-3 { - background-image: url('data:image/png;base64,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'); - padding-right: 5px; -} - -.post-emotion-4{ - background-image: url('data:image/png;base64,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'); - padding-right: 5px; -} - -.post-emotion-5 { - background-image: url('data:image/png;base64,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'); -} - -.post-emotion-radio label > input[type='radio']:checked ~ span.post-emotion-0{ - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEUAAABFCAYAAAAcjSspAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5QIVDzgyQ05+GgAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAqdSURBVHja3Zx7cNTVFce/5/42L4EEogg6Vu3I01eS3WAbcDcbREdpxWobaUeLtFrEkE0AH5UWa9RiBal5bPCBVXxV2wQqHWbU+iC7G0AZkl0SjJWHYktFwAYNCeS1v3v6R0JV+N3d3z4S4p6ZzGRy35/fveeec+69IZwCWZS3JS2opU6ABaOhYyQRDQPJFGZxlEgeY6J20avt6+zq/Xh1Y27vYPePBrqBMmed5YvgCBuEKADgYGAygPNMtt0LYC8IzSTZK6RWV745u+VbCaUMLA7bAwVMmEPAjwCkx7H6zwj0Vwl6we3LDgx5KK7vvZcuUpKLJFBEwHcG4YvuYOLyrg5+KZ7LLC5Q5s1oyEjtFXeCUQxg1KArKca/SNCKzg796XjAiRmKK7/xWmJ6HMA5OPWyi4iKK705b50SKAum+8/TgrwGoIIY2u8E0AFQOxN3ElMawCMBDAeQHO28YeBFdPe43Fu/f2TQoJQ6/LMYWAMgM4JiXzLgA3MdNHpfBOWuyk22fQCx0Y7VhvTzg7qYSGArEZwM5AFIM7+isEdjObuiPtc/wFCYSuzbHwHx3SbLHgHTOqHhhU9H766vrb1Rj3ZKzXXWpY6Q6TMJNAfANSZnUjcDRW6f9dkBgVJYWKOddXDcagC/NFHpIQY/0ZXM5avfzm2Lt+Jw2f2jiXgBQKUARproz/JKn/XeuEKZ66xLTZcZ6wDMDJO1g5kexPDhVe7Xx3cPvGXckhlM6n6AgDsAaGFmeWWVz7rIaLlGDKVvhoyvBfj6MFk3sNCK3J6s/wz2luNybM8B5J8IsIYZ7rIqX87SGKEwuez+p4joVyEyBRlY6vblrDDzFQYMzDW7U8TR9hUMuEKNi5gXV9bbyqOGUurw38nAyhBZWgXh2gqv9V0MEXE5AjcR+NkQilhC8A+qPLY3Iobism+/jEjWh6h8v4S8utqXuwNDTIodjdMF6NUQPtfnmkXklG/M/tQoURj9caEzMJIga0IAOaBJ3T4UgQBAtc+2kRmzAHQpsozWg/LlMrAwPVNK7f7HmXCHokAbCXJWeHK2hzfyGmcz6GcABAi1VV7ri1H5VraGpJTTtIVEfCUIrURyVaUnd1O4ciX5jdeDqVa1MzGhyO21PhEWSrHTnysktipmETPxdW6vbUP4DvkXg/HHE6zM+9w+6+8jhVLi8K8F8OOv6wUiutqMj1NiDywB8cOK5C96gtqkJ7dkHQqxfJiExCrVsgKj3AwQgAmMpQZfYEmZs84SoaF24QlAAEAw82/NlM+sz17OwD8UyaOSLfofQuoUl337TACXKYbZknk4ZYmZjhQ5t41RhBBOa0P6+ZE5IjxJsYwnmwt4kRRJSbcA+FKRZY5resMFSiiCeIl6mxKuspaLesx0JEUkK61L2WvRImEiSGgKh890PZXvXHKQmO9TJFsoqN1jCKXU4XcwME1B5C9V3uw6fItl/9iPngDQrFjuc4un+c8+CYoEblV64aQtw7dcamtv1IlIpeSThYVv/gaUu65qGkbADYqFs77Kk/U+EkBGebPXAfhAsTfc8g0oPd36Df3RrpPzCn4cCSJlIAnQakXyhX2O5VfLRxUS+PTA6D11SCDpCYpX0HeeZKA69Zn9UJjAcCrUySuxRMuGojy5JesQGO8YQ6HpACBc9sBkAGMNM5F4E4koAm8ptvmpi/K2pAkimqIo2puUIrYkJBOijYqkVJmcdrEA8USFxdi08s2so4kIZaQnuxlAh7F1KScKME0y3qHoQySo9O1CvNvYAqGJAuALjInxrmgb7e2WyrBkkDiikKWUyvwxhT6JjT86E8YJMDKMFx5HHYA+I6ntEIBjRkyS9WP7IqmLNXyiSNobm2JRjE/H6QKkMNoktUc9PT0FQTCeMUh6vvzdqZ2R1HVw9J4AQFsNpsmTsTBRjk8gQwAYYTi9NO6IqdHhI+4GaBmATwD8m4gf1Xq7XNH4LD1BMQtELwE4COADBs+P9NTvZKis+OicbhkoZdZ/GLa0/yd2gwv4eXxNFePzGAKxUG1NrNNwJLBIQYYrhJmOCDAMpxEJHpHIUIhV45NtAkIRppN0DhKaivH4CNQqiPGRAuXEhIbCMDZaBfYIyfyhguSkxLVoWQAYZzhsybuEINqpIHlpkbMlIZVtq6MpC4qgmq7Rh4LA2xRlk5L0rmmJGTmQ0xVJXR1oe19U+Gz/BPCZ8WShqxJTnfBVioRNz3kKuo6HI41DjoSfFhbWaIkEZP7UpjPRH2EzGPDGfsMOYNBrijrOHntwwhWJBCVFC94EwGJsuPFr/4eSkirWQ+ELEGRRogApLKzRmGi+ImTQ4t5kbcJxYivfzDpa4vD/DcAtBvlnFTsaLon1LsqivJZMPbnrOoDGEysO8BXhGQbv4GHpf4/1cuFZB8YVgjBBYaw+f/xXy1ek+Bn62oHQNyx+Er8DUBhtZxY6Gifr6N4IprHRRYcIdLS9ed6MBke0V1DLnHWWVsZSxa28bg36S19zFvu9Wq+tnoDNCq38kxK7P2rdIpkeg+LEIAK5NLVH3Btt4VY9vZgYFxkjx3MV9bmfnQQFAHTCshAfq9p1ze6U6PwMTImLu6K4JhJOiqf5zyaiBxTJQR3a8hPCCl9Jtdf6OoD3FIUnUUf7o1EOZm88oHAU9RQW1miahhehuhRIeK7al7VXCQUABMsFAHRFBS6Xo/GGyAdD9yvrNF9LO0DLI1auB8cvZUBlwR5OIrnE4COeLC6H301AsapzUtD0ao+1ISJlm+/Pk4zbwDg3wsCHZNAui9TLyzdN+TiSov0XEV+G4rpaX1jT9pQpKPNmNGSk9ogAgO8qlsMhBl1e5cvZPVRtkhK7/woQXoPy2ivXZfqsM/rOgE70jQxk9du5bUQ0G0CPYm2fCbBvoTOQPRSBlOYHrgTxqyogBBySOt1sBEQJBQAqvTnbmPnXIdoeKyXXuez+/CEFxOG/tc9cJ1U4VUqBm6o3W/eH2BjCNlLJQEmILEGAl2X6rA+qyA+GzHXWpWbIjOVh+gomlLq91qrQoYUwsn/MnsUgrA2RxQLQ/YcdgTdOvHo5WLIw35+XLtO3hQNCjAfDATE1U4C+ZyN0rGMtmH8YJmsXQI8kp4qVg3FjofSKHWO4t/dhAL8IOxai8ipvzmKTdpV53+ELTn+ameaayP5fgCuEEKsqPDlfxh3G5Q3nMom7QLgN4R9bMgNL3D6raRsn8oeVju0PAfwbk2U7ibFegv58+uHkt8xeTjaSe6ZtGtEt0q6TRDcTMAPmLhd3gnB7pA8lonqCW+IIzAT4eQBnRFDsGIDNROSRkDukru3s7QzuNXpxvihvS5q0pIyXoAkA54CogIApquCQQoHsZJ1mH4+RDDgUAHA5m84hXV8DwowYV8MR9D3Y7gJ4GPqi7MNic5GwJlU/tnDF5sujujkRl2f9YFo1GP/wwYQ0k5ALzLwFimlLDidur20DunsuZsL9AA6fIhh7QXx7pmizxQokLjPlRGXYKYbNJ/ACEM4bcBSEJmI8Nkq0vVzmKQjGr9oBkDKwaLUH7ESYA+B6xPHfhzCwD0CNYH6hst7WPDCsB1gKC2u0MZ+PyyGdCohkPiAmA3y+yaXbA+BjgJqZ2COC2sbKzVk7B7rP/wPKTvywnS6EEAAAAABJRU5ErkJggg=='); -} - -.post-emotion-radio label > input[type='radio']:checked ~ span.post-emotion-1{ - background-image: url('data:image/png;base64,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'); -} - -.post-emotion-radio label > input[type='radio']:checked ~ span.post-emotion-2{ - background-image: url('data:image/png;base64,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'); -} - -.post-emotion-radio label > input[type='radio']:checked ~ span.post-emotion-3{ - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEUAAABFCAYAAAAcjSspAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5QIVDzoGUMzoLQAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAA2GSURBVHja3Vx5dFNVGv999yVNoVAw4IoMboDH6tC0BYS2aUAWGTlz3FCGwWXmzHAQadqqwzjj1qMOKC7QBR2Z4RxZjor7hjqIbZIWy9IkRU9RqKCoKCpla4ttkne/+SNVSnk3TZqGot9/Se793n2/+93ft7zvhdALUjSxbogMyQslU38imQLCQEghSeAwk2yCFEd0c2DHsg/GNvbG+ijRFyi44uMzEQw4AJrAhCwwjwCof5TTGwn4lBmbibnSwj+6F2/MafpFgjLPseUss679gQk3AZTeg9cJAVzFLFb1kS2vJAqgHgVlfq4/m4gXEPA7AKYEb+hRAC+Qri0u2ThqxykHijOvbgJLeT8RHL1AAZKBl0y6eGjJxvT6XgelMLf2bAnxKAg3ofclRMBTsi1wX9nmy4/0CigFef55zPKRGEjTSA4y0ExACwANQAqAfgBS49D5tSTMKXdnvHvSQCl0+Aey5BUMXBvDNAbwMcCVBNRIaDstybTz8fWjWowG35bz0WlJCIxgjS4BUw5ADoAviOl6TI9ZtUP3FLsmhBIKSlF2XZquybcAnB8lEj4wr9Y1/YWnXGP2xWPSt+fUjTCR/CMTzY4WIAI2moS8+glX1v6EgJKfWzeGSK4DMLhLLIjWMcl/lbkyNyWCPPIdvkmQeJCAcVHszC42y6llFVm7ehSUglzvVCZ6FUDfLoZWsUR+WXXGtpPBrE6H90pIKgEwoouhe5kxpawqY3uPgDI/158tiNd3AcghgApLPemrAOKT6XLypzVYqLlpAQj3ATBHImCSMrukOuvLuEBp5xAPAGsEDV7W5I2xmGdC0ok8/2hmvBCJbxj4LBjSsv/94ajvI+kSSkDG1Vt1Tb4TERBgpXW/ZXxvAwIAJW7bVi2YNBpM1REs4CKzpq+dMeNFrRugMIWSWlcA+E2EC5RaPbY/F9enBXCKyJKatAPcr98kEF5WrpvgOGffRffHfHwKcr1FTPSkWjE/VuLOXIBTVIodlaYDPPA1ME9XpQYSPLnck1kRFSiFDv95UnJ9BGJdWeqx/akzoRaN+7BPyGyZBsaVBBoKgdOJwQx8D9DnAN5pbdHfX+7NCsZEpGM3pZLFMp1ITmZJ50LgNDAkiL4D0CBZvj3Yk+EqBsmO8+Zk1va1pIgNSrfN2HVEO3zps64JrV2Ckm/3vUHA7xVEVdPWIvM631iB3XczAwsBDOniHhsIuKvEk/FmFKEfOe11ToDvAzCoi8F1zCgsq8pwd/xy7vhtZySZdD+AcwwtgvFgSVXGAxFByc/1X0XEb6vyFN0E27KKjD0/mylYHLD7lwGYG0sIToyHjBbzk9zqqExOlQPWALgupoSQuaikKrO8k+U7pOQN7blVZ2nVpJ62pHr0biXREvEDEehnfkdAAOCg3b8wRkDCG0S4Pz/P51QNSNUHLI8REAAwMVGpM9c3s+OXS102F5ieUMxJDpG4W2kp+fa6KQT5P8VkT6nH5ujIIwU5tWNZiJo4Mu0gQGmlHlvD8dbqu54IL8XBs80hERreMdeak1nbNzlF1AM4z2gdugnDO264OIaOfrfiIjozbutMrEzi4TjrMWYw32fgMh+M0/n006Tpro5fLPdmHSWw6v7MphAVnmAp+RNrL6SQaDC6SQbWlnkyZnbazdOJ8K3inP7IzGtAtIuYBBNfTMAsRXnyCKf0P6Ps3eFtADDfXnuZgPhI4SYPM2MVE/YKIo3BNjCuU6z5qzKPbVjHjWznv48BXGKgvtHaaDnnp5jLBAAUopsUu86aoEcMljgGYMOoUIKnl1cd7/+ddu86gNYa0YfWfDgNgA8ANNIuZzZMnQI6ZG55VdbH0cRTBAy9w7713Cc9+OoYKCSd5HsEjFUG+gcdsAamAXjj2PFhmq3wExuXumx1Bhc9W2GK3xgFRFZPxssIV9dOvATTOR0AVendVu45HhAAEKHklaozpEtxghu27resBdCooP+fS6qiIHvbSBAuNE4C5GpjU5bJirUcNowww4GVcd1UE306gJ2sCLQM9Q6oueSQ0sWZtD4nrKM+LQDwWkWkMGVOZq0ZAAQLfYLKOwR1s6EXYAFVvtMnQj5hGCGzPKaLJIKKyYZzv3dsV5YzpDReo2TxnGKF/S39KTN8fAgTFXq3Pl3924PGVxTfKeYMy8/1nUBkBY7aHAYGKMp03x6zTFLpHVWYW3vC0TLL1quUoEB8a/T9YO3QZpXVChYTw0TLGGNEsczsUp5XM9dpIbABORMI7znt3keJxE7JRETyUpZQucO2PrL5k2OT2a+oUKVIEhUFdt/jUmAPgU0sKYvBqqS0cbA48JXhUXZNCDnt3iqArjK45zELsqv7m0AYqqgqfKgCZVlFxp4Cu8/LQJYR8wNUzswgcLiOr5b1HR99DnTbNh+w+/cqcqiLGfhvOO2j9t1QhkmvR6zis9gIYiMrG9lKfUYIVU3FpMmIjyKZ6eE4gywWhEWdCZmIFsapNwjQo5HrJbxT8dOFLExpqspbYACOfBFJcWmV7Q0gnnCcS5e6M2pOiPya9f8AcHdXKxEVd04dTgy+NNWGmwWkTQXKvmgeIrW2yFsBruzG2l+xiiN3Gf2w3JsVNAt5PYC6mAEBnilxpy/qapyA/FqNGAarQGmOZhHLvVlHW1t4KsCPA4imLNlCRPeUemwzIoH+hCtrf1KylgNgBQAZhd6DYNxW4smYG83ThL2nNzRBwXYMOZCcdp/Bj7S51GO7PJZdKsrZeoEk7RYmTGuv7Z7ZfkPfEbCbmdZJySvLN2Z8E4tep2PbpcShm5lpMoCh7QUnHcA+AnaA+W0RSl65pCbtQEx67b4Wo+oiMXt6DJRfmjjtvqOGwSbDLRSlsX6/ZkDaH3Eoom9uEgqySf01gzLkh+H91WQtDpkULH5msaPS1J02hs4Srr3QPDAmgYwLyF247hCAPcT8pgi1rVhSM/7HeNckIc4N05Kh/KDqS0s6IAeeD6AhnosX5vqvlsQrAU6Ns5FsBBNN1s3JdxY6/NcYlTNict26PpKN1xNgwX6hcnkk5ci4LMReN0USvwT06FE8T0reMN++7fy4tAhS3dsu6LxdAPhSEYNndxuQaQ0WgnwGiemQHCRIlsaVXzBnKxzMjpApeYcAaItirqPbG9HSNBXGlfOeEear7rBvGdqdqcWOShOAHOPTIbY85UprFgxZoZifVTSu3tqtNRMSHeNQkE1juzOxkVPHqY40sV4RLjhKTZW7mHRT2w3dAkXy4ASDAiHojG6hyTRL4XEPn2Zq8gKAWFadvpOBzxROu1v9sSQo4T3/kFLEfHTS6pMA3GAcmmH9TyGIaC/ZrFHoGe/M8Wb+WoK2RmtgFhRNSEy8+lgWDUCTodWqrBGC/hG7iaojox7jWlBMgeWMGS9qJKSqLLq/rZnfOw6UJdWjdxOg4pZr5ttrL4ttwbwv8ftO38Yy+qzvhs8EK+ITotUd20t+PpdSYJGS0yCWARw9T5DmTjAiIT0pUB3t4AXZ1f0JvFjxc5umHd+V8DMoZa6MDQBtVkzMLbD7oyZdq3uUuzuVsxhkVSxvjbWKvsVQNe4Azy6pSN9rCEr4kyyOoLu0KGdrVO3fxSBJzLcA3NTzXILPtKDlb1FH1w7fJBAKFT//SAbPyo8DpdSV+R4Tv65YzAAptLXtbq1LKanK/Iih5QHY2XOBLFwaS3u0VbbC3NqzSWINFE8smPDIUpftCwPrOV5un+gbpoVQj/BrJkbynNVju6lz451K5mTWmvuk0LUMmsLAEGJosfEpAgzsFkRvlrht70c7bZ6jvp9JtlUAGK2yuCZx+LKoGgEBID/P5yRGSYQ9Kyn1ZBaeqvHInMxasyVFvEXAVMUQXQiatNRlcyl4xtiwCuz+lyO/00PLrJ50Z7QWc7LkrinbUgKt+osIv8eoys0eKHNnKDumhCr8CkjTXwB8HsFabm+0+5+71VGZfKoAMnf8tjMCrXpFJEAAfDDIbYv4dFOZP4Q7DmgqAd+rjztuTJUDvEXZdWm9DUh+ri+vvWd2TIRh27Wg5YaurLvLgKwwzzdOMjYg4qst3ASmBdYq2/KTfZzmZNb2Te4n7gVjAaAmcQa+gtDGl7lGfd01t0ezC+F20lcjeKSfZCtJmV9SnbU58XAw5dt91xDTkyAM62Lw11LIyeWurE+jc3hRSnvf7Dp03RIOgNcz08LObeE9IcVgcTCv7jpm/ieA9CimfEJSXhnNy08xgwIA8x21F5MUbxFwUZRTtoNpjdDwvFGQFIsUOvzpzHIWh4tEQ6Kc5tbNweti/SOJmItB+WM3pcKStJyAG2Oc2sDMLhKoEaBPg6bgTtViiybWDdF1jGDIi4mRA2AigLNiKUEBtMgqDhUn/BXcjuLM884hpsWqXrYoJQCgGaBDAAuEdaVGIswo5EuG+GuZJ319t4sS8Zj0PMeWs0y6aTEIs3ES/nakCwkS8LRFP3pvvP+W0SM3kp/nzSWmBwBc0Qtg6ADWSiEfita7nBRQjqXp3svB+DsxTUfi/yqkBYTnNeJHl7gyP+vRml6iwm2zWZ9JjNkId1D21HWCAFeCaE2ILK895UprTsT6E84DdzpqBwd04RDARCZkARiJ6J8v/wDgUyLepIMqJVmqEgVER/k/r3BkxjY5BE0AAAAASUVORK5CYII='); -} - -.post-emotion-radio label > input[type='radio']:checked ~ span.post-emotion-4{ - background-image: url('data:image/png;base64,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'); -} - -.post-emotion-radio label > input[type='radio']:checked ~ span.post-emotion-5{ - background-image: url('data:image/png;base64,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'); -} - -.post-screenshot-picker { - margin-top: -25px; - margin-left: -605px; - width: 220px; - height: 80px; - border-radius: 5px; - background-color: #eee; - text-align: center; - display: none; -} - -.post-screenshot-picker-icon { - background-image: url('data:image/png;base64,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'); - background-size: 32%; - background-position: center; - background-repeat: no-repeat !important; - width: 215px; - height: 80px; - cursor: pointer; -} - -.post-screenshot-picker-dropdown { - display: none; - position: absolute; - margin-top: 14px; - width: 215px; - height: 293px; - border: 5px solid #c4bfbf; - border-radius: 10px; - background-color: #eee; -} - -.post-screenshot-preview { - width: 180px; - height: 100px; - border-radius: 5px; - padding-top: 15px; -} \ No newline at end of file diff --git a/src/webfiles/ctr/all_communities.ejs b/src/webfiles/ctr/all_communities.ejs index 3415261..9ba85fe 100644 --- a/src/webfiles/ctr/all_communities.ejs +++ b/src/webfiles/ctr/all_communities.ejs @@ -1,60 +1,31 @@ - - - 3DS Testing - - - - +<%- include('partials/head', { title: lang.all_communities.text }); %> -
-
-
-

- Check out the communities for the games that you play or games that you're curious about! -

-
-
-

Communities

-
-
-
-
- -
- -
+
+ + + <% } %> +
- \ No newline at end of file diff --git a/src/webfiles/ctr/communities.ejs b/src/webfiles/ctr/communities.ejs index 94188d9..1c3994b 100644 --- a/src/webfiles/ctr/communities.ejs +++ b/src/webfiles/ctr/communities.ejs @@ -1,92 +1,58 @@ - - - 3DS Testing - - - - +<%- include('partials/head', { title: lang.global.communities }); %> -
-
-
-

- Check out the communities for the games that you play or games that you're curious about! -

-
-
-

Communities

-
-
-
-
- -
-