diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..193305a --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ + +__pycache__/ +*.py[cod] +*$py.class +*.sqlite3 +node_modules/ diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/NOTICE.txt b/NOTICE.txt new file mode 100644 index 0000000..6f1a5bb --- /dev/null +++ b/NOTICE.txt @@ -0,0 +1,740 @@ +Copyright (C) 2022 Félix Aimé. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +The SpyGuard project is released under the Apache License, Version 2.0. +This license applies to all code developed by Félix Aimé. +The SpyGuard project contains third-party software that are under different +licenses. This file contains a list of the third-party code and licensing +terms. Please note, however, that this file may not contain all the +licenses of all third-party software used in SpyGuard. + +======= +SOFTWARE CODE +Information about third-party software code used in the development of Spyguard. + + +TinyCheck (commit ab3f5b584e8d1d23650f638948f28734e62b4e56) +Licensed under the Apache License, Version 2.0 +----- + +Copyright (C) 2020 AO Kaspersky Lab. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +The TinyCheck project is released under the Apache License, Version 2.0. This license applies to all code developed by Kaspersky. +The TinyCheck project contains third-party software that are under different licenses. This file contains a list of the third-party code and licensing terms. Please note, however, that this file may not contain all the licenses of all third-party software used in TinyCheck. So, please check the top of all the files for any additional license statements. + + + +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +----- + +SQLite (Public Domain) + +The author disclaims copyright to this source code. In place of +a legal notice, here is a blessing: + + May you do good and not evil. + May you find forgiveness for yourself and forgive others. + May you share freely, never taking more than you give. + +----- + +dnsutils 9.11.5 +Copyright: 2004-2017, Internet Systems Consortium, Inc. ("ISC") + 1996-2003, Internet Software Consortium + 2012, Vadim Goncharov + 2009-2012, John Eaglesham + 2008, Damien Miller + 2004, 2008, Nominet, Ltd. + 2004, Masarykova universita + 1997-2003, Kungliga Tekniska Högskolan + 2002, Nuno M. Rodrigues. + 2002, Stichting NLnet, Netherlands + 2000-2002, Japan Network Information Center. + 2001, Jake Burkholder + 1996-2001, Nominum, Inc. + 1995-2000, Network Associates, Inc. + 2000, Aaron D. Gifford + 1999-2000, Nortel Networks Corporation + 1996, David Mazieres + 1993, Digital Equipment Corporation. + 1990, 1993, The Regents of the University of California. + +License: ISC and BSD-2-clause and BSD-3-clause and BSD-4-clause + +Files: bin/tests/system/chain/ + doc/misc/docbook-options.pl +Copyright: 2016-2017, Internet Systems Consortium, Inc. ("ISC") +License: MPL-2.0 or ISC + +Files: unit/atf-src/ +Copyright: 2007-2012, The NetBSD Foundation, Inc. +License: BSD-2-clause + +Files: contrib/idn/ +Copyright: 2000-2002, Japan Network Information Center +License: BSD-4-clause + +Files: debian/ +Copyright: 2007-2017 LaMont Jones + 2013-2017 Michael Gilbert + 2017 Ondřej Surý + 2008-2016 Jamie Strandboge +License: ISC or MPL-2.0 + +License: ISC + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + . + THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + +License: BSD-2-clause + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + . + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + . + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY + WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +License: BSD-3-clause + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + . + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + . + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + . + 3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY + WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +License: BSD-4-clause + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + . + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + . + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + . + 3. All advertising materials mentioning features or use of this + software must display the following acknowledgement: This product + includes software developed by the the organization . + . + 4. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER "AS IS" AND ANY EXPRESS + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License: MPL-2.0 + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. + . + On Debian systems, the full copy of MPL-2.0 can be found at + /usr/share/common-licenses/MPL-2.0 +----- + +----- + + +node.js 12.0 +Copyright Joyent, Inc. and other Node contributors. +----- +Distributed under the terms of the MIT License +----- +Node's license follows: +==== +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +==== +This license applies to all parts of Node that are not externally maintained libraries. The externally maintained libraries used by Node are: +- V8, located at deps/v8. V8's license follows: +""" +This license applies to all parts of V8 that are not externally maintained libraries.The externally maintained libraries used by V8 are: +- PCRE test suite, located in +test/mjsunit/third_party/regexp-pcre.js.This is based on the test suite from PCRE-7.3, which is copyrighted by the University of Cambridge and Google, Inc.The copyright notice and license are embedded in regexp-pcre.js. +- Layout tests, located in test/mjsunit/third_party.These are based on layout tests from webkit.org which are copyrighted by Apple Computer, Inc. and released under a 3-clause BSD license. +- Strongtalk assembler, the basis of the files assembler-arm-inl.h, assembler-arm.cc, assembler-arm.h, assembler-ia32-inl.h, assembler-ia32.cc, assembler-ia32.h, assembler-x64-inl.h, assembler-x64.cc, assembler-x64.h, assembler-mips-inl.h, assembler-mips.cc, assembler-mips.h, assembler.cc and assembler.h. This code is copyrighted by Sun Microsystems Inc. and released under a 3-clause BSD license. +- Valgrind client API header, located at third_party/valgrind/valgrind.h This is release under the BSD license. +These libraries have their own licenses; we recommend you read them, as their terms may differ from the terms below. +Copyright 2006-2012, the V8 project authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +""" +- C-Ares, an asynchronous DNS client, located at deps/cares. C-Ares license follows: +""" +Copyright 1998 by the Massachusetts Institute of Technology. +Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of M.I.T. not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. + M.I.T. makes no representations about the suitability of this software for any purpose.It is provided "as is" without express or implied warranty. +""" +- OpenSSL located at deps/openssl. OpenSSL is cryptographic software written by Eric Young (eay@cryptsoft.com) to provide SSL/TLS encryption. OpenSSL's license follows: +""" +/==================================================================== + Copyright (c) 1998-2011 The OpenSSL Project.All rights reserved. +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this +software must display the following acknowledgment: +"This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)" +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact openssl-core@openssl.org. +5. Products derived from this software may not be called "OpenSSL" nor may "OpenSSL" appear in their names without prior written permission of the OpenSSL Project. +6. Redistributions of any form whatsoever must retain the following acknowledgment: +"This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/)" +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.IN NO EVENT SHALL THE OpenSSL PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ==================================================================== +""" +- HTTP Parser, located at deps/http_parser. HTTP Parser's license follows: +""" +http_parser.c is based on src/http/ngx_http_parse.c from NGINX copyright Igor Sysoev. +Additional changes are licensed under the same terms as NGINX and copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +""" +- Closure Linter is located at tools/closure_linter. Closure's license follows: +""" +Copyright (c) 2007, Google Inc. +All rights reserved. +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +""" +- tools/cpplint.py is a C++ linter. Its license follows: +""" +Copyright (c) 2009 Google Inc. All rights reserved. +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +""" +- lib/punycode.js is copyright 2011 Mathias Bynens +and released under the MIT license. +""" +Punycode.js +Copyright 2011 Mathias Bynens +Available under MIT license +""" +- tools/gyp. GYP is a meta-build system. GYP's license follows: +""" +Copyright (c) 2009 Google Inc. All rights reserved. +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +""" +- Zlib at deps/zlib. zlib's license follows: +""" +/zlib.h -- interface of the 'zlib' general purpose compression library +version 1.2.8, April 28th, 2013 +Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler +This software is provided 'as-is', without any express or implied warranty.In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +Jean-loup GaillyMark Adler +jloup@gzip.orgmadler@alumni.caltech.edu +*/ +""" +- npm is a package manager program located at deps/npm. +npm's license follows: +""" +Copyright (c) Isaac Z. Schlueter +All rights reserved. +npm is released under the Artistic 2.0 License. +The text of the License follows: +-------- +The Artistic License 2.0 +Copyright (c) 2000-2006, The Perl Foundation. +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. +Preamble +This license establishes the terms under which a given free software Package may be copied, modified, distributed, and/or redistributed. +The intent is that the Copyright Holder maintains some artistic control over the development of that Package while still keeping the Package available as open source and free software. +You are always permitted to make arrangements wholly outside of this license directly with the Copyright Holder of a given Package. If the terms of this license do not permit the full use that you propose to make of the Package, you should contact the Copyright Holder and seek a different licensing arrangement. +Definitions +"Copyright Holder" means the individual(s) or organization(s) named in the copyright notice for the entire Package. +"Contributor" means any party that has contributed code or other material to the Package, in accordance with the Copyright Holder's procedures. +"You" and "your" means any person who would like to copy, distribute, or modify the Package. +"Package" means the collection of files distributed by the Copyright Holder, and derivatives of that collection and/or of those files. A given Package may consist of either the Standard Version, or a Modified Version. +"Distribute" means providing a copy of the Package or making it accessible to anyone else, or in the case of a company or organization, to others outside of your company or organization. +"Distributor Fee" means any fee that you charge for Distributing this Package or providing support for this Package to another party. It does not mean licensing fees. +"Standard Version" refers to the Package if it has not been modified, or has been modified only in ways explicitly requested by the Copyright Holder. +"Modified Version" means the Package, if it has been changed, and such changes were not explicitly requested by the Copyright Holder. +"Original License" means this Artistic License as Distributed with the Standard Version of the Package, in its current version or as it may be modified by The Perl Foundation in the future. +"Source" form means the source code, documentation source, and configuration files for the Package. +"Compiled" form means the compiled bytecode, object code, binary, or any other form resulting from mechanical transformation or translation of the Source form. +Permission for Use and Modification Without Distribution +(1)You are permitted to use the Standard Version and create and use Modified Versions for any purpose without restriction, provided that you do not Distribute the Modified Version. +Permissions for Redistribution of the Standard Version +(2)You may Distribute verbatim copies of the Source form of the Standard Version of this Package in any medium without restriction, either gratis or for a Distributor Fee, provided that you duplicate all of the original copyright notices and associated disclaimers. At your discretion, such verbatim copies may or may not include a Compiled form of the Package. +(3)You may apply any bug fixes, portability changes, and other modifications made available from the Copyright Holder. The resulting Package will still be considered the Standard Version, and as such will be subject to the Original License. +Distribution of Modified Versions of the Package as Source +(4)You may Distribute your Modified Version as Source (either gratis or for a Distributor Fee, and with or without a Compiled form of the Modified Version) provided that you clearly document how it differs from the Standard Version, including, but not limited to, documenting any non-standard features, executables, or modules, and provided that you do at least ONE of the following: +(a)make the Modified Version available to the Copyright Holder of the Standard Version, under the Original License, so that the Copyright Holder may include your modifications in the Standard Version. +(b)ensure that installation of your Modified Version does not prevent the user installing or running the Standard Version. In addition, the Modified Version must bear a name that is different from the name of the Standard Version. +(c)allow anyone who receives a copy of the Modified Version to make the Source form of the Modified Version available to others under +(i)the Original License or +(ii)a license that permits the licensee to freely copy, modify and redistribute the Modified Version using the same licensing terms that apply to the copy that the licensee received, and requires that the Source form of the Modified Version, and of any works derived from it, be made freely available in that license fees are prohibited but Distributor Fees are allowed. +Distribution of Compiled Forms of the Standard Version or Modified Versions without the Source +(5)You may Distribute Compiled forms of the Standard Version without the Source, provided that you include complete instructions on how to get the Source of the Standard Version. Such instructions must be valid at the time of your distribution. If these instructions, at any time while you are carrying out such distribution, become invalid, you must provide new instructions on demand or cease further istribution. +If you provide valid instructions or cease distribution within thirty days after you become aware that the instructions are invalid, then you do not forfeit any of your rights under this license. +(6)You may Distribute a Modified Version in Compiled form without the Source, provided that you comply with Section 4 with respect to the Source of the Modified Version. +Aggregating or Linking the Package +(7)You may aggregate the Package (either the Standard Version or Modified Version) with other packages and Distribute the resulting aggregation provided that you do not charge a licensing fee for the Package. Distributor Fees are permitted, and licensing fees for other components in the aggregation are permitted. The terms of this license apply to the use and Distribution of the Standard or Modified Versions as included in the aggregation. +(8) You are permitted to link Modified and Standard Versions with other works, to embed the Package in a larger work of your own, or to build stand-alone binary or bytecode versions of applications that include the Package, and Distribute the result without restriction, provided the result does not expose a direct interface to the Package. +Items That are Not Considered Part of a Modified Version +(9) Works (including, but not limited to, modules and scripts) that merely extend or make use of the Package, do not, by themselves, cause the Package to be a Modified Version. In addition, such works are not considered parts of the Package itself, and are not subject to the terms of this license. +General Provisions +(10)Any use, modification, and distribution of the Standard or Modified Versions is governed by this Artistic License. By using, modifying or distributing the Package, you accept this license. Do not use, modify, or distribute the Package, if you do not accept this license. +(11)If your Modified Version has been derived from a Modified Version made by someone other than you, you are nevertheless required to ensure that your Modified Version complies with the requirements of this license. +(12)This license does not grant you the right to use any trademark, service mark, tradename, or logo of the Copyright Holder. +(13)This license includes the non-exclusive, worldwide, free-of-charge patent license to make, have made, use, offer to sell, sell, import and otherwise transfer the Package with respect to any patent claims licensable by the Copyright Holder that are necessarily infringed by the Package. If you institute patent litigation (including a cross-claim or counterclaim) against any party alleging that the Package constitutes direct or contributory patent infringement, then this Artistic License to you shall terminate on the date that such litigation is filed. +(14)Disclaimer of Warranty: +THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------- +"Node.js" and "node" trademark Joyent, Inc. npm is not officially part of the Node.js project, and is neither owned by nor officially affiliated with Joyent, Inc. +Packages published in the npm registry (other than the Software and its included dependencies) are not part of npm itself, are the sole property of their respective maintainers, and are not covered by this license. +"npm Logo" created by Mathias Pettersson and Brian Hammond, used with permission. +"Gubblebum Blocky" font Copyright (c) by Tjarda Koster, http://jelloween.deviantart.com included for use in the npm website and documentation, used with permission. +This program uses several Node modules contained in the node_modules/ subdirectory, according to the terms of their respective licenses. +""" +- tools/doc/node_modules/marked. Marked is a Markdown parser. Marked's license follows: +""" +Copyright (c) 2011-2012, Christopher Jeffrey (https://github.com/chjj/) +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +""" +- test/gc/node_modules/weak. Node-weak is a node.js addon that provides garbage collector notifications. Node-weak's license follows: +""" +Copyright (c) 2011, Ben Noordhuis +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +""" +- wrk is located at tools/wrk. wrk's license follows: +""" +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +1. Definitions. +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: +(a) You must give any other recipients of the Work or Derivative Works a copy of this License; and +(b) You must cause any modified files to carry prominent notices stating that You changed the files; and +(c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and +(d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. +END OF TERMS AND CONDITIONS +""" +- ICU's license follows: +From http://source.icu-project.org/repos/icu/icu/trunk/license.html +""" +ICU License - ICU 1.8.1 and later +COPYRIGHT AND PERMISSION NOTICE +Copyright (c) 1995-2014 International Business Machines Corporation and others +All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, provided that the above copyright notice(s) and this permission notice appear in all copies of the Software and that both the above copyright notice(s) and this permission notice appear in supporting documentation. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. +All trademarks and registered trademarks mentioned herein are the property of their respective owners. +Third-Party Software Licenses +This section contains third-party software notices and/or additional terms for licensed third-party software components included within ICU libraries. +1. Unicode Data Files and Software +COPYRIGHT AND PERMISSION NOTICE +Copyright © 1991-2014 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in +http://www.unicode.org/copyright.html. +Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided that +(a) this copyright and permission notice appear with all copies of the Data Files or Software, +(b) this copyright and permission notice appear in associated documentation, and +(c) there is clear notice in each modified Data File or in the Software as well as in the documentation associated with the Data File(s) or Software that the data or software has been modified. +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE. +Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. +2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt) +The Google Chrome software developed by Google is licensed under the BSD license. Other software included in this distribution is provided under other licenses, as set forth below. +The BSD License +http://opensource.org/licenses/bsd-license.php +Copyright (C) 2006-2008, Google Inc. +All rights reserved. +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +The word list in cjdict.txt are generated by combining three word lists listed below with further processing for compound word breaking. The frequency is generated with an iterative training against Google web corpora. +Libtabe (Chinese) +- https://sourceforge.net/project/?group_id=1519 +- Its license terms and conditions are shown below. +IPADIC (Japanese) +- http://chasen.aist-nara.ac.jp/chasen/distribution.html +- Its license terms and conditions are shown below. +---------COPYING.libtabe ---- BEGIN-------------------- +Copyrighy (c) 1999 TaBE Project. + Copyright (c) 1999 Pai-Hsiang Hsiao. + All rights reserved. + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + . Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + . Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + . Neither the name of the TaBE Project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Copyright (c) 1999 Computer Systems and Communication Lab, Institute of Information Science, Academia Sinica. + All rights reserved. + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + . Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + . Neither the name of the Computer Systems and Communication Lab nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Copyright 1996 Chih-Hao Tsai @ Beckman Institute, University of Illinois +c-tsai4@uiuc.eduhttp://casper.beckman.uiuc.edu/~c-tsai4 +---------------COPYING.libtabe-----END------------------------------------ +---------------COPYING.ipadic-----BEGIN------------------------------------ +Copyright 2000, 2001, 2002, 2003 Nara Institute of Science and Technology.All Rights Reserved. +Use, reproduction, and distribution of this software is permitted. Any copy of this software, whether in its original form or modified, must include both the above copyright notice and the following paragraphs. +Nara Institute of Science and Technology (NAIST), the copyright holders, disclaims all warranties with regard to this software, including all implied warranties of merchantability and fitness, in no event shall NAIST be liable for any special, indirect or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortuous action, arising out of or in connection with the use or performance of this software. +A large portion of the dictionary entries originate from ICOT Free Software.The following conditions for ICOT Free Software applies to the current dictionary as well. +Each User may also freely distribute the Program, whether in its original form or modified, to any third party or parties, PROVIDED that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear on, or be attached to, the Program, which is distributed substantiallyin the same form as set out herein and that such intended distribution, if actually made, will neither violate or otherwise contravene any of the laws and regulations of the countries having jurisdiction over the User or the intended distribution itself. +NO WARRANTY +The program was produced on an experimental basis in the course of the research and development conducted during the project and is provided to users as so produced on an experimental basis.Accordingly, the program is provided without any warranty whatsoever, whether express, implied, statutory or otherwise.The term "warranty" used herein includes, but is not limited to, any warranty of the quality, performance, merchantability and fitness for a particular purpose of the program and the nonexistence of any infringement or violation of any right of any third party. +Each user of the program will agree and understand, and be deemed to have agreed and understood, that there is no warranty whatsoever for the program and, accordingly, the entire risk arising from or otherwise connected with the program is assumed by the user. +Therefore, neither ICOT, the copyright holder, or any other organization that participated in or was otherwise related to the development of the program and their respective officials, directors, officers and other employees shall be held liable for any and all damages, including, without limitation, general, special, incidental and consequential damages, arising out of or otherwise in connection with the use or inability to use the program or any product, material or result produced or otherwise obtained by using the program, regardless of whether they have been advised of, or otherwise had knowledge of, the possibility of such damages at any time during the project or thereafter. Each user will be deemed to have agreed to the foregoing by his or her commencement of use of the program. The term "use" as used herein includes, but is not limited to, the use, modification, copying and distribution of the program and the production of secondary products from the program. +In the case where the program, whether in its original form or modified, was distributed or delivered to or received by a user from any person, organization or entity other than ICOT, unless it makes or grants independently of ICOT any specific warranty to the user in writing, such person, organization or entity, will also be exempted from and not be held liable to the user for any such damages as noted above as far as the program is concerned. +---------------COPYING.ipadic-----END------------------------------------ +3. Lao Word Break Dictionary Data (laodict.txt) +Copyright (c) 2013 International Business Machines Corporation and others. All Rights Reserved. +Project:http://code.google.com/p/lao-dictionary/ +Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt +License:http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt +(copied below) +This file is derived from the above dictionary, with slight modifications. +-------------------------------------------------------------------------------- +Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell. +All rights reserved. +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +4. Burmese Word Break Dictionary Data (burmesedict.txt) Copyright (c) 2014 International Business Machines Corporation and others. All Rights Reserved. +This list is part of a project hosted at: github.com/kanyawtech/myanmar-karen-word-lists +-------------------------------------------------------------------------------- +Copyright (c) 2013, LeRoy Benjamin Sharon +All rights reserved. +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +Neither the name Myanmar Karen Word Lists, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +5. Time Zone Database +ICU uses the public domain data and code derived from Time Zone Database for its time zone support. The ownership of the TZ database is explained in BCP 175: Procedure for Maintaining the Time Zone Database section 7. +7. Database Ownership + The TZ database itself is not an IETF Contribution or an IETF document. Rather it is a pre-existing and regularly updated work that is in the public domain, and is intended to remain in the public domain. Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do not apply to the TZ Database or contributions that individuals make to it. + Should any claims be made and substantiated against the TZ Database, the organization that is providing the IANA Considerations defined in this RFC, under the memorandum of understanding with the IETF, currently ICANN, may act in accordance with all competent court orders. No ownership claims will be made by ICANN or the IETF Trust on the database or the code. Any person making a contribution to the database or code waives all rights to future claims in that contribution or in the TZ Database. +""" + + + +simple-keyboard 2.32.0 +Copyright (c) 2019 Francisco Hodge +----- +Distributed under the terms of the MIT License +----- + + +== +the MIT License +== +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the"Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +suricata & nmcli +----- +Distributed under the terms of the GNU General Public License Version 2, June 1991 +----- + +Version 2, June 1991 Copyright © 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. +24.1.1. Preamble + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software–to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation’s software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. + +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 this service 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. + +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. + +Also, for each author’s protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors’ reputations. + +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone’s free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification follow. +24.1.2. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The “Program”, below, refers to any such program or work, and a “work based on the Program” means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term “modification”.) Each licensee is addressed as “you”. + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. + b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. + c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients’ exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and “any later version”, you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. +24.1.3. NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. + +END OF TERMS AND CONDITIONS +24.1.4. 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 convey the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. + + Copyright (C) + + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. + + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w’. This is free software, and you are welcome to redistribute it under certain conditions; type `show c’ for details. + +The hypothetical commands `show w` and `show c` should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w’ and `show c`; they could even be mouse-clicks or menu items–whatever suits your program. + +You should also get your employer (if you work as a programmer) or your school, if any, to sign a “copyright disclaimer” for the program, if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision’ (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. diff --git a/README.md b/README.md index e845566..3a0d88f 100644 --- a/README.md +++ b/README.md @@ -1 +1,81 @@ -README +![title](https://user-images.githubusercontent.com/25131750/200111909-e0d10587-014a-410c-be05-e7e89cf6c9f5.gif) + +### Description + +SpyGuard is a forked and enhanced version of [TinyCheck](https://github.com/KasperskyLab/TinyCheck), developed by the same author when he was working at Kaspersky. SpyGuard's main objective is to detect signs of compromise by monitoring network flows transmitted by a device. + +As it uses WiFi, SpyGuard can be used against a wide range of devices, such as smartphones, laptops, IOTs or workstations. To do its job, the analysis engine of SpyGuard is using Indicators of Compromise (IOCs), anomaly detection and is supported by [Suricata](https://suricata.io). + +### Installation + +You need a debian-like operating system to install it easly by using the provided bash script. Once you've cloned the repository, just launch `install.sh` as root. Here are the command lines to the that: + +``` +cd /tmp/ && git clone https://github.com/SpyGuard/spyguard +cd spyguard && sudo bash install.sh +``` + +Once installed, you can go to the backend interface located at `https://localhost:8443` to manage the device and setup the right network interfaces to get it working. Please look at the [dedicated wiki page](https://github.com/SpyGuard/spyguard/wiki/Installing-SpyGuard) to get some tips regarding it. + +> Please check prior the installation that your Linux distribution is using `nmcli` to manage networks. If you want to install it on a Raspberry Pi +> you need to activate it via the `raspi-config` interface. + +### Smartphone analysis best practices + +* Do the interception in a public place (library, restaurant...) or common place (office, home...); +* Intercept the network communications of the device for at least 10 minutes; +* Interact with the analysed device during the interception (reboot it, take a photo, send a message...); + +### SpyGuard and Stalkerware threat + +The indicators of compromise (IOCs) linked to stalkerware are now fully managed by [ECHAP](https://echap.eu.org), a French association working against cyberviolence. Even though stalkerware still remains a threat, remember that most of digital violence and surveillance is done by using simple means, such as hacking cloud & mail accounts. Therefore, we encourage you to consult the [ECHAP guides](https://echap.eu.org/ressources/) and apply their advice to your digital life alongside of device checks. + +> It is worth mentioning that the IOCs are distributed under the **Creative Common BY-NC-SA** licence. +> This imply a **non commercial use** of them. Please respect this licence and ask ECHAP for any question related to that. + +### Commercial use + +You can use SpyGuard in a commercial product. However, you can't use SpyGuard as the name of your product and you’re still required to follow the terms and conditions that the Apache License imposes, like refering to the SpyGuard project in customer documentation. Moreover, a sweet note to explain your use to the author is always appreciated, please see the contact below. + +### Contact + +If you need an express help or specific developements or your own needs, do not hesitate to contact [the author](https://twitter.com/felixaime) via Twitter or by sending an email at spyguard@protonmail.com. A bug? Do not hesitate to open a [new issue](https://github.com/SpyGuard/spyguard/issues). + +### They have contributed to or helped this project + +

+    + +

+ +To work, Spyguard is using a lot of awesome opensource projects, libraries, and fonts, kudos to them: + +[Dumpcap](https://tshark.dev/capture/dumpcap/), +[Dig](https://github.com/tigeli/bind-utils), +[Suricata](https://suricata.io/), +[NetworkManager](https://github.com/NetworkManager/NetworkManager), +[Python](https://www.python.org), +[VueJS](https://vuejs.org), +[Pip](https://github.com/pypa/pip), +[pydig](https://pypi.org/project/pydig/), +[pymisp](https://pypi.org/project/pymisp), +[netaddr](https://pypi.org/project/netaddr), +[pyyaml](https://pypi.org/project/pyyaml), +[flask](https://pypi.org/project/flask), +[flask_httpauth](https://pypi.org/project/flask_httpauth), +[pyjwt](https://pypi.org/project/pyjwt), +[sqlalchemy](https://pypi.org/project/sqlalchemy), +[psutil](https://pypi.org/project/psutil), +[pyudev](https://pypi.org/project/pyudev), +[qrcode](https://pypi.org/project/qrcode), +[netifaces](https://pypi.org/project/netifaces), +[weasyprint](https://pypi.org/project/weasyprint), +[python-whois](https://pypi.org/project/python-whois), +[publicsuffix2](https://pypi.org/project/publicsuffix2), +[six](https://pypi.org/project/six), +[Exo2 font](https://github.com/NDISCOVER/Exo-2.0), +[Virtual Keyboard](https://virtual-keyboard.js.org/vuejs/), +[OpenSSL](https://www.openssl.org), +[Spectre CSS](https://picturepan2.github.io/spectre/). + +Icons and design created via [Figma](https://www.figma.com). diff --git a/analysis/__init__.py b/analysis/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/analysis/analysis.py b/analysis/analysis.py new file mode 100755 index 0000000..b814e2d --- /dev/null +++ b/analysis/analysis.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from classes.engine import Engine +from classes.report import Report +import sys +import json +import os + +""" + This file is called by the frontend to do the analysis. +""" + +def analyze(capture_folder): + """This method analyse a pcap. It: + 1. Launches the detection engine which uses suricata; + 2. Save the results inside the "assets" subfolder of the capture folder; + 3. Generates the PDF report and save it in the capture folder. + + Args: + capture_folder (str): The capture folder (eg. /tmp/45FB392D/) + """ + if os.path.isdir(capture_folder): + + alerts = {} + + # Create the assets folder. + if not os.path.isdir(os.path.join(capture_folder, "assets")): + os.mkdir(os.path.join(capture_folder, "assets")) + + # Starts the engine and get alerts + engine = Engine(capture_folder) + engine.start_engine() + alerts = engine.get_alerts() + analysis_duration = (engine.analysis_end-engine.analysis_start).seconds + + # alerts.json writing. + with open(os.path.join(capture_folder, "assets/alerts.json"), "w") as f: + report = {"high": [], "moderate": [], "low": []} + for alert in alerts: + if alert["level"] == "High": + report["high"].append(alert) + if alert["level"] == "Moderate": + report["moderate"].append(alert) + if alert["level"] == "Low": + report["low"].append(alert) + f.write(json.dumps(report, indent=4, separators=(',', ': '))) + + # records.json writing. + with open(os.path.join(capture_folder, "assets/records.json"), "w") as f: + f.write(json.dumps(engine.records, indent=4, separators=(',', ': '))) + + # detection_methods.json writing. + with open(os.path.join(capture_folder, "assets/detection_methods.json"), "w") as f: + f.write(json.dumps(engine.detection_methods, indent=4, separators=(',', ': '))) + + # errors.json writing. + with open(os.path.join(capture_folder, "assets/errors.json"), "w") as f: + f.write(json.dumps(engine.errors, indent=4, separators=(',', ': '))) + + # Generate the PDF report + report = Report(capture_folder, analysis_duration) + report.generate_report() + + else: + print("The folder doesn't exist.") + +def usage(): + """Shows the usage output.""" + print(""" Usage: python analysis.py [capture_folder] where [capture_folder] is a folder containing a capture.pcap file """) + +if __name__ == "__main__": + if len(sys.argv) == 2: + analyze(sys.argv[1]) + else: + usage() + + + diff --git a/analysis/classes/engine.py b/analysis/classes/engine.py new file mode 100755 index 0000000..94f5576 --- /dev/null +++ b/analysis/classes/engine.py @@ -0,0 +1,739 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import json +import os +import re +import subprocess as sp +import sys +from datetime import datetime +from ipaddress import IPv4Address, IPv6Address + +import ssl +import socket +import OpenSSL +import requests + +import pydig +import whois +from publicsuffix2 import get_sld +from netaddr import IPAddress, IPNetwork +from classes.jarm import get_jarm +from utils import get_config, get_iocs, get_whitelist + + +class Engine(): + + def __init__(self, capture_directory): + + # Set some vars. + self.analysis_start = datetime.now() + self.connected = self.check_internet() + self.working_dir = capture_directory + self.assets_dir = f"{capture_directory}/assets/" + self.rules_file = "/tmp/rules.rules" + self.pcap_path = os.path.join(self.working_dir, "capture.pcap") + self.records = [] + self.alerts = [] + self.dns = [] + self.files = [] + self.whitelist = [] + self.uncategorized = [] + self.analysed = [] + self.dns_failed = [] + self.dns_checked = [] + self.cert_checked = [] + self.errors = [] + self.analysis_end = None + + # Get configuration + self.heuristics_analysis = get_config(("analysis", "heuristics")) + self.iocs_analysis = get_config(("analysis", "iocs")) + self.whitelist_analysis = get_config(("analysis", "whitelist")) + self.active_analysis = get_config(("analysis", "active")) + self.userlang = get_config(("frontend", "user_lang")) + self.max_ports = get_config(("analysis", "max_ports")) + self.http_default_ports = get_config(("analysis", "http_default_ports")) + self.tls_default_ports = get_config(("analysis", "tls_default_ports")) + self.free_issuers = get_config(("analysis", "free_issuers")) + self.max_alerts = get_config(("analysis", "max_alerts")) + self.indicators_types = get_config(("analysis", "indicators_types")) + + # Save detection methods used. + self.detection_methods = { "iocs" : self.iocs_analysis, + "heuristics" : self.heuristics_analysis, + "active" : self.active_analysis } + + # Retreive IOCs. + if self.iocs_analysis: + self.bl_cidrs = [[IPNetwork(cidr[0]), cidr[1]] for cidr in get_iocs("cidr")] + self.bl_hosts = get_iocs("ip4addr") + get_iocs("ip6addr") + self.tor_nodes = self.get_tor_nodes() + self.bl_domains = get_iocs("domain") + self.bl_freedns = get_iocs("freedns") + self.bl_certs = get_iocs("sha1cert") + self.bl_jarms = get_iocs("jarm") + self.bl_nameservers = get_iocs("ns") + self.bl_tlds = get_iocs("tld") + + # Retreive whitelisted items. + if self.whitelist_analysis: + self.wl_cidrs = [IPNetwork(cidr) for cidr in get_whitelist("cidr")] + self.wl_hosts = get_whitelist("ip4addr") + get_whitelist("ip6addr") + self.get_public_ip() + self.wl_domains = get_whitelist("domain") + + # Load template language + if not re.match("^[a-z]{2,3}$", self.userlang): self.userlang = "en" + + with open(os.path.join(os.path.dirname(os.path.realpath(sys.argv[0])), "locales/{}.json".format(self.userlang))) as f: + self.template = json.load(f)["alerts"] + + def check_internet(self) -> bool: + """Check the internet link just with a small http request + to an URL present in the configuration + + Returns: + bool: True if everything works. + """ + try: + url = get_config(("network", "internet_check")) + requests.get(url, timeout=3) + return True + except: + return False + + def get_public_ip(self) -> list: + """Get the public IP address + + Returns: + list: list containing the public IP address. + """ + if self.connected: + try: + return [requests.get("https://api.ipify.org", timeout=3).text] + except: + return [] + else: + return [] + + def start_engine(self): + """ This method starts suricata and then launch the + parsers to analyse the output logs. + """ + + # Parse the eve.json file. + self.parse_eve_file() + + # For each type of records, check it against heuristics. + for record in self.records: + if self.whitelist_analysis: self.check_whitelist(record) + self.check_domains(record) + self.check_flow(record) + self.check_tls(record) + self.check_http(record) + + # Check for failed DNS answers (if spyguard not connected) + for dnsname in list(set(self.dns_failed)): + self.check_dnsname(dnsname) + + def parse_eve_file(self): + """This method parses the eve.json file produced by suricata. + For each record, it look at the record type and then append the self.record + dictionnary which contains valuable data to look at suspicious stuff. + """ + for record in open(f"{self.assets_dir}eve.json", "r").readlines(): + record = json.loads(record) + try: + if "flow" in record: + if "app_proto" not in record: record["app_proto"] = "failed" + proto = { "name" : record["app_proto"].upper() if record["app_proto"] != "failed" else record["proto"].upper(), "port" : record["dest_port"] if "dest_port" in record else -1 } + + if record["dest_ip"] not in [r["ip_dst"] for r in self.records]: + self.records.append({ + "ip_dst" : record["dest_ip"], + "whitelisted" : False, + "suspicious" : False, + "protocols" : [proto], + "domains" : [], + "certificates" : [] + }) + else: + for rec in self.records: + if record["dest_ip"] == rec["ip_dst"]: + if proto not in rec["protocols"]: + rec["protocols"].append(proto) + except Exception as e: + self.errors.append(f"Issue when processing the following eve record (flow): {json.dumps(record)}") + + for record in open(f"{self.assets_dir}eve.json", "r").readlines(): + record = json.loads(record) + try: + if "tls" in record: + for rec in self.records: + if record["dest_ip"] == rec["ip_dst"]: + if "version" in record["tls"]: + if float(record["tls"]["version"].split(" ")[1]) < 1.3 and not "session_resumed" in record["tls"]: + if record["tls"] not in rec["certificates"]: + record["tls"]["port"] = record["dest_port"] + rec["certificates"].append(record["tls"]) + else: + if "sni" in record["tls"] and record["tls"]["sni"] not in [c["sni"] for c in rec["certificates"]]: + rec["certificates"].append({ "sni" : record["tls"]["sni"], "version" : record["tls"]["version"], "port" : record["dest_port"] }) + else: + rec["certificates"].append({ "version" : record["tls"]["version"], "port" : record["dest_port"] }) + except Exception as e: + self.errors.append(f"Issue when processing the following eve record (tls): {json.dumps(record)}") + + for record in open(f"{self.assets_dir}eve.json", "r").readlines(): + record = json.loads(record) + try: + if "http" in record: + for rec in self.records: + if record["dest_ip"] == rec["ip_dst"]: + d = { "hostname" : record["http"]["hostname"] } + if "http_user_agent" in record["http"]: + d["user-agent"] = record["http"]["http_user_agent"] + if "http" in rec: + if not d in rec["http"]: + rec["http"].append(d) + else: + rec["http"] = [d] + except Exception as e: + self.errors.append(f"Issue when processing the following eve record (http): {json.dumps(record)}") + + for record in open(f"{self.assets_dir}eve.json", "r").readlines(): + record = json.loads(record) + try: + if "dns" in record: + if record["dns"]["type"] == "answer": + for rec in self.records: + if record["dns"]["rcode"] == "NOERROR": + if "grouped" in record["dns"]: + if "A" in record["dns"]["grouped"] and rec["ip_dst"] in record["dns"]["grouped"]["A"]: + if record["dns"]["rrname"] not in rec["domains"]: + rec["domains"].append(record["dns"]["rrname"]) + elif "AAAA" in record["dns"]["grouped"] and rec["ip_dst"] in record["dns"]["grouped"]["AAAA"]: + if record["dns"]["rrname"] not in rec["domains"]: + rec["domains"].append(record["dns"]["rrname"]) + elif record["dns"]["rcode"] == "SERVFAIL": + self.dns_failed.append(record["dns"]["rrname"]) + except Exception as e: + self.errors.append(f"Issue when processing the following eve record (dns answer): {json.dumps(record)}") + + # This pass is if SpyGuard is not connected to Internet. + # We still analyze the un answered DNS queries. + for record in open(f"{self.assets_dir}eve.json", "r").readlines(): + record = json.loads(record) + try: + if "dns" in record: + if record["dns"]["type"] == "query": + if record["dns"]["rrname"] not in sum([r["domains"] for r in self.records], []): + self.records.append({ + "ip_dst" : "--", + "whitelisted" : False, + "suspicious" : False, + "protocols" : [{"name" : "DNS", "port" : "53"}], + "domains" : [record["dns"]["rrname"]], + "certificates" : [] + }) + except Exception as e: + self.errors.append(f"Issue when processing the following eve record (dns query): {json.dumps(record)}") + + for record in open(f"{self.assets_dir}eve.json", "r").readlines(): + record = json.loads(record) + try: + if "alert" in record and record["event_type"] == "alert": + for rec in self.records: + if record["dest_ip"] == rec["ip_dst"]: + rec["suspicious"] = True + self.alerts.append({"title": self.template["SNORT-01"]["title"].format(record["alert"]["signature"]), + "description": self.template["SNORT-01"]["description"].format(rec["ip_dst"]), + "host": rec["ip_dst"], + "level": "High", + "id": "SNORT-01"}) + + except Exception as e: + self.errors.append(f"Issue when processing the following eve record (dns answer): {json.dumps(record)}") + + + def check_whitelist(self, record): + """ This method is asked on each record. It: + + 1. Check if the associated IP(v4/6) Address can be whitelisted + 2. Check if one of the associated domain names can be whitelisted. + + If its the case, the "whitelisted" key of the record is set to True. + Therefore, the record will be ignored for the rest of the analysis. + Args: + record (dict): record to be processed. + """ + + try: + assert IPv4Address(record["ip_dst"]) + + if IPv4Address('224.0.0.0') <= IPv4Address(record["ip_dst"]) <= IPv4Address('239.255.255.255'): + record["whitelisted"] = True + return + + for cidr in self.wl_cidrs: + if IPAddress(record["ip_dst"]) in cidr: + record["whitelisted"] = True + return + + for ip in self.wl_hosts: + if record["ip_dst"] == ip: + record["whitelisted"] = True + return + except: + pass + + try: + assert IPv6Address(record["ip_dst"]) + + if [record["ip_dst"].startswith(prefix) for prefix in ["fe80", "fc00", "ff02"]]: + record["whitelisted"] = True + return + + for ip in self.wl_hosts: + if record["ip_dst"] == ip: + record["whitelisted"] = True + return + except: + pass + + # We check if at least one of the associated + # domains is whitelisted + for dom in self.wl_domains: + for domain in record["domains"]: + if domain.endswith(dom): + record["whitelisted"] = True + return + + def check_domains(self, record): + """Check the domains associated to each record. + First this method checks if the record is whitelisted. If not: + 1. Leverage a low alert if the record don't have any associated DNSName + 2. Check each domain associated to the record by calling check_dnsname. + Args: + record (dict): record to be processed. + """ + if record["whitelisted"]: return + + if self.heuristics_analysis: + # Otherwise, we alert the user that an IP haven't been resolved by + # a DNS answer during the session... + if record["domains"] == []: + record["suspicious"] = True + self.alerts.append({"title": self.template["PROTO-05"]["title"].format(record["ip_dst"]), + "description": self.template["PROTO-05"]["description"].format(record["ip_dst"]), + "host": record["ip_dst"], + "level": "Low", + "id": "PROTO-05"}) + + # Check each associated domain. + for domain in record["domains"]: + if self.check_dnsname(domain): + record["suspicious"] = True + + def check_dnsname(self, dnsname): + """Check a domain name against a set of IOCs / heuristics. + 1. Check if the parent domain is blacklisted. + 2. Check if the parent domain is a Free DNS. + 3. Check if the domain extension is a suspicious TLD. + 4. Check if the name servers associated to the domain are suspicious. + 5. Check if the domain have been registered recently - less than one year. + Args: + record (dict): record to be processed. + Returns: + supicious (bool) : if an alert has been leveraged. + """ + suspicious = False + + if self.iocs_analysis: + for domain in self.bl_domains: + if dnsname.endswith(domain[0]) and any(t in self.indicators_types for t in [domain[1], "all"]): + if domain[1] == "dual": + suspicious = True + self.alerts.append({"title": self.template["IOC-12"]["title"], + "description": self.template["IOC-12"]["description"].format(domain[0]), + "host": domain[0], + "level": "Low", + "id": "IOC-12"}) + elif domain[1] == "tracker": + suspicious = True + self.alerts.append({"title": self.template["IOC-04"]["title"].format(domain[0], "tracker"), + "description": self.template["IOC-04"]["description"].format(domain[0], "tracker"), + "host": domain[0], + "level": "Low", + "id": "IOC-04"}) + elif domain[1] == "doh": + suspicious = True + self.alerts.append({"title": self.template["IOC-13"]["title"].format(f"{dnsname}"), + "description": self.template["IOC-13"]["description"].format(f"{dnsname}"), + "host": dnsname, + "level": "Low", + "id": "IOC-13"}) + else: + suspicious = True + self.alerts.append({"title": self.template["IOC-03"]["title"].format(dnsname, domain[1].upper()), + "description": self.template["IOC-03"]["description"].format(dnsname), + "host": dnsname, + "level": "High", + "id": "IOC-03"}) + for domain in self.bl_freedns: + if dnsname.endswith(domain[0]) and any(t in self.indicators_types for t in [domain[1], "all"]): + suspicious = True + self.alerts.append({"title": self.template["IOC-05"]["title"].format(dnsname), + "description": self.template["IOC-05"]["description"].format(dnsname), + "host": dnsname, + "level": "Moderate", + "id": "IOC-05"}) + + if self.heuristics_analysis: + for domain in self.bl_tlds: + if dnsname.endswith(domain[0]) and any(t in self.indicators_types for t in [domain[1], "all"]): + suspicious = True + self.alerts.append({"title": self.template["IOC-06"]["title"].format(dnsname), + "description": self.template["IOC-06"]["description"].format(dnsname, domain[0]), + "host": dnsname, + "level": "Low", + "id": "IOC-06"}) + + if self.active_analysis and self.connected: + domain = get_sld(dnsname) + if domain not in self.dns_checked: + self.dns_checked.append(domain) + try: + name_servers = pydig.query(domain, "NS") + if len(name_servers): + for ns in self.bl_nameservers: + if name_servers[0].endswith(".{}.".format(ns[0])) and any(t in self.indicators_types for t in [ns[1], "all"]): + suspicious = True + self.alerts.append({"title": self.template["ACT-01"]["title"].format(dnsname, name_servers[0]), + "description": self.template["ACT-01"]["description"].format(dnsname), + "host": dnsname, + "level": "Moderate", + "id": "ACT-01"}) + except Exception as e: + self.errors.append(f"Issue when doing a dig NS query to {domain}, are you connected? Error: {str(e)}") + + try: + whois_record = whois.whois(domain) + creation_date = whois_record.creation_date if type(whois_record.creation_date) is not list else whois_record.creation_date[0] + creation_days = abs((datetime.now() - creation_date).days) + if creation_days < 365: + suspicious = True + self.alerts.append({"title": self.template["ACT-02"]["title"].format(dnsname, creation_days), + "description": self.template["ACT-02"]["description"].format(dnsname), + "host": dnsname, + "level": "Moderate", + "id": "ACT-02"}) + except Exception as e: + self.errors.append(f"Issue when doing a WHOIS query to {domain}, are you connected? Error: {str(e)}") + + return suspicious + + + def check_flow(self, record): + """Check a network flow against a set of IOCs / heuristics. + 1. Check if the IP Address is blacklisted + 2. Check if the IP Address is inside a blacklisted CIDR + 3. Check if the UDP or ICMP protocol is going outside of the local network. + 4. Check if the HTTP protocol is not using default HTTP ports. + 5. Check if the network flow is using a port > 1024. + Args: + record (dict): record to be processed. + Returns: + supicious (bool) : if an alert has been leveraged. + """ + if record["whitelisted"]: return + + resolved_host = record["domains"][0] if len(record["domains"]) else record["ip_dst"] + + if self.iocs_analysis: + for host in self.bl_hosts: + if record["ip_dst"] == host[0] and any(t in self.indicators_types for t in [host[1], "all"]): + if host[1] == "dual": + record["suspicious"] = True + self.alerts.append({"title": self.template["IOC-12"]["title"], + "description": self.template["IOC-12"]["description"].format(resolved_host), + "host": resolved_host, + "level": "Low", + "id": "IOC-12"}) + if host[1] == "tracker": + record["suspicious"] = True + self.alerts.append({"title": self.template["IOC-04"]["title"].format(resolved_host, "tracker"), + "description": self.template["IOC-04"]["description"].format(resolved_host, "tracker"), + "host": resolved_host, + "level": "Low", + "id": "IOC-04"}) + elif host[1] == "doh": + if 443 in [p["port"] for p in record["protocols"]]: + record["suspicious"] = True + self.alerts.append({"title": self.template["IOC-13"]["title"].format(f"{resolved_host}"), + "description": self.template["IOC-13"]["description"].format(f"{resolved_host}"), + "host": resolved_host, + "level": "Low", + "id": "IOC-13"}) + else: + record["suspicious"] = True + self.alerts.append({"title": self.template["IOC-01"]["title"].format(resolved_host, record["ip_dst"], host[1].upper()), + "description": self.template["IOC-01"]["description"].format(f"{resolved_host} ({record['ip_dst']})"), + "host": resolved_host, + "level": "High", + "id": "IOC-01"}) + break + + for host in self.tor_nodes: + if record["ip_dst"] == host: + record["suspicious"] = True + self.alerts.append({"title": self.template["IOC-11"]["title"].format(resolved_host, record["ip_dst"]), + "description": self.template["IOC-11"]["description"].format(f"{resolved_host} ({record['ip_dst']})"), + "host": resolved_host, + "level": "High", + "id": "IOC-11"}) + break + + for cidr in self.bl_cidrs: + try: + if IPAddress(record["ip_dst"]) in cidr[0] and any(t in self.indicators_types for t in [cidr[1], "all"]): + record["suspicious"] = True + self.alerts.append({"title": self.template["IOC-02"]["title"].format(resolved_host, cidr[0], cidr[1].upper()), + "description": self.template["IOC-02"]["description"].format(record["ip_dst"]), + "host": resolved_host, + "level": "Moderate", + "id": "IOC-02"}) + except: + continue + + if self.heuristics_analysis: + for protocol in record["protocols"]: + if protocol["name"] in ["UDP", "ICMP", "IPV6-ICMP"]: + record["suspicious"] = True + self.alerts.append({"title": self.template["PROTO-01"]["title"].format(protocol["name"], resolved_host), + "description": self.template["PROTO-01"]["description"].format(protocol["name"], resolved_host), + "host": resolved_host, + "level": "Moderate", + "id": "PROTO-01"}) + try: + if protocol["port"] >= int(self.max_ports): + record["suspicious"] = True + self.alerts.append({"title": self.template["PROTO-02"]["title"].format("", resolved_host, self.max_ports), + "description": self.template["PROTO-02"]["description"].format("", resolved_host, protocol["port"]), + "host": resolved_host, + "level": "Low", + "id": "PROTO-02"}) + except: + pass + + if protocol["name"] == "HTTP": + record["suspicious"] = True + self.alerts.append({"title": self.template["PROTO-03"]["title"].format(resolved_host), + "description": self.template["PROTO-03"]["description"].format(resolved_host), + "host": resolved_host, + "level": "Low", + "id": "PROTO-03"}) + + if protocol["name"] == "HTTP" and protocol["port"] not in self.http_default_ports: + record["suspicious"] = True + self.alerts.append({"title": self.template["PROTO-04"]["title"].format(resolved_host, protocol["port"]), + "description": self.template["PROTO-04"]["description"].format(resolved_host, protocol["port"]), + "host": resolved_host, + "level": "Moderate", + "id": "PROTO-04"}) + + def check_tls(self, record): + """Check a TLS protocol and certificates against a set of IOCs / heuristics. + Note since TLS 1.3, the certificate is not exchanged in clear text, therefore + we need to check it "actively" via the method active_check_ssl. + + 1. Check if the TLS record is not using default TLS ports. + 2. Check if one of the certificates is a free one, like Let's Encrypt. + 3. Check if the certificate is auto-signed. + 4. If the certificate has an SNI, check the domain by calling check_dnsname. + Args: + record (dict): record to be processed. + Returns: + supicious (bool) : if an alert has been leveraged. + """ + if record["whitelisted"]: return + + resolved_host = record["domains"][0] if len(record["domains"]) else record["ip_dst"] + + for certificate in record["certificates"]: + + try: + if "sni" in certificate and certificate["sni"] not in record["domains"]: + if certificate["sni"]: + if self.check_dnsname(certificate["sni"]): + record["suspicious"] = True + + if certificate["port"] not in self.tls_default_ports: + record["suspicious"] = True + self.alerts.append({"title": self.template["SSL-01"]["title"].format(certificate["port"], resolved_host), + "description": self.template["SSL-01"]["description"].format(resolved_host), + "host": resolved_host, + "level": "Moderate", + "id": "SSL-01"}) + + if float(certificate["version"].split(" ")[1]) < 1.3 and "issuerdn" in certificate: + + if certificate["issuerdn"] in self.free_issuers: + record["suspicious"] = True + self.alerts.append({"title": self.template["SSL-02"]["title"].format(resolved_host), + "description": self.template["SSL-02"]["description"], + "host": resolved_host, + "level": "Moderate", + "id": "SSL-02"}) + + elif certificate["issuerdn"] == certificate["subject"]: + record["suspicious"] = True + self.alerts.append({"title": self.template["SSL-03"]["title"].format(resolved_host), + "description": self.template["SSL-03"]["description"].format(resolved_host), + "host": resolved_host, + "level": "Moderate", + "id": "SSL-03"}) + else: + if self.active_analysis and self.connected: + if "sni" in certificate: + if certificate["sni"] not in self.cert_checked: + self.cert_checked.append(certificate["sni"]) + if self.active_check_ssl(certificate["sni"], certificate["port"]): + record["suspicious"] = True + break + else: + if resolved_host not in self.cert_checked: + self.cert_checked.append(resolved_host) + if self.active_check_ssl(resolved_host, certificate["port"]): + record["suspicious"] = True + break + except Exception as e: + self.errors.append(f"Issue when processing the following certificate (check_tls): {json.dumps(certificate)}") + + def get_tor_nodes(self) -> list: + """Get a list of TOR nodes from dan.me.uk. + + Returns: + list: list of TOR nodes + """ + + nodes = [] + if os.path.exists("/tmp/tor_nodes.lst"): + with open("/tmp/tor_nodes.lst", "r") as f: + for l in f.readlines(): + nodes.append(l.strip()) + else: + if self.connected: + try: + nodes_list = requests.get("https://www.dan.me.uk/torlist/", timeout=10).text + with open("/tmp/tor_nodes.lst", "w+") as f: + f.write(nodes_list) + for l in nodes_list.splitlines(): + nodes.append(l.strip()) + except: + self.errors.append(f"Issue when trying to get TOR nodes from dan.me.uk") + return nodes + + + def check_http(self, record): + """Check the HTTP hostname against a set of IOCs / heuristics. + Args: + record (dict): record to be processed. + Returns: + supicious (bool) : if an alert has been leveraged. + """ + if record["whitelisted"]: return + + if "http" in record: + for http in record["http"]: + if http["hostname"] not in record["domains"]: + if re.match("^[a-z\.0-9\-]+\.[a-z\-]{2,}$", http["hostname"]): + if http["hostname"]: + if self.check_dnsname(http["hostname"]): + record["suspicious"] = True + + def active_check_ssl(self, host, port): + """This method: + + 1. Check the issuer and subject of a certificate directly by connecting + to the remote server in order to bypass TLS 1.3+ restrictions. + Most of this method was been taken from: https://tinyurl.com/3vsvhu79 + + 2. Get the JARM of the remote server by using the standard poc library + from sales force. + + Args: + host (str): Host to connect to + port (int): Port to connect to + """ + try: + suspect = False + context = ssl.create_default_context() + conn = socket.create_connection((host, port)) + sock = context.wrap_socket(conn, server_hostname=host) + sock.settimeout(5) + try: + der_cert = sock.getpeercert(True) + finally: + sock.close() + + if "der_cert" in locals(): + + certificate = ssl.DER_cert_to_PEM_cert(der_cert) + x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, certificate) + + issuer = dict(x509.get_issuer().get_components()) + subject = dict(x509.get_subject().get_components()) + certhash = x509.digest("sha1").decode("utf8").replace(":", "").lower() + issuer = ", ".join(f"{k.decode('utf8')}={v.decode('utf8')}" for k, v in issuer.items()) + subject = ", ".join(f"{k.decode('utf8')}={v.decode('utf8')}" for k, v in subject.items()) + + if issuer in self.free_issuers: + self.alerts.append({"title": self.template["SSL-02"]["title"].format(host), + "description": self.template["SSL-02"]["description"], + "host": host, + "level": "Moderate", + "id": "SSL-02"}) + suspect = True + + if issuer == subject: + self.alerts.append({"title": self.template["SSL-03"]["title"].format(host), + "description": self.template["SSL-03"]["description"].format(host), + "host": host, + "level": "Moderate", + "id": "SSL-03"}) + suspect = True + + if self.iocs_analysis: + for cert in self.bl_certs: + if cert[0] == certhash and any(t in self.indicators_types for t in [cert[1], "all"]): + self.alerts.append({"title": self.template["SSL-04"]["title"].format(host, cert[1].upper()), + "description": self.template["SSL-04"]["description"].format(host), + "host": host, + "level": "High", + "id": "SSL-04"}) + suspect = True + + if self.bl_jarms: + host_jarm = get_jarm(host, port) + for jarm in self.bl_jarms: + if jarm[0] == host_jarm and any(t in self.indicators_types for t in [jarm[1], "all"]): + self.alerts.append({"title": self.template["SSL-05"]["title"].format(host, cert[1].upper()), + "description": self.template["SSL-05"]["description"].format(host), + "host": host, + "level": "High", + "id": "SSL-05"}) + suspect = True + return suspect + except: + self.errors.append(f"Issue when trying to grab the SSL certificate located at {host}:{port}") + return False + + def get_alerts(self): + """Retrieves the alerts triggered during the analysis + + Returns: + list: list of the alerts. + """ + self.analysis_end = datetime.now() + return [dict(t) for t in {tuple(d.items()) for d in self.alerts}] diff --git a/analysis/classes/jarm.py b/analysis/classes/jarm.py new file mode 100644 index 0000000..e2efab2 --- /dev/null +++ b/analysis/classes/jarm.py @@ -0,0 +1,477 @@ +# Version 1.0 (November 2020) +# +# Created by: +# John Althouse +# Andrew Smart +# RJ Nunaly +# Mike Brady +# +# Converted to Python by: +# Caleb Yu +# +# Copyright (c) 2020, salesforce.com, inc. +# All rights reserved. +# Licensed under the BSD 3-Clause license. +# For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause +# + +from __future__ import print_function + +import codecs +import socket +import struct +import os +import random +import hashlib +import ipaddress + +#Randomly choose a grease value +def choose_grease(): + grease_list = [b"\x0a\x0a", b"\x1a\x1a", b"\x2a\x2a", b"\x3a\x3a", b"\x4a\x4a", b"\x5a\x5a", b"\x6a\x6a", b"\x7a\x7a", b"\x8a\x8a", b"\x9a\x9a", b"\xaa\xaa", b"\xba\xba", b"\xca\xca", b"\xda\xda", b"\xea\xea", b"\xfa\xfa"] + return random.choice(grease_list) + +def packet_building(jarm_details): + payload = b"\x16" + #Version Check + if jarm_details[2] == "TLS_1.3": + payload += b"\x03\x01" + client_hello = b"\x03\x03" + elif jarm_details[2] == "SSLv3": + payload += b"\x03\x00" + client_hello = b"\x03\x00" + elif jarm_details[2] == "TLS_1": + payload += b"\x03\x01" + client_hello = b"\x03\x01" + elif jarm_details[2] == "TLS_1.1": + payload += b"\x03\x02" + client_hello = b"\x03\x02" + elif jarm_details[2] == "TLS_1.2": + payload += b"\x03\x03" + client_hello = b"\x03\x03" + #Random values in client hello + client_hello += os.urandom(32) + session_id = os.urandom(32) + session_id_length = struct.pack(">B", len(session_id)) + client_hello += session_id_length + client_hello += session_id + #Get ciphers + cipher_choice = get_ciphers(jarm_details) + client_suites_length = struct.pack(">H", len(cipher_choice)) + client_hello += client_suites_length + client_hello += cipher_choice + client_hello += b"\x01" #cipher methods + client_hello += b"\x00" #compression_methods + #Add extensions to client hello + extensions = get_extensions(jarm_details) + client_hello += extensions + #Finish packet assembly + inner_length = b"\x00" + inner_length += struct.pack(">H", len(client_hello)) + handshake_protocol = b"\x01" + handshake_protocol += inner_length + handshake_protocol += client_hello + outer_length = struct.pack(">H", len(handshake_protocol)) + payload += outer_length + payload += handshake_protocol + return payload + +def get_ciphers(jarm_details): + selected_ciphers = b"" + #Two cipher lists: NO1.3 and ALL + if jarm_details[3] == "ALL": + list = [b"\x00\x16", b"\x00\x33", b"\x00\x67", b"\xc0\x9e", b"\xc0\xa2", b"\x00\x9e", b"\x00\x39", b"\x00\x6b", b"\xc0\x9f", b"\xc0\xa3", b"\x00\x9f", b"\x00\x45", b"\x00\xbe", b"\x00\x88", b"\x00\xc4", b"\x00\x9a", b"\xc0\x08", b"\xc0\x09", b"\xc0\x23", b"\xc0\xac", b"\xc0\xae", b"\xc0\x2b", b"\xc0\x0a", b"\xc0\x24", b"\xc0\xad", b"\xc0\xaf", b"\xc0\x2c", b"\xc0\x72", b"\xc0\x73", b"\xcc\xa9", b"\x13\x02", b"\x13\x01", b"\xcc\x14", b"\xc0\x07", b"\xc0\x12", b"\xc0\x13", b"\xc0\x27", b"\xc0\x2f", b"\xc0\x14", b"\xc0\x28", b"\xc0\x30", b"\xc0\x60", b"\xc0\x61", b"\xc0\x76", b"\xc0\x77", b"\xcc\xa8", b"\x13\x05", b"\x13\x04", b"\x13\x03", b"\xcc\x13", b"\xc0\x11", b"\x00\x0a", b"\x00\x2f", b"\x00\x3c", b"\xc0\x9c", b"\xc0\xa0", b"\x00\x9c", b"\x00\x35", b"\x00\x3d", b"\xc0\x9d", b"\xc0\xa1", b"\x00\x9d", b"\x00\x41", b"\x00\xba", b"\x00\x84", b"\x00\xc0", b"\x00\x07", b"\x00\x04", b"\x00\x05"] + elif jarm_details[3] == "NO1.3": + list = [b"\x00\x16", b"\x00\x33", b"\x00\x67", b"\xc0\x9e", b"\xc0\xa2", b"\x00\x9e", b"\x00\x39", b"\x00\x6b", b"\xc0\x9f", b"\xc0\xa3", b"\x00\x9f", b"\x00\x45", b"\x00\xbe", b"\x00\x88", b"\x00\xc4", b"\x00\x9a", b"\xc0\x08", b"\xc0\x09", b"\xc0\x23", b"\xc0\xac", b"\xc0\xae", b"\xc0\x2b", b"\xc0\x0a", b"\xc0\x24", b"\xc0\xad", b"\xc0\xaf", b"\xc0\x2c", b"\xc0\x72", b"\xc0\x73", b"\xcc\xa9", b"\xcc\x14", b"\xc0\x07", b"\xc0\x12", b"\xc0\x13", b"\xc0\x27", b"\xc0\x2f", b"\xc0\x14", b"\xc0\x28", b"\xc0\x30", b"\xc0\x60", b"\xc0\x61", b"\xc0\x76", b"\xc0\x77", b"\xcc\xa8", b"\xcc\x13", b"\xc0\x11", b"\x00\x0a", b"\x00\x2f", b"\x00\x3c", b"\xc0\x9c", b"\xc0\xa0", b"\x00\x9c", b"\x00\x35", b"\x00\x3d", b"\xc0\x9d", b"\xc0\xa1", b"\x00\x9d", b"\x00\x41", b"\x00\xba", b"\x00\x84", b"\x00\xc0", b"\x00\x07", b"\x00\x04", b"\x00\x05"] + #Change cipher order + if jarm_details[4] != "FORWARD": + list = cipher_mung(list, jarm_details[4]) + #Add GREASE to beginning of cipher list (if applicable) + if jarm_details[5] == "GREASE": + list.insert(0,choose_grease()) + #Generate cipher list + for cipher in list: + selected_ciphers += cipher + return selected_ciphers + +def cipher_mung(ciphers, request): + output = [] + cipher_len = len(ciphers) + #Ciphers backward + if (request == "REVERSE"): + output = ciphers[::-1] + #Bottom half of ciphers + elif (request == "BOTTOM_HALF"): + if (cipher_len % 2 == 1): + output = ciphers[int(cipher_len/2)+1:] + else: + output = ciphers[int(cipher_len/2):] + #Top half of ciphers in reverse order + elif (request == "TOP_HALF"): + if (cipher_len % 2 == 1): + output.append(ciphers[int(cipher_len/2)]) + #Top half gets the middle cipher + output += cipher_mung(cipher_mung(ciphers, "REVERSE"),"BOTTOM_HALF") + #Middle-out cipher order + elif (request == "MIDDLE_OUT"): + middle = int(cipher_len/2) + # if ciphers are uneven, start with the center. Second half before first half + if (cipher_len % 2 == 1): + output.append(ciphers[middle]) + for i in range(1, middle+1): + output.append(ciphers[middle + i]) + output.append(ciphers[middle - i]) + else: + for i in range(1, middle+1): + output.append(ciphers[middle-1 + i]) + output.append(ciphers[middle - i]) + return output + +def get_extensions(jarm_details): + extension_bytes = b"" + all_extensions = b"" + grease = False + #GREASE + if jarm_details[5] == "GREASE": + all_extensions += choose_grease() + all_extensions += b"\x00\x00" + grease = True + #Server name + all_extensions += extension_server_name(jarm_details[0]) + #Other extensions + extended_master_secret = b"\x00\x17\x00\x00" + all_extensions += extended_master_secret + max_fragment_length = b"\x00\x01\x00\x01\x01" + all_extensions += max_fragment_length + renegotiation_info = b"\xff\x01\x00\x01\x00" + all_extensions += renegotiation_info + supported_groups = b"\x00\x0a\x00\x0a\x00\x08\x00\x1d\x00\x17\x00\x18\x00\x19" + all_extensions += supported_groups + ec_point_formats = b"\x00\x0b\x00\x02\x01\x00" + all_extensions += ec_point_formats + session_ticket = b"\x00\x23\x00\x00" + all_extensions += session_ticket + #Application Layer Protocol Negotiation extension + all_extensions += app_layer_proto_negotiation(jarm_details) + signature_algorithms = b"\x00\x0d\x00\x14\x00\x12\x04\x03\x08\x04\x04\x01\x05\x03\x08\x05\x05\x01\x08\x06\x06\x01\x02\x01" + all_extensions += signature_algorithms + #Key share extension + all_extensions += key_share(grease) + psk_key_exchange_modes = b"\x00\x2d\x00\x02\x01\x01" + all_extensions += psk_key_exchange_modes + #Supported versions extension + if (jarm_details[2] == "TLS_1.3") or (jarm_details[7] == "1.2_SUPPORT"): + all_extensions += supported_versions(jarm_details, grease) + #Finish assembling extensions + extension_length = len(all_extensions) + extension_bytes += struct.pack(">H", extension_length) + extension_bytes += all_extensions + return extension_bytes + +#Client hello server name extension +def extension_server_name(host): + ext_sni = b"\x00\x00" + ext_sni_length = len(host)+5 + ext_sni += struct.pack(">H", ext_sni_length) + ext_sni_length2 = len(host)+3 + ext_sni += struct.pack(">H", ext_sni_length2) + ext_sni += b"\x00" + ext_sni_length3 = len(host) + ext_sni += struct.pack(">H", ext_sni_length3) + ext_sni += host.encode() + return ext_sni + +#Client hello apln extension +def app_layer_proto_negotiation(jarm_details): + ext = b"\x00\x10" + if (jarm_details[6] == "RARE_APLN"): + #Removes h2 and http/1.1 + alpns = [b"\x08\x68\x74\x74\x70\x2f\x30\x2e\x39", b"\x08\x68\x74\x74\x70\x2f\x31\x2e\x30", b"\x06\x73\x70\x64\x79\x2f\x31", b"\x06\x73\x70\x64\x79\x2f\x32", b"\x06\x73\x70\x64\x79\x2f\x33", b"\x03\x68\x32\x63", b"\x02\x68\x71"] + else: + #All apln extensions in order from weakest to strongest + alpns = [b"\x08\x68\x74\x74\x70\x2f\x30\x2e\x39", b"\x08\x68\x74\x74\x70\x2f\x31\x2e\x30", b"\x08\x68\x74\x74\x70\x2f\x31\x2e\x31", b"\x06\x73\x70\x64\x79\x2f\x31", b"\x06\x73\x70\x64\x79\x2f\x32", b"\x06\x73\x70\x64\x79\x2f\x33", b"\x02\x68\x32", b"\x03\x68\x32\x63", b"\x02\x68\x71"] + #apln extensions can be reordered + if jarm_details[8] != "FORWARD": + alpns = cipher_mung(alpns, jarm_details[8]) + all_alpns = b"" + for alpn in alpns: + all_alpns += alpn + second_length = len(all_alpns) + first_length = second_length+2 + ext += struct.pack(">H", first_length) + ext += struct.pack(">H", second_length) + ext += all_alpns + return ext + +#Generate key share extension for client hello +def key_share(grease): + ext = b"\x00\x33" + #Add grease value if necessary + if grease == True: + share_ext = choose_grease() + share_ext += b"\x00\x01\x00" + else: + share_ext = b"" + group = b"\x00\x1d" + share_ext += group + key_exchange_length = b"\x00\x20" + share_ext += key_exchange_length + share_ext += os.urandom(32) + second_length = len(share_ext) + first_length = second_length+2 + ext += struct.pack(">H", first_length) + ext += struct.pack(">H", second_length) + ext += share_ext + return ext + +#Supported version extension for client hello +def supported_versions(jarm_details, grease): + if (jarm_details[7] == "1.2_SUPPORT"): + #TLS 1.3 is not supported + tls = [b"\x03\x01", b"\x03\x02", b"\x03\x03"] + else: + #TLS 1.3 is supported + tls = [b"\x03\x01", b"\x03\x02", b"\x03\x03", b"\x03\x04"] + #Change supported version order, by default, the versions are from oldest to newest + if jarm_details[8] != "FORWARD": + tls = cipher_mung(tls, jarm_details[8]) + #Assemble the extension + ext = b"\x00\x2b" + #Add GREASE if applicable + if grease == True: + versions = choose_grease() + else: + versions = b"" + for version in tls: + versions += version + second_length = len(versions) + first_length = second_length+1 + ext += struct.pack(">H", first_length) + ext += struct.pack(">B", second_length) + ext += versions + return ext + +#Send the assembled client hello using a socket +def send_packet(packet, destination_host, destination_port): + try: + #Determine if the input is an IP or domain name + try: + if (type(ipaddress.ip_address(destination_host)) == ipaddress.IPv4Address) or (type(ipaddress.ip_address(destination_host)) == ipaddress.IPv6Address): + raw_ip = True + ip = (destination_host, destination_port) + except ValueError as e: + ip = (None, None) + raw_ip = False + #Connect the socket + if ":" in destination_host: + sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) + sock.settimeout(10) + sock.connect((destination_host, destination_port, 0, 0)) + else: + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.settimeout(10) + sock.connect((destination_host, destination_port)) + #Resolve IP if given a domain name + if raw_ip == False: + ip = sock.getpeername() + sock.sendall(packet) + #Receive server hello + data = sock.recv(1484) + #Close socket + sock.shutdown(socket.SHUT_RDWR) + sock.close() + return bytearray(data), ip[0] + #Timeout errors result in an empty hash + except socket.timeout as e: + sock.close() + return "TIMEOUT", ip[0] + except Exception as e: + sock.close() + return None, ip[0] + +#If a packet is received, decipher the details +def read_packet(data, jarm_details): + try: + if data == None: + return "|||" + jarm = "" + #Server hello error + if data[0] == 21: + selected_cipher = b"" + return "|||" + #Check for server hello + elif (data[0] == 22) and (data[5] == 2): + server_hello_length = int.from_bytes(data[3:5], "big") + counter = data[43] + #Find server's selected cipher + selected_cipher = data[counter+44:counter+46] + #Find server's selected version + version = data[9:11] + #Format + jarm += codecs.encode(selected_cipher, 'hex').decode('ascii') + jarm += "|" + jarm += codecs.encode(version, 'hex').decode('ascii') + jarm += "|" + #Extract extensions + extensions = (extract_extension_info(data, counter, server_hello_length)) + jarm += extensions + return jarm + else: + return "|||" + + except Exception as e: + return "|||" + +#Deciphering the extensions in the server hello +def extract_extension_info(data, counter, server_hello_length): + try: + #Error handling + if (data[counter+47] == 11): + return "|" + elif (data[counter+50:counter+53] == b"\x0e\xac\x0b") or (data[82:85] == b"\x0f\xf0\x0b"): + return "|" + elif counter+42 >= server_hello_length: + return "|" + count = 49+counter + length = int(codecs.encode(data[counter+47:counter+49], 'hex'), 16) + maximum = length+(count-1) + types = [] + values = [] + #Collect all extension types and values for later reference + while count < maximum: + types.append(data[count:count+2]) + ext_length = int(codecs.encode(data[count+2:count+4], 'hex'), 16) + if ext_length == 0: + count += 4 + values.append("") + else: + values.append(data[count+4:count+4+ext_length]) + count += ext_length+4 + result = "" + #Read application_layer_protocol_negotiation + alpn = find_extension(b"\x00\x10", types, values) + result += str(alpn) + result += "|" + #Add formating hyphens + add_hyphen = 0 + while add_hyphen < len(types): + result += codecs.encode(types[add_hyphen], 'hex').decode('ascii') + add_hyphen += 1 + if add_hyphen == len(types): + break + else: + result += "-" + return result + #Error handling + except IndexError as e: + result = "|" + return result + +#Matching cipher extensions to values +def find_extension(ext_type, types, values): + iter = 0 + #For the APLN extension, grab the value in ASCII + if ext_type == b"\x00\x10": + while iter < len(types): + if types[iter] == ext_type: + return ((values[iter][3:]).decode()) + iter += 1 + else: + while iter < len(types): + if types[iter] == ext_type: + return values[iter].hex() + iter += 1 + return "" + +#Custom fuzzy hash +def jarm_hash(jarm_raw): + #If jarm is empty, 62 zeros for the hash + if jarm_raw == "|||,|||,|||,|||,|||,|||,|||,|||,|||,|||": + return "0"*62 + fuzzy_hash = "" + handshakes = jarm_raw.split(",") + alpns_and_ext = "" + for handshake in handshakes: + components = handshake.split("|") + #Custom jarm hash includes a fuzzy hash of the ciphers and versions + fuzzy_hash += cipher_bytes(components[0]) + fuzzy_hash += version_byte(components[1]) + alpns_and_ext += components[2] + alpns_and_ext += components[3] + #Custom jarm hash has the sha256 of alpns and extensions added to the end + sha256 = (hashlib.sha256(alpns_and_ext.encode())).hexdigest() + fuzzy_hash += sha256[0:32] + return fuzzy_hash + +#Fuzzy hash for ciphers is the index number (in hex) of the cipher in the list +def cipher_bytes(cipher): + if cipher == "": + return "00" + list = [b"\x00\x04", b"\x00\x05", b"\x00\x07", b"\x00\x0a", b"\x00\x16", b"\x00\x2f", b"\x00\x33", b"\x00\x35", b"\x00\x39", b"\x00\x3c", b"\x00\x3d", b"\x00\x41", b"\x00\x45", b"\x00\x67", b"\x00\x6b", b"\x00\x84", b"\x00\x88", b"\x00\x9a", b"\x00\x9c", b"\x00\x9d", b"\x00\x9e", b"\x00\x9f", b"\x00\xba", b"\x00\xbe", b"\x00\xc0", b"\x00\xc4", b"\xc0\x07", b"\xc0\x08", b"\xc0\x09", b"\xc0\x0a", b"\xc0\x11", b"\xc0\x12", b"\xc0\x13", b"\xc0\x14", b"\xc0\x23", b"\xc0\x24", b"\xc0\x27", b"\xc0\x28", b"\xc0\x2b", b"\xc0\x2c", b"\xc0\x2f", b"\xc0\x30", b"\xc0\x60", b"\xc0\x61", b"\xc0\x72", b"\xc0\x73", b"\xc0\x76", b"\xc0\x77", b"\xc0\x9c", b"\xc0\x9d", b"\xc0\x9e", b"\xc0\x9f", b"\xc0\xa0", b"\xc0\xa1", b"\xc0\xa2", b"\xc0\xa3", b"\xc0\xac", b"\xc0\xad", b"\xc0\xae", b"\xc0\xaf", b'\xcc\x13', b'\xcc\x14', b'\xcc\xa8', b'\xcc\xa9', b'\x13\x01', b'\x13\x02', b'\x13\x03', b'\x13\x04', b'\x13\x05'] + count = 1 + for bytes in list: + strtype_bytes = codecs.encode(bytes, 'hex').decode('ascii') + if cipher == strtype_bytes: + break + count += 1 + hexvalue = str(hex(count))[2:] + #This part must always be two bytes + if len(hexvalue) < 2: + return_bytes = "0" + hexvalue + else: + return_bytes = hexvalue + return return_bytes + +#This captures a single version byte based on version +def version_byte(version): + if version == "": + return "0" + options = "abcdef" + count = int(version[3:4]) + byte = options[count] + return byte + +def ParseNumber(number): + if number.startswith('0x'): + return int(number[2:], 16) + else: + return int(number) + +def get_jarm(destination_host, destination_port): + #Select the packets and formats to send + #Array format = [destination_host,destination_port,version,cipher_list,cipher_order,GREASE,RARE_APLN,1.3_SUPPORT,extension_orders] + tls1_2_forward = [destination_host, destination_port, "TLS_1.2", "ALL", "FORWARD", "NO_GREASE", "APLN", "1.2_SUPPORT", "REVERSE"] + tls1_2_reverse = [destination_host, destination_port, "TLS_1.2", "ALL", "REVERSE", "NO_GREASE", "APLN", "1.2_SUPPORT", "FORWARD"] + tls1_2_top_half = [destination_host, destination_port, "TLS_1.2", "ALL", "TOP_HALF", "NO_GREASE", "APLN", "NO_SUPPORT", "FORWARD"] + tls1_2_bottom_half = [destination_host, destination_port, "TLS_1.2", "ALL", "BOTTOM_HALF", "NO_GREASE", "RARE_APLN", "NO_SUPPORT", "FORWARD"] + tls1_2_middle_out = [destination_host, destination_port, "TLS_1.2", "ALL", "MIDDLE_OUT", "GREASE", "RARE_APLN", "NO_SUPPORT", "REVERSE"] + tls1_1_middle_out = [destination_host, destination_port, "TLS_1.1", "ALL", "FORWARD", "NO_GREASE", "APLN", "NO_SUPPORT", "FORWARD"] + tls1_3_forward = [destination_host, destination_port, "TLS_1.3", "ALL", "FORWARD", "NO_GREASE", "APLN", "1.3_SUPPORT", "REVERSE"] + tls1_3_reverse = [destination_host, destination_port, "TLS_1.3", "ALL", "REVERSE", "NO_GREASE", "APLN", "1.3_SUPPORT", "FORWARD"] + tls1_3_invalid = [destination_host, destination_port, "TLS_1.3", "NO1.3", "FORWARD", "NO_GREASE", "APLN", "1.3_SUPPORT", "FORWARD"] + tls1_3_middle_out = [destination_host, destination_port, "TLS_1.3", "ALL", "MIDDLE_OUT", "GREASE", "APLN", "1.3_SUPPORT", "REVERSE"] + #Possible versions: SSLv3, TLS_1, TLS_1.1, TLS_1.2, TLS_1.3 + #Possible cipher lists: ALL, NO1.3 + #GREASE: either NO_GREASE or GREASE + #APLN: either APLN or RARE_APLN + #Supported Verisons extension: 1.2_SUPPPORT, NO_SUPPORT, or 1.3_SUPPORT + #Possible Extension order: FORWARD, REVERSE + queue = [tls1_2_forward, tls1_2_reverse, tls1_2_top_half, tls1_2_bottom_half, tls1_2_middle_out, tls1_1_middle_out, tls1_3_forward, tls1_3_reverse, tls1_3_invalid, tls1_3_middle_out] + jarm = "" + #Assemble, send, and decipher each packet + iterate = 0 + while iterate < len(queue): + payload = packet_building(queue[iterate]) + server_hello, ip = send_packet(payload, destination_host, destination_port) + #Deal with timeout error + if server_hello == "TIMEOUT": + jarm = "|||,|||,|||,|||,|||,|||,|||,|||,|||,|||" + break + ans = read_packet(server_hello, queue[iterate]) + jarm += ans + iterate += 1 + if iterate == len(queue): + break + else: + jarm += "," + #Fuzzy hash + return jarm_hash(jarm) \ No newline at end of file diff --git a/analysis/classes/report.py b/analysis/classes/report.py new file mode 100755 index 0000000..e85403a --- /dev/null +++ b/analysis/classes/report.py @@ -0,0 +1,475 @@ +import weasyprint +import os +import json +import hashlib +import re +import sys + +from weasyprint import HTML +from pathlib import Path +from datetime import datetime +from utils import get_config + + +class Report(object): + + def __init__(self, capture_directory, analysis_duration): + self.capture_directory = capture_directory + self.alerts = self.read_json(os.path.join(capture_directory, "assets/alerts.json")) + self.records = self.read_json(os.path.join(capture_directory, "assets/records.json")) + self.methods = self.read_json(os.path.join(capture_directory, "assets/detection_methods.json")) + self.device = self.read_json(os.path.join(capture_directory, "assets/device.json")) + self.capinfos = self.read_json(os.path.join(capture_directory, "assets/capinfos.json")) + self.instance = self.read_json(os.path.join(capture_directory, "assets/instance.json")) + self.analysis_duration = analysis_duration + + with open(os.path.join(self.capture_directory, "capture.pcap"), "rb") as f: + self.capture_sha1 = hashlib.sha1(f.read()).hexdigest() + + self.userlang = get_config(("frontend", "user_lang")) + + # Load template language + if not re.match("^[a-z]{2,3}$", self.userlang): + self.userlang = "en" + with open(os.path.join(os.path.dirname(os.path.realpath(sys.argv[0])), "locales/{}.json".format(self.userlang))) as f: + self.template = json.load(f)["report"] + + def read_json(self, json_path): + """Read a JSON + + Args: + json_path (_type_): _description_ + + Returns: + _type_: _description_ + """ + with open(json_path, "r") as json_file: + return json.load(json_file) + + def generate_report(self): + """Generate the full report and save it as report.pdf """ + + content = self.generate_page_header() + content += self.generate_header() + content += self.generate_warning() + content += self.generate_alerts() + content += self.generate_suspect_conns_block() + content += self.generate_uncat_conns_block() + content += self.generate_whitelist_block() + + htmldoc = HTML(string=content, base_url="").write_pdf() + Path(os.path.join(self.capture_directory, + "report.pdf")).write_bytes(htmldoc) + + def generate_warning(self): + """Generate the main warning message on the report + + Returns: + string: HTML code of the main warning message. + """ + if len(self.alerts["high"]): + msg = "
" + msg += self.template["high_msg"].format( + self.nb_translate(len(self.alerts["high"]))) + msg += "
" + return msg + elif len(self.alerts["moderate"]): + msg = "
" + msg += self.template["moderate_msg"].format( + self.nb_translate(len(self.alerts["moderate"]))) + msg += "
" + return msg + elif len(self.alerts["low"]): + msg = "
" + msg += self.template["low_msg"].format( + self.nb_translate(len(self.alerts["low"]))) + msg += "
" + return msg + else: + msg = "
" + msg += self.template["none_msg"] + msg += "
" + return msg + + def nb_translate(self, nb): + """ Translate a number in a string. + + Args: + nb (int): integer + + Returns: + string: A translated string related to the integer + """ + a = self.template["numbers"] + return a[nb-1] if nb <= 9 else str(nb) + + def generate_suspect_conns_block(self): + """Generate the block and the table of communications categorized as suspect. + + Returns: + str: HTML block of the suspect communications + """ + + tbody = "" + + for record in self.records: + if record["suspicious"] == True: + tbody += "" + tbody += f"{', '.join([p['name'] for p in record['protocols']])}" + tbody += f"{', '.join(record['domains'])}" + tbody += f"{record['ip_dst']}" + tbody += f"{', '.join([str(p['port']) if p['port'] != -1 else '--' for p in record['protocols']])}" + tbody += "" + + if len(tbody): + title = f"

{self.template['suspect_title']}

" + table = "" + table += " " + table += " " + table += f" " + table += f" " + table += f" " + table += f" " + table += " " + table += " " + table += "" + table += tbody + table += "
{self.template['protocol']}{self.template['domain']}{self.template['dst_ip']}{self.template['dst_port']}
" + return title + table + else: + return "" + + def generate_uncat_conns_block(self): + """Generate the block and the table of the uncategorized communications + + Returns: + str: HTML block of the uncategorized communications + """ + tbody = "" + + for record in self.records: + if record["suspicious"] == False and record["whitelisted"] == False: + tbody += "" + tbody += f"{', '.join([p['name'] for p in record['protocols']])}" + tbody += f"{', '.join(record['domains'])}" + tbody += f"{record['ip_dst']}" + tbody += f"{', '.join([str(p['port']) if p['port'] != -1 else '--' for p in record['protocols']])}" + tbody += "" + + if len(tbody): + title = "

{}

".format(self.template["uncat_title"]) + table = "" + table += " " + table += " " + table += f" " + table += f" " + table += f" " + table += f" " + table += " " + table += " " + table += "" + table += tbody + table += "
{self.template['protocol']}{self.template['domain']}{self.template['dst_ip']}{self.template['dst_port']}
" + return title + table + else: + return "" + + def generate_whitelist_block(self): + """Generate the block and the table of the whitelisted communications + + Returns: + str: HTML block of the whitelisted communications + """ + + tbody = "" + + for record in self.records: + if record["whitelisted"] == True: + tbody += "" + tbody += f"{', '.join([p['name'] for p in record['protocols']])}" + tbody += f"{', '.join(record['domains'])}" + tbody += f"{record['ip_dst']}" + tbody += f"{', '.join([str(p['port']) if p['port'] != -1 else '--' for p in record['protocols']])}" + tbody += "" + + if len(tbody): + title = "

{}

".format(self.template["whitelist_title"]) + table = "" + table += " " + table += " " + table += f" " + table += f" " + table += f" " + table += f" " + table += " " + table += " " + table += "" + table += tbody + table += "
{self.template['protocol']}{self.template['domain']}{self.template['dst_ip']}{self.template['dst_port']}
" + return title + table + else: + return "" + + def generate_header(self): + """Generate the report headers with the capture's metadata. + + Returns: + str: HTML block containing the data. + """ + header = "
" + header += "
" + header += f"


{self.template['device_mac']}: {self.device['mac_address']}
" + header += f"{self.template['detection_methods']}: {'☑' if self.methods['iocs'] else '☐'} IOCs {'☑' if self.methods['heuristics'] else '☐'} Heuristics {'☑' if self.methods['active'] else '☐'} Active analysis
" + header += f"{self.template['capture_sha1']}: {self.capture_sha1}
" + header += f"{self.template['instance_uuid']}: {self.instance['instance_uuid']}
" + header += f"{self.template['report_generated_on']} {datetime.now().strftime('%d/%m/%Y - %H:%M:%S')}
" + if self.capinfos is not None: + header += f"{self.template['capture_duration']}: {self.capinfos['Capture duration'].split(' ')[0]} {self.template['seconds']}
" + header += f"{self.template['analysis_duration']}: {self.analysis_duration} {self.template['seconds']}
" + header += f"{self.template['packets_number']}: {self.capinfos['Number of packets']}
" + header += "

" + header += "
" + return header + + def generate_alerts(self): + """Generate a block embedding the alerts triggered during the analysis. + + Returns: + str: HTML block containing the data. + """ + alerts = "
    " + for alert in self.alerts["high"]: + alerts += "
  • " + alerts += "High" + alerts += "{}".format(alert["id"]) + alerts += "
    " + alerts += "{}".format(alert["title"]) + alerts += "

    {}

    ".format( + alert["description"]) + alerts += "
    " + alerts += "
  • " + + for alert in self.alerts["moderate"]: + alerts += "
  • " + alerts += "moderate" + alerts += "{}".format(alert["id"]) + alerts += "
    " + alerts += "{}".format(alert["title"]) + alerts += "

    {}

    ".format( + alert["description"]) + alerts += "
    " + alerts += "
  • " + for alert in self.alerts["low"]: + alerts += "
  • " + alerts += "low" + alerts += "{}".format(alert["id"]) + alerts += "
    " + alerts += "{}".format(alert["title"]) + alerts += "

    {}

    ".format( + alert["description"]) + alerts += "
    " + alerts += "
  • " + + alerts += "
" + return alerts + + def generate_page_footer(self): + """Generate the page footer + + Returns: + str: HTML block closing the page + """ + return "" + + def generate_page_header(self): + """Generate the page header + + Returns: + str: HTML block containing the page header with the CSS. + """ + return """ + + + """.replace("REPORT_HEADER", "{} {}".format(self.template["report_for_the_capture"], self.capture_sha1)).replace("REPORT_FOOTER", self.template["report_footer"]) diff --git a/analysis/locales/de.json b/analysis/locales/de.json new file mode 100755 index 0000000..68d6d31 --- /dev/null +++ b/analysis/locales/de.json @@ -0,0 +1,147 @@ +{ + "alerts": { + "PROTO-01": { + "title": "Es besteht {} Kommunikationsverbindung zu {} außerhalb des lokalen Netzwerks.", + "description": "Das Protokoll {} wird häufig in internen Netzwerken verwendet. Bitte überprüfen Sie, ob der Host {} andere Warnungen verursacht hat, was auf bösartiges Verhalten hindeuten kann." + }, + "PROTO-02": { + "title": "{} Verbindung zu {} zu einem Port größer als oder gleich {}.", + "description": "{} Verbindungen zu {} über den Port {} wurden erkannt. Die Verwendung eines nicht standardmäßigen Ports ist manchmal ein Merkmal für bösartige Aktivitäten. Wir empfehlen, die Reputation dieses Hosts zu überprüfen, indem Sie sich andere Warnungen ansehen und im Internet danach suchen." + }, + "PROTO-03": { + "title": "Mit dem Host {} wurde per HTTP kommuniziert.", + "description": "Ihr Gerät hat mit dem Host {} über das unverschlüsselte HTTP-Protokoll kommuniziert. Auch wenn dieses Verhalten an sich nicht bösartig ist, ist es ungewöhnlich, dass von Smartphone-Anwendungen, die im Hintergrund laufen, HTTP-Kommunikationen ausgehen. Bitte überprüfen Sie die Reputation des Hosts anhand einer Internetsuche." + }, + "PROTO-04": { + "title": "Mit dem Host {} wurde über einen nicht standardmäßigen Port ({}) per HTTP kommuniziert.", + "description": "Ihr Gerät hat mit dem Host {} über den Port {} über das unverschlüsselte HTTP-Protokoll kommuniziert. Dieses Verhalten ist recht ungewöhnlich. Bitte überprüfen Sie die Reputation des Hosts anhand einer Internetsuche." + }, + "PROTO-05": { + "title": "Der Server {} wurde während der Sitzung nicht in einer DNS-Abfrage aufgelöst.", + "description": "Das bedeutet, dass der Server {} möglicherweise in keinen Domain-Namen aufgelöst wird oder dass die Auflösung bereits vom Gerät zwischengespeichert wurde. Wenn dieser Host in anderen Warnungen vorkommt, überprüfen Sie ihn bitte." + }, + "IOC-01": { + "title": "Es wurde eine Verbindung zu {} hergestellt ({}), was als {} gekennzeichnet ist.", + "description": "Der Host {} wurde aufgrund bösartiger Aktivitäten explizit auf die Sperrliste gesetzt. Ihr Gerät ist wahrscheinlich kompromittiert und muss von IT-Sicherheitsexperten genauer untersucht werden." + }, + "IOC-02": { + "title": "Kommunikation mit {} unter dem CIDR {}, der als {} gekennzeichnet ist.", + "description": "Der Server {} wird in einem Netzwerk gehostet, das für bösartige Aktivitäten bekannt ist. Auch wenn dieses Verhalten an sich nicht bösartig ist, müssen Sie überprüfen, ob dieser Host auch in anderen Warnungen erwähnt wird. Wenn Sie Zweifel haben, suchen Sie im Internet nach diesem Host, um zu sehen, ob er legitim ist." + }, + "IOC-03": { + "title": "Es wurde eine DNS-Abfrage zu {} ausgeführt, was als {} gekennzeichnet ist.", + "description": "Der in der Aufnahme vorkommende Domain-Name {} wurde explizit als bösartig gekennzeichnet. Dies weist darauf hin, dass Ihr Gerät wahrscheinlich kompromittiert ist und eingehend untersucht werden muss." + }, + "IOC-04": { + "title": "Es wurde eine DNS-Abfrage zu {} ausgeführt, was als {} gekennzeichnet ist.", + "description": "Der in der Aufnahme vorkommende Domain-Name {} wurde explizit als Tracker gekennzeichnet. Dies weist darauf hin, dass eine der aktiven Apps Ihren Standort geografisch verfolgt." + }, + "IOC-05": { + "title": "Es wurde eine DNS-Abfrage zur Domain {} ausgeführt, die einen Free-DNS-Dienst nutzt.", + "description": "Der Domain-Name {} nutzt einen Free-DNS-Dienst. Dienste dieser Art werden häufig von Cyberkriminellen oder staatlich unterstützten Angreifern bei ihren Operationen genutzt. Es ist sehr verdächtig, dass eine im Hintergrund laufende Anwendung einen solchen Dienst verwendet. Bitte untersuchen Sie das näher." + }, + "IOC-06": { + "title": "Es wurde eine DNS-Abfrage zur Domain {} ausgeführt, die eine verdächtige TLD enthält.", + "description": "Der Domain-Name {} nutzt eine verdächtige Top-Level-Domain ({}). Diese nicht-generische TLD ist zwar selbst nicht bösartig, wird aber häufig von Cyberkriminellen und bei staatlich unterstützten Operationen verwendet. Bitte überprüfen Sie diese Domain anhand einer Internetsuche. Wenn dieser Host in anderen Warnungen erwähnt wird, können Sie ihn als sehr verdächtig betrachten." + }, + "IOC-07": { + "title": "Ein Zertifikat, das mit {} Aktivitäten verknüpft ist, wurde in der Kommunikationsverbindung zu {} gefunden.", + "description": "Das Zertifikat ({}), das mit {} verknüpft ist, wurde explizit als bösartig gekennzeichnet. Dies weist darauf hin, dass Ihr Gerät wahrscheinlich kompromittiert ist und eine forensische Analyse benötigt." + }, + "IOC-08": { + "title": "Es wurde eine HTTP-Abfrage zu {} ausgeführt, was als {} gekennzeichnet ist.", + "description": "Der in der Aufnahme vorkommende Domain-Name {} wurde explizit als bösartig gekennzeichnet. Dies weist darauf hin, dass Ihr Gerät wahrscheinlich kompromittiert ist und eingehend untersucht werden muss." + }, + "IOC-09": { + "title": "Es wurde eine HTTP-Abfrage zur Domain {} ausgeführt, die einen Free-DNS-Dienst nutzt.", + "description": "Der Domain-Name {} nutzt einen Free-DNS-Dienst. Dienste dieser Art werden häufig von Cyberkriminellen oder staatlich unterstützten Angreifern bei ihren Operationen genutzt. Es ist sehr verdächtig, dass eine im Hintergrund laufende Anwendung einen solchen Dienst verwendet. Bitte untersuchen Sie das näher." + }, + "IOC-10": { + "title": "Es wurde eine HTTP-Abfrage zur Domain {} ausgeführt, die eine verdächtige TLD enthält.", + "description": "Der Domain-Name {} nutzt eine verdächtige Top-Level-Domain ({}). Diese nicht-generische TLD ist zwar selbst nicht bösartig, wird aber häufig von Cyberkriminellen und bei staatlich unterstützten Operationen verwendet. Bitte überprüfen Sie diese Domain anhand einer Internetsuche. Wenn dieser Host in anderen Warnungen erwähnt wird, können Sie ihn als sehr verdächtig betrachten." + }, + "IOC-11": { + "title": "Verbindung zu {} ({}), die als TOR-Knoten referenziert wird.", + "description": "Der Server {} wird als Knoten im TOR-Anonymisierungsnetzwerk referenziert. Das analysierte Gerät scheint TOR zu verwenden oder mit einem Server zu kommunizieren, der als TOR-Eingangs- oder -Ausgangsknoten konfiguriert ist. Einige Angreifer nutzen TOR auf ihren Servern, um ihre Spuren zu verwischen." + }, + "IOC-12": { + "title": "Eine Anwendung fordert einen legitimen Dienst an, der möglicherweise doppelt verwendet wird." + "description": "Der Server {} wird für legitime Zwecke verwendet. Einige Angreifer können ihn jedoch verwenden, um mit ihren Implantaten zu interagieren. Es wird empfohlen, zu überprüfen, ob das analysierte Gerät eine legitime Anwendung enthält, die diesen Dienst verwendet." + }, + "IOC-13": { + "title": "Mindestens eine Anwendung verwendet verschlüsselte DNS-Abfragen." + "description": "Der DNS over HTTPs server {} wurde während der Erfassung kontaktiert. Dies scheint darauf hinzuweisen, dass mindestens eine Anwendung diese Technik verwendet, um ihre DNS-Anfragen zu verschlüsseln. Diese Funktion schränkt die Scanfunktionen von SpyGuard ein. Wenn diese Funktion auf dem analysierten Gerät nicht aktiviert ist, kann es sich lohnen, herauszufinden, welche App diese Methode verwendet." + }, + "ACT-01": { + "title": "Die Domain {} nutzt einen verdächtigen Nameserver ({}).", + "description": "Der Domain-Name {} nutzt einen Nameserver, der explizit mit bösartigen Aktivitäten in Verbindung gebracht wird. Viele Cyberkriminelle und staatlich unterstützte Angreifer nutzen Registrare dieser Art, weil sie Kryptowährungen und anonyme Zahlungen zulassen. Es wird empfohlen, diese Domain und die damit verknüpfte laufende Anwendung mithilfe einer forensischen Analyse des Telefons näher zu untersuchen." + }, + "ACT-02": { + "title": "Die Domain {} wurde vor kurzem (vor {} Tagen) erstellt.", + "description": "Der Domainname {} ist neu. Auch wenn dies nicht von Natur aus böswillig ist, richten Angreifer häufig für jede Kampagne eine neue Infrastruktur ein, die zur Verwendung neu registrierter Domainnamen führen kann." + }, + "SSL-01": { + "title": "SSL-Verbindung über einen nicht standardmäßigen Port ({})", + "description": "Es ist ungewöhnlich, dass SSL-Verbindungen von Smartphones über einen nicht standardmäßigen Port hergestellt werden. Das kann durchaus legitim sein, aber wir empfehlen dennoch, die Reputation von {} zu überprüfen. Sehen Sie sich dazu den entsprechenden WHOIS-Eintrag, das zugehörige autonome System und das Erstellungsdatum an und suchen Sie im Internet danach." + }, + "SSL-02": { + "title": "Eine SSL-Verbindung zu {} verwendet ein kostenloses Zertifikat.", + "description": "Kostenlose Zertifikate – wie z. B. Let's Encrypt – werden gerne von Command-and-Control-Servern verwendet, die mit bösartigen Implants und Phishing-Webseiten in Verbindung stehen. Wir empfehlen, den mit diesem Zertifikat verknüpften Host zu überprüfen. Sehen Sie sich dazu seinen Domain-Namen und das Erstellungsdatum an oder überprüfen Sie die Reputation des Hosts im Internet." + }, + "SSL-03": { + "title": "Das mit {} verknüpfte Zertifikat ist selbstsigniert.", + "description": "Die Verwendung von selbstsignierten Zertifikaten ist in der Infrastruktur von Angreifern weit verbreitet. Wir empfehlen, den mit diesem Zertifikat verknüpften Host {} zu überprüfen. Sehen Sie sich dazu seinen Domain-Namen (falls vorhanden), den WHOIS-Eintrag und das Erstellungsdatum an und überprüfen Sie die Reputation des Hosts im Internet." + }, + "SSL-04": { + "title": "Das mit {} verknüpfte Zertifikat ist mit böswilligen Aktivitäten ({})" verknüpft, + "description": "Das mit server {} verknüpfte Zertifikat wurde explizit als bösartig eingestuft. Ihr Gerät sieht kompromittiert aus und muss von einem professionellen Team weiter untersucht werden." + }, + "SSL-05": { + "title": "Die SSL-Konfiguration von {} ist mit bösartigen Aktivitäten ({})" verknüpft, + "description": "Der serverbezogene JARM-Hash {} wurde explizit mit bösartigen Aktivitäten verknüpft. Ihr Gerät ist möglicherweise kompromittiert und muss von einem professionellen Team weiter untersucht werden." + }, + "ADV-01": { + "title": "Überprüfen Sie die Warnungen für {}", + "description": "Bitte überprüfen Sie die Reputation des Hosts {}. Dieser scheint bösartig zu sein, da er während der Sitzung {} Warnungen verursacht hat." + }, + "SNORT-01": { + "title": "Suricata-Regel ausgelöst: {}", + "description": "Eine Netzwerkerkennungsregel wurde ausgelöst. Es ist wahrscheinlich, dass Ihr Gerät kompromittiert wurde oder verdächtiges Verhalten aufweist." + } + }, + "report": { + "numbers": [ + "eine", + "zwei", + "drei", + "vier", + "fünf", + "sechs", + "sieben", + "acht", + "neun" + ], + "suspect_title": "Verdächtige Kommunikationsverbindungen", + "uncat_title": "Kommunikationsverbindungen ohne Kategorie", + "whitelist_title": "Kommunikationsverbindungen auf der Zulassungsliste", + "protocol": "Protokoll", + "domain": "Domain", + "dst_ip": "Ziel-IP-Adresse", + "dst_port": "Ziel-Portnummer", + "device_mac": "MAC-Adresse des Geräts", + "report_generated_on": "Bericht erstellt am", + "capture_duration": "Aufnahmedauer", + "packets_number": "Anzahl der Pakete", + "capture_sha1": "SHA1-Aufnahme", + "report_for_the_capture": "Bericht zur Aufnahme", + "report_footer": "Dieser Bericht wurde von einem SpyGuard-Gerät automatisch erstellt. Wenn Sie Fragen haben, Bugs melden oder Feedback geben möchten, kontaktieren Sie uns unter contact@spyguard.io.", + "high_msg": "Ihr Gerät scheint kompromittiert zu sein, da Sie {} Warnung(en) der Stufe \"Hoch\" haben.", + "moderate_msg": "Sie haben {} Warnungen der Stufe \"Mittel\": Ihr Gerät könnte kompromittiert sein. Bitte sehen Sie sich die Warnungen sorgfältig an.", + "low_msg": "Sie haben nur {} Warnungen der Stufe \"Niedrig\": Überprüfen Sie sie gerne.", + "none_msg": "Alles sieht gut aus – kein Warnungen. Sehen Sie sich gerne auch die nicht kategorisierten Kommunikationsverbindungen an, falls welche vorhanden sind.", + "detection_methods": "Nachweismethoden", + "analysis_duration": "Analysezeit", + "instance_uuid": "Instanz von SpyGuard", + "seconds" : "zweite" + } +} diff --git a/analysis/locales/en.json b/analysis/locales/en.json new file mode 100755 index 0000000..942e7d7 --- /dev/null +++ b/analysis/locales/en.json @@ -0,0 +1,147 @@ +{ + "alerts": { + "PROTO-01": { + "title": "{} communication going outside the local network to {}.", + "description": "The {} protocol is commonly used in internal networks. Please, verify if the host {} leveraged other alerts which may indicates a possible malicious behavior." + }, + "PROTO-02": { + "title": "{} connection to {} to a port over or equal to {}.", + "description": "{} connections have been seen to {} by using the port {}. The use of non-standard port can be sometimes associated to malicious activities. We recommend to check if this host has a good reputation by looking on other alerts and search it on the internet." + }, + "PROTO-03": { + "title": "HTTP communications have been done to the host {}", + "description": "Your device exchanged with the host {} by using HTTP, an unencrypted protocol. Even if this behavior is not malicious by itself, it is unusual to see HTTP communications issued from smartphone applications running in the background. Please check the host reputation by searching it on the internet." + }, + "PROTO-04": { + "title": "HTTP communications have been seen to the host {} on a non standard port ({}).", + "description": "Your device exchanged with the host {} by using HTTP, an unencrypted protocol on the port {}. This behavior is quite unusual. Please check the host reputation by searching it on the internet." + }, + "PROTO-05": { + "title": "The server {} hasn't been resolved by any DNS query during the session", + "description": "It means that the server {} is likely not resolved by any domain name or the resolution has already been cached by the device. If the host appears in other alerts, please check it." + }, + "IOC-01": { + "title": "A connection has been made to {} ({}) which is tagged as {}.", + "description": "The host {} has been explicitly blacklisted for malicious activities. Your device is likely compromised and needs to be investigated more deeply by IT security professionals." + }, + "IOC-02": { + "title": "Communication to {} under the CIDR {} which is tagged as {}.", + "description": "The server {} is hosted under a network which is known to host malicious activities. Even if this behavior is not malicious by itself, you need to check if other alerts are also mentioning this host. If you have some doubts, please search this host on the internet to see if its legit or not." + }, + "IOC-03": { + "title": "A DNS request have been done to {} which is tagged as {}.", + "description": "The domain name {} seen in the capture has been explicitly tagged as malicious. This indicates that your device is likely compromised and needs to be investigated deeply." + }, + "IOC-04": { + "title": "A DNS request have been done to {} which is tagged as {}.", + "description": "The domain name {} seen in the capture has been explicitly tagged as a Tracker. This indicates that one of the active apps is geo-tracking your moves." + }, + "IOC-05": { + "title": "A DNS request have been done to the domain {} which is a Free DNS.", + "description": "The domain name {} is using a Free DNS service. This kind of service is commonly used by cybercriminals or state-sponsored threat actors during their operations. It is very suspicious that an application running in background use this kind of service, please investigate." + }, + "IOC-06": { + "title": "A DNS request have been done to the domain {} which contains a suspect TLD.", + "description": "The domain name {} is using a suspect Top Level Domain ({}). Even not malicious, this non-generic TLD is used regularly by cybercrime or state-sponsored operations. Please check this domain by searching it on an internet search engine. If other alerts are related to this host, please consider it as very suspicious." + }, + "IOC-07": { + "title": "A certificate associated to {} activities have been found in the communication to {}.", + "description": "The certificate ({}) associated to {} has been explicitly tagged as malicious. This indicates that your device is likely compromised and need a forensic analysis." + }, + "IOC-08": { + "title": "An HTTP request have been done to {} which is tagged as {}.", + "description": "The domain name {} seen in the capture has been explicitly tagged as malicious. This indicates that your device is likely compromised and needs to be investigated deeply." + }, + "IOC-09": { + "title": "An HTTP request have been done to the domain {} which is a Free DNS.", + "description": "The domain name {} is using a Free DNS service. This kind of service is commonly used by cybercriminals or state-sponsored threat actors during their operations. It is very suspicious that an application running in background use this kind of service, please investigate." + }, + "IOC-10": { + "title": "An HTTP request have been done to the domain {} which contains a suspect TLD.", + "description": "The domain name {} is using a suspect Top Level Domain ({}). Even not malicious, this non-generic TLD is used regularly by cybercrime or state-sponsored operations. Please check this domain by searching it on an internet search engine. If other alerts are related to this host, please consider it as very suspicious." + }, + "IOC-11": { + "title": "Connection to {} ({}) which is referenced as a TOR node.", + "description": "The server {} is referenced as a node on the TOR anonymization network. The analyzed device appears to be using TOR or communicating with a server configured as a TOR input or output node. Some attackers use TOR on their servers to cover their tracks." + }, + "IOC-12": { + "title": "An application requests a legitimate service that may have a dual use .", + "description": "The server {} is used for legitimate purposes. However, some attackers can use it to interact with their implants. It is adviced to check that the analyzed device contains a legitimate application which use this service." + }, + "IOC-13": { + "title": "At least one application uses encrypted DNS queries.", + "description": "The DNS over HTTPs server {} was contacted during the capture. This seems to indicate that at least one application uses this technique to encrypt its DNS requests. This feature limits the scanning capabilities of SpyGuard. If this feature is not enabled on the analyzed device, it may be worth finding out which app is using this method." + }, + "ACT-01": { + "title": "The domain {} is using a suspect nameserver ({}).", + "description": "The domain name {} is using a nameserver that has been explicitly tagged to be associated to malicious activities. Many cybercriminals and state-sponsored threat actors are using this kind of registrars because they allow cryptocurrencies and anonymous payments. It is adviced to investigate on this domain and the associated running application by doing a forensic analysis of the phone." + }, + "ACT-02": { + "title": "The domain {} have been created quite recently ({} days ago).", + "description": "The domain name {} is quite new. Even this is not malicious by itself, its quite common for attackers to set up new infrastructure for each attack campaign which can lead to the use of recently registered domain names." + }, + "SSL-01": { + "title": "SSL connection done on a non standard port ({}) to {}", + "description": "It is not common to see SSL connections issued from smartphones using non-standard ports. Even this can be totally legit, we recommend to check the reputation of {}, by looking at its WHOIS record, the associated autonomus system, its creation date, and by searching it the internet." + }, + "SSL-02": { + "title": "An SSL connection to {} is using a free certificate.", + "description": "Free certificates — such as Let's Encrypt — are wildly used by command and control servers associated to malicious implants or phishing web pages. We recommend to check the host associated to this certificate, by looking at the domain name, its creation date, or by checking its reputation on the internet." + }, + "SSL-03": { + "title": "The certificate associated to {} is self-signed.", + "description": "The use of self-signed certificates is a common thing for attacker infrastructure. We recommend to check the host {} which is associated to this certificate, by looking at the domain name (if any), its WHOIS record, its creation date, and by checking its reputation on the internet." + }, + "SSL-04": { + "title": "The certificate associated with {} is linked to malicious activity ({}).", + "description": "The certificate associated with server {} has been explicitly categorized as malicious. Your device looks compromised and needs to be further investigated by a professional team." + }, + "SSL-05": { + "title": "The SSL configuration of {} is linked to malicious activity ({}).", + "description": "The server-related JARM hash {} has been explicitly associated with malicious activity. Your device is possibly compromised and needs to be further investigated by a professional team." + }, + "ADV-01": { + "title": "Check the alerts for {}", + "description": "Please, check the reputation of the host {}, this one seems to be malicious as it leveraged {} alerts during the session." + }, + "SNORT-01": { + "title": "Suricata rule tiggered: {}", + "description": "A network detection rule has been triggered. It's likely that your device has been compromised or have some suspect behaviour." + } + }, + "report": { + "numbers": [ + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine" + ], + "suspect_title": "Suspect communications", + "uncat_title": "Uncategorized communications", + "whitelist_title": "Whitelisted communications", + "protocol": "Protocol", + "domain": "Domain", + "dst_ip": "Dst IP address", + "dst_port": "Dst port number", + "device_mac": "Device MAC address", + "report_generated_on": "Report generated on", + "capture_duration": "Capture duration", + "packets_number": "Number of packets", + "capture_sha1": "Capture SHA1", + "report_for_the_capture": "Report for the capture", + "report_footer": "This report has been autogenerated by a SpyGuard device. For any question, bug report or feedback, please contact contact@spyguard.io.", + "high_msg": "Your device seems to be compromised as you have {} high alert(s).", + "moderate_msg": "You have {} moderate alert(s), your device might be compromised. Please look at them carefully.", + "low_msg": "You have only {} low alert(s), don't hesitate to check them.", + "none_msg": "Everything looks fine, zero alerts. Don't hesitate to check the uncategorized communications, if any.", + "detection_methods": "Detection methods", + "analysis_duration": "Analysis duration", + "instance_uuid": "SpyGuard instance", + "seconds" : "second(s)" + } +} diff --git a/analysis/locales/es.json b/analysis/locales/es.json new file mode 100755 index 0000000..a1d6ae5 --- /dev/null +++ b/analysis/locales/es.json @@ -0,0 +1,147 @@ +{ + "alerts": { + "PROTO-01": { + "title": "Comunicación {} saliente desde la red local hacia {}.", + "description": "El protocolo {} se usa comúnmente en redes internas. Por favor verifique si el host {} ha emitido otras alertas que puedan indicar un posible comportamiento malicioso" + }, + "PROTO-02": { + "title": "Conexión {} hacia {} en un puerto superior o igual a {}.", + "description": "Se han identificado conexiones {} hacia {} usando el puerto {}. El uso de un puerto no standard puede estar asociado a actividad maliciosa. Recomendamos verificar la reputación de este host mediante la comprobación de otras alertas y búsquedas en Internet." + }, + "PROTO-03": { + "title": "Se han realizado comunicaciones HTTP hacia el host {}", + "description": "Su dispositivo se ha comunicado con el host {} mediante HTTP, un protocolo sin cifrar. Aunque este comportamiento no tiene porque ser malicioso por sí mismo, no es del todo común ver comunicaciones HTTP emitidas desde aplicaciones móviles ejecutándose en segundo plano. Por favor verifique la reputación de este host mediante su búsqueda en Internet." + }, + "PROTO-04": { + "title": "Se han realizado comunicaciones HTTP hacia el host {} en un puerto ({}) no standard.", + "description": "Su dispositivo se ha comunicado con el host {} mediante HTTP, un protocolo sin cifrado, en el puerto {}. Este comportamiento es bastante inusual. Por favor verifique la reputación de este host mediante su búsqueda en Internet." + }, + "PROTO-05": { + "title": "El servidor {} no ha sido resuelto por ningún servidor DNS durante la sesión.", + "description": "Significa que el servidor {} probablemente no resuelve a ningún nombre de dominio o su resolución ha sido cacheada por el dispositivo. Por favor, compruebe si este host aparece en otras alertas." + }, + "IOC-01": { + "title": "Se ha realizado una conexión a {} ({}) que está etiquetada como {}.", + "description": "El host {} ha sido explícitamente añadido a la lista negra por actividad maliciosa. Su dispositivo está probablemente comprometido y necesita ser investigado en profundidad por un profesional de seguridad IT." + }, + "IOC-02": { + "title": "Comunicación hacia {} incluida en el CIDR {} que está etiquetada como {}.", + "description": "El servidor {} está hospedado en una red conocida por albergar actividades maliciosas. Aunque este comportamiento no es malicioso de por sí, por favor compruebe si el host aparece en otras alertas y verifique la reputación del mismo en Internet." + }, + "IOC-03": { + "title": "Se ha realizado una petición DNS a {} que está etiquetada como {}.", + "description": "El dominio {} identificado en la captura ha sido explícitamente etiquetado como malicioso. Esto indica que su dispositivo está probablemente comprometido y debe ser investigado en profundidad." + }, + "IOC-04": { + "title": "Se ha realizado una petición DNS a {} que está etiquetada como {}.", + "description": "El dominio {} identificado en la captura ha sido explícitamente etiquetado como Tracker. Esto indica que la aplicación asociada está monitorizando su posición geográfica." + }, + "IOC-05": { + "title": "Se ha realizado una petición DNS al dominio {} que es un DNS gratuito.", + "description": "El dominio {} está usando un servicio DNS gratuito. Este tipo de servicios es comúnmente utilizado por cibercriminales y otros actores de amenazas. Es altamente sospechoso que una aplicación ejecutándose en segundo plano use este tipo de servicios. Por favor investigue." + }, + "IOC-06": { + "title": "Se ha realizado una petición DNS al dominio {} que contiene un TLD sospechoso.", + "description": "El dominio {} está usando un dominio de primero nivel -TLD- ({}). Aunque no sea malicioso, este TLP no-genérico es usado por cibercriminales y otros actores de amenazas con regularidad. Verifique este dominio mediante su búsqueda en Internet. Si hay otras alertas relacionadas con este host, por favor considérelo como muy sospechoso." + }, + "IOC-07": { + "title": "Un certificado asociado a actividades {} ha sido identificado en una comunicación hacia {}.", + "description": "El certificado ({}) asociado a {} ha sido explícitamente etiquetado como malicioso. Esto indica que su dispositivo está probablemente comprometido y necesita ser analizado en profundidad por un especialista forense." + }, + "IOC-08": { + "title": "Se ha realizado una petición HTTP a {} que está etiquetada como {}.", + "description": "El dominio {} identificado en la captura ha sido explícitamente etiquetado como malicioso. Esto indica que su dispositivo está probablemente comprometido y debe ser investigado en profundidad." + }, + "IOC-09": { + "title": "Se ha realizado una petición HTTP al dominio {} que es un DNS gratuito.", + "description": "El dominio {} está usando un servicio DNS gratuito. Este tipo de servicios es comúnmente utilizado por cibercriminales y otros actores de amenazas. Es altamente sospechoso que una aplicación ejecutándose en segundo plano use este tipo de servicios. Por favor investigue." + }, + "IOC-10": { + "title": "Se ha realizado una petición HTTP al dominio {} que contiene un TLD sospechoso.", + "description": "El dominio {} está usando un dominio de primero nivel -TLD- ({}). Aunque no sea malicioso, este TLP no-genérico es usado por cibercriminales y otros actores de amenazas con regularidad. Verifique este dominio mediante su búsqueda en Internet. Si hay otras alertas relacionadas con este host, por favor considérelo como muy sospechoso." + }, + "IOC-11": { + "title": "Conexión a {} ({}) a la que se hace referencia como un nodo TOR.", + "description": "El servidor {} es referenciado como un nodo en la red de anonimización TOR. El dispositivo analizado parece estar usando TOR o comunicándose con un servidor configurado como un nodo de entrada o salida de TOR. Algunos atacantes utilizan TOR en sus servidores para cubrir sus pistas." + }, + "IOC-12": { + "title": "Una aplicación solicita un servicio legítimo que puede tener un doble uso .", + "description": "El servidor {} se utiliza para fines legítimos. Sin embargo, algunos atacantes pueden usarlo para interactuar con sus implantes. Se recomienda comprobar que el dispositivo analizado contiene una aplicación legítima que utiliza este servicio." + }, + "IOC-13": { + "title": "Al menos una aplicación utiliza consultas DNS cifradas.", + "description": "El servidor DNS sobre HTTPs {} fue contactado durante la captura. Esto parece indicar que al menos una aplicación utiliza esta técnica para cifrar sus solicitudes de DNS. Esta característica limita las capacidades de escaneo de SpyGuard. Si esta función no está habilitada en el dispositivo analizado, puede valer la pena averiguar qué aplicación está utilizando este método." + }, + "ACT-01": { + "title": "El dominio {} está usando un servidor de nombres sospechoso ({}).", + "description": "El nombre de dominio {} usa un servidor de nombres que ha sido explícitamente etiquetado como asociado a actividad maliciosa. Muchos ciberdelincuentes y otros actores de amenazas utilizan este tipo de registradores ya que aceptan criptomonedas y pagos anónimos. Se recomienda investigar este dominio y la aplicación en ejecución asociada mediante un análisis forense del dispositivo." + }, + "ACT-02": { + "title": "El dominio {} se creó recientemente (hay {} días).", + "description": "El nombre de dominio {} es nuevo. Incluso esto no es intrínsecamente malicioso, es bastante común que los atacantes configuren una nueva infraestructura para cada campaña, lo que puede llevar al uso de nombres de dominio recién registrados." + }, + "SSL-01": { + "title": "Conexión SSL realizada mediante un puerto no standard ({}) a {}", + "description": "Las conexiones SSL desde dispositivos móviles usando puertos no standard no son muy comunes. Aunque pudiera ser totalmente legítima, recomendamos verificar la reputación de {}, comprobando su registro WHOIS, su sistema autónomo asociado y su fecha de creación mediante su búsqueda en Internet." + }, + "SSL-02": { + "title": "Conexión SSL a {} està usando un certificado gratuito", + "description": "Certificados gratuitos - como Let's Encrypt — son ampliamente utilizados por servidores de control asociados a software malicioso o webs de phishing. Recomendamos verificar el host asociado a esta certificado comprobando el nombre de dominio, su fecha de creación y verificando su reputación en Internet." + }, + "SSL-03": { + "title": "El certificado asociado a {} es autofirmado.", + "description": "El uso de certificados autofirmados es un elemento común en infraestructuras utilizadas por atacantes. Recomendamos comprobar el host {} que está asociado a este certificado, especialmente su nombre de dominio (en caso de existir), su registro WHOIS, su fecha de creación y verificando su reputación en Internet." + }, + "SSL-04": { + "title": "El certificado asociado con {} está vinculado a una actividad maliciosa ({}).", + "description": "El certificado asociado con server {} ha sido categorizado explícitamente como malicioso. Su dispositivo parece comprometido y necesita ser investigado por un equipo profesional." + }, + "SSL-05": { + "title": "La configuración SSL de {} está vinculada a una actividad maliciosa ({}).", + "description": "El hash JARM relacionado con el servidor {} se ha asociado explícitamente con actividad maliciosa. Su dispositivo está posiblemente comprometido y necesita ser investigado por un equipo profesional." + }, + "ADV-01": { + "title": "Compruebe las alertas para {}", + "description": "Por favor, verifique la reputación del host {}, ya que parece ser malicioso por aparecer en {} alertas durante la sesión." + }, + "SNORT-01": { + "title": "Regla Suricata activada: {}", + "description": "Una regla de detección ha sido activada. Probablemente su dispositivo está comprometido o presenta comportamiento sospechoso." + } + }, + "report": { + "numbers": [ + "uno", + "dos", + "tres", + "cuatro", + "cinco", + "seis", + "siete", + "ocho", + "nueve" + ], + "suspect_title": "Comunicaciones sospechosas", + "uncat_title": "Comunicaciones no categorizadas", + "whitelist_title": "Comunicaciones en lista blanca", + "protocol": "Protocolo", + "domain": "Dominio", + "dst_ip": "Dirección IP destino", + "dst_port": "Puerto destino número", + "device_mac": "Dirección MAC dispositivo", + "report_generated_on": "Informe generado en", + "capture_duration": "Duración captura", + "packets_number": "Número de paquetes", + "capture_sha1": "Captura SHA1", + "report_for_the_capture": "Informe de la captura", + "report_footer": "Este informe ha sido autogenerado por un dispositivo SpyGuard. Para cualquier pregunta, informe de fallos o feedback por favor contacte con contact@spyguard.io.", + "high_msg": "Su dispositivo parece estar comprometido ya que tiene {} alerta(s) de nivel alto.", + "moderate_msg": "Tienes {} alerta(s) de nivel moderado, su dispositivo podría estar comprometido. Por favor revíselas detenidamente.", + "low_msg": "Solamente tiene {} alertas(s) de nivel bajo, por favor revíselas.", + "none_msg": "Todo se ve bien, cero alertas. No dude en comprobar las comunicaciones no clasificadas (en caso de haberlas).", + "detection_methods": "Métodos de detección", + "analysis_duration": "Tiempo de análisis", + "instance_uuid": "Instancia de SpyGuard", + "seconds" : "segundo(s)" + } +} diff --git a/analysis/locales/fr.json b/analysis/locales/fr.json new file mode 100755 index 0000000..9234956 --- /dev/null +++ b/analysis/locales/fr.json @@ -0,0 +1,147 @@ +{ + "alerts": { + "PROTO-01": { + "title": "Une communication {} va à l'extérieur du réseau jusqu'à {}.", + "description": "Le protocole {} est généralement utilisé dans des réseaux internes. Vérifiez si le serveur {} a soulevé d'autres alertes. Ceci pourrait indiquer la présence d'une possible application malveillante." + }, + "PROTO-02": { + "title": "Connexion {} vers {} sur un port au dessus ou égal à {}.", + "description": "Des connexions {} vers {} ont été vues utilisant le port {}. L'utilisation d'un numéro de port non standard peut être associé à des activités malveillantes. Nous recommandons de vérifier si ce serveur possède une bonne réputation en regardant les autres alertes et en le cherchant sur Internet." + }, + "PROTO-03": { + "title": "Des communications HTTP ont été réalisées vers {}", + "description": "Votre appareil a communiqué avec le serveur {} en utilisant HTTP, un protocole non chiffré. Même si ce n'est pas malveillant en tant que tel, il est rare de voir des communications HTTP issues d'applications installées sur des smartphones exécutées en arrière plan. Il est conseillé de vérifier la réputation du serveur en le recherchant sur Internet." + }, + "PROTO-04": { + "title": "Des communications HTTP ont été réalisées vers {} sur un port non standard ({}).", + "description": "Votre appareil a communiqué vers le serveur {} en utilisant HTTP, un protocole non chiffré sur le port {}. Ce type de communication peut être signe d'une activité malveillante sur votre appareil car il est très rare qu'HTTP utilise ce port. Il est conseillé de vérifier la réputation du serveur en le recherchant sur Internet." + }, + "PROTO-05": { + "title": "Le serveur {} n'a pas été résolu par le protocole DNS durant la session", + "description": "Cela signifie que le serveur {} ne possède pas de nom de domaine associé ou que sa résolution a déjà été mise en cache par votre appareil. Si le serveur apparait dans d'autres alertes, merci de vérifier sa réputation." + }, + "IOC-01": { + "title": "Connexion vers {} ({}) qui est tagué en tant que {}.", + "description": "Le serveur {} est connu pour être associé à des activités malveillantes. Votre appareil est surement compromis et doit être investigué plus en détails par une équipe professionnelle." + }, + "IOC-02": { + "title": "Connexion vers {} appartenant au bloc réseau {} qui est tagué en tant que {}.", + "description": "Le serveur {} est hébergé dans un réseau qui est connu pour abriter des activités malveillantes. Même si ce n'est pas malveillant en tant que tel, vous devez regarder si d'autres alertes mentionnent ce serveur. Si vous avez certains doutes, recherchez sur Internet ce serveur pour savoir s'il semble être légitime ou non." + }, + "IOC-03": { + "title": "Requête DNS vers le domaine {} qui est tagué en tant que {}.", + "description": "Le serveur {} vers lequel communique votre appareil a été explicitement catégorisé en tant que malveillant. Votre appareil est sûrement compromis et doit être investigué plus en détails par une équipe professionnelle." + }, + "IOC-04": { + "title": "Requête DNS vers le domaine {} qui est tagué en tant que {}.", + "description": "Le nom de domaine {} vers lequel communique votre appareil a été explicitement catégorisé comme un tracker. Ceci indique d'une application active sur votre appareil est entrain de vous géo-localiser." + }, + "IOC-05": { + "title": "Requête DNS vers le domaine {} qui est un domaine gratuit.", + "description": "Le nom de domaine {} utilise un service de noms de domaine gratuits. Ce type de service est couramment utilisé par les cybercriminels ou des acteurs associés à des États au cours de leurs opérations d'espionnage. Il est très suspect qu'une application exécutée en arrière-plan utilise ce type de service, veuillez enquêter." + }, + "IOC-06": { + "title": "Requête DNS vers le domaine {} contenant une extension suspecte.", + "description": "Le nom de domaine {} utilise une extension suspecte ({}). Même si cela n'est pas malveillant en-soi, l'utilisation d'une extension non générique est l'apanage d'acteurs cybercriminels et étatiques durant leurs opérations. Veuillez vérifier la pertinance de ce domaine en le recherchant sur un moteur de recherche Internet. Si d'autres alertes sont liées à ce dernier, veuillez le considérer comme très suspect." + }, + "IOC-07": { + "title": "Un certificat associé à des activités de {} a été vu lors de communications vers {}.", + "description": "Le certificat ({}) associé au serveur {} a été explicitement catégorisé comme malveillant. Votre appareil est sûrement compromis et doit être investigué plus en détails par une équipe professionnelle." + }, + "IOC-08": { + "title": "Requête HTTP vers le domaine {} qui est tagué en tant que {}.", + "description": "Le serveur {} vers lequel communique votre appareil a été explicitement catégorisé en tant que malveillant. Votre appareil est sûrement compromis et doit être investigué plus en détails par une équipe professionnelle." + }, + "IOC-09": { + "title": "Requête HTTP vers le domaine {} qui est un domaine gratuit.", + "description": "Le nom de domaine {} utilise un service de noms de domaine gratuits. Ce type de service est couramment utilisé par les cybercriminels ou des acteurs associés à des États au cours de leurs opérations d'espionnage. Il est très suspect qu'une application exécutée en arrière-plan utilise ce type de service, veuillez enquêter." + }, + "IOC-10": { + "title": "Requête HTTP vers le domaine {} contenant une extension suspecte.", + "description": "Le nom de domaine {} utilise une extension suspecte ({}). Même si cela n'est pas malveillant en-soi, l'utilisation d'une extension non générique est l'apanage d'acteurs cybercriminels et étatiques durant leurs opérations. Veuillez vérifier la pertinance de ce domaine en le recherchant sur un moteur de recherche Internet. Si d'autres alertes sont liées à ce dernier, veuillez le considérer comme très suspect." + }, + "IOC-11": { + "title": "Connexion vers {} ({}) qui est référencé en tant que noeud TOR.", + "description": "Le serveur {} est référencé en tant que noeud sur le réseau d'anonymisation TOR. Le dispositif analysé semble utiliser TOR ou communique avec un serveur configuré comme noeud d'entrée ou de sortie TOR. Certains attaquants utilisent TOR sur leurs serveurs afin de brouiller les pistes." + }, + "IOC-12": { + "title": "Une application requête un service pouvant avoir un double emploi.", + "description": "Le serveur {} est utilisé à des fins légitimes. Toutefois, certains attaquants s'en servent pour intéragir avec leurs implants. Il est conseillé de vérifier que l'appareil analysé contient bien une application légitime utilisant ce service." + }, + "IOC-13": { + "title": "Au moins une application utilise des requêtes DNS chiffrées", + "description": "Le résolveur de noms utilisant HTTPs {} a été contacté durant la capture. Ceci semble indiquer qu'au moins une application utilise cette technique permettant de chiffrer les requêtes DNS. Cette fonctionnalité limite les capacités d'analyse de SpyGuard. Si cette fonctionnalité n'est pas activée sur le dispositif analysé, il peut être intéressant de découvrir quelle application utilise cette méthode." + }, + "ACT-01": { + "title": "Le domaine {} utilise un serveur de noms suspect ({}).", + "description": "Le nom de domaine {} utilise un serveur de noms qui a été explicitement catégorisé comme associé à des activités malveillantes. Plusieurs cybercriminels et acteurs étatiques utilisent ce type de serveurs de noms car ils autorisent les paiements anonymes grâce aux cryptomonnaies. Il est conseillé d'investiguer sur ce domaine et l'application s'y connectant en réalisant une analyse post-mortem de l'appareil analysé." + }, + "ACT-02": { + "title": "Le domaine {} a été créé récemment (il y a {} jours).", + "description": "Le nom de domaine {} est nouveau. Même ce n'est pas malveillant en soi, il est assez courant pour les attaquants de mettre en place une nouvelle infrastructure pour chaque campagne, ce qui peut conduire à l'utilisation de noms de domaine récemment enregistrés." + }, + "SSL-01": { + "title": "Connexion SSL utilisant un port non standard ({}) vers {}", + "description": "Il n'est pas commun de voir des connexions SSL issues de smartphones utiliser des ports non standards. Même si cela peut être totalement légitime, il est recommandé d'évaluer la réputation du serveur {}, en regardant son enregistrement WHOIS, son système autonome, sa date de création et en le recherchant sur Internet." + }, + "SSL-02": { + "title": "Une connexion SSL vers {} utilise un certificat gratuit.", + "description": "Les certificats gratuits — tels que Let's Encrypt - sont largement utilisés par des serveurs de commande et de contrôle associés à des implants malveillants ou à des pages Web de phishing. Nous vous recommandons de vérifier le serveur associé à ce certificat, en regardant le nom de domaine, sa date de création, ou en vérifiant sa réputation sur Internet." + }, + "SSL-03": { + "title": "Le certificat associé à {} est auto-signé.", + "description": "L'utilisation de certificats auto-signés est une chose courante pour des infrastructures d'attaque associées à des activités malveillantes. Nous vous recommandons de vérifier le serveur {} qui est associé à ce certificat, en regardant le nom de domaine (le cas échéant), son enregistrement WHOIS, sa date de création, et en vérifiant sa réputation sur Internet." + }, + "SSL-04": { + "title": "Le certificat associé à {} est lié à des activités malveillantes ({}).", + "description": "Ce certificat associé au serveur {} a été explicitement catégorisé en tant que malveillant. Votre appareil est sûrement compromis et doit être investigué plus en détails par une équipe professionnelle." + }, + "SSL-05": { + "title": "La configuration SSL de {} est associé à des activités malveillantes ({}).", + "description": "Le hash JARM lié au serveur {} a été explicitement associé à des activités malveillantes. Votre appareil est sûrement compromis et doit être investigué plus en détails par une équipe professionnelle." + }, + "ADV-01": { + "title": "Vérifiez les alertes liées au serveur {}", + "description": "Merci de vérifier la réputation et les alertes liées au serveur {}, ce dernier semble malveillant, ayant engendré {} alertes durant la session de capture." + }, + "SNORT-01": { + "title": "Règle suricata déclanchée : {}", + "description": "Une règle de détection de réseau a été déclenchée. Il est probable que votre appareil ait été compromis ou présente un comportement suspect." + } + }, + "report": { + "numbers": [ + "une", + "deux", + "trois", + "quatre", + "cinq", + "six", + "sept", + "huit", + "neuf" + ], + "suspect_title": "Communications suspectes", + "uncat_title": "Communications non catégorisées", + "whitelist_title": "Communications légitimes", + "protocol": "Protocole", + "domain": "Domaine", + "dst_ip": "Adresse IP", + "dst_port": "Port", + "device_mac": "Adresse MAC de l'appareil", + "report_generated_on": "Rapport généré le ", + "capture_duration": "Durée de la capture", + "packets_number": "Nombre de paquets", + "capture_sha1": "SHA1 de la capture", + "report_for_the_capture": "Rapport pour la capture", + "report_footer": "Ce rapport a été automatiquement généré par une instance de SpyGuard. Pour toute question et retours, n'hésitez pas à contacter contact@spyguard.io.", + "high_msg": "Votre appareil semble être compromis car vous avez {} alerte(s) élevée(s).", + "moderate_msg": "Vous avez {} alerte(s) modérée(s), votre appareil peut être compromis. Regardez ces alertes en détail.", + "low_msg": "Vous avez uniquement {} alerte(s) faibles, n'hésitez pas à les consulter.", + "none_msg": "Toute semble normal, vous avez aucune alerte. Cependant, n'hésitez pas à regarder les communications non catégorisées.", + "detection_methods": "Méthodes de détection", + "analysis_duration": "Durée d'analyse", + "instance_uuid": "Instance de SpyGuard", + "seconds" : "seconde(s)" + } +} diff --git a/analysis/locales/it.json b/analysis/locales/it.json new file mode 100755 index 0000000..bd40bed --- /dev/null +++ b/analysis/locales/it.json @@ -0,0 +1,147 @@ +{ + "alerts": { + "PROTO-01": { + "title": "{} comunicazione in uscita dalla rete locale a {}.", + "description": "Il protocollo {} è comunemente utilizzato nelle reti interne. Verificare se l'host {} ha sfruttato altri avvisi, fattore che potrebbe indicare un possibile comportamento dannoso." + }, + "PROTO-02": { + "title": "{} connessione a {} tramite una porta superiore o uguale a {}.", + "description": "Sono state rilevate {} connessioni a {} tramite la porta {}. L'utilizzo di una porta non standard a volte può essere associato ad attività dannose. È consigliabile verificare se questo host ha una buona reputazione esaminando altri avvisi ed effettuando una ricerca in Internet." + }, + "PROTO-03": { + "title": "Sono state generate comunicazioni HTTP dirette all'host {}", + "description": "Il dispositivo ha effettuato uno scambio con l'host {} utilizzando HTTP, un protocollo non criptato. Anche se questo comportamento non è dannoso in sé, è raro rilevare comunicazioni HTTP generate da applicazioni per smartphone in esecuzione in background. Controllare la reputazione dell'host effettuando una ricerca in Internet." + }, + "PROTO-04": { + "title": "Sono state rilevate comunicazioni HTTP dirette all'host {} su una porta non standard ({}).", + "description": "Il dispositivo ha effettuato uno scambio con l'host {} utilizzando HTTP, un protocollo non criptato sulla porta {}. Questo comportamento è decisamente insolito. Controllare la reputazione dell'host effettuando una ricerca in Internet." + }, + "PROTO-05": { + "title": "Il server {} non è stato risolto da nessuna query DNS durante la sessione", + "description": "Questo indica che il server {} probabilmente non è stato risolto da nessun nome di dominio o che la risoluzione è già stata memorizzata nella cache dal dispositivo. Se l'host viene visualizzato in altri avvisi, controllarlo." + }, + "IOC-01": { + "title": "È stata stabilita una connessione a {} ({}) con contrassegno {}.", + "description": "L'host {} è stato esplicitamente inserito nella blacklist per attività dannose. Probabilmente il dispositivo è compromesso e deve essere esaminato più a fondo da professionisti della sicurezza IT." + }, + "IOC-02": { + "title": "Comunicazione a {} con il CIDR {} con contrassegno {}.", + "description": "Il server {} è ospitato in una rete nota per l'hosting di attività dannose. Nonostante questo comportamento non sia dannoso in sé, è necessario verificare se l'host è menzionato anche in altri avvisi. In caso di dubbi, cercare l'host in Internet per scoprire se è legittimo o meno." + }, + "IOC-03": { + "title": "È stata effettuata una richiesta DNS a {} con contrassegno {}.", + "description": "Il nome di dominio {} visualizzato nell'acquisizione è stato esplicitamente contrassegnato come dannoso. Questo indica che il dispositivo è potenzialmente compromesso e deve essere esaminato a fondo." + }, + "IOC-04": { + "title": "È stata effettuata una richiesta DNS a {} con contrassegno {}.", + "description": "Il nome di dominio {} visualizzato nell'acquisizione è stato esplicitamente contrassegnato come Tracker. Questo indica che una delle app attive esegue la geolocalizzazione dei movimenti dell'utente." + }, + "IOC-05": { + "title": "È stata effettuata una richiesta DNS al dominio {} che è un servizio Free DNS.", + "description": "Il nome di dominio {} utilizza un servizio Free DNS. Questo tipo di servizio è comunemente utilizzato durante le operazioni di criminali informatici o autori di attacchi commissionati da stati esteri. L'utilizzo di questo tipo di servizio da parte di un'applicazione in esecuzione in background è molto sospetto e richiede ulteriori indagini." + }, + "IOC-06": { + "title": "È stata effettuata una richiesta DNS al dominio {} contenente un dominio di primo livello sospetto.", + "description": "Il nome di dominio {} utilizza un dominio di primo livello sospetto ({}). Anche se non dannoso, questo dominio di primo livello non generico viene utilizzato regolarmente durante le operazioni di criminali informatici o autori di attacchi commissionati da stati esteri. Controllare questo dominio effettuando una ricerca tramite un motore di ricerca Internet. Se altri avvisi sono correlati all'host, è necessario considerare questo elemento molto sospetto." + }, + "IOC-07": { + "title": "Nella comunicazione a {} è stato rilevato un certificato associato ad attività {}.", + "description": "Il certificato ({}) associato a {} è stato esplicitamente contrassegnato come dannoso. Questo indica che il dispositivo è potenzialmente compromesso e necessita di un'analisi forense." + }, + "IOC-08": { + "title": "È stata effettuata una richiesta HTTP a {} con contrassegno {}.", + "description": "Il nome di dominio {} visualizzato nell'acquisizione è stato esplicitamente contrassegnato come dannoso. Questo indica che il dispositivo è potenzialmente compromesso e deve essere esaminato a fondo." + }, + "IOC-09": { + "title": "È stata effettuata una richiesta HTTP al dominio {} che è un servizio Free DNS.", + "description": "Il nome di dominio {} utilizza un servizio Free DNS. Questo tipo di servizio è comunemente utilizzato durante le operazioni di criminali informatici o autori di attacchi commissionati da stati esteri. L'utilizzo di questo tipo di servizio da parte di un'applicazione in esecuzione in background è molto sospetto e richiede ulteriori indagini." + }, + "IOC-10": { + "title": "È stata effettuata una richiesta HTTP al dominio {} contenente un dominio di primo livello sospetto.", + "description": "Il nome di dominio {} utilizza un dominio di primo livello sospetto ({}). Anche se non dannoso, questo dominio di primo livello non generico viene utilizzato regolarmente durante le operazioni di criminali informatici o autori di attacchi commissionati da stati esteri. Controllare questo dominio effettuando una ricerca tramite un motore di ricerca Internet. Se altri avvisi sono correlati all'host, è necessario considerare questo elemento molto sospetto." + }, + "IOC-11": { + "title": "Connessione a {} ({}) a cui si fa riferimento come nodo TOR.", + "description": "Il server {} è un nodo della rete di anonimizzazione TOR. Il dispositivo analizzato sembra utilizzare TOR o comunicare con un server configurato come un nodo di ingresso o di uscita TOR. Alcuni attaccanti usano TOR sui loro server per coprire le loro tracce." + }, + "IOC-12": { + "title": "Un'applicazione richiede un servizio legittimo che può avere un doppio uso .", + "description": "Il server {} viene utilizzato per scopi legittimi. Tuttavia, alcuni attaccanti possono utilizzarlo per interagire con i loro impianti. Si consiglia di verificare che il dispositivo analizzato contenga un'applicazione legittima che utilizza questo servizio." + }, + "IOC-13": { + "title": "Almeno un'applicazione utilizza query DNS crittografate.", + "description": "Il DNS sul server https {} è stato contattato durante la cattura. Questo sembra indicare che almeno un'applicazione utilizza questa tecnica per crittografare le sue richieste DNS. Questa funzione limita le capacità di scansione di SpyGuard. Se questa funzione non è abilitata sul dispositivo analizzato, può essere la pena scoprire quale applicazione sta utilizzando questo metodo." + }, + "ACT-01": { + "title": "Il dominio {} utilizza un server dei nomi sospetto ({}).", + "description": "Il nome di dominio {} utilizza un server dei nomi che è stato esplicitamente contrassegnato come associato ad attività dannose. Molti criminali informatici e autori di attacchi commissionati da stati esteri utilizzano questo tipo di registrar poiché sono ammessi criptovalute e pagamenti anonimi. È consigliabile indagare su questo dominio e sull'applicazione in esecuzione associata eseguendo un'analisi forense del telefono." + }, + "ACT-02": { + "title": "Il dominio {} è stato creato di recente ({} giorni fa)", + "description": "Il nome di dominio {} è nuovo. Anche questo non è intrinsecamente dannoso, è abbastanza comune per gli aggressori impostare una nuova infrastruttura per ogni campagna, che può portare all'uso di nomi di dominio appena registrati." + }, + "SSL-01": { + "title": "Connessione SSL eseguita su una porta non standard ({}) a {}", + "description": "Non è comune rilevare connessioni SSL generate da smartphone tramite porte non standard. Anche se questo può essere del tutto legittimo, è consigliabile controllare la reputazione di {} prestando attenzione al record WHOIS, al sistema autonomo associato e alla data di creazione, nonché effettuando una ricerca in Internet." + }, + "SSL-02": { + "title": "Una connessione SSL a {} utilizza un certificato gratuito.", + "description": "I certificati gratuiti, come Let's Encrypt, sono ampiamente utilizzati dai server di comando e controllo associati a insediamenti dannosi o pagine Web di phishing. È consigliabile controllare l'host associato a questo certificato, prestando attenzione al nome di dominio e alla data di creazione o verificandone la reputazione in Internet." + }, + "SSL-03": { + "title": "Il certificato associato a {} è autofirmato.", + "description": "L'utilizzo di certificati autofirmati è una consuetudine per l'infrastruttura degli autori degli attacchi. È consigliabile controllare l'host {} associato a questo certificato, prestando attenzione all'eventuale nome di dominio, al record WHOIS e alla data di creazione, nonché verificandone la reputazione in Internet." + }, + "SSL-04": { + "title": "Il certificato associato a {} è collegato ad attività dannose ({}).", + "description": "Il certificato associato al server {} è stato esplicitamente classificato come dannoso. Il dispositivo sembra compromesso e deve essere ulteriormente indagato da un team di professionisti." + }, + "SSL-05": { + "title": "La configurazione SSL di {} è collegata ad attività dannose ({}).", + "description": "L'hash JARM relativo al server {} è stato esplicitamente associato ad attività dannose. Il dispositivo è probabilmente compromessa e deve essere ulteriormente indagato da un team di professionisti." + }, + "ADV-01": { + "title": "Controllare gli avvisi per {}", + "description": "Controllare la reputazione dell'host {}, che sembra di natura dannosa poiché ha sfruttato {} avvisi durante la sessione." + }, + "SNORT-01": { + "title": "Regola Suricata attivata: {}", + "description": "È stata attivata una regola di rilevamento della rete. È probabile che il dispositivo sia stato compromesso o che presenti comportamenti sospetti." + } + }, + "report": { + "numbers": [ + "uno", + "due", + "tre", + "quattro", + "cinque", + "sei", + "sette", + "otto", + "nove" + ], + "suspect_title": "Comunicazioni sospette", + "uncat_title": "Comunicazioni non categorizzate", + "whitelist_title": "Comunicazioni inserite nella whitelist", + "protocol": "Protocollo", + "domain": "Dominio", + "dst_ip": "Indirizzo IP di destinazione", + "dst_port": "Numero della porta di destinazione", + "device_mac": "Indirizzo MAC dispositivo", + "report_generated_on": "Rapporto generato in data", + "capture_duration": "Durata acquisizione", + "packets_number": "Numero di pacchetti", + "capture_sha1": "SHA1 acquisizione", + "report_for_the_capture": "Rapporto relativo all'acquisizione", + "report_footer": "Questo rapporto è stato generato automaticamente da un dispositivo SpyGuard. Per eventuali domande, segnalazioni di bug o feedback, contattare contact@spyguard.io.", + "high_msg": "Sembra che il dispositivo sia compromesso poiché sono presenti {} avvisi con priorità elevata.", + "moderate_msg": "Sono presenti {} avvisi con priorità moderata, è possibile che il dispositivo sia compromesso. Esaminarli con attenzione.", + "low_msg": "Sono presenti solo {} avvisi con priorità bassa da controllare.", + "none_msg": "Sembra tutto a posto, non sono presenti avvisi. Controllare eventuali comunicazioni non categorizzate.", + "detection_methods": "Metodi di rilevamento", + "analysis_duration": "Tempo di analisi", + "instance_uuid": "Istanza di SpyGuard", + "seconds" : "secondi" + } +} diff --git a/analysis/locales/pt.json b/analysis/locales/pt.json new file mode 100755 index 0000000..a60352a --- /dev/null +++ b/analysis/locales/pt.json @@ -0,0 +1,147 @@ +{ + "alerts": { + "PROTO-01": { + "title": "Comunicação {} externa à rede local para {}.", + "description": "O protocolo {} é comumente usado em redes internas. Verifique se o host {} acionou outros alertas que possam indicar um possível comportamento malicioso." + }, + "PROTO-02": { + "title": "Conexão {} a {} para uma porta maior ou igual a {}.", + "description": "Conexões {} foram detectadas por {} usando a porta {}. O uso da porta não padrão é comumente associado a atividades maliciosas. É recomendado verificar se esse host tem uma boa reputação verificando outros alertas e pesquisando-o na internet." + }, + "PROTO-03": { + "title": "Comunicações HTTP foram realizadas com o host {}", + "description": "O dispositivo foi conectado ao host {} por meio de HTTP, um protocolo não criptografado. Mesmo que esse comportamento, por si só, não seja malicioso, é incomum que comunicações HTTP sejam estabelecidas por meio de aplicativos móveis em segundo plano. Verifique a reputação do host pesquisando-o na Internet." + }, + "PROTO-04": { + "title": "Comunicações HTTP foram detectadas pelo host {} por meio de uma porta não padrão ({}).", + "description": "O dispositivo foi conectado ao host {} por meio de HTTP, um protocolo não criptografado na porta {}. Esse comportamento é incomum. Verifique a reputação do host pesquisando-o na Internet." + }, + "PROTO-05": { + "title": "O servidor {} não foi resolvido por nenhuma consulta de DNS durante a sessão", + "description": "Isso significa provavelmente que o servidor {} não foi resolvido por nenhum nome de domínio ou a resolução já foi armazenada pelo dispositivo. Se o host aparecer em outros alertas, verifique-os." + }, + "IOC-01": { + "title": "Uma conexão foi estabelecida com {} ({}) e marcada como {}.", + "description": "O host {} foi explicitamente bloqueado devido a atividades maliciosas. O dispositivo provavelmente foi comprometido e precisa ser analisado com cuidado por profissionais de segurança de TI." + }, + "IOC-02": { + "title": "Comunicação com {} com o CIDR {} marcado como {}.", + "description": "O host {} está hospedado em uma rede que é conhecida por atividades maliciosas. Mesmo que o comportamento, por si só, não seja malicioso, é necessário verificar se outros alertas são gerados para esse host. Em caso de dúvidas, pesquise esse host na internet para verificar sua autenticidade." + }, + "IOC-03": { + "title": "Uma solicitação de DNS foi feita para {}, marcado como {}.", + "description": "O nome de domínio {} visto na captura foi explicitamente marcado como malicioso. Isso indica que o dispositivo provavelmente foi comprometido e precisa ser analisado com cuidado." + }, + "IOC-04": { + "title": "Uma solicitação de DNS foi feita para {}, marcado como {}.", + "description": "O nome de domínio {} visto na captura foi explicitamente marcado como um Tracker. Isso indica que um dos aplicativos ativos está rastreando sua localização." + }, + "IOC-05": { + "title": "Uma solicitação de DNS foi feita para o domínio {}, que é um DNS gratuito.", + "description": "O nome de domínio {} está usando um serviço de DNS gratuito. Esse tipo de serviço é comumente usado por cibercriminosos ou agências de inteligência estatais no exercício de suas funções. É muito suspeito que aplicativos em execução em segundo plano usem esse tipo de serviço e isso deve ser analisado com cuidado." + }, + "IOC-06": { + "title": "Uma solicitação de DNS foi feita para o domínio {}, que contém um TLD (domínio de nível superior) suspeito.", + "description": "O nome de domínio {} está usando um TLD suspeito ({}). Mesmo não sendo malicioso, esse TLD não genérico é frequentemente usado por cibercriminosos ou agências de inteligência estatais. Analise a reputação do domínio pesquisando-o na internet. Se outros alertas forem observados, considere esse host como muito suspeito." + }, + "IOC-07": { + "title": "Um certificado associado a atividades de {} foi encontrado na comunicação para {}.", + "description": "O certificado ({}) associado a {} foi explicitamente marcado como malicioso. Isso indica que o dispositivo provavelmente foi comprometido e precisa de uma análise forense." + }, + "IOC-08": { + "title": "Uma solicitação de HTTP foi feita para {}, marcado como {}.", + "description": "O nome de domínio {} visto na captura foi explicitamente marcado como malicioso. Isso indica que o dispositivo provavelmente foi comprometido e precisa ser analisado com cuidado." + }, + "IOC-09": { + "title": "Uma solicitação de HTTP foi feita para o domínio {}, que é um DNS gratuito.", + "description": "O nome de domínio {} está usando um serviço de DNS gratuito. Esse tipo de serviço é comumente usado por cibercriminosos ou agências de inteligência estatais no exercício de suas funções. É muito suspeito que aplicativos em execução em segundo plano usem esse tipo de serviço e isso deve ser analisado com cuidado." + }, + "IOC-10": { + "title": "Uma solicitação de HTTP foi feita para o domínio {}, que contém um TLD (domínio de nível superior) suspeito.", + "description": "O nome de domínio {} está usando um TLD suspeito ({}). Mesmo não sendo malicioso, esse TLD não genérico é frequentemente usado por cibercriminosos ou agências de inteligência estatais. Analise a reputação do domínio pesquisando-o na internet. Se outros alertas forem observados, considere esse host como muito suspeito." + }, + "IOC-11": { + "title": "Conexão com {} ({}) que é referenciado como um nó TOR.", + "description": "O servidor {} é referenciado como um nó na rede de anonimização do TOR. O dispositivo analisado parece estar usando TOR ou se comunicando com um servidor configurado como um nó de entrada ou saída TOR. Alguns atacantes usam o TOR em seus servidores para cobrir seus rastros." + }, + "IOC-12": { + "title": "Um aplicativo solicita um serviço legítimo que pode ter um uso duplo", + "description": "O servidor {} é usado para fins legítimos. Contudo, alguns atacantes podem usá- lo para interagir com os seus implantes. É aconselhável verificar se o dispositivo analisado contém um aplicativo legítimo que usa esse serviço." + }, + "IOC-13": { + "title": "Pelo menos um aplicativo usa consultas DNS criptografadas.", + "description": "O servidor DNS over https {} foi contatado durante a captura. Isso parece indicar que pelo menos um aplicativo usa essa técnica para criptografar suas solicitações de DNS. Esse recurso limita os recursos de verificação do SpyGuard. Se esse recurso não estiver ativado no dispositivo analisado, pode valer a pena descobrir qual aplicativo está usando esse método." + }, + "ACT-01": { + "title": "O domínio {} está usando um servidor de nomes suspeito ({}).", + "description": "O nome de domínio {} está usando um servidor de nomes explicitamente marcado como associado a atividades maliciosas. Muitos cibercriminosos e agentes de inteligência estatais usam esse tipo de registradores porque isso permite pagamentos com criptomoedas e anônimos. É recomendável investigar esse domínio e o aplicativo em execução por meio de uma análise forense do telefone." + }, + "ACT-02": { + "title": "O domínio {} foi criado recentemente ({} dias atrás).", + "description": "O nome de domínio {} é novo. Mesmo que isso não seja intrinsecamente malicioso, é bastante comum que os invasores configurem uma nova infraestrutura para cada campanha, o que pode levar ao uso de nomes de domínio recém-registrados." + }, + "SSL-01": { + "title": "Conexão SSL feita em uma porta não padrão ({}) para {}", + "description": "Não é comum ver conexões SSL a partir de dispositivos móveis usando portas não padrão. Mesmo que a conexão pareça ser autêntica, é recomendável analisar a reputação de {} verificando pesquisando na internet o registro de domínio, o sistema autônomo associado e a data de criação." + }, + "SSL-02": { + "title": "Uma conexão SSL com {} está usando um certificado gratuito.", + "description": "Certificados gratuitos, como o Let's Encrypt, são amplamente usados por servidores de comando e controle associados a arquivos maliciosos ou páginas de phishing. É recomendável analisar o host associado a esse certificado verificando o nome de domínio, a data de criação ou pesquisando sua reputação na internet." + }, + "SSL-03": { + "title": "O certificado associado a {} é autoassinado.", + "description": "O uso de certificados autoassinados é comum na infraestrutura de invasores. É recomendável analisar o host {} que está associado a esse certificado verificando o nome e o registro de domínio (se houver), a data de criação e sua reputação na internet." + }, + "SSL-04": { + "title": "O certificado associado a {} está vinculado a atividades maliciosas ({}).", + "description": "O certificado associado ao servidor {} foi explicitamente categorizado como malicioso. Seu dispositivo parece comprometido e precisa ser investigado por uma equipe profissional." + }, + "SSL-05": { + "title": "A configuração SSL de {} está ligada à atividade maliciosa ({}).", + "description": "O hash JARM {} relacionado ao servidor foi explicitamente associado à atividade maliciosa. Seu dispositivo está possivelmente comprometido e precisa ser investigado por uma equipe profissional." + }, + "ADV-01": { + "title": "Verifique os alertas para {}", + "description": "Verifique a reputação do host {}, este parece ser malicioso, pois acionou alertas para {} durante a sessão." + }, + "SNORT-01": { + "title": "Regra do Suricata acionada: {}", + "description": "Uma regra de detecção de rede foi acionada. É provável que o dispositivo tenha sido comprometido ou apresente comportamento suspeito." + } + }, + "report": { + "numbers": [ + "um", + "dois", + "três", + "quatro", + "cinco", + "seis", + "sete", + "oito", + "nove" + ], + "suspect_title": "Comunicações suspeitas", + "uncat_title": "Comunicações não categorizadas", + "whitelist_title": "Comunicações permitidas", + "protocol": "Protocolo", + "domain": "Domínio", + "dst_ip": "Endereço IP do dst", + "dst_port": "Número da porta do dst", + "device_mac": "Endereço MAC do dispositivo", + "report_generated_on": "Relatório criado em", + "capture_duration": "Duração da captura", + "packets_number": "Número de pacotes", + "capture_sha1": "Captura SHA1", + "report_for_the_capture": "Relatório da captura", + "report_footer": "Este relatório foi gerado automaticamente por um dispositivo SpyGuard. Em caso de dúvidas, relatório de erros ou comentários, envie uma mensagem para contact@spyguard.io.", + "high_msg": "O dispositivo parece estar comprometido porque você tem {} alerta(s) crítico(s).", + "moderate_msg": "Você tem {} alerta(s) moderado(s), seu dispositivo pode estar comprometido. Analise-os com cuidado.", + "low_msg": "Você tem apenas {} alerta(s) leve(s), não deixe de verificá-los.", + "none_msg": "Tudo parece estar bem, zero alertas. Não deixe de verificar comunicações não categorizadas, se houver.", + "detection_methods": "Métodos de detecção", + "analysis_duration": "Tempo de análise", + "instance_uuid": "Instância do SpyGuard", + "seconds": "segunda(s)" + } +} diff --git a/analysis/locales/ru.json b/analysis/locales/ru.json new file mode 100755 index 0000000..e905806 --- /dev/null +++ b/analysis/locales/ru.json @@ -0,0 +1,147 @@ +{ + "alerts": { + "PROTO-01": { + "title": "Обнаружено подключение {}, ведущее за пределы локальной сети к {}.", + "description": "Протокол {} обычно используется во внутренних сетях. Проверьте, выдавало ли устройство {} другие предупреждения, которые могут свидетельствовать о вредоносной активности." + }, + "PROTO-02": { + "title": "Подключение {} к {} установлено на порте, равном или более {}.", + "description": "Обнаружено {} подключений к {} с использованием порта {}. Использование нестандартного порта иногда может свидетельствовать о вредоносной активности. Рекомендуется проверить репутацию этого устройства, просмотрев другие предупреждения и выполнив их поиск в интернете." + }, + "PROTO-03": { + "title": "Установлено HTTP-подключение к устройству {}", + "description": "Ваше устройство обменивается данными с устройством {} по незашифрованному протоколу HTTP. Даже если такое поведение само по себе не является вредоносным, фоновое исходящее HTTP-подключение является нетипичным для приложений, работающих на смартфоне в фоновом режиме. Проверьте репутацию устройства, выполнив поиск в интернете." + }, + "PROTO-04": { + "title": "Установлено HTTP-подключение к устройству {} через нестандартный порт ({}).", + "description": "Ваше устройство обменивается данными с устройством {} по незашифрованному протоколу HTTP через порт {}. Такое поведение является нетипичным. Проверьте репутацию устройства, выполнив поиск в интернете." + }, + "PROTO-05": { + "title": "Сервер {} не разрешался никакими DNS-запросами во время сеанса", + "description": "Это, вероятно, означает, что сервер {} не разрешен ни одним доменным именем или разрешение уже кешировано устройством. Если устройство фигурирует в других предупреждениях, проверьте его." + }, + "IOC-01": { + "title": "Установлено соединение с {} ({}), отмеченным как {}.", + "description": "Устройство {} было явно занесено в черный список за выполнение вредоносных действий. Ваше устройство, вероятно, взломано. Требуется более тщательное расследование специалистами по IT-безопасности." + }, + "IOC-02": { + "title": "Подключение к {}, отмеченному как {}, в рамках бесклассовой адресации {}.", + "description": "Сервер {} размещен в сети, в которой размещаются объекты, выполняющие вредоносные действия. Даже если такое поведение само по себе не является вредоносным, необходимо проверить, не упоминается ли это устройство в других предупреждениях. При наличии сомнений выполните поиск этого устройства в интернете и выясните, является ли его поведение легитимным." + }, + "IOC-03": { + "title": "Выполнен DNS-запрос к {}, отмеченному как {}.", + "description": "Доменное имя {}, обнаруженное при сборе данных, явно отмечено как вредоносное. Это указывает на то, что ваше устройство, вероятно, взломано и требуется тщательное расследование." + }, + "IOC-04": { + "title": "Выполнен DNS-запрос к {}, отмеченному как {}.", + "description": "Доменное имя {}, обнаруженное при сборе данных, явно отмечено как геотрекер. Это указывает, что одно из активных приложений отслеживает ваши перемещения." + }, + "IOC-05": { + "title": "Выполнен DNS-запрос к домену {}, использующему бесплатную службу DNS.", + "description": "Доменное имя {} использует бесплатную службу DNS. Такие службы обычно используются киберпреступниками или спонсируемыми государством злоумышленниками для атак. Очень подозрительно, что приложение, работающее в фоновом режиме, использует такую службу. Требуется расследование." + }, + "IOC-06": { + "title": "Выполнен DNS-запрос к домену {}, содержащему подозрительный домен верхнего уровня.", + "description": "Доменное имя {} использует подозрительный домен верхнего уровня ({}). Даже не являясь вредоносным, этот не универсальный домен верхнего уровня регулярно используется киберпреступниками или спонсируемыми государством злоумышленниками. Проверьте этот домен, выполнив поиск в интернете. Если с этим устройством связаны другие предупреждения, это очень подозрительно." + }, + "IOC-07": { + "title": "Сертификат, связанный с действиями {}, был обнаружен при взаимодействии с {}.", + "description": "Сертификат ({}), связанный с {}, явно отмечен как вредоносный. Это указывает на то, что ваше устройство, вероятно, взломано и требуется провести экспертный анализ." + }, + "IOC-08": { + "title": "Выполнен HTTP-запрос к {}, отмеченному как {}.", + "description": "Доменное имя {}, обнаруженное при сборе данных, явно отмечено как вредоносное. Это указывает на то, что ваше устройство, вероятно, взломано и требуется тщательное расследование." + }, + "IOC-09": { + "title": "Выполнен HTTP-запрос к домену {}, использующему бесплатную службу DNS.", + "description": "Доменное имя {} использует бесплатную службу DNS. Такие службы обычно используются киберпреступниками или спонсируемыми государством злоумышленниками для атак. Очень подозрительно, что приложение, работающее в фоновом режиме, использует такую службу. Требуется расследование." + }, + "IOC-10": { + "title": "Выполнен HTTP-запрос к домену {}, содержащему подозрительный домен верхнего уровня.", + "description": "Доменное имя {} использует подозрительный домен верхнего уровня ({}). Даже не являясь вредоносным, этот не универсальный домен верхнего уровня регулярно используется киберпреступниками или спонсируемыми государством злоумышленниками. Проверьте этот домен, выполнив поиск в интернете. Если с этим устройством связаны другие предупреждения, это очень подозрительно." + }, + "IOC-11": { + "title": "Соединение с {} ({}), которое упоминается как узел TOR.", + "description": "На сервер {} ссылаются как на узел в сети анонимизации TOR. Анализируемое устройство, по-видимому, использует TOR или взаимодействует с сервером, настроенным как входной или выходной узел TOR. Некоторые злоумышленники используют TOR на своих серверах, чтобы замести следы." + }, + "IOC-12": { + "title": "заявка запрашивает законную услугу, которая может иметь двойное назначение .", + "description": "Сервер {} используется в законных целях. Однако некоторые злоумышленники могут использовать его для взаимодействия со своими имплантатами. Рекомендуется проверить, что анализируемое устройство содержит законное приложение, которое использует эту службу." + }, + "IOC-13": { + "title": "По крайней мере одно приложение использует зашифрованные DNS запросы", + "description": "Во время захвата был установлен контакт с DNS через сервер HTPs {}. Это, кажется, указывает на то, что по крайней мере одно приложение использует эту технику для шифрования своих DNS-запросов. Эта функция ограничивает возможности сканирования SpyGuard. Если эта функция не включена на анализируемом устройстве, возможно, стоит выяснить, какое приложение использует этот метод." + }, + "ACT-01": { + "title": "Домен {} использует подозрительный сервер имен ({}).", + "description": "Доменное имя {} использует сервер имен, который явно отмечен как связанный с вредоносными действиями. Многие киберпреступники и спонсируемые государством злоумышленники пользуются такими регистраторами, поскольку они позволяют использовать криптовалюту и анонимные платежи. Рекомендуется исследовать этот домен и связанные с ним работающие приложения, выполнив экспертный анализ телефона." + }, + "ACT-02": { + "title": "Домен {} был создан недавно ({} дней назад).", + "description": "Доменное имя {} новое. Даже это не является вредоносным по своей сути, злоумышленники довольно часто создают новую инфраструктуру для каждой кампании атаки, что может привести к использованию недавно зарегистрированных доменных имен." + }, + "SSL-01": { + "title": "SSL-подключение к {} выполнено через нестандартный порт ({})", + "description": "SSL-подключение со смартфонов с использованием нестандартных портов является нетипичным. Даже если это действие является абсолютно легитимным, рекомендуется проверить репутацию {}, просмотрев его запись WHOIS, связанную автономную систему, дату создания, а также выполнив поиск в интернете." + }, + "SSL-02": { + "title": "SSL-подключение к {} использует бесплатный сертификат.", + "description": "Бесплатные сертификаты, такие как Let's Encrypt, широко используются командными серверами, связанными со встраиваемым вредоносным кодом или фишинговыми веб-страницами. Рекомендуется проверить устройство, связанное с этим сертификатом, изучив его доменное имя, дату создания и репутацию в интернете." + }, + "SSL-03": { + "title": "Сертификат, связанный с {}, является самоподписанным.", + "description": "Использование самоподписанных сертификатов типично для инфраструктуры злоумышленников. Рекомендуется проверить устройство {}, связанное с этим сертификатом, изучив его доменное имя (если имеется), запись WHOIS, дату создания и репутацию в интернете." + }, + "SSL-04": { + "title": "Сертификат, связанный с {} связан с вредоносной деятельностью ({})", + "description": "Сертификат, связанный с сервером {} был явно классифицирован как вредоносный. Ваше устройство выглядит скомпрометированным и нуждается в дальнейшем исследовании профессиональной командой." + }, + "SSL-05": { + "title": "Конфигурация SSL {} связана с вредоносной деятельностью ({}).", + "description": "Связанный с сервером хэш JARM {} был явно связан с вредоносной деятельностью. Ваше устройство, возможно, скомпрометировано и нуждается в дальнейшем расследовании профессиональной командой." + }, + "ADV-01": { + "title": "Проверьте предупреждения для {}", + "description": "Проверьте репутацию устройства {}. Оно кажется вредоносным, поскольку для него сработало {} предупрежд. во время сеанса." + }, + "SNORT-01": { + "title": "Сработало правило Suricata: {}", + "description": "Сработало правило обнаружения в сети. Вероятно, ваше устройство взломано или ведет себя подозрительно." + } + }, + "report": { + "numbers": [ + "один", + "два", + "три", + "четыре", + "пять", + "шесть", + "семь", + "восемь", + "девять" + ], + "suspect_title": "Подозрительные подключения", + "uncat_title": "Неклассифицированные подключения", + "whitelist_title": "Разрешенные подключения", + "protocol": "Протокол", + "domain": "Домен", + "dst_ip": "IP-адрес назначения", + "dst_port": "Номер порта назначения", + "device_mac": "MAC-адрес устройства", + "report_generated_on": "Дата формирования отчета", + "capture_duration": "Продолжительность сбора данных", + "packets_number": "Количество пакетов", + "capture_sha1": "Сбор данных SHA1", + "report_for_the_capture": "Отчет для сбора данных", + "report_footer": "Этот отчет был автоматически сформирован устройством SpyGuard. С любыми вопросами, сообщениями об ошибках или отзывами обращайтесь по адресу contact@spyguard.io.", + "high_msg": "Вероятно, ваше устройство взломано, поскольку у вас {} предупрежд. высокого уровня.", + "moderate_msg": "У вас {} предупрежд. среднего уровня. Возможно, ваше устройство взломано. Внимательно изучите их.", + "low_msg": "У вас {} предупрежд. низкого уровня, проверьте их.", + "none_msg": "Предупреждения отсутствуют, система выглядит защищенной. Не забывайте проверять неклассифицированные подключения, если они имеются.", + "detection_methods": "Mетоды обнаружения", + "analysis_duration": "Время анализа", + "instance_uuid": "SpyGuard Экземпляр", + "seconds": "секунды" + } +} diff --git a/analysis/utils.py b/analysis/utils.py new file mode 100755 index 0000000..1bfb486 --- /dev/null +++ b/analysis/utils.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import sqlite3 +import datetime +import yaml +import sys +import json +import os +from functools import reduce + +# I'm not going to use an ORM for that. +parent = os.path.split(os.path.dirname(os.path.abspath(sys.argv[0])))[0] +conn = sqlite3.connect(os.path.join(parent, "database.sqlite3")) +cursor = conn.cursor() + + +def get_iocs(ioc_type): + """ + Get a list of IOCs specified by their type. + :return: list of IOCs + """ + cursor.execute( + "SELECT value, tag FROM iocs WHERE type = ? ORDER BY value", (ioc_type,)) + res = cursor.fetchall() + return [[r[0], r[1]] for r in res] if res is not None else [] + + +def get_whitelist(elem_type): + """ + Get a list of whitelisted elements specified by their type. + :return: list of elements + """ + cursor.execute( + "SELECT element FROM whitelist WHERE type = ? ORDER BY element", (elem_type,)) + res = cursor.fetchall() + return [r[0] for r in res] if res is not None else [] + + +def get_config(path): + """ + Read a value from the configuration + :return: value (it can be any type) + """ + config = yaml.load(open(os.path.join(parent, "config.yaml"), + "r"), Loader=yaml.SafeLoader) + return reduce(dict.get, path, config) + + +def get_device(token): + """ + Read the device configuration from device.json file. + :return: dict - the device configuration + """ + try: + with open("/tmp/{}/device.json".format(token), "r") as f: + return json.load(f) + except: + pass + + +def get_apname(): + """ + Read the current name of the Access Point from + the hostapd configuration file + :return: str - the AP name + """ + try: + with open("/tmp/hostapd.conf", "r") as f: + for l in f.readlines(): + if "ssid=" in l: + return l.replace("ssid=", "").strip() + except: + pass diff --git a/app/.gitignore b/app/.gitignore new file mode 100755 index 0000000..624f6bb --- /dev/null +++ b/app/.gitignore @@ -0,0 +1,105 @@ + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port diff --git a/app/backend/.npmrc b/app/backend/.npmrc new file mode 100755 index 0000000..76c2a92 --- /dev/null +++ b/app/backend/.npmrc @@ -0,0 +1 @@ +timeout=60000 diff --git a/app/backend/babel.config.js b/app/backend/babel.config.js new file mode 100755 index 0000000..a673655 --- /dev/null +++ b/app/backend/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/app/backend/dist/css/app.b563f628.css b/app/backend/dist/css/app.b563f628.css new file mode 100644 index 0000000..9ad31e7 --- /dev/null +++ b/app/backend/dist/css/app.b563f628.css @@ -0,0 +1,5 @@ +/*! Spectre.css v0.5.9 | MIT License | github.com/picturepan2/spectre */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}hr{box-sizing:content-box;height:0;overflow:visible}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}address{font-style:normal}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,pre,samp{font-family:SF Mono,Segoe UI Mono,Roboto Mono,Menlo,Courier,monospace;font-size:1em}dfn{font-style:italic}small{font-size:80%;font-weight:400}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}fieldset{border:0;margin:0;padding:0}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item;outline:0}canvas{display:inline-block}[hidden],template{display:none}*,:after,:before{box-sizing:inherit}html{box-sizing:border-box;font-size:20px;line-height:1.5;-webkit-tap-highlight-color:transparent}body{background:#fff;color:#3b4351;font-family:-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,sans-serif;font-size:.8rem;overflow-x:hidden;text-rendering:optimizeLegibility}a{color:#303742;outline:0;text-decoration:none}a:focus{box-shadow:0 0 0 .1rem rgba(87,85,217,.2)}a.active,a:active,a:focus,a:hover{color:#302ecd;text-decoration:underline}a:visited{color:#807fe2}h1,h2,h3,h4,h5,h6{color:inherit;font-weight:500;line-height:1.2;margin-bottom:.5em;margin-top:0}.h1,.h2,.h3,.h4,.h5,.h6{font-weight:500}.h1,h1{font-size:2rem}.h2,h2{font-size:1.6rem}.h3,h3{font-size:1.4rem}.h4,h4{font-size:1.2rem}.h5,h5{font-size:1rem}.h6,h6{font-size:.8rem}p{margin:0 0 1.2rem}a,ins,u{-webkit-text-decoration-skip:ink edges;text-decoration-skip:ink edges}abbr[title]{border-bottom:.05rem dotted;cursor:help;text-decoration:none}kbd{background:#303742;color:#fff;font-size:.7rem;line-height:1.25;padding:.1rem .2rem}kbd,mark{border-radius:.1rem}mark{background:#ffe9b3;border-bottom:.05rem solid #ffd367;color:#3b4351;padding:.05rem .1rem 0}blockquote{border-left:.1rem solid #dadee4;margin-left:0;padding:.4rem .8rem}blockquote p:last-child{margin-bottom:0}ol,ul{padding:0}ol,ol ol,ol ul,ul,ul ol,ul ul{margin:.8rem 0 .8rem .8rem}ol li,ul li{margin-top:.4rem}ul{list-style:disc inside}ul ul{list-style-type:circle}ol{list-style:decimal inside}ol ol{list-style-type:lower-alpha}dl dt{font-weight:700}dl dd{margin:.4rem 0 .8rem 0}.lang-zh,.lang-zh-hans,html:lang(zh),html:lang(zh-Hans){font-family:-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,sans-serif}.lang-zh-hant,html:lang(zh-Hant){font-family:-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,PingFang TC,Hiragino Sans CNS,Microsoft JhengHei,Helvetica Neue,sans-serif}.lang-ja,html:lang(ja){font-family:-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Hiragino Sans,Hiragino Kaku Gothic Pro,Yu Gothic,YuGothic,Meiryo,Helvetica Neue,sans-serif}.lang-ko,html:lang(ko){font-family:-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Malgun Gothic,Helvetica Neue,sans-serif}.lang-cjk ins,.lang-cjk u,:lang(ja) ins,:lang(ja) u,:lang(zh) ins,:lang(zh) u{border-bottom:.05rem solid;text-decoration:none}.lang-cjk del+del,.lang-cjk del+s,.lang-cjk ins+ins,.lang-cjk ins+u,.lang-cjk s+del,.lang-cjk s+s,.lang-cjk u+ins,.lang-cjk u+u,:lang(ja) del+del,:lang(ja) del+s,:lang(ja) ins+ins,:lang(ja) ins+u,:lang(ja) s+del,:lang(ja) s+s,:lang(ja) u+ins,:lang(ja) u+u,:lang(zh) del+del,:lang(zh) del+s,:lang(zh) ins+ins,:lang(zh) ins+u,:lang(zh) s+del,:lang(zh) s+s,:lang(zh) u+ins,:lang(zh) u+u{margin-left:.125em}.table{border-collapse:collapse;border-spacing:0;text-align:left;width:100%}.table.table-striped tbody tr:nth-of-type(odd){background:#fafafa}.table.table-hover tbody tr:hover,.table.table-striped tbody tr.active,.table tbody tr.active{background:#f0f0f0}.table.table-scroll{display:block;overflow-x:auto;padding-bottom:.75rem;white-space:nowrap}.table td,.table th{border-bottom:.05rem solid #dadee4;padding:.6rem .4rem}.table th{border-bottom-width:.1rem}.btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#fff;border:.05rem solid #303742;border-radius:.1rem;color:#303742;cursor:pointer;display:inline-block;font-size:.8rem;height:1.8rem;line-height:1.2rem;outline:0;padding:.25rem .4rem;text-align:center;text-decoration:none;transition:background .2s,border .2s,box-shadow .2s,color .2s;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.btn:focus{box-shadow:0 0 0 .1rem rgba(87,85,217,.2)}.btn:focus,.btn:hover{background:#66758c;border-color:#636363}.btn.active,.btn:active{background:#636363;border-color:#494949}.btn.active.loading:after,.btn:active.loading:after{border-bottom-color:#fff;border-left-color:#fff}.btn.disabled,.btn:disabled,.btn[disabled]{cursor:default;opacity:.5;pointer-events:none}.btn.btn-primary{background:#303742;border-color:#636363;color:#fff}.btn.btn-primary.active,.btn.btn-primary:active,.btn.btn-primary:focus,.btn.btn-primary:hover{background:#494949;border-color:#494949;color:#fff}.btn.btn-primary.loading:after{border-bottom-color:#fff;border-left-color:#fff}.btn.btn-success{background:#32b643;border-color:#2faa3f;color:#fff}.btn.btn-success:focus{box-shadow:0 0 0 .1rem rgba(50,182,67,.2)}.btn.btn-success:focus,.btn.btn-success:hover{background:#30ae40;border-color:#2da23c;color:#fff}.btn.btn-success.active,.btn.btn-success:active{background:#2a9a39;border-color:#278e34;color:#fff}.btn.btn-success.loading:after{border-bottom-color:#fff;border-left-color:#fff}.btn.btn-error{background:#e85600;border-color:#d95000;color:#fff}.btn.btn-error:focus{box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.btn.btn-error:focus,.btn.btn-error:hover{background:#de5200;border-color:#cf4d00;color:#fff}.btn.btn-error.active,.btn.btn-error:active{background:#c44900;border-color:#b54300;color:#fff}.btn.btn-error.loading:after{border-bottom-color:#fff;border-left-color:#fff}.btn.btn-link{background:0 0;border-color:transparent;color:#303742}.btn.btn-link.active,.btn.btn-link:active,.btn.btn-link:focus,.btn.btn-link:hover{color:#3b4351}.btn.btn-sm{font-size:.7rem;height:1.4rem;padding:.05rem .3rem}.btn.btn-lg{font-size:.9rem;height:2rem;padding:.35rem .6rem}.btn.btn-block{display:block;width:100%}.btn.btn-action{padding-left:0;padding-right:0;width:1.8rem}.btn.btn-action.btn-sm{width:1.4rem}.btn.btn-action.btn-lg{width:2rem}.btn.btn-clear{background:0 0;border:0;color:currentColor;height:1rem;line-height:.8rem;margin-left:.2rem;margin-right:-2px;opacity:1;padding:.1rem;text-decoration:none;width:1rem}.btn.btn-clear:focus,.btn.btn-clear:hover{background:rgba(247,248,249,.5);opacity:.95}.btn.btn-clear:before{content:"\2715"}.btn-group{display:inline-flex;flex-wrap:wrap}.btn-group .btn{flex:1 0 auto}.btn-group .btn:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group .btn:not(:first-child):not(:last-child){border-radius:0;margin-left:-.05rem}.btn-group .btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-.05rem}.btn-group .btn.active,.btn-group .btn:active,.btn-group .btn:focus,.btn-group .btn:hover{z-index:1}.btn-group.btn-group-block{display:flex}.btn-group.btn-group-block .btn{flex:1 0 0}.form-group:not(:last-child){margin-bottom:.4rem}fieldset,legend{margin-bottom:.8rem}legend{font-size:.9rem;font-weight:500}.form-label{display:block;line-height:1.2rem;padding:.3rem 0}.form-label.label-sm{font-size:.7rem;padding:.1rem 0}.form-label.label-lg{font-size:.9rem;padding:.4rem 0}.form-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#fff;background-image:none;border:.05rem solid #cecece;border-radius:.1rem;color:#3b4351;display:block;font-size:.8rem;height:1.8rem;line-height:1.2rem;max-width:100%;outline:0;padding:.25rem .4rem;position:relative;transition:background .2s,border .2s,box-shadow .2s,color .2s;width:100%}.form-input:focus{border-color:#303742;box-shadow:0 0 0 .1rem rgba(87,85,217,.2)}.form-input::-moz-placeholder{color:#cecece}.form-input::placeholder{color:#cecece}.form-input.input-sm{font-size:.7rem;height:1.4rem;padding:.05rem .3rem}.form-input.input-lg{font-size:.9rem;height:2rem;padding:.35rem .6rem}.form-input.input-inline{display:inline-block;vertical-align:middle;width:auto}.form-input[type=file],textarea.form-input,textarea.form-input.input-lg,textarea.form-input.input-sm{height:auto}.form-input-hint{color:#cecece;font-size:.7rem;margin-top:.2rem}.has-success .form-input-hint,.is-success+.form-input-hint{color:#32b643}.has-error .form-input-hint,.is-error+.form-input-hint{color:#e85600}.form-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#fff;border:.05rem solid #cecece;border-radius:.1rem;color:inherit;font-size:.8rem;height:1.8rem;line-height:1.2rem;outline:0;padding:.25rem .4rem;vertical-align:middle;width:100%}.form-select:focus{border-color:#303742;box-shadow:0 0 0 .1rem rgba(87,85,217,.2)}.form-select::-ms-expand{display:none}.form-select.select-sm{font-size:.7rem;height:1.4rem;padding:.05rem 1.1rem .05rem .3rem}.form-select.select-lg{font-size:.9rem;height:2rem;padding:.35rem 1.4rem .35rem .6rem}.form-select[multiple],.form-select[size]{height:auto;padding:.25rem .4rem}.form-select[multiple] option,.form-select[size] option{padding:.1rem .2rem}.form-select:not([multiple]):not([size]){background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%204%205'%3E%3Cpath%20fill='%23667189'%20d='M2%200L0%202h4zm0%205L0%203h4z'/%3E%3C/svg%3E") no-repeat right .35rem center/.4rem .5rem;padding-right:1.2rem}.has-icon-left,.has-icon-right{position:relative}.has-icon-left .form-icon,.has-icon-right .form-icon{height:.8rem;margin:0 .25rem;position:absolute;top:50%;transform:translateY(-50%);width:.8rem;z-index:2}.has-icon-left .form-icon{left:.05rem}.has-icon-left .form-input{padding-left:1.3rem}.has-icon-right .form-icon{right:.05rem}.has-icon-right .form-input{padding-right:1.3rem}.form-checkbox,.form-radio,.form-switch{display:block;line-height:1.2rem;margin:.2rem 0;min-height:1.4rem;padding:.1rem .4rem .1rem 1.2rem;position:relative}.form-checkbox input,.form-radio input,.form-switch input{clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;position:absolute;width:1px}.form-checkbox input:focus+.form-icon,.form-radio input:focus+.form-icon,.form-switch input:focus+.form-icon{border-color:#303742;box-shadow:0 0 0 .1rem rgba(87,85,217,.2)}.form-checkbox input:checked+.form-icon,.form-radio input:checked+.form-icon,.form-switch input:checked+.form-icon{background:#303742;border-color:#303742}.form-checkbox .form-icon,.form-radio .form-icon,.form-switch .form-icon{border:.05rem solid #cecece;cursor:pointer;display:inline-block;position:absolute;transition:background .2s,border .2s,box-shadow .2s,color .2s}.form-checkbox.input-sm,.form-radio.input-sm,.form-switch.input-sm{font-size:.7rem;margin:0}.form-checkbox.input-lg,.form-radio.input-lg,.form-switch.input-lg{font-size:.9rem;margin:.3rem 0}.form-checkbox .form-icon,.form-radio .form-icon{background:#fff;height:.8rem;left:0;top:.3rem;width:.8rem}.form-checkbox input:active+.form-icon,.form-radio input:active+.form-icon{background:#f0f0f0}.form-checkbox .form-icon{border-radius:.1rem}.form-checkbox input:checked+.form-icon:before{background-clip:padding-box;border:.1rem solid #fff;border-left-width:0;border-top-width:0;content:"";height:9px;left:50%;margin-left:-3px;margin-top:-6px;position:absolute;top:50%;transform:rotate(45deg);width:6px}.form-checkbox input:indeterminate+.form-icon{background:#303742;border-color:#303742}.form-checkbox input:indeterminate+.form-icon:before{background:#fff;content:"";height:2px;left:50%;margin-left:-5px;margin-top:-1px;position:absolute;top:50%;width:10px}.form-radio .form-icon{border-radius:50%}.form-radio input:checked+.form-icon:before{background:#fff;border-radius:50%;content:"";height:6px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:6px}.form-switch{padding-left:2rem}.form-switch .form-icon{background:#cecece;background-clip:padding-box;border-radius:.45rem;height:.9rem;left:0;top:.25rem;width:1.6rem}.form-switch .form-icon:before{background:#fff;border-radius:50%;content:"";display:block;height:.8rem;left:0;position:absolute;top:0;transition:background .2s,border .2s,box-shadow .2s,color .2s,left .2s;width:.8rem}.form-switch input:checked+.form-icon:before{left:14px}.form-switch input:active+.form-icon:before{background:#fafafa}.input-group{display:flex}.input-group .input-group-addon{background:#fafafa;border:.05rem solid #cecece;border-radius:.1rem;line-height:1.2rem;padding:.25rem .4rem;white-space:nowrap}.input-group .input-group-addon.addon-sm{font-size:.7rem;padding:.05rem .3rem}.input-group .input-group-addon.addon-lg{font-size:.9rem;padding:.35rem .6rem}.input-group .form-input,.input-group .form-select{flex:1 1 auto;width:1%}.input-group .input-group-btn{z-index:1}.input-group .form-input:first-child:not(:last-child),.input-group .form-select:first-child:not(:last-child),.input-group .input-group-addon:first-child:not(:last-child),.input-group .input-group-btn:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.input-group .form-input:not(:first-child):not(:last-child),.input-group .form-select:not(:first-child):not(:last-child),.input-group .input-group-addon:not(:first-child):not(:last-child),.input-group .input-group-btn:not(:first-child):not(:last-child){border-radius:0;margin-left:-.05rem}.input-group .form-input:last-child:not(:first-child),.input-group .form-select:last-child:not(:first-child),.input-group .input-group-addon:last-child:not(:first-child),.input-group .input-group-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-.05rem}.input-group .form-input:focus,.input-group .form-select:focus,.input-group .input-group-addon:focus,.input-group .input-group-btn:focus{z-index:2}.input-group .form-select{width:auto}.input-group.input-inline{display:inline-flex}.form-input.is-success,.form-select.is-success,.has-success .form-input,.has-success .form-select{background:#f9fdfa;border-color:#32b643}.form-input.is-success:focus,.form-select.is-success:focus,.has-success .form-input:focus,.has-success .form-select:focus{box-shadow:0 0 0 .1rem rgba(50,182,67,.2)}.form-input.is-error,.form-select.is-error,.has-error .form-input,.has-error .form-select{background:#fffaf7;border-color:#e85600}.form-input.is-error:focus,.form-select.is-error:focus,.has-error .form-input:focus,.has-error .form-select:focus{box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.form-checkbox.is-error .form-icon,.form-radio.is-error .form-icon,.form-switch.is-error .form-icon,.has-error .form-checkbox .form-icon,.has-error .form-radio .form-icon,.has-error .form-switch .form-icon{border-color:#e85600}.form-checkbox.is-error input:checked+.form-icon,.form-radio.is-error input:checked+.form-icon,.form-switch.is-error input:checked+.form-icon,.has-error .form-checkbox input:checked+.form-icon,.has-error .form-radio input:checked+.form-icon,.has-error .form-switch input:checked+.form-icon{background:#e85600;border-color:#e85600}.form-checkbox.is-error input:focus+.form-icon,.form-radio.is-error input:focus+.form-icon,.form-switch.is-error input:focus+.form-icon,.has-error .form-checkbox input:focus+.form-icon,.has-error .form-radio input:focus+.form-icon,.has-error .form-switch input:focus+.form-icon{border-color:#e85600;box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.form-checkbox.is-error input:indeterminate+.form-icon,.has-error .form-checkbox input:indeterminate+.form-icon{background:#e85600;border-color:#e85600}.form-input:not(:-moz-placeholder-shown):invalid{border-color:#e85600}.form-input:not(:placeholder-shown):invalid{border-color:#e85600}.form-input:not(:-moz-placeholder-shown):invalid:focus{background:#fffaf7;box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.form-input:not(:placeholder-shown):invalid:focus{background:#fffaf7;box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.form-input:not(:-moz-placeholder-shown):invalid+.form-input-hint{color:#e85600}.form-input:not(:placeholder-shown):invalid+.form-input-hint{color:#e85600}.form-input.disabled,.form-input:disabled,.form-select.disabled,.form-select:disabled{background-color:#f0f0f0;cursor:not-allowed;opacity:.5}.form-input[readonly]{background-color:#fafafa}input.disabled+.form-icon,input:disabled+.form-icon{background:#f0f0f0;cursor:not-allowed;opacity:.5}.form-switch input.disabled+.form-icon:before,.form-switch input:disabled+.form-icon:before{background:#fff}.form-horizontal{padding:.4rem 0}.form-horizontal .form-group{display:flex;flex-wrap:wrap}.form-inline,.label{display:inline-block}.label{background:#f0f0f0;border-radius:.1rem;color:#455060;line-height:1.25;padding:.1rem .2rem}.label.label-rounded{border-radius:5rem;padding-left:.4rem;padding-right:.4rem}.label.label-primary{background:#303742;color:#fff}.label.label-secondary{background:#66758c;color:#303742}.label.label-success{background:#32b643;color:#fff}.label.label-warning{background:#ffb700;color:#fff}.label.label-error{background:#e85600;color:#fff}code{background:#fcf2f2;color:#d73e48;font-size:85%;line-height:1.25;padding:.1rem .2rem}.code,code{border-radius:.1rem}.code{color:#3b4351;position:relative}.code:before{color:#cecece;content:attr(data-lang);font-size:.7rem;position:absolute;right:.4rem;top:.1rem}.code code{background:#fafafa;color:inherit;display:block;line-height:1.5;overflow-x:auto;padding:1rem;width:100%}.img-responsive{display:block;height:auto;max-width:100%}.img-fit-cover{-o-object-fit:cover;object-fit:cover}.img-fit-contain{-o-object-fit:contain;object-fit:contain}.video-responsive{display:block;overflow:hidden;padding:0;position:relative;width:100%}.video-responsive:before{content:"";display:block;padding-bottom:56.25%}.video-responsive embed,.video-responsive iframe,.video-responsive object{border:0;bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}video.video-responsive{height:auto;max-width:100%}video.video-responsive:before{content:none}.video-responsive-4-3:before{padding-bottom:75%}.video-responsive-1-1:before{padding-bottom:100%}.figure{margin:0 0 .4rem 0}.figure .figure-caption{color:#66758c;margin-top:.4rem}.container{margin-left:auto;margin-right:auto;padding-left:.4rem;padding-right:.4rem;width:100%}.container.grid-xl{max-width:1296px}.container.grid-lg{max-width:976px}.container.grid-md{max-width:856px}.container.grid-sm{max-width:616px}.container.grid-xs{max-width:496px}.show-lg,.show-md,.show-sm,.show-xl,.show-xs{display:none!important}.cols,.columns{display:flex;flex-wrap:wrap;margin-left:-.4rem;margin-right:-.4rem}.cols.col-gapless,.columns.col-gapless{margin-left:0;margin-right:0}.cols.col-gapless>.column,.columns.col-gapless>.column{padding-left:0;padding-right:0}.cols.col-oneline,.columns.col-oneline{flex-wrap:nowrap;overflow-x:auto}.column,[class~=col-]{flex:1;max-width:100%;padding-left:.4rem;padding-right:.4rem}.column.col-1,.column.col-2,.column.col-3,.column.col-4,.column.col-5,.column.col-6,.column.col-7,.column.col-8,.column.col-9,.column.col-10,.column.col-11,.column.col-12,.column.col-auto,[class~=col-].col-1,[class~=col-].col-2,[class~=col-].col-3,[class~=col-].col-4,[class~=col-].col-5,[class~=col-].col-6,[class~=col-].col-7,[class~=col-].col-8,[class~=col-].col-9,[class~=col-].col-10,[class~=col-].col-11,[class~=col-].col-12,[class~=col-].col-auto{flex:none}.col-12{width:100%}.col-11{width:91.66666667%}.col-10{width:83.33333333%}.col-9{width:75%}.col-8{width:66.66666667%}.col-7{width:58.33333333%}.col-6{width:50%}.col-5{width:41.66666667%}.col-4{width:33.33333333%}.col-3{width:25%}.col-2{width:16.66666667%}.col-1{width:8.33333333%}.col-auto{flex:0 0 auto;max-width:none;width:auto}.col-mx-auto{margin-right:auto}.col-ml-auto,.col-mx-auto{margin-left:auto}.col-mr-auto{margin-right:auto}@media (max-width:1280px){.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{flex:none}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-auto{width:auto}.hide-xl{display:none!important}.show-xl{display:block!important}}@media (max-width:960px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto{flex:none}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-auto{width:auto}.hide-lg{display:none!important}.show-lg{display:block!important}}@media (max-width:840px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto{flex:none}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-auto{width:auto}.hide-md{display:none!important}.show-md{display:block!important}}@media (max-width:600px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto{flex:none}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-auto{width:auto}.hide-sm{display:none!important}.show-sm{display:block!important}}@media (max-width:480px){.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-auto{flex:none}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-auto{width:auto}.hide-xs{display:none!important}.show-xs{display:block!important}}.hero{display:flex;flex-direction:column;justify-content:space-between;padding-bottom:4rem;padding-top:4rem}.hero.hero-sm{padding-bottom:2rem;padding-top:2rem}.hero.hero-lg{padding-bottom:8rem;padding-top:8rem}.hero .hero-body{padding:.4rem}.navbar{align-items:stretch;display:flex;-ms-flex-align:stretch;-ms-flex-pack:justify;flex-wrap:wrap;justify-content:space-between}.navbar .navbar-section{align-items:center;display:flex;flex:1 0 0;-ms-flex-align:center}.navbar .navbar-section:not(:first-child):last-child{justify-content:flex-end}.navbar .navbar-center{align-items:center;display:flex;flex:0 0 auto;-ms-flex-align:center}.navbar .navbar-brand{font-size:.9rem;text-decoration:none}.accordion[open] .accordion-header>.icon:first-child,.accordion input:checked~.accordion-header>.icon:first-child{transform:rotate(90deg)}.accordion[open] .accordion-body,.accordion input:checked~.accordion-body{max-height:50rem}.accordion .accordion-header{display:block;padding:.2rem .4rem}.accordion .accordion-header .icon{transition:transform .25s}.accordion .accordion-body{margin-bottom:.4rem;max-height:0;overflow:hidden;transition:max-height .25s}summary.accordion-header::-webkit-details-marker{display:none}.avatar{background:#303742;border-radius:50%;color:hsla(0,0%,100%,.85);display:inline-block;font-size:.8rem;font-weight:300;height:1.6rem;line-height:1.25;margin:0;position:relative;vertical-align:middle;width:1.6rem}.avatar.avatar-xs{font-size:.4rem;height:.8rem;width:.8rem}.avatar.avatar-sm{font-size:.6rem;height:1.2rem;width:1.2rem}.avatar.avatar-lg{font-size:1.2rem;height:2.4rem;width:2.4rem}.avatar.avatar-xl{font-size:1.6rem;height:3.2rem;width:3.2rem}.avatar img{border-radius:50%;height:100%;position:relative;width:100%;z-index:1}.avatar .avatar-icon,.avatar .avatar-presence{background:#fff;bottom:14.64%;height:50%;padding:.1rem;position:absolute;right:14.64%;transform:translate(50%,50%);width:50%;z-index:2}.avatar .avatar-presence{background:#cecece;border-radius:50%;box-shadow:0 0 0 .1rem #fff;height:.5em;width:.5em}.avatar .avatar-presence.online{background:#32b643}.avatar .avatar-presence.busy{background:#e85600}.avatar .avatar-presence.away{background:#ffb700}.avatar[data-initial]:before{color:currentColor;content:attr(data-initial);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:1}.badge{position:relative;white-space:nowrap}.badge:not([data-badge]):after,.badge[data-badge]:after{background:#303742;background-clip:padding-box;border-radius:.5rem;box-shadow:0 0 0 .1rem #fff;color:#fff;content:attr(data-badge);display:inline-block;transform:translate(-.05rem,-.5rem)}.badge[data-badge]:after{font-size:.7rem;height:.9rem;line-height:1;min-width:.9rem;padding:.1rem .2rem;text-align:center;white-space:nowrap}.badge:not([data-badge]):after,.badge[data-badge=""]:after{height:6px;min-width:6px;padding:0;width:6px}.badge.btn:after{right:0;top:0}.badge.avatar:after,.badge.btn:after{position:absolute;transform:translate(50%,-50%)}.badge.avatar:after{right:14.64%;top:14.64%;z-index:100}.breadcrumb{list-style:none;margin:.2rem 0;padding:.2rem 0}.breadcrumb .breadcrumb-item{color:#66758c;display:inline-block;margin:0;padding:.2rem 0}.breadcrumb .breadcrumb-item:not(:last-child){margin-right:.2rem}.breadcrumb .breadcrumb-item:not(:last-child) a{color:#66758c}.breadcrumb .breadcrumb-item:not(:first-child):before{color:#66758c;content:"/";padding-right:.4rem}.bar{background:#f0f0f0;border-radius:.1rem;display:flex;flex-wrap:nowrap;height:.8rem;width:100%}.bar.bar-sm{height:.2rem}.bar .bar-item{background:#303742;color:#fff;display:block;flex-shrink:0;font-size:.7rem;height:100%;line-height:.8rem;position:relative;text-align:center;width:0}.bar .bar-item:first-child{border-bottom-left-radius:.1rem;border-top-left-radius:.1rem}.bar .bar-item:last-child{border-bottom-right-radius:.1rem;border-top-right-radius:.1rem;flex-shrink:1}.bar-slider{height:.1rem;margin:.4rem 0;position:relative}.bar-slider .bar-item{left:0;padding:0;position:absolute}.bar-slider .bar-item:not(:last-child):first-child{background:#f0f0f0;z-index:1}.bar-slider .bar-slider-btn{background:#303742;border:0;border-radius:50%;height:.6rem;padding:0;position:absolute;right:0;top:50%;transform:translate(50%,-50%);width:.6rem}.bar-slider .bar-slider-btn:active{box-shadow:0 0 0 .1rem #303742}.card{background:#fff;border:.05rem solid #dadee4;border-radius:.1rem;display:flex;flex-direction:column}.card .card-body,.card .card-footer,.card .card-header{padding:.8rem;padding-bottom:0}.card .card-body:last-child,.card .card-footer:last-child,.card .card-header:last-child{padding-bottom:.8rem}.card .card-body{flex:1 1 auto}.card .card-image{padding-top:.8rem}.card .card-image:first-child{padding-top:0}.card .card-image:first-child img{border-top-left-radius:.1rem;border-top-right-radius:.1rem}.card .card-image:last-child img{border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem}.chip{align-items:center;background:#f0f0f0;border-radius:5rem;display:inline-flex;-ms-flex-align:center;font-size:90%;height:1.2rem;line-height:.8rem;margin:.1rem;max-width:320px;overflow:hidden;padding:.2rem .4rem;text-decoration:none;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.chip.active{background:#303742;color:#fff}.chip .avatar{margin-left:-.4rem;margin-right:.2rem}.chip .btn-clear{border-radius:50%;transform:scale(.75)}.dropdown{display:inline-block;position:relative}.dropdown .menu{animation:slide-down .15s ease 1;display:none;left:0;max-height:50vh;overflow-y:auto;position:absolute;top:100%}.dropdown.dropdown-right .menu{left:auto;right:0}.dropdown.active .menu,.dropdown .dropdown-toggle:focus+.menu,.dropdown .menu:hover{display:block}.dropdown .btn-group .dropdown-toggle:nth-last-child(2){border-bottom-right-radius:.1rem;border-top-right-radius:.1rem}.empty{background:#fafafa;border-radius:.1rem;color:#66758c;padding:3.2rem 1.6rem;text-align:center}.empty .empty-icon{margin-bottom:.8rem}.empty .empty-subtitle,.empty .empty-title{margin:.4rem auto}.empty .empty-action{margin-top:.8rem}.menu{background:#fff;border-radius:.1rem;box-shadow:0 .05rem .2rem rgba(48,55,66,.3);list-style:none;margin:0;min-width:180px;padding:.4rem;transform:translateY(.2rem);z-index:300}.menu.menu-nav{background:0 0;box-shadow:none}.menu .menu-item{margin-top:0;padding:0 .4rem;position:relative;text-decoration:none}.menu .menu-item>a{border-radius:.1rem;color:inherit;display:block;margin:0 -.4rem;padding:.2rem .4rem;text-decoration:none}.menu .menu-item>a.active,.menu .menu-item>a:active,.menu .menu-item>a:focus,.menu .menu-item>a:hover{background:#66758c;color:#303742}.menu .menu-item .form-checkbox,.menu .menu-item .form-radio,.menu .menu-item .form-switch{margin:.1rem 0}.menu .menu-item+.menu-item{margin-top:.2rem}.menu .menu-badge{align-items:center;display:flex;-ms-flex-align:center;height:100%;position:absolute;right:0;top:0}.menu .menu-badge .label{margin-right:.4rem}.modal{align-items:center;bottom:0;display:none;-ms-flex-align:center;justify-content:center;left:0;opacity:0;overflow:hidden;padding:.4rem;position:fixed;right:0;top:0}.modal.active,.modal:target{display:flex;opacity:1;z-index:400}.modal.active .modal-overlay,.modal:target .modal-overlay{background:rgba(247,248,249,.75);bottom:0;cursor:default;display:block;left:0;position:absolute;right:0;top:0}.modal.active .modal-container,.modal:target .modal-container{animation:slide-down .2s ease 1;z-index:1}.modal.modal-sm .modal-container{max-width:320px;padding:0 .4rem}.modal.modal-lg .modal-overlay{background:#fff}.modal.modal-lg .modal-container{box-shadow:none;max-width:960px}.modal-container{background:#fff;border-radius:.1rem;box-shadow:0 .2rem .5rem rgba(48,55,66,.3);display:flex;flex-direction:column;max-height:75vh;max-width:640px;padding:0 .8rem;width:100%}.modal-container.modal-fullheight{max-height:100vh}.modal-container .modal-header{color:#303742;padding:.8rem}.modal-container .modal-body{overflow-y:auto;padding:.8rem;position:relative}.modal-container .modal-footer{padding:.8rem;text-align:right}.nav{display:flex;flex-direction:column;list-style:none;margin:.2rem 0}.nav .nav-item a{color:#66758c;padding:.2rem .4rem;text-decoration:none}.nav .nav-item a:focus,.nav .nav-item a:hover{color:#303742}.nav .nav-item.active>a{color:#505c6e;font-weight:700}.nav .nav-item.active>a:focus,.nav .nav-item.active>a:hover{color:#303742}.nav .nav{margin-bottom:.4rem;margin-left:.8rem}.pagination{display:flex;list-style:none;margin:.2rem 0;padding:.2rem 0}.pagination .page-item{margin:.2rem .05rem}.pagination .page-item span{display:inline-block;padding:.2rem .2rem}.pagination .page-item a{border-radius:.1rem;display:inline-block;padding:.2rem .4rem;text-decoration:none}.pagination .page-item a:focus,.pagination .page-item a:hover{color:#303742}.pagination .page-item.disabled a{cursor:default;opacity:.5;pointer-events:none}.pagination .page-item.active a{background:#303742;color:#fff}.pagination .page-item.page-next,.pagination .page-item.page-prev{flex:1 0 50%}.pagination .page-item.page-next{text-align:right}.pagination .page-item .page-item-title{margin:0}.pagination .page-item .page-item-subtitle{margin:0;opacity:.5}.panel{border:.05rem solid #dadee4;border-radius:.1rem;display:flex;flex-direction:column}.panel .panel-footer,.panel .panel-header{flex:0 0 auto;padding:.8rem}.panel .panel-nav{flex:0 0 auto}.panel .panel-body{flex:1 1 auto;overflow-y:auto;padding:0 .8rem}.popover{display:inline-block;position:relative}.popover .popover-container{left:50%;opacity:0;padding:.4rem;position:absolute;top:0;transform:translate(-50%,-50%) scale(0);transition:transform .2s;width:320px;z-index:300}.popover :focus+.popover-container,.popover:hover .popover-container{display:block;opacity:1;transform:translate(-50%,-100%) scale(1)}.popover.popover-right .popover-container{left:100%;top:50%}.popover.popover-right :focus+.popover-container,.popover.popover-right:hover .popover-container{transform:translateY(-50%) scale(1)}.popover.popover-bottom .popover-container{left:50%;top:100%}.popover.popover-bottom :focus+.popover-container,.popover.popover-bottom:hover .popover-container{transform:translate(-50%) scale(1)}.popover.popover-left .popover-container{left:0;top:50%}.popover.popover-left :focus+.popover-container,.popover.popover-left:hover .popover-container{transform:translate(-100%,-50%) scale(1)}.popover .card{border:0;box-shadow:0 .2rem .5rem rgba(48,55,66,.3)}.step{display:flex;flex-wrap:nowrap;list-style:none;margin:.2rem 0;width:100%}.step .step-item{flex:1 1 0;margin-top:0;min-height:1rem;position:relative;text-align:center}.step .step-item:not(:first-child):before{background:#303742;content:"";height:2px;left:-50%;position:absolute;top:9px;width:100%}.step .step-item a{color:#303742;display:inline-block;padding:20px 10px 0;text-decoration:none}.step .step-item a:before{background:#303742;border:.1rem solid #fff;border-radius:50%;content:"";display:block;height:.6rem;left:50%;position:absolute;top:.2rem;transform:translateX(-50%);width:.6rem;z-index:1}.step .step-item.active a:before{background:#fff;border:.1rem solid #303742}.step .step-item.active~.step-item:before{background:#dadee4}.step .step-item.active~.step-item a{color:#cecece}.step .step-item.active~.step-item a:before{background:#dadee4}.tab{align-items:center;border-bottom:.05rem solid #dadee4;display:flex;-ms-flex-align:center;flex-wrap:wrap;list-style:none;margin:.2rem 0 .15rem 0}.tab .tab-item{margin-top:0}.tab .tab-item a{border-bottom:.1rem solid transparent;color:inherit;display:block;margin:0 .4rem 0 0;padding:.4rem .2rem .3rem .2rem;text-decoration:none}.tab .tab-item a:focus,.tab .tab-item a:hover{color:#303742}.tab .tab-item.active a,.tab .tab-item a.active{border-bottom-color:#303742;color:#303742}.tab .tab-item.tab-action{flex:1 0 auto;text-align:right}.tab .tab-item .btn-clear{margin-top:-.2rem}.tab.tab-block .tab-item{flex:1 0 0;text-align:center}.tab.tab-block .tab-item a{margin:0}.tab.tab-block .tab-item .badge[data-badge]:after{position:absolute;right:.1rem;top:.1rem;transform:translate(0)}.tab:not(.tab-block) .badge{padding-right:0}.tile{align-content:space-between;align-items:flex-start;display:flex;-ms-flex-align:start;-ms-flex-line-pack:justify}.tile .tile-action,.tile .tile-icon{flex:0 0 auto}.tile .tile-content{flex:1 1 auto}.tile .tile-content:not(:first-child){padding-left:.4rem}.tile .tile-content:not(:last-child){padding-right:.4rem}.tile .tile-subtitle,.tile .tile-title{line-height:1.2rem}.tile.tile-centered{align-items:center;-ms-flex-align:center}.tile.tile-centered .tile-content{overflow:hidden}.tile.tile-centered .tile-subtitle,.tile.tile-centered .tile-title{margin-bottom:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toast{background:rgba(48,55,66,.95);border:.05rem solid #303742;border-color:#303742;border-radius:.1rem;color:#fff;display:block;padding:.4rem;width:100%}.toast.toast-primary{background:rgba(87,85,217,.95);border-color:#303742}.toast.toast-success{background:rgba(50,182,67,.95);border-color:#32b643}.toast.toast-warning{background:rgba(255,183,0,.95);border-color:#ffb700}.toast.toast-error{background:rgba(232,86,0,.95);border-color:#e85600}.toast a{color:#fff;text-decoration:underline}.toast a.active,.toast a:active,.toast a:focus,.toast a:hover{opacity:.75}.toast .btn-clear{margin:.1rem}.toast p:last-child{margin-bottom:0}.tooltip{position:relative}.tooltip:after{border-radius:.1rem;font-size:.7rem;padding:.2rem .4rem}.tooltip:focus:after,.tooltip:hover:after{opacity:1;transform:translate(-50%,-.2rem)}.tooltip.disabled,.tooltip[disabled]{pointer-events:auto}.tooltip.tooltip-right:after{bottom:50%;left:100%;transform:translate(-.2rem,50%)}.tooltip.tooltip-right:focus:after,.tooltip.tooltip-right:hover:after{transform:translate(.2rem,50%)}.tooltip.tooltip-bottom:after{bottom:auto;top:100%;transform:translate(-50%,-.4rem)}.tooltip.tooltip-bottom:focus:after,.tooltip.tooltip-bottom:hover:after{transform:translate(-50%,.2rem)}.tooltip.tooltip-left:after{bottom:50%;left:auto;right:100%;transform:translate(.4rem,50%)}.tooltip.tooltip-left:focus:after,.tooltip.tooltip-left:hover:after{transform:translate(-.2rem,50%)}@keyframes loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes slide-down{0%{opacity:0;transform:translateY(-1.6rem)}to{opacity:1;transform:translateY(0)}}.text-primary{color:#303742!important}a.text-primary:focus,a.text-primary:hover{color:#3b4351}a.text-primary:visited{color:#6c6ade}.text-secondary{color:#e5e5f9!important}a.text-secondary:focus,a.text-secondary:hover{color:#d1d0f4}a.text-secondary:visited{color:#fafafe}.text-gray{color:#cecece!important}a.text-gray:focus,a.text-gray:hover{color:#adb6c4}a.text-gray:visited{color:#cbd0d9}.text-light{color:#fff!important}a.text-light:focus,a.text-light:hover{color:#f2f2f2}a.text-light:visited{color:#fff}.text-dark{color:#3b4351!important}a.text-dark:focus,a.text-dark:hover{color:#303742}a.text-dark:visited{color:#455060}.text-success{color:#32b643!important}a.text-success:focus,a.text-success:hover{color:#2da23c}a.text-success:visited{color:#39c94b}.text-warning{color:#ffb700!important}a.text-warning:focus,a.text-warning:hover{color:#e6a500}a.text-warning:visited{color:#ffbe1a}.text-error{color:#e85600!important}a.text-error:focus,a.text-error:hover{color:#cf4d00}a.text-error:visited{color:#ff6003}.bg-primary{background:#303742!important;color:#fff}.bg-secondary{background:#66758c!important}.bg-dark{background:#303742!important;color:#fff}.bg-gray{background:#fafafa!important}.bg-success{background:#32b643!important;color:#fff}.bg-warning{background:#ffb700!important;color:#fff}.bg-error{background:#e85600!important;color:#fff}.c-hand{cursor:pointer}.c-move{cursor:move}.c-zoom-in{cursor:zoom-in}.c-zoom-out{cursor:zoom-out}.c-not-allowed{cursor:not-allowed}.c-auto{cursor:auto}.d-block{display:block}.d-inline{display:inline}.d-inline-block{display:inline-block}.d-flex{display:flex}.d-inline-flex{display:inline-flex}.d-hide,.d-none{display:none!important}.d-visible{visibility:visible}.d-invisible{visibility:hidden}.text-hide{background:0 0;border:0;color:transparent;font-size:0;line-height:0;text-shadow:none}.text-assistive{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.divider,.divider-vert{display:block;position:relative}.divider-vert[data-content]:after,.divider[data-content]:after{background:#fff;color:#cecece;content:attr(data-content);display:inline-block;font-size:.7rem;padding:0 .4rem;transform:translateY(-.65rem)}.divider{border-top:.05rem solid #f1f3f5;height:.05rem;margin:.4rem 0}.divider[data-content]{margin:.8rem 0}.divider-vert{display:block;padding:.8rem}.divider-vert:before{border-left:.05rem solid #dadee4;bottom:.4rem;content:"";display:block;left:50%;position:absolute;top:.4rem;transform:translateX(-50%)}.divider-vert[data-content]:after{left:50%;padding:.2rem 0;position:absolute;top:50%;transform:translate(-50%,-50%)}.loading{color:transparent!important;min-height:.8rem;pointer-events:none;position:relative}.loading:after{border:.1rem solid #303742}.loading.loading-lg{min-height:2rem}.clearfix:after{clear:both;content:"";display:table}.float-left{float:left!important}.float-right{float:right!important}.p-relative{position:relative!important}.p-absolute{position:absolute!important}.p-fixed{position:fixed!important}.p-sticky{position:sticky!important}.p-centered{display:block;float:none;margin-left:auto;margin-right:auto}.flex-centered{align-items:center;display:flex;-ms-flex-align:center;justify-content:center}.m-0{margin:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mr-0{margin-right:0!important}.mt-0{margin-top:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-bottom:0!important;margin-top:0!important}.m-1{margin:.2rem!important}.mb-1{margin-bottom:.2rem!important}.ml-1{margin-left:.2rem!important}.mr-1{margin-right:.2rem!important}.mt-1{margin-top:.2rem!important}.mx-1{margin-left:.2rem!important;margin-right:.2rem!important}.my-1{margin-bottom:.2rem!important;margin-top:.2rem!important}.m-2{margin:.4rem!important}.mb-2{margin-bottom:.4rem!important}.ml-2{margin-left:.4rem!important}.mr-2{margin-right:.4rem!important}.mt-2{margin-top:.4rem!important}.mx-2{margin-left:.4rem!important;margin-right:.4rem!important}.my-2{margin-bottom:.4rem!important;margin-top:.4rem!important}.p-0{padding:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.pr-0{padding-right:0!important}.pt-0{padding-top:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-bottom:0!important;padding-top:0!important}.p-1{padding:.2rem!important}.pb-1{padding-bottom:.2rem!important}.pl-1{padding-left:.2rem!important}.pr-1{padding-right:.2rem!important}.pt-1{padding-top:.2rem!important}.px-1{padding-left:.2rem!important;padding-right:.2rem!important}.py-1{padding-bottom:.2rem!important;padding-top:.2rem!important}.p-2{padding:.4rem!important}.pb-2{padding-bottom:.4rem!important}.pl-2{padding-left:.4rem!important}.pr-2{padding-right:.4rem!important}.pt-2{padding-top:.4rem!important}.px-2{padding-left:.4rem!important;padding-right:.4rem!important}.py-2{padding-bottom:.4rem!important;padding-top:.4rem!important}.s-rounded{border-radius:.1rem}.s-circle{border-radius:50%}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-normal{font-weight:400}.text-bold{font-weight:700}.text-italic{font-style:italic}.text-large{font-size:1.2em}.text-small{font-size:.9em}.text-tiny{font-size:.8em}.text-muted{opacity:.8}.text-ellipsis{text-overflow:ellipsis}.text-clip,.text-ellipsis{overflow:hidden;white-space:nowrap}.text-clip{text-overflow:clip}.text-break{-webkit-hyphens:auto;hyphens:auto;word-break:break-word;word-wrap:break-word} + +/*! Spectre.css Experimentals v0.5.9 | MIT License | github.com/picturepan2/spectre */.form-autocomplete{position:relative}.form-autocomplete .form-autocomplete-input{align-content:flex-start;display:flex;-ms-flex-line-pack:start;flex-wrap:wrap;height:auto;min-height:1.6rem;padding:.1rem}.form-autocomplete .form-autocomplete-input.is-focused{border-color:#303742;box-shadow:0 0 0 .1rem rgba(87,85,217,.2)}.form-autocomplete .form-autocomplete-input .form-input{border-color:transparent;box-shadow:none;display:inline-block;flex:1 0 auto;height:1.2rem;line-height:.8rem;margin:.1rem;width:auto}.form-autocomplete .menu{left:0;position:absolute;top:100%;width:100%}.form-autocomplete.autocomplete-oneline .form-autocomplete-input{flex-wrap:nowrap;overflow-x:auto}.form-autocomplete.autocomplete-oneline .chip{flex:1 0 auto}.calendar{border:.05rem solid #e4e4e4;border-radius:.1rem;display:block;min-width:280px}.calendar .calendar-nav{align-items:center;background:#f7f8f9;border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flex;-ms-flex-align:center;font-size:.9rem;padding:.4rem}.calendar .calendar-body,.calendar .calendar-header{display:flex;-ms-flex-pack:center;flex-wrap:wrap;justify-content:center;padding:.4rem 0}.calendar .calendar-body .calendar-date,.calendar .calendar-header .calendar-date{flex:0 0 14.28%;max-width:14.28%}.calendar .calendar-header{background:#f7f8f9;border-bottom:.05rem solid #e4e4e4;color:#cecece;font-size:.7rem;text-align:center}.calendar .calendar-body{color:#66758c}.calendar .calendar-date{border:0;padding:.2rem}.calendar .calendar-date .date-item{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:0 0;border:.05rem solid transparent;border-radius:50%;color:#66758c;cursor:pointer;font-size:.7rem;height:1.4rem;line-height:1rem;outline:0;padding:.1rem;position:relative;text-align:center;text-decoration:none;transition:background .2s,border .2s,box-shadow .2s,color .2s;vertical-align:middle;white-space:nowrap;width:1.4rem}.calendar .calendar-date .date-item.date-today{border-color:#e5e5f9;color:#303742}.calendar .calendar-date .date-item:focus{box-shadow:0 0 0 .1rem rgba(87,85,217,.2)}.calendar .calendar-date .date-item:focus,.calendar .calendar-date .date-item:hover{background:#fefeff;border-color:#e5e5f9;color:#303742;text-decoration:none}.calendar .calendar-date .date-item.active,.calendar .calendar-date .date-item:active{background:#4b48d6;border-color:#3634d2;color:#fff}.calendar .calendar-date .date-item.badge:after{position:absolute;right:3px;top:3px;transform:translate(50%,-50%)}.calendar .calendar-date .calendar-event.disabled,.calendar .calendar-date .calendar-event:disabled,.calendar .calendar-date .date-item.disabled,.calendar .calendar-date .date-item:disabled{cursor:default;opacity:.25;pointer-events:none}.calendar .calendar-date.next-month .calendar-event,.calendar .calendar-date.next-month .date-item,.calendar .calendar-date.prev-month .calendar-event,.calendar .calendar-date.prev-month .date-item{opacity:.25}.calendar .calendar-range{position:relative}.calendar .calendar-range:before{background:#66758c;content:"";height:1.4rem;left:0;position:absolute;right:0;top:50%;transform:translateY(-50%)}.calendar .calendar-range.range-start:before{left:50%}.calendar .calendar-range.range-end:before{right:50%}.calendar .calendar-range.range-end .date-item,.calendar .calendar-range.range-start .date-item{background:#4b48d6;border-color:#3634d2;color:#fff}.calendar .calendar-range .date-item{color:#303742}.calendar.calendar-lg .calendar-body{padding:0}.calendar.calendar-lg .calendar-body .calendar-date{border-bottom:.05rem solid #e4e4e4;border-right:.05rem solid #e4e4e4;display:flex;flex-direction:column;height:5.5rem;padding:0}.calendar.calendar-lg .calendar-body .calendar-date:nth-child(7n){border-right:0}.calendar.calendar-lg .calendar-body .calendar-date:nth-last-child(-n+7){border-bottom:0}.calendar.calendar-lg .date-item{align-self:flex-end;-ms-flex-item-align:end;height:1.4rem;margin-right:.2rem;margin-top:.2rem}.calendar.calendar-lg .calendar-range:before{top:19px}.calendar.calendar-lg .calendar-range.range-start:before{left:auto;width:19px}.calendar.calendar-lg .calendar-range.range-end:before{right:19px}.calendar.calendar-lg .calendar-events{flex-grow:1;-ms-flex-positive:1;line-height:1;overflow-y:auto;padding:.2rem}.calendar.calendar-lg .calendar-event{border-radius:.1rem;display:block;font-size:.7rem;margin:.1rem auto;overflow:hidden;padding:3px 4px;text-overflow:ellipsis;white-space:nowrap}.carousel .carousel-locator:first-of-type:checked~.carousel-container .carousel-item:first-of-type,.carousel .carousel-locator:nth-of-type(2):checked~.carousel-container .carousel-item:nth-of-type(2),.carousel .carousel-locator:nth-of-type(3):checked~.carousel-container .carousel-item:nth-of-type(3),.carousel .carousel-locator:nth-of-type(4):checked~.carousel-container .carousel-item:nth-of-type(4),.carousel .carousel-locator:nth-of-type(5):checked~.carousel-container .carousel-item:nth-of-type(5),.carousel .carousel-locator:nth-of-type(6):checked~.carousel-container .carousel-item:nth-of-type(6),.carousel .carousel-locator:nth-of-type(7):checked~.carousel-container .carousel-item:nth-of-type(7),.carousel .carousel-locator:nth-of-type(8):checked~.carousel-container .carousel-item:nth-of-type(8){animation:carousel-slidein .75s ease-in-out 1;opacity:1;z-index:100}.carousel .carousel-locator:first-of-type:checked~.carousel-nav .nav-item:first-of-type,.carousel .carousel-locator:nth-of-type(2):checked~.carousel-nav .nav-item:nth-of-type(2),.carousel .carousel-locator:nth-of-type(3):checked~.carousel-nav .nav-item:nth-of-type(3),.carousel .carousel-locator:nth-of-type(4):checked~.carousel-nav .nav-item:nth-of-type(4),.carousel .carousel-locator:nth-of-type(5):checked~.carousel-nav .nav-item:nth-of-type(5),.carousel .carousel-locator:nth-of-type(6):checked~.carousel-nav .nav-item:nth-of-type(6),.carousel .carousel-locator:nth-of-type(7):checked~.carousel-nav .nav-item:nth-of-type(7),.carousel .carousel-locator:nth-of-type(8):checked~.carousel-nav .nav-item:nth-of-type(8){color:#f7f8f9}.carousel{background:#f7f8f9;display:block;overflow:hidden;-webkit-overflow-scrolling:touch;position:relative;width:100%;z-index:1}.carousel .carousel-container{height:100%;left:0;position:relative}.carousel .carousel-container:before{content:"";display:block;padding-bottom:56.25%}.carousel .carousel-container .carousel-item{animation:carousel-slideout 1s ease-in-out 1;height:100%;left:0;margin:0;opacity:0;position:absolute;top:0;width:100%}.carousel .carousel-container .carousel-item:hover .item-next,.carousel .carousel-container .carousel-item:hover .item-prev{opacity:1}.carousel .carousel-container .item-next,.carousel .carousel-container .item-prev{background:rgba(247,248,249,.25);border-color:rgba(247,248,249,.5);color:#f7f8f9;opacity:0;position:absolute;top:50%;transform:translateY(-50%);transition:all .4s;z-index:100}.carousel .carousel-container .item-prev{left:1rem}.carousel .carousel-container .item-next{right:1rem}.carousel .carousel-nav{bottom:.4rem;display:flex;justify-content:center;left:50%;position:absolute;transform:translateX(-50%);width:10rem;z-index:100}.carousel .carousel-nav .nav-item{color:rgba(247,248,249,.5);display:block;flex:1 0 auto;height:1.6rem;margin:.2rem;max-width:2.5rem;position:relative}.carousel .carousel-nav .nav-item:before{background:currentColor;content:"";display:block;height:.1rem;position:absolute;top:.5rem;width:100%}@keyframes carousel-slidein{0%{transform:translateX(100%)}to{transform:translateX(0)}}@keyframes carousel-slideout{0%{opacity:1;transform:translateX(0)}to{opacity:1;transform:translateX(-50%)}}.comparison-slider{height:50vh;overflow:hidden;-webkit-overflow-scrolling:touch;position:relative;width:100%}.comparison-slider .comparison-after,.comparison-slider .comparison-before{height:100%;left:0;margin:0;overflow:hidden;position:absolute;top:0}.comparison-slider .comparison-after img,.comparison-slider .comparison-before img{height:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:left center;object-position:left center;position:absolute;width:100%}.comparison-slider .comparison-before{width:100%;z-index:1}.comparison-slider .comparison-before .comparison-label{right:.8rem}.comparison-slider .comparison-after{max-width:100%;min-width:0;z-index:2}.comparison-slider .comparison-after:before{background:0 0;content:"";cursor:default;height:100%;left:0;position:absolute;right:.8rem;top:0;z-index:1}.comparison-slider .comparison-after:after{background:currentColor;border-radius:50%;box-shadow:0 -5px,0 5px;color:#fff;content:"";height:3px;pointer-events:none;position:absolute;right:.4rem;top:50%;transform:translate(50%,-50%);width:3px}.comparison-slider .comparison-after .comparison-label{left:.8rem}.comparison-slider .comparison-resizer{animation:first-run 1.5s ease-in-out 1;cursor:ew-resize;height:.8rem;left:0;max-width:100%;min-width:.8rem;opacity:0;outline:0;position:relative;resize:horizontal;top:50%;transform:translateY(-50%) scaleY(30);width:0}.comparison-slider .comparison-label{background:rgba(48,55,66,.5);bottom:.8rem;color:#fff;padding:.2rem .4rem;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes first-run{0%{width:0}25%{width:2.4rem}50%{width:.8rem}75%{width:1.2rem}to{width:0}}.filter .filter-tag#tag-0:checked~.filter-nav .chip[for=tag-0],.filter .filter-tag#tag-1:checked~.filter-nav .chip[for=tag-1],.filter .filter-tag#tag-2:checked~.filter-nav .chip[for=tag-2],.filter .filter-tag#tag-3:checked~.filter-nav .chip[for=tag-3],.filter .filter-tag#tag-4:checked~.filter-nav .chip[for=tag-4],.filter .filter-tag#tag-5:checked~.filter-nav .chip[for=tag-5],.filter .filter-tag#tag-6:checked~.filter-nav .chip[for=tag-6],.filter .filter-tag#tag-7:checked~.filter-nav .chip[for=tag-7],.filter .filter-tag#tag-8:checked~.filter-nav .chip[for=tag-8]{background:#303742;color:#fff}.filter .filter-tag#tag-1:checked~.filter-body .filter-item:not([data-tag~=tag-1]),.filter .filter-tag#tag-2:checked~.filter-body .filter-item:not([data-tag~=tag-2]),.filter .filter-tag#tag-3:checked~.filter-body .filter-item:not([data-tag~=tag-3]),.filter .filter-tag#tag-4:checked~.filter-body .filter-item:not([data-tag~=tag-4]),.filter .filter-tag#tag-5:checked~.filter-body .filter-item:not([data-tag~=tag-5]),.filter .filter-tag#tag-6:checked~.filter-body .filter-item:not([data-tag~=tag-6]),.filter .filter-tag#tag-7:checked~.filter-body .filter-item:not([data-tag~=tag-7]),.filter .filter-tag#tag-8:checked~.filter-body .filter-item:not([data-tag~=tag-8]){display:none}.filter .filter-nav{margin:.4rem 0}.filter .filter-body{display:flex;flex-wrap:wrap}.meter{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#f7f8f9;border:0;border-radius:.1rem;display:block;height:.8rem;width:100%}.meter::-webkit-meter-inner-element{display:block}.meter::-webkit-meter-bar,.meter::-webkit-meter-even-less-good-value,.meter::-webkit-meter-optimum-value,.meter::-webkit-meter-suboptimum-value{border-radius:.1rem}.meter::-webkit-meter-bar{background:#f7f8f9}.meter::-webkit-meter-optimum-value{background:#32b643}.meter::-webkit-meter-suboptimum-value{background:#ffb700}.meter::-webkit-meter-even-less-good-value{background:#e85600}.meter:-moz-meter-optimum,.meter:-moz-meter-sub-optimum,.meter:-moz-meter-sub-sub-optimum,.meter::-moz-meter-bar{border-radius:.1rem}.meter:-moz-meter-optimum::-moz-meter-bar{background:#32b643}.meter:-moz-meter-sub-optimum::-moz-meter-bar{background:#ffb700}.meter:-moz-meter-sub-sub-optimum::-moz-meter-bar{background:#e85600}.off-canvas{display:flex;flex-flow:nowrap;height:100%;position:relative;width:100%}.off-canvas .off-canvas-toggle{display:block;left:.4rem;position:absolute;top:.4rem;transition:none;z-index:1}.off-canvas .off-canvas-sidebar{background:#f7f8f9;bottom:0;left:0;min-width:10rem;overflow-y:auto;position:fixed;top:0;transform:translateX(-100%);transition:transform .25s;z-index:200}.off-canvas .off-canvas-content{flex:1 1 auto;height:100%;padding:.4rem .4rem .4rem 4rem}.off-canvas .off-canvas-overlay{background:rgba(48,55,66,.1);border-color:transparent;border-radius:0;bottom:0;display:none;height:100%;left:0;position:fixed;right:0;top:0;width:100%}.off-canvas .off-canvas-sidebar.active,.off-canvas .off-canvas-sidebar:target{transform:translateX(0)}.off-canvas .off-canvas-sidebar.active~.off-canvas-overlay,.off-canvas .off-canvas-sidebar:target~.off-canvas-overlay{display:block;z-index:100}@media (min-width:960px){.off-canvas.off-canvas-sidebar-show .off-canvas-toggle{display:none}.off-canvas.off-canvas-sidebar-show .off-canvas-sidebar{flex:0 0 auto;position:relative;transform:none}.off-canvas.off-canvas-sidebar-show .off-canvas-overlay{display:none!important}}.parallax{display:block;height:auto;position:relative;width:auto}.parallax .parallax-content{box-shadow:0 1rem 2.1rem rgba(48,55,66,.3);height:auto;transform:perspective(1000px);transform-style:preserve-3d;transition:all .4s ease;width:100%}.parallax .parallax-content:before{content:"";display:block;height:100%;left:0;position:absolute;top:0;width:100%}.parallax .parallax-front{align-items:center;color:#fff;display:flex;-ms-flex-align:center;-ms-flex-pack:center;height:100%;justify-content:center;left:0;position:absolute;text-align:center;text-shadow:0 0 20px rgba(48,55,66,.75);top:0;transform:translateZ(50px) scale(.95);transition:transform .4s;width:100%;z-index:1}.parallax .parallax-top-left{height:50%;left:0;outline:0;position:absolute;top:0;width:50%;z-index:100}.parallax .parallax-top-left:focus~.parallax-content,.parallax .parallax-top-left:hover~.parallax-content{transform:perspective(1000px) rotateX(3deg) rotateY(-3deg)}.parallax .parallax-top-left:focus~.parallax-content:before,.parallax .parallax-top-left:hover~.parallax-content:before{background:linear-gradient(135deg,hsla(0,0%,100%,.35),transparent 50%)}.parallax .parallax-top-left:focus~.parallax-content .parallax-front,.parallax .parallax-top-left:hover~.parallax-content .parallax-front{transform:translate3d(4.5px,4.5px,50px) scale(.95)}.parallax .parallax-top-right{height:50%;outline:0;position:absolute;right:0;top:0;width:50%;z-index:100}.parallax .parallax-top-right:focus~.parallax-content,.parallax .parallax-top-right:hover~.parallax-content{transform:perspective(1000px) rotateX(3deg) rotateY(3deg)}.parallax .parallax-top-right:focus~.parallax-content:before,.parallax .parallax-top-right:hover~.parallax-content:before{background:linear-gradient(-135deg,hsla(0,0%,100%,.35),transparent 50%)}.parallax .parallax-top-right:focus~.parallax-content .parallax-front,.parallax .parallax-top-right:hover~.parallax-content .parallax-front{transform:translate3d(-4.5px,4.5px,50px) scale(.95)}.parallax .parallax-bottom-left{bottom:0;height:50%;left:0;outline:0;position:absolute;width:50%;z-index:100}.parallax .parallax-bottom-left:focus~.parallax-content,.parallax .parallax-bottom-left:hover~.parallax-content{transform:perspective(1000px) rotateX(-3deg) rotateY(-3deg)}.parallax .parallax-bottom-left:focus~.parallax-content:before,.parallax .parallax-bottom-left:hover~.parallax-content:before{background:linear-gradient(45deg,hsla(0,0%,100%,.35),transparent 50%)}.parallax .parallax-bottom-left:focus~.parallax-content .parallax-front,.parallax .parallax-bottom-left:hover~.parallax-content .parallax-front{transform:translate3d(4.5px,-4.5px,50px) scale(.95)}.parallax .parallax-bottom-right{bottom:0;height:50%;outline:0;position:absolute;right:0;width:50%;z-index:100}.parallax .parallax-bottom-right:focus~.parallax-content,.parallax .parallax-bottom-right:hover~.parallax-content{transform:perspective(1000px) rotateX(-3deg) rotateY(3deg)}.parallax .parallax-bottom-right:focus~.parallax-content:before,.parallax .parallax-bottom-right:hover~.parallax-content:before{background:linear-gradient(-45deg,hsla(0,0%,100%,.35),transparent 50%)}.parallax .parallax-bottom-right:focus~.parallax-content .parallax-front,.parallax .parallax-bottom-right:hover~.parallax-content .parallax-front{transform:translate3d(-4.5px,-4.5px,50px) scale(.95)}.progress{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#eef0f3;border:0;border-radius:.1rem;color:#303742;height:.2rem;position:relative;width:100%}.progress::-webkit-progress-bar{background:0 0;border-radius:.1rem}.progress::-webkit-progress-value{background:#303742;border-radius:.1rem}.progress::-moz-progress-bar{background:#303742;border-radius:.1rem}.progress:indeterminate{animation:progress-indeterminate 1.5s linear infinite;background:#eef0f3 linear-gradient(90deg,#303742 30%,#eef0f3 0) 0 0/150% 150% no-repeat}.progress:indeterminate::-moz-progress-bar{background:0 0}@keyframes progress-indeterminate{0%{background-position:200% 0}to{background-position:-200% 0}}.slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:0 0;display:block;height:1.2rem;width:100%}.slider:focus{box-shadow:0 0 0 .1rem rgba(87,85,217,.2);outline:0}.slider.tooltip:not([data-tooltip]):after{content:attr(value)}.slider::-webkit-slider-thumb{-webkit-appearance:none;background:#303742;border:0;border-radius:50%;height:.6rem;margin-top:-.25rem;-webkit-transition:transform .2s;transition:transform .2s;width:.6rem}.slider::-moz-range-thumb{background:#303742;border:0;border-radius:50%;height:.6rem;-moz-transition:transform .2s;transition:transform .2s;width:.6rem}.slider::-ms-thumb{background:#303742;border:0;border-radius:50%;height:.6rem;-ms-transition:transform .2s;transition:transform .2s;width:.6rem}.slider:active::-webkit-slider-thumb{transform:scale(1.25)}.slider:active::-moz-range-thumb{transform:scale(1.25)}.slider:active::-ms-thumb{transform:scale(1.25)}.slider.disabled::-webkit-slider-thumb,.slider:disabled::-webkit-slider-thumb{background:#f7f8f9;transform:scale(1)}.slider.disabled::-moz-range-thumb,.slider:disabled::-moz-range-thumb{background:#f7f8f9;transform:scale(1)}.slider.disabled::-ms-thumb,.slider:disabled::-ms-thumb{background:#f7f8f9;transform:scale(1)}.slider::-webkit-slider-runnable-track{background:#eef0f3;border-radius:.1rem;height:.1rem;width:100%}.slider::-moz-range-track{background:#eef0f3;border-radius:.1rem;height:.1rem;width:100%}.slider::-ms-track{background:#eef0f3;border-radius:.1rem;height:.1rem;width:100%}.slider::-ms-fill-lower{background:#303742}.timeline .timeline-item{display:flex;margin-bottom:1.2rem;position:relative}.timeline .timeline-item:before{background:#e4e4e4;content:"";height:100%;left:11px;position:absolute;top:1.2rem;width:2px}.timeline .timeline-item .timeline-left{flex:0 0 auto}.timeline .timeline-item .timeline-content{flex:1 1 auto;padding:2px 0 2px .8rem}.timeline .timeline-item .timeline-icon{align-items:center;border-radius:50%;color:#fff;display:flex;-ms-flex-align:center;-ms-flex-pack:center;height:1.2rem;justify-content:center;text-align:center;width:1.2rem}.timeline .timeline-item .timeline-icon:before{border:.1rem solid #303742;border-radius:50%;content:"";display:block;height:.4rem;left:.4rem;position:absolute;top:.4rem;width:.4rem}.timeline .timeline-item .timeline-icon.icon-lg{background:#303742;line-height:1.2rem}.timeline .timeline-item .timeline-icon.icon-lg:before{content:none}.viewer-360{align-items:center;display:flex;-ms-flex-align:center;flex-direction:column}.viewer-360 .viewer-slider[max="36"][value="1"]+.viewer-image{background-position-y:0}.viewer-360 .viewer-slider[max="36"][value="2"]+.viewer-image{background-position-y:2.8571428571%}.viewer-360 .viewer-slider[max="36"][value="3"]+.viewer-image{background-position-y:5.7142857143%}.viewer-360 .viewer-slider[max="36"][value="4"]+.viewer-image{background-position-y:8.5714285714%}.viewer-360 .viewer-slider[max="36"][value="5"]+.viewer-image{background-position-y:11.4285714286%}.viewer-360 .viewer-slider[max="36"][value="6"]+.viewer-image{background-position-y:14.2857142857%}.viewer-360 .viewer-slider[max="36"][value="7"]+.viewer-image{background-position-y:17.1428571429%}.viewer-360 .viewer-slider[max="36"][value="8"]+.viewer-image{background-position-y:20%}.viewer-360 .viewer-slider[max="36"][value="9"]+.viewer-image{background-position-y:22.8571428571%}.viewer-360 .viewer-slider[max="36"][value="10"]+.viewer-image{background-position-y:25.7142857143%}.viewer-360 .viewer-slider[max="36"][value="11"]+.viewer-image{background-position-y:28.5714285714%}.viewer-360 .viewer-slider[max="36"][value="12"]+.viewer-image{background-position-y:31.4285714286%}.viewer-360 .viewer-slider[max="36"][value="13"]+.viewer-image{background-position-y:34.2857142857%}.viewer-360 .viewer-slider[max="36"][value="14"]+.viewer-image{background-position-y:37.1428571429%}.viewer-360 .viewer-slider[max="36"][value="15"]+.viewer-image{background-position-y:40%}.viewer-360 .viewer-slider[max="36"][value="16"]+.viewer-image{background-position-y:42.8571428571%}.viewer-360 .viewer-slider[max="36"][value="17"]+.viewer-image{background-position-y:45.7142857143%}.viewer-360 .viewer-slider[max="36"][value="18"]+.viewer-image{background-position-y:48.5714285714%}.viewer-360 .viewer-slider[max="36"][value="19"]+.viewer-image{background-position-y:51.4285714286%}.viewer-360 .viewer-slider[max="36"][value="20"]+.viewer-image{background-position-y:54.2857142857%}.viewer-360 .viewer-slider[max="36"][value="21"]+.viewer-image{background-position-y:57.1428571429%}.viewer-360 .viewer-slider[max="36"][value="22"]+.viewer-image{background-position-y:60%}.viewer-360 .viewer-slider[max="36"][value="23"]+.viewer-image{background-position-y:62.8571428571%}.viewer-360 .viewer-slider[max="36"][value="24"]+.viewer-image{background-position-y:65.7142857143%}.viewer-360 .viewer-slider[max="36"][value="25"]+.viewer-image{background-position-y:68.5714285714%}.viewer-360 .viewer-slider[max="36"][value="26"]+.viewer-image{background-position-y:71.4285714286%}.viewer-360 .viewer-slider[max="36"][value="27"]+.viewer-image{background-position-y:74.2857142857%}.viewer-360 .viewer-slider[max="36"][value="28"]+.viewer-image{background-position-y:77.1428571429%}.viewer-360 .viewer-slider[max="36"][value="29"]+.viewer-image{background-position-y:80%}.viewer-360 .viewer-slider[max="36"][value="30"]+.viewer-image{background-position-y:82.8571428571%}.viewer-360 .viewer-slider[max="36"][value="31"]+.viewer-image{background-position-y:85.7142857143%}.viewer-360 .viewer-slider[max="36"][value="32"]+.viewer-image{background-position-y:88.5714285714%}.viewer-360 .viewer-slider[max="36"][value="33"]+.viewer-image{background-position-y:91.4285714286%}.viewer-360 .viewer-slider[max="36"][value="34"]+.viewer-image{background-position-y:94.2857142857%}.viewer-360 .viewer-slider[max="36"][value="35"]+.viewer-image{background-position-y:97.1428571429%}.viewer-360 .viewer-slider[max="36"][value="36"]+.viewer-image{background-position-y:100%}.viewer-360 .viewer-slider{cursor:ew-resize;-ms-flex-order:2;margin:1rem;order:2;width:60%}.viewer-360 .viewer-image{background-position-y:0;background-repeat:no-repeat;background-size:100%;-ms-flex-order:1;max-width:100%;order:1} + +/*! Spectre.css Icons v0.5.9 | MIT License | github.com/picturepan2/spectre */.icon{box-sizing:border-box;display:inline-block;font-size:inherit;font-style:normal;height:1em;position:relative;text-indent:-9999px;vertical-align:middle;width:1em}.icon:after,.icon:before{content:"";display:block;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.icon.icon-2x{font-size:1.6rem}.icon.icon-3x{font-size:2.4rem}.icon.icon-4x{font-size:3.2rem}.accordion .icon,.btn .icon,.menu .icon,.toast .icon{vertical-align:-10%}.btn-lg .icon{vertical-align:-15%}.icon-arrow-down:before,.icon-arrow-left:before,.icon-arrow-right:before,.icon-arrow-up:before,.icon-back:before,.icon-downward:before,.icon-forward:before,.icon-upward:before{border:.1rem solid currentColor;border-bottom:0;border-right:0;height:.65em;width:.65em}.icon-arrow-down:before{transform:translate(-50%,-75%) rotate(225deg)}.icon-arrow-left:before{transform:translate(-25%,-50%) rotate(-45deg)}.icon-arrow-right:before{transform:translate(-75%,-50%) rotate(135deg)}.icon-arrow-up:before{transform:translate(-50%,-25%) rotate(45deg)}.icon-back:after,.icon-forward:after{background:currentColor;height:.1rem;width:.8em}.icon-downward:after,.icon-upward:after{background:currentColor;height:.8em;width:.1rem}.icon-back:after{left:55%}.icon-back:before{transform:translate(-50%,-50%) rotate(-45deg)}.icon-downward:after{top:45%}.icon-downward:before{transform:translate(-50%,-50%) rotate(-135deg)}.icon-forward:after{left:45%}.icon-forward:before{transform:translate(-50%,-50%) rotate(135deg)}.icon-upward:after{top:55%}.icon-upward:before{transform:translate(-50%,-50%) rotate(45deg)}.icon-caret:before{border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid currentColor;height:0;transform:translate(-50%,-25%);width:0}.icon-menu:before{background:currentColor;box-shadow:0 -.35em,0 .35em;height:.1rem;width:100%}.icon-apps:before{background:currentColor;box-shadow:-.35em -.35em,-.35em 0,-.35em .35em,0 -.35em,0 .35em,.35em -.35em,.35em 0,.35em .35em;height:3px;width:3px}.icon-resize-horiz:after,.icon-resize-horiz:before,.icon-resize-vert:after,.icon-resize-vert:before{border:.1rem solid currentColor;border-bottom:0;border-right:0;height:.45em;width:.45em}.icon-resize-horiz:before,.icon-resize-vert:before{transform:translate(-50%,-90%) rotate(45deg)}.icon-resize-horiz:after,.icon-resize-vert:after{transform:translate(-50%,-10%) rotate(225deg)}.icon-resize-horiz:before{transform:translate(-90%,-50%) rotate(-45deg)}.icon-resize-horiz:after{transform:translate(-10%,-50%) rotate(135deg)}.icon-more-horiz:before,.icon-more-vert:before{background:currentColor;border-radius:50%;box-shadow:-.4em 0,.4em 0;height:3px;width:3px}.icon-more-vert:before{box-shadow:0 -.4em,0 .4em}.icon-cross:before,.icon-minus:before,.icon-plus:before{background:currentColor;height:.1rem;width:100%}.icon-cross:after,.icon-plus:after{background:currentColor;height:100%;width:.1rem}.icon-cross:before{width:100%}.icon-cross:after{height:100%}.icon-cross:after,.icon-cross:before{transform:translate(-50%,-50%) rotate(45deg)}.icon-check:before{border:.1rem solid currentColor;border-right:0;border-top:0;height:.5em;transform:translate(-50%,-75%) rotate(-45deg);width:.9em}.icon-stop{border:.1rem solid currentColor;border-radius:50%}.icon-stop:before{background:currentColor;height:.1rem;transform:translate(-50%,-50%) rotate(45deg);width:1em}.icon-shutdown{border:.1rem solid currentColor;border-radius:50%;border-top-color:transparent}.icon-shutdown:before{background:currentColor;content:"";height:.5em;top:.1em;width:.1rem}.icon-refresh:before{border:.1rem solid currentColor;border-radius:50%;border-right-color:transparent;height:1em;width:1em}.icon-refresh:after{border:.2em solid currentColor;border-left-color:transparent;border-top-color:transparent;height:0;left:80%;top:20%;width:0}.icon-search:before{border:.1rem solid currentColor;border-radius:50%;height:.75em;left:5%;top:5%;transform:translate(0) rotate(45deg);width:.75em}.icon-search:after{background:currentColor;height:.1rem;left:80%;top:80%;transform:translate(-50%,-50%) rotate(45deg);width:.4em}.icon-edit:before{border:.1rem solid currentColor;height:.4em;transform:translate(-40%,-60%) rotate(-45deg);width:.85em}.icon-edit:after{border:.15em solid currentColor;border-right-color:transparent;border-top-color:transparent;height:0;left:5%;top:95%;transform:translateY(-100%);width:0}.icon-delete:before{border:.1rem solid currentColor;border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top:0;height:.75em;top:60%;width:.75em}.icon-delete:after{background:currentColor;box-shadow:-.25em .2em,.25em .2em;height:.1rem;top:.05rem;width:.5em}.icon-share{border:.1rem solid currentColor;border-radius:.1rem;border-right:0;border-top:0}.icon-share:before{border:.1rem solid currentColor;border-left:0;border-top:0;height:.4em;left:100%;top:.25em;transform:translate(-125%,-50%) rotate(-45deg);width:.4em}.icon-share:after{border:.1rem solid currentColor;border-bottom:0;border-radius:75% 0;border-right:0;height:.5em;width:.6em}.icon-flag:before{background:currentColor;height:1em;left:15%;width:.1rem}.icon-flag:after{border:.1rem solid currentColor;border-bottom-right-radius:.1rem;border-left:0;border-top-right-radius:.1rem;height:.65em;left:60%;top:35%;width:.8em}.icon-bookmark:before{border:.1rem solid currentColor;border-bottom:0;border-top-left-radius:.1rem;border-top-right-radius:.1rem;height:.9em;width:.8em}.icon-bookmark:after{border:.1rem solid currentColor;border-bottom:0;border-left:0;border-radius:.1rem;height:.5em;transform:translate(-50%,35%) rotate(-45deg) skew(15deg,15deg);width:.5em}.icon-download,.icon-upload{border-bottom:.1rem solid currentColor}.icon-download:before,.icon-upload:before{border:.1rem solid currentColor;border-bottom:0;border-right:0;height:.5em;transform:translate(-50%,-60%) rotate(-135deg);width:.5em}.icon-download:after,.icon-upload:after{background:currentColor;height:.6em;top:40%;width:.1rem}.icon-upload:before{transform:translate(-50%,-60%) rotate(45deg)}.icon-upload:after{top:50%}.icon-copy:before{border:.1rem solid currentColor;border-bottom:0;border-radius:.1rem;border-right:0;height:.8em;left:40%;top:35%;width:.8em}.icon-copy:after{border:.1rem solid currentColor;border-radius:.1rem;height:.8em;left:60%;top:60%;width:.8em}.icon-time{border:.1rem solid currentColor;border-radius:50%}.icon-time:before{height:.4em;transform:translate(-50%,-75%)}.icon-time:after,.icon-time:before{background:currentColor;width:.1rem}.icon-time:after{height:.3em;transform:translate(-50%,-75%) rotate(90deg);transform-origin:50% 90%}.icon-mail:before{border:.1rem solid currentColor;border-radius:.1rem;height:.8em;width:1em}.icon-mail:after{border:.1rem solid currentColor;border-right:0;border-top:0;height:.5em;transform:translate(-50%,-90%) rotate(-45deg) skew(10deg,10deg);width:.5em}.icon-people:before{border:.1rem solid currentColor;border-radius:50%;height:.45em;top:25%;width:.45em}.icon-people:after{border:.1rem solid currentColor;border-radius:50% 50% 0 0;height:.4em;top:75%;width:.9em}.icon-message{border:.1rem solid currentColor;border-bottom:0;border-radius:.1rem;border-right:0}.icon-message:before{border:.1rem solid currentColor;border-bottom-right-radius:.1rem;border-left:0;border-top:0;height:.8em;left:65%;top:40%;width:.7em}.icon-message:after{background:currentColor;border-radius:.1rem;height:.3em;left:10%;top:100%;transform:translateY(-90%) rotate(45deg);width:.1rem}.icon-photo{border:.1rem solid currentColor;border-radius:.1rem}.icon-photo:before{border:.1rem solid currentColor;border-radius:50%;height:.25em;left:35%;top:35%;width:.25em}.icon-photo:after{border:.1rem solid currentColor;border-bottom:0;border-left:0;height:.5em;left:60%;transform:translate(-50%,25%) rotate(-45deg);width:.5em}.icon-link:after,.icon-link:before{border:.1rem solid currentColor;border-radius:5em 0 0 5em;border-right:0;height:.5em;width:.75em}.icon-link:before{transform:translate(-70%,-45%) rotate(-45deg)}.icon-link:after{transform:translate(-30%,-55%) rotate(135deg)}.icon-location:before{border:.1rem solid currentColor;border-radius:50% 50% 50% 0;height:.8em;transform:translate(-50%,-60%) rotate(-45deg);width:.8em}.icon-location:after{height:.2em;transform:translate(-50%,-80%);width:.2em}.icon-emoji,.icon-location:after{border:.1rem solid currentColor;border-radius:50%}.icon-emoji:before{border-radius:50%;box-shadow:-.17em -.1em,.17em -.1em;height:.15em;width:.15em}.icon-emoji:after{border:.1rem solid currentColor;border-bottom-color:transparent;border-radius:50%;border-right-color:transparent;height:.5em;transform:translate(-50%,-40%) rotate(-135deg);width:.5em}.off-canvas .off-canvas-toggle{font-size:1rem;left:1.5rem;position:fixed;top:1rem}.off-canvas .off-canvas-sidebar{width:12rem}.off-canvas .off-canvas-content{padding:0}.backend-container{min-height:100vh}.backend-navbar{height:3.8rem;position:fixed;right:0;top:0;z-index:100}.backend-navbar .btns{position:absolute;right:1.5rem;top:1rem;width:14rem}.backend-navbar .algolia-autocomplete{flex:1 1 auto}.backend-sidebar .backend-nav{bottom:1.5rem;-webkit-overflow-scrolling:touch;overflow-y:auto;padding:.5rem 1.5rem;position:fixed;top:3.5rem;width:12rem}.backend-sidebar .accordion{margin-bottom:.75rem}.backend-sidebar .accordion input~.accordion-header{color:#d9d9d9;font-size:.65rem;font-weight:600;text-transform:uppercase}.backend-sidebar .accordion input:checked~.accordion-header{color:#d9d9d9}.backend-sidebar .accordion .menu .menu-item{font-size:.7rem;padding-left:1rem;cursor:pointer}.backend-sidebar .accordion .menu .menu-item>span{background:0 0;color:#fafafa;display:inline-block}.backend-content{flex:1 1 auto;padding:0 4rem;width:calc(100vw - 12rem);margin-bottom:10vh}.backend-content>.container{margin-left:0;max-width:800px;padding-bottom:1.5rem}.backend-content .anchor{color:#6362dc;display:none;margin-left:.2rem;padding:0 .2rem}.backend-content .anchor:focus,.backend-content .anchor:hover{display:inline;text-decoration:none}.backend-content .s-subtitle,.backend-content .s-title{line-height:1.8rem;margin-bottom:0;padding-bottom:1rem;padding-top:1rem;position:static}@supports (position:sticky){.backend-content .s-subtitle,.backend-content .s-title{position:sticky;top:0;z-index:99}.backend-content .s-subtitle:before,.backend-content .s-title:before{background:#fff;bottom:0;content:"";display:block;left:-10px;position:absolute;right:-10px;top:-5px;z-index:-1}}.backend-content .s-subtitle:hover .anchor,.backend-content .s-title:hover .anchor{display:inline}.backend-content .s-subtitle+.backend-note,.backend-content .s-title+.backend-note{margin-top:.4rem}.backend-content .backend-demo{padding-bottom:1rem;padding-top:1rem}.backend-content .backend-demo .card{border:0;box-shadow:0 .25rem 1rem rgba(48,55,66,.15);height:100%}.backend-content .column{padding:.4rem}.backend-content .backend-block{border-radius:.1rem;padding:.4rem}.backend-content .backend-block.bg-gray{background:#eef0f3}.backend-content .backend-shape{height:4.8rem;line-height:1.2rem;padding:1.8rem 0;width:4.8rem}.backend-content .backend-dot{border-radius:50%;display:inline-block;height:.5rem;padding:0;width:.5rem}.backend-content .backend-table td,.backend-content .backend-table th{padding:.75rem .25rem}.backend-content .backend-color{border-radius:.1rem;margin:.25rem 0;padding:5rem .5rem .5rem}.backend-content .backend-color .color-subtitle{font-size:.7rem;opacity:.75}.backend-content .code .hljs-tag{color:#505c6e}.backend-content .code .hljs-comment{color:#bcc3ce}.backend-content .code .hljs-class,.backend-content .code .hljs-number,.backend-content .code .hljs-string,.backend-content .code .hljs-title{color:#5755d9}.backend-content .code .hljs-attribute,.backend-content .code .hljs-built_in,.backend-content .code .hljs-keyword,.backend-content .code .hljs-name,.backend-content .code .hljs-variable{color:#d73e48}.backend-content .code .hljs-hexcolor,.backend-content .code .hljs-value{color:#505c6e}.backend-content .c-select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.backend-content .panel{height:75vh}.backend-content .panel .tile{margin:.75rem 0}.backend-content .parallax{margin:2rem auto}.backend-content .form-autocomplete .menu{position:static}.backend-content .example-tile-icon{align-content:space-around;align-items:center;background:#5755d9;border-radius:.1rem;color:#fff;display:flex;-ms-flex-align:center;-ms-flex-line-pack:distribute;font-size:1.2rem;height:2rem;width:2rem}.backend-content .example-tile-icon .icon{margin:auto}.backend-content .comparison-slider{height:auto;padding-bottom:56.2222%}.backend-content .comparison-slider .filter-grayscale{filter:grayscale(75%)}.backend-content .off-canvas{position:relative}.backend-content .off-canvas .off-canvas-toggle{left:.4rem;position:absolute;top:.4rem;z-index:1}.backend-brand{color:#ccc;height:2rem;left:1.5rem;position:fixed;top:.85rem;width:72%;position:sticky}.backend-brand .backend-logo{align-items:center;border-radius:.1rem;display:inline-flex;-ms-flex-align:center;font-size:.7rem;height:2rem;padding:.2rem;width:auto}.backend-brand .backend-logo:focus,.backend-brand .backend-logo:hover{text-decoration:none}.backend-brand .backend-logo img{display:inline-block;height:auto;width:1.6rem}.backend-brand .backend-logo h2{display:inline-block;font-size:.8rem;font-weight:700;line-height:1.5rem;margin-bottom:0;margin-left:.5rem;margin-right:.3rem}.backend-footer{color:#bcc3ce;padding:.5rem}.backend-footer a{color:#66758c}@media (max-width:960px){.off-canvas .off-canvas-toggle{z-index:300}.off-canvas .off-canvas-content{width:100%}.backend-sidebar .backend-brand{margin:.85rem 1.5rem;padding:0;position:static}.backend-sidebar .backend-nav{margin-top:1rem;position:static}.backend-sidebar .menu .menu-item>a{padding:.3rem .4rem}.backend-navbar{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);background:rgba(247,248,249,.65);left:0}.backend-content{min-width:auto;padding:0 1.5rem;width:100%}.backend-content .s-subtitle,.backend-content .s-title{padding-top:5rem;position:static}.backend-content .s-subtitle:before,.backend-content .s-title:before{content:none}}@media (max-width:600px){.off-canvas .off-canvas-toggle{left:.5rem}.backend-navbar .btns{right:.9rem}.backend-sidebar .backend-brand{margin:.85rem 1rem}.backend-sidebar .backend-nav{padding:.5rem 1rem}.backend-content{padding:0 .5rem}.backend-content .backend-block{padding:.4rem .1rem}}@font-face{font-family:Lobster;font-weight:400;src:url(../fonts/Exo.73922868.ttf) format("truetype")}@font-face{font-family:Roboto-Bold;src:url(../fonts/Roboto-Bold.2e84cc2a.eot);src:url(../fonts/Roboto-Bold.2e84cc2a.eot?#iefix) format("embedded-opentype"),url(../fonts/Roboto-Bold.89b89f76.otf) format("opentype"),url(../img/Roboto-Bold.e769d982.svg) format("svg"),url(../fonts/Roboto-Bold.b19d4d24.ttf) format("truetype"),url(../fonts/Roboto-Bold.6552efba.woff) format("woff"),url(../fonts/Roboto-Bold.4f2b2ed2.woff2) format("woff2");font-weight:400;font-style:normal}.off-canvas .off-canvas-sidebar{background:#3a3a3a}h1,h2,h3{font-family:Lobster;color:#484848}h4,h5{font-family:Roboto-Bold;color:#484848}.btn{border-radius:5px}.btn:focus,.btn:hover{background:#494949;border-color:#494949;text-decoration:none;color:#dbdbdb}.btn.active,.btn:active{background:#3a3a3a;border-color:#3a3a3a;color:#fff;text-decoration:none}.px150{width:150px}.width-full{width:100%}.tab-block{margin-bottom:35px}.toast{margin-top:5px;margin-bottom:5px}.frame-export{display:none}.form-upload{position:relative;display:block}.form-upload .upload-field{position:absolute;cursor:pointer;top:0;left:0;opacity:0;z-index:1000;width:100%;height:100%}.tlp-white{font-size:.6rem;height:1.4rem;padding:.05rem .3rem;background-color:#fff;line-height:1.2rem;text-transform:uppercase;font-weight:700;border:2px solid #efefef;vertical-align:middle;border-radius:.1rem}.tlp-green{background-color:rgba(25,154,9,.8117647058823529);border:2px solid rgba(15,134,0,.8117647058823529);border-radius:.1rem}.tlp-amber,.tlp-green{font-size:.6rem;height:1.4rem;padding:.05rem .3rem;line-height:1.2rem;text-transform:uppercase;font-weight:700;vertical-align:middle;color:#fff}.tlp-amber{background-color:rgba(255,192,0,.8117647058823529);border:2px solid rgba(255,192,0,.8117647058823529);border-radius:.1rem}.tlp-red{font-size:.6rem;height:1.4rem;padding:.05rem .3rem;background-color:#f03;line-height:1.2rem;font-weight:700;border:2px solid #f03;vertical-align:middle;color:#fff;border-radius:.1rem}.title,.tlp-red{text-transform:uppercase}.title{font-family:Lobster;color:#fafafa;cursor:pointer;width:-moz-fit-content;width:fit-content;height:2rem;left:1.5rem;position:fixed;top:.85rem;font-size:1.3rem;letter-spacing:.1rem}#network-thumbnail{width:100%;margin-top:10px}.interfaces-container{margin-top:20px;margin-bottom:40px}.interface-label{text-transform:uppercase;font-size:12px;font-weight:700;margin-bottom:10px;text-align:center;display:block}.form-control:focus,.form-input:focus{border-color:inherit;box-shadow:none}.tab .tab-item a:focus{box-shadow:none}.shortcuts{position:fixed;bottom:0;left:0;z-index:20000;padding:20px;opacity:.2}.shortcut{width:40px;height:40px;margin-left:10px;cursor:pointer}.whitespace{height:100px;display:block}.alert-toaster-visible{position:fixed;right:15px;top:15px;padding:10px;background-color:#484848;border-radius:5px;color:#ccc;font-size:12px;visibility:visible;opacity:1;transition:opacity .5s linear}.alert-toaster-hidden{visibility:hidden;opacity:0;transition:visibility 0s .5s,opacity .5s linear}.comment-block{padding:10px;font-size:12px;background-color:#fafafa}.capi{text-transform:capitalize}.upper{text-transform:uppercase}.misp-form{display:grid;gap:.4em;overflow:auto;grid-template-columns:10em .5em 1fr;width:100%;border-radius:.1rem;margin-bottom:.8rem}.misp-label{grid-column:1;text-align:left;padding-top:.3em}.instance-offline{background-color:#e85600}.instance-offline,.instance-online{color:#fff;font-size:11px;border-radius:3px;padding:3px 6px 3px 6px;cursor:help}.instance-online{background-color:#64c800}.misp-name{font-size:1rem;font-family:Roboto-Bold;color:#484848}.misp-name:disabled{border-style:none;color:inherit;background-color:inherit;padding:unset}.misp-input{grid-column:3;align-self:center}.misp-input:disabled{border-style:none;color:inherit;background-color:inherit;padding:unset}.misp-button{grid-area:submit}.loading{margin-bottom:12px;display:block}.loading:after{animation:loading .5s linear infinite;background:0 0;border:.1rem solid #66758c;border-radius:50%;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:.8rem;left:50%;margin-left:-.4rem;margin-top:-.4rem;opacity:1;padding:0;position:absolute;top:50%;width:.8rem;z-index:1}.loading.loading-lg:after{height:1.6rem;margin-left:-.8rem;margin-top:-.8rem;width:1.6rem}.tooltip:after{background:rgba(48,55,66,.95);border-radius:3px;bottom:100%;color:#fff;content:attr(data-tooltip);display:block;font-size:11px;left:50%;max-width:320px;opacity:0;overflow:hidden;padding:3px 6px 3px 6px;pointer-events:none;position:absolute;text-overflow:ellipsis;transform:translate(-50%,.4rem);transition:opacity .2s,transform .2s;white-space:pre;z-index:300}.btn.btn-primary{background:#3a3a3a;border-color:#3a3a3a}.read-only{background-color:#f4f4f4;color:#aeadad}#update-banner{padding:5px 20px;background-color:#d1ff51;cursor:pointer}.version{right:0;text-align:right;background-color:#fff;border-radius:5px;font-size:9px;padding:1px 3px;color:#000;position:absolute}.fade-enter-active,.fade-leave-active{transition-duration:.3s;transition-property:opacity;transition-timing-function:ease}.fade-enter,.fade-leave-active{opacity:0} \ No newline at end of file diff --git a/app/backend/dist/favicon.ico b/app/backend/dist/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/app/backend/dist/favicon.ico differ diff --git a/app/backend/dist/fonts/Exo.73922868.ttf b/app/backend/dist/fonts/Exo.73922868.ttf new file mode 100644 index 0000000..cd9e54c Binary files /dev/null and b/app/backend/dist/fonts/Exo.73922868.ttf differ diff --git a/app/backend/dist/fonts/Roboto-Bold.2e84cc2a.eot b/app/backend/dist/fonts/Roboto-Bold.2e84cc2a.eot new file mode 100644 index 0000000..efb5930 Binary files /dev/null and b/app/backend/dist/fonts/Roboto-Bold.2e84cc2a.eot differ diff --git a/app/backend/dist/fonts/Roboto-Bold.4f2b2ed2.woff2 b/app/backend/dist/fonts/Roboto-Bold.4f2b2ed2.woff2 new file mode 100644 index 0000000..86e7d37 Binary files /dev/null and b/app/backend/dist/fonts/Roboto-Bold.4f2b2ed2.woff2 differ diff --git a/app/backend/dist/fonts/Roboto-Bold.6552efba.woff b/app/backend/dist/fonts/Roboto-Bold.6552efba.woff new file mode 100644 index 0000000..063f35d Binary files /dev/null and b/app/backend/dist/fonts/Roboto-Bold.6552efba.woff differ diff --git a/app/backend/dist/fonts/Roboto-Bold.89b89f76.otf b/app/backend/dist/fonts/Roboto-Bold.89b89f76.otf new file mode 100644 index 0000000..41277f8 Binary files /dev/null and b/app/backend/dist/fonts/Roboto-Bold.89b89f76.otf differ diff --git a/app/backend/dist/fonts/Roboto-Bold.b19d4d24.ttf b/app/backend/dist/fonts/Roboto-Bold.b19d4d24.ttf new file mode 100644 index 0000000..da495b7 Binary files /dev/null and b/app/backend/dist/fonts/Roboto-Bold.b19d4d24.ttf differ diff --git a/app/backend/dist/img/Roboto-Bold.e769d982.svg b/app/backend/dist/img/Roboto-Bold.e769d982.svg new file mode 100644 index 0000000..1b2b994 --- /dev/null +++ b/app/backend/dist/img/Roboto-Bold.e769d982.svg @@ -0,0 +1,11535 @@ + + + + +Created by FontForge 20170924 at Wed Mar 29 12:02:30 2017 + By www-data +Copyright 2011 Google Inc. All Rights Reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/backend/dist/img/network.33d31f9d.png b/app/backend/dist/img/network.33d31f9d.png new file mode 100644 index 0000000..8d12dd0 Binary files /dev/null and b/app/backend/dist/img/network.33d31f9d.png differ diff --git a/app/backend/dist/index.html b/app/backend/dist/index.html new file mode 100644 index 0000000..b47b884 --- /dev/null +++ b/app/backend/dist/index.html @@ -0,0 +1 @@ +@felixaime/spyguard-backend
\ No newline at end of file diff --git a/app/backend/dist/js/app.a3c6f292.js b/app/backend/dist/js/app.a3c6f292.js new file mode 100644 index 0000000..82af002 --- /dev/null +++ b/app/backend/dist/js/app.a3c6f292.js @@ -0,0 +1,2 @@ +(function(n){function e(e){for(var a,o,s=e[0],r=e[1],u=e[2],d=0,h=[];d{n.data.token&&(this.jwt=n.data.token)}).catch(n=>console.log(n))},get_version:function(){s.a.get("/api/update/get-version",{timeout:6e4,headers:{"X-Token":this.jwt}}).then(n=>{n.data.status&&(this.current_version=n.data.current_version)}).catch(n=>{console.log(n)})},check_update:function(){s.a.get("/api/update/check",{timeout:6e4,headers:{"X-Token":this.jwt}}).then(n=>{"A new version is available"==n.data.message&&(this.update_available=!0)}).catch(n=>{console.log(n)})}},created:function(){this.get_jwt().then(()=>{this.get_version(),this.check_update()}),setInterval(function(){let n="";this.letters.forEach(e=>{n+=e.charAt(this.generate_random(0,9))}),this.title=n,setTimeout(function(){this.title="SPYGUARD"}.bind(this),this.generate_random(30,100))}.bind(this),this.generate_random(500,1e4))}},u=r,d=(t("10f2"),t("2877")),l=Object(d["a"])(u,c,i,!1,null,null,null),h=l.exports,p=t("8c4f");a["a"].use(p["a"]);const f=[{path:"/",name:"default",component:()=>t.e("chunk-2d0cfa15").then(t.bind(null,"6511")),props:!0},{path:"/device/configuration",name:"device-configuration",component:()=>t.e("chunk-2d0c8321").then(t.bind(null,"549e")),props:!0},{path:"/engine/configuration",name:"engine-configuration",component:()=>t.e("chunk-2d22d432").then(t.bind(null,"f76a")),props:!0},{path:"/device/network",name:"device-network",component:()=>t.e("chunk-3c0d118e").then(t.bind(null,"7e11")),props:!0},{path:"/device/db",name:"db-manage",component:()=>t.e("chunk-2d0e4bf5").then(t.bind(null,"9217")),props:!0},{path:"/iocs/manage",name:"iocs-manage",component:()=>t.e("chunk-2d0c0c86").then(t.bind(null,"42f8")),props:!0},{path:"/instances/misp",name:"instance-misp",component:()=>t.e("chunk-2d0c9378").then(t.bind(null,"57cc")),props:!0},{path:"/instances/watchers",name:"instance-watchers",component:()=>t.e("chunk-2d20faf8").then(t.bind(null,"b54c")),props:!0},{path:"/iocs/search",name:"iocs-search",component:()=>t.e("chunk-2d0cc2b4").then(t.bind(null,"4d7e")),props:!0},{path:"/whitelist/manage",name:"whitelist-manage",component:()=>t.e("chunk-2d215cd3").then(t.bind(null,"c06f")),props:!0},{path:"/whitelist/search",name:"whitelist-search",component:()=>t.e("chunk-2d2245cf").then(t.bind(null,"e08f")),props:!0},{path:"/update",name:"update",component:()=>t.e("chunk-2d0a3726").then(t.bind(null,"01e4")),props:!0}],m=new p["a"]({mode:"history",base:"/",routes:f});var v=m;a["a"].config.productionTip=!0,a["a"].config.devtools=!0,new a["a"]({router:v,render:n=>n(h)}).$mount("#app")}}); +//# sourceMappingURL=app.a3c6f292.js.map \ No newline at end of file diff --git a/app/backend/dist/js/app.a3c6f292.js.map b/app/backend/dist/js/app.a3c6f292.js.map new file mode 100644 index 0000000..89970eb --- /dev/null +++ b/app/backend/dist/js/app.a3c6f292.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?4554","webpack:///./src/App.vue","webpack:///src/App.vue","webpack:///./src/App.vue?60d0","webpack:///./src/App.vue?315a","webpack:///./src/router/index.js","webpack:///./src/main.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","jsonpScriptSrc","p","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","render","_vm","this","_c","_self","staticClass","_m","attrs","on","$event","goto_frontend","_v","_s","title","current_version","_e","$router","update_available","staticRenderFns","components","jwt","letters","methods","generate_random","rand","then","catch","get_version","axios","headers","check_update","created","setInterval","res","component","Vue","use","VueRouter","routes","path","props","router","base","process","config","productionTip","devtools","h","App","$mount"],"mappings":"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","file":"js/app.a3c6f292.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-2d0a3726\":\"bebe5116\",\"chunk-2d0c0c86\":\"cf098d4b\",\"chunk-2d0c8321\":\"78ca1407\",\"chunk-2d0c9378\":\"fb16a6a2\",\"chunk-2d0cc2b4\":\"6cd43049\",\"chunk-2d0cfa15\":\"4b2166d6\",\"chunk-2d0e4bf5\":\"fac73388\",\"chunk-2d20faf8\":\"c983e105\",\"chunk-2d215cd3\":\"f0d8ba06\",\"chunk-2d2245cf\":\"ea4d33bd\",\"chunk-2d22d432\":\"91ebbe55\",\"chunk-3c0d118e\":\"e3f2944c\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&id=6572d034&prod&lang=css&\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"backend-container off-canvas off-canvas-sidebar-show\"},[_vm._m(0),_c('div',{staticClass:\"backend-sidebar off-canvas-sidebar\",attrs:{\"id\":\"sidebar\"}},[_c('div',{staticClass:\"backend-brand\"},[_c('h2',{staticClass:\"title\",on:{\"click\":function($event){return _vm.goto_frontend()}}},[_vm._v(_vm._s(_vm.title))]),(_vm.current_version)?_c('span',{staticClass:\"version\"},[_vm._v(_vm._s(_vm.current_version))]):_vm._e()]),_c('div',{staticClass:\"backend-nav\"},[_c('div',{staticClass:\"accordion-container\"},[_c('div',{staticClass:\"accordion\"},[_c('input',{attrs:{\"id\":\"accordion-configuration\",\"type\":\"checkbox\",\"name\":\"backend-accordion-checkbox\",\"hidden\":\"\"}}),_c('label',{staticClass:\"accordion-header c-hand\",attrs:{\"for\":\"accordion-configuration\"}},[_vm._v(\"Manage Device\")]),_c('div',{staticClass:\"accordion-body\"},[_c('ul',{staticClass:\"menu menu-nav\"},[_c('li',{staticClass:\"menu-item\"},[_c('span',{on:{\"click\":function($event){return _vm.$router.push('/device/configuration')}}},[_vm._v(\"Device config\")])]),_c('li',{staticClass:\"menu-item\"},[_c('span',{on:{\"click\":function($event){return _vm.$router.push('/engine/configuration')}}},[_vm._v(\"Analysis engine\")])]),_c('li',{staticClass:\"menu-item\"},[_c('span',{on:{\"click\":function($event){return _vm.$router.push('/device/network')}}},[_vm._v(\"Network config\")])]),_c('li',{staticClass:\"menu-item\"},[_c('span',{on:{\"click\":function($event){return _vm.$router.push('/device/db')}}},[_vm._v(\"Manage database\")])])])])]),_c('div',{staticClass:\"accordion\"},[_c('input',{attrs:{\"id\":\"accordion-iocs\",\"type\":\"checkbox\",\"name\":\"backend-accordion-checkbox\",\"hidden\":\"\"}}),_c('label',{staticClass:\"accordion-header c-hand\",attrs:{\"for\":\"accordion-iocs\"}},[_vm._v(\"Manage IOCs\")]),_c('div',{staticClass:\"accordion-body\"},[_c('ul',{staticClass:\"menu menu-nav\"},[_c('li',{staticClass:\"menu-item\"},[_c('span',{on:{\"click\":function($event){return _vm.$router.push('/iocs/manage')}}},[_vm._v(\"Manage IOCs\")])]),_c('li',{staticClass:\"menu-item\"},[_c('span',{on:{\"click\":function($event){return _vm.$router.push('/iocs/search')}}},[_vm._v(\"Search IOCs\")])])])])]),_c('div',{staticClass:\"accordion\"},[_c('input',{attrs:{\"id\":\"accordion-whitelist\",\"type\":\"checkbox\",\"name\":\"backend-accordion-checkbox\",\"hidden\":\"\"}}),_c('label',{staticClass:\"accordion-header c-hand\",attrs:{\"for\":\"accordion-whitelist\"}},[_vm._v(\"Manage Whitelist\")]),_c('div',{staticClass:\"accordion-body\"},[_c('ul',{staticClass:\"menu menu-nav\"},[_c('li',{staticClass:\"menu-item\"},[_c('span',{on:{\"click\":function($event){return _vm.$router.push('/whitelist/manage')}}},[_vm._v(\"Manage elements\")])]),_c('li',{staticClass:\"menu-item\"},[_c('span',{on:{\"click\":function($event){return _vm.$router.push('/whitelist/search')}}},[_vm._v(\"Search elements\")])])])])]),_c('div',{staticClass:\"accordion\"},[_c('input',{attrs:{\"id\":\"accordion-instances\",\"type\":\"checkbox\",\"name\":\"backend-accordion-checkbox\",\"hidden\":\"\"}}),_c('label',{staticClass:\"accordion-header c-hand\",attrs:{\"for\":\"accordion-instances\"}},[_vm._v(\"External sources\")]),_c('div',{staticClass:\"accordion-body\"},[_c('ul',{staticClass:\"menu menu-nav\"},[_c('li',{staticClass:\"menu-item\"},[_c('span',{on:{\"click\":function($event){return _vm.$router.push('/instances/watchers')}}},[_vm._v(\"Watchers Instances\")])]),_c('li',{staticClass:\"menu-item\"},[_c('span',{on:{\"click\":function($event){return _vm.$router.push('/instances/misp')}}},[_vm._v(\"MISP Instances\")])])])])])])])]),_c('a',{staticClass:\"off-canvas-overlay\",attrs:{\"href\":\"#close\"}}),_c('div',{staticClass:\"off-canvas-content\"},[(_vm.update_available)?_c('div',{attrs:{\"id\":\"update-banner\"},on:{\"click\":function($event){return _vm.$router.push('/update')}}},[_vm._v(\"A new version is available, click on the banner to install it.\")]):_vm._e(),_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[_c('router-view')],1)],1)])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"backend-navbar\"},[_c('a',{staticClass:\"off-canvas-toggle btn btn-link btn-action\",attrs:{\"href\":\"#sidebar\"}},[_c('i',{staticClass:\"icon icon-menu\"})])])\n}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=6572d034&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=6572d034&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\r\nimport VueRouter from 'vue-router'\r\n\r\nVue.use(VueRouter)\r\n\r\nconst routes = [\r\n {\r\n path: '/',\r\n name: 'default',\r\n component: () => import('../views/home.vue'),\r\n props: true\r\n },\r\n {\r\n path: '/device/configuration',\r\n name: 'device-configuration',\r\n component: () => import('../views/edit-configuration.vue'),\r\n props: true\r\n },\r\n {\r\n path: '/engine/configuration',\r\n name: 'engine-configuration',\r\n component: () => import('../views/analysis-engine.vue'),\r\n props: true\r\n },\r\n {\r\n path: '/device/network',\r\n name: 'device-network',\r\n component: () => import('../views/network-manage.vue'),\r\n props: true\r\n },\r\n {\r\n path: '/device/db',\r\n name: 'db-manage',\r\n component: () => import('../views/db-manage.vue'),\r\n props: true\r\n },\r\n {\r\n path: '/iocs/manage',\r\n name: 'iocs-manage',\r\n component: () => import('../views/iocs-manage.vue'),\r\n props: true\r\n },\r\n {\r\n path: '/instances/misp',\r\n name: 'instance-misp',\r\n component: () => import('../views/instance-misp.vue'),\r\n props: true\r\n },\r\n {\r\n path: '/instances/watchers',\r\n name: 'instance-watchers',\r\n component: () => import('../views/instance-watchers.vue'),\r\n props: true\r\n },\r\n {\r\n path: '/iocs/search',\r\n name: 'iocs-search',\r\n component: () => import('../views/iocs-search.vue'),\r\n props: true\r\n },\r\n {\r\n path: '/whitelist/manage',\r\n name: 'whitelist-manage',\r\n component: () => import('../views/whitelist-manage.vue'),\r\n props: true\r\n },\r\n {\r\n path: '/whitelist/search',\r\n name: 'whitelist-search',\r\n component: () => import('../views/whitelist-search.vue'),\r\n props: true\r\n },\r\n {\r\n path: '/update',\r\n name: 'update',\r\n component: () => import('../views/update.vue'),\r\n props: true\r\n }\r\n]\r\n\r\nconst router = new VueRouter({\r\n mode: 'history',\r\n base: process.env.BASE_URL,\r\n routes\r\n})\r\n\r\nexport default router\r\n","import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\nVue.config.productionTip = true\r\nVue.config.devtools = true\r\n\r\nnew Vue({\r\n router,\r\n render: h => h(App)\r\n}).$mount('#app')"],"sourceRoot":""} \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d0a3726.bebe5116.js b/app/backend/dist/js/chunk-2d0a3726.bebe5116.js new file mode 100644 index 0000000..249bb75 --- /dev/null +++ b/app/backend/dist/js/chunk-2d0a3726.bebe5116.js @@ -0,0 +1,2 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0a3726"],{"01e4":function(e,t,n){"use strict";n.r(t);var a=function(){var e=this,t=e._self._c;return t("div",{staticClass:"backend-content",attrs:{id:"content"}},[t("div",{staticClass:"column col-8 col-xs-12"},[t("br"),t("p",[t("strong",[e._v("A new SpyGuard version is available ("+e._s(e.next_version)+").")]),t("br"),e.update_launched?e._e():t("span",[e._v("Please click on the button below to update your instance.")]),e.update_launched&&!e.update_finished?t("span",[e._v("Updating SpyGuard, please wait. You'll be redirected once updated.")]):e._e(),e.update_launched&&e.update_finished?t("span",{staticClass:"color-green"},[e._v("✓ Update finished!")]):e._e()]),e.update_finished?e._e():t("button",{staticClass:"btn btn-primary",class:[e.update_launched?"loading":""],on:{click:function(t){return e.launch_update()}}},[e._v("Update Spyguard")])])])},s=[],i=n("bc3a"),o=n.n(i),c={name:"update",data(){return{translation:{},update_launched:null,check_interval:null,next_version:null,current_version:null,update_finished:!1,jwt:""}},methods:{check_version:function(){o.a.get("/api/update/get-version",{timeout:6e4,headers:{"X-Token":this.jwt}}).then(e=>{e.data.status&&e.data.current_version==this.next_version&&(window.current_version=e.data.current_version,this.update_finished=!0,clearInterval(this.check_interval),setTimeout((function(){window.location.href="/"}),3e3))}).catch(e=>{console.log(e)})},launch_update:function(){o.a.get("/api/update/process",{timeout:6e4,headers:{"X-Token":this.jwt}}).then(e=>{e.data.status&&"Update successfully launched"==e.data.message&&(this.update_launched=!0,this.check_interval=setInterval(function(){this.check_version()}.bind(this),3e3))}).catch(e=>{console.log(e)})},async get_jwt(){await o.a.get("/api/get-token",{timeout:1e4}).then(e=>{e.data.token&&(this.jwt=e.data.token)}).catch(e=>console.log(e))},get_versions:function(){o.a.get("/api/update/check",{timeout:6e4,headers:{"X-Token":this.jwt}}).then(e=>{e.data.status&&(this.current_version=e.data.current_version,this.next_version=e.data.next_version,this.current_version==this.next_version&&(window.location.href="/"))}).catch(e=>{console.log(e)})}},created:function(){this.get_jwt().then(()=>{this.get_versions()})}},u=c,r=n("2877"),d=Object(r["a"])(u,a,s,!1,null,null,null);t["default"]=d.exports}}]); +//# sourceMappingURL=chunk-2d0a3726.bebe5116.js.map \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d0a3726.bebe5116.js.map b/app/backend/dist/js/chunk-2d0a3726.bebe5116.js.map new file mode 100644 index 0000000..9ec80bb --- /dev/null +++ b/app/backend/dist/js/chunk-2d0a3726.bebe5116.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/views/update.vue","webpack:///src/views/update.vue","webpack:///./src/views/update.vue?500f","webpack:///./src/views/update.vue?4e38"],"names":["render","_vm","this","_c","_self","staticClass","attrs","_v","_s","next_version","update_launched","_e","update_finished","class","on","$event","launch_update","staticRenderFns","name","data","translation","check_interval","current_version","jwt","methods","check_version","axios","timeout","headers","then","window","clearInterval","setTimeout","catch","console","get_versions","created","component"],"mappings":"yHAAA,IAAIA,EAAS,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,kBAAkBC,MAAM,CAAC,GAAK,YAAY,CAACH,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,MAAMA,EAAG,IAAI,CAACA,EAAG,SAAS,CAACF,EAAIM,GAAG,wCAAwCN,EAAIO,GAAGP,EAAIQ,cAAc,QAAQN,EAAG,MAAQF,EAAIS,gBAAkGT,EAAIU,KAArFR,EAAG,OAAO,CAACF,EAAIM,GAAG,+DAAyEN,EAAIS,kBAAkBT,EAAIW,gBAAiBT,EAAG,OAAO,CAACF,EAAIM,GAAG,wEAAwEN,EAAIU,KAAMV,EAAIS,iBAAiBT,EAAIW,gBAAiBT,EAAG,OAAO,CAACE,YAAY,eAAe,CAACJ,EAAIM,GAAG,wBAAwBN,EAAIU,OAASV,EAAIW,gBAAmMX,EAAIU,KAAtLR,EAAG,SAAS,CAACE,YAAY,kBAAkBQ,MAAM,CAAEZ,EAAIS,gBAAkB,UAAY,IAAKI,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOd,EAAIe,mBAAmB,CAACf,EAAIM,GAAG,0BAEx1BU,EAAkB,G,qBCetB,GACAC,cACAC,OACA,OACAC,eACAV,qBACAW,oBACAZ,kBACAa,qBACAV,mBACAW,SAGAC,SACAC,yBACAC,mCAAAC,YAAAC,SAAA,sBACAC,SACA,eACA,4CACAC,8CACA,wBACAC,mCACAC,uBAAAF,2BAAA,QAIAG,UAAAC,kBAEAlB,yBACAU,+BAAAC,YAAAC,SAAA,sBACAC,SACA,eACA,iDACA,wBACA,oFAIAI,UAAAC,kBAEA,sBACA,0BAAAP,cACAE,SACA,eACA,yBAGAI,0BAEAE,wBACAT,6BAAAC,YAAAC,SAAA,sBACAC,SACA,gBACA,4CACA,sCACA,uEAGAI,UAAAC,mBAGAE,mBACA,yBACA,wBChFgV,I,YCO5UC,EAAY,eACd,EACArC,EACAiB,GACA,EACA,KACA,KACA,MAIa,aAAAoB,E","file":"js/chunk-2d0a3726.bebe5116.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"backend-content\",attrs:{\"id\":\"content\"}},[_c('div',{staticClass:\"column col-8 col-xs-12\"},[_c('br'),_c('p',[_c('strong',[_vm._v(\"A new SpyGuard version is available (\"+_vm._s(_vm.next_version)+\").\")]),_c('br'),(!_vm.update_launched)?_c('span',[_vm._v(\"Please click on the button below to update your instance.\")]):_vm._e(),(_vm.update_launched&&!_vm.update_finished)?_c('span',[_vm._v(\"Updating SpyGuard, please wait. You'll be redirected once updated.\")]):_vm._e(),(_vm.update_launched&&_vm.update_finished)?_c('span',{staticClass:\"color-green\"},[_vm._v(\"✓ Update finished!\")]):_vm._e()]),(!_vm.update_finished)?_c('button',{staticClass:\"btn btn-primary\",class:[ _vm.update_launched ? 'loading' : '' ],on:{\"click\":function($event){return _vm.launch_update()}}},[_vm._v(\"Update Spyguard\")]):_vm._e()])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./update.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./update.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./update.vue?vue&type=template&id=576c78b2&\"\nimport script from \"./update.vue?vue&type=script&lang=js&\"\nexport * from \"./update.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d0c0c86.cf098d4b.js b/app/backend/dist/js/chunk-2d0c0c86.cf098d4b.js new file mode 100644 index 0000000..3116295 --- /dev/null +++ b/app/backend/dist/js/chunk-2d0c0c86.cf098d4b.js @@ -0,0 +1,2 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0c0c86"],{"42f8":function(t,e,s){"use strict";s.r(e);var a=function(){var t=this,e=t._self._c;return e("div",{staticClass:"backend-content",attrs:{id:"content"}},[e("div",{staticClass:"column col-8 col-xs-12"},[e("h3",{staticClass:"s-title"},[t._v("Manage IOCs")]),e("ul",{staticClass:"tab tab-block"},[e("li",{staticClass:"tab-item"},[e("a",{class:{active:t.tabs.bulk},attrs:{href:"#"},on:{click:function(e){return t.switch_tab("bulk")}}},[t._v("Bulk import")])]),e("li",{staticClass:"tab-item"},[e("a",{class:{active:t.tabs.file},attrs:{href:"#"},on:{click:function(e){return t.switch_tab("file")}}},[t._v("File import")])]),e("li",{staticClass:"tab-item"},[e("a",{class:{active:t.tabs.export},attrs:{href:"#"},on:{click:function(e){return t.switch_tab("export")}}},[t._v("Export IOCs")])])]),t.tabs.export?e("div",[e("iframe",{staticClass:"frame-export",attrs:{src:t.export_url}})]):t._e(),t.tabs.file?e("div",[e("label",{staticClass:"form-upload empty",attrs:{for:"upload"}},[e("input",{staticClass:"upload-field",attrs:{type:"file",id:"upload"},on:{change:t.import_from_file}}),e("p",{staticClass:"empty-title h5"},[t._v("Drop or select a file to import.")]),e("p",{staticClass:"empty-subtitle"},[t._v("The file needs to be an export from a SpyGuard instance.")])])]):t._e(),t.tabs.bulk?e("div",[e("div",{staticClass:"columns"},[e("div",{staticClass:"column col-4 col-xs-4"},[e("div",{staticClass:"form-group"},[e("select",{directives:[{name:"model",rawName:"v-model",value:t.tag,expression:"tag"}],staticClass:"form-select",on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){var e="_value"in t?t._value:t.value;return e}));t.tag=e.target.multiple?s:s[0]}}},[e("option",{attrs:{value:""}},[t._v("IOC(s) Tag")]),t._l(t.tags,(function(s){return e("option",{key:s,domProps:{value:s}},[t._v(" "+t._s(s.toUpperCase())+" ")])}))],2)])]),e("div",{staticClass:"column col-4 col-xs-4"},[e("div",{staticClass:"form-group"},[e("select",{directives:[{name:"model",rawName:"v-model",value:t.type,expression:"type"}],staticClass:"form-select width-full",on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){var e="_value"in t?t._value:t.value;return e}));t.type=e.target.multiple?s:s[0]}}},[e("option",{attrs:{value:""}},[t._v("IOC(s) Type")]),e("option",{attrs:{value:"unknown"}},[t._v("Multiple (regex parsing)")]),t._l(t.types,(function(s){return e("option",{key:s.type,domProps:{value:s.type}},[t._v(" "+t._s(s.name)+" ")])}))],2)])]),e("div",{staticClass:"column col-4 col-xs-4"},[e("div",{staticClass:"form-group"},[e("select",{directives:[{name:"model",rawName:"v-model",value:t.tlp,expression:"tlp"}],staticClass:"form-select width-full",on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){var e="_value"in t?t._value:t.value;return e}));t.tlp=e.target.multiple?s:s[0]}}},[e("option",{attrs:{value:""}},[t._v("IOC(s) TLP")]),e("option",{attrs:{value:"white"}},[t._v("TLP:WHITE")]),e("option",{attrs:{value:"green"}},[t._v("TLP:GREEN")]),e("option",{attrs:{value:"amber"}},[t._v("TLP:AMBER")]),e("option",{attrs:{value:"red"}},[t._v("TLP:RED")])])])])]),e("div",{staticClass:"form-group"},[e("textarea",{directives:[{name:"model",rawName:"v-model",value:t.iocs,expression:"iocs"}],staticClass:"form-input",attrs:{id:"input-example-3",placeholder:"Paste your Indicators of Compromise here",rows:"15"},domProps:{value:t.iocs},on:{input:function(e){e.target.composing||(t.iocs=e.target.value)}}})]),e("div",{staticClass:"form-group"},[e("button",{staticClass:"btn-primary btn col-12",on:{click:function(e){return t.import_from_bulk()}}},[t._v("Import the IOCs")])])]):t._e(),t.imported.length>0?e("div",{staticClass:"form-group"},[e("div",{staticClass:"toast toast-success"},[t._v(" ✓ "+t._s(t.imported.length)+" IOC"),t.errors.length>1?e("span",[t._v("s")]):t._e(),t._v(" imported successfully. ")])]):t._e(),t.errors.length>0?e("div",[e("div",{staticClass:"form-group"},[e("div",{staticClass:"toast toast-error"},[t._v(" ✗ "+t._s(t.errors.length)+" IOC"),t.errors.length>1?e("span",[t._v("s")]):t._e(),t._v(" not imported, see details below. ")])]),e("div",{staticClass:"form-group"},[e("table",{staticClass:"table table-striped table-hover"},[t._m(0),e("tbody",t._l(t.errors,(function(s){return e("tr",{key:s.ioc},[e("td",[t._v(t._s(s.ioc))]),e("td",[t._v(t._s(s.message))])])})),0)])])]):1==t.type_tag_error?e("div",[t._m(1),t._m(2)]):t._e()])])},i=[function(){var t=this,e=t._self._c;return e("thead",[e("tr",[e("th",[t._v("Indicator")]),e("th",[t._v("Importation error")])])])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"form-group"},[e("div",{staticClass:"toast toast-error"},[t._v(" ✗ IOC(s) not imported, see details below. ")])])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"form-group"},[e("div",{staticClass:"empty"},[e("p",{staticClass:"empty-title h5"},[t._v("Please select a tag and a type.")]),e("p",{staticClass:"empty-subtitle"},[t._v('If different IOCs types, select "Unknown (regex parsing)".')])])])}],o=(s("14d9"),s("bc3a")),r=s.n(o),l={name:"manageiocs",data(){return{type:"",tag:"",tlp:"",iocs:"",types:[],tags:[],errors:[],imported:[],type_tag_error:!1,wrong_ioc_file:!1,tabs:{bulk:!0,file:!1,export:!1},jwt:"",export_url:"",config:{},watcher:""}},props:{},methods:{import_from_bulk:function(){this.errors=[],this.imported=[],""!=this.tag&&""!=this.type&&""!=this.tlp?(this.iocs.match(/[^\r\n]+/g).forEach(t=>{this.import_ioc(this.tag,this.type,this.tlp,t)}),this.iocs=""):this.type_tag_error=!0},import_ioc:function(t,e,s,a){""!=a&&"#"!=a.slice(0,1)&&("alert "!=a.slice(0,6)&&(a=a.trim(),a=a.replace(" ",""),a=a.replace("[",""),a=a.replace("]",""),a=a.replace("\\",""),a=a.replace("(",""),a=a.replace(")","")),r.a.get(`/api/ioc/add/${e.trim()}/${t.trim()}/${s.trim()}/${a}`,{timeout:1e4,headers:{"X-Token":this.jwt}}).then(t=>{t.data.status?this.imported.push(t.data):t.data.message&&this.errors.push(t.data)}).catch(t=>console.log(t)))},delete_watcher:function(t){var e=this.config.watchers.indexOf(t);this.config.watchers.splice(e,1)},add_watcher:function(){this.config.watchers.push(this.watcher),this.watcher=""},enrich_selects:function(){r.a.get("/api/ioc/get/tags",{timeout:1e4,headers:{"X-Token":this.jwt}}).then(t=>{t.data.tags&&(this.tags=t.data.tags)}).catch(t=>console.log(t)),r.a.get("/api/ioc/get/types",{timeout:1e4,headers:{"X-Token":this.jwt}}).then(t=>{t.data.types&&(this.types=t.data.types)}).catch(t=>console.log(t))},switch_tab:function(t){this.errors=[],this.imported=[],Object.keys(this.tabs).forEach(e=>{this.tabs[e]=e==t})},import_from_file:function(t){this.errors=[],this.imported=[];const e=t.target.files[0],s=new FileReader;s.onload=t=>this.$emit("load",t.target.result),s.onload=()=>{try{JSON.parse(s.result).iocs.forEach(t=>{this.import_ioc(t["tag"],t["type"],t["tlp"],t["value"])})}catch(t){this.wrong_ioc_file=!0}},s.readAsText(e)},async get_jwt(){await r.a.get("/api/get-token",{timeout:1e4}).then(t=>{t.data.token&&(this.jwt=t.data.token)}).catch(t=>console.log(t))},load_config:function(){r.a.get("/api/config/list",{timeout:1e4,headers:{"X-Token":this.jwt}}).then(t=>{t.data&&(this.config=t.data)}).catch(t=>console.log(t))}},created:function(){this.get_jwt().then(()=>{this.enrich_selects(),this.load_config(),this.export_url="/api/ioc/export?token="+this.jwt})}},c=l,n=s("2877"),p=Object(n["a"])(c,a,i,!1,null,null,null);e["default"]=p.exports}}]); +//# sourceMappingURL=chunk-2d0c0c86.cf098d4b.js.map \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d0c0c86.cf098d4b.js.map b/app/backend/dist/js/chunk-2d0c0c86.cf098d4b.js.map new file mode 100644 index 0000000..4e83feb --- /dev/null +++ b/app/backend/dist/js/chunk-2d0c0c86.cf098d4b.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/views/iocs-manage.vue","webpack:///src/views/iocs-manage.vue","webpack:///./src/views/iocs-manage.vue?bd2c","webpack:///./src/views/iocs-manage.vue?d419"],"names":["render","_vm","this","_c","_self","staticClass","attrs","_v","class","active","tabs","bulk","on","$event","switch_tab","file","export","export_url","_e","import_from_file","directives","name","rawName","value","tag","expression","$$selectedVal","Array","prototype","filter","call","target","options","o","selected","map","val","_value","multiple","_l","tags","t","key","domProps","_s","toUpperCase","type","types","tlp","iocs","composing","import_from_bulk","imported","length","errors","_m","e","ioc","message","type_tag_error","staticRenderFns","data","wrong_ioc_file","jwt","config","watcher","props","methods","import_ioc","axios","timeout","headers","then","catch","delete_watcher","add_watcher","enrich_selects","Object","reader","JSON","load_config","created","component"],"mappings":"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","file":"js/chunk-2d0c0c86.cf098d4b.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"backend-content\",attrs:{\"id\":\"content\"}},[_c('div',{staticClass:\"column col-8 col-xs-12\"},[_c('h3',{staticClass:\"s-title\"},[_vm._v(\"Manage IOCs\")]),_c('ul',{staticClass:\"tab tab-block\"},[_c('li',{staticClass:\"tab-item\"},[_c('a',{class:{ active: _vm.tabs.bulk },attrs:{\"href\":\"#\"},on:{\"click\":function($event){return _vm.switch_tab('bulk')}}},[_vm._v(\"Bulk import\")])]),_c('li',{staticClass:\"tab-item\"},[_c('a',{class:{ active: _vm.tabs.file },attrs:{\"href\":\"#\"},on:{\"click\":function($event){return _vm.switch_tab('file')}}},[_vm._v(\"File import\")])]),_c('li',{staticClass:\"tab-item\"},[_c('a',{class:{ active: _vm.tabs.export },attrs:{\"href\":\"#\"},on:{\"click\":function($event){return _vm.switch_tab('export')}}},[_vm._v(\"Export IOCs\")])])]),(_vm.tabs.export)?_c('div',[_c('iframe',{staticClass:\"frame-export\",attrs:{\"src\":_vm.export_url}})]):_vm._e(),(_vm.tabs.file)?_c('div',[_c('label',{staticClass:\"form-upload empty\",attrs:{\"for\":\"upload\"}},[_c('input',{staticClass:\"upload-field\",attrs:{\"type\":\"file\",\"id\":\"upload\"},on:{\"change\":_vm.import_from_file}}),_c('p',{staticClass:\"empty-title h5\"},[_vm._v(\"Drop or select a file to import.\")]),_c('p',{staticClass:\"empty-subtitle\"},[_vm._v(\"The file needs to be an export from a SpyGuard instance.\")])])]):_vm._e(),(_vm.tabs.bulk)?_c('div',[_c('div',{staticClass:\"columns\"},[_c('div',{staticClass:\"column col-4 col-xs-4\"},[_c('div',{staticClass:\"form-group\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.tag),expression:\"tag\"}],staticClass:\"form-select\",on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.tag=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',{attrs:{\"value\":\"\"}},[_vm._v(\"IOC(s) Tag\")]),_vm._l((_vm.tags),function(t){return _c('option',{key:t,domProps:{\"value\":t}},[_vm._v(\" \"+_vm._s(t.toUpperCase())+\" \")])})],2)])]),_c('div',{staticClass:\"column col-4 col-xs-4\"},[_c('div',{staticClass:\"form-group\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.type),expression:\"type\"}],staticClass:\"form-select width-full\",on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.type=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',{attrs:{\"value\":\"\"}},[_vm._v(\"IOC(s) Type\")]),_c('option',{attrs:{\"value\":\"unknown\"}},[_vm._v(\"Multiple (regex parsing)\")]),_vm._l((_vm.types),function(t){return _c('option',{key:t.type,domProps:{\"value\":t.type}},[_vm._v(\" \"+_vm._s(t.name)+\" \")])})],2)])]),_c('div',{staticClass:\"column col-4 col-xs-4\"},[_c('div',{staticClass:\"form-group\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.tlp),expression:\"tlp\"}],staticClass:\"form-select width-full\",on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.tlp=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',{attrs:{\"value\":\"\"}},[_vm._v(\"IOC(s) TLP\")]),_c('option',{attrs:{\"value\":\"white\"}},[_vm._v(\"TLP:WHITE\")]),_c('option',{attrs:{\"value\":\"green\"}},[_vm._v(\"TLP:GREEN\")]),_c('option',{attrs:{\"value\":\"amber\"}},[_vm._v(\"TLP:AMBER\")]),_c('option',{attrs:{\"value\":\"red\"}},[_vm._v(\"TLP:RED\")])])])])]),_c('div',{staticClass:\"form-group\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.iocs),expression:\"iocs\"}],staticClass:\"form-input\",attrs:{\"id\":\"input-example-3\",\"placeholder\":\"Paste your Indicators of Compromise here\",\"rows\":\"15\"},domProps:{\"value\":(_vm.iocs)},on:{\"input\":function($event){if($event.target.composing)return;_vm.iocs=$event.target.value}}})]),_c('div',{staticClass:\"form-group\"},[_c('button',{staticClass:\"btn-primary btn col-12\",on:{\"click\":function($event){return _vm.import_from_bulk()}}},[_vm._v(\"Import the IOCs\")])])]):_vm._e(),(_vm.imported.length>0)?_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"toast toast-success\"},[_vm._v(\" ✓ \"+_vm._s(_vm.imported.length)+\" IOC\"),(_vm.errors.length>1)?_c('span',[_vm._v(\"s\")]):_vm._e(),_vm._v(\" imported successfully. \")])]):_vm._e(),(_vm.errors.length>0)?_c('div',[_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"toast toast-error\"},[_vm._v(\" ✗ \"+_vm._s(_vm.errors.length)+\" IOC\"),(_vm.errors.length>1)?_c('span',[_vm._v(\"s\")]):_vm._e(),_vm._v(\" not imported, see details below. \")])]),_c('div',{staticClass:\"form-group\"},[_c('table',{staticClass:\"table table-striped table-hover\"},[_vm._m(0),_c('tbody',_vm._l((_vm.errors),function(e){return _c('tr',{key:e.ioc},[_c('td',[_vm._v(_vm._s(e.ioc))]),_c('td',[_vm._v(_vm._s(e.message))])])}),0)])])]):(_vm.type_tag_error==true)?_c('div',[_vm._m(1),_vm._m(2)]):_vm._e()])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"Indicator\")]),_c('th',[_vm._v(\"Importation error\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"toast toast-error\"},[_vm._v(\" ✗ IOC(s) not imported, see details below. \")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"empty\"},[_c('p',{staticClass:\"empty-title h5\"},[_vm._v(\"Please select a tag and a type.\")]),_c('p',{staticClass:\"empty-subtitle\"},[_vm._v(\"If different IOCs types, select \\\"Unknown (regex parsing)\\\".\")])])])\n}]\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./iocs-manage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./iocs-manage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./iocs-manage.vue?vue&type=template&id=55155ced&\"\nimport script from \"./iocs-manage.vue?vue&type=script&lang=js&\"\nexport * from \"./iocs-manage.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d0c8321.78ca1407.js b/app/backend/dist/js/chunk-2d0c8321.78ca1407.js new file mode 100644 index 0000000..18066fb --- /dev/null +++ b/app/backend/dist/js/chunk-2d0c8321.78ca1407.js @@ -0,0 +1,2 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0c8321"],{"549e":function(e,t,n){"use strict";n.r(t);var o=function(){var e=this,t=e._self._c;return t("div",{staticClass:"backend-content",attrs:{id:"content"}},[t("div",{class:{"alert-toaster-visible":e.toaster.show,"alert-toaster-hidden":!e.toaster.show}},[e._v(e._s(e.toaster.message))]),t("div",{staticClass:"column col-8 col-xs-12"},[t("h3",{staticClass:"s-title"},[e._v("Configuration ")]),t("div",{staticClass:"form-group"},[t("label",{staticClass:"form-label",attrs:{for:"user-login"}},[e._v("Device UUID (read-only)")]),t("div",{staticClass:"input-group"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.config.device_uuid,expression:"config.device_uuid"}],staticClass:"form-input read-only",attrs:{id:"device-id",readonly:"readonly"},domProps:{value:e.config.device_uuid},on:{input:function(t){t.target.composing||e.$set(e.config,"device_uuid",t.target.value)}}})])]),t("h5",{staticClass:"s-subtitle"},[e._v("Device configuration")]),t("div",{staticClass:"form-group"},[t("label",{staticClass:"form-switch"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.config.frontend.virtual_keyboard,expression:"config.frontend.virtual_keyboard"}],attrs:{type:"checkbox"},domProps:{checked:Array.isArray(e.config.frontend.virtual_keyboard)?e._i(e.config.frontend.virtual_keyboard,null)>-1:e.config.frontend.virtual_keyboard},on:{change:[function(t){var n=e.config.frontend.virtual_keyboard,o=t.target,s=!!o.checked;if(Array.isArray(n)){var i=null,c=e._i(n,i);o.checked?c<0&&e.$set(e.config.frontend,"virtual_keyboard",n.concat([i])):c>-1&&e.$set(e.config.frontend,"virtual_keyboard",n.slice(0,c).concat(n.slice(c+1)))}else e.$set(e.config.frontend,"virtual_keyboard",s)},function(t){return e.switch_config("frontend","virtual_keyboard")}]}}),t("i",{staticClass:"form-icon"}),e._v(" Use virtual keyboard (for touch screen) ")]),t("label",{staticClass:"form-switch"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.config.frontend.shutdown_option,expression:"config.frontend.shutdown_option"}],attrs:{type:"checkbox"},domProps:{checked:Array.isArray(e.config.frontend.shutdown_option)?e._i(e.config.frontend.shutdown_option,null)>-1:e.config.frontend.shutdown_option},on:{change:[function(t){var n=e.config.frontend.shutdown_option,o=t.target,s=!!o.checked;if(Array.isArray(n)){var i=null,c=e._i(n,i);o.checked?c<0&&e.$set(e.config.frontend,"shutdown_option",n.concat([i])):c>-1&&e.$set(e.config.frontend,"shutdown_option",n.slice(0,c).concat(n.slice(c+1)))}else e.$set(e.config.frontend,"shutdown_option",s)},function(t){return e.switch_config("frontend","shutdown_option")}]}}),t("i",{staticClass:"form-icon"}),e._v(" Allow the end-user to shutdown the device. ")]),t("label",{staticClass:"form-switch"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.config.frontend.backend_option,expression:"config.frontend.backend_option"}],attrs:{type:"checkbox"},domProps:{checked:Array.isArray(e.config.frontend.backend_option)?e._i(e.config.frontend.backend_option,null)>-1:e.config.frontend.backend_option},on:{change:[function(t){var n=e.config.frontend.backend_option,o=t.target,s=!!o.checked;if(Array.isArray(n)){var i=null,c=e._i(n,i);o.checked?c<0&&e.$set(e.config.frontend,"backend_option",n.concat([i])):c>-1&&e.$set(e.config.frontend,"backend_option",n.slice(0,c).concat(n.slice(c+1)))}else e.$set(e.config.frontend,"backend_option",s)},function(t){return e.switch_config("frontend","backend_option")}]}}),t("i",{staticClass:"form-icon"}),e._v(" Allow the end-user to access to the backend. ")]),t("label",{staticClass:"form-switch"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.config.network.tokenized_ssids,expression:"config.network.tokenized_ssids"}],attrs:{type:"checkbox"},domProps:{checked:Array.isArray(e.config.network.tokenized_ssids)?e._i(e.config.network.tokenized_ssids,null)>-1:e.config.network.tokenized_ssids},on:{change:[function(t){var n=e.config.network.tokenized_ssids,o=t.target,s=!!o.checked;if(Array.isArray(n)){var i=null,c=e._i(n,i);o.checked?c<0&&e.$set(e.config.network,"tokenized_ssids",n.concat([i])):c>-1&&e.$set(e.config.network,"tokenized_ssids",n.slice(0,c).concat(n.slice(c+1)))}else e.$set(e.config.network,"tokenized_ssids",s)},function(t){return e.switch_config("network","tokenized_ssids")}]}}),t("i",{staticClass:"form-icon"}),e._v(" Use tokenized SSIDs (eg. [ssid-name]-[hex-str]). ")]),t("label",{staticClass:"form-switch"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.config.frontend.download_links,expression:"config.frontend.download_links"}],attrs:{type:"checkbox"},domProps:{checked:Array.isArray(e.config.frontend.download_links)?e._i(e.config.frontend.download_links,null)>-1:e.config.frontend.download_links},on:{change:[function(t){var n=e.config.frontend.download_links,o=t.target,s=!!o.checked;if(Array.isArray(n)){var i=null,c=e._i(n,i);o.checked?c<0&&e.$set(e.config.frontend,"download_links",n.concat([i])):c>-1&&e.$set(e.config.frontend,"download_links",n.slice(0,c).concat(n.slice(c+1)))}else e.$set(e.config.frontend,"download_links",s)},function(t){return e.switch_config("frontend","download_links")}]}}),t("i",{staticClass:"form-icon"}),e._v(" Use in-browser download for network captures. ")]),t("label",{staticClass:"form-switch"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.config.frontend.sparklines,expression:"config.frontend.sparklines"}],attrs:{type:"checkbox"},domProps:{checked:Array.isArray(e.config.frontend.sparklines)?e._i(e.config.frontend.sparklines,null)>-1:e.config.frontend.sparklines},on:{change:[function(t){var n=e.config.frontend.sparklines,o=t.target,s=!!o.checked;if(Array.isArray(n)){var i=null,c=e._i(n,i);o.checked?c<0&&e.$set(e.config.frontend,"sparklines",n.concat([i])):c>-1&&e.$set(e.config.frontend,"sparklines",n.slice(0,c).concat(n.slice(c+1)))}else e.$set(e.config.frontend,"sparklines",s)},function(t){return e.switch_config("frontend","sparklines")}]}}),t("i",{staticClass:"form-icon"}),e._v(" Show background sparklines during the capture. ")]),t("label",{staticClass:"form-switch"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.config.frontend.remote_access,expression:"config.frontend.remote_access"}],attrs:{type:"checkbox"},domProps:{checked:Array.isArray(e.config.frontend.remote_access)?e._i(e.config.frontend.remote_access,null)>-1:e.config.frontend.remote_access},on:{change:[function(t){var n=e.config.frontend.remote_access,o=t.target,s=!!o.checked;if(Array.isArray(n)){var i=null,c=e._i(n,i);o.checked?c<0&&e.$set(e.config.frontend,"remote_access",n.concat([i])):c>-1&&e.$set(e.config.frontend,"remote_access",n.slice(0,c).concat(n.slice(c+1)))}else e.$set(e.config.frontend,"remote_access",s)},function(t){return e.switch_config("frontend","remote_access")}]}}),t("i",{staticClass:"form-icon"}),e._v(" Allow remote access to the frontend. ")]),t("label",{staticClass:"form-switch"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.config.backend.remote_access,expression:"config.backend.remote_access"}],attrs:{type:"checkbox"},domProps:{checked:Array.isArray(e.config.backend.remote_access)?e._i(e.config.backend.remote_access,null)>-1:e.config.backend.remote_access},on:{change:[function(t){var n=e.config.backend.remote_access,o=t.target,s=!!o.checked;if(Array.isArray(n)){var i=null,c=e._i(n,i);o.checked?c<0&&e.$set(e.config.backend,"remote_access",n.concat([i])):c>-1&&e.$set(e.config.backend,"remote_access",n.slice(0,c).concat(n.slice(c+1)))}else e.$set(e.config.backend,"remote_access",s)},function(t){return e.switch_config("backend","remote_access")}]}}),t("i",{staticClass:"form-icon"}),e._v(" Allow remote access to the backend. ")])]),t("h5",{staticClass:"s-subtitle"},[e._v("User credentials")]),t("div",{staticClass:"form-group"},[t("div",{staticClass:"column col-10 col-xs-12"},[t("div",{staticClass:"form-group"},[t("label",{staticClass:"form-label",attrs:{for:"user-login"}},[e._v("User login")]),t("div",{staticClass:"input-group"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.config.backend.login,expression:"config.backend.login"}],staticClass:"form-input",attrs:{id:"user-login",type:"text"},domProps:{value:e.config.backend.login},on:{input:function(t){t.target.composing||e.$set(e.config.backend,"login",t.target.value)}}}),t("button",{staticClass:"btn btn-primary input-group-btn px150",on:{click:function(t){return e.change_login()}}},[e._v("Update it")])])]),t("div",{staticClass:"form-group"},[t("label",{staticClass:"form-label",attrs:{for:"user-login"}},[e._v("User password")]),t("div",{staticClass:"input-group"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.config.backend.password,expression:"config.backend.password"}],staticClass:"form-input",attrs:{id:"user-login",type:"password",placeholder:"●●●●●●"},domProps:{value:e.config.backend.password},on:{input:function(t){t.target.composing||e.$set(e.config.backend,"password",t.target.value)}}}),t("button",{staticClass:"btn btn-primary input-group-btn px150",on:{click:function(t){return e.change_password()}}},[e._v("Update it")])])]),t("div",{staticClass:"whitespace"})])])])])},s=[],i=n("bc3a"),c=n.n(i),a={name:"edit-configuration",data(){return{config:{},check_certificate:!1,certificate:"",iocs_tags:[],toaster:{show:!1,message:"",type:null}}},props:{},methods:{switch_config:function(e,t){c.a.get(`/api/config/switch/${e}/${t}`,{timeout:1e4,headers:{"X-Token":this.jwt}}).then(n=>{n.data.status&&("Key switched to true"==n.data.message?(this.toaster={show:!0,message:"Configuration updated",type:"success"},setTimeout(function(){this.toaster={show:!1}}.bind(this),1e3),this.config[e][t]=!0):"Key switched to false"==n.data.message?(this.toaster={show:!0,message:"Configuration updated",type:"success"},setTimeout(function(){this.toaster={show:!1}}.bind(this),1e3),this.config[e][t]=!1):(this.toaster={show:!0,message:"The key doesn't exist",type:"error"},setTimeout(function(){this.toaster={show:!1}}.bind(this),1e3)))}).catch(e=>console.log(e))},load_config:function(){c.a.get("/api/config/list",{timeout:1e4,headers:{"X-Token":this.jwt}}).then(e=>{e.data&&(this.config=e.data,this.config.backend.password="")}).catch(e=>console.log(e))},async get_jwt(){await c.a.get("/api/get-token",{timeout:1e4}).then(e=>{e.data.token&&(this.jwt=e.data.token)}).catch(e=>console.log(e))},change_login:function(){c.a.get("/api/config/edit/backend/login/"+this.config.backend.login,{timeout:1e4,headers:{"X-Token":this.jwt}}).then(e=>{e.data.status?(this.toaster={show:!0,message:"Login changed",type:"success"},setTimeout(function(){this.toaster={show:!1}}.bind(this),1e3)):(this.toaster={show:!0,message:"Login not changed",type:"error"},setTimeout(function(){this.toaster={show:!1}}.bind(this),1e3))}).catch(e=>console.log(e))},change_password:function(){c.a.get("/api/config/edit/backend/password/"+this.config.backend.password,{timeout:1e4,headers:{"X-Token":this.jwt}}).then(e=>{e.data.status?(this.toaster={show:!0,message:"Password changed",type:"success"},setTimeout(function(){this.toaster={show:!1}}.bind(this),1e3)):(this.toaster={show:!0,message:"Password not changed",type:"error"},setTimeout(function(){this.toaster={show:!1}}.bind(this),1e3))}).catch(e=>console.log(e))}},created:function(){this.get_jwt().then(()=>{this.load_config()})}},r=a,d=n("2877"),l=Object(d["a"])(r,o,s,!1,null,null,null);t["default"]=l.exports}}]); +//# sourceMappingURL=chunk-2d0c8321.78ca1407.js.map \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d0c8321.78ca1407.js.map b/app/backend/dist/js/chunk-2d0c8321.78ca1407.js.map new file mode 100644 index 0000000..477f4d9 --- /dev/null +++ b/app/backend/dist/js/chunk-2d0c8321.78ca1407.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/views/edit-configuration.vue","webpack:///src/views/edit-configuration.vue","webpack:///./src/views/edit-configuration.vue?6838","webpack:///./src/views/edit-configuration.vue?2e5d"],"names":["render","_vm","this","_c","_self","staticClass","attrs","class","toaster","show","_v","_s","message","directives","name","rawName","value","config","device_uuid","expression","domProps","on","$event","target","composing","$set","frontend","virtual_keyboard","Array","isArray","_i","$$a","$$el","$$c","checked","$$v","$$i","concat","slice","switch_config","shutdown_option","backend_option","network","tokenized_ssids","download_links","sparklines","remote_access","backend","login","change_login","password","change_password","staticRenderFns","data","check_certificate","certificate","iocs_tags","type","props","methods","axios","timeout","headers","setTimeout","catch","load_config","then","created","component"],"mappings":"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","file":"js/chunk-2d0c8321.78ca1407.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"backend-content\",attrs:{\"id\":\"content\"}},[_c('div',{class:{ 'alert-toaster-visible' : _vm.toaster.show, 'alert-toaster-hidden' : !_vm.toaster.show }},[_vm._v(_vm._s(_vm.toaster.message))]),_c('div',{staticClass:\"column col-8 col-xs-12\"},[_c('h3',{staticClass:\"s-title\"},[_vm._v(\"Configuration \")]),_c('div',{staticClass:\"form-group\"},[_c('label',{staticClass:\"form-label\",attrs:{\"for\":\"user-login\"}},[_vm._v(\"Device UUID (read-only)\")]),_c('div',{staticClass:\"input-group\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.config.device_uuid),expression:\"config.device_uuid\"}],staticClass:\"form-input read-only\",attrs:{\"id\":\"device-id\",\"readonly\":\"readonly\"},domProps:{\"value\":(_vm.config.device_uuid)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.config, \"device_uuid\", $event.target.value)}}})])]),_c('h5',{staticClass:\"s-subtitle\"},[_vm._v(\"Device configuration\")]),_c('div',{staticClass:\"form-group\"},[_c('label',{staticClass:\"form-switch\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.config.frontend.virtual_keyboard),expression:\"config.frontend.virtual_keyboard\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.config.frontend.virtual_keyboard)?_vm._i(_vm.config.frontend.virtual_keyboard,null)>-1:(_vm.config.frontend.virtual_keyboard)},on:{\"change\":[function($event){var $$a=_vm.config.frontend.virtual_keyboard,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.config.frontend, \"virtual_keyboard\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.config.frontend, \"virtual_keyboard\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.config.frontend, \"virtual_keyboard\", $$c)}},function($event){return _vm.switch_config('frontend', 'virtual_keyboard')}]}}),_c('i',{staticClass:\"form-icon\"}),_vm._v(\" Use virtual keyboard (for touch screen) \")]),_c('label',{staticClass:\"form-switch\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.config.frontend.shutdown_option),expression:\"config.frontend.shutdown_option\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.config.frontend.shutdown_option)?_vm._i(_vm.config.frontend.shutdown_option,null)>-1:(_vm.config.frontend.shutdown_option)},on:{\"change\":[function($event){var $$a=_vm.config.frontend.shutdown_option,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.config.frontend, \"shutdown_option\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.config.frontend, \"shutdown_option\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.config.frontend, \"shutdown_option\", $$c)}},function($event){return _vm.switch_config('frontend', 'shutdown_option')}]}}),_c('i',{staticClass:\"form-icon\"}),_vm._v(\" Allow the end-user to shutdown the device. \")]),_c('label',{staticClass:\"form-switch\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.config.frontend.backend_option),expression:\"config.frontend.backend_option\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.config.frontend.backend_option)?_vm._i(_vm.config.frontend.backend_option,null)>-1:(_vm.config.frontend.backend_option)},on:{\"change\":[function($event){var $$a=_vm.config.frontend.backend_option,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.config.frontend, \"backend_option\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.config.frontend, \"backend_option\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.config.frontend, \"backend_option\", $$c)}},function($event){return _vm.switch_config('frontend', 'backend_option')}]}}),_c('i',{staticClass:\"form-icon\"}),_vm._v(\" Allow the end-user to access to the backend. \")]),_c('label',{staticClass:\"form-switch\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.config.network.tokenized_ssids),expression:\"config.network.tokenized_ssids\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.config.network.tokenized_ssids)?_vm._i(_vm.config.network.tokenized_ssids,null)>-1:(_vm.config.network.tokenized_ssids)},on:{\"change\":[function($event){var $$a=_vm.config.network.tokenized_ssids,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.config.network, \"tokenized_ssids\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.config.network, \"tokenized_ssids\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.config.network, \"tokenized_ssids\", $$c)}},function($event){return _vm.switch_config('network', 'tokenized_ssids')}]}}),_c('i',{staticClass:\"form-icon\"}),_vm._v(\" Use tokenized SSIDs (eg. [ssid-name]-[hex-str]). \")]),_c('label',{staticClass:\"form-switch\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.config.frontend.download_links),expression:\"config.frontend.download_links\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.config.frontend.download_links)?_vm._i(_vm.config.frontend.download_links,null)>-1:(_vm.config.frontend.download_links)},on:{\"change\":[function($event){var $$a=_vm.config.frontend.download_links,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.config.frontend, \"download_links\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.config.frontend, \"download_links\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.config.frontend, \"download_links\", $$c)}},function($event){return _vm.switch_config('frontend', 'download_links')}]}}),_c('i',{staticClass:\"form-icon\"}),_vm._v(\" Use in-browser download for network captures. \")]),_c('label',{staticClass:\"form-switch\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.config.frontend.sparklines),expression:\"config.frontend.sparklines\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.config.frontend.sparklines)?_vm._i(_vm.config.frontend.sparklines,null)>-1:(_vm.config.frontend.sparklines)},on:{\"change\":[function($event){var $$a=_vm.config.frontend.sparklines,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.config.frontend, \"sparklines\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.config.frontend, \"sparklines\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.config.frontend, \"sparklines\", $$c)}},function($event){return _vm.switch_config('frontend', 'sparklines')}]}}),_c('i',{staticClass:\"form-icon\"}),_vm._v(\" Show background sparklines during the capture. \")]),_c('label',{staticClass:\"form-switch\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.config.frontend.remote_access),expression:\"config.frontend.remote_access\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.config.frontend.remote_access)?_vm._i(_vm.config.frontend.remote_access,null)>-1:(_vm.config.frontend.remote_access)},on:{\"change\":[function($event){var $$a=_vm.config.frontend.remote_access,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.config.frontend, \"remote_access\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.config.frontend, \"remote_access\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.config.frontend, \"remote_access\", $$c)}},function($event){return _vm.switch_config('frontend', 'remote_access')}]}}),_c('i',{staticClass:\"form-icon\"}),_vm._v(\" Allow remote access to the frontend. \")]),_c('label',{staticClass:\"form-switch\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.config.backend.remote_access),expression:\"config.backend.remote_access\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.config.backend.remote_access)?_vm._i(_vm.config.backend.remote_access,null)>-1:(_vm.config.backend.remote_access)},on:{\"change\":[function($event){var $$a=_vm.config.backend.remote_access,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.config.backend, \"remote_access\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.config.backend, \"remote_access\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.config.backend, \"remote_access\", $$c)}},function($event){return _vm.switch_config('backend', 'remote_access')}]}}),_c('i',{staticClass:\"form-icon\"}),_vm._v(\" Allow remote access to the backend. \")])]),_c('h5',{staticClass:\"s-subtitle\"},[_vm._v(\"User credentials\")]),_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"column col-10 col-xs-12\"},[_c('div',{staticClass:\"form-group\"},[_c('label',{staticClass:\"form-label\",attrs:{\"for\":\"user-login\"}},[_vm._v(\"User login\")]),_c('div',{staticClass:\"input-group\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.config.backend.login),expression:\"config.backend.login\"}],staticClass:\"form-input\",attrs:{\"id\":\"user-login\",\"type\":\"text\"},domProps:{\"value\":(_vm.config.backend.login)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.config.backend, \"login\", $event.target.value)}}}),_c('button',{staticClass:\"btn btn-primary input-group-btn px150\",on:{\"click\":function($event){return _vm.change_login()}}},[_vm._v(\"Update it\")])])]),_c('div',{staticClass:\"form-group\"},[_c('label',{staticClass:\"form-label\",attrs:{\"for\":\"user-login\"}},[_vm._v(\"User password\")]),_c('div',{staticClass:\"input-group\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.config.backend.password),expression:\"config.backend.password\"}],staticClass:\"form-input\",attrs:{\"id\":\"user-login\",\"type\":\"password\",\"placeholder\":\"●●●●●●\"},domProps:{\"value\":(_vm.config.backend.password)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.config.backend, \"password\", $event.target.value)}}}),_c('button',{staticClass:\"btn btn-primary input-group-btn px150\",on:{\"click\":function($event){return _vm.change_password()}}},[_vm._v(\"Update it\")])])]),_c('div',{staticClass:\"whitespace\"})])])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit-configuration.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit-configuration.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./edit-configuration.vue?vue&type=template&id=603efc18&\"\nimport script from \"./edit-configuration.vue?vue&type=script&lang=js&\"\nexport * from \"./edit-configuration.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d0c9378.fb16a6a2.js b/app/backend/dist/js/chunk-2d0c9378.fb16a6a2.js new file mode 100644 index 0000000..4469bbe --- /dev/null +++ b/app/backend/dist/js/chunk-2d0c9378.fb16a6a2.js @@ -0,0 +1,2 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0c9378"],{"57cc":function(t,s,i){"use strict";i.r(s);var e=function(){var t=this,s=t._self._c;return s("div",{staticClass:"backend-content",attrs:{id:"content"}},[s("div",{staticClass:"column col-8 col-xs-12"},[s("h3",{staticClass:"s-title"},[t._v("Manage MISP instances")]),s("ul",{staticClass:"tab tab-block"},[s("li",{staticClass:"tab-item"},[s("a",{class:{active:t.tabs.addmisp},attrs:{href:"#"},on:{click:function(s){return t.switch_tab("addmisp")}}},[t._v("Add instance")])]),s("li",{staticClass:"tab-item"},[s("a",{class:{active:t.tabs.instances},attrs:{href:"#"},on:{click:function(s){return t.switch_tab("instances")}}},[t._v("Existing instances")])])]),t.tabs.addmisp?s("div",[s("div",{staticClass:"misp-form"},[s("label",{staticClass:"misp-label"},[t._v("Instance name")]),s("span"),s("input",{directives:[{name:"model",rawName:"v-model",value:t.mispinst.name,expression:"mispinst.name"}],ref:"misp_name",staticClass:"form-input",attrs:{type:"text",placeholder:"CYBERACME MISP",required:""},domProps:{value:t.mispinst.name},on:{input:function(s){s.target.composing||t.$set(t.mispinst,"name",s.target.value)}}}),s("label",{staticClass:"misp-label"},[t._v("Instance URL")]),s("span"),s("input",{directives:[{name:"model",rawName:"v-model",value:t.mispinst.url,expression:"mispinst.url"}],ref:"misp_url",staticClass:"form-input",attrs:{type:"text",placeholder:"https://misp.cyberacme.com",required:""},domProps:{value:t.mispinst.url},on:{input:function(s){s.target.composing||t.$set(t.mispinst,"url",s.target.value)}}}),s("label",{staticClass:"misp-label"},[t._v("Authentication key")]),s("span"),s("input",{directives:[{name:"model",rawName:"v-model",value:t.mispinst.key,expression:"mispinst.key"}],ref:"misp_key",staticClass:"form-input",attrs:{type:"text",placeholder:"OqHSMyAuth3ntic4t10nK3y0MyAuth3ntic4t10nK3y3iiH",required:""},domProps:{value:t.mispinst.key},on:{input:function(s){s.target.composing||t.$set(t.mispinst,"key",s.target.value)}}}),t.mispinst.url.startsWith("https://")?s("label",{staticClass:"misp-label"},[t._v("Verify certificate? ")]):t._e(),t.mispinst.url.startsWith("https://")?s("span"):t._e(),t.mispinst.url.startsWith("https://")?s("div",{staticStyle:{flex:"50%"}},[s("label",{staticClass:"form-switch"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.mispinst.ssl,expression:"mispinst.ssl"}],attrs:{type:"checkbox"},domProps:{checked:Array.isArray(t.mispinst.ssl)?t._i(t.mispinst.ssl,null)>-1:t.mispinst.ssl},on:{change:function(s){var i=t.mispinst.ssl,e=s.target,a=!!e.checked;if(Array.isArray(i)){var n=null,c=t._i(i,n);e.checked?c<0&&t.$set(t.mispinst,"ssl",i.concat([n])):c>-1&&t.$set(t.mispinst,"ssl",i.slice(0,c).concat(i.slice(c+1)))}else t.$set(t.mispinst,"ssl",a)}}}),s("i",{staticClass:"form-icon"})])]):t._e()]),s("button",{staticClass:"btn-primary btn col-12",on:{click:function(s){return t.add_instance()}}},[t._v("Add MISP instance")]),t.added?s("div",{staticClass:"form-group"},[s("div",{staticClass:"toast toast-success"},[t._v(" ✓ MISP instance added successfully. Redirecting to instances in 2 seconds. ")])]):t._e(),t.error?s("div",{staticClass:"form-group"},[s("div",{staticClass:"toast toast-error"},[t._v(" ✗ MISP instance not added. "+t._s(t.error)+" ")])]):t._e()]):t._e(),t.tabs.instances?s("div",{staticClass:"form-group"},[t.instances.length?s("div",[s("table",{staticClass:"table table-striped table-hover"},[t._m(0),s("tbody",t._l(t.instances,(function(i){return s("tr",{key:i.id},[s("td",[t._v(t._s(i.name))]),s("td",[t._v(t._s(i.url.replace("https://","").replace("http://","")))]),s("td",[t._v(t._s(i.apikey.slice(0,5))+" [...] "+t._s(i.apikey.slice(35,40)))]),s("td",[i.connected?s("span",{staticClass:"instance-online tooltip",attrs:{"data-tooltip":i.lastsync}},[t._v("✓ ONLINE")]):s("span",{staticClass:"instance-offline tooltip",attrs:{"data-tooltip":i.lastsync}},[t._v("⚠ OFFLINE")])]),s("td",[s("button",{staticClass:"btn btn-sm",on:{click:function(s){return t.delete_instance(i)}}},[t._v("Delete")])])])})),0)])]):s("div",[s("div",{staticClass:"empty"},[t.loading?s("div",[t._m(1),s("p",{staticClass:"empty-subtitle"},[t._v("Testing and loading your MISP instances.")])]):s("div",[s("p",{staticClass:"empty-title h5"},[t._v("No MISP instance found.")]),s("p",{staticClass:"empty-subtitle"},[t._v("Do not hesitate to add a MISP instance.")])])])])]):t._e()])])},a=[function(){var t=this,s=t._self._c;return s("thead",[s("tr",[s("th",[t._v("Name")]),s("th",[t._v("Server")]),s("th",[t._v("Authkey")]),s("th",[t._v("Status")]),s("th",[t._v("Action")])])])},function(){var t=this,s=t._self._c;return s("p",{staticClass:"empty-title h5"},[s("span",{staticClass:"loading loading-lg"})])}],n=i("bc3a"),c=i.n(n),l={name:"managemisp",data(){return{error:!1,loading:!1,added:!1,mispinst:{name:"",url:"",key:"",ssl:!1},instances:[],tabs:{addmisp:!0,instances:!1},jwt:""}},props:{},methods:{add_instance:function(){this.added=!1,this.error=!1,this.mispinst.name&&this.mispinst.url&&this.mispinst.key&&c.a.post("/api/misp/add",{data:{instance:this.mispinst}},{headers:{"X-Token":this.jwt}}).then(t=>{t.data.status?(this.added=!0,setTimeout(function(){this.switch_tab("instances"),this.mispinst={name:"",url:"",key:"",ssl:!1},this.added=!1}.bind(this),2e3)):this.error=t.data.message}).catch(t=>console.log(t))},delete_instance(t){c.a.get("/api/misp/delete/"+t.id,{timeout:1e4,headers:{"X-Token":this.jwt}}).then(s=>{s.data.status&&(this.instances=this.instances.filter((function(s){return s!=t})))}).catch(t=>console.log(t))},get_misp_instances(){this.loading=!0,this.instances=[],c.a.get("/api/misp/get_all",{timeout:1e4,headers:{"X-Token":this.jwt}}).then(t=>{t.data.results&&(this.instances=t.data.results,this.instances.forEach(t=>{var s=parseInt((Date.now()/1e3-t.lastsync)/86400);t.lastsync=s?`Synchronized ${s} day(s) ago`:"Synchronized today"})),this.loading=!1}).catch(t=>console.log(t))},switch_tab:function(t){Object.keys(this.tabs).forEach(s=>{s==t?(this.tabs[s]=!0,"instances"==s&&this.get_misp_instances()):this.tabs[s]=!1})},get_jwt(){c.a.get("/api/get-token",{timeout:1e4}).then(t=>{t.data.token&&(this.jwt=t.data.token)}).catch(t=>console.log(t))}},created:function(){this.get_jwt()}},o=l,r=i("2877"),d=Object(r["a"])(o,e,a,!1,null,null,null);s["default"]=d.exports}}]); +//# sourceMappingURL=chunk-2d0c9378.fb16a6a2.js.map \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d0c9378.fb16a6a2.js.map b/app/backend/dist/js/chunk-2d0c9378.fb16a6a2.js.map new file mode 100644 index 0000000..7d76918 --- /dev/null +++ b/app/backend/dist/js/chunk-2d0c9378.fb16a6a2.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/views/instance-misp.vue","webpack:///src/views/instance-misp.vue","webpack:///./src/views/instance-misp.vue?4ce4","webpack:///./src/views/instance-misp.vue?7ab0"],"names":["render","_vm","this","_c","_self","staticClass","attrs","_v","class","active","tabs","addmisp","on","$event","switch_tab","instances","directives","name","rawName","value","mispinst","expression","ref","domProps","target","composing","$set","url","key","startsWith","_e","staticStyle","ssl","Array","isArray","_i","$$a","$$el","$$c","checked","$$v","$$i","concat","slice","add_instance","added","error","_s","length","_m","_l","i","id","replace","apikey","connected","lastsync","delete_instance","loading","staticRenderFns","data","jwt","props","methods","axios","instance","headers","setTimeout","catch","timeout","then","get_misp_instances","e","Object","get_jwt","created","component"],"mappings":"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","file":"js/chunk-2d0c9378.fb16a6a2.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"backend-content\",attrs:{\"id\":\"content\"}},[_c('div',{staticClass:\"column col-8 col-xs-12\"},[_c('h3',{staticClass:\"s-title\"},[_vm._v(\"Manage MISP instances\")]),_c('ul',{staticClass:\"tab tab-block\"},[_c('li',{staticClass:\"tab-item\"},[_c('a',{class:{ active: _vm.tabs.addmisp },attrs:{\"href\":\"#\"},on:{\"click\":function($event){return _vm.switch_tab('addmisp')}}},[_vm._v(\"Add instance\")])]),_c('li',{staticClass:\"tab-item\"},[_c('a',{class:{ active: _vm.tabs.instances },attrs:{\"href\":\"#\"},on:{\"click\":function($event){return _vm.switch_tab('instances')}}},[_vm._v(\"Existing instances\")])])]),(_vm.tabs.addmisp)?_c('div',[_c('div',{staticClass:\"misp-form\"},[_c('label',{staticClass:\"misp-label\"},[_vm._v(\"Instance name\")]),_c('span'),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.mispinst.name),expression:\"mispinst.name\"}],ref:\"misp_name\",staticClass:\"form-input\",attrs:{\"type\":\"text\",\"placeholder\":\"CYBERACME MISP\",\"required\":\"\"},domProps:{\"value\":(_vm.mispinst.name)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.mispinst, \"name\", $event.target.value)}}}),_c('label',{staticClass:\"misp-label\"},[_vm._v(\"Instance URL\")]),_c('span'),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.mispinst.url),expression:\"mispinst.url\"}],ref:\"misp_url\",staticClass:\"form-input\",attrs:{\"type\":\"text\",\"placeholder\":\"https://misp.cyberacme.com\",\"required\":\"\"},domProps:{\"value\":(_vm.mispinst.url)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.mispinst, \"url\", $event.target.value)}}}),_c('label',{staticClass:\"misp-label\"},[_vm._v(\"Authentication key\")]),_c('span'),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.mispinst.key),expression:\"mispinst.key\"}],ref:\"misp_key\",staticClass:\"form-input\",attrs:{\"type\":\"text\",\"placeholder\":\"OqHSMyAuth3ntic4t10nK3y0MyAuth3ntic4t10nK3y3iiH\",\"required\":\"\"},domProps:{\"value\":(_vm.mispinst.key)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.mispinst, \"key\", $event.target.value)}}}),(_vm.mispinst.url.startsWith('https://'))?_c('label',{staticClass:\"misp-label\"},[_vm._v(\"Verify certificate? \")]):_vm._e(),(_vm.mispinst.url.startsWith('https://'))?_c('span'):_vm._e(),(_vm.mispinst.url.startsWith('https://'))?_c('div',{staticStyle:{\"flex\":\"50%\"}},[_c('label',{staticClass:\"form-switch\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.mispinst.ssl),expression:\"mispinst.ssl\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.mispinst.ssl)?_vm._i(_vm.mispinst.ssl,null)>-1:(_vm.mispinst.ssl)},on:{\"change\":function($event){var $$a=_vm.mispinst.ssl,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.mispinst, \"ssl\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.mispinst, \"ssl\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.mispinst, \"ssl\", $$c)}}}}),_c('i',{staticClass:\"form-icon\"})])]):_vm._e()]),_c('button',{staticClass:\"btn-primary btn col-12\",on:{\"click\":function($event){return _vm.add_instance()}}},[_vm._v(\"Add MISP instance\")]),(_vm.added)?_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"toast toast-success\"},[_vm._v(\" ✓ MISP instance added successfully. Redirecting to instances in 2 seconds. \")])]):_vm._e(),(_vm.error)?_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"toast toast-error\"},[_vm._v(\" ✗ MISP instance not added. \"+_vm._s(_vm.error)+\" \")])]):_vm._e()]):_vm._e(),(_vm.tabs.instances)?_c('div',{staticClass:\"form-group\"},[(_vm.instances.length)?_c('div',[_c('table',{staticClass:\"table table-striped table-hover\"},[_vm._m(0),_c('tbody',_vm._l((_vm.instances),function(i){return _c('tr',{key:i.id},[_c('td',[_vm._v(_vm._s(i.name))]),_c('td',[_vm._v(_vm._s(i.url.replace('https://', '') .replace('http://', '')))]),_c('td',[_vm._v(_vm._s(i.apikey.slice(0,5))+\" [...] \"+_vm._s(i.apikey.slice(35,40)))]),_c('td',[(i.connected)?_c('span',{staticClass:\"instance-online tooltip\",attrs:{\"data-tooltip\":i.lastsync}},[_vm._v(\"✓ ONLINE\")]):_c('span',{staticClass:\"instance-offline tooltip\",attrs:{\"data-tooltip\":i.lastsync}},[_vm._v(\"⚠ OFFLINE\")])]),_c('td',[_c('button',{staticClass:\"btn btn-sm\",on:{\"click\":function($event){return _vm.delete_instance(i)}}},[_vm._v(\"Delete\")])])])}),0)])]):_c('div',[_c('div',{staticClass:\"empty\"},[(_vm.loading)?_c('div',[_vm._m(1),_c('p',{staticClass:\"empty-subtitle\"},[_vm._v(\"Testing and loading your MISP instances.\")])]):_c('div',[_c('p',{staticClass:\"empty-title h5\"},[_vm._v(\"No MISP instance found.\")]),_c('p',{staticClass:\"empty-subtitle\"},[_vm._v(\"Do not hesitate to add a MISP instance.\")])])])])]):_vm._e()])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"Name\")]),_c('th',[_vm._v(\"Server\")]),_c('th',[_vm._v(\"Authkey\")]),_c('th',[_vm._v(\"Status\")]),_c('th',[_vm._v(\"Action\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('p',{staticClass:\"empty-title h5\"},[_c('span',{staticClass:\"loading loading-lg\"})])\n}]\n\nexport { render, staticRenderFns }","\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./instance-misp.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./instance-misp.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./instance-misp.vue?vue&type=template&id=63e790af&\"\nimport script from \"./instance-misp.vue?vue&type=script&lang=js&\"\nexport * from \"./instance-misp.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d0cc2b4.6cd43049.js b/app/backend/dist/js/chunk-2d0cc2b4.6cd43049.js new file mode 100644 index 0000000..4ee23c4 --- /dev/null +++ b/app/backend/dist/js/chunk-2d0cc2b4.6cd43049.js @@ -0,0 +1,2 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0cc2b4"],{"4d7e":function(t,s,e){"use strict";e.r(s);var a=function(){var t=this,s=t._self._c;return s("div",{staticClass:"backend-content",attrs:{id:"content"}},[s("div",{staticClass:"column col-12 col-xs-12"},[s("h3",{staticClass:"s-title"},[t._v("Search IOCs")]),s("div",{staticClass:"form-group"},[s("textarea",{directives:[{name:"model",rawName:"v-model",value:t.iocs,expression:"iocs"}],staticClass:"form-input",attrs:{id:"input-example-3",placeholder:"Paste your IOCs here",rows:"3"},domProps:{value:t.iocs},on:{input:function(s){s.target.composing||(t.iocs=s.target.value)}}})]),s("div",{staticClass:"form-group"},[s("button",{staticClass:"btn btn-primary col-12",on:{click:function(s){return t.search_iocs()}}},[t._v("Search")])]),t.results.length>0?s("div",{staticClass:"form-group"},[s("table",{staticClass:"table table-striped table-hover"},[t._m(0),s("tbody",t._l(t.results,(function(e){return s("tr",{key:e.tlp},[s("td",[t._v(t._s(e.value))]),s("td",{staticClass:"upper"},[t._v(t._s(e.tag))]),s("td",[s("label",{class:["tlp-"+e.tlp]},[t._v(t._s(e.tlp))])]),s("td",{staticClass:"capi"},[t._v(t._s(e.source))]),s("td",[s("button",{staticClass:"btn btn-sm",on:{click:function(s){return t.remove(e)}}},[t._v("Delete")])])])})),0)])]):0==t.first_search?s("div",[t.loading?s("div",[t._m(1)]):s("div",[s("div",{staticClass:"empty"},[s("p",{staticClass:"empty-title h5"},[t._v("IOC"),this.iocs.match(/[^\r\n]+/g).length>1?s("span",[t._v("s")]):t._e(),t._v(" not found.")]),s("p",{staticClass:"empty-subtitle"},[t._v("Try wildcard search to expend your search.")])])])]):t._e()])])},i=[function(){var t=this,s=t._self._c;return s("thead",[s("tr",[s("th",[t._v("Indicator")]),s("th",[t._v("Tag")]),s("th",[t._v("TLP")]),s("th",[t._v("Source")]),s("th",[t._v("Action")])])])},function(){var t=this,s=t._self._c;return s("div",{staticClass:"empty"},[s("p",{staticClass:"empty-title h5"},[s("span",{staticClass:"loading loading-lg"})]),s("p",{staticClass:"empty-subtitle"},[t._v("Finding your IOC(s)...")])])}],c=e("bc3a"),o=e.n(c),n={name:"iocs-search",data(){return{results:[],first_search:!0,jwt:"",loading:!1}},props:{},methods:{search_iocs:function(){return this.results=[],this.first_search=!1,this.loading=!0,this.iocs.match(/[^\r\n]+/g).forEach(t=>{t=t.trim(),"alert "!=t.slice(0,6)&&(t=t.replace(" ",""),t=t.replace("[",""),t=t.replace("]",""),t=t.replace("\\",""),t=t.replace("(",""),t=t.replace(")","")),o.a.get("/api/ioc/search/"+t,{timeout:1e4,headers:{"X-Token":this.jwt}}).then(t=>{t.data.results.length>0&&(this.results=[].concat(this.results,t.data.results)),this.loading=!1}).catch(t=>console.log(t))}),!0},remove:function(t){o.a.get("/api/ioc/delete/"+t.id,{timeout:1e4,headers:{"X-Token":this.jwt}}).then(s=>{s.data.status&&(this.results=this.results.filter((function(s){return s!=t})))}).catch(t=>console.log(t))},load_config:function(){o.a.get("/api/config/list",{timeout:1e4,headers:{"X-Token":this.jwt}}).then(t=>{t.data&&(this.config=t.data)}).catch(t=>console.log(t))},async get_jwt(){await o.a.get("/api/get-token",{timeout:1e4}).then(t=>{t.data.token&&(this.jwt=t.data.token)}).catch(t=>console.log(t))}},created:function(){this.get_jwt()}},l=n,r=e("2877"),u=Object(r["a"])(l,a,i,!1,null,null,null);s["default"]=u.exports}}]); +//# sourceMappingURL=chunk-2d0cc2b4.6cd43049.js.map \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d0cc2b4.6cd43049.js.map b/app/backend/dist/js/chunk-2d0cc2b4.6cd43049.js.map new file mode 100644 index 0000000..2cb86b8 --- /dev/null +++ b/app/backend/dist/js/chunk-2d0cc2b4.6cd43049.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/views/iocs-search.vue","webpack:///src/views/iocs-search.vue","webpack:///./src/views/iocs-search.vue?4206","webpack:///./src/views/iocs-search.vue?47c0"],"names":["render","_vm","this","_c","_self","staticClass","attrs","_v","directives","name","rawName","value","iocs","expression","domProps","on","$event","target","composing","search_iocs","results","length","_m","_l","r","key","tlp","_s","tag","class","source","remove","first_search","loading","match","_e","staticRenderFns","data","jwt","props","methods","ioc","axios","timeout","headers","then","catch","load_config","created","component"],"mappings":"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","file":"js/chunk-2d0cc2b4.6cd43049.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"backend-content\",attrs:{\"id\":\"content\"}},[_c('div',{staticClass:\"column col-12 col-xs-12\"},[_c('h3',{staticClass:\"s-title\"},[_vm._v(\"Search IOCs\")]),_c('div',{staticClass:\"form-group\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.iocs),expression:\"iocs\"}],staticClass:\"form-input\",attrs:{\"id\":\"input-example-3\",\"placeholder\":\"Paste your IOCs here\",\"rows\":\"3\"},domProps:{\"value\":(_vm.iocs)},on:{\"input\":function($event){if($event.target.composing)return;_vm.iocs=$event.target.value}}})]),_c('div',{staticClass:\"form-group\"},[_c('button',{staticClass:\"btn btn-primary col-12\",on:{\"click\":function($event){return _vm.search_iocs()}}},[_vm._v(\"Search\")])]),(_vm.results.length>0 )?_c('div',{staticClass:\"form-group\"},[_c('table',{staticClass:\"table table-striped table-hover\"},[_vm._m(0),_c('tbody',_vm._l((_vm.results),function(r){return _c('tr',{key:r.tlp},[_c('td',[_vm._v(_vm._s(r.value))]),_c('td',{staticClass:\"upper\"},[_vm._v(_vm._s(r.tag))]),_c('td',[_c('label',{class:['tlp-' + r.tlp]},[_vm._v(_vm._s(r.tlp))])]),_c('td',{staticClass:\"capi\"},[_vm._v(_vm._s(r.source))]),_c('td',[_c('button',{staticClass:\"btn btn-sm\",on:{\"click\":function($event){return _vm.remove(r)}}},[_vm._v(\"Delete\")])])])}),0)])]):(_vm.first_search==false)?_c('div',[(_vm.loading)?_c('div',[_vm._m(1)]):_c('div',[_c('div',{staticClass:\"empty\"},[_c('p',{staticClass:\"empty-title h5\"},[_vm._v(\"IOC\"),(this.iocs.match(/[^\\r\\n]+/g).length>1)?_c('span',[_vm._v(\"s\")]):_vm._e(),_vm._v(\" not found.\")]),_c('p',{staticClass:\"empty-subtitle\"},[_vm._v(\"Try wildcard search to expend your search.\")])])])]):_vm._e()])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"Indicator\")]),_c('th',[_vm._v(\"Tag\")]),_c('th',[_vm._v(\"TLP\")]),_c('th',[_vm._v(\"Source\")]),_c('th',[_vm._v(\"Action\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"empty\"},[_c('p',{staticClass:\"empty-title h5\"},[_c('span',{staticClass:\"loading loading-lg\"})]),_c('p',{staticClass:\"empty-subtitle\"},[_vm._v(\"Finding your IOC(s)...\")])])\n}]\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./iocs-search.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./iocs-search.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./iocs-search.vue?vue&type=template&id=c0ab8c66&\"\nimport script from \"./iocs-search.vue?vue&type=script&lang=js&\"\nexport * from \"./iocs-search.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d0cfa15.4b2166d6.js b/app/backend/dist/js/chunk-2d0cfa15.4b2166d6.js new file mode 100644 index 0000000..03b16ff --- /dev/null +++ b/app/backend/dist/js/chunk-2d0cfa15.4b2166d6.js @@ -0,0 +1,2 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0cfa15"],{6511:function(t,s,e){"use strict";e.r(s);var a=function(){var t=this;t._self._c;return t._m(0)},i=[function(){var t=this,s=t._self._c;return s("div",{staticClass:"backend-content",attrs:{id:"content"}},[s("div",{staticClass:"column col-8 col-xs-12"},[s("div",{staticClass:"container"},[s("h3",{staticClass:"s-title"},[t._v("Getting started")]),s("br"),s("p",[t._v("SpyGuard is a forked and enhanced version of TinyCheck, an application developed by Kaspersky. SpyGuard's main objective is to detect signs of compromise by monitoring network flows transmitted by a device.")]),s("p",[t._v("As it uses WiFi, SpyGuard can be used against a wide range of devices, such as smartphones, laptops, IOTs or workstations. To do its job, the analysis engine of SpyGuard is using Indicators of Compromise (IOCs), anomaly detection and is supported by Suricata. ")]),s("p",[t._v("This backend lets you configure your SpyGuard instance. You can push some IOCs for detection and whitelist elements which can be seen during legit communications in order to prevent false positives.")]),s("p",[t._v("_")])]),s("div",{staticClass:"backend-footer container grid-lg",attrs:{id:"copyright"}},[s("p",[t._v("For any question, bug report or feedback, please contact the "),s("a",{attrs:{href:"mailto:spyguard@protonmail.com",target:"_blank"}},[t._v("SpyGuard's Team")]),t._v(" or open an issue on the "),s("a",{attrs:{href:"https://github.com/SpyGuard/spyguard/issues",target:"_blank"}},[t._v("SpyGuard Github repository")]),t._v(".")])])])])}],n=e("2877"),o={},r=Object(n["a"])(o,a,i,!1,null,null,null);s["default"]=r.exports}}]); +//# sourceMappingURL=chunk-2d0cfa15.4b2166d6.js.map \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d0cfa15.4b2166d6.js.map b/app/backend/dist/js/chunk-2d0cfa15.4b2166d6.js.map new file mode 100644 index 0000000..ac9a46a --- /dev/null +++ b/app/backend/dist/js/chunk-2d0cfa15.4b2166d6.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/views/home.vue","webpack:///./src/views/home.vue?46ae"],"names":["render","_vm","this","_self","_c","_m","staticRenderFns","staticClass","attrs","_v","script","component"],"mappings":"uHAAA,IAAIA,EAAS,WAAkB,IAAIC,EAAIC,KAAQD,EAAIE,MAAMC,GAAG,OAAOH,EAAII,GAAG,IAEtEC,EAAkB,CAAC,WAAY,IAAIL,EAAIC,KAAKE,EAAGH,EAAIE,MAAMC,GAAG,OAAOA,EAAG,MAAM,CAACG,YAAY,kBAAkBC,MAAM,CAAC,GAAK,YAAY,CAACJ,EAAG,MAAM,CAACG,YAAY,0BAA0B,CAACH,EAAG,MAAM,CAACG,YAAY,aAAa,CAACH,EAAG,KAAK,CAACG,YAAY,WAAW,CAACN,EAAIQ,GAAG,qBAAqBL,EAAG,MAAMA,EAAG,IAAI,CAACH,EAAIQ,GAAG,oNAAoNL,EAAG,IAAI,CAACH,EAAIQ,GAAG,0QAA0QL,EAAG,IAAI,CAACH,EAAIQ,GAAG,4MAA4ML,EAAG,IAAI,CAACH,EAAIQ,GAAG,SAASL,EAAG,MAAM,CAACG,YAAY,mCAAmCC,MAAM,CAAC,GAAK,cAAc,CAACJ,EAAG,IAAI,CAACH,EAAIQ,GAAG,iEAAiEL,EAAG,IAAI,CAACI,MAAM,CAAC,KAAO,iCAAiC,OAAS,WAAW,CAACP,EAAIQ,GAAG,qBAAqBR,EAAIQ,GAAG,6BAA6BL,EAAG,IAAI,CAACI,MAAM,CAAC,KAAO,8CAA8C,OAAS,WAAW,CAACP,EAAIQ,GAAG,gCAAgCR,EAAIQ,GAAG,e,YCDr8CC,EAAS,GAKTC,EAAY,eACdD,EACAV,EACAM,GACA,EACA,KACA,KACA,MAIa,aAAAK,E","file":"js/chunk-2d0cfa15.4b2166d6.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _vm._m(0)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"backend-content\",attrs:{\"id\":\"content\"}},[_c('div',{staticClass:\"column col-8 col-xs-12\"},[_c('div',{staticClass:\"container\"},[_c('h3',{staticClass:\"s-title\"},[_vm._v(\"Getting started\")]),_c('br'),_c('p',[_vm._v(\"SpyGuard is a forked and enhanced version of TinyCheck, an application developed by Kaspersky. SpyGuard's main objective is to detect signs of compromise by monitoring network flows transmitted by a device.\")]),_c('p',[_vm._v(\"As it uses WiFi, SpyGuard can be used against a wide range of devices, such as smartphones, laptops, IOTs or workstations. To do its job, the analysis engine of SpyGuard is using Indicators of Compromise (IOCs), anomaly detection and is supported by Suricata. \")]),_c('p',[_vm._v(\"This backend lets you configure your SpyGuard instance. You can push some IOCs for detection and whitelist elements which can be seen during legit communications in order to prevent false positives.\")]),_c('p',[_vm._v(\"_\")])]),_c('div',{staticClass:\"backend-footer container grid-lg\",attrs:{\"id\":\"copyright\"}},[_c('p',[_vm._v(\"For any question, bug report or feedback, please contact the \"),_c('a',{attrs:{\"href\":\"mailto:spyguard@protonmail.com\",\"target\":\"_blank\"}},[_vm._v(\"SpyGuard's Team\")]),_vm._v(\" or open an issue on the \"),_c('a',{attrs:{\"href\":\"https://github.com/SpyGuard/spyguard/issues\",\"target\":\"_blank\"}},[_vm._v(\"SpyGuard Github repository\")]),_vm._v(\".\")])])])])\n}]\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./home.vue?vue&type=template&id=34abb80e&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d0e4bf5.fac73388.js b/app/backend/dist/js/chunk-2d0e4bf5.fac73388.js new file mode 100644 index 0000000..7e897fb --- /dev/null +++ b/app/backend/dist/js/chunk-2d0e4bf5.fac73388.js @@ -0,0 +1,2 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0e4bf5"],{9217:function(t,a,e){"use strict";e.r(a);var s=function(){var t=this,a=t._self._c;return a("div",{staticClass:"backend-content",attrs:{id:"content"}},[a("div",{staticClass:"column col-8 col-xs-12"},[a("h3",{staticClass:"s-title"},[t._v("Manage database")]),a("ul",{staticClass:"tab tab-block"},[a("li",{staticClass:"tab-item"},[a("a",{class:{active:t.tabs.import},attrs:{href:"#"},on:{click:function(a){return t.switch_tab("import")}}},[t._v("Import database")])]),a("li",{staticClass:"tab-item"},[a("a",{class:{active:t.tabs.export},attrs:{href:"#"},on:{click:function(a){return t.switch_tab("export")}}},[t._v("Export database")])])]),t.tabs.export?a("div",[a("iframe",{staticClass:"frame-export",attrs:{src:t.export_url}})]):t._e(),t.tabs.import?a("div",[a("label",{staticClass:"form-upload empty",attrs:{for:"upload"}},[a("input",{staticClass:"upload-field",attrs:{type:"file",id:"upload"},on:{change:t.import_from_file}}),a("p",{staticClass:"empty-title h5"},[t._v("Drop or select a database to import.")]),a("p",{staticClass:"empty-subtitle"},[t._v("The database needs to be an export from a SpyGuard instance.")])])]):t._e()])])},i=[],o=e("bc3a"),r=e.n(o),n={name:"db-manage",data(){return{tabs:{import:!0,export:!1},jwt:""}},props:{},methods:{switch_tab:function(t){Object.keys(this.tabs).forEach(a=>{this.tabs[a]=a==t})},import_from_file:function(t){var a=new FormData;a.append("file",t.target.files[0]),r.a.post("/api/config/db/import",a,{headers:{"Content-Type":"multipart/form-data","X-Token":this.jwt}})},async get_jwt(){await r.a.get("/api/get-token",{timeout:1e4}).then(t=>{t.data.token&&(this.jwt=t.data.token)}).catch(t=>console.log(t))}},created:function(){this.get_jwt().then(()=>{this.export_url="/api/config/db/export?token="+this.jwt})}},c=n,l=e("2877"),p=Object(l["a"])(c,s,i,!1,null,null,null);a["default"]=p.exports}}]); +//# sourceMappingURL=chunk-2d0e4bf5.fac73388.js.map \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d0e4bf5.fac73388.js.map b/app/backend/dist/js/chunk-2d0e4bf5.fac73388.js.map new file mode 100644 index 0000000..f7747ce --- /dev/null +++ b/app/backend/dist/js/chunk-2d0e4bf5.fac73388.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/views/db-manage.vue","webpack:///src/views/db-manage.vue","webpack:///./src/views/db-manage.vue?9845","webpack:///./src/views/db-manage.vue?7e0e"],"names":["render","_vm","this","_c","_self","staticClass","attrs","_v","class","active","tabs","import","on","$event","switch_tab","export","export_url","_e","import_from_file","staticRenderFns","name","data","jwt","props","methods","Object","formData","axios","headers","timeout","then","catch","created","component"],"mappings":"uHAAA,IAAIA,EAAS,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,kBAAkBC,MAAM,CAAC,GAAK,YAAY,CAACH,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,KAAK,CAACE,YAAY,WAAW,CAACJ,EAAIM,GAAG,qBAAqBJ,EAAG,KAAK,CAACE,YAAY,iBAAiB,CAACF,EAAG,KAAK,CAACE,YAAY,YAAY,CAACF,EAAG,IAAI,CAACK,MAAM,CAAEC,OAAQR,EAAIS,KAAKC,QAASL,MAAM,CAAC,KAAO,KAAKM,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOZ,EAAIa,WAAW,aAAa,CAACb,EAAIM,GAAG,uBAAuBJ,EAAG,KAAK,CAACE,YAAY,YAAY,CAACF,EAAG,IAAI,CAACK,MAAM,CAAEC,OAAQR,EAAIS,KAAKK,QAAST,MAAM,CAAC,KAAO,KAAKM,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOZ,EAAIa,WAAW,aAAa,CAACb,EAAIM,GAAG,yBAA0BN,EAAIS,KAAKK,OAAQZ,EAAG,MAAM,CAACA,EAAG,SAAS,CAACE,YAAY,eAAeC,MAAM,CAAC,IAAML,EAAIe,gBAAgBf,EAAIgB,KAAMhB,EAAIS,KAAKC,OAAQR,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACE,YAAY,oBAAoBC,MAAM,CAAC,IAAM,WAAW,CAACH,EAAG,QAAQ,CAACE,YAAY,eAAeC,MAAM,CAAC,KAAO,OAAO,GAAK,UAAUM,GAAG,CAAC,OAASX,EAAIiB,oBAAoBf,EAAG,IAAI,CAACE,YAAY,kBAAkB,CAACJ,EAAIM,GAAG,0CAA0CJ,EAAG,IAAI,CAACE,YAAY,kBAAkB,CAACJ,EAAIM,GAAG,sEAAsEN,EAAIgB,UAElqCE,EAAkB,G,qBC2BP,GACfC,iBACAC,OACA,OACAX,MAAA,qBACAY,SAGAC,SACAC,SACAV,uBACAW,mCAEA,aADA,QAOAP,6BACA,mBACAQ,mCACAC,oCACAC,SACA,qCACA,uBAIA,sBACA,0BAAAC,cACAC,SACA,eACA,yBAGAC,2BAGAC,mBACA,yBACA,4DCtEmV,I,YCO/UC,EAAY,eACd,EACAjC,EACAmB,GACA,EACA,KACA,KACA,MAIa,aAAAc,E","file":"js/chunk-2d0e4bf5.fac73388.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"backend-content\",attrs:{\"id\":\"content\"}},[_c('div',{staticClass:\"column col-8 col-xs-12\"},[_c('h3',{staticClass:\"s-title\"},[_vm._v(\"Manage database\")]),_c('ul',{staticClass:\"tab tab-block\"},[_c('li',{staticClass:\"tab-item\"},[_c('a',{class:{ active: _vm.tabs.import },attrs:{\"href\":\"#\"},on:{\"click\":function($event){return _vm.switch_tab('import')}}},[_vm._v(\"Import database\")])]),_c('li',{staticClass:\"tab-item\"},[_c('a',{class:{ active: _vm.tabs.export },attrs:{\"href\":\"#\"},on:{\"click\":function($event){return _vm.switch_tab('export')}}},[_vm._v(\"Export database\")])])]),(_vm.tabs.export)?_c('div',[_c('iframe',{staticClass:\"frame-export\",attrs:{\"src\":_vm.export_url}})]):_vm._e(),(_vm.tabs.import)?_c('div',[_c('label',{staticClass:\"form-upload empty\",attrs:{\"for\":\"upload\"}},[_c('input',{staticClass:\"upload-field\",attrs:{\"type\":\"file\",\"id\":\"upload\"},on:{\"change\":_vm.import_from_file}}),_c('p',{staticClass:\"empty-title h5\"},[_vm._v(\"Drop or select a database to import.\")]),_c('p',{staticClass:\"empty-subtitle\"},[_vm._v(\"The database needs to be an export from a SpyGuard instance.\")])])]):_vm._e()])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./db-manage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./db-manage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./db-manage.vue?vue&type=template&id=70ca1b12&\"\nimport script from \"./db-manage.vue?vue&type=script&lang=js&\"\nexport * from \"./db-manage.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d20faf8.c983e105.js b/app/backend/dist/js/chunk-2d20faf8.c983e105.js new file mode 100644 index 0000000..51e6f0e --- /dev/null +++ b/app/backend/dist/js/chunk-2d20faf8.c983e105.js @@ -0,0 +1,2 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d20faf8"],{b54c:function(t,e,a){"use strict";a.r(e);var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"backend-content",attrs:{id:"content"}},[e("div",{staticClass:"column col-8 col-xs-12"},[e("h3",{staticClass:"s-title"},[t._v("Manage watchers instances")]),e("ul",{staticClass:"tab tab-block"},[e("li",{staticClass:"tab-item"},[e("a",{class:{active:t.tabs.addwatcher},attrs:{href:"#"},on:{click:function(e){return t.switch_tab("addwatcher")}}},[t._v("Add watcher")])]),e("li",{staticClass:"tab-item"},[e("a",{class:{active:t.tabs.instances},attrs:{href:"#"},on:{click:function(e){return t.switch_tab("instances")}}},[t._v("Existing watchers")])])]),t.tabs.addwatcher?e("div",[e("div",{staticClass:"misp-form"},[e("label",{staticClass:"misp-label"},[t._v("Watcher name")]),e("span"),e("input",{directives:[{name:"model",rawName:"v-model",value:t.watcher.name,expression:"watcher.name"}],ref:"watcher_name",staticClass:"form-input",attrs:{type:"text",placeholder:"My incredible watcher",required:""},domProps:{value:t.watcher.name},on:{input:function(e){e.target.composing||t.$set(t.watcher,"name",e.target.value)}}}),e("label",{staticClass:"misp-label"},[t._v("Watcher URL")]),e("span"),e("input",{directives:[{name:"model",rawName:"v-model",value:t.watcher.url,expression:"watcher.url"}],ref:"watcher_url",staticClass:"form-input",attrs:{type:"text",placeholder:"https://url.of.my.watcher.com/watcher.json",required:""},domProps:{value:t.watcher.url},on:{input:function(e){e.target.composing||t.$set(t.watcher,"url",e.target.value)}}}),e("label",{staticClass:"misp-label"},[t._v("Watcher Type")]),e("span"),e("select",{directives:[{name:"model",rawName:"v-model",value:t.watcher.type,expression:"watcher.type"}],staticClass:"form-select width-full",attrs:{placeholder:"test"},on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){var e="_value"in t?t._value:t.value;return e}));t.$set(t.watcher,"type",e.target.multiple?a:a[0])}}},[e("option",{attrs:{value:"iocs"}},[t._v("IOCs")]),e("option",{attrs:{value:"whitelist"}},[t._v("Whitelist")])])]),e("button",{staticClass:"btn-primary btn col-12",on:{click:function(e){return t.add_instance()}}},[t._v("Add watcher")]),t.added?e("div",{staticClass:"form-group"},[e("div",{staticClass:"toast toast-success"},[t._v(" ✓ Watcher added successfully. Redirecting to watchers in 2 seconds. ")])]):t._e(),t.error?e("div",{staticClass:"form-group"},[e("div",{staticClass:"toast toast-error"},[t._v(" ✗ Watcher not added. "+t._s(t.error)+" ")])]):t._e()]):t._e(),t.tabs.instances?e("div",{staticClass:"form-group"},[t.instances.length?e("div",[e("table",{staticClass:"table table-striped table-hover"},[t._m(0),e("tbody",t._l(t.instances,(function(a){return e("tr",{key:a.id},[e("td",[t._v(t._s(a.type.toUpperCase()))]),e("td",[t._v(t._s(a.name))]),e("td",[a.status?e("span",{staticClass:"instance-online"},[t._v("✓ ONLINE")]):e("span",{staticClass:"instance-offline"},[t._v("⚠ OFFLINE")])]),e("td",[e("button",{staticClass:"btn btn-sm",on:{click:function(e){return t.delete_instance(a)}}},[t._v("Delete")])])])})),0)])]):e("div",[e("div",{staticClass:"empty"},[t.loading?e("div",[t._m(1),e("p",{staticClass:"empty-subtitle"},[t._v("Testing and loading the watchers.")])]):e("div",[e("p",{staticClass:"empty-title h5"},[t._v("No watcher found.")]),e("p",{staticClass:"empty-subtitle"},[t._v("Do not hesitate to add a watcher.")])])])])]):t._e()])])},i=[function(){var t=this,e=t._self._c;return e("thead",[e("tr",[e("th",[t._v("Type")]),e("th",[t._v("Name")]),e("th",[t._v("Status")]),e("th",[t._v("Action")])])])},function(){var t=this,e=t._self._c;return e("p",{staticClass:"empty-title h5"},[e("span",{staticClass:"loading loading-lg"})])}],n=a("bc3a"),c=a.n(n),r={name:"managewatchers",data(){return{error:!1,loading:!1,added:!1,watcher:{name:"",url:"",type:"iocs"},instances:[],tabs:{addwatcher:!0,instances:!1},jwt:""}},props:{},methods:{add_instance:function(){this.added=!1,this.error=!1,this.watcher.name&&this.watcher.url&&this.watcher.type&&c.a.post("/api/watchers/add",{data:{instance:this.watcher}},{headers:{"X-Token":this.jwt}}).then(t=>{t.data.status?(this.added=!0,setTimeout(function(){this.switch_tab("instances"),this.watcher={name:"",url:""},this.added=!1}.bind(this),2e3)):this.error=t.data.message}).catch(t=>console.log(t))},delete_instance(t){c.a.get("/api/watchers/delete/"+t.id,{timeout:1e4,headers:{"X-Token":this.jwt}}).then(e=>{e.data.status&&(this.instances=this.instances.filter((function(e){return e!=t})))}).catch(t=>console.log(t))},get_watchers_instances(){this.loading=!0,this.instances=[],c.a.get("/api/watchers/get_all",{timeout:1e4,headers:{"X-Token":this.jwt}}).then(t=>{t.data.results&&(this.instances=t.data.results),this.loading=!1}).catch(t=>console.log(t))},switch_tab:function(t){Object.keys(this.tabs).forEach(e=>{e==t?(this.tabs[e]=!0,"instances"==e&&this.get_watchers_instances()):this.tabs[e]=!1})},get_jwt(){c.a.get("/api/get-token",{timeout:1e4}).then(t=>{t.data.token&&(this.jwt=t.data.token)}).catch(t=>console.log(t))}},created:function(){this.get_jwt()}},l=r,o=a("2877"),d=Object(o["a"])(l,s,i,!1,null,null,null);e["default"]=d.exports}}]); +//# sourceMappingURL=chunk-2d20faf8.c983e105.js.map \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d20faf8.c983e105.js.map b/app/backend/dist/js/chunk-2d20faf8.c983e105.js.map new file mode 100644 index 0000000..f23bf9d --- /dev/null +++ b/app/backend/dist/js/chunk-2d20faf8.c983e105.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/views/instance-watchers.vue","webpack:///src/views/instance-watchers.vue","webpack:///./src/views/instance-watchers.vue?9352","webpack:///./src/views/instance-watchers.vue?52d4"],"names":["render","_vm","this","_c","_self","staticClass","attrs","_v","class","active","tabs","addwatcher","on","$event","switch_tab","instances","directives","name","rawName","value","watcher","expression","ref","domProps","target","composing","$set","url","type","$$selectedVal","Array","prototype","filter","call","options","o","selected","map","val","_value","multiple","add_instance","added","_e","error","_s","length","_m","_l","i","key","id","toUpperCase","status","delete_instance","loading","staticRenderFns","data","jwt","props","methods","axios","instance","headers","setTimeout","catch","timeout","then","get_watchers_instances","Object","get_jwt","created","component"],"mappings":"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","file":"js/chunk-2d20faf8.c983e105.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"backend-content\",attrs:{\"id\":\"content\"}},[_c('div',{staticClass:\"column col-8 col-xs-12\"},[_c('h3',{staticClass:\"s-title\"},[_vm._v(\"Manage watchers instances\")]),_c('ul',{staticClass:\"tab tab-block\"},[_c('li',{staticClass:\"tab-item\"},[_c('a',{class:{ active: _vm.tabs.addwatcher },attrs:{\"href\":\"#\"},on:{\"click\":function($event){return _vm.switch_tab('addwatcher')}}},[_vm._v(\"Add watcher\")])]),_c('li',{staticClass:\"tab-item\"},[_c('a',{class:{ active: _vm.tabs.instances },attrs:{\"href\":\"#\"},on:{\"click\":function($event){return _vm.switch_tab('instances')}}},[_vm._v(\"Existing watchers\")])])]),(_vm.tabs.addwatcher)?_c('div',[_c('div',{staticClass:\"misp-form\"},[_c('label',{staticClass:\"misp-label\"},[_vm._v(\"Watcher name\")]),_c('span'),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.watcher.name),expression:\"watcher.name\"}],ref:\"watcher_name\",staticClass:\"form-input\",attrs:{\"type\":\"text\",\"placeholder\":\"My incredible watcher\",\"required\":\"\"},domProps:{\"value\":(_vm.watcher.name)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.watcher, \"name\", $event.target.value)}}}),_c('label',{staticClass:\"misp-label\"},[_vm._v(\"Watcher URL\")]),_c('span'),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.watcher.url),expression:\"watcher.url\"}],ref:\"watcher_url\",staticClass:\"form-input\",attrs:{\"type\":\"text\",\"placeholder\":\"https://url.of.my.watcher.com/watcher.json\",\"required\":\"\"},domProps:{\"value\":(_vm.watcher.url)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.watcher, \"url\", $event.target.value)}}}),_c('label',{staticClass:\"misp-label\"},[_vm._v(\"Watcher Type\")]),_c('span'),_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.watcher.type),expression:\"watcher.type\"}],staticClass:\"form-select width-full\",attrs:{\"placeholder\":\"test\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(_vm.watcher, \"type\", $event.target.multiple ? $$selectedVal : $$selectedVal[0])}}},[_c('option',{attrs:{\"value\":\"iocs\"}},[_vm._v(\"IOCs\")]),_c('option',{attrs:{\"value\":\"whitelist\"}},[_vm._v(\"Whitelist\")])])]),_c('button',{staticClass:\"btn-primary btn col-12\",on:{\"click\":function($event){return _vm.add_instance()}}},[_vm._v(\"Add watcher\")]),(_vm.added)?_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"toast toast-success\"},[_vm._v(\" ✓ Watcher added successfully. Redirecting to watchers in 2 seconds. \")])]):_vm._e(),(_vm.error)?_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"toast toast-error\"},[_vm._v(\" ✗ Watcher not added. \"+_vm._s(_vm.error)+\" \")])]):_vm._e()]):_vm._e(),(_vm.tabs.instances)?_c('div',{staticClass:\"form-group\"},[(_vm.instances.length)?_c('div',[_c('table',{staticClass:\"table table-striped table-hover\"},[_vm._m(0),_c('tbody',_vm._l((_vm.instances),function(i){return _c('tr',{key:i.id},[_c('td',[_vm._v(_vm._s(i.type.toUpperCase()))]),_c('td',[_vm._v(_vm._s(i.name))]),_c('td',[(i.status)?_c('span',{staticClass:\"instance-online\"},[_vm._v(\"✓ ONLINE\")]):_c('span',{staticClass:\"instance-offline\"},[_vm._v(\"⚠ OFFLINE\")])]),_c('td',[_c('button',{staticClass:\"btn btn-sm\",on:{\"click\":function($event){return _vm.delete_instance(i)}}},[_vm._v(\"Delete\")])])])}),0)])]):_c('div',[_c('div',{staticClass:\"empty\"},[(_vm.loading)?_c('div',[_vm._m(1),_c('p',{staticClass:\"empty-subtitle\"},[_vm._v(\"Testing and loading the watchers.\")])]):_c('div',[_c('p',{staticClass:\"empty-title h5\"},[_vm._v(\"No watcher found.\")]),_c('p',{staticClass:\"empty-subtitle\"},[_vm._v(\"Do not hesitate to add a watcher.\")])])])])]):_vm._e()])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"Type\")]),_c('th',[_vm._v(\"Name\")]),_c('th',[_vm._v(\"Status\")]),_c('th',[_vm._v(\"Action\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('p',{staticClass:\"empty-title h5\"},[_c('span',{staticClass:\"loading loading-lg\"})])\n}]\n\nexport { render, staticRenderFns }","\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./instance-watchers.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./instance-watchers.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./instance-watchers.vue?vue&type=template&id=aa45beee&\"\nimport script from \"./instance-watchers.vue?vue&type=script&lang=js&\"\nexport * from \"./instance-watchers.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d215cd3.f0d8ba06.js b/app/backend/dist/js/chunk-2d215cd3.f0d8ba06.js new file mode 100644 index 0000000..b5665d3 --- /dev/null +++ b/app/backend/dist/js/chunk-2d215cd3.f0d8ba06.js @@ -0,0 +1,2 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d215cd3"],{c06f:function(t,e,s){"use strict";s.r(e);var a=function(){var t=this,e=t._self._c;return e("div",{staticClass:"backend-content",attrs:{id:"content"}},[e("div",{staticClass:"column col-8 col-xs-12"},[e("h3",{staticClass:"s-title"},[t._v("Manage whitelisted elements")]),e("ul",{staticClass:"tab tab-block"},[e("li",{staticClass:"tab-item"},[e("a",{class:{active:t.tabs.bulk},attrs:{href:"#"},on:{click:function(e){return t.switch_tab("bulk")}}},[t._v("Bulk elements import")])]),e("li",{staticClass:"tab-item"},[e("a",{class:{active:t.tabs.file},attrs:{href:"#"},on:{click:function(e){return t.switch_tab("file")}}},[t._v("Import from file")])]),e("li",{staticClass:"tab-item"},[e("a",{class:{active:t.tabs.export},attrs:{href:"#"},on:{click:function(e){return t.switch_tab("export")}}},[t._v("Export elements")])])]),t.tabs.export?e("div",[e("iframe",{staticClass:"frame-export",attrs:{src:t.export_url}})]):t._e(),t.tabs.file?e("div",[e("label",{staticClass:"form-upload empty",attrs:{for:"upload"}},[e("input",{staticClass:"upload-field",attrs:{type:"file",id:"upload"},on:{change:t.import_from_file}}),e("p",{staticClass:"empty-title h5"},[t._v("Drop or select a file to import.")]),e("p",{staticClass:"empty-subtitle"},[t._v("The file needs to be an whitelist file export from a SpyGuard instance.")])])]):t._e(),t.tabs.bulk?e("div",[e("div",{staticClass:"form-group"},[e("select",{directives:[{name:"model",rawName:"v-model",value:t.type,expression:"type"}],staticClass:"form-select width-full",attrs:{placeholder:"test"},on:{change:function(e){var s=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){var e="_value"in t?t._value:t.value;return e}));t.type=e.target.multiple?s:s[0]}}},[e("option",{attrs:{value:""}},[t._v("Elements Type")]),e("option",{attrs:{value:"unknown"}},[t._v("Multiple (regex parsing)")]),t._l(t.types,(function(s){return e("option",{key:s.type,domProps:{value:s.type}},[t._v(" "+t._s(s.name)+" ")])}))],2)]),e("div",{staticClass:"form-group"},[e("textarea",{directives:[{name:"model",rawName:"v-model",value:t.elements,expression:"elements"}],staticClass:"form-input",attrs:{id:"input-example-3",placeholder:"Paste the elements to be whitelisted here",rows:"15"},domProps:{value:t.elements},on:{input:function(e){e.target.composing||(t.elements=e.target.value)}}})]),e("div",{staticClass:"form-group"},[e("button",{staticClass:"btn-primary btn col-12",on:{click:function(e){return t.import_from_bulk()}}},[t._v("Whitelist elements")])])]):t._e(),t.imported.length>0?e("div",{staticClass:"form-group"},[e("div",{staticClass:"toast toast-success"},[t._v(" ✓ "+t._s(t.imported.length)+" IOC"),t.errors.length>1?e("span",[t._v("s")]):t._e(),t._v(" imported successfully. ")])]):t._e(),t.errors.length>0?e("div",[e("div",{staticClass:"form-group"},[e("div",{staticClass:"toast toast-error"},[t._v(" ✗ "+t._s(t.errors.length)+" IOC"),t.errors.length>1?e("span",[t._v("s")]):t._e(),t._v(" not imported, see details below. ")])]),e("div",{staticClass:"form-group"},[e("table",{staticClass:"table table-striped table-hover"},[t._m(0),e("tbody",t._l(t.errors,(function(s){return e("tr",{key:s.element},[e("td",[t._v(t._s(s.element))]),e("td",[t._v(t._s(s.message))])])})),0)])])]):1==t.type_tag_error?e("div",[t._m(1),t._m(2)]):t._e()])])},i=[function(){var t=this,e=t._self._c;return e("thead",[e("tr",[e("th",[t._v("Element")]),e("th",[t._v("Importation error")])])])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"form-group"},[e("div",{staticClass:"toast toast-error"},[t._v(" ✗ IOC(s) not imported, see details below. ")])])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"form-group"},[e("div",{staticClass:"empty"},[e("p",{staticClass:"empty-title h5"},[t._v("Please select a tag and a type.")]),e("p",{staticClass:"empty-subtitle"},[t._v('If different IOCs types, select "Unknown (regex parsing)".')])])])}],r=(s("14d9"),s("bc3a")),o=s.n(r),l={name:"manageiocs",data(){return{type:"",elements:"",types:[],errors:[],imported:[],wrong_wh_file:!1,tabs:{bulk:!0,file:!1,export:!1},jwt:"",export_url:""}},props:{},methods:{import_from_bulk:function(){this.errors=[],this.imported=[],""!=this.type?(this.elements.match(/[^\r\n]+/g).forEach(t=>{this.import_element(this.type,t)}),this.elements=""):this.type_tag_error=!0},import_element:function(t,e){""!=e&&"#"!=e.slice(0,1)&&o.a.get(`/api/whitelist/add/${t.trim()}/${e.trim()}`,{timeout:1e4,headers:{"X-Token":this.jwt}}).then(t=>{t.data.status?this.imported.push(t.data):t.data.message&&this.errors.push(t.data)}).catch(t=>console.log(t))},enrich_types:function(){o.a.get("/api/whitelist/get/types",{timeout:1e4,headers:{"X-Token":this.jwt}}).then(t=>{t.data.types&&(this.types=t.data.types)}).catch(t=>console.log(t))},switch_tab:function(t){this.errors=[],this.imported=[],Object.keys(this.tabs).forEach(e=>{this.tabs[e]=e==t})},import_from_file:function(t){this.errors=[],this.imported=[];const e=t.target.files[0],s=new FileReader;s.onload=t=>this.$emit("load",t.target.result),s.onload=()=>{try{JSON.parse(s.result).elements.forEach(t=>{this.import_element(t["type"],t["element"])})}catch(t){this.wrong_wh_file=!0}},s.readAsText(e)},async get_jwt(){await o.a.get("/api/get-token",{timeout:1e4}).then(t=>{t.data.token&&(this.jwt=t.data.token)}).catch(t=>console.log(t))}},created:function(){this.get_jwt().then(()=>{this.enrich_types(),this.export_url="/api/whitelist/export?token="+this.jwt})}},n=l,c=s("2877"),p=Object(c["a"])(n,a,i,!1,null,null,null);e["default"]=p.exports}}]); +//# sourceMappingURL=chunk-2d215cd3.f0d8ba06.js.map \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d215cd3.f0d8ba06.js.map b/app/backend/dist/js/chunk-2d215cd3.f0d8ba06.js.map new file mode 100644 index 0000000..b880702 --- /dev/null +++ b/app/backend/dist/js/chunk-2d215cd3.f0d8ba06.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/views/whitelist-manage.vue","webpack:///src/views/whitelist-manage.vue","webpack:///./src/views/whitelist-manage.vue?21b2","webpack:///./src/views/whitelist-manage.vue?a1c1"],"names":["render","_vm","this","_c","_self","staticClass","attrs","_v","class","active","tabs","bulk","on","$event","switch_tab","file","export","export_url","_e","import_from_file","directives","name","rawName","value","type","expression","$$selectedVal","Array","prototype","filter","call","target","options","o","selected","map","val","_value","multiple","_l","types","t","key","domProps","_s","elements","composing","import_from_bulk","imported","length","errors","_m","e","element","message","type_tag_error","staticRenderFns","data","wrong_wh_file","jwt","props","methods","import_element","axios","timeout","headers","catch","enrich_types","then","Object","reader","JSON","created","component"],"mappings":"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","file":"js/chunk-2d215cd3.f0d8ba06.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"backend-content\",attrs:{\"id\":\"content\"}},[_c('div',{staticClass:\"column col-8 col-xs-12\"},[_c('h3',{staticClass:\"s-title\"},[_vm._v(\"Manage whitelisted elements\")]),_c('ul',{staticClass:\"tab tab-block\"},[_c('li',{staticClass:\"tab-item\"},[_c('a',{class:{ active: _vm.tabs.bulk },attrs:{\"href\":\"#\"},on:{\"click\":function($event){return _vm.switch_tab('bulk')}}},[_vm._v(\"Bulk elements import\")])]),_c('li',{staticClass:\"tab-item\"},[_c('a',{class:{ active: _vm.tabs.file },attrs:{\"href\":\"#\"},on:{\"click\":function($event){return _vm.switch_tab('file')}}},[_vm._v(\"Import from file\")])]),_c('li',{staticClass:\"tab-item\"},[_c('a',{class:{ active: _vm.tabs.export },attrs:{\"href\":\"#\"},on:{\"click\":function($event){return _vm.switch_tab('export')}}},[_vm._v(\"Export elements\")])])]),(_vm.tabs.export)?_c('div',[_c('iframe',{staticClass:\"frame-export\",attrs:{\"src\":_vm.export_url}})]):_vm._e(),(_vm.tabs.file)?_c('div',[_c('label',{staticClass:\"form-upload empty\",attrs:{\"for\":\"upload\"}},[_c('input',{staticClass:\"upload-field\",attrs:{\"type\":\"file\",\"id\":\"upload\"},on:{\"change\":_vm.import_from_file}}),_c('p',{staticClass:\"empty-title h5\"},[_vm._v(\"Drop or select a file to import.\")]),_c('p',{staticClass:\"empty-subtitle\"},[_vm._v(\"The file needs to be an whitelist file export from a SpyGuard instance.\")])])]):_vm._e(),(_vm.tabs.bulk)?_c('div',[_c('div',{staticClass:\"form-group\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.type),expression:\"type\"}],staticClass:\"form-select width-full\",attrs:{\"placeholder\":\"test\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.type=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',{attrs:{\"value\":\"\"}},[_vm._v(\"Elements Type\")]),_c('option',{attrs:{\"value\":\"unknown\"}},[_vm._v(\"Multiple (regex parsing)\")]),_vm._l((_vm.types),function(t){return _c('option',{key:t.type,domProps:{\"value\":t.type}},[_vm._v(\" \"+_vm._s(t.name)+\" \")])})],2)]),_c('div',{staticClass:\"form-group\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.elements),expression:\"elements\"}],staticClass:\"form-input\",attrs:{\"id\":\"input-example-3\",\"placeholder\":\"Paste the elements to be whitelisted here\",\"rows\":\"15\"},domProps:{\"value\":(_vm.elements)},on:{\"input\":function($event){if($event.target.composing)return;_vm.elements=$event.target.value}}})]),_c('div',{staticClass:\"form-group\"},[_c('button',{staticClass:\"btn-primary btn col-12\",on:{\"click\":function($event){return _vm.import_from_bulk()}}},[_vm._v(\"Whitelist elements\")])])]):_vm._e(),(_vm.imported.length>0)?_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"toast toast-success\"},[_vm._v(\" ✓ \"+_vm._s(_vm.imported.length)+\" IOC\"),(_vm.errors.length>1)?_c('span',[_vm._v(\"s\")]):_vm._e(),_vm._v(\" imported successfully. \")])]):_vm._e(),(_vm.errors.length>0)?_c('div',[_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"toast toast-error\"},[_vm._v(\" ✗ \"+_vm._s(_vm.errors.length)+\" IOC\"),(_vm.errors.length>1)?_c('span',[_vm._v(\"s\")]):_vm._e(),_vm._v(\" not imported, see details below. \")])]),_c('div',{staticClass:\"form-group\"},[_c('table',{staticClass:\"table table-striped table-hover\"},[_vm._m(0),_c('tbody',_vm._l((_vm.errors),function(e){return _c('tr',{key:e.element},[_c('td',[_vm._v(_vm._s(e.element))]),_c('td',[_vm._v(_vm._s(e.message))])])}),0)])])]):(_vm.type_tag_error==true)?_c('div',[_vm._m(1),_vm._m(2)]):_vm._e()])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"Element\")]),_c('th',[_vm._v(\"Importation error\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"toast toast-error\"},[_vm._v(\" ✗ IOC(s) not imported, see details below. \")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"empty\"},[_c('p',{staticClass:\"empty-title h5\"},[_vm._v(\"Please select a tag and a type.\")]),_c('p',{staticClass:\"empty-subtitle\"},[_vm._v(\"If different IOCs types, select \\\"Unknown (regex parsing)\\\".\")])])])\n}]\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./whitelist-manage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./whitelist-manage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./whitelist-manage.vue?vue&type=template&id=cb356830&\"\nimport script from \"./whitelist-manage.vue?vue&type=script&lang=js&\"\nexport * from \"./whitelist-manage.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d2245cf.ea4d33bd.js b/app/backend/dist/js/chunk-2d2245cf.ea4d33bd.js new file mode 100644 index 0000000..fa0e083 --- /dev/null +++ b/app/backend/dist/js/chunk-2d2245cf.ea4d33bd.js @@ -0,0 +1,2 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d2245cf"],{e08f:function(t,e,s){"use strict";s.r(e);var a=function(){var t=this,e=t._self._c;return e("div",{staticClass:"backend-content",attrs:{id:"content"}},[e("div",{staticClass:"column col-12 col-xs-12"},[e("h3",{staticClass:"s-title"},[t._v("Search whitelisted elements")]),e("div",{staticClass:"form-group"},[e("textarea",{directives:[{name:"model",rawName:"v-model",value:t.elements,expression:"elements"}],staticClass:"form-input",attrs:{id:"input-example-3",placeholder:"Paste the elements here",rows:"3"},domProps:{value:t.elements},on:{input:function(e){e.target.composing||(t.elements=e.target.value)}}})]),e("div",{staticClass:"form-group"},[e("button",{staticClass:"btn btn-primary col-12",on:{click:function(e){return t.search_elements()}}},[t._v("Search")])]),t.results.length>0?e("div",{staticClass:"form-group"},[e("table",{staticClass:"table table-striped table-hover"},[t._m(0),e("tbody",t._l(t.results,(function(s){return e("tr",{key:s.element},[e("td",[t._v(t._s(s.element))]),e("td",[t._v(t._s(s.type))]),e("td",[e("button",{staticClass:"btn btn-sm",on:{click:function(e){return t.remove(s)}}},[t._v("Delete")])])])})),0)])]):0==t.first_search?e("div",[e("div",{staticClass:"empty"},[e("p",{staticClass:"empty-title h5"},[t._v("Element"),this.elements.match(/[^\r\n]+/g).length>1?e("span",[t._v("s")]):t._e(),t._v(" not found.")]),e("p",{staticClass:"empty-subtitle"},[t._v("Try wildcard search to expend your search.")])])]):t._e()])])},n=[function(){var t=this,e=t._self._c;return e("thead",[e("tr",[e("th",[t._v("Element")]),e("th",[t._v("Element type")]),e("th")])])}],l=s("bc3a"),r=s.n(l),i={name:"elements-search",data(){return{results:[],first_search:!0,jwt:""}},props:{},methods:{search_elements:function(){return this.results=[],this.first_search=!1,this.elements.match(/[^\r\n]+/g).forEach(t=>{r.a.get("/api/whitelist/search/"+t.trim(),{timeout:1e4,headers:{"X-Token":this.jwt}}).then(t=>{t.data.results.length>0&&(this.results=[].concat(this.results,t.data.results))}).catch(t=>console.log(t))}),!0},remove:function(t){r.a.get("/api/whitelist/delete/"+t.id,{timeout:1e4,headers:{"X-Token":this.jwt}}).then(e=>{e.data.status&&(this.results=this.results.filter((function(e){return e!=t})))}).catch(t=>console.log(t))},async get_jwt(){await r.a.get("/api/get-token",{timeout:1e4}).then(t=>{t.data.token&&(this.jwt=t.data.token)}).catch(t=>console.log(t))}},created:function(){this.get_jwt()}},c=i,o=s("2877"),h=Object(o["a"])(c,a,n,!1,null,null,null);e["default"]=h.exports}}]); +//# sourceMappingURL=chunk-2d2245cf.ea4d33bd.js.map \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d2245cf.ea4d33bd.js.map b/app/backend/dist/js/chunk-2d2245cf.ea4d33bd.js.map new file mode 100644 index 0000000..9f768a0 --- /dev/null +++ b/app/backend/dist/js/chunk-2d2245cf.ea4d33bd.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/views/whitelist-search.vue","webpack:///src/views/whitelist-search.vue","webpack:///./src/views/whitelist-search.vue?52ac","webpack:///./src/views/whitelist-search.vue?d43f"],"names":["render","_vm","this","_c","_self","staticClass","attrs","_v","directives","name","rawName","value","elements","expression","domProps","on","$event","target","composing","search_elements","results","length","_m","_l","r","key","element","_s","type","remove","first_search","match","_e","staticRenderFns","data","jwt","props","methods","axios","timeout","headers","catch","then","created","component"],"mappings":"uHAAA,IAAIA,EAAS,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,kBAAkBC,MAAM,CAAC,GAAK,YAAY,CAACH,EAAG,MAAM,CAACE,YAAY,2BAA2B,CAACF,EAAG,KAAK,CAACE,YAAY,WAAW,CAACJ,EAAIM,GAAG,iCAAiCJ,EAAG,MAAM,CAACE,YAAY,cAAc,CAACF,EAAG,WAAW,CAACK,WAAW,CAAC,CAACC,KAAK,QAAQC,QAAQ,UAAUC,MAAOV,EAAIW,SAAUC,WAAW,aAAaR,YAAY,aAAaC,MAAM,CAAC,GAAK,kBAAkB,YAAc,0BAA0B,KAAO,KAAKQ,SAAS,CAAC,MAASb,EAAIW,UAAWG,GAAG,CAAC,MAAQ,SAASC,GAAWA,EAAOC,OAAOC,YAAiBjB,EAAIW,SAASI,EAAOC,OAAON,aAAYR,EAAG,MAAM,CAACE,YAAY,cAAc,CAACF,EAAG,SAAS,CAACE,YAAY,yBAAyBU,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOf,EAAIkB,qBAAqB,CAAClB,EAAIM,GAAG,cAAeN,EAAImB,QAAQC,OAAO,EAAIlB,EAAG,MAAM,CAACE,YAAY,cAAc,CAACF,EAAG,QAAQ,CAACE,YAAY,mCAAmC,CAACJ,EAAIqB,GAAG,GAAGnB,EAAG,QAAQF,EAAIsB,GAAItB,EAAImB,SAAS,SAASI,GAAG,OAAOrB,EAAG,KAAK,CAACsB,IAAID,EAAEE,SAAS,CAACvB,EAAG,KAAK,CAACF,EAAIM,GAAGN,EAAI0B,GAAGH,EAAEE,YAAYvB,EAAG,KAAK,CAACF,EAAIM,GAAGN,EAAI0B,GAAGH,EAAEI,SAASzB,EAAG,KAAK,CAACA,EAAG,SAAS,CAACE,YAAY,aAAaU,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOf,EAAI4B,OAAOL,MAAM,CAACvB,EAAIM,GAAG,mBAAkB,OAA0B,GAAlBN,EAAI6B,aAAqB3B,EAAG,MAAM,CAACA,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,kBAAkB,CAACJ,EAAIM,GAAG,WAAYL,KAAKU,SAASmB,MAAM,aAAaV,OAAO,EAAGlB,EAAG,OAAO,CAACF,EAAIM,GAAG,OAAON,EAAI+B,KAAK/B,EAAIM,GAAG,iBAAiBJ,EAAG,IAAI,CAACE,YAAY,kBAAkB,CAACJ,EAAIM,GAAG,oDAAoDN,EAAI+B,UAEzgDC,EAAkB,CAAC,WAAY,IAAIhC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,QAAQ,CAACA,EAAG,KAAK,CAACA,EAAG,KAAK,CAACF,EAAIM,GAAG,aAAaJ,EAAG,KAAK,CAACF,EAAIM,GAAG,kBAAkBJ,EAAG,Y,qBCuC/I,GACfM,uBACAyB,OACA,OACAd,WACAU,gBACAK,SAGAC,SACAC,SACAlB,2BAcA,OAbA,gBACA,qBACA,6CACAmB,2CACAC,YACAC,SAAA,sBACA,SACA,0BACA,uDAGAC,4BAEA,GAEAZ,mBACAS,uCACAC,YACAC,SAAA,sBACA,SACA,gBACA,gEAGAC,0BAEA,sBACA,0BAAAF,cACAG,SACA,eACA,yBAGAD,2BAGAE,mBACA,iBC1F0V,I,YCOtVC,EAAY,eACd,EACA5C,EACAiC,GACA,EACA,KACA,KACA,MAIa,aAAAW,E","file":"js/chunk-2d2245cf.ea4d33bd.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"backend-content\",attrs:{\"id\":\"content\"}},[_c('div',{staticClass:\"column col-12 col-xs-12\"},[_c('h3',{staticClass:\"s-title\"},[_vm._v(\"Search whitelisted elements\")]),_c('div',{staticClass:\"form-group\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.elements),expression:\"elements\"}],staticClass:\"form-input\",attrs:{\"id\":\"input-example-3\",\"placeholder\":\"Paste the elements here\",\"rows\":\"3\"},domProps:{\"value\":(_vm.elements)},on:{\"input\":function($event){if($event.target.composing)return;_vm.elements=$event.target.value}}})]),_c('div',{staticClass:\"form-group\"},[_c('button',{staticClass:\"btn btn-primary col-12\",on:{\"click\":function($event){return _vm.search_elements()}}},[_vm._v(\"Search\")])]),(_vm.results.length>0 )?_c('div',{staticClass:\"form-group\"},[_c('table',{staticClass:\"table table-striped table-hover\"},[_vm._m(0),_c('tbody',_vm._l((_vm.results),function(r){return _c('tr',{key:r.element},[_c('td',[_vm._v(_vm._s(r.element))]),_c('td',[_vm._v(_vm._s(r.type))]),_c('td',[_c('button',{staticClass:\"btn btn-sm\",on:{\"click\":function($event){return _vm.remove(r)}}},[_vm._v(\"Delete\")])])])}),0)])]):(_vm.first_search==false)?_c('div',[_c('div',{staticClass:\"empty\"},[_c('p',{staticClass:\"empty-title h5\"},[_vm._v(\"Element\"),(this.elements.match(/[^\\r\\n]+/g).length>1)?_c('span',[_vm._v(\"s\")]):_vm._e(),_vm._v(\" not found.\")]),_c('p',{staticClass:\"empty-subtitle\"},[_vm._v(\"Try wildcard search to expend your search.\")])])]):_vm._e()])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"Element\")]),_c('th',[_vm._v(\"Element type\")]),_c('th')])])\n}]\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./whitelist-search.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./whitelist-search.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./whitelist-search.vue?vue&type=template&id=f3d90054&\"\nimport script from \"./whitelist-search.vue?vue&type=script&lang=js&\"\nexport * from \"./whitelist-search.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d22d432.91ebbe55.js b/app/backend/dist/js/chunk-2d22d432.91ebbe55.js new file mode 100644 index 0000000..739f58c --- /dev/null +++ b/app/backend/dist/js/chunk-2d22d432.91ebbe55.js @@ -0,0 +1,2 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d22d432"],{f76a:function(s,i,t){"use strict";t.r(i);var a=function(){var s=this,i=s._self._c;return i("div",{staticClass:"backend-content",attrs:{id:"content"}},[i("div",{class:{"alert-toaster-visible":s.toaster.show,"alert-toaster-hidden":!s.toaster.show}},[s._v(s._s(s.toaster.message))]),i("div",{staticClass:"column col-8 col-xs-12"},[i("h3",{staticClass:"s-title"},[s._v("Detection engine configuration")]),i("h5",{staticClass:"s-subtitle"},[s._v("Detection methods")]),i("div",{staticClass:"form-group"},[i("label",{staticClass:"form-switch"},[i("input",{directives:[{name:"model",rawName:"v-model",value:s.config.analysis.heuristics,expression:"config.analysis.heuristics"}],attrs:{type:"checkbox"},domProps:{checked:Array.isArray(s.config.analysis.heuristics)?s._i(s.config.analysis.heuristics,null)>-1:s.config.analysis.heuristics},on:{change:[function(i){var t=s.config.analysis.heuristics,a=i.target,e=!!a.checked;if(Array.isArray(t)){var c=null,n=s._i(t,c);a.checked?n<0&&s.$set(s.config.analysis,"heuristics",t.concat([c])):n>-1&&s.$set(s.config.analysis,"heuristics",t.slice(0,n).concat(t.slice(n+1)))}else s.$set(s.config.analysis,"heuristics",e)},function(i){return s.local_analysis("analysis","heuristics")}]}}),i("i",{staticClass:"form-icon"}),s._v(" Use heuristic detection for suspect behaviour. ")]),i("label",{staticClass:"form-switch"},[i("input",{directives:[{name:"model",rawName:"v-model",value:s.config.analysis.iocs,expression:"config.analysis.iocs"}],attrs:{type:"checkbox"},domProps:{checked:Array.isArray(s.config.analysis.iocs)?s._i(s.config.analysis.iocs,null)>-1:s.config.analysis.iocs},on:{change:[function(i){var t=s.config.analysis.iocs,a=i.target,e=!!a.checked;if(Array.isArray(t)){var c=null,n=s._i(t,c);a.checked?n<0&&s.$set(s.config.analysis,"iocs",t.concat([c])):n>-1&&s.$set(s.config.analysis,"iocs",t.slice(0,n).concat(t.slice(n+1)))}else s.$set(s.config.analysis,"iocs",e)},function(i){return s.local_analysis("analysis","iocs")}]}}),i("i",{staticClass:"form-icon"}),s._v(" Use Indicator of Compromise (IoC) based detection. ")]),i("label",{staticClass:"form-switch"},[i("input",{directives:[{name:"model",rawName:"v-model",value:s.config.analysis.whitelist,expression:"config.analysis.whitelist"}],attrs:{type:"checkbox"},domProps:{checked:Array.isArray(s.config.analysis.whitelist)?s._i(s.config.analysis.whitelist,null)>-1:s.config.analysis.whitelist},on:{change:[function(i){var t=s.config.analysis.whitelist,a=i.target,e=!!a.checked;if(Array.isArray(t)){var c=null,n=s._i(t,c);a.checked?n<0&&s.$set(s.config.analysis,"whitelist",t.concat([c])):n>-1&&s.$set(s.config.analysis,"whitelist",t.slice(0,n).concat(t.slice(n+1)))}else s.$set(s.config.analysis,"whitelist",e)},function(i){return s.local_analysis("analysis","whitelist")}]}}),i("i",{staticClass:"form-icon"}),s._v(" Use whitelist to prevent false positives. ")]),i("label",{staticClass:"form-switch"},[i("input",{directives:[{name:"model",rawName:"v-model",value:s.config.analysis.active,expression:"config.analysis.active"}],attrs:{type:"checkbox"},domProps:{checked:Array.isArray(s.config.analysis.active)?s._i(s.config.analysis.active,null)>-1:s.config.analysis.active},on:{change:[function(i){var t=s.config.analysis.active,a=i.target,e=!!a.checked;if(Array.isArray(t)){var c=null,n=s._i(t,c);a.checked?n<0&&s.$set(s.config.analysis,"active",t.concat([c])):n>-1&&s.$set(s.config.analysis,"active",t.slice(0,n).concat(t.slice(n+1)))}else s.$set(s.config.analysis,"active",e)},function(i){return s.local_analysis("analysis","active")}]}}),i("i",{staticClass:"form-icon"}),s._v(" Use active analysis (Dig, Whois, OpenSSL...). ")]),i("label",{staticClass:"form-switch"},[i("input",{attrs:{type:"checkbox"},domProps:{checked:s.config.analysis.indicators_types.includes("all")},on:{change:function(i){return s.switch_iocs_types("all")}}}),i("i",{staticClass:"form-icon"}),s._v(" Detect threats by using all IOCs. ")])]),s.config.analysis.indicators_types.includes("all")?s._e():i("div",{staticClass:"form-group"},[i("h5",{staticClass:"s-subtitle"},[s._v("IOCs categories")]),s._l(s.iocs_tags,(function(t){return i("label",{key:t,staticClass:"form-switch"},[i("input",{attrs:{type:"checkbox"},domProps:{checked:s.config.analysis.indicators_types.includes(t)},on:{change:function(i){return s.switch_iocs_types(t)}}}),i("i",{staticClass:"form-icon"}),s._v(" Use IOCs related to "+s._s(t.toUpperCase())+" threat. ")])}))],2)])])},e=[],c=t("bc3a"),n=t.n(c),o={name:"analysis-engine",data(){return{config:{},check_certificate:!1,certificate:"",iocs_tags:[],toaster:{show:!1,message:"",type:null}}},props:{},methods:{switch_config:function(s,i){n.a.get(`/api/config/switch/${s}/${i}`,{timeout:1e4,headers:{"X-Token":this.jwt}}).then(t=>{t.data.status&&("Key switched to true"==t.data.message?(this.toaster={show:!0,message:"Configuration updated",type:"success"},setTimeout(function(){this.toaster={show:!1}}.bind(this),1e3),this.config[s][i]=!0):"Key switched to false"==t.data.message?(this.toaster={show:!0,message:"Configuration updated",type:"success"},setTimeout(function(){this.toaster={show:!1}}.bind(this),1e3),this.config[s][i]=!1):(this.toaster={show:!0,message:"The key doesn't exist",type:"error"},setTimeout(function(){this.toaster={show:!1}}.bind(this),1e3)))}).catch(s=>console.log(s))},local_analysis:function(s,i){this.switch_config(s,i),0!=this.config.analysis.remote&&this.switch_config("analysis","remote")},load_config:function(){n.a.get("/api/config/list",{timeout:1e4,headers:{"X-Token":this.jwt}}).then(s=>{s.data&&(this.config=s.data,this.config.backend.password="",console.log(this.config.analysis.indicators_types))}).catch(s=>console.log(s))},async get_jwt(){await n.a.get("/api/get-token",{timeout:1e4}).then(s=>{s.data.token&&(this.jwt=s.data.token)}).catch(s=>console.log(s))},get_iocs_tags:function(){n.a.get("/api/ioc/get/tags",{timeout:1e4,headers:{"X-Token":this.jwt}}).then(s=>{s.data.tags&&(this.iocs_tags=s.data.tags)}).catch(s=>console.log(s))},switch_iocs_types:function(s){this.config.analysis.indicators_types.includes(s)?n.a.get("/api/config/ioc-type/delete/"+s,{timeout:1e4,headers:{"X-Token":this.jwt}}).then(s=>{s.data.status&&this.load_config()}).catch(s=>console.log(s)):(n.a.get("/api/config/ioc-type/add/"+s,{timeout:1e4,headers:{"X-Token":this.jwt}}).then(s=>{s.data.status&&this.load_config()}).catch(s=>console.log(s)),this.load_config())}},created:function(){this.get_jwt().then(()=>{this.load_config(),this.get_iocs_tags()})}},l=o,r=t("2877"),h=Object(r["a"])(l,a,e,!1,null,null,null);i["default"]=h.exports}}]); +//# sourceMappingURL=chunk-2d22d432.91ebbe55.js.map \ No newline at end of file diff --git a/app/backend/dist/js/chunk-2d22d432.91ebbe55.js.map b/app/backend/dist/js/chunk-2d22d432.91ebbe55.js.map new file mode 100644 index 0000000..c70adaf --- /dev/null +++ b/app/backend/dist/js/chunk-2d22d432.91ebbe55.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/views/analysis-engine.vue","webpack:///src/views/analysis-engine.vue","webpack:///./src/views/analysis-engine.vue?a0b6","webpack:///./src/views/analysis-engine.vue?058c"],"names":["render","_vm","this","_c","_self","staticClass","attrs","class","toaster","show","_v","_s","message","directives","name","rawName","value","config","analysis","heuristics","expression","domProps","Array","isArray","_i","on","$event","$$a","$$el","target","$$c","checked","$$v","$$i","$set","concat","slice","local_analysis","iocs","whitelist","active","indicators_types","includes","switch_iocs_types","_e","_l","iocs_tags","tag","key","toUpperCase","staticRenderFns","data","check_certificate","certificate","type","props","methods","switch_config","axios","timeout","headers","setTimeout","catch","load_config","console","then","get_iocs_tags","created","component"],"mappings":"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","file":"js/chunk-2d22d432.91ebbe55.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"backend-content\",attrs:{\"id\":\"content\"}},[_c('div',{class:{ 'alert-toaster-visible' : _vm.toaster.show, 'alert-toaster-hidden' : !_vm.toaster.show }},[_vm._v(_vm._s(_vm.toaster.message))]),_c('div',{staticClass:\"column col-8 col-xs-12\"},[_c('h3',{staticClass:\"s-title\"},[_vm._v(\"Detection engine configuration\")]),_c('h5',{staticClass:\"s-subtitle\"},[_vm._v(\"Detection methods\")]),_c('div',{staticClass:\"form-group\"},[_c('label',{staticClass:\"form-switch\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.config.analysis.heuristics),expression:\"config.analysis.heuristics\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.config.analysis.heuristics)?_vm._i(_vm.config.analysis.heuristics,null)>-1:(_vm.config.analysis.heuristics)},on:{\"change\":[function($event){var $$a=_vm.config.analysis.heuristics,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.config.analysis, \"heuristics\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.config.analysis, \"heuristics\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.config.analysis, \"heuristics\", $$c)}},function($event){return _vm.local_analysis('analysis', 'heuristics')}]}}),_c('i',{staticClass:\"form-icon\"}),_vm._v(\" Use heuristic detection for suspect behaviour. \")]),_c('label',{staticClass:\"form-switch\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.config.analysis.iocs),expression:\"config.analysis.iocs\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.config.analysis.iocs)?_vm._i(_vm.config.analysis.iocs,null)>-1:(_vm.config.analysis.iocs)},on:{\"change\":[function($event){var $$a=_vm.config.analysis.iocs,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.config.analysis, \"iocs\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.config.analysis, \"iocs\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.config.analysis, \"iocs\", $$c)}},function($event){return _vm.local_analysis('analysis', 'iocs')}]}}),_c('i',{staticClass:\"form-icon\"}),_vm._v(\" Use Indicator of Compromise (IoC) based detection. \")]),_c('label',{staticClass:\"form-switch\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.config.analysis.whitelist),expression:\"config.analysis.whitelist\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.config.analysis.whitelist)?_vm._i(_vm.config.analysis.whitelist,null)>-1:(_vm.config.analysis.whitelist)},on:{\"change\":[function($event){var $$a=_vm.config.analysis.whitelist,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.config.analysis, \"whitelist\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.config.analysis, \"whitelist\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.config.analysis, \"whitelist\", $$c)}},function($event){return _vm.local_analysis('analysis', 'whitelist')}]}}),_c('i',{staticClass:\"form-icon\"}),_vm._v(\" Use whitelist to prevent false positives. \")]),_c('label',{staticClass:\"form-switch\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.config.analysis.active),expression:\"config.analysis.active\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.config.analysis.active)?_vm._i(_vm.config.analysis.active,null)>-1:(_vm.config.analysis.active)},on:{\"change\":[function($event){var $$a=_vm.config.analysis.active,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.config.analysis, \"active\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.config.analysis, \"active\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.config.analysis, \"active\", $$c)}},function($event){return _vm.local_analysis('analysis', 'active')}]}}),_c('i',{staticClass:\"form-icon\"}),_vm._v(\" Use active analysis (Dig, Whois, OpenSSL...). \")]),_c('label',{staticClass:\"form-switch\"},[_c('input',{attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.config.analysis.indicators_types.includes('all')},on:{\"change\":function($event){return _vm.switch_iocs_types('all')}}}),_c('i',{staticClass:\"form-icon\"}),_vm._v(\" Detect threats by using all IOCs. \")])]),(!_vm.config.analysis.indicators_types.includes('all'))?_c('div',{staticClass:\"form-group\"},[_c('h5',{staticClass:\"s-subtitle\"},[_vm._v(\"IOCs categories\")]),_vm._l((_vm.iocs_tags),function(tag){return _c('label',{key:tag,staticClass:\"form-switch\"},[_c('input',{attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.config.analysis.indicators_types.includes(tag)},on:{\"change\":function($event){return _vm.switch_iocs_types(tag)}}}),_c('i',{staticClass:\"form-icon\"}),_vm._v(\" Use IOCs related to \"+_vm._s(tag.toUpperCase())+\" threat. \")])})],2):_vm._e()])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./analysis-engine.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./analysis-engine.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./analysis-engine.vue?vue&type=template&id=53a9fe9e&\"\nimport script from \"./analysis-engine.vue?vue&type=script&lang=js&\"\nexport * from \"./analysis-engine.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file diff --git a/app/backend/dist/js/chunk-3c0d118e.e3f2944c.js b/app/backend/dist/js/chunk-3c0d118e.e3f2944c.js new file mode 100644 index 0000000..9a0178e --- /dev/null +++ b/app/backend/dist/js/chunk-3c0d118e.e3f2944c.js @@ -0,0 +1,2 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-3c0d118e"],{"42e0":function(t,e,s){t.exports=s.p+"img/network.33d31f9d.png"},"7e11":function(t,e,s){"use strict";s.r(e);var i=function(){var t=this,e=t._self._c;return e("div",{staticClass:"backend-content",attrs:{id:"content"}},[e("div",{class:{"alert-toaster-visible":t.toaster.show,"alert-toaster-hidden":!t.toaster.show}},[t._v(t._s(t.toaster.message))]),e("div",{staticClass:"column col-8 col-xs-12"},[e("h3",{staticClass:"s-title"},[t._v("Network configuration")]),e("h5",{staticClass:"s-subtitle"},[t._v("Interfaces configuration")]),e("img",{attrs:{src:s("42e0"),id:"network-thumbnail"}}),e("div",{staticClass:"container interfaces-container"},[e("div",{staticClass:"columns"},[e("div",{staticClass:"column col-6"},[e("span",{staticClass:"interface-label"},[t._v("Wireless AP interface")]),e("select",{directives:[{name:"model",rawName:"v-model",value:t.iface_in,expression:"iface_in"}],staticClass:"form-select width-full",on:{change:[function(e){var s=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){var e="_value"in t?t._value:t.value;return e}));t.iface_in=e.target.multiple?s:s[0]},function(e){return t.change_interface("in",t.iface_in)}]}},t._l(t.config.ifaces_in,(function(s){return e("option",{key:s,domProps:{value:s}},[t._v(" "+t._s(s.toUpperCase())+" ")])})),0)]),e("div",{staticClass:"column col-6"},[e("span",{staticClass:"interface-label"},[t._v("Internet link interface")]),e("select",{directives:[{name:"model",rawName:"v-model",value:t.iface_out,expression:"iface_out"}],staticClass:"form-select width-full",on:{change:[function(e){var s=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){var e="_value"in t?t._value:t.value;return e}));t.iface_out=e.target.multiple?s:s[0]},function(e){return t.change_interface("out",t.iface_out)}]}},t._l(t.config.ifaces_out,(function(s){return e("option",{key:s,domProps:{value:s}},[t._v(" "+t._s(s.toUpperCase())+" ")])})),0)])])]),e("h5",{staticClass:"s-subtitle"},[t._v("Edit SSIDs names")]),e("div",{staticClass:"form-group"},[e("table",{staticClass:"table table-striped table-hover"},[t._m(0),e("tbody",[t._l(t.config.network.ssids,(function(s){return e("tr",{key:s},[e("td",[t._v(t._s(s))]),e("td",[e("button",{staticClass:"btn btn-sm",on:{click:function(e){return t.delete_ssid(s)}}},[t._v("Delete")])])])})),e("tr",[e("td",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.ssid,expression:"ssid"}],staticClass:"form-input",attrs:{type:"text",placeholder:"SSID name"},domProps:{value:t.ssid},on:{input:function(e){e.target.composing||(t.ssid=e.target.value)}}})]),e("td",[e("button",{staticClass:"btn btn-sm",on:{click:function(e){return t.add_ssid()}}},[t._v("Add")])])])],2)])])])])},n=[function(){var t=this,e=t._self._c;return e("thead",[e("tr",[e("th",[t._v("Network name")]),e("th",[t._v("Action")])])])}],a=(s("14d9"),s("bc3a")),o=s.n(a),c={name:"manageinterface",data(){return{config:{},ssid:"",iface_in:"",toaster:{show:!1,message:"",type:null}}},props:{},methods:{async get_jwt(){await o.a.get("/api/get-token",{timeout:1e4}).then(t=>{t.data.token&&(this.jwt=t.data.token)}).catch(t=>console.log(t))},load_config:function(){o.a.get("/api/config/list",{timeout:1e4,headers:{"X-Token":this.jwt}}).then(t=>{t.data&&(this.config=t.data,this.iface_in=this.config.network.in,this.iface_out=this.config.network.out,console.log(this.iface_in))}).catch(t=>console.log(t))},delete_ssid:function(t){var e=this.config.network.ssids.indexOf(t);this.config.network.ssids.splice(e,1),this.update_ssids()},add_ssid:function(){this.config.network.ssids.push(this.ssid),this.ssid="",this.update_ssids()},update_ssids:function(){o.a.get("/api/config/edit/network/ssids/"+this.config.network.ssids.join("|"),{timeout:1e4,headers:{"X-Token":this.jwt}}).then(t=>{t.data.status&&(this.toaster={show:!0,message:"Configuration updated",type:"success"},setTimeout(function(){this.toaster={show:!1}}.bind(this),1e3))}).catch(t=>console.log(t))},change_interface:function(t,e){o.a.get(`/api/config/edit/network/${t}/${e}`,{timeout:1e4,headers:{"X-Token":this.jwt}}).then(s=>{this.toaster={show:!0,message:"Configuration updated",type:"success"},setTimeout(function(){this.toaster={show:!1}}.bind(this),1e3),s.data.status&&(this.config.network[t]=e)}).catch(t=>console.log(t))}},created:function(){this.get_jwt().then(()=>{this.load_config()})}},r=c,l=s("2877"),u=Object(l["a"])(r,i,n,!1,null,null,null);e["default"]=u.exports}}]); +//# sourceMappingURL=chunk-3c0d118e.e3f2944c.js.map \ No newline at end of file diff --git a/app/backend/dist/js/chunk-3c0d118e.e3f2944c.js.map b/app/backend/dist/js/chunk-3c0d118e.e3f2944c.js.map new file mode 100644 index 0000000..88a298b --- /dev/null +++ b/app/backend/dist/js/chunk-3c0d118e.e3f2944c.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/assets/network.png","webpack:///./src/views/network-manage.vue","webpack:///src/views/network-manage.vue","webpack:///./src/views/network-manage.vue?96f0","webpack:///./src/views/network-manage.vue?8f74"],"names":["module","exports","render","_vm","this","_c","_self","staticClass","attrs","class","toaster","show","_v","_s","message","require","directives","name","rawName","value","iface_in","expression","on","$event","$$selectedVal","Array","prototype","filter","call","target","options","o","selected","map","val","_value","multiple","change_interface","_l","config","ifaces_in","iface","key","domProps","toUpperCase","iface_out","ifaces_out","_m","network","ssids","ssid","delete_ssid","composing","add_ssid","staticRenderFns","data","type","props","methods","timeout","then","catch","load_config","axios","headers","console","update_ssids","setTimeout","created","component"],"mappings":"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","file":"js/chunk-3c0d118e.e3f2944c.js","sourcesContent":["module.exports = __webpack_public_path__ + \"img/network.33d31f9d.png\";","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"backend-content\",attrs:{\"id\":\"content\"}},[_c('div',{class:{ 'alert-toaster-visible' : _vm.toaster.show, 'alert-toaster-hidden' : !_vm.toaster.show }},[_vm._v(_vm._s(_vm.toaster.message))]),_c('div',{staticClass:\"column col-8 col-xs-12\"},[_c('h3',{staticClass:\"s-title\"},[_vm._v(\"Network configuration\")]),_c('h5',{staticClass:\"s-subtitle\"},[_vm._v(\"Interfaces configuration\")]),_c('img',{attrs:{\"src\":require(\"@/assets/network.png\"),\"id\":\"network-thumbnail\"}}),_c('div',{staticClass:\"container interfaces-container\"},[_c('div',{staticClass:\"columns\"},[_c('div',{staticClass:\"column col-6\"},[_c('span',{staticClass:\"interface-label\"},[_vm._v(\"Wireless AP interface\")]),_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.iface_in),expression:\"iface_in\"}],staticClass:\"form-select width-full\",on:{\"change\":[function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.iface_in=$event.target.multiple ? $$selectedVal : $$selectedVal[0]},function($event){return _vm.change_interface('in', _vm.iface_in)}]}},_vm._l((_vm.config.ifaces_in),function(iface){return _c('option',{key:iface,domProps:{\"value\":iface}},[_vm._v(\" \"+_vm._s(iface.toUpperCase())+\" \")])}),0)]),_c('div',{staticClass:\"column col-6\"},[_c('span',{staticClass:\"interface-label\"},[_vm._v(\"Internet link interface\")]),_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.iface_out),expression:\"iface_out\"}],staticClass:\"form-select width-full\",on:{\"change\":[function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.iface_out=$event.target.multiple ? $$selectedVal : $$selectedVal[0]},function($event){return _vm.change_interface('out', _vm.iface_out)}]}},_vm._l((_vm.config.ifaces_out),function(iface){return _c('option',{key:iface,domProps:{\"value\":iface}},[_vm._v(\" \"+_vm._s(iface.toUpperCase())+\" \")])}),0)])])]),_c('h5',{staticClass:\"s-subtitle\"},[_vm._v(\"Edit SSIDs names\")]),_c('div',{staticClass:\"form-group\"},[_c('table',{staticClass:\"table table-striped table-hover\"},[_vm._m(0),_c('tbody',[_vm._l((_vm.config.network.ssids),function(ssid){return _c('tr',{key:ssid},[_c('td',[_vm._v(_vm._s(ssid))]),_c('td',[_c('button',{staticClass:\"btn btn-sm\",on:{\"click\":function($event){return _vm.delete_ssid(ssid)}}},[_vm._v(\"Delete\")])])])}),_c('tr',[_c('td',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.ssid),expression:\"ssid\"}],staticClass:\"form-input\",attrs:{\"type\":\"text\",\"placeholder\":\"SSID name\"},domProps:{\"value\":(_vm.ssid)},on:{\"input\":function($event){if($event.target.composing)return;_vm.ssid=$event.target.value}}})]),_c('td',[_c('button',{staticClass:\"btn btn-sm\",on:{\"click\":function($event){return _vm.add_ssid()}}},[_vm._v(\"Add\")])])])],2)])])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"Network name\")]),_c('th',[_vm._v(\"Action\")])])])\n}]\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./network-manage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./network-manage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./network-manage.vue?vue&type=template&id=c4a78946&\"\nimport script from \"./network-manage.vue?vue&type=script&lang=js&\"\nexport * from \"./network-manage.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file diff --git a/app/backend/dist/js/chunk-vendors.dbaccf43.js b/app/backend/dist/js/chunk-vendors.dbaccf43.js new file mode 100644 index 0000000..0c76a08 --- /dev/null +++ b/app/backend/dist/js/chunk-vendors.dbaccf43.js @@ -0,0 +1,8 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-vendors"],{"04f8":function(t,e,n){var r=n("2d00"),o=n("d039");t.exports=!!Object.getOwnPropertySymbols&&!o((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},"06cf":function(t,e,n){var r=n("83ab"),o=n("c65b"),i=n("d1e7"),a=n("5c6c"),s=n("fc6a"),c=n("a04b"),u=n("1a2d"),f=n("0cfb"),l=Object.getOwnPropertyDescriptor;e.f=r?l:function(t,e){if(t=s(t),e=c(e),f)try{return l(t,e)}catch(n){}if(u(t,e))return a(!o(i.f,t,e),t[e])}},"07fa":function(t,e,n){var r=n("50c4");t.exports=function(t){return r(t.length)}},"0a06":function(t,e,n){"use strict";var r=n("c532"),o=n("30b5"),i=n("f6b4"),a=n("5270"),s=n("4a7b"),c=n("848b"),u=c.validators;function f(t){this.defaults=t,this.interceptors={request:new i,response:new i}}f.prototype.request=function(t){"string"===typeof t?(t=arguments[1]||{},t.url=arguments[0]):t=t||{},t=s(this.defaults,t),t.method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var e=t.transitional;void 0!==e&&c.assertOptions(e,{silentJSONParsing:u.transitional(u.boolean,"1.0.0"),forcedJSONParsing:u.transitional(u.boolean,"1.0.0"),clarifyTimeoutError:u.transitional(u.boolean,"1.0.0")},!1);var n=[],r=!0;this.interceptors.request.forEach((function(e){"function"===typeof e.runWhen&&!1===e.runWhen(t)||(r=r&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var o,i=[];if(this.interceptors.response.forEach((function(t){i.push(t.fulfilled,t.rejected)})),!r){var f=[a,void 0];Array.prototype.unshift.apply(f,n),f=f.concat(i),o=Promise.resolve(t);while(f.length)o=o.then(f.shift(),f.shift());return o}var l=t;while(n.length){var p=n.shift(),d=n.shift();try{l=p(l)}catch(h){d(h);break}}try{o=a(l)}catch(h){return Promise.reject(h)}while(i.length)o=o.then(i.shift(),i.shift());return o},f.prototype.getUri=function(t){return t=s(this.defaults,t),o(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},r.forEach(["delete","get","head","options"],(function(t){f.prototype[t]=function(e,n){return this.request(s(n||{},{method:t,url:e,data:(n||{}).data}))}})),r.forEach(["post","put","patch"],(function(t){f.prototype[t]=function(e,n,r){return this.request(s(r||{},{method:t,url:e,data:n}))}})),t.exports=f},"0cfb":function(t,e,n){var r=n("83ab"),o=n("d039"),i=n("cc12");t.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},"0d51":function(t,e){var n=String;t.exports=function(t){try{return n(t)}catch(e){return"Object"}}},"0df6":function(t,e,n){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},"13d2":function(t,e,n){var r=n("d039"),o=n("1626"),i=n("1a2d"),a=n("83ab"),s=n("5e77").CONFIGURABLE,c=n("8925"),u=n("69f3"),f=u.enforce,l=u.get,p=Object.defineProperty,d=a&&!r((function(){return 8!==p((function(){}),"length",{value:8}).length})),h=String(String).split("String"),v=t.exports=function(t,e,n){"Symbol("===String(e).slice(0,7)&&(e="["+String(e).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(e="get "+e),n&&n.setter&&(e="set "+e),(!i(t,"name")||s&&t.name!==e)&&(a?p(t,"name",{value:e,configurable:!0}):t.name=e),d&&n&&i(n,"arity")&&t.length!==n.arity&&p(t,"length",{value:n.arity});try{n&&i(n,"constructor")&&n.constructor?a&&p(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(o){}var r=f(t);return i(r,"source")||(r.source=h.join("string"==typeof e?e:"")),t};Function.prototype.toString=v((function(){return o(this)&&l(this).source||c(this)}),"toString")},"14d9":function(t,e,n){"use strict";var r=n("23e7"),o=n("7b0b"),i=n("07fa"),a=n("3a34"),s=n("3511"),c=n("d039"),u=c((function(){return 4294967297!==[].push.call({length:4294967296},1)})),f=!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(t){return t instanceof TypeError}}();r({target:"Array",proto:!0,arity:1,forced:u||f},{push:function(t){var e=o(this),n=i(e),r=arguments.length;s(n+r);for(var c=0;c=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(t){f.headers[t]={}})),r.forEach(["post","put","patch"],(function(t){f.headers[t]=r.merge(a)})),t.exports=f}).call(this,n("4362"))},2877:function(t,e,n){"use strict";function r(t,e,n,r,o,i,a,s){var c,u="function"===typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(c=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"===typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),o&&o.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(a)},u._ssrRegister=c):o&&(c=s?function(){o.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:o),c)if(u.functional){u._injectStyles=c;var f=u.render;u.render=function(t,e){return c.call(e),f(t,e)}}else{var l=u.beforeCreate;u.beforeCreate=l?[].concat(l,c):[c]}return{exports:t,options:u}}n.d(e,"a",(function(){return r}))},"2b0e":function(t,e,n){"use strict";(function(t){n.d(e,"a",(function(){return Qr})); +/*! + * Vue.js v2.7.13 + * (c) 2014-2022 Evan You + * Released under the MIT License. + */ +var r=Object.freeze({}),o=Array.isArray;function i(t){return void 0===t||null===t}function a(t){return void 0!==t&&null!==t}function s(t){return!0===t}function c(t){return!1===t}function u(t){return"string"===typeof t||"number"===typeof t||"symbol"===typeof t||"boolean"===typeof t}function f(t){return"function"===typeof t}function l(t){return null!==t&&"object"===typeof t}var p=Object.prototype.toString;function d(t){return"[object Object]"===p.call(t)}function h(t){return"[object RegExp]"===p.call(t)}function v(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function m(t){return a(t)&&"function"===typeof t.then&&"function"===typeof t.catch}function y(t){return null==t?"":Array.isArray(t)||d(t)&&t.toString===p?JSON.stringify(t,null,2):String(t)}function g(t){var e=parseFloat(t);return isNaN(e)?t:e}function b(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(r,1)}}var x=Object.prototype.hasOwnProperty;function C(t,e){return x.call(t,e)}function O(t){var e=Object.create(null);return function(n){var r=e[n];return r||(e[n]=t(n))}}var k=/-(\w)/g,S=O((function(t){return t.replace(k,(function(t,e){return e?e.toUpperCase():""}))})),j=O((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),$=/\B([A-Z])/g,E=O((function(t){return t.replace($,"-$1").toLowerCase()}));function A(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n}function T(t,e){return t.bind(e)}var P=Function.prototype.bind?T:A;function R(t,e){e=e||0;var n=t.length-e,r=new Array(n);while(n--)r[n]=t[n+e];return r}function N(t,e){for(var n in e)t[n]=e[n];return t}function L(t){for(var e={},n=0;n0,rt=tt&&tt.indexOf("edge/")>0;tt&&tt.indexOf("android");var ot=tt&&/iphone|ipad|ipod|ios/.test(tt);tt&&/chrome\/\d+/.test(tt),tt&&/phantomjs/.test(tt);var it,at=tt&&tt.match(/firefox\/(\d+)/),st={}.watch,ct=!1;if(Z)try{var ut={};Object.defineProperty(ut,"passive",{get:function(){ct=!0}}),window.addEventListener("test-passive",null,ut)}catch(Ya){}var ft=function(){return void 0===it&&(it=!Z&&"undefined"!==typeof t&&(t["process"]&&"server"===t["process"].env.VUE_ENV)),it},lt=Z&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function pt(t){return"function"===typeof t&&/native code/.test(t.toString())}var dt,ht="undefined"!==typeof Symbol&&pt(Symbol)&&"undefined"!==typeof Reflect&&pt(Reflect.ownKeys);dt="undefined"!==typeof Set&&pt(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var vt=null;function mt(t){void 0===t&&(t=null),t||vt&&vt._scope.off(),vt=t,t&&t._scope.on()}var yt=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),gt=function(t){void 0===t&&(t="");var e=new yt;return e.text=t,e.isComment=!0,e};function bt(t){return new yt(void 0,void 0,void 0,String(t))}function _t(t){var e=new yt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var wt=0,xt=[],Ct=function(){for(var t=0;t0&&(r=ce(r,"".concat(e||"","_").concat(n)),se(r[0])&&se(f)&&(l[c]=bt(f.text+r[0].text),r.shift()),l.push.apply(l,r)):u(r)?se(f)?l[c]=bt(f.text+r):""!==r&&l.push(bt(r)):se(r)&&se(f)?l[c]=bt(f.text+r.text):(s(t._isVList)&&a(r.tag)&&i(r.key)&&a(e)&&(r.key="__vlist".concat(e,"_").concat(n,"__")),l.push(r)));return l}function ue(t,e){var n,r,i,s,c=null;if(o(t)||"string"===typeof t)for(c=new Array(t.length),n=0,r=t.length;n0,s=e?!!e.$stable:!a,c=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&o&&o!==r&&c===o.$key&&!a&&!o.$hasNormal)return o;for(var u in i={},e)e[u]&&"$"!==u[0]&&(i[u]=$e(t,n,u,e[u]))}else i={};for(var f in n)f in i||(i[f]=Ee(n,f));return e&&Object.isExtensible(e)&&(e._normalized=i),X(i,"$stable",s),X(i,"$key",c),X(i,"$hasNormal",a),i}function $e(t,e,n,r){var i=function(){var e=vt;mt(t);var n=arguments.length?r.apply(null,arguments):r({});n=n&&"object"===typeof n&&!o(n)?[n]:ae(n);var i=n&&n[0];return mt(e),n&&(!i||1===n.length&&i.isComment&&!Se(i))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:i,enumerable:!0,configurable:!0}),i}function Ee(t,e){return function(){return t[e]}}function Ae(t){var e=t.$options,n=e.setup;if(n){var r=t._setupContext=Te(t);mt(t),St();var o=Ge(n,null,[t._props||Pt({}),r],t,"setup");if(jt(),mt(),f(o))e.render=o;else if(l(o))if(t._setupState=o,o.__sfc){var i=t._setupProxy={};for(var a in o)"__sfc"!==a&&Wt(i,o,a)}else for(var a in o)K(a)||Wt(t,o,a);else 0}}function Te(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};X(e,"_v_attr_proxy",!0),Pe(e,t.$attrs,r,t,"$attrs")}return t._attrsProxy},get listeners(){if(!t._listenersProxy){var e=t._listenersProxy={};Pe(e,t.$listeners,r,t,"$listeners")}return t._listenersProxy},get slots(){return Ne(t)},emit:P(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return Wt(t,e,n)}))}}}function Pe(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,Re(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function Re(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function Ne(t){return t._slotsProxy||Le(t._slotsProxy={},t.$scopedSlots),t._slotsProxy}function Le(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}function Ie(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=Oe(e._renderChildren,o),t.$scopedSlots=n?je(t.$parent,n.data.scopedSlots,t.$slots):r,t._c=function(e,n,r,o){return ze(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return ze(t,e,n,r,o,!0)};var i=n&&n.data;qt(t,"$attrs",i&&i.attrs||r,null,!0),qt(t,"$listeners",e._parentListeners||r,null,!0)}var De=null;function Me(t){Ce(t.prototype),t.prototype.$nextTick=function(t){return un(t,this)},t.prototype._render=function(){var t,e=this,n=e.$options,r=n.render,i=n._parentVnode;i&&e._isMounted&&(e.$scopedSlots=je(e.$parent,i.data.scopedSlots,e.$slots,e.$scopedSlots),e._slotsProxy&&Le(e._slotsProxy,e.$scopedSlots)),e.$vnode=i;try{mt(e),De=e,t=r.call(e._renderProxy,e.$createElement)}catch(Ya){Xe(Ya,e,"render"),t=e._vnode}finally{De=null,mt()}return o(t)&&1===t.length&&(t=t[0]),t instanceof yt||(t=gt()),t.parent=i,t}}function Fe(t,e){return(t.__esModule||ht&&"Module"===t[Symbol.toStringTag])&&(t=t.default),l(t)?e.extend(t):t}function Ue(t,e,n,r,o){var i=gt();return i.asyncFactory=t,i.asyncMeta={data:e,context:n,children:r,tag:o},i}function Be(t,e){if(s(t.error)&&a(t.errorComp))return t.errorComp;if(a(t.resolved))return t.resolved;var n=De;if(n&&a(t.owners)&&-1===t.owners.indexOf(n)&&t.owners.push(n),s(t.loading)&&a(t.loadingComp))return t.loadingComp;if(n&&!a(t.owners)){var r=t.owners=[n],o=!0,c=null,u=null;n.$on("hook:destroyed",(function(){return w(r,n)}));var f=function(t){for(var e=0,n=r.length;e1?R(n):n;for(var r=R(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;idocument.createEvent("Event").timeStamp&&(Hn=function(){return Vn.now()})}var zn=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function Jn(){var t,e;for(qn=Hn(),Fn=!0,Ln.sort(zn),Un=0;UnUn&&Ln[n].id>t.id)n--;Ln.splice(n+1,0,t)}else Ln.push(t);Mn||(Mn=!0,un(Jn))}}function Qn(t){var e=t.$options.provide;if(e){var n=f(e)?e.call(t):e;if(!l(n))return;for(var r=Yt(t),o=ht?Reflect.ownKeys(n):Object.keys(n),i=0;i-1)if(i&&!C(o,"default"))a=!1;else if(""===a||a===E(t)){var c=Ar(String,o.type);(c<0||s-1)return this;var n=R(arguments,1);return n.unshift(this),f(t.install)?t.install.apply(t,n):f(t)&&t.apply(null,n),e.push(t),this}}function Zr(t){t.mixin=function(t){return this.options=Cr(this.options,t),this}}function to(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,o=t._Ctor||(t._Ctor={});if(o[r])return o[r];var i=or(t)||or(n.options);var a=function(t){this._init(t)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=e++,a.options=Cr(n.options,t),a["super"]=n,a.options.props&&eo(a),a.options.computed&&no(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,V.forEach((function(t){a[t]=n[t]})),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=N({},a.options),o[r]=a,a}}function eo(t){var e=t.options.props;for(var n in e)Pr(t.prototype,"_props",n)}function no(t){var e=t.options.computed;for(var n in e)Fr(t.prototype,n,e[n])}function ro(t){V.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&d(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&f(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}function oo(t){return t&&(or(t.Ctor.options)||t.tag)}function io(t,e){return o(t)?t.indexOf(e)>-1:"string"===typeof t?t.split(",").indexOf(e)>-1:!!h(t)&&t.test(e)}function ao(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var s=a.name;s&&!e(s)&&so(n,i,r,o)}}}function so(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,w(n,e)}Wr(Qr),zr(Qr),On(Qr),$n(Qr),Me(Qr);var co=[String,RegExp,Array],uo={name:"keep-alive",abstract:!0,props:{include:co,exclude:co,max:[String,Number]},methods:{cacheVNode:function(){var t=this,e=t.cache,n=t.keys,r=t.vnodeToCache,o=t.keyToCache;if(r){var i=r.tag,a=r.componentInstance,s=r.componentOptions;e[o]={name:oo(s),tag:i,componentInstance:a},n.push(o),this.max&&n.length>parseInt(this.max)&&so(e,n[0],n,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)so(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){ao(t,(function(t){return io(e,t)}))})),this.$watch("exclude",(function(e){ao(t,(function(t){return!io(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=qe(t),n=e&&e.componentOptions;if(n){var r=oo(n),o=this,i=o.include,a=o.exclude;if(i&&(!r||!io(i,r))||a&&r&&io(a,r))return e;var s=this,c=s.cache,u=s.keys,f=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;c[f]?(e.componentInstance=c[f].componentInstance,w(u,f),u.push(f)):(this.vnodeToCache=e,this.keyToCache=f),e.data.keepAlive=!0}return e||t&&t[0]}},fo={KeepAlive:uo};function lo(t){var e={get:function(){return J}};Object.defineProperty(t,"config",e),t.util={warn:pr,extend:N,mergeOptions:Cr,defineReactive:qt},t.set=Ht,t.delete=Vt,t.nextTick=un,t.observable=function(t){return Bt(t),t},t.options=Object.create(null),V.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,N(t.options.components,fo),Yr(t),Zr(t),to(t),ro(t)}lo(Qr),Object.defineProperty(Qr.prototype,"$isServer",{get:ft}),Object.defineProperty(Qr.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Qr,"FunctionalRenderContext",{value:tr}),Qr.version=pn;var po=b("style,class"),ho=b("input,textarea,option,select,progress"),vo=function(t,e,n){return"value"===n&&ho(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},mo=b("contenteditable,draggable,spellcheck"),yo=b("events,caret,typing,plaintext-only"),go=function(t,e){return Co(e)||"false"===e?"false":"contenteditable"===t&&yo(e)?e:"true"},bo=b("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),_o="http://www.w3.org/1999/xlink",wo=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},xo=function(t){return wo(t)?t.slice(6,t.length):""},Co=function(t){return null==t||!1===t};function Oo(t){var e=t.data,n=t,r=t;while(a(r.componentInstance))r=r.componentInstance._vnode,r&&r.data&&(e=ko(r.data,e));while(a(n=n.parent))n&&n.data&&(e=ko(e,n.data));return So(e.staticClass,e.class)}function ko(t,e){return{staticClass:jo(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function So(t,e){return a(t)||a(e)?jo(t,$o(e)):""}function jo(t,e){return t?e?t+" "+e:t:e||""}function $o(t){return Array.isArray(t)?Eo(t):l(t)?Ao(t):"string"===typeof t?t:""}function Eo(t){for(var e,n="",r=0,o=t.length;r-1?Io[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Io[t]=/HTMLUnknownElement/.test(e.toString())}var Mo=b("text,number,password,search,email,tel,url");function Fo(t){if("string"===typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}function Uo(t,e){var n=document.createElement(t);return"select"!==t||e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n}function Bo(t,e){return document.createElementNS(To[t],e)}function qo(t){return document.createTextNode(t)}function Ho(t){return document.createComment(t)}function Vo(t,e,n){t.insertBefore(e,n)}function zo(t,e){t.removeChild(e)}function Jo(t,e){t.appendChild(e)}function Wo(t){return t.parentNode}function Ko(t){return t.nextSibling}function Xo(t){return t.tagName}function Go(t,e){t.textContent=e}function Qo(t,e){t.setAttribute(e,"")}var Yo=Object.freeze({__proto__:null,createElement:Uo,createElementNS:Bo,createTextNode:qo,createComment:Ho,insertBefore:Vo,removeChild:zo,appendChild:Jo,parentNode:Wo,nextSibling:Ko,tagName:Xo,setTextContent:Go,setStyleScope:Qo}),Zo={create:function(t,e){ti(e)},update:function(t,e){t.data.ref!==e.data.ref&&(ti(t,!0),ti(e))},destroy:function(t){ti(t,!0)}};function ti(t,e){var n=t.data.ref;if(a(n)){var r=t.context,i=t.componentInstance||t.elm,s=e?null:i,c=e?void 0:i;if(f(n))Ge(n,r,[s],r,"template ref function");else{var u=t.data.refInFor,l="string"===typeof n||"number"===typeof n,p=Jt(n),d=r.$refs;if(l||p)if(u){var h=l?d[n]:n.value;e?o(h)&&w(h,i):o(h)?h.includes(i)||h.push(i):l?(d[n]=[i],ei(r,n,d[n])):n.value=[i]}else if(l){if(e&&d[n]!==i)return;d[n]=c,ei(r,n,s)}else if(p){if(e&&n.value!==i)return;n.value=s}else 0}}}function ei(t,e,n){var r=t._setupState;r&&C(r,e)&&(Jt(r[e])?r[e].value=n:r[e]=n)}var ni=new yt("",{},[]),ri=["create","activate","update","remove","destroy"];function oi(t,e){return t.key===e.key&&t.asyncFactory===e.asyncFactory&&(t.tag===e.tag&&t.isComment===e.isComment&&a(t.data)===a(e.data)&&ii(t,e)||s(t.isAsyncPlaceholder)&&i(e.asyncFactory.error))}function ii(t,e){if("input"!==t.tag)return!0;var n,r=a(n=t.data)&&a(n=n.attrs)&&n.type,o=a(n=e.data)&&a(n=n.attrs)&&n.type;return r===o||Mo(r)&&Mo(o)}function ai(t,e,n){var r,o,i={};for(r=e;r<=n;++r)o=t[r].key,a(o)&&(i[o]=r);return i}function si(t){var e,n,r={},c=t.modules,f=t.nodeOps;for(e=0;ev?(l=i(n[g+1])?null:n[g+1].elm,O(t,l,n,d,g,r)):d>g&&S(e,p,v)}function E(t,e,n,r){for(var o=n;o-1?gi(t,e,n):bo(e)?Co(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):mo(e)?t.setAttribute(e,go(e,n)):wo(e)?Co(n)?t.removeAttributeNS(_o,xo(e)):t.setAttributeNS(_o,e,n):gi(t,e,n)}function gi(t,e,n){if(Co(n))t.removeAttribute(e);else{if(et&&!nt&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var bi={create:mi,update:mi};function _i(t,e){var n=e.elm,r=e.data,o=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var s=Oo(e),c=n._transitionClasses;a(c)&&(s=jo(s,$o(c))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var wi,xi={create:_i,update:_i},Ci="__r",Oi="__c";function ki(t){if(a(t[Ci])){var e=et?"change":"input";t[e]=[].concat(t[Ci],t[e]||[]),delete t[Ci]}a(t[Oi])&&(t.change=[].concat(t[Oi],t.change||[]),delete t[Oi])}function Si(t,e,n){var r=wi;return function o(){var i=e.apply(null,arguments);null!==i&&Ei(t,o,n,r)}}var ji=tn&&!(at&&Number(at[1])<=53);function $i(t,e,n,r){if(ji){var o=qn,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}wi.addEventListener(t,e,ct?{capture:n,passive:r}:n)}function Ei(t,e,n,r){(r||wi).removeEventListener(t,e._wrapper||e,n)}function Ai(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};wi=e.elm||t.elm,ki(n),ee(n,r,$i,Ei,Si,e.context),wi=void 0}}var Ti,Pi={create:Ai,update:Ai,destroy:function(t){return Ai(t,ni)}};function Ri(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,o=e.elm,c=t.data.domProps||{},u=e.data.domProps||{};for(n in(a(u.__ob__)||s(u._v_attr_proxy))&&(u=e.data.domProps=N({},u)),c)n in u||(o[n]="");for(n in u){if(r=u[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===c[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var f=i(r)?"":String(r);Ni(o,f)&&(o.value=f)}else if("innerHTML"===n&&Ro(o.tagName)&&i(o.innerHTML)){Ti=Ti||document.createElement("div"),Ti.innerHTML="".concat(r,"");var l=Ti.firstChild;while(o.firstChild)o.removeChild(o.firstChild);while(l.firstChild)o.appendChild(l.firstChild)}else if(r!==c[n])try{o[n]=r}catch(Ya){}}}}function Ni(t,e){return!t.composing&&("OPTION"===t.tagName||Li(t,e)||Ii(t,e))}function Li(t,e){var n=!0;try{n=document.activeElement!==t}catch(Ya){}return n&&t.value!==e}function Ii(t,e){var n=t.value,r=t._vModifiers;if(a(r)){if(r.number)return g(n)!==g(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}var Di={create:Ri,update:Ri},Mi=O((function(t){var e={},n=/;(?![^(]*\))/g,r=/:(.+)/;return t.split(n).forEach((function(t){if(t){var n=t.split(r);n.length>1&&(e[n[0].trim()]=n[1].trim())}})),e}));function Fi(t){var e=Ui(t.style);return t.staticStyle?N(t.staticStyle,e):e}function Ui(t){return Array.isArray(t)?L(t):"string"===typeof t?Mi(t):t}function Bi(t,e){var n,r={};if(e){var o=t;while(o.componentInstance)o=o.componentInstance._vnode,o&&o.data&&(n=Fi(o.data))&&N(r,n)}(n=Fi(t.data))&&N(r,n);var i=t;while(i=i.parent)i.data&&(n=Fi(i.data))&&N(r,n);return r}var qi,Hi=/^--/,Vi=/\s*!important$/,zi=function(t,e,n){if(Hi.test(e))t.style.setProperty(e,n);else if(Vi.test(n))t.style.setProperty(E(e),n.replace(Vi,""),"important");else{var r=Wi(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(Gi).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function Yi(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Gi).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";while(n.indexOf(r)>=0)n=n.replace(r," ");n=n.trim(),n?t.setAttribute("class",n):t.removeAttribute("class")}}function Zi(t){if(t){if("object"===typeof t){var e={};return!1!==t.css&&N(e,ta(t.name||"v")),N(e,t),e}return"string"===typeof t?ta(t):void 0}}var ta=O((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),ea=Z&&!nt,na="transition",ra="animation",oa="transition",ia="transitionend",aa="animation",sa="animationend";ea&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(oa="WebkitTransition",ia="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(aa="WebkitAnimation",sa="webkitAnimationEnd"));var ca=Z?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function ua(t){ca((function(){ca(t)}))}function fa(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),Qi(t,e))}function la(t,e){t._transitionClasses&&w(t._transitionClasses,e),Yi(t,e)}function pa(t,e,n){var r=ha(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s=o===na?ia:sa,c=0,u=function(){t.removeEventListener(s,f),n()},f=function(e){e.target===t&&++c>=a&&u()};setTimeout((function(){c0&&(n=na,f=a,l=i.length):e===ra?u>0&&(n=ra,f=u,l=c.length):(f=Math.max(a,u),n=f>0?a>u?na:ra:null,l=n?n===na?i.length:c.length:0);var p=n===na&&da.test(r[oa+"Property"]);return{type:n,timeout:f,propCount:l,hasTransform:p}}function va(t,e){while(t.length1}function wa(t,e){!0!==e.data.show&&ya(e)}var xa=Z?{create:wa,activate:wa,remove:function(t,e){!0!==t.data.show?ga(t,e):e()}}:{},Ca=[bi,xi,Pi,Di,Xi,xa],Oa=Ca.concat(vi),ka=si({nodeOps:Yo,modules:Oa});nt&&document.addEventListener("selectionchange",(function(){var t=document.activeElement;t&&t.vmodel&&Ra(t,"input")}));var Sa={inserted:function(t,e,n,r){"select"===n.tag?(r.elm&&!r.elm._vOptions?ne(n,"postpatch",(function(){Sa.componentUpdated(t,e,n)})):ja(t,e,n.context),t._vOptions=[].map.call(t.options,Aa)):("textarea"===n.tag||Mo(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",Ta),t.addEventListener("compositionend",Pa),t.addEventListener("change",Pa),nt&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if("select"===n.tag){ja(t,e,n.context);var r=t._vOptions,o=t._vOptions=[].map.call(t.options,Aa);if(o.some((function(t,e){return!F(t,r[e])}))){var i=t.multiple?e.value.some((function(t){return Ea(t,o)})):e.value!==e.oldValue&&Ea(e.value,o);i&&Ra(t,"change")}}}};function ja(t,e,n){$a(t,e,n),(et||rt)&&setTimeout((function(){$a(t,e,n)}),0)}function $a(t,e,n){var r=e.value,o=t.multiple;if(!o||Array.isArray(r)){for(var i,a,s=0,c=t.options.length;s-1,a.selected!==i&&(a.selected=i);else if(F(Aa(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function Ea(t,e){return e.every((function(e){return!F(e,t)}))}function Aa(t){return"_value"in t?t._value:t.value}function Ta(t){t.target.composing=!0}function Pa(t){t.target.composing&&(t.target.composing=!1,Ra(t.target,"input"))}function Ra(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Na(t){return!t.componentInstance||t.data&&t.data.transition?t:Na(t.componentInstance._vnode)}var La={bind:function(t,e,n){var r=e.value;n=Na(n);var o=n.data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,ya(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value,o=e.oldValue;if(!r!==!o){n=Na(n);var i=n.data&&n.data.transition;i?(n.data.show=!0,r?ya(n,(function(){t.style.display=t.__vOriginalDisplay})):ga(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none"}},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}},Ia={model:Sa,show:La},Da={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ma(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Ma(qe(e.children)):t}function Fa(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[S(r)]=o[r];return e}function Ua(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}function Ba(t){while(t=t.parent)if(t.data.transition)return!0}function qa(t,e){return e.key===t.key&&e.tag===t.tag}var Ha=function(t){return t.tag||Se(t)},Va=function(t){return"show"===t.name},za={name:"transition",props:Da,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Ha),n.length)){0;var r=this.mode;0;var o=n[0];if(Ba(this.$vnode))return o;var i=Ma(o);if(!i)return o;if(this._leaving)return Ua(t,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:u(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s=(i.data||(i.data={})).transition=Fa(this),c=this._vnode,f=Ma(c);if(i.data.directives&&i.data.directives.some(Va)&&(i.data.show=!0),f&&f.data&&!qa(i,f)&&!Se(f)&&(!f.componentInstance||!f.componentInstance._vnode.isComment)){var l=f.data.transition=N({},s);if("out-in"===r)return this._leaving=!0,ne(l,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Ua(t,o);if("in-out"===r){if(Se(i))return c;var p,d=function(){p()};ne(s,"afterEnter",d),ne(s,"enterCancelled",d),ne(l,"delayLeave",(function(t){p=t}))}}return o}}},Ja=N({tag:String,moveClass:String},Da);delete Ja.mode;var Wa={props:Ja,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Sn(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Fa(this),s=0;s0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(r=a.match(/Edge\/(\d+)/),(!r||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/),r&&(o=+r[1]))),t.exports=o},"2d83":function(t,e,n){"use strict";var r=n("387f");t.exports=function(t,e,n,o,i){var a=new Error(t);return r(a,e,n,o,i)}},"2e67":function(t,e,n){"use strict";t.exports=function(t){return!(!t||!t.__CANCEL__)}},"30b5":function(t,e,n){"use strict";var r=n("c532");function o(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}t.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else if(r.isURLSearchParams(e))i=e.toString();else{var a=[];r.forEach(e,(function(t,e){null!==t&&"undefined"!==typeof t&&(r.isArray(t)?e+="[]":t=[t],r.forEach(t,(function(t){r.isDate(t)?t=t.toISOString():r.isObject(t)&&(t=JSON.stringify(t)),a.push(o(e)+"="+o(t))})))})),i=a.join("&")}if(i){var s=t.indexOf("#");-1!==s&&(t=t.slice(0,s)),t+=(-1===t.indexOf("?")?"?":"&")+i}return t}},"342f":function(t,e,n){var r=n("d066");t.exports=r("navigator","userAgent")||""},3511:function(t,e){var n=TypeError,r=9007199254740991;t.exports=function(t){if(t>r)throw n("Maximum allowed index exceeded");return t}},"387f":function(t,e,n){"use strict";t.exports=function(t,e,n,r,o){return t.config=e,n&&(t.code=n),t.request=r,t.response=o,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},t}},3934:function(t,e,n){"use strict";var r=n("c532");t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=o(window.location.href),function(e){var n=r.isString(e)?o(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return function(){return!0}}()},"3a34":function(t,e,n){"use strict";var r=n("83ab"),o=n("e8b5"),i=TypeError,a=Object.getOwnPropertyDescriptor,s=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(t){return t instanceof TypeError}}();t.exports=s?function(t,e){if(o(t)&&!a(t,"length").writable)throw i("Cannot set read only .length");return t.length=e}:function(t,e){return t.length=e}},"3a9b":function(t,e,n){var r=n("e330");t.exports=r({}.isPrototypeOf)},"40d5":function(t,e,n){var r=n("d039");t.exports=!r((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},4362:function(t,e,n){e.nextTick=function(t){var e=Array.prototype.slice.call(arguments);e.shift(),setTimeout((function(){t.apply(null,e)}),0)},e.platform=e.arch=e.execPath=e.title="browser",e.pid=1,e.browser=!0,e.env={},e.argv=[],e.binding=function(t){throw new Error("No such module. (Possibly not yet loaded)")},function(){var t,r="/";e.cwd=function(){return r},e.chdir=function(e){t||(t=n("df7c")),r=t.resolve(e,r)}}(),e.exit=e.kill=e.umask=e.dlopen=e.uptime=e.memoryUsage=e.uvCounters=function(){},e.features={}},"44ad":function(t,e,n){var r=n("e330"),o=n("d039"),i=n("c6b6"),a=Object,s=r("".split);t.exports=o((function(){return!a("z").propertyIsEnumerable(0)}))?function(t){return"String"==i(t)?s(t,""):a(t)}:a},"467f":function(t,e,n){"use strict";var r=n("2d83");t.exports=function(t,e,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?e(r("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)}},"485a":function(t,e,n){var r=n("c65b"),o=n("1626"),i=n("861d"),a=TypeError;t.exports=function(t,e){var n,s;if("string"===e&&o(n=t.toString)&&!i(s=r(n,t)))return s;if(o(n=t.valueOf)&&!i(s=r(n,t)))return s;if("string"!==e&&o(n=t.toString)&&!i(s=r(n,t)))return s;throw a("Can't convert object to primitive value")}},"4a0c":function(t){t.exports=JSON.parse('{"_from":"axios@^0.21.1","_id":"axios@0.21.4","_inBundle":false,"_integrity":"sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==","_location":"/axios","_phantomChildren":{},"_requested":{"type":"range","registry":true,"raw":"axios@^0.21.1","name":"axios","escapedName":"axios","rawSpec":"^0.21.1","saveSpec":null,"fetchSpec":"^0.21.1"},"_requiredBy":["/"],"_resolved":"https://registry.npmjs.org/axios/-/axios-0.21.4.tgz","_shasum":"c67b90dc0568e5c1cf2b0b858c43ba28e2eda575","_spec":"axios@^0.21.1","_where":"/tmp/spyguard/app/backend","author":{"name":"Matt Zabriskie"},"browser":{"./lib/adapters/http.js":"./lib/adapters/xhr.js"},"bugs":{"url":"https://github.com/axios/axios/issues"},"bundleDependencies":false,"bundlesize":[{"path":"./dist/axios.min.js","threshold":"5kB"}],"dependencies":{"follow-redirects":"^1.14.0"},"deprecated":false,"description":"Promise based HTTP client for the browser and node.js","devDependencies":{"coveralls":"^3.0.0","es6-promise":"^4.2.4","grunt":"^1.3.0","grunt-banner":"^0.6.0","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-watch":"^1.0.0","grunt-eslint":"^23.0.0","grunt-karma":"^4.0.0","grunt-mocha-test":"^0.13.3","grunt-ts":"^6.0.0-beta.19","grunt-webpack":"^4.0.2","istanbul-instrumenter-loader":"^1.0.0","jasmine-core":"^2.4.1","karma":"^6.3.2","karma-chrome-launcher":"^3.1.0","karma-firefox-launcher":"^2.1.0","karma-jasmine":"^1.1.1","karma-jasmine-ajax":"^0.1.13","karma-safari-launcher":"^1.0.0","karma-sauce-launcher":"^4.3.6","karma-sinon":"^1.0.5","karma-sourcemap-loader":"^0.3.8","karma-webpack":"^4.0.2","load-grunt-tasks":"^3.5.2","minimist":"^1.2.0","mocha":"^8.2.1","sinon":"^4.5.0","terser-webpack-plugin":"^4.2.3","typescript":"^4.0.5","url-search-params":"^0.10.0","webpack":"^4.44.2","webpack-dev-server":"^3.11.0"},"homepage":"https://axios-http.com","jsdelivr":"dist/axios.min.js","keywords":["xhr","http","ajax","promise","node"],"license":"MIT","main":"index.js","name":"axios","repository":{"type":"git","url":"git+https://github.com/axios/axios.git"},"scripts":{"build":"NODE_ENV=production grunt build","coveralls":"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","examples":"node ./examples/server.js","fix":"eslint --fix lib/**/*.js","postversion":"git push && git push --tags","preversion":"npm test","start":"node ./sandbox/server.js","test":"grunt test","version":"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json"},"typings":"./index.d.ts","unpkg":"dist/axios.min.js","version":"0.21.4"}')},"4a7b":function(t,e,n){"use strict";var r=n("c532");t.exports=function(t,e){e=e||{};var n={},o=["url","method","data"],i=["headers","auth","proxy","params"],a=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],s=["validateStatus"];function c(t,e){return r.isPlainObject(t)&&r.isPlainObject(e)?r.merge(t,e):r.isPlainObject(e)?r.merge({},e):r.isArray(e)?e.slice():e}function u(o){r.isUndefined(e[o])?r.isUndefined(t[o])||(n[o]=c(void 0,t[o])):n[o]=c(t[o],e[o])}r.forEach(o,(function(t){r.isUndefined(e[t])||(n[t]=c(void 0,e[t]))})),r.forEach(i,u),r.forEach(a,(function(o){r.isUndefined(e[o])?r.isUndefined(t[o])||(n[o]=c(void 0,t[o])):n[o]=c(void 0,e[o])})),r.forEach(s,(function(r){r in e?n[r]=c(t[r],e[r]):r in t&&(n[r]=c(void 0,t[r]))}));var f=o.concat(i).concat(a).concat(s),l=Object.keys(t).concat(Object.keys(e)).filter((function(t){return-1===f.indexOf(t)}));return r.forEach(l,u),n}},"4d64":function(t,e,n){var r=n("fc6a"),o=n("23cb"),i=n("07fa"),a=function(t){return function(e,n,a){var s,c=r(e),u=i(c),f=o(a,u);if(t&&n!=n){while(u>f)if(s=c[f++],s!=s)return!0}else for(;u>f;f++)if((t||f in c)&&c[f]===n)return t||f||0;return!t&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},"50c4":function(t,e,n){var r=n("5926"),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},5270:function(t,e,n){"use strict";var r=n("c532"),o=n("c401"),i=n("2e67"),a=n("2444");function s(t){t.cancelToken&&t.cancelToken.throwIfRequested()}t.exports=function(t){s(t),t.headers=t.headers||{},t.data=o.call(t,t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),r.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]}));var e=t.adapter||a.adapter;return e(t).then((function(e){return s(t),e.data=o.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return i(e)||(s(t),e&&e.response&&(e.response.data=o.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},5692:function(t,e,n){var r=n("c430"),o=n("c6cd");(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.26.0",mode:r?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.26.0/LICENSE",source:"https://github.com/zloirock/core-js"})},"56ef":function(t,e,n){var r=n("d066"),o=n("e330"),i=n("241c"),a=n("7418"),s=n("825a"),c=o([].concat);t.exports=r("Reflect","ownKeys")||function(t){var e=i.f(s(t)),n=a.f;return n?c(e,n(t)):e}},5926:function(t,e,n){var r=n("b42e");t.exports=function(t){var e=+t;return e!==e||0===e?0:r(e)}},"59ed":function(t,e,n){var r=n("1626"),o=n("0d51"),i=TypeError;t.exports=function(t){if(r(t))return t;throw i(o(t)+" is not a function")}},"5c6c":function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},"5e77":function(t,e,n){var r=n("83ab"),o=n("1a2d"),i=Function.prototype,a=r&&Object.getOwnPropertyDescriptor,s=o(i,"name"),c=s&&"something"===function(){}.name,u=s&&(!r||r&&a(i,"name").configurable);t.exports={EXISTS:s,PROPER:c,CONFIGURABLE:u}},"5f02":function(t,e,n){"use strict";t.exports=function(t){return"object"===typeof t&&!0===t.isAxiosError}},6374:function(t,e,n){var r=n("da84"),o=Object.defineProperty;t.exports=function(t,e){try{o(r,t,{value:e,configurable:!0,writable:!0})}catch(n){r[t]=e}return e}},"69f3":function(t,e,n){var r,o,i,a=n("cdce"),s=n("da84"),c=n("861d"),u=n("9112"),f=n("1a2d"),l=n("c6cd"),p=n("f772"),d=n("d012"),h="Object already initialized",v=s.TypeError,m=s.WeakMap,y=function(t){return i(t)?o(t):r(t,{})},g=function(t){return function(e){var n;if(!c(e)||(n=o(e)).type!==t)throw v("Incompatible receiver, "+t+" required");return n}};if(a||l.state){var b=l.state||(l.state=new m);b.get=b.get,b.has=b.has,b.set=b.set,r=function(t,e){if(b.has(t))throw v(h);return e.facade=t,b.set(t,e),e},o=function(t){return b.get(t)||{}},i=function(t){return b.has(t)}}else{var _=p("state");d[_]=!0,r=function(t,e){if(f(t,_))throw v(h);return e.facade=t,u(t,_,e),e},o=function(t){return f(t,_)?t[_]:{}},i=function(t){return f(t,_)}}t.exports={set:r,get:o,has:i,enforce:y,getterFor:g}},7234:function(t,e){t.exports=function(t){return null===t||void 0===t}},7418:function(t,e){e.f=Object.getOwnPropertySymbols},7839:function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},"7a77":function(t,e,n){"use strict";function r(t){this.message=t}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,t.exports=r},"7aac":function(t,e,n){"use strict";var r=n("c532");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,a){var s=[];s.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(o)&&s.push("path="+o),r.isString(i)&&s.push("domain="+i),!0===a&&s.push("secure"),document.cookie=s.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},"7b0b":function(t,e,n){var r=n("1d80"),o=Object;t.exports=function(t){return o(r(t))}},"7d7e":function(t,e,n){var r=n("40d5"),o=Function.prototype,i=o.call,a=r&&o.bind.bind(i,i);t.exports=r?a:function(t){return function(){return i.apply(t,arguments)}}},"825a":function(t,e,n){var r=n("861d"),o=String,i=TypeError;t.exports=function(t){if(r(t))return t;throw i(o(t)+" is not an object")}},"83ab":function(t,e,n){var r=n("d039");t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},"83b9":function(t,e,n){"use strict";var r=n("d925"),o=n("e683");t.exports=function(t,e){return t&&!r(e)?o(t,e):e}},"848b":function(t,e,n){"use strict";var r=n("4a0c"),o={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){o[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}}));var i={},a=r.version.split(".");function s(t,e){for(var n=e?e.split("."):a,r=t.split("."),o=0;o<3;o++){if(n[o]>r[o])return!0;if(n[o]0){var i=r[o],a=e[i];if(a){var s=t[i],c=void 0===s||a(s,i,t);if(!0!==c)throw new TypeError("option "+i+" must be "+c)}else if(!0!==n)throw Error("Unknown option "+i)}}o.transitional=function(t,e,n){var o=e&&s(e);function a(t,e){return"[Axios v"+r.version+"] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,r,s){if(!1===t)throw new Error(a(r," has been removed in "+e));return o&&!i[r]&&(i[r]=!0,console.warn(a(r," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,r,s)}},t.exports={isOlderVersion:s,assertOptions:c,validators:o}},"861d":function(t,e,n){var r=n("1626"),o=n("8ea1"),i=o.all;t.exports=o.IS_HTMLDDA?function(t){return"object"==typeof t?null!==t:r(t)||t===i}:function(t){return"object"==typeof t?null!==t:r(t)}},8925:function(t,e,n){var r=n("e330"),o=n("1626"),i=n("c6cd"),a=r(Function.toString);o(i.inspectSource)||(i.inspectSource=function(t){return a(t)}),t.exports=i.inspectSource},"8c4f":function(t,e,n){"use strict";function r(t,e){for(var n in e)t[n]=e[n];return t}n.d(e,"a",(function(){return xe}));var o=/[!'()*]/g,i=function(t){return"%"+t.charCodeAt(0).toString(16)},a=/%2C/g,s=function(t){return encodeURIComponent(t).replace(o,i).replace(a,",")};function c(t){try{return decodeURIComponent(t)}catch(e){0}return t}function u(t,e,n){void 0===e&&(e={});var r,o=n||l;try{r=o(t||"")}catch(s){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(f):f(a)}return r}var f=function(t){return null==t||"object"===typeof t?t:String(t)};function l(t){var e={};return t=t.trim().replace(/^(\?|#|&)/,""),t?(t.split("&").forEach((function(t){var n=t.replace(/\+/g," ").split("="),r=c(n.shift()),o=n.length>0?c(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]})),e):e}function p(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(void 0===n)return"";if(null===n)return s(e);if(Array.isArray(n)){var r=[];return n.forEach((function(t){void 0!==t&&(null===t?r.push(s(e)):r.push(s(e)+"="+s(t)))})),r.join("&")}return s(e)+"="+s(n)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var d=/\/?$/;function h(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=v(i)}catch(s){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:g(e,o),matched:t?y(t):[]};return n&&(a.redirectedFrom=g(n,o)),Object.freeze(a)}function v(t){if(Array.isArray(t))return t.map(v);if(t&&"object"===typeof t){var e={};for(var n in t)e[n]=v(t[n]);return e}return t}var m=h(null,{path:"/"});function y(t){var e=[];while(t)e.unshift(t),t=t.parent;return e}function g(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;void 0===o&&(o="");var i=e||p;return(n||"/")+i(r)+o}function b(t,e,n){return e===m?t===e:!!e&&(t.path&&e.path?t.path.replace(d,"")===e.path.replace(d,"")&&(n||t.hash===e.hash&&_(t.query,e.query)):!(!t.name||!e.name)&&(t.name===e.name&&(n||t.hash===e.hash&&_(t.query,e.query)&&_(t.params,e.params))))}function _(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t).sort(),r=Object.keys(e).sort();return n.length===r.length&&n.every((function(n,o){var i=t[n],a=r[o];if(a!==n)return!1;var s=e[n];return null==i||null==s?i===s:"object"===typeof i&&"object"===typeof s?_(i,s):String(i)===String(s)}))}function w(t,e){return 0===t.path.replace(d,"/").indexOf(e.path.replace(d,"/"))&&(!e.hash||t.hash===e.hash)&&x(t.query,e.query)}function x(t,e){for(var n in e)if(!(n in t))return!1;return!0}function C(t){for(var e=0;e=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}function E(t){return t.replace(/\/(?:\s*\/)+/g,"/")}var A=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},T=G,P=D,R=M,N=B,L=X,I=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function D(t,e){var n,r=[],o=0,i=0,a="",s=e&&e.delimiter||"/";while(null!=(n=I.exec(t))){var c=n[0],u=n[1],f=n.index;if(a+=t.slice(i,f),i=f+c.length,u)a+=u[1];else{var l=t[i],p=n[2],d=n[3],h=n[4],v=n[5],m=n[6],y=n[7];a&&(r.push(a),a="");var g=null!=p&&null!=l&&l!==p,b="+"===m||"*"===m,_="?"===m||"*"===m,w=n[2]||s,x=h||v;r.push({name:d||o++,prefix:p||"",delimiter:w,optional:_,repeat:b,partial:g,asterisk:!!y,pattern:x?H(x):y?".*":"[^"+q(w)+"]+?"})}}return i1||!O.length)return 0===O.length?t():t("span",{},O)}if("a"===this.tag)C.on=x,C.attrs={href:c,"aria-current":g};else{var k=at(this.$slots.default);if(k){k.isStatic=!1;var S=k.data=r({},k.data);for(var j in S.on=S.on||{},S.on){var $=S.on[j];j in x&&(S.on[j]=Array.isArray($)?$:[$])}for(var E in x)E in S.on?S.on[E].push(x[E]):S.on[E]=_;var A=k.data.attrs=r({},k.data.attrs);A.href=c,A["aria-current"]=g}else C.on=x}return t(this.tag,C,this.$slots.default)}};function it(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)&&!t.defaultPrevented&&(void 0===t.button||0===t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}function at(t){if(t)for(var e,n=0;n-1&&(s.params[l]=n.params[l]);return s.path=Y(u.path,s.params,'named route "'+c+'"'),p(u,s,a)}if(s.path){s.params={};for(var d=0;d-1}function Jt(t,e){return zt(t)&&t._isRouter&&(null==e||t.type===e)}function Wt(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function Kt(t){return function(e,n,r){var o=!1,i=0,a=null;Xt(t,(function(t,e,n,s){if("function"===typeof t&&void 0===t.cid){o=!0,i++;var c,u=Zt((function(e){Yt(e)&&(e=e.default),t.resolved="function"===typeof e?e:tt.extend(e),n.components[s]=e,i--,i<=0&&r()})),f=Zt((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=zt(t)?t:new Error(e),r(a))}));try{c=t(u,f)}catch(p){f(p)}if(c)if("function"===typeof c.then)c.then(u,f);else{var l=c.component;l&&"function"===typeof l.then&&l.then(u,f)}}})),o||r()}}function Xt(t,e){return Gt(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Gt(t){return Array.prototype.concat.apply([],t)}var Qt="function"===typeof Symbol&&"symbol"===typeof Symbol.toStringTag;function Yt(t){return t.__esModule||Qt&&"Module"===t[Symbol.toStringTag]}function Zt(t){var e=!1;return function(){var n=[],r=arguments.length;while(r--)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var te=function(t,e){this.router=t,this.base=ee(e),this.current=m,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function ee(t){if(!t)if(ct){var e=document.querySelector("base");t=e&&e.getAttribute("href")||"/",t=t.replace(/^https?:\/\/[^\/]+/,"")}else t="/";return"/"!==t.charAt(0)&&(t="/"+t),t.replace(/\/$/,"")}function ne(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=Nt&&n;r&&this.listeners.push(xt());var o=function(){var n=t.current,o=le(t.base);t.current===m&&o===t._startLocation||t.transitionTo(o,(function(t){r&&Ct(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,(function(t){Lt(E(r.base+t.fullPath)),Ct(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,(function(t){It(E(r.base+t.fullPath)),Ct(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(le(this.base)!==this.current.fullPath){var e=E(this.base+this.current.fullPath);t?Lt(e):It(e)}},e.prototype.getCurrentLocation=function(){return le(this.base)},e}(te);function le(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(E(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var pe=function(t){function e(e,n,r){t.call(this,e,n),r&&de(this.base)||he()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router,n=e.options.scrollBehavior,r=Nt&&n;r&&this.listeners.push(xt());var o=function(){var e=t.current;he()&&t.transitionTo(ve(),(function(n){r&&Ct(t.router,n,e,!0),Nt||ge(n.fullPath)}))},i=Nt?"popstate":"hashchange";window.addEventListener(i,o),this.listeners.push((function(){window.removeEventListener(i,o)}))}},e.prototype.push=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,(function(t){ye(t.fullPath),Ct(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,(function(t){ge(t.fullPath),Ct(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;ve()!==e&&(t?ye(e):ge(e))},e.prototype.getCurrentLocation=function(){return ve()},e}(te);function de(t){var e=le(t);if(!/^\/#/.test(e))return window.location.replace(E(t+"/#"+e)),!0}function he(){var t=ve();return"/"===t.charAt(0)||(ge("/"+t),!1)}function ve(){var t=window.location.href,e=t.indexOf("#");return e<0?"":(t=t.slice(e+1),t)}function me(t){var e=window.location.href,n=e.indexOf("#"),r=n>=0?e.slice(0,n):e;return r+"#"+t}function ye(t){Nt?Lt(me(t)):window.location.hash=t}function ge(t){Nt?It(me(t)):window.location.replace(me(t))}var be=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){Jt(t,Dt.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(te),_e=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=dt(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!Nt&&!1!==t.fallback,this.fallback&&(e="hash"),ct||(e="abstract"),this.mode=e,e){case"history":this.history=new fe(this,t.base);break;case"hash":this.history=new pe(this,t.base,this.fallback);break;case"abstract":this.history=new be(this,t.base);break;default:0}},we={currentRoute:{configurable:!0}};_e.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},we.currentRoute.get=function(){return this.history&&this.history.current},_e.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof fe||n instanceof pe){var r=function(t){var r=n.current,o=e.options.scrollBehavior,i=Nt&&o;i&&"fullPath"in t&&Ct(e,t,r,!1)},o=function(t){n.setupListeners(),r(t)};n.transitionTo(n.getCurrentLocation(),o,o)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},_e.prototype.beforeEach=function(t){return Ce(this.beforeHooks,t)},_e.prototype.beforeResolve=function(t){return Ce(this.resolveHooks,t)},_e.prototype.afterEach=function(t){return Ce(this.afterHooks,t)},_e.prototype.onReady=function(t,e){this.history.onReady(t,e)},_e.prototype.onError=function(t){this.history.onError(t)},_e.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!==typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},_e.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!==typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},_e.prototype.go=function(t){this.history.go(t)},_e.prototype.back=function(){this.go(-1)},_e.prototype.forward=function(){this.go(1)},_e.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},_e.prototype.resolve=function(t,e,n){e=e||this.history.current;var r=Z(t,e,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath,a=this.history.base,s=Oe(a,i,this.mode);return{location:r,route:o,href:s,normalizedTo:r,resolved:o}},_e.prototype.getRoutes=function(){return this.matcher.getRoutes()},_e.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==m&&this.history.transitionTo(this.history.getCurrentLocation())},_e.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==m&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(_e.prototype,we);var xe=_e;function Ce(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}function Oe(t,e,n){var r="hash"===n?"#"+e:e;return t?E(t+"/"+r):r}_e.install=st,_e.version="3.6.5",_e.isNavigationFailure=Jt,_e.NavigationFailureType=Dt,_e.START_LOCATION=m,ct&&window.Vue&&window.Vue.use(_e)},"8df4":function(t,e,n){"use strict";var r=n("7a77");function o(t){if("function"!==typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;t((function(t){n.reason||(n.reason=new r(t),e(n.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var t,e=new o((function(e){t=e}));return{token:e,cancel:t}},t.exports=o},"8ea1":function(t,e){var n="object"==typeof document&&document.all,r="undefined"==typeof n&&void 0!==n;t.exports={all:n,IS_HTMLDDA:r}},"90e3":function(t,e,n){var r=n("e330"),o=0,i=Math.random(),a=r(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+a(++o+i,36)}},9112:function(t,e,n){var r=n("83ab"),o=n("9bf2"),i=n("5c6c");t.exports=r?function(t,e,n){return o.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},"94ca":function(t,e,n){var r=n("d039"),o=n("1626"),i=/#|\.prototype\./,a=function(t,e){var n=c[s(t)];return n==f||n!=u&&(o(e)?r(e):!!e)},s=a.normalize=function(t){return String(t).replace(i,".").toLowerCase()},c=a.data={},u=a.NATIVE="N",f=a.POLYFILL="P";t.exports=a},"9bf2":function(t,e,n){var r=n("83ab"),o=n("0cfb"),i=n("aed9"),a=n("825a"),s=n("a04b"),c=TypeError,u=Object.defineProperty,f=Object.getOwnPropertyDescriptor,l="enumerable",p="configurable",d="writable";e.f=r?i?function(t,e,n){if(a(t),e=s(e),a(n),"function"===typeof t&&"prototype"===e&&"value"in n&&d in n&&!n[d]){var r=f(t,e);r&&r[d]&&(t[e]=n.value,n={configurable:p in n?n[p]:r[p],enumerable:l in n?n[l]:r[l],writable:!1})}return u(t,e,n)}:u:function(t,e,n){if(a(t),e=s(e),a(n),o)try{return u(t,e,n)}catch(r){}if("get"in n||"set"in n)throw c("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},a04b:function(t,e,n){var r=n("c04e"),o=n("d9b5");t.exports=function(t){var e=r(t,"string");return o(e)?e:e+""}},aed9:function(t,e,n){var r=n("83ab"),o=n("d039");t.exports=r&&o((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},b42e:function(t,e){var n=Math.ceil,r=Math.floor;t.exports=Math.trunc||function(t){var e=+t;return(e>0?r:n)(e)}},b50d:function(t,e,n){"use strict";var r=n("c532"),o=n("467f"),i=n("7aac"),a=n("30b5"),s=n("83b9"),c=n("c345"),u=n("3934"),f=n("2d83");t.exports=function(t){return new Promise((function(e,n){var l=t.data,p=t.headers,d=t.responseType;r.isFormData(l)&&delete p["Content-Type"];var h=new XMLHttpRequest;if(t.auth){var v=t.auth.username||"",m=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";p.Authorization="Basic "+btoa(v+":"+m)}var y=s(t.baseURL,t.url);function g(){if(h){var r="getAllResponseHeaders"in h?c(h.getAllResponseHeaders()):null,i=d&&"text"!==d&&"json"!==d?h.response:h.responseText,a={data:i,status:h.status,statusText:h.statusText,headers:r,config:t,request:h};o(e,n,a),h=null}}if(h.open(t.method.toUpperCase(),a(y,t.params,t.paramsSerializer),!0),h.timeout=t.timeout,"onloadend"in h?h.onloadend=g:h.onreadystatechange=function(){h&&4===h.readyState&&(0!==h.status||h.responseURL&&0===h.responseURL.indexOf("file:"))&&setTimeout(g)},h.onabort=function(){h&&(n(f("Request aborted",t,"ECONNABORTED",h)),h=null)},h.onerror=function(){n(f("Network Error",t,null,h)),h=null},h.ontimeout=function(){var e="timeout of "+t.timeout+"ms exceeded";t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(f(e,t,t.transitional&&t.transitional.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",h)),h=null},r.isStandardBrowserEnv()){var b=(t.withCredentials||u(y))&&t.xsrfCookieName?i.read(t.xsrfCookieName):void 0;b&&(p[t.xsrfHeaderName]=b)}"setRequestHeader"in h&&r.forEach(p,(function(t,e){"undefined"===typeof l&&"content-type"===e.toLowerCase()?delete p[e]:h.setRequestHeader(e,t)})),r.isUndefined(t.withCredentials)||(h.withCredentials=!!t.withCredentials),d&&"json"!==d&&(h.responseType=t.responseType),"function"===typeof t.onDownloadProgress&&h.addEventListener("progress",t.onDownloadProgress),"function"===typeof t.onUploadProgress&&h.upload&&h.upload.addEventListener("progress",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then((function(t){h&&(h.abort(),n(t),h=null)})),l||(l=null),h.send(l)}))}},b622:function(t,e,n){var r=n("da84"),o=n("5692"),i=n("1a2d"),a=n("90e3"),s=n("04f8"),c=n("fdbf"),u=o("wks"),f=r.Symbol,l=f&&f["for"],p=c?f:f&&f.withoutSetter||a;t.exports=function(t){if(!i(u,t)||!s&&"string"!=typeof u[t]){var e="Symbol."+t;s&&i(f,t)?u[t]=f[t]:u[t]=c&&l?l(e):p(e)}return u[t]}},bc3a:function(t,e,n){t.exports=n("cee4")},c04e:function(t,e,n){var r=n("c65b"),o=n("861d"),i=n("d9b5"),a=n("dc4a"),s=n("485a"),c=n("b622"),u=TypeError,f=c("toPrimitive");t.exports=function(t,e){if(!o(t)||i(t))return t;var n,c=a(t,f);if(c){if(void 0===e&&(e="default"),n=r(c,t,e),!o(n)||i(n))return n;throw u("Can't convert object to primitive value")}return void 0===e&&(e="number"),s(t,e)}},c345:function(t,e,n){"use strict";var r=n("c532"),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];t.exports=function(t){var e,n,i,a={};return t?(r.forEach(t.split("\n"),(function(t){if(i=t.indexOf(":"),e=r.trim(t.substr(0,i)).toLowerCase(),n=r.trim(t.substr(i+1)),e){if(a[e]&&o.indexOf(e)>=0)return;a[e]="set-cookie"===e?(a[e]?a[e]:[]).concat([n]):a[e]?a[e]+", "+n:n}})),a):a}},c401:function(t,e,n){"use strict";var r=n("c532"),o=n("2444");t.exports=function(t,e,n){var i=this||o;return r.forEach(n,(function(n){t=n.call(i,t,e)})),t}},c430:function(t,e){t.exports=!1},c532:function(t,e,n){"use strict";var r=n("1d2b"),o=Object.prototype.toString;function i(t){return"[object Array]"===o.call(t)}function a(t){return"undefined"===typeof t}function s(t){return null!==t&&!a(t)&&null!==t.constructor&&!a(t.constructor)&&"function"===typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}function c(t){return"[object ArrayBuffer]"===o.call(t)}function u(t){return"undefined"!==typeof FormData&&t instanceof FormData}function f(t){var e;return e="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer,e}function l(t){return"string"===typeof t}function p(t){return"number"===typeof t}function d(t){return null!==t&&"object"===typeof t}function h(t){if("[object Object]"!==o.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function v(t){return"[object Date]"===o.call(t)}function m(t){return"[object File]"===o.call(t)}function y(t){return"[object Blob]"===o.call(t)}function g(t){return"[object Function]"===o.call(t)}function b(t){return d(t)&&g(t.pipe)}function _(t){return"undefined"!==typeof URLSearchParams&&t instanceof URLSearchParams}function w(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function x(){return("undefined"===typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!==typeof window&&"undefined"!==typeof document)}function C(t,e){if(null!==t&&"undefined"!==typeof t)if("object"!==typeof t&&(t=[t]),i(t))for(var n=0,r=t.length;nu)o(r,n=e[u++])&&(~a(f,n)||c(f,n));return f}},cb2d:function(t,e,n){var r=n("1626"),o=n("9bf2"),i=n("13d2"),a=n("6374");t.exports=function(t,e,n,s){s||(s={});var c=s.enumerable,u=void 0!==s.name?s.name:e;if(r(n)&&i(n,u,s),s.global)c?t[e]=n:a(e,n);else{try{s.unsafe?t[e]&&(c=!0):delete t[e]}catch(f){}c?t[e]=n:o.f(t,e,{value:n,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return t}},cc12:function(t,e,n){var r=n("da84"),o=n("861d"),i=r.document,a=o(i)&&o(i.createElement);t.exports=function(t){return a?i.createElement(t):{}}},cdce:function(t,e,n){var r=n("da84"),o=n("1626"),i=r.WeakMap;t.exports=o(i)&&/native code/.test(String(i))},cee4:function(t,e,n){"use strict";var r=n("c532"),o=n("1d2b"),i=n("0a06"),a=n("4a7b"),s=n("2444");function c(t){var e=new i(t),n=o(i.prototype.request,e);return r.extend(n,i.prototype,e),r.extend(n,e),n}var u=c(s);u.Axios=i,u.create=function(t){return c(a(u.defaults,t))},u.Cancel=n("7a77"),u.CancelToken=n("8df4"),u.isCancel=n("2e67"),u.all=function(t){return Promise.all(t)},u.spread=n("0df6"),u.isAxiosError=n("5f02"),t.exports=u,t.exports.default=u},d012:function(t,e){t.exports={}},d039:function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},d066:function(t,e,n){var r=n("da84"),o=n("1626"),i=function(t){return o(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?i(r[t]):r[t]&&r[t][e]}},d1e7:function(t,e,n){"use strict";var r={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!r.call({1:2},1);e.f=i?function(t){var e=o(this,t);return!!e&&e.enumerable}:r},d925:function(t,e,n){"use strict";t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},d9b5:function(t,e,n){var r=n("d066"),o=n("1626"),i=n("3a9b"),a=n("fdbf"),s=Object;t.exports=a?function(t){return"symbol"==typeof t}:function(t){var e=r("Symbol");return o(e)&&i(e.prototype,s(t))}},da84:function(t,e,n){(function(e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||function(){return this}()||Function("return this")()}).call(this,n("c8ba"))},dc4a:function(t,e,n){var r=n("59ed"),o=n("7234");t.exports=function(t,e){var n=t[e];return o(n)?void 0:r(n)}},df7c:function(t,e,n){(function(t){function n(t,e){for(var n=0,r=t.length-1;r>=0;r--){var o=t[r];"."===o?t.splice(r,1):".."===o?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function r(t){"string"!==typeof t&&(t+="");var e,n=0,r=-1,o=!0;for(e=t.length-1;e>=0;--e)if(47===t.charCodeAt(e)){if(!o){n=e+1;break}}else-1===r&&(o=!1,r=e+1);return-1===r?"":t.slice(n,r)}function o(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r=-1&&!r;i--){var a=i>=0?arguments[i]:t.cwd();if("string"!==typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,r="/"===a.charAt(0))}return e=n(o(e.split("/"),(function(t){return!!t})),!r).join("/"),(r?"/":"")+e||"."},e.normalize=function(t){var r=e.isAbsolute(t),a="/"===i(t,-1);return t=n(o(t.split("/"),(function(t){return!!t})),!r).join("/"),t||r||(t="."),t&&a&&(t+="/"),(r?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(o(t,(function(t,e){if("string"!==typeof t)throw new TypeError("Arguments to path.join must be strings");return t})).join("/"))},e.relative=function(t,n){function r(t){for(var e=0;e=0;n--)if(""!==t[n])break;return e>n?[]:t.slice(e,n-e+1)}t=e.resolve(t).substr(1),n=e.resolve(n).substr(1);for(var o=r(t.split("/")),i=r(n.split("/")),a=Math.min(o.length,i.length),s=a,c=0;c=1;--i)if(e=t.charCodeAt(i),47===e){if(!o){r=i;break}}else o=!1;return-1===r?n?"/":".":n&&1===r?"/":t.slice(0,r)},e.basename=function(t,e){var n=r(t);return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},e.extname=function(t){"string"!==typeof t&&(t+="");for(var e=-1,n=0,r=-1,o=!0,i=0,a=t.length-1;a>=0;--a){var s=t.charCodeAt(a);if(47!==s)-1===r&&(o=!1,r=a+1),46===s?-1===e?e=a:1!==i&&(i=1):-1!==e&&(i=-1);else if(!o){n=a+1;break}}return-1===e||-1===r||0===i||1===i&&e===r-1&&e===n+1?"":t.slice(e,r)};var i="b"==="ab".substr(-1)?function(t,e,n){return t.substr(e,n)}:function(t,e,n){return e<0&&(e=t.length+e),t.substr(e,n)}}).call(this,n("4362"))},e330:function(t,e,n){var r=n("c6b6"),o=n("7d7e");t.exports=function(t){if("Function"===r(t))return o(t)}},e683:function(t,e,n){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},e893:function(t,e,n){var r=n("1a2d"),o=n("56ef"),i=n("06cf"),a=n("9bf2");t.exports=function(t,e,n){for(var s=o(e),c=a.f,u=i.f,f=0;f= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent(\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */,\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options =\n typeof scriptExports === 'function' ? scriptExports.options : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) {\n // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","/*!\n * Vue.js v2.7.13\n * (c) 2014-2022 Evan You\n * Released under the MIT License.\n */\nvar emptyObject = Object.freeze({});\nvar isArray = Array.isArray;\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef(v) {\n return v === undefined || v === null;\n}\nfunction isDef(v) {\n return v !== undefined && v !== null;\n}\nfunction isTrue(v) {\n return v === true;\n}\nfunction isFalse(v) {\n return v === false;\n}\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive(value) {\n return (typeof value === 'string' ||\n typeof value === 'number' ||\n // $flow-disable-line\n typeof value === 'symbol' ||\n typeof value === 'boolean');\n}\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * Quick object check - this is primarily used to tell\n * objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object';\n}\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\nfunction toRawType(value) {\n return _toString.call(value).slice(8, -1);\n}\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject(obj) {\n return _toString.call(obj) === '[object Object]';\n}\nfunction isRegExp(v) {\n return _toString.call(v) === '[object RegExp]';\n}\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex(val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val);\n}\nfunction isPromise(val) {\n return (isDef(val) &&\n typeof val.then === 'function' &&\n typeof val.catch === 'function');\n}\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString(val) {\n return val == null\n ? ''\n : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n ? JSON.stringify(val, null, 2)\n : String(val);\n}\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber(val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n;\n}\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap(str, expectsLowerCase) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; };\n}\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n/**\n * Remove an item from an array.\n */\nfunction remove$2(arr, item) {\n var len = arr.length;\n if (len) {\n // fast path for the only / last item\n if (item === arr[len - 1]) {\n arr.length = len - 1;\n return;\n }\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1);\n }\n }\n}\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn(obj, key) {\n return hasOwnProperty.call(obj, key);\n}\n/**\n * Create a cached version of a pure function.\n */\nfunction cached(fn) {\n var cache = Object.create(null);\n return function cachedFn(str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); });\n});\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase();\n});\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n/* istanbul ignore next */\nfunction polyfillBind(fn, ctx) {\n function boundFn(a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx);\n }\n boundFn._length = fn.length;\n return boundFn;\n}\nfunction nativeBind(fn, ctx) {\n return fn.bind(ctx);\n}\n// @ts-expect-error bind cannot be `undefined`\nvar bind = Function.prototype.bind ? nativeBind : polyfillBind;\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray(list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret;\n}\n/**\n * Mix properties into target object.\n */\nfunction extend(to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to;\n}\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject(arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res;\n}\n/* eslint-disable no-unused-vars */\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop(a, b, c) { }\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n/* eslint-enable no-unused-vars */\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual(a, b) {\n if (a === b)\n return true;\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return (a.length === b.length &&\n a.every(function (e, i) {\n return looseEqual(e, b[i]);\n }));\n }\n else if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return (keysA.length === keysB.length &&\n keysA.every(function (key) {\n return looseEqual(a[key], b[key]);\n }));\n }\n else {\n /* istanbul ignore next */\n return false;\n }\n }\n catch (e) {\n /* istanbul ignore next */\n return false;\n }\n }\n else if (!isObjectA && !isObjectB) {\n return String(a) === String(b);\n }\n else {\n return false;\n }\n}\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf(arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val))\n return i;\n }\n return -1;\n}\n/**\n * Ensure a function is called only once.\n */\nfunction once(fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n };\n}\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill\nfunction hasChanged(x, y) {\n if (x === y) {\n return x === 0 && 1 / x !== 1 / y;\n }\n else {\n return x === x || y === y;\n }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\nvar ASSET_TYPES = ['component', 'directive', 'filter'];\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured',\n 'serverPrefetch',\n 'renderTracked',\n 'renderTriggered'\n];\n\nvar config = {\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n /**\n * Show production mode tip message on boot?\n */\n productionTip: process.env.NODE_ENV !== 'production',\n /**\n * Whether to enable devtools\n */\n devtools: process.env.NODE_ENV !== 'production',\n /**\n * Whether to record perf\n */\n performance: false,\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n /**\n * Perform updates asynchronously. Intended to be used by Vue Test Utils\n * This will significantly reduce performance if set to false.\n */\n async: true,\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n};\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved(str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5f;\n}\n/**\n * Define a property.\n */\nfunction def(obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp(\"[^\".concat(unicodeRegExp.source, \".$_\\\\d]\"));\nfunction parsePath(path) {\n if (bailRE.test(path)) {\n return;\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj)\n return;\n obj = obj[segments[i]];\n }\n return obj;\n };\n}\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nUA && UA.indexOf('android') > 0;\nvar isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);\nUA && /chrome\\/\\d+/.test(UA) && !isEdge;\nUA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n// Firefox has a \"watch\" function on Object.prototype...\n// @ts-expect-error firebox support\nvar nativeWatch = {}.watch;\nvar supportsPassive = false;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', {\n get: function () {\n /* istanbul ignore next */\n supportsPassive = true;\n }\n }); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n }\n catch (e) { }\n}\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer =\n global['process'] && global['process'].env.VUE_ENV === 'server';\n }\n else {\n _isServer = false;\n }\n }\n return _isServer;\n};\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n/* istanbul ignore next */\nfunction isNative(Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString());\n}\nvar hasSymbol = typeof Symbol !== 'undefined' &&\n isNative(Symbol) &&\n typeof Reflect !== 'undefined' &&\n isNative(Reflect.ownKeys);\nvar _Set; // $flow-disable-line\n/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n}\nelse {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = /** @class */ (function () {\n function Set() {\n this.set = Object.create(null);\n }\n Set.prototype.has = function (key) {\n return this.set[key] === true;\n };\n Set.prototype.add = function (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function () {\n this.set = Object.create(null);\n };\n return Set;\n }());\n}\n\nvar currentInstance = null;\n/**\n * This is exposed for compatibility with v3 (e.g. some functions in VueUse\n * relies on it). Do not use this internally, just use `currentInstance`.\n *\n * @internal this function needs manual type declaration because it relies\n * on previously manually authored types from Vue 2\n */\nfunction getCurrentInstance() {\n return currentInstance && { proxy: currentInstance };\n}\n/**\n * @internal\n */\nfunction setCurrentInstance(vm) {\n if (vm === void 0) { vm = null; }\n if (!vm)\n currentInstance && currentInstance._scope.off();\n currentInstance = vm;\n vm && vm._scope.on();\n}\n\n/**\n * @internal\n */\nvar VNode = /** @class */ (function () {\n function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n }\n Object.defineProperty(VNode.prototype, \"child\", {\n // DEPRECATED: alias for componentInstance for backwards compat.\n /* istanbul ignore next */\n get: function () {\n return this.componentInstance;\n },\n enumerable: false,\n configurable: true\n });\n return VNode;\n}());\nvar createEmptyVNode = function (text) {\n if (text === void 0) { text = ''; }\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node;\n};\nfunction createTextVNode(val) {\n return new VNode(undefined, undefined, undefined, String(val));\n}\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode(vnode) {\n var cloned = new VNode(vnode.tag, vnode.data, \n // #7975\n // clone children array to avoid mutating original in case of cloning\n // a child.\n vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.asyncMeta = vnode.asyncMeta;\n cloned.isCloned = true;\n return cloned;\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\nvar uid$2 = 0;\nvar pendingCleanupDeps = [];\nvar cleanupDeps = function () {\n for (var i = 0; i < pendingCleanupDeps.length; i++) {\n var dep = pendingCleanupDeps[i];\n dep.subs = dep.subs.filter(function (s) { return s; });\n dep._pending = false;\n }\n pendingCleanupDeps.length = 0;\n};\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n * @internal\n */\nvar Dep = /** @class */ (function () {\n function Dep() {\n // pending subs cleanup\n this._pending = false;\n this.id = uid$2++;\n this.subs = [];\n }\n Dep.prototype.addSub = function (sub) {\n this.subs.push(sub);\n };\n Dep.prototype.removeSub = function (sub) {\n // #12696 deps with massive amount of subscribers are extremely slow to\n // clean up in Chromium\n // to workaround this, we unset the sub for now, and clear them on\n // next scheduler flush.\n this.subs[this.subs.indexOf(sub)] = null;\n if (!this._pending) {\n this._pending = true;\n pendingCleanupDeps.push(this);\n }\n };\n Dep.prototype.depend = function (info) {\n if (Dep.target) {\n Dep.target.addDep(this);\n if (process.env.NODE_ENV !== 'production' && info && Dep.target.onTrack) {\n Dep.target.onTrack(__assign({ effect: Dep.target }, info));\n }\n }\n };\n Dep.prototype.notify = function (info) {\n // stabilize the subscriber list first\n var subs = this.subs.filter(function (s) { return s; });\n if (process.env.NODE_ENV !== 'production' && !config.async) {\n // subs aren't sorted in scheduler if not running async\n // we need to sort them now to make sure they fire in correct\n // order\n subs.sort(function (a, b) { return a.id - b.id; });\n }\n for (var i = 0, l = subs.length; i < l; i++) {\n var sub = subs[i];\n if (process.env.NODE_ENV !== 'production' && info) {\n sub.onTrigger &&\n sub.onTrigger(__assign({ effect: subs[i] }, info));\n }\n sub.update();\n }\n };\n return Dep;\n}());\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\nfunction pushTarget(target) {\n targetStack.push(target);\n Dep.target = target;\n}\nfunction popTarget() {\n targetStack.pop();\n Dep.target = targetStack[targetStack.length - 1];\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\nvar methodsToPatch = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n];\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break;\n case 'splice':\n inserted = args.slice(2);\n break;\n }\n if (inserted)\n ob.observeArray(inserted);\n // notify change\n if (process.env.NODE_ENV !== 'production') {\n ob.dep.notify({\n type: \"array mutation\" /* TriggerOpTypes.ARRAY_MUTATION */,\n target: this,\n key: method\n });\n }\n else {\n ob.dep.notify();\n }\n return result;\n });\n});\n\nvar rawMap = new WeakMap();\nfunction reactive(target) {\n makeReactive(target, false);\n return target;\n}\n/**\n * Return a shallowly-reactive copy of the original object, where only the root\n * level properties are reactive. It also does not auto-unwrap refs (even at the\n * root level).\n */\nfunction shallowReactive(target) {\n makeReactive(target, true);\n def(target, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, true);\n return target;\n}\nfunction makeReactive(target, shallow) {\n // if trying to observe a readonly proxy, return the readonly version.\n if (!isReadonly(target)) {\n if (process.env.NODE_ENV !== 'production') {\n if (isArray(target)) {\n warn(\"Avoid using Array as root value for \".concat(shallow ? \"shallowReactive()\" : \"reactive()\", \" as it cannot be tracked in watch() or watchEffect(). Use \").concat(shallow ? \"shallowRef()\" : \"ref()\", \" instead. This is a Vue-2-only limitation.\"));\n }\n var existingOb = target && target.__ob__;\n if (existingOb && existingOb.shallow !== shallow) {\n warn(\"Target is already a \".concat(existingOb.shallow ? \"\" : \"non-\", \"shallow reactive object, and cannot be converted to \").concat(shallow ? \"\" : \"non-\", \"shallow.\"));\n }\n }\n var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);\n if (process.env.NODE_ENV !== 'production' && !ob) {\n if (target == null || isPrimitive(target)) {\n warn(\"value cannot be made reactive: \".concat(String(target)));\n }\n if (isCollectionType(target)) {\n warn(\"Vue 2 does not support reactive collection types such as Map or Set.\");\n }\n }\n }\n}\nfunction isReactive(value) {\n if (isReadonly(value)) {\n return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\n }\n return !!(value && value.__ob__);\n}\nfunction isShallow(value) {\n return !!(value && value.__v_isShallow);\n}\nfunction isReadonly(value) {\n return !!(value && value.__v_isReadonly);\n}\nfunction isProxy(value) {\n return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n var raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n if (isObject(value)) {\n rawMap.set(value, true);\n }\n return value;\n}\n/**\n * @internal\n */\nfunction isCollectionType(value) {\n var type = toRawType(value);\n return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');\n}\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\nvar NO_INIITIAL_VALUE = {};\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\nfunction toggleObserving(value) {\n shouldObserve = value;\n}\n// ssr mock dep\nvar mockDep = {\n notify: noop,\n depend: noop,\n addSub: noop,\n removeSub: noop\n};\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = /** @class */ (function () {\n function Observer(value, shallow, mock) {\n if (shallow === void 0) { shallow = false; }\n if (mock === void 0) { mock = false; }\n this.value = value;\n this.shallow = shallow;\n this.mock = mock;\n // this.value = value\n this.dep = mock ? mockDep : new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (isArray(value)) {\n if (!mock) {\n if (hasProto) {\n value.__proto__ = arrayMethods;\n /* eslint-enable no-proto */\n }\n else {\n for (var i = 0, l = arrayKeys.length; i < l; i++) {\n var key = arrayKeys[i];\n def(value, key, arrayMethods[key]);\n }\n }\n }\n if (!shallow) {\n this.observeArray(value);\n }\n }\n else {\n /**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\n var keys = Object.keys(value);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);\n }\n }\n }\n /**\n * Observe a list of Array items.\n */\n Observer.prototype.observeArray = function (value) {\n for (var i = 0, l = value.length; i < l; i++) {\n observe(value[i], false, this.mock);\n }\n };\n return Observer;\n}());\n// helpers\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe(value, shallow, ssrMockReactivity) {\n if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n return value.__ob__;\n }\n if (shouldObserve &&\n (ssrMockReactivity || !isServerRendering()) &&\n (isArray(value) || isPlainObject(value)) &&\n Object.isExtensible(value) &&\n !value.__v_skip /* ReactiveFlags.SKIP */ &&\n !rawMap.has(value) &&\n !isRef(value) &&\n !(value instanceof VNode)) {\n return new Observer(value, shallow, ssrMockReactivity);\n }\n}\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive(obj, key, val, customSetter, shallow, mock) {\n var dep = new Dep();\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return;\n }\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n var setter = property && property.set;\n if ((!getter || setter) &&\n (val === NO_INIITIAL_VALUE || arguments.length === 2)) {\n val = obj[key];\n }\n var childOb = !shallow && observe(val, false, mock);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter() {\n var value = getter ? getter.call(obj) : val;\n if (Dep.target) {\n if (process.env.NODE_ENV !== 'production') {\n dep.depend({\n target: obj,\n type: \"get\" /* TrackOpTypes.GET */,\n key: key\n });\n }\n else {\n dep.depend();\n }\n if (childOb) {\n childOb.dep.depend();\n if (isArray(value)) {\n dependArray(value);\n }\n }\n }\n return isRef(value) && !shallow ? value.value : value;\n },\n set: function reactiveSetter(newVal) {\n var value = getter ? getter.call(obj) : val;\n if (!hasChanged(value, newVal)) {\n return;\n }\n if (process.env.NODE_ENV !== 'production' && customSetter) {\n customSetter();\n }\n if (setter) {\n setter.call(obj, newVal);\n }\n else if (getter) {\n // #7981: for accessor properties without setter\n return;\n }\n else if (!shallow && isRef(value) && !isRef(newVal)) {\n value.value = newVal;\n return;\n }\n else {\n val = newVal;\n }\n childOb = !shallow && observe(newVal, false, mock);\n if (process.env.NODE_ENV !== 'production') {\n dep.notify({\n type: \"set\" /* TriggerOpTypes.SET */,\n target: obj,\n key: key,\n newValue: newVal,\n oldValue: value\n });\n }\n else {\n dep.notify();\n }\n }\n });\n return dep;\n}\nfunction set(target, key, val) {\n if (process.env.NODE_ENV !== 'production' && (isUndef(target) || isPrimitive(target))) {\n warn(\"Cannot set reactive property on undefined, null, or primitive value: \".concat(target));\n }\n if (isReadonly(target)) {\n process.env.NODE_ENV !== 'production' && warn(\"Set operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\n return;\n }\n var ob = target.__ob__;\n if (isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n // when mocking for SSR, array methods are not hijacked\n if (ob && !ob.shallow && ob.mock) {\n observe(val, false, true);\n }\n return val;\n }\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val;\n }\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' &&\n warn('Avoid adding reactive properties to a Vue instance or its root $data ' +\n 'at runtime - declare it upfront in the data option.');\n return val;\n }\n if (!ob) {\n target[key] = val;\n return val;\n }\n defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);\n if (process.env.NODE_ENV !== 'production') {\n ob.dep.notify({\n type: \"add\" /* TriggerOpTypes.ADD */,\n target: target,\n key: key,\n newValue: val,\n oldValue: undefined\n });\n }\n else {\n ob.dep.notify();\n }\n return val;\n}\nfunction del(target, key) {\n if (process.env.NODE_ENV !== 'production' && (isUndef(target) || isPrimitive(target))) {\n warn(\"Cannot delete reactive property on undefined, null, or primitive value: \".concat(target));\n }\n if (isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return;\n }\n var ob = target.__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' &&\n warn('Avoid deleting properties on a Vue instance or its root $data ' +\n '- just set it to null.');\n return;\n }\n if (isReadonly(target)) {\n process.env.NODE_ENV !== 'production' &&\n warn(\"Delete operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\n return;\n }\n if (!hasOwn(target, key)) {\n return;\n }\n delete target[key];\n if (!ob) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n ob.dep.notify({\n type: \"delete\" /* TriggerOpTypes.DELETE */,\n target: target,\n key: key\n });\n }\n else {\n ob.dep.notify();\n }\n}\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray(value) {\n for (var e = void 0, i = 0, l = value.length; i < l; i++) {\n e = value[i];\n if (e && e.__ob__) {\n e.__ob__.dep.depend();\n }\n if (isArray(e)) {\n dependArray(e);\n }\n }\n}\n\n/**\n * @internal\n */\nvar RefFlag = \"__v_isRef\";\nfunction isRef(r) {\n return !!(r && r.__v_isRef === true);\n}\nfunction ref$1(value) {\n return createRef(value, false);\n}\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (isRef(rawValue)) {\n return rawValue;\n }\n var ref = {};\n def(ref, RefFlag, true);\n def(ref, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, shallow);\n def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));\n return ref;\n}\nfunction triggerRef(ref) {\n if (process.env.NODE_ENV !== 'production' && !ref.dep) {\n warn(\"received object is not a triggerable ref.\");\n }\n if (process.env.NODE_ENV !== 'production') {\n ref.dep &&\n ref.dep.notify({\n type: \"set\" /* TriggerOpTypes.SET */,\n target: ref,\n key: 'value'\n });\n }\n else {\n ref.dep && ref.dep.notify();\n }\n}\nfunction unref(ref) {\n return isRef(ref) ? ref.value : ref;\n}\nfunction proxyRefs(objectWithRefs) {\n if (isReactive(objectWithRefs)) {\n return objectWithRefs;\n }\n var proxy = {};\n var keys = Object.keys(objectWithRefs);\n for (var i = 0; i < keys.length; i++) {\n proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);\n }\n return proxy;\n}\nfunction proxyWithRefUnwrap(target, source, key) {\n Object.defineProperty(target, key, {\n enumerable: true,\n configurable: true,\n get: function () {\n var val = source[key];\n if (isRef(val)) {\n return val.value;\n }\n else {\n var ob = val && val.__ob__;\n if (ob)\n ob.dep.depend();\n return val;\n }\n },\n set: function (value) {\n var oldValue = source[key];\n if (isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n }\n else {\n source[key] = value;\n }\n }\n });\n}\nfunction customRef(factory) {\n var dep = new Dep();\n var _a = factory(function () {\n if (process.env.NODE_ENV !== 'production') {\n dep.depend({\n target: ref,\n type: \"get\" /* TrackOpTypes.GET */,\n key: 'value'\n });\n }\n else {\n dep.depend();\n }\n }, function () {\n if (process.env.NODE_ENV !== 'production') {\n dep.notify({\n target: ref,\n type: \"set\" /* TriggerOpTypes.SET */,\n key: 'value'\n });\n }\n else {\n dep.notify();\n }\n }), get = _a.get, set = _a.set;\n var ref = {\n get value() {\n return get();\n },\n set value(newVal) {\n set(newVal);\n }\n };\n def(ref, RefFlag, true);\n return ref;\n}\nfunction toRefs(object) {\n if (process.env.NODE_ENV !== 'production' && !isReactive(object)) {\n warn(\"toRefs() expects a reactive object but received a plain one.\");\n }\n var ret = isArray(object) ? new Array(object.length) : {};\n for (var key in object) {\n ret[key] = toRef(object, key);\n }\n return ret;\n}\nfunction toRef(object, key, defaultValue) {\n var val = object[key];\n if (isRef(val)) {\n return val;\n }\n var ref = {\n get value() {\n var val = object[key];\n return val === undefined ? defaultValue : val;\n },\n set value(newVal) {\n object[key] = newVal;\n }\n };\n def(ref, RefFlag, true);\n return ref;\n}\n\nvar rawToReadonlyMap = new WeakMap();\nvar rawToShallowReadonlyMap = new WeakMap();\nfunction readonly(target) {\n return createReadonly(target, false);\n}\nfunction createReadonly(target, shallow) {\n if (!isPlainObject(target)) {\n if (process.env.NODE_ENV !== 'production') {\n if (isArray(target)) {\n warn(\"Vue 2 does not support readonly arrays.\");\n }\n else if (isCollectionType(target)) {\n warn(\"Vue 2 does not support readonly collection types such as Map or Set.\");\n }\n else {\n warn(\"value cannot be made readonly: \".concat(typeof target));\n }\n }\n return target;\n }\n // already a readonly object\n if (isReadonly(target)) {\n return target;\n }\n // already has a readonly proxy\n var map = shallow ? rawToShallowReadonlyMap : rawToReadonlyMap;\n var existingProxy = map.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n var proxy = Object.create(Object.getPrototypeOf(target));\n map.set(target, proxy);\n def(proxy, \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */, true);\n def(proxy, \"__v_raw\" /* ReactiveFlags.RAW */, target);\n if (isRef(target)) {\n def(proxy, RefFlag, true);\n }\n if (shallow || isShallow(target)) {\n def(proxy, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, true);\n }\n var keys = Object.keys(target);\n for (var i = 0; i < keys.length; i++) {\n defineReadonlyProperty(proxy, target, keys[i], shallow);\n }\n return proxy;\n}\nfunction defineReadonlyProperty(proxy, target, key, shallow) {\n Object.defineProperty(proxy, key, {\n enumerable: true,\n configurable: true,\n get: function () {\n var val = target[key];\n return shallow || !isPlainObject(val) ? val : readonly(val);\n },\n set: function () {\n process.env.NODE_ENV !== 'production' &&\n warn(\"Set operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\n }\n });\n}\n/**\n * Returns a reactive-copy of the original object, where only the root level\n * properties are readonly, and does NOT unwrap refs nor recursively convert\n * returned properties.\n * This is used for creating the props proxy object for stateful components.\n */\nfunction shallowReadonly(target) {\n return createReadonly(target, true);\n}\n\nfunction computed(getterOrOptions, debugOptions) {\n var getter;\n var setter;\n var onlyGetter = isFunction(getterOrOptions);\n if (onlyGetter) {\n getter = getterOrOptions;\n setter = process.env.NODE_ENV !== 'production'\n ? function () {\n warn('Write operation failed: computed value is readonly');\n }\n : noop;\n }\n else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n var watcher = isServerRendering()\n ? null\n : new Watcher(currentInstance, getter, noop, { lazy: true });\n if (process.env.NODE_ENV !== 'production' && watcher && debugOptions) {\n watcher.onTrack = debugOptions.onTrack;\n watcher.onTrigger = debugOptions.onTrigger;\n }\n var ref = {\n // some libs rely on the presence effect for checking computed refs\n // from normal refs, but the implementation doesn't matter\n effect: watcher,\n get value() {\n if (watcher) {\n if (watcher.dirty) {\n watcher.evaluate();\n }\n if (Dep.target) {\n if (process.env.NODE_ENV !== 'production' && Dep.target.onTrack) {\n Dep.target.onTrack({\n effect: Dep.target,\n target: ref,\n type: \"get\" /* TrackOpTypes.GET */,\n key: 'value'\n });\n }\n watcher.depend();\n }\n return watcher.value;\n }\n else {\n return getter();\n }\n },\n set value(newVal) {\n setter(newVal);\n }\n };\n def(ref, RefFlag, true);\n def(ref, \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */, onlyGetter);\n return ref;\n}\n\nvar WATCHER = \"watcher\";\nvar WATCHER_CB = \"\".concat(WATCHER, \" callback\");\nvar WATCHER_GETTER = \"\".concat(WATCHER, \" getter\");\nvar WATCHER_CLEANUP = \"\".concat(WATCHER, \" cleanup\");\n// Simple effect.\nfunction watchEffect(effect, options) {\n return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n return doWatch(effect, null, (process.env.NODE_ENV !== 'production'\n ? __assign(__assign({}, options), { flush: 'post' }) : { flush: 'post' }));\n}\nfunction watchSyncEffect(effect, options) {\n return doWatch(effect, null, (process.env.NODE_ENV !== 'production'\n ? __assign(__assign({}, options), { flush: 'sync' }) : { flush: 'sync' }));\n}\n// initial value for watchers to trigger on undefined initial values\nvar INITIAL_WATCHER_VALUE = {};\n// implementation\nfunction watch(source, cb, options) {\n if (process.env.NODE_ENV !== 'production' && typeof cb !== 'function') {\n warn(\"`watch(fn, options?)` signature has been moved to a separate API. \" +\n \"Use `watchEffect(fn, options?)` instead. `watch` now only \" +\n \"supports `watch(source, cb, options?) signature.\");\n }\n return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, _a) {\n var _b = _a === void 0 ? emptyObject : _a, immediate = _b.immediate, deep = _b.deep, _c = _b.flush, flush = _c === void 0 ? 'pre' : _c, onTrack = _b.onTrack, onTrigger = _b.onTrigger;\n if (process.env.NODE_ENV !== 'production' && !cb) {\n if (immediate !== undefined) {\n warn(\"watch() \\\"immediate\\\" option is only respected when using the \" +\n \"watch(source, callback, options?) signature.\");\n }\n if (deep !== undefined) {\n warn(\"watch() \\\"deep\\\" option is only respected when using the \" +\n \"watch(source, callback, options?) signature.\");\n }\n }\n var warnInvalidSource = function (s) {\n warn(\"Invalid watch source: \".concat(s, \". A watch source can only be a getter/effect \") +\n \"function, a ref, a reactive object, or an array of these types.\");\n };\n var instance = currentInstance;\n var call = function (fn, type, args) {\n if (args === void 0) { args = null; }\n return invokeWithErrorHandling(fn, null, args, instance, type);\n };\n var getter;\n var forceTrigger = false;\n var isMultiSource = false;\n if (isRef(source)) {\n getter = function () { return source.value; };\n forceTrigger = isShallow(source);\n }\n else if (isReactive(source)) {\n getter = function () {\n source.__ob__.dep.depend();\n return source;\n };\n deep = true;\n }\n else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); });\n getter = function () {\n return source.map(function (s) {\n if (isRef(s)) {\n return s.value;\n }\n else if (isReactive(s)) {\n return traverse(s);\n }\n else if (isFunction(s)) {\n return call(s, WATCHER_GETTER);\n }\n else {\n process.env.NODE_ENV !== 'production' && warnInvalidSource(s);\n }\n });\n };\n }\n else if (isFunction(source)) {\n if (cb) {\n // getter with cb\n getter = function () { return call(source, WATCHER_GETTER); };\n }\n else {\n // no cb -> simple effect\n getter = function () {\n if (instance && instance._isDestroyed) {\n return;\n }\n if (cleanup) {\n cleanup();\n }\n return call(source, WATCHER, [onCleanup]);\n };\n }\n }\n else {\n getter = noop;\n process.env.NODE_ENV !== 'production' && warnInvalidSource(source);\n }\n if (cb && deep) {\n var baseGetter_1 = getter;\n getter = function () { return traverse(baseGetter_1()); };\n }\n var cleanup;\n var onCleanup = function (fn) {\n cleanup = watcher.onStop = function () {\n call(fn, WATCHER_CLEANUP);\n };\n };\n // in SSR there is no need to setup an actual effect, and it should be noop\n // unless it's eager\n if (isServerRendering()) {\n // we will also not call the invalidate callback (+ runner is not set up)\n onCleanup = noop;\n if (!cb) {\n getter();\n }\n else if (immediate) {\n call(cb, WATCHER_CB, [\n getter(),\n isMultiSource ? [] : undefined,\n onCleanup\n ]);\n }\n return noop;\n }\n var watcher = new Watcher(currentInstance, getter, noop, {\n lazy: true\n });\n watcher.noRecurse = !cb;\n var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;\n // overwrite default run\n watcher.run = function () {\n if (!watcher.active) {\n return;\n }\n if (cb) {\n // watch(source, cb)\n var newValue = watcher.get();\n if (deep ||\n forceTrigger ||\n (isMultiSource\n ? newValue.some(function (v, i) {\n return hasChanged(v, oldValue[i]);\n })\n : hasChanged(newValue, oldValue))) {\n // cleanup before running cb again\n if (cleanup) {\n cleanup();\n }\n call(cb, WATCHER_CB, [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,\n onCleanup\n ]);\n oldValue = newValue;\n }\n }\n else {\n // watchEffect\n watcher.get();\n }\n };\n if (flush === 'sync') {\n watcher.update = watcher.run;\n }\n else if (flush === 'post') {\n watcher.post = true;\n watcher.update = function () { return queueWatcher(watcher); };\n }\n else {\n // pre\n watcher.update = function () {\n if (instance && instance === currentInstance && !instance._isMounted) {\n // pre-watcher triggered before\n var buffer = instance._preWatchers || (instance._preWatchers = []);\n if (buffer.indexOf(watcher) < 0)\n buffer.push(watcher);\n }\n else {\n queueWatcher(watcher);\n }\n };\n }\n if (process.env.NODE_ENV !== 'production') {\n watcher.onTrack = onTrack;\n watcher.onTrigger = onTrigger;\n }\n // initial run\n if (cb) {\n if (immediate) {\n watcher.run();\n }\n else {\n oldValue = watcher.get();\n }\n }\n else if (flush === 'post' && instance) {\n instance.$once('hook:mounted', function () { return watcher.get(); });\n }\n else {\n watcher.get();\n }\n return function () {\n watcher.teardown();\n };\n}\n\nvar activeEffectScope;\nvar EffectScope = /** @class */ (function () {\n function EffectScope(detached) {\n if (detached === void 0) { detached = false; }\n this.detached = detached;\n /**\n * @internal\n */\n this.active = true;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this.parent = activeEffectScope;\n if (!detached && activeEffectScope) {\n this.index =\n (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\n }\n }\n EffectScope.prototype.run = function (fn) {\n if (this.active) {\n var currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n }\n finally {\n activeEffectScope = currentEffectScope;\n }\n }\n else if (process.env.NODE_ENV !== 'production') {\n warn(\"cannot run an inactive effect scope.\");\n }\n };\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n EffectScope.prototype.on = function () {\n activeEffectScope = this;\n };\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n EffectScope.prototype.off = function () {\n activeEffectScope = this.parent;\n };\n EffectScope.prototype.stop = function (fromParent) {\n if (this.active) {\n var i = void 0, l = void 0;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].teardown();\n }\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n }\n // nested scope, dereference from parent to avoid memory leaks\n if (!this.detached && this.parent && !fromParent) {\n // optimized O(1) removal\n var last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = undefined;\n this.active = false;\n }\n };\n return EffectScope;\n}());\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\n/**\n * @internal\n */\nfunction recordEffectScope(effect, scope) {\n if (scope === void 0) { scope = activeEffectScope; }\n if (scope && scope.active) {\n scope.effects.push(effect);\n }\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n }\n else if (process.env.NODE_ENV !== 'production') {\n warn(\"onScopeDispose() is called when there is no active effect scope\" +\n \" to be associated with.\");\n }\n}\n\nfunction provide(key, value) {\n if (!currentInstance) {\n if (process.env.NODE_ENV !== 'production') {\n warn(\"provide() can only be used inside setup().\");\n }\n }\n else {\n // TS doesn't allow symbol as index type\n resolveProvided(currentInstance)[key] = value;\n }\n}\nfunction resolveProvided(vm) {\n // by default an instance inherits its parent's provides object\n // but when it needs to provide values of its own, it creates its\n // own provides object using parent provides object as prototype.\n // this way in `inject` we can simply look up injections from direct\n // parent and let the prototype chain do the work.\n var existing = vm._provided;\n var parentProvides = vm.$parent && vm.$parent._provided;\n if (parentProvides === existing) {\n return (vm._provided = Object.create(parentProvides));\n }\n else {\n return existing;\n }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory) {\n if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; }\n // fallback to `currentRenderingInstance` so that this can be called in\n // a functional component\n var instance = currentInstance;\n if (instance) {\n // #2400\n // to support `app.use` plugins,\n // fallback to appContext's `provides` if the instance is at root\n var provides = instance.$parent && instance.$parent._provided;\n if (provides && key in provides) {\n // TS doesn't allow symbol as index type\n return provides[key];\n }\n else if (arguments.length > 1) {\n return treatDefaultAsFactory && isFunction(defaultValue)\n ? defaultValue.call(instance)\n : defaultValue;\n }\n else if (process.env.NODE_ENV !== 'production') {\n warn(\"injection \\\"\".concat(String(key), \"\\\" not found.\"));\n }\n }\n else if (process.env.NODE_ENV !== 'production') {\n warn(\"inject() can only be used inside setup() or functional components.\");\n }\n}\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once,\n capture: capture,\n passive: passive\n };\n});\nfunction createFnInvoker(fns, vm) {\n function invoker() {\n var fns = invoker.fns;\n if (isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n invokeWithErrorHandling(cloned[i], null, arguments, vm, \"v-on handler\");\n }\n }\n else {\n // return handler return value for single handlers\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\");\n }\n }\n invoker.fns = fns;\n return invoker;\n}\nfunction updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {\n var name, cur, old, event;\n for (name in on) {\n cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n if (isUndef(cur)) {\n process.env.NODE_ENV !== 'production' &&\n warn(\"Invalid handler for event \\\"\".concat(event.name, \"\\\": got \") + String(cur), vm);\n }\n else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur, vm);\n }\n if (isTrue(event.once)) {\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n }\n add(event.name, cur, event.capture, event.passive, event.params);\n }\n else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove(event.name, oldOn[name], event.capture);\n }\n }\n}\n\nfunction mergeVNodeHook(def, hookKey, hook) {\n if (def instanceof VNode) {\n def = def.data.hook || (def.data.hook = {});\n }\n var invoker;\n var oldHook = def[hookKey];\n function wrappedHook() {\n hook.apply(this, arguments);\n // important: remove merged hook to ensure it's called only once\n // and prevent memory leak\n remove$2(invoker.fns, wrappedHook);\n }\n if (isUndef(oldHook)) {\n // no existing hook\n invoker = createFnInvoker([wrappedHook]);\n }\n else {\n /* istanbul ignore if */\n if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n // already a merged invoker\n invoker = oldHook;\n invoker.fns.push(wrappedHook);\n }\n else {\n // existing plain hook\n invoker = createFnInvoker([oldHook, wrappedHook]);\n }\n }\n invoker.merged = true;\n def[hookKey] = invoker;\n}\n\nfunction extractPropsFromVNodeData(data, Ctor, tag) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n return;\n }\n var res = {};\n var attrs = data.attrs, props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n if (process.env.NODE_ENV !== 'production') {\n var keyInLowerCase = key.toLowerCase();\n if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {\n tip(\"Prop \\\"\".concat(keyInLowerCase, \"\\\" is passed to component \") +\n \"\".concat(formatComponentName(\n // @ts-expect-error tag is string\n tag || Ctor), \", but the declared prop name is\") +\n \" \\\"\".concat(key, \"\\\". \") +\n \"Note that HTML attributes are case-insensitive and camelCased \" +\n \"props need to use their kebab-case equivalents when using in-DOM \" +\n \"templates. You should probably use \\\"\".concat(altKey, \"\\\" instead of \\\"\").concat(key, \"\\\".\"));\n }\n }\n checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n }\n }\n return res;\n}\nfunction checkProp(res, hash, key, altKey, preserve) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true;\n }\n else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true;\n }\n }\n return false;\n}\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array. There are\n// two cases where extra normalization is needed:\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren(children) {\n for (var i = 0; i < children.length; i++) {\n if (isArray(children[i])) {\n return Array.prototype.concat.apply([], children);\n }\n }\n return children;\n}\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. \r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./capture.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./capture.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./capture.vue?vue&type=template&id=68930959&\"\nimport script from \"./capture.vue?vue&type=script&lang=js&\"\nexport * from \"./capture.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file diff --git a/app/frontend/dist/js/chunk-7cb613d5.5349d43e.js b/app/frontend/dist/js/chunk-7cb613d5.5349d43e.js new file mode 100644 index 0000000..8278edd --- /dev/null +++ b/app/frontend/dist/js/chunk-7cb613d5.5349d43e.js @@ -0,0 +1,2 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-7cb613d5"],{"36bc":function(t,s,e){"use strict";e("d28e")},d28e:function(t,s,e){},e022:function(t,s,e){"use strict";e.r(s);e("14d9");var r=function(){var t=this,s=t._self._c;return s("div",[t.results?s("div",[t.grep_keyword("STALKERWARE","high")?s("div",{staticClass:"high-wrapper"},[s("div",{staticClass:"center"},[s("h1",{staticClass:"warning-title",domProps:{innerHTML:t._s(t.$t("report.stalkerware_msg"))}}),s("button",{staticClass:"btn btn-report-low-light",on:{click:function(s){return t.new_capture()}}},[t._v(t._s(t.$t("report.start_new_capture")))]),s("button",{staticClass:"btn btn-report-high",on:{click:function(s){t.show_report=!0,t.results=!1}}},[t._v(t._s(t.$t("report.show_full_report")))])])]):t.alerts.high.length>=1?s("div",{staticClass:"high-wrapper"},[s("div",{staticClass:"center"},[s("h1",{staticClass:"warning-title",domProps:{innerHTML:t._s(t.$t("report.high_msg",{nb:t.$i18n.messages[t.$i18n.locale].report.numbers[t.alerts.high.length]}))}}),s("button",{staticClass:"btn btn-report-low-light",on:{click:function(s){return t.new_capture()}}},[t._v(t._s(t.$t("report.start_new_capture")))]),s("button",{staticClass:"btn btn-report-high",on:{click:function(s){t.show_report=!0,t.results=!1}}},[t._v(t._s(t.$t("report.show_full_report")))])])]):t.alerts.moderate.length>=1?s("div",{staticClass:"med-wrapper"},[s("div",{staticClass:"center"},[s("h1",{staticClass:"warning-title",domProps:{innerHTML:t._s(t.$t("report.moderate_msg",{nb:t.$i18n.messages[t.$i18n.locale].report.numbers[t.alerts.moderate.length]}))}}),s("button",{staticClass:"btn btn-report-low-light",on:{click:function(s){return t.new_capture()}}},[t._v(t._s(t.$t("report.start_new_capture")))]),s("button",{staticClass:"btn btn-report-moderate",on:{click:function(s){t.show_report=!0,t.results=!1}}},[t._v(t._s(t.$t("report.show_full_report")))])])]):t.alerts.low.length>=1?s("div",{staticClass:"low-wrapper"},[s("div",{staticClass:"center"},[s("h1",{staticClass:"warning-title",domProps:{innerHTML:t._s(t.$t("report.low_msg",{nb:t.$i18n.messages[t.$i18n.locale].report.numbers[t.alerts.low.length]}))}}),s("button",{staticClass:"btn btn-report-low-light",on:{click:function(s){return t.new_capture()}}},[t._v(t._s(t.$t("report.start_new_capture")))]),s("button",{staticClass:"btn btn-report-low",on:{click:function(s){t.show_report=!0,t.results=!1}}},[t._v(t._s(t.$t("report.show_full_report")))])])]):s("div",{staticClass:"none-wrapper"},[s("div",{staticClass:"center"},[s("h1",{staticClass:"warning-title",domProps:{innerHTML:t._s(t.$t("report.fine_msg"))}}),s("button",{staticClass:"btn btn-report-low-light",on:{click:function(s){t.show_report=!0,t.results=!1}}},[t._v(t._s(t.$t("report.show_full_report")))]),s("button",{staticClass:"btn btn-report-low",on:{click:function(s){return t.new_capture()}}},[t._v(t._s(t.$t("report.start_new_capture")))])])])]):t.show_report?s("div",{staticClass:"wrapper"},[s("div",{staticClass:"report-wrapper"},[s("div",{staticClass:"device-ctx"},[s("h3",{staticStyle:{margin:"0","padding-left":"10px"}},[t._v(t._s(t.$t("report.report_of"))+" "+t._s(t.device.name))]),s("div",{staticClass:"device-ctx-legend"},[t._v(" "+t._s(t.$t("report.pcap_sha1"))+" "+t._s(t.pcap.SHA1)),s("br"),t._v(" "+t._s(t.$t("report.capture_started"))+" "+t._s(t.pcap["First packet time"].split(",")[0])),s("br"),t._v(" "+t._s(t.$t("report.capture_ended"))+" "+t._s(t.pcap["Last packet time"].split(",")[0])),s("br"),t._v(" "+t._s(t.$t("report.detection_methods"))+" "+t._s(t.detection_methods)+" ")])]),s("ul",{staticClass:"alerts"},[t._l(t.alerts.high,(function(e){return s("li",{key:e.message,staticClass:"alert"},[s("div",{staticClass:"alert-header"},[s("span",{staticClass:"high-label"},[t._v(t._s(t.$t("report.high")))]),s("span",{staticClass:"alert-id"},[t._v(t._s(e.id))]),s("span",{staticClass:"btn-whitelist",on:{click:function(s){return t.add_whitelist(e.host)}}},[t._v("Add to the whitelist")])]),s("div",{staticClass:"alert-body"},[s("span",{staticClass:"title"},[t._v(t._s(e.title))]),s("p",{staticClass:"description"},[t._v(t._s(e.description))])])])})),t._l(t.alerts.moderate,(function(e){return s("li",{key:e.message,staticClass:"alert"},[s("div",{staticClass:"alert-header"},[s("span",{staticClass:"moderate-label"},[t._v(t._s(t.$t("report.moderate")))]),s("span",{staticClass:"alert-id"},[t._v(t._s(e.id))]),s("span",{staticClass:"btn-whitelist",on:{click:function(s){return t.add_whitelist(e.host)}}},[t._v("Add to the whitelist")])]),s("div",{staticClass:"alert-body"},[s("span",{staticClass:"title"},[t._v(t._s(e.title))]),s("p",{staticClass:"description"},[t._v(t._s(e.description))])])])})),t._l(t.alerts.low,(function(e){return s("li",{key:e.message,staticClass:"alert"},[s("div",{staticClass:"alert-header"},[s("span",{staticClass:"moderate-label"},[t._v(t._s(t.$t("report.low")))]),s("span",{staticClass:"alert-id"},[t._v(t._s(e.id))]),s("span",{staticClass:"btn-whitelist",on:{click:function(s){return t.add_whitelist(e.host)}}},[t._v("Add to the whitelist")])]),s("div",{staticClass:"alert-body"},[s("span",{staticClass:"title"},[t._v(t._s(e.title))]),s("p",{staticClass:"description"},[t._v(t._s(e.description))])])])}))],2),t.uncategorized_records.length>0?s("h5",{staticClass:"title-report"},[t._v(t._s(t.$t("report.uncat_coms_table")))]):t._e(),t.uncategorized_records.length>0?s("div",[s("table",{staticClass:"table-uncat"},[s("thead",[s("tr",[s("td",[t._v(t._s(t.$t("report.protocol")))]),s("td",[t._v(t._s(t.$t("report.domain_name")))]),s("td",[t._v(t._s(t.$t("report.ip_address")))]),s("td",[t._v(t._s(t.$t("report.port")))])])]),t._l(t.uncategorized_records,(function(e){return s("tr",{key:e.ip_dst},[s("td",[t._v(t._s(Object.keys(e.protocols).map(t=>e.protocols[t].name).join(", ")))]),s("td",{on:{click:function(s){return t.add_whitelist(e.domains[0])}}},[t._v(t._s(e.domains.join(", ")))]),s("td",{on:{click:function(s){return t.add_whitelist(e.ip_dst)}}},[t._v(t._s(e.ip_dst))]),s("td",[t._v(t._s(Object.keys(e.protocols).map(t=>e.protocols[t].port).join(", ")))])])}))],2)]):t._e(),s("div",{attrs:{id:"controls-analysis"}},[s("div",{staticClass:"column col-6"},[s("button",{staticClass:"btn btn btn-primary width-100",on:{click:function(s){return t.save_capture()}}},[t._v(t._s(t.$t("report.save")))])]),s("div",{staticClass:"column col-6"},[s("button",{staticClass:"btn width-100",on:{click:function(s){return t.$router.push("generate-ap")}}},[t._v(t._s(t.$t("report.start_new_capture")))])])])])]):t._e()])},i=[],a=e("a18c"),o=e("bc3a"),n=e.n(o),c=e("56d7"),l={name:"report",data(){return{results:!0,detection_methods:"",uncategorized_records:[]}},props:{device:Object,methods:Object,pcap:Object,records:Array,alerts:Array,capture_token:String},methods:{save_capture:function(){console.log("[report.vue] Saving the capture"),a["a"].replace({name:"save-capture",params:{capture_token:this.capture_token}})},new_capture:function(){console.log("[report.vue] Deleting the capture and creating a new AP"),n.a.get("/api/misc/delete-captures",{timeout:3e4}).then(()=>{a["a"].push({name:"generate-ap"})}).catch(t=>{console.log(t)})},grep_keyword:function(t,s){try{var e,r;return!!this.alerts[s].length&&(this.alerts[s].forEach(s=>{e=s.title.indexOf(t),r||(r=e>0)}),r)}catch(i){console.log(i)}},get_detection_methods:function(){this.detection_methods+=1==this.methods.iocs?`☑ ${this.$t("report.indicators")} `:`☐ ${this.$t("report.indicators")} `,this.detection_methods+=1==this.methods.heuristics?`☑ ${this.$t("report.heuristics")} `:`☐ ${this.$t("report.heuristics")} `,this.detection_methods+=1==this.methods.active?`☑ ${this.$t("report.active")} `:`☐ ${this.$t("report.active")} `},add_whitelist:function(t){c["EventBus"].$emit("showModal",{action:"whitelist",host:t})},get_uncategorized_records:function(){this.records.forEach(t=>{t.suspicious||t.whitelisted||this.uncategorized_records.push(t)})}},created:function(){console.log("[report.vue] Showing report.vue"),this.get_detection_methods(),this.get_uncategorized_records()}},p=l,_=(e("36bc"),e("2877")),d=Object(_["a"])(p,r,i,!1,null,null,null);s["default"]=d.exports}}]); +//# sourceMappingURL=chunk-7cb613d5.5349d43e.js.map \ No newline at end of file diff --git a/app/frontend/dist/js/chunk-7cb613d5.5349d43e.js.map b/app/frontend/dist/js/chunk-7cb613d5.5349d43e.js.map new file mode 100644 index 0000000..f89ab64 --- /dev/null +++ b/app/frontend/dist/js/chunk-7cb613d5.5349d43e.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/views/report.vue?b493","webpack:///./src/views/report.vue","webpack:///src/views/report.vue","webpack:///./src/views/report.vue?5d61","webpack:///./src/views/report.vue?7f56"],"names":["render","_vm","this","_c","_self","results","grep_keyword","staticClass","domProps","_s","$t","on","$event","new_capture","_v","show_report","alerts","high","length","nb","$i18n","messages","locale","report","numbers","moderate","low","staticStyle","device","name","pcap","SHA1","split","detection_methods","_l","alert","key","message","id","add_whitelist","host","title","description","uncategorized_records","_e","record","ip_dst","Object","keys","protocols","map","join","domains","port","attrs","save_capture","$router","push","staticRenderFns","data","props","methods","records","capture_token","console","router","params","axios","timeout","then","catch","idx","get_detection_methods","EventBus","get_uncategorized_records","created","component"],"mappings":"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","file":"js/chunk-7cb613d5.5349d43e.js","sourcesContent":["export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./report.vue?vue&type=style&index=0&id=3588ee24&prod&lang=css&\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[(_vm.results)?_c('div',[(_vm.grep_keyword('STALKERWARE', 'high'))?_c('div',{staticClass:\"high-wrapper\"},[_c('div',{staticClass:\"center\"},[_c('h1',{staticClass:\"warning-title\",domProps:{\"innerHTML\":_vm._s(_vm.$t('report.stalkerware_msg'))}}),_c('button',{staticClass:\"btn btn-report-low-light\",on:{\"click\":function($event){return _vm.new_capture()}}},[_vm._v(_vm._s(_vm.$t(\"report.start_new_capture\")))]),_c('button',{staticClass:\"btn btn-report-high\",on:{\"click\":function($event){_vm.show_report=true;_vm.results=false;}}},[_vm._v(_vm._s(_vm.$t(\"report.show_full_report\")))])])]):(_vm.alerts.high.length >= 1)?_c('div',{staticClass:\"high-wrapper\"},[_c('div',{staticClass:\"center\"},[_c('h1',{staticClass:\"warning-title\",domProps:{\"innerHTML\":_vm._s(_vm.$t('report.high_msg', { nb: _vm.$i18n.messages[_vm.$i18n.locale].report.numbers[_vm.alerts.high.length] }))}}),_c('button',{staticClass:\"btn btn-report-low-light\",on:{\"click\":function($event){return _vm.new_capture()}}},[_vm._v(_vm._s(_vm.$t(\"report.start_new_capture\")))]),_c('button',{staticClass:\"btn btn-report-high\",on:{\"click\":function($event){_vm.show_report=true;_vm.results=false;}}},[_vm._v(_vm._s(_vm.$t(\"report.show_full_report\")))])])]):(_vm.alerts.moderate.length >= 1)?_c('div',{staticClass:\"med-wrapper\"},[_c('div',{staticClass:\"center\"},[_c('h1',{staticClass:\"warning-title\",domProps:{\"innerHTML\":_vm._s(_vm.$t('report.moderate_msg', { nb: _vm.$i18n.messages[_vm.$i18n.locale].report.numbers[_vm.alerts.moderate.length] }))}}),_c('button',{staticClass:\"btn btn-report-low-light\",on:{\"click\":function($event){return _vm.new_capture()}}},[_vm._v(_vm._s(_vm.$t(\"report.start_new_capture\")))]),_c('button',{staticClass:\"btn btn-report-moderate\",on:{\"click\":function($event){_vm.show_report=true;_vm.results=false;}}},[_vm._v(_vm._s(_vm.$t(\"report.show_full_report\")))])])]):(_vm.alerts.low.length >= 1)?_c('div',{staticClass:\"low-wrapper\"},[_c('div',{staticClass:\"center\"},[_c('h1',{staticClass:\"warning-title\",domProps:{\"innerHTML\":_vm._s(_vm.$t('report.low_msg', { nb: _vm.$i18n.messages[_vm.$i18n.locale].report.numbers[_vm.alerts.low.length] }))}}),_c('button',{staticClass:\"btn btn-report-low-light\",on:{\"click\":function($event){return _vm.new_capture()}}},[_vm._v(_vm._s(_vm.$t(\"report.start_new_capture\")))]),_c('button',{staticClass:\"btn btn-report-low\",on:{\"click\":function($event){_vm.show_report=true;_vm.results=false;}}},[_vm._v(_vm._s(_vm.$t(\"report.show_full_report\")))])])]):_c('div',{staticClass:\"none-wrapper\"},[_c('div',{staticClass:\"center\"},[_c('h1',{staticClass:\"warning-title\",domProps:{\"innerHTML\":_vm._s(_vm.$t('report.fine_msg'))}}),_c('button',{staticClass:\"btn btn-report-low-light\",on:{\"click\":function($event){_vm.show_report=true;_vm.results=false;}}},[_vm._v(_vm._s(_vm.$t(\"report.show_full_report\")))]),_c('button',{staticClass:\"btn btn-report-low\",on:{\"click\":function($event){return _vm.new_capture()}}},[_vm._v(_vm._s(_vm.$t(\"report.start_new_capture\")))])])])]):(_vm.show_report)?_c('div',{staticClass:\"wrapper\"},[_c('div',{staticClass:\"report-wrapper\"},[_c('div',{staticClass:\"device-ctx\"},[_c('h3',{staticStyle:{\"margin\":\"0\",\"padding-left\":\"10px\"}},[_vm._v(_vm._s(_vm.$t(\"report.report_of\"))+\" \"+_vm._s(_vm.device.name))]),_c('div',{staticClass:\"device-ctx-legend\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"report.pcap_sha1\"))+\" \"+_vm._s(_vm.pcap.SHA1)),_c('br'),_vm._v(\" \"+_vm._s(_vm.$t(\"report.capture_started\"))+\" \"+_vm._s(_vm.pcap[\"First packet time\"].split(\",\")[0])),_c('br'),_vm._v(\" \"+_vm._s(_vm.$t(\"report.capture_ended\"))+\" \"+_vm._s(_vm.pcap[\"Last packet time\"].split(\",\")[0])),_c('br'),_vm._v(\" \"+_vm._s(_vm.$t(\"report.detection_methods\"))+\" \"+_vm._s(_vm.detection_methods)+\" \")])]),_c('ul',{staticClass:\"alerts\"},[_vm._l((_vm.alerts.high),function(alert){return _c('li',{key:alert.message,staticClass:\"alert\"},[_c('div',{staticClass:\"alert-header\"},[_c('span',{staticClass:\"high-label\"},[_vm._v(_vm._s(_vm.$t(\"report.high\")))]),_c('span',{staticClass:\"alert-id\"},[_vm._v(_vm._s(alert.id))]),_c('span',{staticClass:\"btn-whitelist\",on:{\"click\":function($event){return _vm.add_whitelist(alert.host)}}},[_vm._v(\"Add to the whitelist\")])]),_c('div',{staticClass:\"alert-body\"},[_c('span',{staticClass:\"title\"},[_vm._v(_vm._s(alert.title))]),_c('p',{staticClass:\"description\"},[_vm._v(_vm._s(alert.description))])])])}),_vm._l((_vm.alerts.moderate),function(alert){return _c('li',{key:alert.message,staticClass:\"alert\"},[_c('div',{staticClass:\"alert-header\"},[_c('span',{staticClass:\"moderate-label\"},[_vm._v(_vm._s(_vm.$t(\"report.moderate\")))]),_c('span',{staticClass:\"alert-id\"},[_vm._v(_vm._s(alert.id))]),_c('span',{staticClass:\"btn-whitelist\",on:{\"click\":function($event){return _vm.add_whitelist(alert.host)}}},[_vm._v(\"Add to the whitelist\")])]),_c('div',{staticClass:\"alert-body\"},[_c('span',{staticClass:\"title\"},[_vm._v(_vm._s(alert.title))]),_c('p',{staticClass:\"description\"},[_vm._v(_vm._s(alert.description))])])])}),_vm._l((_vm.alerts.low),function(alert){return _c('li',{key:alert.message,staticClass:\"alert\"},[_c('div',{staticClass:\"alert-header\"},[_c('span',{staticClass:\"moderate-label\"},[_vm._v(_vm._s(_vm.$t(\"report.low\")))]),_c('span',{staticClass:\"alert-id\"},[_vm._v(_vm._s(alert.id))]),_c('span',{staticClass:\"btn-whitelist\",on:{\"click\":function($event){return _vm.add_whitelist(alert.host)}}},[_vm._v(\"Add to the whitelist\")])]),_c('div',{staticClass:\"alert-body\"},[_c('span',{staticClass:\"title\"},[_vm._v(_vm._s(alert.title))]),_c('p',{staticClass:\"description\"},[_vm._v(_vm._s(alert.description))])])])})],2),(_vm.uncategorized_records.length>0)?_c('h5',{staticClass:\"title-report\"},[_vm._v(_vm._s(_vm.$t(\"report.uncat_coms_table\")))]):_vm._e(),(_vm.uncategorized_records.length>0)?_c('div',[_c('table',{staticClass:\"table-uncat\"},[_c('thead',[_c('tr',[_c('td',[_vm._v(_vm._s(_vm.$t(\"report.protocol\")))]),_c('td',[_vm._v(_vm._s(_vm.$t(\"report.domain_name\")))]),_c('td',[_vm._v(_vm._s(_vm.$t(\"report.ip_address\")))]),_c('td',[_vm._v(_vm._s(_vm.$t(\"report.port\")))])])]),_vm._l((_vm.uncategorized_records),function(record){return _c('tr',{key:record.ip_dst},[_c('td',[_vm._v(_vm._s(Object.keys(record.protocols).map(key => record.protocols[key].name).join(\", \")))]),_c('td',{on:{\"click\":function($event){return _vm.add_whitelist(record.domains[0])}}},[_vm._v(_vm._s(record.domains.join(\", \")))]),_c('td',{on:{\"click\":function($event){return _vm.add_whitelist(record.ip_dst)}}},[_vm._v(_vm._s(record.ip_dst))]),_c('td',[_vm._v(_vm._s(Object.keys(record.protocols).map(key => record.protocols[key].port).join(\", \")))])])})],2)]):_vm._e(),_c('div',{attrs:{\"id\":\"controls-analysis\"}},[_c('div',{staticClass:\"column col-6\"},[_c('button',{staticClass:\"btn btn btn-primary width-100\",on:{\"click\":function($event){return _vm.save_capture()}}},[_vm._v(_vm._s(_vm.$t(\"report.save\")))])]),_c('div',{staticClass:\"column col-6\"},[_c('button',{staticClass:\"btn width-100\",on:{\"click\":function($event){return _vm.$router.push('generate-ap')}}},[_vm._v(_vm._s(_vm.$t(\"report.start_new_capture\")))])])])])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./report.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./report.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./report.vue?vue&type=template&id=3588ee24&\"\nimport script from \"./report.vue?vue&type=script&lang=js&\"\nexport * from \"./report.vue?vue&type=script&lang=js&\"\nimport style0 from \"./report.vue?vue&type=style&index=0&id=3588ee24&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file diff --git a/app/frontend/dist/js/chunk-vendors.3521aad3.js b/app/frontend/dist/js/chunk-vendors.3521aad3.js new file mode 100644 index 0000000..a2c9670 --- /dev/null +++ b/app/frontend/dist/js/chunk-vendors.3521aad3.js @@ -0,0 +1,25 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-vendors"],{"04f8":function(t,e,n){var r=n("2d00"),o=n("d039");t.exports=!!Object.getOwnPropertySymbols&&!o((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},"06cf":function(t,e,n){var r=n("83ab"),o=n("c65b"),i=n("d1e7"),a=n("5c6c"),s=n("fc6a"),c=n("a04b"),u=n("1a2d"),l=n("0cfb"),f=Object.getOwnPropertyDescriptor;e.f=r?f:function(t,e){if(t=s(t),e=c(e),l)try{return f(t,e)}catch(n){}if(u(t,e))return a(!o(i.f,t,e),t[e])}},"07fa":function(t,e,n){var r=n("50c4");t.exports=function(t){return r(t.length)}},"0a06":function(t,e,n){"use strict";var r=n("c532"),o=n("30b5"),i=n("f6b4"),a=n("5270"),s=n("4a7b"),c=n("848b"),u=c.validators;function l(t){this.defaults=t,this.interceptors={request:new i,response:new i}}l.prototype.request=function(t){"string"===typeof t?(t=arguments[1]||{},t.url=arguments[0]):t=t||{},t=s(this.defaults,t),t.method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var e=t.transitional;void 0!==e&&c.assertOptions(e,{silentJSONParsing:u.transitional(u.boolean,"1.0.0"),forcedJSONParsing:u.transitional(u.boolean,"1.0.0"),clarifyTimeoutError:u.transitional(u.boolean,"1.0.0")},!1);var n=[],r=!0;this.interceptors.request.forEach((function(e){"function"===typeof e.runWhen&&!1===e.runWhen(t)||(r=r&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var o,i=[];if(this.interceptors.response.forEach((function(t){i.push(t.fulfilled,t.rejected)})),!r){var l=[a,void 0];Array.prototype.unshift.apply(l,n),l=l.concat(i),o=Promise.resolve(t);while(l.length)o=o.then(l.shift(),l.shift());return o}var f=t;while(n.length){var p=n.shift(),h=n.shift();try{f=p(f)}catch(d){h(d);break}}try{o=a(f)}catch(d){return Promise.reject(d)}while(i.length)o=o.then(i.shift(),i.shift());return o},l.prototype.getUri=function(t){return t=s(this.defaults,t),o(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},r.forEach(["delete","get","head","options"],(function(t){l.prototype[t]=function(e,n){return this.request(s(n||{},{method:t,url:e,data:(n||{}).data}))}})),r.forEach(["post","put","patch"],(function(t){l.prototype[t]=function(e,n,r){return this.request(s(r||{},{method:t,url:e,data:n}))}})),t.exports=l},"0cfb":function(t,e,n){var r=n("83ab"),o=n("d039"),i=n("cc12");t.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},"0d51":function(t,e){var n=String;t.exports=function(t){try{return n(t)}catch(e){return"Object"}}},"0df6":function(t,e,n){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},"13d2":function(t,e,n){var r=n("d039"),o=n("1626"),i=n("1a2d"),a=n("83ab"),s=n("5e77").CONFIGURABLE,c=n("8925"),u=n("69f3"),l=u.enforce,f=u.get,p=Object.defineProperty,h=a&&!r((function(){return 8!==p((function(){}),"length",{value:8}).length})),d=String(String).split("String"),v=t.exports=function(t,e,n){"Symbol("===String(e).slice(0,7)&&(e="["+String(e).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(e="get "+e),n&&n.setter&&(e="set "+e),(!i(t,"name")||s&&t.name!==e)&&(a?p(t,"name",{value:e,configurable:!0}):t.name=e),h&&n&&i(n,"arity")&&t.length!==n.arity&&p(t,"length",{value:n.arity});try{n&&i(n,"constructor")&&n.constructor?a&&p(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(o){}var r=l(t);return i(r,"source")||(r.source=d.join("string"==typeof e?e:"")),t};Function.prototype.toString=v((function(){return o(this)&&f(this).source||c(this)}),"toString")},"14d9":function(t,e,n){"use strict";var r=n("23e7"),o=n("7b0b"),i=n("07fa"),a=n("3a34"),s=n("3511"),c=n("d039"),u=c((function(){return 4294967297!==[].push.call({length:4294967296},1)})),l=!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(t){return t instanceof TypeError}}();r({target:"Array",proto:!0,arity:1,forced:u||l},{push:function(t){var e=o(this),n=i(e),r=arguments.length;s(n+r);for(var c=0;c=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(t){l.headers[t]={}})),r.forEach(["post","put","patch"],(function(t){l.headers[t]=r.merge(a)})),t.exports=l}).call(this,n("4362"))},2877:function(t,e,n){"use strict";function r(t,e,n,r,o,i,a,s){var c,u="function"===typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(c=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"===typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),o&&o.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(a)},u._ssrRegister=c):o&&(c=s?function(){o.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:o),c)if(u.functional){u._injectStyles=c;var l=u.render;u.render=function(t,e){return c.call(e),l(t,e)}}else{var f=u.beforeCreate;u.beforeCreate=f?[].concat(f,c):[c]}return{exports:t,options:u}}n.d(e,"a",(function(){return r}))},"2b0e":function(t,e,n){"use strict";(function(t){n.d(e,"a",(function(){return Zr})); +/*! + * Vue.js v2.7.13 + * (c) 2014-2022 Evan You + * Released under the MIT License. + */ +var r=Object.freeze({}),o=Array.isArray;function i(t){return void 0===t||null===t}function a(t){return void 0!==t&&null!==t}function s(t){return!0===t}function c(t){return!1===t}function u(t){return"string"===typeof t||"number"===typeof t||"symbol"===typeof t||"boolean"===typeof t}function l(t){return"function"===typeof t}function f(t){return null!==t&&"object"===typeof t}var p=Object.prototype.toString;function h(t){return"[object Object]"===p.call(t)}function d(t){return"[object RegExp]"===p.call(t)}function v(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function m(t){return a(t)&&"function"===typeof t.then&&"function"===typeof t.catch}function y(t){return null==t?"":Array.isArray(t)||h(t)&&t.toString===p?JSON.stringify(t,null,2):String(t)}function g(t){var e=parseFloat(t);return isNaN(e)?t:e}function b(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(r,1)}}var k=Object.prototype.hasOwnProperty;function x(t,e){return k.call(t,e)}function C(t){var e=Object.create(null);return function(n){var r=e[n];return r||(e[n]=t(n))}}var O=/-(\w)/g,S=C((function(t){return t.replace(O,(function(t,e){return e?e.toUpperCase():""}))})),E=C((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),T=/\B([A-Z])/g,$=C((function(t){return t.replace(T,"-$1").toLowerCase()}));function j(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n}function A(t,e){return t.bind(e)}var P=Function.prototype.bind?A:j;function M(t,e){e=e||0;var n=t.length-e,r=new Array(n);while(n--)r[n]=t[n+e];return r}function I(t,e){for(var n in e)t[n]=e[n];return t}function D(t){for(var e={},n=0;n0,rt=tt&&tt.indexOf("edge/")>0;tt&&tt.indexOf("android");var ot=tt&&/iphone|ipad|ipod|ios/.test(tt);tt&&/chrome\/\d+/.test(tt),tt&&/phantomjs/.test(tt);var it,at=tt&&tt.match(/firefox\/(\d+)/),st={}.watch,ct=!1;if(Q)try{var ut={};Object.defineProperty(ut,"passive",{get:function(){ct=!0}}),window.addEventListener("test-passive",null,ut)}catch(Ya){}var lt=function(){return void 0===it&&(it=!Q&&"undefined"!==typeof t&&(t["process"]&&"server"===t["process"].env.VUE_ENV)),it},ft=Q&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function pt(t){return"function"===typeof t&&/native code/.test(t.toString())}var ht,dt="undefined"!==typeof Symbol&&pt(Symbol)&&"undefined"!==typeof Reflect&&pt(Reflect.ownKeys);ht="undefined"!==typeof Set&&pt(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var vt=null;function mt(t){void 0===t&&(t=null),t||vt&&vt._scope.off(),vt=t,t&&t._scope.on()}var yt=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),gt=function(t){void 0===t&&(t="");var e=new yt;return e.text=t,e.isComment=!0,e};function bt(t){return new yt(void 0,void 0,void 0,String(t))}function _t(t){var e=new yt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var wt=0,kt=[],xt=function(){for(var t=0;t0&&(r=ce(r,"".concat(e||"","_").concat(n)),se(r[0])&&se(l)&&(f[c]=bt(l.text+r[0].text),r.shift()),f.push.apply(f,r)):u(r)?se(l)?f[c]=bt(l.text+r):""!==r&&f.push(bt(r)):se(r)&&se(l)?f[c]=bt(l.text+r.text):(s(t._isVList)&&a(r.tag)&&i(r.key)&&a(e)&&(r.key="__vlist".concat(e,"_").concat(n,"__")),f.push(r)));return f}function ue(t,e){var n,r,i,s,c=null;if(o(t)||"string"===typeof t)for(c=new Array(t.length),n=0,r=t.length;n0,s=e?!!e.$stable:!a,c=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&o&&o!==r&&c===o.$key&&!a&&!o.$hasNormal)return o;for(var u in i={},e)e[u]&&"$"!==u[0]&&(i[u]=Te(t,n,u,e[u]))}else i={};for(var l in n)l in i||(i[l]=$e(n,l));return e&&Object.isExtensible(e)&&(e._normalized=i),G(i,"$stable",s),G(i,"$key",c),G(i,"$hasNormal",a),i}function Te(t,e,n,r){var i=function(){var e=vt;mt(t);var n=arguments.length?r.apply(null,arguments):r({});n=n&&"object"===typeof n&&!o(n)?[n]:ae(n);var i=n&&n[0];return mt(e),n&&(!i||1===n.length&&i.isComment&&!Se(i))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:i,enumerable:!0,configurable:!0}),i}function $e(t,e){return function(){return t[e]}}function je(t){var e=t.$options,n=e.setup;if(n){var r=t._setupContext=Ae(t);mt(t),St();var o=Xe(n,null,[t._props||Pt({}),r],t,"setup");if(Et(),mt(),l(o))e.render=o;else if(f(o))if(t._setupState=o,o.__sfc){var i=t._setupProxy={};for(var a in o)"__sfc"!==a&&qt(i,o,a)}else for(var a in o)J(a)||qt(t,o,a);else 0}}function Ae(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};G(e,"_v_attr_proxy",!0),Pe(e,t.$attrs,r,t,"$attrs")}return t._attrsProxy},get listeners(){if(!t._listenersProxy){var e=t._listenersProxy={};Pe(e,t.$listeners,r,t,"$listeners")}return t._listenersProxy},get slots(){return Ie(t)},emit:P(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return qt(t,e,n)}))}}}function Pe(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,Me(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function Me(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function Ie(t){return t._slotsProxy||De(t._slotsProxy={},t.$scopedSlots),t._slotsProxy}function De(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}function Le(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=Ce(e._renderChildren,o),t.$scopedSlots=n?Ee(t.$parent,n.data.scopedSlots,t.$slots):r,t._c=function(e,n,r,o){return ze(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return ze(t,e,n,r,o,!0)};var i=n&&n.data;Ht(t,"$attrs",i&&i.attrs||r,null,!0),Ht(t,"$listeners",e._parentListeners||r,null,!0)}var Ne=null;function Re(t){xe(t.prototype),t.prototype.$nextTick=function(t){return un(t,this)},t.prototype._render=function(){var t,e=this,n=e.$options,r=n.render,i=n._parentVnode;i&&e._isMounted&&(e.$scopedSlots=Ee(e.$parent,i.data.scopedSlots,e.$slots,e.$scopedSlots),e._slotsProxy&&De(e._slotsProxy,e.$scopedSlots)),e.$vnode=i;try{mt(e),Ne=e,t=r.call(e._renderProxy,e.$createElement)}catch(Ya){Ge(Ya,e,"render"),t=e._vnode}finally{Ne=null,mt()}return o(t)&&1===t.length&&(t=t[0]),t instanceof yt||(t=gt()),t.parent=i,t}}function Fe(t,e){return(t.__esModule||dt&&"Module"===t[Symbol.toStringTag])&&(t=t.default),f(t)?e.extend(t):t}function Be(t,e,n,r,o){var i=gt();return i.asyncFactory=t,i.asyncMeta={data:e,context:n,children:r,tag:o},i}function Ue(t,e){if(s(t.error)&&a(t.errorComp))return t.errorComp;if(a(t.resolved))return t.resolved;var n=Ne;if(n&&a(t.owners)&&-1===t.owners.indexOf(n)&&t.owners.push(n),s(t.loading)&&a(t.loadingComp))return t.loadingComp;if(n&&!a(t.owners)){var r=t.owners=[n],o=!0,c=null,u=null;n.$on("hook:destroyed",(function(){return w(r,n)}));var l=function(t){for(var e=0,n=r.length;e1?M(n):n;for(var r=M(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;idocument.createEvent("Event").timeStamp&&(Vn=function(){return Kn.now()})}var zn=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function Wn(){var t,e;for(Hn=Vn(),Fn=!0,Dn.sort(zn),Bn=0;BnBn&&Dn[n].id>t.id)n--;Dn.splice(n+1,0,t)}else Dn.push(t);Rn||(Rn=!0,un(Wn))}}function Zn(t){var e=t.$options.provide;if(e){var n=l(e)?e.call(t):e;if(!f(n))return;for(var r=Yt(t),o=dt?Reflect.ownKeys(n):Object.keys(n),i=0;i-1)if(i&&!x(o,"default"))a=!1;else if(""===a||a===$(t)){var c=jr(String,o.type);(c<0||s-1)return this;var n=M(arguments,1);return n.unshift(this),l(t.install)?t.install.apply(t,n):l(t)&&t.apply(null,n),e.push(t),this}}function Qr(t){t.mixin=function(t){return this.options=xr(this.options,t),this}}function to(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,o=t._Ctor||(t._Ctor={});if(o[r])return o[r];var i=or(t)||or(n.options);var a=function(t){this._init(t)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=e++,a.options=xr(n.options,t),a["super"]=n,a.options.props&&eo(a),a.options.computed&&no(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,K.forEach((function(t){a[t]=n[t]})),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=I({},a.options),o[r]=a,a}}function eo(t){var e=t.options.props;for(var n in e)Pr(t.prototype,"_props",n)}function no(t){var e=t.options.computed;for(var n in e)Fr(t.prototype,n,e[n])}function ro(t){K.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&h(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&l(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}function oo(t){return t&&(or(t.Ctor.options)||t.tag)}function io(t,e){return o(t)?t.indexOf(e)>-1:"string"===typeof t?t.split(",").indexOf(e)>-1:!!d(t)&&t.test(e)}function ao(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var s=a.name;s&&!e(s)&&so(n,i,r,o)}}}function so(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,w(n,e)}qr(Zr),zr(Zr),Cn(Zr),Tn(Zr),Re(Zr);var co=[String,RegExp,Array],uo={name:"keep-alive",abstract:!0,props:{include:co,exclude:co,max:[String,Number]},methods:{cacheVNode:function(){var t=this,e=t.cache,n=t.keys,r=t.vnodeToCache,o=t.keyToCache;if(r){var i=r.tag,a=r.componentInstance,s=r.componentOptions;e[o]={name:oo(s),tag:i,componentInstance:a},n.push(o),this.max&&n.length>parseInt(this.max)&&so(e,n[0],n,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)so(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){ao(t,(function(t){return io(e,t)}))})),this.$watch("exclude",(function(e){ao(t,(function(t){return!io(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=He(t),n=e&&e.componentOptions;if(n){var r=oo(n),o=this,i=o.include,a=o.exclude;if(i&&(!r||!io(i,r))||a&&r&&io(a,r))return e;var s=this,c=s.cache,u=s.keys,l=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;c[l]?(e.componentInstance=c[l].componentInstance,w(u,l),u.push(l)):(this.vnodeToCache=e,this.keyToCache=l),e.data.keepAlive=!0}return e||t&&t[0]}},lo={KeepAlive:uo};function fo(t){var e={get:function(){return W}};Object.defineProperty(t,"config",e),t.util={warn:pr,extend:I,mergeOptions:xr,defineReactive:Ht},t.set=Vt,t.delete=Kt,t.nextTick=un,t.observable=function(t){return Ut(t),t},t.options=Object.create(null),K.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,I(t.options.components,lo),Yr(t),Qr(t),to(t),ro(t)}fo(Zr),Object.defineProperty(Zr.prototype,"$isServer",{get:lt}),Object.defineProperty(Zr.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Zr,"FunctionalRenderContext",{value:tr}),Zr.version=pn;var po=b("style,class"),ho=b("input,textarea,option,select,progress"),vo=function(t,e,n){return"value"===n&&ho(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},mo=b("contenteditable,draggable,spellcheck"),yo=b("events,caret,typing,plaintext-only"),go=function(t,e){return xo(e)||"false"===e?"false":"contenteditable"===t&&yo(e)?e:"true"},bo=b("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),_o="http://www.w3.org/1999/xlink",wo=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},ko=function(t){return wo(t)?t.slice(6,t.length):""},xo=function(t){return null==t||!1===t};function Co(t){var e=t.data,n=t,r=t;while(a(r.componentInstance))r=r.componentInstance._vnode,r&&r.data&&(e=Oo(r.data,e));while(a(n=n.parent))n&&n.data&&(e=Oo(e,n.data));return So(e.staticClass,e.class)}function Oo(t,e){return{staticClass:Eo(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function So(t,e){return a(t)||a(e)?Eo(t,To(e)):""}function Eo(t,e){return t?e?t+" "+e:t:e||""}function To(t){return Array.isArray(t)?$o(t):f(t)?jo(t):"string"===typeof t?t:""}function $o(t){for(var e,n="",r=0,o=t.length;r-1?Lo[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Lo[t]=/HTMLUnknownElement/.test(e.toString())}var Ro=b("text,number,password,search,email,tel,url");function Fo(t){if("string"===typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}function Bo(t,e){var n=document.createElement(t);return"select"!==t||e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n}function Uo(t,e){return document.createElementNS(Ao[t],e)}function Ho(t){return document.createTextNode(t)}function Vo(t){return document.createComment(t)}function Ko(t,e,n){t.insertBefore(e,n)}function zo(t,e){t.removeChild(e)}function Wo(t,e){t.appendChild(e)}function qo(t){return t.parentNode}function Jo(t){return t.nextSibling}function Go(t){return t.tagName}function Xo(t,e){t.textContent=e}function Zo(t,e){t.setAttribute(e,"")}var Yo=Object.freeze({__proto__:null,createElement:Bo,createElementNS:Uo,createTextNode:Ho,createComment:Vo,insertBefore:Ko,removeChild:zo,appendChild:Wo,parentNode:qo,nextSibling:Jo,tagName:Go,setTextContent:Xo,setStyleScope:Zo}),Qo={create:function(t,e){ti(e)},update:function(t,e){t.data.ref!==e.data.ref&&(ti(t,!0),ti(e))},destroy:function(t){ti(t,!0)}};function ti(t,e){var n=t.data.ref;if(a(n)){var r=t.context,i=t.componentInstance||t.elm,s=e?null:i,c=e?void 0:i;if(l(n))Xe(n,r,[s],r,"template ref function");else{var u=t.data.refInFor,f="string"===typeof n||"number"===typeof n,p=Wt(n),h=r.$refs;if(f||p)if(u){var d=f?h[n]:n.value;e?o(d)&&w(d,i):o(d)?d.includes(i)||d.push(i):f?(h[n]=[i],ei(r,n,h[n])):n.value=[i]}else if(f){if(e&&h[n]!==i)return;h[n]=c,ei(r,n,s)}else if(p){if(e&&n.value!==i)return;n.value=s}else 0}}}function ei(t,e,n){var r=t._setupState;r&&x(r,e)&&(Wt(r[e])?r[e].value=n:r[e]=n)}var ni=new yt("",{},[]),ri=["create","activate","update","remove","destroy"];function oi(t,e){return t.key===e.key&&t.asyncFactory===e.asyncFactory&&(t.tag===e.tag&&t.isComment===e.isComment&&a(t.data)===a(e.data)&&ii(t,e)||s(t.isAsyncPlaceholder)&&i(e.asyncFactory.error))}function ii(t,e){if("input"!==t.tag)return!0;var n,r=a(n=t.data)&&a(n=n.attrs)&&n.type,o=a(n=e.data)&&a(n=n.attrs)&&n.type;return r===o||Ro(r)&&Ro(o)}function ai(t,e,n){var r,o,i={};for(r=e;r<=n;++r)o=t[r].key,a(o)&&(i[o]=r);return i}function si(t){var e,n,r={},c=t.modules,l=t.nodeOps;for(e=0;ev?(f=i(n[g+1])?null:n[g+1].elm,C(t,f,n,h,g,r)):h>g&&S(e,p,v)}function $(t,e,n,r){for(var o=n;o-1?gi(t,e,n):bo(e)?xo(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):mo(e)?t.setAttribute(e,go(e,n)):wo(e)?xo(n)?t.removeAttributeNS(_o,ko(e)):t.setAttributeNS(_o,e,n):gi(t,e,n)}function gi(t,e,n){if(xo(n))t.removeAttribute(e);else{if(et&&!nt&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var bi={create:mi,update:mi};function _i(t,e){var n=e.elm,r=e.data,o=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var s=Co(e),c=n._transitionClasses;a(c)&&(s=Eo(s,To(c))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var wi,ki={create:_i,update:_i},xi="__r",Ci="__c";function Oi(t){if(a(t[xi])){var e=et?"change":"input";t[e]=[].concat(t[xi],t[e]||[]),delete t[xi]}a(t[Ci])&&(t.change=[].concat(t[Ci],t.change||[]),delete t[Ci])}function Si(t,e,n){var r=wi;return function o(){var i=e.apply(null,arguments);null!==i&&$i(t,o,n,r)}}var Ei=tn&&!(at&&Number(at[1])<=53);function Ti(t,e,n,r){if(Ei){var o=Hn,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}wi.addEventListener(t,e,ct?{capture:n,passive:r}:n)}function $i(t,e,n,r){(r||wi).removeEventListener(t,e._wrapper||e,n)}function ji(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};wi=e.elm||t.elm,Oi(n),ee(n,r,Ti,$i,Si,e.context),wi=void 0}}var Ai,Pi={create:ji,update:ji,destroy:function(t){return ji(t,ni)}};function Mi(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,o=e.elm,c=t.data.domProps||{},u=e.data.domProps||{};for(n in(a(u.__ob__)||s(u._v_attr_proxy))&&(u=e.data.domProps=I({},u)),c)n in u||(o[n]="");for(n in u){if(r=u[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===c[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var l=i(r)?"":String(r);Ii(o,l)&&(o.value=l)}else if("innerHTML"===n&&Mo(o.tagName)&&i(o.innerHTML)){Ai=Ai||document.createElement("div"),Ai.innerHTML="".concat(r,"");var f=Ai.firstChild;while(o.firstChild)o.removeChild(o.firstChild);while(f.firstChild)o.appendChild(f.firstChild)}else if(r!==c[n])try{o[n]=r}catch(Ya){}}}}function Ii(t,e){return!t.composing&&("OPTION"===t.tagName||Di(t,e)||Li(t,e))}function Di(t,e){var n=!0;try{n=document.activeElement!==t}catch(Ya){}return n&&t.value!==e}function Li(t,e){var n=t.value,r=t._vModifiers;if(a(r)){if(r.number)return g(n)!==g(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}var Ni={create:Mi,update:Mi},Ri=C((function(t){var e={},n=/;(?![^(]*\))/g,r=/:(.+)/;return t.split(n).forEach((function(t){if(t){var n=t.split(r);n.length>1&&(e[n[0].trim()]=n[1].trim())}})),e}));function Fi(t){var e=Bi(t.style);return t.staticStyle?I(t.staticStyle,e):e}function Bi(t){return Array.isArray(t)?D(t):"string"===typeof t?Ri(t):t}function Ui(t,e){var n,r={};if(e){var o=t;while(o.componentInstance)o=o.componentInstance._vnode,o&&o.data&&(n=Fi(o.data))&&I(r,n)}(n=Fi(t.data))&&I(r,n);var i=t;while(i=i.parent)i.data&&(n=Fi(i.data))&&I(r,n);return r}var Hi,Vi=/^--/,Ki=/\s*!important$/,zi=function(t,e,n){if(Vi.test(e))t.style.setProperty(e,n);else if(Ki.test(n))t.style.setProperty($(e),n.replace(Ki,""),"important");else{var r=qi(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(Xi).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function Yi(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Xi).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";while(n.indexOf(r)>=0)n=n.replace(r," ");n=n.trim(),n?t.setAttribute("class",n):t.removeAttribute("class")}}function Qi(t){if(t){if("object"===typeof t){var e={};return!1!==t.css&&I(e,ta(t.name||"v")),I(e,t),e}return"string"===typeof t?ta(t):void 0}}var ta=C((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),ea=Q&&!nt,na="transition",ra="animation",oa="transition",ia="transitionend",aa="animation",sa="animationend";ea&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(oa="WebkitTransition",ia="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(aa="WebkitAnimation",sa="webkitAnimationEnd"));var ca=Q?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function ua(t){ca((function(){ca(t)}))}function la(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),Zi(t,e))}function fa(t,e){t._transitionClasses&&w(t._transitionClasses,e),Yi(t,e)}function pa(t,e,n){var r=da(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s=o===na?ia:sa,c=0,u=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++c>=a&&u()};setTimeout((function(){c0&&(n=na,l=a,f=i.length):e===ra?u>0&&(n=ra,l=u,f=c.length):(l=Math.max(a,u),n=l>0?a>u?na:ra:null,f=n?n===na?i.length:c.length:0);var p=n===na&&ha.test(r[oa+"Property"]);return{type:n,timeout:l,propCount:f,hasTransform:p}}function va(t,e){while(t.length1}function wa(t,e){!0!==e.data.show&&ya(e)}var ka=Q?{create:wa,activate:wa,remove:function(t,e){!0!==t.data.show?ga(t,e):e()}}:{},xa=[bi,ki,Pi,Ni,Gi,ka],Ca=xa.concat(vi),Oa=si({nodeOps:Yo,modules:Ca});nt&&document.addEventListener("selectionchange",(function(){var t=document.activeElement;t&&t.vmodel&&Ma(t,"input")}));var Sa={inserted:function(t,e,n,r){"select"===n.tag?(r.elm&&!r.elm._vOptions?ne(n,"postpatch",(function(){Sa.componentUpdated(t,e,n)})):Ea(t,e,n.context),t._vOptions=[].map.call(t.options,ja)):("textarea"===n.tag||Ro(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",Aa),t.addEventListener("compositionend",Pa),t.addEventListener("change",Pa),nt&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if("select"===n.tag){Ea(t,e,n.context);var r=t._vOptions,o=t._vOptions=[].map.call(t.options,ja);if(o.some((function(t,e){return!F(t,r[e])}))){var i=t.multiple?e.value.some((function(t){return $a(t,o)})):e.value!==e.oldValue&&$a(e.value,o);i&&Ma(t,"change")}}}};function Ea(t,e,n){Ta(t,e,n),(et||rt)&&setTimeout((function(){Ta(t,e,n)}),0)}function Ta(t,e,n){var r=e.value,o=t.multiple;if(!o||Array.isArray(r)){for(var i,a,s=0,c=t.options.length;s-1,a.selected!==i&&(a.selected=i);else if(F(ja(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function $a(t,e){return e.every((function(e){return!F(e,t)}))}function ja(t){return"_value"in t?t._value:t.value}function Aa(t){t.target.composing=!0}function Pa(t){t.target.composing&&(t.target.composing=!1,Ma(t.target,"input"))}function Ma(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Ia(t){return!t.componentInstance||t.data&&t.data.transition?t:Ia(t.componentInstance._vnode)}var Da={bind:function(t,e,n){var r=e.value;n=Ia(n);var o=n.data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,ya(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value,o=e.oldValue;if(!r!==!o){n=Ia(n);var i=n.data&&n.data.transition;i?(n.data.show=!0,r?ya(n,(function(){t.style.display=t.__vOriginalDisplay})):ga(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none"}},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}},La={model:Sa,show:Da},Na={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ra(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Ra(He(e.children)):t}function Fa(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[S(r)]=o[r];return e}function Ba(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}function Ua(t){while(t=t.parent)if(t.data.transition)return!0}function Ha(t,e){return e.key===t.key&&e.tag===t.tag}var Va=function(t){return t.tag||Se(t)},Ka=function(t){return"show"===t.name},za={name:"transition",props:Na,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Va),n.length)){0;var r=this.mode;0;var o=n[0];if(Ua(this.$vnode))return o;var i=Ra(o);if(!i)return o;if(this._leaving)return Ba(t,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:u(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s=(i.data||(i.data={})).transition=Fa(this),c=this._vnode,l=Ra(c);if(i.data.directives&&i.data.directives.some(Ka)&&(i.data.show=!0),l&&l.data&&!Ha(i,l)&&!Se(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=I({},s);if("out-in"===r)return this._leaving=!0,ne(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Ba(t,o);if("in-out"===r){if(Se(i))return c;var p,h=function(){p()};ne(s,"afterEnter",h),ne(s,"enterCancelled",h),ne(f,"delayLeave",(function(t){p=t}))}}return o}}},Wa=I({tag:String,moveClass:String},Na);delete Wa.mode;var qa={props:Wa,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Sn(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Fa(this),s=0;s0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(r=a.match(/Edge\/(\d+)/),(!r||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/),r&&(o=+r[1]))),t.exports=o},"2d83":function(t,e,n){"use strict";var r=n("387f");t.exports=function(t,e,n,o,i){var a=new Error(t);return r(a,e,n,o,i)}},"2e67":function(t,e,n){"use strict";t.exports=function(t){return!(!t||!t.__CANCEL__)}},"30b5":function(t,e,n){"use strict";var r=n("c532");function o(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}t.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else if(r.isURLSearchParams(e))i=e.toString();else{var a=[];r.forEach(e,(function(t,e){null!==t&&"undefined"!==typeof t&&(r.isArray(t)?e+="[]":t=[t],r.forEach(t,(function(t){r.isDate(t)?t=t.toISOString():r.isObject(t)&&(t=JSON.stringify(t)),a.push(o(e)+"="+o(t))})))})),i=a.join("&")}if(i){var s=t.indexOf("#");-1!==s&&(t=t.slice(0,s)),t+=(-1===t.indexOf("?")?"?":"&")+i}return t}},"342f":function(t,e,n){var r=n("d066");t.exports=r("navigator","userAgent")||""},3511:function(t,e){var n=TypeError,r=9007199254740991;t.exports=function(t){if(t>r)throw n("Maximum allowed index exceeded");return t}},"387f":function(t,e,n){"use strict";t.exports=function(t,e,n,r,o){return t.config=e,n&&(t.code=n),t.request=r,t.response=o,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},t}},3934:function(t,e,n){"use strict";var r=n("c532");t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=o(window.location.href),function(e){var n=r.isString(e)?o(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return function(){return!0}}()},"3a34":function(t,e,n){"use strict";var r=n("83ab"),o=n("e8b5"),i=TypeError,a=Object.getOwnPropertyDescriptor,s=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(t){return t instanceof TypeError}}();t.exports=s?function(t,e){if(o(t)&&!a(t,"length").writable)throw i("Cannot set read only .length");return t.length=e}:function(t,e){return t.length=e}},"3a9b":function(t,e,n){var r=n("e330");t.exports=r({}.isPrototypeOf)},"40d5":function(t,e,n){var r=n("d039");t.exports=!r((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},4362:function(t,e,n){e.nextTick=function(t){var e=Array.prototype.slice.call(arguments);e.shift(),setTimeout((function(){t.apply(null,e)}),0)},e.platform=e.arch=e.execPath=e.title="browser",e.pid=1,e.browser=!0,e.env={},e.argv=[],e.binding=function(t){throw new Error("No such module. (Possibly not yet loaded)")},function(){var t,r="/";e.cwd=function(){return r},e.chdir=function(e){t||(t=n("df7c")),r=t.resolve(e,r)}}(),e.exit=e.kill=e.umask=e.dlopen=e.uptime=e.memoryUsage=e.uvCounters=function(){},e.features={}},"44ad":function(t,e,n){var r=n("e330"),o=n("d039"),i=n("c6b6"),a=Object,s=r("".split);t.exports=o((function(){return!a("z").propertyIsEnumerable(0)}))?function(t){return"String"==i(t)?s(t,""):a(t)}:a},"467f":function(t,e,n){"use strict";var r=n("2d83");t.exports=function(t,e,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?e(r("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)}},"485a":function(t,e,n){var r=n("c65b"),o=n("1626"),i=n("861d"),a=TypeError;t.exports=function(t,e){var n,s;if("string"===e&&o(n=t.toString)&&!i(s=r(n,t)))return s;if(o(n=t.valueOf)&&!i(s=r(n,t)))return s;if("string"!==e&&o(n=t.toString)&&!i(s=r(n,t)))return s;throw a("Can't convert object to primitive value")}},"4a0c":function(t){t.exports=JSON.parse('{"_from":"axios@^0.21.4","_id":"axios@0.21.4","_inBundle":false,"_integrity":"sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==","_location":"/axios","_phantomChildren":{},"_requested":{"type":"range","registry":true,"raw":"axios@^0.21.4","name":"axios","escapedName":"axios","rawSpec":"^0.21.4","saveSpec":null,"fetchSpec":"^0.21.4"},"_requiredBy":["/"],"_resolved":"https://registry.npmjs.org/axios/-/axios-0.21.4.tgz","_shasum":"c67b90dc0568e5c1cf2b0b858c43ba28e2eda575","_spec":"axios@^0.21.4","_where":"/usr/share/spyguard/app/frontend","author":{"name":"Matt Zabriskie"},"browser":{"./lib/adapters/http.js":"./lib/adapters/xhr.js"},"bugs":{"url":"https://github.com/axios/axios/issues"},"bundleDependencies":false,"bundlesize":[{"path":"./dist/axios.min.js","threshold":"5kB"}],"dependencies":{"follow-redirects":"^1.14.0"},"deprecated":false,"description":"Promise based HTTP client for the browser and node.js","devDependencies":{"coveralls":"^3.0.0","es6-promise":"^4.2.4","grunt":"^1.3.0","grunt-banner":"^0.6.0","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-watch":"^1.0.0","grunt-eslint":"^23.0.0","grunt-karma":"^4.0.0","grunt-mocha-test":"^0.13.3","grunt-ts":"^6.0.0-beta.19","grunt-webpack":"^4.0.2","istanbul-instrumenter-loader":"^1.0.0","jasmine-core":"^2.4.1","karma":"^6.3.2","karma-chrome-launcher":"^3.1.0","karma-firefox-launcher":"^2.1.0","karma-jasmine":"^1.1.1","karma-jasmine-ajax":"^0.1.13","karma-safari-launcher":"^1.0.0","karma-sauce-launcher":"^4.3.6","karma-sinon":"^1.0.5","karma-sourcemap-loader":"^0.3.8","karma-webpack":"^4.0.2","load-grunt-tasks":"^3.5.2","minimist":"^1.2.0","mocha":"^8.2.1","sinon":"^4.5.0","terser-webpack-plugin":"^4.2.3","typescript":"^4.0.5","url-search-params":"^0.10.0","webpack":"^4.44.2","webpack-dev-server":"^3.11.0"},"homepage":"https://axios-http.com","jsdelivr":"dist/axios.min.js","keywords":["xhr","http","ajax","promise","node"],"license":"MIT","main":"index.js","name":"axios","repository":{"type":"git","url":"git+https://github.com/axios/axios.git"},"scripts":{"build":"NODE_ENV=production grunt build","coveralls":"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","examples":"node ./examples/server.js","fix":"eslint --fix lib/**/*.js","postversion":"git push && git push --tags","preversion":"npm test","start":"node ./sandbox/server.js","test":"grunt test","version":"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json"},"typings":"./index.d.ts","unpkg":"dist/axios.min.js","version":"0.21.4"}')},"4a7b":function(t,e,n){"use strict";var r=n("c532");t.exports=function(t,e){e=e||{};var n={},o=["url","method","data"],i=["headers","auth","proxy","params"],a=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],s=["validateStatus"];function c(t,e){return r.isPlainObject(t)&&r.isPlainObject(e)?r.merge(t,e):r.isPlainObject(e)?r.merge({},e):r.isArray(e)?e.slice():e}function u(o){r.isUndefined(e[o])?r.isUndefined(t[o])||(n[o]=c(void 0,t[o])):n[o]=c(t[o],e[o])}r.forEach(o,(function(t){r.isUndefined(e[t])||(n[t]=c(void 0,e[t]))})),r.forEach(i,u),r.forEach(a,(function(o){r.isUndefined(e[o])?r.isUndefined(t[o])||(n[o]=c(void 0,t[o])):n[o]=c(void 0,e[o])})),r.forEach(s,(function(r){r in e?n[r]=c(t[r],e[r]):r in t&&(n[r]=c(void 0,t[r]))}));var l=o.concat(i).concat(a).concat(s),f=Object.keys(t).concat(Object.keys(e)).filter((function(t){return-1===l.indexOf(t)}));return r.forEach(f,u),n}},"4d64":function(t,e,n){var r=n("fc6a"),o=n("23cb"),i=n("07fa"),a=function(t){return function(e,n,a){var s,c=r(e),u=i(c),l=o(a,u);if(t&&n!=n){while(u>l)if(s=c[l++],s!=s)return!0}else for(;u>l;l++)if((t||l in c)&&c[l]===n)return t||l||0;return!t&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},"50c4":function(t,e,n){var r=n("5926"),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},5270:function(t,e,n){"use strict";var r=n("c532"),o=n("c401"),i=n("2e67"),a=n("2444");function s(t){t.cancelToken&&t.cancelToken.throwIfRequested()}t.exports=function(t){s(t),t.headers=t.headers||{},t.data=o.call(t,t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),r.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]}));var e=t.adapter||a.adapter;return e(t).then((function(e){return s(t),e.data=o.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return i(e)||(s(t),e&&e.response&&(e.response.data=o.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},5692:function(t,e,n){var r=n("c430"),o=n("c6cd");(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.26.0",mode:r?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.26.0/LICENSE",source:"https://github.com/zloirock/core-js"})},"56ef":function(t,e,n){var r=n("d066"),o=n("e330"),i=n("241c"),a=n("7418"),s=n("825a"),c=o([].concat);t.exports=r("Reflect","ownKeys")||function(t){var e=i.f(s(t)),n=a.f;return n?c(e,n(t)):e}},5926:function(t,e,n){var r=n("b42e");t.exports=function(t){var e=+t;return e!==e||0===e?0:r(e)}},"59ed":function(t,e,n){var r=n("1626"),o=n("0d51"),i=TypeError;t.exports=function(t){if(r(t))return t;throw i(o(t)+" is not a function")}},"5c6c":function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},"5e77":function(t,e,n){var r=n("83ab"),o=n("1a2d"),i=Function.prototype,a=r&&Object.getOwnPropertyDescriptor,s=o(i,"name"),c=s&&"something"===function(){}.name,u=s&&(!r||r&&a(i,"name").configurable);t.exports={EXISTS:s,PROPER:c,CONFIGURABLE:u}},"5f02":function(t,e,n){"use strict";t.exports=function(t){return"object"===typeof t&&!0===t.isAxiosError}},6374:function(t,e,n){var r=n("da84"),o=Object.defineProperty;t.exports=function(t,e){try{o(r,t,{value:e,configurable:!0,writable:!0})}catch(n){r[t]=e}return e}},"69f3":function(t,e,n){var r,o,i,a=n("cdce"),s=n("da84"),c=n("861d"),u=n("9112"),l=n("1a2d"),f=n("c6cd"),p=n("f772"),h=n("d012"),d="Object already initialized",v=s.TypeError,m=s.WeakMap,y=function(t){return i(t)?o(t):r(t,{})},g=function(t){return function(e){var n;if(!c(e)||(n=o(e)).type!==t)throw v("Incompatible receiver, "+t+" required");return n}};if(a||f.state){var b=f.state||(f.state=new m);b.get=b.get,b.has=b.has,b.set=b.set,r=function(t,e){if(b.has(t))throw v(d);return e.facade=t,b.set(t,e),e},o=function(t){return b.get(t)||{}},i=function(t){return b.has(t)}}else{var _=p("state");h[_]=!0,r=function(t,e){if(l(t,_))throw v(d);return e.facade=t,u(t,_,e),e},o=function(t){return l(t,_)?t[_]:{}},i=function(t){return l(t,_)}}t.exports={set:r,get:o,has:i,enforce:y,getterFor:g}},7234:function(t,e){t.exports=function(t){return null===t||void 0===t}},7418:function(t,e){e.f=Object.getOwnPropertySymbols},7839:function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},"7a77":function(t,e,n){"use strict";function r(t){this.message=t}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,t.exports=r},"7aac":function(t,e,n){"use strict";var r=n("c532");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,a){var s=[];s.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(o)&&s.push("path="+o),r.isString(i)&&s.push("domain="+i),!0===a&&s.push("secure"),document.cookie=s.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},"7b0b":function(t,e,n){var r=n("1d80"),o=Object;t.exports=function(t){return o(r(t))}},"7d7e":function(t,e,n){var r=n("40d5"),o=Function.prototype,i=o.call,a=r&&o.bind.bind(i,i);t.exports=r?a:function(t){return function(){return i.apply(t,arguments)}}},"825a":function(t,e,n){var r=n("861d"),o=String,i=TypeError;t.exports=function(t){if(r(t))return t;throw i(o(t)+" is not an object")}},"83ab":function(t,e,n){var r=n("d039");t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},"83b9":function(t,e,n){"use strict";var r=n("d925"),o=n("e683");t.exports=function(t,e){return t&&!r(e)?o(t,e):e}},"848b":function(t,e,n){"use strict";var r=n("4a0c"),o={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){o[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}}));var i={},a=r.version.split(".");function s(t,e){for(var n=e?e.split("."):a,r=t.split("."),o=0;o<3;o++){if(n[o]>r[o])return!0;if(n[o]0){var i=r[o],a=e[i];if(a){var s=t[i],c=void 0===s||a(s,i,t);if(!0!==c)throw new TypeError("option "+i+" must be "+c)}else if(!0!==n)throw Error("Unknown option "+i)}}o.transitional=function(t,e,n){var o=e&&s(e);function a(t,e){return"[Axios v"+r.version+"] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,r,s){if(!1===t)throw new Error(a(r," has been removed in "+e));return o&&!i[r]&&(i[r]=!0,console.warn(a(r," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,r,s)}},t.exports={isOlderVersion:s,assertOptions:c,validators:o}},"861d":function(t,e,n){var r=n("1626"),o=n("8ea1"),i=o.all;t.exports=o.IS_HTMLDDA?function(t){return"object"==typeof t?null!==t:r(t)||t===i}:function(t){return"object"==typeof t?null!==t:r(t)}},8925:function(t,e,n){var r=n("e330"),o=n("1626"),i=n("c6cd"),a=r(Function.toString);o(i.inspectSource)||(i.inspectSource=function(t){return a(t)}),t.exports=i.inspectSource},"8c4f":function(t,e,n){"use strict";function r(t,e){for(var n in e)t[n]=e[n];return t}n.d(e,"a",(function(){return ke}));var o=/[!'()*]/g,i=function(t){return"%"+t.charCodeAt(0).toString(16)},a=/%2C/g,s=function(t){return encodeURIComponent(t).replace(o,i).replace(a,",")};function c(t){try{return decodeURIComponent(t)}catch(e){0}return t}function u(t,e,n){void 0===e&&(e={});var r,o=n||f;try{r=o(t||"")}catch(s){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(l):l(a)}return r}var l=function(t){return null==t||"object"===typeof t?t:String(t)};function f(t){var e={};return t=t.trim().replace(/^(\?|#|&)/,""),t?(t.split("&").forEach((function(t){var n=t.replace(/\+/g," ").split("="),r=c(n.shift()),o=n.length>0?c(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]})),e):e}function p(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(void 0===n)return"";if(null===n)return s(e);if(Array.isArray(n)){var r=[];return n.forEach((function(t){void 0!==t&&(null===t?r.push(s(e)):r.push(s(e)+"="+s(t)))})),r.join("&")}return s(e)+"="+s(n)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var h=/\/?$/;function d(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=v(i)}catch(s){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:g(e,o),matched:t?y(t):[]};return n&&(a.redirectedFrom=g(n,o)),Object.freeze(a)}function v(t){if(Array.isArray(t))return t.map(v);if(t&&"object"===typeof t){var e={};for(var n in t)e[n]=v(t[n]);return e}return t}var m=d(null,{path:"/"});function y(t){var e=[];while(t)e.unshift(t),t=t.parent;return e}function g(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;void 0===o&&(o="");var i=e||p;return(n||"/")+i(r)+o}function b(t,e,n){return e===m?t===e:!!e&&(t.path&&e.path?t.path.replace(h,"")===e.path.replace(h,"")&&(n||t.hash===e.hash&&_(t.query,e.query)):!(!t.name||!e.name)&&(t.name===e.name&&(n||t.hash===e.hash&&_(t.query,e.query)&&_(t.params,e.params))))}function _(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t).sort(),r=Object.keys(e).sort();return n.length===r.length&&n.every((function(n,o){var i=t[n],a=r[o];if(a!==n)return!1;var s=e[n];return null==i||null==s?i===s:"object"===typeof i&&"object"===typeof s?_(i,s):String(i)===String(s)}))}function w(t,e){return 0===t.path.replace(h,"/").indexOf(e.path.replace(h,"/"))&&(!e.hash||t.hash===e.hash)&&k(t.query,e.query)}function k(t,e){for(var n in e)if(!(n in t))return!1;return!0}function x(t){for(var e=0;e=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}function $(t){return t.replace(/\/(?:\s*\/)+/g,"/")}var j=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},A=X,P=N,M=R,I=U,D=G,L=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function N(t,e){var n,r=[],o=0,i=0,a="",s=e&&e.delimiter||"/";while(null!=(n=L.exec(t))){var c=n[0],u=n[1],l=n.index;if(a+=t.slice(i,l),i=l+c.length,u)a+=u[1];else{var f=t[i],p=n[2],h=n[3],d=n[4],v=n[5],m=n[6],y=n[7];a&&(r.push(a),a="");var g=null!=p&&null!=f&&f!==p,b="+"===m||"*"===m,_="?"===m||"*"===m,w=n[2]||s,k=d||v;r.push({name:h||o++,prefix:p||"",delimiter:w,optional:_,repeat:b,partial:g,asterisk:!!y,pattern:k?V(k):y?".*":"[^"+H(w)+"]+?"})}}return i1||!C.length)return 0===C.length?t():t("span",{},C)}if("a"===this.tag)x.on=k,x.attrs={href:c,"aria-current":g};else{var O=at(this.$slots.default);if(O){O.isStatic=!1;var S=O.data=r({},O.data);for(var E in S.on=S.on||{},S.on){var T=S.on[E];E in k&&(S.on[E]=Array.isArray(T)?T:[T])}for(var $ in k)$ in S.on?S.on[$].push(k[$]):S.on[$]=_;var j=O.data.attrs=r({},O.data.attrs);j.href=c,j["aria-current"]=g}else x.on=k}return t(this.tag,x,this.$slots.default)}};function it(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)&&!t.defaultPrevented&&(void 0===t.button||0===t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}function at(t){if(t)for(var e,n=0;n-1&&(s.params[f]=n.params[f]);return s.path=Y(u.path,s.params,'named route "'+c+'"'),p(u,s,a)}if(s.path){s.params={};for(var h=0;h-1}function Wt(t,e){return zt(t)&&t._isRouter&&(null==e||t.type===e)}function qt(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function Jt(t){return function(e,n,r){var o=!1,i=0,a=null;Gt(t,(function(t,e,n,s){if("function"===typeof t&&void 0===t.cid){o=!0,i++;var c,u=Qt((function(e){Yt(e)&&(e=e.default),t.resolved="function"===typeof e?e:tt.extend(e),n.components[s]=e,i--,i<=0&&r()})),l=Qt((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=zt(t)?t:new Error(e),r(a))}));try{c=t(u,l)}catch(p){l(p)}if(c)if("function"===typeof c.then)c.then(u,l);else{var f=c.component;f&&"function"===typeof f.then&&f.then(u,l)}}})),o||r()}}function Gt(t,e){return Xt(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Xt(t){return Array.prototype.concat.apply([],t)}var Zt="function"===typeof Symbol&&"symbol"===typeof Symbol.toStringTag;function Yt(t){return t.__esModule||Zt&&"Module"===t[Symbol.toStringTag]}function Qt(t){var e=!1;return function(){var n=[],r=arguments.length;while(r--)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var te=function(t,e){this.router=t,this.base=ee(e),this.current=m,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function ee(t){if(!t)if(ct){var e=document.querySelector("base");t=e&&e.getAttribute("href")||"/",t=t.replace(/^https?:\/\/[^\/]+/,"")}else t="/";return"/"!==t.charAt(0)&&(t="/"+t),t.replace(/\/$/,"")}function ne(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=It&&n;r&&this.listeners.push(kt());var o=function(){var n=t.current,o=fe(t.base);t.current===m&&o===t._startLocation||t.transitionTo(o,(function(t){r&&xt(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,(function(t){Dt($(r.base+t.fullPath)),xt(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,(function(t){Lt($(r.base+t.fullPath)),xt(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(fe(this.base)!==this.current.fullPath){var e=$(this.base+this.current.fullPath);t?Dt(e):Lt(e)}},e.prototype.getCurrentLocation=function(){return fe(this.base)},e}(te);function fe(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf($(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var pe=function(t){function e(e,n,r){t.call(this,e,n),r&&he(this.base)||de()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router,n=e.options.scrollBehavior,r=It&&n;r&&this.listeners.push(kt());var o=function(){var e=t.current;de()&&t.transitionTo(ve(),(function(n){r&&xt(t.router,n,e,!0),It||ge(n.fullPath)}))},i=It?"popstate":"hashchange";window.addEventListener(i,o),this.listeners.push((function(){window.removeEventListener(i,o)}))}},e.prototype.push=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,(function(t){ye(t.fullPath),xt(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,(function(t){ge(t.fullPath),xt(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;ve()!==e&&(t?ye(e):ge(e))},e.prototype.getCurrentLocation=function(){return ve()},e}(te);function he(t){var e=fe(t);if(!/^\/#/.test(e))return window.location.replace($(t+"/#"+e)),!0}function de(){var t=ve();return"/"===t.charAt(0)||(ge("/"+t),!1)}function ve(){var t=window.location.href,e=t.indexOf("#");return e<0?"":(t=t.slice(e+1),t)}function me(t){var e=window.location.href,n=e.indexOf("#"),r=n>=0?e.slice(0,n):e;return r+"#"+t}function ye(t){It?Dt(me(t)):window.location.hash=t}function ge(t){It?Lt(me(t)):window.location.replace(me(t))}var be=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){Wt(t,Nt.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(te),_e=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=ht(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!It&&!1!==t.fallback,this.fallback&&(e="hash"),ct||(e="abstract"),this.mode=e,e){case"history":this.history=new le(this,t.base);break;case"hash":this.history=new pe(this,t.base,this.fallback);break;case"abstract":this.history=new be(this,t.base);break;default:0}},we={currentRoute:{configurable:!0}};_e.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},we.currentRoute.get=function(){return this.history&&this.history.current},_e.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof le||n instanceof pe){var r=function(t){var r=n.current,o=e.options.scrollBehavior,i=It&&o;i&&"fullPath"in t&&xt(e,t,r,!1)},o=function(t){n.setupListeners(),r(t)};n.transitionTo(n.getCurrentLocation(),o,o)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},_e.prototype.beforeEach=function(t){return xe(this.beforeHooks,t)},_e.prototype.beforeResolve=function(t){return xe(this.resolveHooks,t)},_e.prototype.afterEach=function(t){return xe(this.afterHooks,t)},_e.prototype.onReady=function(t,e){this.history.onReady(t,e)},_e.prototype.onError=function(t){this.history.onError(t)},_e.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!==typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},_e.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!==typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},_e.prototype.go=function(t){this.history.go(t)},_e.prototype.back=function(){this.go(-1)},_e.prototype.forward=function(){this.go(1)},_e.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},_e.prototype.resolve=function(t,e,n){e=e||this.history.current;var r=Q(t,e,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath,a=this.history.base,s=Ce(a,i,this.mode);return{location:r,route:o,href:s,normalizedTo:r,resolved:o}},_e.prototype.getRoutes=function(){return this.matcher.getRoutes()},_e.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==m&&this.history.transitionTo(this.history.getCurrentLocation())},_e.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==m&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(_e.prototype,we);var ke=_e;function xe(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}function Ce(t,e,n){var r="hash"===n?"#"+e:e;return t?$(t+"/"+r):r}_e.install=st,_e.version="3.6.5",_e.isNavigationFailure=Wt,_e.NavigationFailureType=Nt,_e.START_LOCATION=m,ct&&window.Vue&&window.Vue.use(_e)},"8df4":function(t,e,n){"use strict";var r=n("7a77");function o(t){if("function"!==typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;t((function(t){n.reason||(n.reason=new r(t),e(n.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var t,e=new o((function(e){t=e}));return{token:e,cancel:t}},t.exports=o},"8ea1":function(t,e){var n="object"==typeof document&&document.all,r="undefined"==typeof n&&void 0!==n;t.exports={all:n,IS_HTMLDDA:r}},"90e3":function(t,e,n){var r=n("e330"),o=0,i=Math.random(),a=r(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+a(++o+i,36)}},9112:function(t,e,n){var r=n("83ab"),o=n("9bf2"),i=n("5c6c");t.exports=r?function(t,e,n){return o.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},"94ca":function(t,e,n){var r=n("d039"),o=n("1626"),i=/#|\.prototype\./,a=function(t,e){var n=c[s(t)];return n==l||n!=u&&(o(e)?r(e):!!e)},s=a.normalize=function(t){return String(t).replace(i,".").toLowerCase()},c=a.data={},u=a.NATIVE="N",l=a.POLYFILL="P";t.exports=a},"9bf2":function(t,e,n){var r=n("83ab"),o=n("0cfb"),i=n("aed9"),a=n("825a"),s=n("a04b"),c=TypeError,u=Object.defineProperty,l=Object.getOwnPropertyDescriptor,f="enumerable",p="configurable",h="writable";e.f=r?i?function(t,e,n){if(a(t),e=s(e),a(n),"function"===typeof t&&"prototype"===e&&"value"in n&&h in n&&!n[h]){var r=l(t,e);r&&r[h]&&(t[e]=n.value,n={configurable:p in n?n[p]:r[p],enumerable:f in n?n[f]:r[f],writable:!1})}return u(t,e,n)}:u:function(t,e,n){if(a(t),e=s(e),a(n),o)try{return u(t,e,n)}catch(r){}if("get"in n||"set"in n)throw c("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},a044:function(t,e,n){"use strict";e["a"]={layout:{default:["` 1 2 3 4 5 6 7 8 9 0 ° + {bksp}","{tab} a z e r t y u i o p ^ $","{lock} q s d f g h j k l m ù * {enter}","{shift} < w x c v b n , ; : ! {shift}",".com @ {space}"],shift:["² & é \" ' ( - è _ ç à ) = {bksp}","{tab} A Z E R T Y U I O P ¨ £","{lock} Q S D F G H J K L M % µ {enter}","{shift} > W X C V B N ? . / § {shift}",".com @ {space}"]}}},a04b:function(t,e,n){var r=n("c04e"),o=n("d9b5");t.exports=function(t){var e=r(t,"string");return o(e)?e:e+""}},a925:function(t,e,n){"use strict"; +/*! + * vue-i18n v8.28.2 + * (c) 2022 kazuya kawaguchi + * Released under the MIT License. + */var r=["compactDisplay","currency","currencyDisplay","currencySign","localeMatcher","notation","numberingSystem","signDisplay","style","unit","unitDisplay","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits"],o=["dateStyle","timeStyle","calendar","localeMatcher","hour12","hourCycle","timeZone","formatMatcher","weekday","era","year","month","day","hour","minute","second","timeZoneName"];function i(t,e){"undefined"!==typeof console&&(console.warn("[vue-i18n] "+t),e&&console.warn(e.stack))}function a(t,e){"undefined"!==typeof console&&(console.error("[vue-i18n] "+t),e&&console.error(e.stack))}var s=Array.isArray;function c(t){return null!==t&&"object"===typeof t}function u(t){return"boolean"===typeof t}function l(t){return"string"===typeof t}var f=Object.prototype.toString,p="[object Object]";function h(t){return f.call(t)===p}function d(t){return null===t||void 0===t}function v(t){return"function"===typeof t}function m(){var t=[],e=arguments.length;while(e--)t[e]=arguments[e];var n=null,r=null;return 1===t.length?c(t[0])||s(t[0])?r=t[0]:"string"===typeof t[0]&&(n=t[0]):2===t.length&&("string"===typeof t[0]&&(n=t[0]),(c(t[1])||s(t[1]))&&(r=t[1])),{locale:n,params:r}}function y(t){return JSON.parse(JSON.stringify(t))}function g(t,e){if(t.delete(e))return t}function b(t){var e=[];return t.forEach((function(t){return e.push(t)})),e}function _(t,e){return!!~t.indexOf(e)}var w=Object.prototype.hasOwnProperty;function k(t,e){return w.call(t,e)}function x(t){for(var e=arguments,n=Object(t),r=1;r/g,">").replace(/"/g,""").replace(/'/g,"'")}function S(t){return null!=t&&Object.keys(t).forEach((function(e){"string"==typeof t[e]&&(t[e]=O(t[e]))})),t}function E(t){t.prototype.hasOwnProperty("$i18n")||Object.defineProperty(t.prototype,"$i18n",{get:function(){return this._i18n}}),t.prototype.$t=function(t){var e=[],n=arguments.length-1;while(n-- >0)e[n]=arguments[n+1];var r=this.$i18n;return r._t.apply(r,[t,r.locale,r._getMessages(),this].concat(e))},t.prototype.$tc=function(t,e){var n=[],r=arguments.length-2;while(r-- >0)n[r]=arguments[r+2];var o=this.$i18n;return o._tc.apply(o,[t,o.locale,o._getMessages(),this,e].concat(n))},t.prototype.$te=function(t,e){var n=this.$i18n;return n._te(t,n.locale,n._getMessages(),e)},t.prototype.$d=function(t){var e,n=[],r=arguments.length-1;while(r-- >0)n[r]=arguments[r+1];return(e=this.$i18n).d.apply(e,[t].concat(n))},t.prototype.$n=function(t){var e,n=[],r=arguments.length-1;while(r-- >0)n[r]=arguments[r+1];return(e=this.$i18n).n.apply(e,[t].concat(n))}}function T(t){function e(){this!==this.$root&&this.$options.__INTLIFY_META__&&this.$el&&this.$el.setAttribute("data-intlify",this.$options.__INTLIFY_META__)}return void 0===t&&(t=!1),t?{mounted:e}:{beforeCreate:function(){var t=this.$options;if(t.i18n=t.i18n||(t.__i18nBridge||t.__i18n?{}:null),t.i18n)if(t.i18n instanceof St){if(t.__i18nBridge||t.__i18n)try{var e=t.i18n&&t.i18n.messages?t.i18n.messages:{},n=t.__i18nBridge||t.__i18n;n.forEach((function(t){e=x(e,JSON.parse(t))})),Object.keys(e).forEach((function(n){t.i18n.mergeLocaleMessage(n,e[n])}))}catch(c){0}this._i18n=t.i18n,this._i18nWatcher=this._i18n.watchI18nData()}else if(h(t.i18n)){var r=this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof St?this.$root.$i18n:null;if(r&&(t.i18n.root=this.$root,t.i18n.formatter=r.formatter,t.i18n.fallbackLocale=r.fallbackLocale,t.i18n.formatFallbackMessages=r.formatFallbackMessages,t.i18n.silentTranslationWarn=r.silentTranslationWarn,t.i18n.silentFallbackWarn=r.silentFallbackWarn,t.i18n.pluralizationRules=r.pluralizationRules,t.i18n.preserveDirectiveContent=r.preserveDirectiveContent),t.__i18nBridge||t.__i18n)try{var o=t.i18n&&t.i18n.messages?t.i18n.messages:{},i=t.__i18nBridge||t.__i18n;i.forEach((function(t){o=x(o,JSON.parse(t))})),t.i18n.messages=o}catch(c){0}var a=t.i18n,s=a.sharedMessages;s&&h(s)&&(t.i18n.messages=x(t.i18n.messages,s)),this._i18n=new St(t.i18n),this._i18nWatcher=this._i18n.watchI18nData(),(void 0===t.i18n.sync||t.i18n.sync)&&(this._localeWatcher=this.$i18n.watchLocale()),r&&r.onComponentInstanceCreated(this._i18n)}else 0;else this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof St?this._i18n=this.$root.$i18n:t.parent&&t.parent.$i18n&&t.parent.$i18n instanceof St&&(this._i18n=t.parent.$i18n)},beforeMount:function(){var t=this.$options;t.i18n=t.i18n||(t.__i18nBridge||t.__i18n?{}:null),t.i18n?(t.i18n instanceof St||h(t.i18n))&&(this._i18n.subscribeDataChanging(this),this._subscribing=!0):(this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof St||t.parent&&t.parent.$i18n&&t.parent.$i18n instanceof St)&&(this._i18n.subscribeDataChanging(this),this._subscribing=!0)},mounted:e,beforeDestroy:function(){if(this._i18n){var t=this;this.$nextTick((function(){t._subscribing&&(t._i18n.unsubscribeDataChanging(t),delete t._subscribing),t._i18nWatcher&&(t._i18nWatcher(),t._i18n.destroyVM(),delete t._i18nWatcher),t._localeWatcher&&(t._localeWatcher(),delete t._localeWatcher)}))}}}}var $={name:"i18n",functional:!0,props:{tag:{type:[String,Boolean,Object],default:"span"},path:{type:String,required:!0},locale:{type:String},places:{type:[Array,Object]}},render:function(t,e){var n=e.data,r=e.parent,o=e.props,i=e.slots,a=r.$i18n;if(a){var s=o.path,c=o.locale,u=o.places,l=i(),f=a.i(s,c,j(l)||u?A(l.default,u):l),p=o.tag&&!0!==o.tag||!1===o.tag?o.tag:"span";return p?t(p,n,f):f}}};function j(t){var e;for(e in t)if("default"!==e)return!1;return Boolean(e)}function A(t,e){var n=e?P(e):{};if(!t)return n;t=t.filter((function(t){return t.tag||""!==t.text.trim()}));var r=t.every(D);return t.reduce(r?M:I,n)}function P(t){return Array.isArray(t)?t.reduce(I,{}):Object.assign({},t)}function M(t,e){return e.data&&e.data.attrs&&e.data.attrs.place&&(t[e.data.attrs.place]=e),t}function I(t,e,n){return t[n]=e,t}function D(t){return Boolean(t.data&&t.data.attrs&&t.data.attrs.place)}var L,N={name:"i18n-n",functional:!0,props:{tag:{type:[String,Boolean,Object],default:"span"},value:{type:Number,required:!0},format:{type:[String,Object]},locale:{type:String}},render:function(t,e){var n=e.props,o=e.parent,i=e.data,a=o.$i18n;if(!a)return null;var s=null,u=null;l(n.format)?s=n.format:c(n.format)&&(n.format.key&&(s=n.format.key),u=Object.keys(n.format).reduce((function(t,e){var o;return _(r,e)?Object.assign({},t,(o={},o[e]=n.format[e],o)):t}),null));var f=n.locale||a.locale,p=a._ntp(n.value,f,s,u),h=p.map((function(t,e){var n,r=i.scopedSlots&&i.scopedSlots[t.type];return r?r((n={},n[t.type]=t.value,n.index=e,n.parts=p,n)):t.value})),d=n.tag&&!0!==n.tag||!1===n.tag?n.tag:"span";return d?t(d,{attrs:i.attrs,class:i["class"],staticClass:i.staticClass},h):h}};function R(t,e,n){U(t,n)&&V(t,e,n)}function F(t,e,n,r){if(U(t,n)){var o=n.context.$i18n;H(t,n)&&C(e.value,e.oldValue)&&C(t._localeMessage,o.getLocaleMessage(o.locale))||V(t,e,n)}}function B(t,e,n,r){var o=n.context;if(o){var a=n.context.$i18n||{};e.modifiers.preserve||a.preserveDirectiveContent||(t.textContent=""),t._vt=void 0,delete t["_vt"],t._locale=void 0,delete t["_locale"],t._localeMessage=void 0,delete t["_localeMessage"]}else i("Vue instance does not exists in VNode context")}function U(t,e){var n=e.context;return n?!!n.$i18n||(i("VueI18n instance does not exists in Vue instance"),!1):(i("Vue instance does not exists in VNode context"),!1)}function H(t,e){var n=e.context;return t._locale===n.$i18n.locale}function V(t,e,n){var r,o,a=e.value,s=K(a),c=s.path,u=s.locale,l=s.args,f=s.choice;if(c||u||l)if(c){var p=n.context;t._vt=t.textContent=null!=f?(r=p.$i18n).tc.apply(r,[c,f].concat(z(u,l))):(o=p.$i18n).t.apply(o,[c].concat(z(u,l))),t._locale=p.$i18n.locale,t._localeMessage=p.$i18n.getLocaleMessage(p.$i18n.locale)}else i("`path` is required in v-t directive");else i("value type not supported")}function K(t){var e,n,r,o;return l(t)?e=t:h(t)&&(e=t.path,n=t.locale,r=t.args,o=t.choice),{path:e,locale:n,args:r,choice:o}}function z(t,e){var n=[];return t&&n.push(t),e&&(Array.isArray(e)||h(e))&&n.push(e),n}function W(t,e){void 0===e&&(e={bridge:!1}),W.installed=!0,L=t;L.version&&Number(L.version.split(".")[0]);E(L),L.mixin(T(e.bridge)),L.directive("t",{bind:R,update:F,unbind:B}),L.component($.name,$),L.component(N.name,N);var n=L.config.optionMergeStrategies;n.i18n=function(t,e){return void 0===e?t:e}}var q=function(){this._caches=Object.create(null)};q.prototype.interpolate=function(t,e){if(!e)return[t];var n=this._caches[t];return n||(n=X(t),this._caches[t]=n),Z(n,e)};var J=/^(?:\d)+/,G=/^(?:\w)+/;function X(t){var e=[],n=0,r="";while(n0)f--,l=at,p[Y]();else{if(f=0,void 0===n)return!1;if(n=mt(n),!1===n)return!1;p[Q]()}};while(null!==l)if(u++,e=t[u],"\\"!==e||!h()){if(o=vt(e),s=ft[l],i=s[o]||s["else"]||lt,i===lt)return;if(l=i[0],a=p[i[1]],a&&(r=i[2],r=void 0===r?e:r,!1===a()))return;if(l===ut)return c}}var gt=function(){this._cache=Object.create(null)};gt.prototype.parsePath=function(t){var e=this._cache[t];return e||(e=yt(t),e&&(this._cache[t]=e)),e||[]},gt.prototype.getPathValue=function(t,e){if(!c(t))return null;var n=this.parsePath(e);if(0===n.length)return null;var r=n.length,o=t,i=0;while(i/,wt=/(?:@(?:\.[a-zA-Z]+)?:(?:[\w\-_|./]+|\([\w\-_:|./]+\)))/g,kt=/^@(?:\.([a-zA-Z]+))?:/,xt=/[()]/g,Ct={upper:function(t){return t.toLocaleUpperCase()},lower:function(t){return t.toLocaleLowerCase()},capitalize:function(t){return""+t.charAt(0).toLocaleUpperCase()+t.substr(1)}},Ot=new q,St=function(t){var e=this;void 0===t&&(t={}),!L&&"undefined"!==typeof window&&window.Vue&&W(window.Vue);var n=t.locale||"en-US",r=!1!==t.fallbackLocale&&(t.fallbackLocale||"en-US"),o=t.messages||{},i=t.dateTimeFormats||t.datetimeFormats||{},a=t.numberFormats||{};this._vm=null,this._formatter=t.formatter||Ot,this._modifiers=t.modifiers||{},this._missing=t.missing||null,this._root=t.root||null,this._sync=void 0===t.sync||!!t.sync,this._fallbackRoot=void 0===t.fallbackRoot||!!t.fallbackRoot,this._fallbackRootWithEmptyString=void 0===t.fallbackRootWithEmptyString||!!t.fallbackRootWithEmptyString,this._formatFallbackMessages=void 0!==t.formatFallbackMessages&&!!t.formatFallbackMessages,this._silentTranslationWarn=void 0!==t.silentTranslationWarn&&t.silentTranslationWarn,this._silentFallbackWarn=void 0!==t.silentFallbackWarn&&!!t.silentFallbackWarn,this._dateTimeFormatters={},this._numberFormatters={},this._path=new gt,this._dataListeners=new Set,this._componentInstanceCreatedListener=t.componentInstanceCreatedListener||null,this._preserveDirectiveContent=void 0!==t.preserveDirectiveContent&&!!t.preserveDirectiveContent,this.pluralizationRules=t.pluralizationRules||{},this._warnHtmlInMessage=t.warnHtmlInMessage||"off",this._postTranslation=t.postTranslation||null,this._escapeParameterHtml=t.escapeParameterHtml||!1,"__VUE_I18N_BRIDGE__"in t&&(this.__VUE_I18N_BRIDGE__=t.__VUE_I18N_BRIDGE__),this.getChoiceIndex=function(t,n){var r=Object.getPrototypeOf(e);if(r&&r.getChoiceIndex){var o=r.getChoiceIndex;return o.call(e,t,n)}var i=function(t,e){return t=Math.abs(t),2===e?t?t>1?1:0:1:t?Math.min(t,2):0};return e.locale in e.pluralizationRules?e.pluralizationRules[e.locale].apply(e,[t,n]):i(t,n)},this._exist=function(t,n){return!(!t||!n)&&(!d(e._path.getPathValue(t,n))||!!t[n])},"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||Object.keys(o).forEach((function(t){e._checkLocaleMessage(t,e._warnHtmlInMessage,o[t])})),this._initVM({locale:n,fallbackLocale:r,messages:o,dateTimeFormats:i,numberFormats:a})},Et={vm:{configurable:!0},messages:{configurable:!0},dateTimeFormats:{configurable:!0},numberFormats:{configurable:!0},availableLocales:{configurable:!0},locale:{configurable:!0},fallbackLocale:{configurable:!0},formatFallbackMessages:{configurable:!0},missing:{configurable:!0},formatter:{configurable:!0},silentTranslationWarn:{configurable:!0},silentFallbackWarn:{configurable:!0},preserveDirectiveContent:{configurable:!0},warnHtmlInMessage:{configurable:!0},postTranslation:{configurable:!0},sync:{configurable:!0}};St.prototype._checkLocaleMessage=function(t,e,n){var r=[],o=function(t,e,n,r){if(h(n))Object.keys(n).forEach((function(i){var a=n[i];h(a)?(r.push(i),r.push("."),o(t,e,a,r),r.pop(),r.pop()):(r.push(i),o(t,e,a,r),r.pop())}));else if(s(n))n.forEach((function(n,i){h(n)?(r.push("["+i+"]"),r.push("."),o(t,e,n,r),r.pop(),r.pop()):(r.push("["+i+"]"),o(t,e,n,r),r.pop())}));else if(l(n)){var c=_t.test(n);if(c){var u="Detected HTML in message '"+n+"' of keypath '"+r.join("")+"' at '"+e+"'. Consider component interpolation with '' to avoid XSS. See https://bit.ly/2ZqJzkp";"warn"===t?i(u):"error"===t&&a(u)}}};o(e,t,n,r)},St.prototype._initVM=function(t){var e=L.config.silent;L.config.silent=!0,this._vm=new L({data:t,__VUE18N__INSTANCE__:!0}),L.config.silent=e},St.prototype.destroyVM=function(){this._vm.$destroy()},St.prototype.subscribeDataChanging=function(t){this._dataListeners.add(t)},St.prototype.unsubscribeDataChanging=function(t){g(this._dataListeners,t)},St.prototype.watchI18nData=function(){var t=this;return this._vm.$watch("$data",(function(){var e=b(t._dataListeners),n=e.length;while(n--)L.nextTick((function(){e[n]&&e[n].$forceUpdate()}))}),{deep:!0})},St.prototype.watchLocale=function(t){if(t){if(!this.__VUE_I18N_BRIDGE__)return null;var e=this,n=this._vm;return this.vm.$watch("locale",(function(r){n.$set(n,"locale",r),e.__VUE_I18N_BRIDGE__&&t&&(t.locale.value=r),n.$forceUpdate()}),{immediate:!0})}if(!this._sync||!this._root)return null;var r=this._vm;return this._root.$i18n.vm.$watch("locale",(function(t){r.$set(r,"locale",t),r.$forceUpdate()}),{immediate:!0})},St.prototype.onComponentInstanceCreated=function(t){this._componentInstanceCreatedListener&&this._componentInstanceCreatedListener(t,this)},Et.vm.get=function(){return this._vm},Et.messages.get=function(){return y(this._getMessages())},Et.dateTimeFormats.get=function(){return y(this._getDateTimeFormats())},Et.numberFormats.get=function(){return y(this._getNumberFormats())},Et.availableLocales.get=function(){return Object.keys(this.messages).sort()},Et.locale.get=function(){return this._vm.locale},Et.locale.set=function(t){this._vm.$set(this._vm,"locale",t)},Et.fallbackLocale.get=function(){return this._vm.fallbackLocale},Et.fallbackLocale.set=function(t){this._localeChainCache={},this._vm.$set(this._vm,"fallbackLocale",t)},Et.formatFallbackMessages.get=function(){return this._formatFallbackMessages},Et.formatFallbackMessages.set=function(t){this._formatFallbackMessages=t},Et.missing.get=function(){return this._missing},Et.missing.set=function(t){this._missing=t},Et.formatter.get=function(){return this._formatter},Et.formatter.set=function(t){this._formatter=t},Et.silentTranslationWarn.get=function(){return this._silentTranslationWarn},Et.silentTranslationWarn.set=function(t){this._silentTranslationWarn=t},Et.silentFallbackWarn.get=function(){return this._silentFallbackWarn},Et.silentFallbackWarn.set=function(t){this._silentFallbackWarn=t},Et.preserveDirectiveContent.get=function(){return this._preserveDirectiveContent},Et.preserveDirectiveContent.set=function(t){this._preserveDirectiveContent=t},Et.warnHtmlInMessage.get=function(){return this._warnHtmlInMessage},Et.warnHtmlInMessage.set=function(t){var e=this,n=this._warnHtmlInMessage;if(this._warnHtmlInMessage=t,n!==t&&("warn"===t||"error"===t)){var r=this._getMessages();Object.keys(r).forEach((function(t){e._checkLocaleMessage(t,e._warnHtmlInMessage,r[t])}))}},Et.postTranslation.get=function(){return this._postTranslation},Et.postTranslation.set=function(t){this._postTranslation=t},Et.sync.get=function(){return this._sync},Et.sync.set=function(t){this._sync=t},St.prototype._getMessages=function(){return this._vm.messages},St.prototype._getDateTimeFormats=function(){return this._vm.dateTimeFormats},St.prototype._getNumberFormats=function(){return this._vm.numberFormats},St.prototype._warnDefault=function(t,e,n,r,o,i){if(!d(n))return n;if(this._missing){var a=this._missing.apply(null,[t,e,r,o]);if(l(a))return a}else 0;if(this._formatFallbackMessages){var s=m.apply(void 0,o);return this._render(e,i,s.params,e)}return e},St.prototype._isFallbackRoot=function(t){return(this._fallbackRootWithEmptyString?!t:d(t))&&!d(this._root)&&this._fallbackRoot},St.prototype._isSilentFallbackWarn=function(t){return this._silentFallbackWarn instanceof RegExp?this._silentFallbackWarn.test(t):this._silentFallbackWarn},St.prototype._isSilentFallback=function(t,e){return this._isSilentFallbackWarn(e)&&(this._isFallbackRoot()||t!==this.fallbackLocale)},St.prototype._isSilentTranslationWarn=function(t){return this._silentTranslationWarn instanceof RegExp?this._silentTranslationWarn.test(t):this._silentTranslationWarn},St.prototype._interpolate=function(t,e,n,r,o,i,a){if(!e)return null;var c,u=this._path.getPathValue(e,n);if(s(u)||h(u))return u;if(d(u)){if(!h(e))return null;if(c=e[n],!l(c)&&!v(c))return null}else{if(!l(u)&&!v(u))return null;c=u}return l(c)&&(c.indexOf("@:")>=0||c.indexOf("@.")>=0)&&(c=this._link(t,e,c,r,"raw",i,a)),this._render(c,o,i,n)},St.prototype._link=function(t,e,n,r,o,i,a){var c=n,u=c.match(wt);for(var l in u)if(u.hasOwnProperty(l)){var f=u[l],p=f.match(kt),h=p[0],d=p[1],v=f.replace(h,"").replace(xt,"");if(_(a,v))return c;a.push(v);var m=this._interpolate(t,e,v,r,"raw"===o?"string":o,"raw"===o?void 0:i,a);if(this._isFallbackRoot(m)){if(!this._root)throw Error("unexpected error");var y=this._root.$i18n;m=y._translate(y._getMessages(),y.locale,y.fallbackLocale,v,r,o,i)}m=this._warnDefault(t,v,m,r,s(i)?i:[i],o),this._modifiers.hasOwnProperty(d)?m=this._modifiers[d](m):Ct.hasOwnProperty(d)&&(m=Ct[d](m)),a.pop(),c=m?c.replace(f,m):c}return c},St.prototype._createMessageContext=function(t,e,n,r){var o=this,i=s(t)?t:[],a=c(t)?t:{},u=function(t){return i[t]},l=function(t){return a[t]},f=this._getMessages(),p=this.locale;return{list:u,named:l,values:t,formatter:e,path:n,messages:f,locale:p,linked:function(t){return o._interpolate(p,f[p]||{},t,null,r,void 0,[t])}}},St.prototype._render=function(t,e,n,r){if(v(t))return t(this._createMessageContext(n,this._formatter||Ot,r,e));var o=this._formatter.interpolate(t,n,r);return o||(o=Ot.interpolate(t,n,r)),"string"!==e||l(o)?o:o.join("")},St.prototype._appendItemToChain=function(t,e,n){var r=!1;return _(t,e)||(r=!0,e&&(r="!"!==e[e.length-1],e=e.replace(/!/g,""),t.push(e),n&&n[e]&&(r=n[e]))),r},St.prototype._appendLocaleToChain=function(t,e,n){var r,o=e.split("-");do{var i=o.join("-");r=this._appendItemToChain(t,i,n),o.splice(-1,1)}while(o.length&&!0===r);return r},St.prototype._appendBlockToChain=function(t,e,n){for(var r=!0,o=0;o0)i[a]=arguments[a+4];if(!t)return"";var s=m.apply(void 0,i);this._escapeParameterHtml&&(s.params=S(s.params));var c=s.locale||e,u=this._translate(n,c,this.fallbackLocale,t,r,"string",s.params);if(this._isFallbackRoot(u)){if(!this._root)throw Error("unexpected error");return(o=this._root).$t.apply(o,[t].concat(i))}return u=this._warnDefault(c,t,u,r,i,"string"),this._postTranslation&&null!==u&&void 0!==u&&(u=this._postTranslation(u,t)),u},St.prototype.t=function(t){var e,n=[],r=arguments.length-1;while(r-- >0)n[r]=arguments[r+1];return(e=this)._t.apply(e,[t,this.locale,this._getMessages(),null].concat(n))},St.prototype._i=function(t,e,n,r,o){var i=this._translate(n,e,this.fallbackLocale,t,r,"raw",o);if(this._isFallbackRoot(i)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.i(t,e,o)}return this._warnDefault(e,t,i,r,[o],"raw")},St.prototype.i=function(t,e,n){return t?(l(e)||(e=this.locale),this._i(t,e,this._getMessages(),null,n)):""},St.prototype._tc=function(t,e,n,r,o){var i,a=[],s=arguments.length-5;while(s-- >0)a[s]=arguments[s+5];if(!t)return"";void 0===o&&(o=1);var c={count:o,n:o},u=m.apply(void 0,a);return u.params=Object.assign(c,u.params),a=null===u.locale?[u.params]:[u.locale,u.params],this.fetchChoice((i=this)._t.apply(i,[t,e,n,r].concat(a)),o)},St.prototype.fetchChoice=function(t,e){if(!t||!l(t))return null;var n=t.split("|");return e=this.getChoiceIndex(e,n.length),n[e]?n[e].trim():t},St.prototype.tc=function(t,e){var n,r=[],o=arguments.length-2;while(o-- >0)r[o]=arguments[o+2];return(n=this)._tc.apply(n,[t,this.locale,this._getMessages(),null,e].concat(r))},St.prototype._te=function(t,e,n){var r=[],o=arguments.length-3;while(o-- >0)r[o]=arguments[o+3];var i=m.apply(void 0,r).locale||e;return this._exist(n[i],t)},St.prototype.te=function(t,e){return this._te(t,this.locale,this._getMessages(),e)},St.prototype.getLocaleMessage=function(t){return y(this._vm.messages[t]||{})},St.prototype.setLocaleMessage=function(t,e){"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||this._checkLocaleMessage(t,this._warnHtmlInMessage,e),this._vm.$set(this._vm.messages,t,e)},St.prototype.mergeLocaleMessage=function(t,e){"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||this._checkLocaleMessage(t,this._warnHtmlInMessage,e),this._vm.$set(this._vm.messages,t,x("undefined"!==typeof this._vm.messages[t]&&Object.keys(this._vm.messages[t]).length?Object.assign({},this._vm.messages[t]):{},e))},St.prototype.getDateTimeFormat=function(t){return y(this._vm.dateTimeFormats[t]||{})},St.prototype.setDateTimeFormat=function(t,e){this._vm.$set(this._vm.dateTimeFormats,t,e),this._clearDateTimeFormat(t,e)},St.prototype.mergeDateTimeFormat=function(t,e){this._vm.$set(this._vm.dateTimeFormats,t,x(this._vm.dateTimeFormats[t]||{},e)),this._clearDateTimeFormat(t,e)},St.prototype._clearDateTimeFormat=function(t,e){for(var n in e){var r=t+"__"+n;this._dateTimeFormatters.hasOwnProperty(r)&&delete this._dateTimeFormatters[r]}},St.prototype._localizeDateTime=function(t,e,n,r,o,i){for(var a=e,s=r[a],c=this._getLocaleChain(e,n),u=0;u0)e[n]=arguments[n+1];var r=this.locale,i=null,a=null;return 1===e.length?(l(e[0])?i=e[0]:c(e[0])&&(e[0].locale&&(r=e[0].locale),e[0].key&&(i=e[0].key)),a=Object.keys(e[0]).reduce((function(t,n){var r;return _(o,n)?Object.assign({},t,(r={},r[n]=e[0][n],r)):t}),null)):2===e.length&&(l(e[0])&&(i=e[0]),l(e[1])&&(r=e[1])),this._d(t,r,i,a)},St.prototype.getNumberFormat=function(t){return y(this._vm.numberFormats[t]||{})},St.prototype.setNumberFormat=function(t,e){this._vm.$set(this._vm.numberFormats,t,e),this._clearNumberFormat(t,e)},St.prototype.mergeNumberFormat=function(t,e){this._vm.$set(this._vm.numberFormats,t,x(this._vm.numberFormats[t]||{},e)),this._clearNumberFormat(t,e)},St.prototype._clearNumberFormat=function(t,e){for(var n in e){var r=t+"__"+n;this._numberFormatters.hasOwnProperty(r)&&delete this._numberFormatters[r]}},St.prototype._getNumberFormatter=function(t,e,n,r,o,i){for(var a=e,s=r[a],c=this._getLocaleChain(e,n),u=0;u0)e[n]=arguments[n+1];var o=this.locale,i=null,a=null;return 1===e.length?l(e[0])?i=e[0]:c(e[0])&&(e[0].locale&&(o=e[0].locale),e[0].key&&(i=e[0].key),a=Object.keys(e[0]).reduce((function(t,n){var o;return _(r,n)?Object.assign({},t,(o={},o[n]=e[0][n],o)):t}),null)):2===e.length&&(l(e[0])&&(i=e[0]),l(e[1])&&(o=e[1])),this._n(t,o,i,a)},St.prototype._ntp=function(t,e,n,r){if(!St.availabilities.numberFormat)return[];if(!n){var o=r?new Intl.NumberFormat(e,r):new Intl.NumberFormat(e);return o.formatToParts(t)}var i=this._getNumberFormatter(t,e,this.fallbackLocale,this._getNumberFormats(),n,r),a=i&&i.formatToParts(t);if(this._isFallbackRoot(a)){if(!this._root)throw Error("unexpected error");return this._root.$i18n._ntp(t,e,n,r)}return a||[]},Object.defineProperties(St.prototype,Et),Object.defineProperty(St,"availabilities",{get:function(){if(!bt){var t="undefined"!==typeof Intl;bt={dateTimeFormat:t&&"undefined"!==typeof Intl.DateTimeFormat,numberFormat:t&&"undefined"!==typeof Intl.NumberFormat}}return bt}}),St.install=W,St.version="8.28.2",e["a"]=St},aed9:function(t,e,n){var r=n("83ab"),o=n("d039");t.exports=r&&o((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},b42e:function(t,e){var n=Math.ceil,r=Math.floor;t.exports=Math.trunc||function(t){var e=+t;return(e>0?r:n)(e)}},b50d:function(t,e,n){"use strict";var r=n("c532"),o=n("467f"),i=n("7aac"),a=n("30b5"),s=n("83b9"),c=n("c345"),u=n("3934"),l=n("2d83");t.exports=function(t){return new Promise((function(e,n){var f=t.data,p=t.headers,h=t.responseType;r.isFormData(f)&&delete p["Content-Type"];var d=new XMLHttpRequest;if(t.auth){var v=t.auth.username||"",m=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";p.Authorization="Basic "+btoa(v+":"+m)}var y=s(t.baseURL,t.url);function g(){if(d){var r="getAllResponseHeaders"in d?c(d.getAllResponseHeaders()):null,i=h&&"text"!==h&&"json"!==h?d.response:d.responseText,a={data:i,status:d.status,statusText:d.statusText,headers:r,config:t,request:d};o(e,n,a),d=null}}if(d.open(t.method.toUpperCase(),a(y,t.params,t.paramsSerializer),!0),d.timeout=t.timeout,"onloadend"in d?d.onloadend=g:d.onreadystatechange=function(){d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))&&setTimeout(g)},d.onabort=function(){d&&(n(l("Request aborted",t,"ECONNABORTED",d)),d=null)},d.onerror=function(){n(l("Network Error",t,null,d)),d=null},d.ontimeout=function(){var e="timeout of "+t.timeout+"ms exceeded";t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(l(e,t,t.transitional&&t.transitional.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",d)),d=null},r.isStandardBrowserEnv()){var b=(t.withCredentials||u(y))&&t.xsrfCookieName?i.read(t.xsrfCookieName):void 0;b&&(p[t.xsrfHeaderName]=b)}"setRequestHeader"in d&&r.forEach(p,(function(t,e){"undefined"===typeof f&&"content-type"===e.toLowerCase()?delete p[e]:d.setRequestHeader(e,t)})),r.isUndefined(t.withCredentials)||(d.withCredentials=!!t.withCredentials),h&&"json"!==h&&(d.responseType=t.responseType),"function"===typeof t.onDownloadProgress&&d.addEventListener("progress",t.onDownloadProgress),"function"===typeof t.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then((function(t){d&&(d.abort(),n(t),d=null)})),f||(f=null),d.send(f)}))}},b622:function(t,e,n){var r=n("da84"),o=n("5692"),i=n("1a2d"),a=n("90e3"),s=n("04f8"),c=n("fdbf"),u=o("wks"),l=r.Symbol,f=l&&l["for"],p=c?l:l&&l.withoutSetter||a;t.exports=function(t){if(!i(u,t)||!s&&"string"!=typeof u[t]){var e="Symbol."+t;s&&i(l,t)?u[t]=l[t]:u[t]=c&&f?f(e):p(e)}return u[t]}},bc3a:function(t,e,n){t.exports=n("cee4")},c04e:function(t,e,n){var r=n("c65b"),o=n("861d"),i=n("d9b5"),a=n("dc4a"),s=n("485a"),c=n("b622"),u=TypeError,l=c("toPrimitive");t.exports=function(t,e){if(!o(t)||i(t))return t;var n,c=a(t,l);if(c){if(void 0===e&&(e="default"),n=r(c,t,e),!o(n)||i(n))return n;throw u("Can't convert object to primitive value")}return void 0===e&&(e="number"),s(t,e)}},c345:function(t,e,n){"use strict";var r=n("c532"),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];t.exports=function(t){var e,n,i,a={};return t?(r.forEach(t.split("\n"),(function(t){if(i=t.indexOf(":"),e=r.trim(t.substr(0,i)).toLowerCase(),n=r.trim(t.substr(i+1)),e){if(a[e]&&o.indexOf(e)>=0)return;a[e]="set-cookie"===e?(a[e]?a[e]:[]).concat([n]):a[e]?a[e]+", "+n:n}})),a):a}},c401:function(t,e,n){"use strict";var r=n("c532"),o=n("2444");t.exports=function(t,e,n){var i=this||o;return r.forEach(n,(function(n){t=n.call(i,t,e)})),t}},c430:function(t,e){t.exports=!1},c532:function(t,e,n){"use strict";var r=n("1d2b"),o=Object.prototype.toString;function i(t){return"[object Array]"===o.call(t)}function a(t){return"undefined"===typeof t}function s(t){return null!==t&&!a(t)&&null!==t.constructor&&!a(t.constructor)&&"function"===typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}function c(t){return"[object ArrayBuffer]"===o.call(t)}function u(t){return"undefined"!==typeof FormData&&t instanceof FormData}function l(t){var e;return e="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer,e}function f(t){return"string"===typeof t}function p(t){return"number"===typeof t}function h(t){return null!==t&&"object"===typeof t}function d(t){if("[object Object]"!==o.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function v(t){return"[object Date]"===o.call(t)}function m(t){return"[object File]"===o.call(t)}function y(t){return"[object Blob]"===o.call(t)}function g(t){return"[object Function]"===o.call(t)}function b(t){return h(t)&&g(t.pipe)}function _(t){return"undefined"!==typeof URLSearchParams&&t instanceof URLSearchParams}function w(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function k(){return("undefined"===typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!==typeof window&&"undefined"!==typeof document)}function x(t,e){if(null!==t&&"undefined"!==typeof t)if("object"!==typeof t&&(t=[t]),i(t))for(var n=0,r=t.length;nu)o(r,n=e[u++])&&(~a(l,n)||c(l,n));return l}},cb2d:function(t,e,n){var r=n("1626"),o=n("9bf2"),i=n("13d2"),a=n("6374");t.exports=function(t,e,n,s){s||(s={});var c=s.enumerable,u=void 0!==s.name?s.name:e;if(r(n)&&i(n,u,s),s.global)c?t[e]=n:a(e,n);else{try{s.unsafe?t[e]&&(c=!0):delete t[e]}catch(l){}c?t[e]=n:o.f(t,e,{value:n,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return t}},cc12:function(t,e,n){var r=n("da84"),o=n("861d"),i=r.document,a=o(i)&&o(i.createElement);t.exports=function(t){return a?i.createElement(t):{}}},cdce:function(t,e,n){var r=n("da84"),o=n("1626"),i=r.WeakMap;t.exports=o(i)&&/native code/.test(String(i))},cee4:function(t,e,n){"use strict";var r=n("c532"),o=n("1d2b"),i=n("0a06"),a=n("4a7b"),s=n("2444");function c(t){var e=new i(t),n=o(i.prototype.request,e);return r.extend(n,i.prototype,e),r.extend(n,e),n}var u=c(s);u.Axios=i,u.create=function(t){return c(a(u.defaults,t))},u.Cancel=n("7a77"),u.CancelToken=n("8df4"),u.isCancel=n("2e67"),u.all=function(t){return Promise.all(t)},u.spread=n("0df6"),u.isAxiosError=n("5f02"),t.exports=u,t.exports.default=u},d012:function(t,e){t.exports={}},d039:function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},d066:function(t,e,n){var r=n("da84"),o=n("1626"),i=function(t){return o(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?i(r[t]):r[t]&&r[t][e]}},d1e7:function(t,e,n){"use strict";var r={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!r.call({1:2},1);e.f=i?function(t){var e=o(this,t);return!!e&&e.enumerable}:r},d2db:function(t,e,n){},d925:function(t,e,n){"use strict";t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},d9b5:function(t,e,n){var r=n("d066"),o=n("1626"),i=n("3a9b"),a=n("fdbf"),s=Object;t.exports=a?function(t){return"symbol"==typeof t}:function(t){var e=r("Symbol");return o(e)&&i(e.prototype,s(t))}},da84:function(t,e,n){(function(e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||function(){return this}()||Function("return this")()}).call(this,n("c8ba"))},dc4a:function(t,e,n){var r=n("59ed"),o=n("7234");t.exports=function(t,e){var n=t[e];return o(n)?void 0:r(n)}},dd7f:function(t,e,n){ +/*! + * + * simple-keyboard v2.32.131 + * https://github.com/hodgef/simple-keyboard + * + * Copyright (c) Francisco Hodge (https://github.com/hodgef) + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ +!function(e,n){t.exports=n()}(0,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"===typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="/",n(n.s=0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){"use strict";function r(t,e){var n;if("undefined"===typeof Symbol||null==t[Symbol.iterator]){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"===typeof t)return o(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(t,e):void 0}}(t))||e&&t&&"number"===typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,c=!1;return{s:function(){n=t[Symbol.iterator]()},n:function(){var t=n.next();return s=t.done,t},e:function(t){c=!0,a=t},f:function(){try{s||null==n.return||n.return()}finally{if(c)throw a}}}}function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n3&&void 0!==arguments[3]?arguments[3]:n,o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],i=this.getOptions(),a=[n,r,o],s=e;return("{bksp}"===t||"{backspace}"===t)&&s.length>0?s=this.removeAt.apply(this,[s].concat(a)):"{space}"===t?s=this.addStringAt.apply(this,[s," "].concat(a)):"{tab}"!==t||"boolean"===typeof i.tabCharOnTab&&!1===i.tabCharOnTab?"{enter}"!==t&&"{numpadenter}"!==t||!i.newLineOnEnter?t.includes("numpad")&&Number.isInteger(Number(t[t.length-2]))?s=this.addStringAt.apply(this,[s,t[t.length-2]].concat(a)):"{numpaddivide}"===t?s=this.addStringAt.apply(this,[s,"/"].concat(a)):"{numpadmultiply}"===t?s=this.addStringAt.apply(this,[s,"*"].concat(a)):"{numpadsubtract}"===t?s=this.addStringAt.apply(this,[s,"-"].concat(a)):"{numpadadd}"===t?s=this.addStringAt.apply(this,[s,"+"].concat(a)):"{numpaddecimal}"===t?s=this.addStringAt.apply(this,[s,"."].concat(a)):"{"===t||"}"===t?s=this.addStringAt.apply(this,[s,t].concat(a)):t.includes("{")||t.includes("}")||(s=this.addStringAt.apply(this,[s,t].concat(a))):s=this.addStringAt.apply(this,[s,"\n"].concat(a)):s=this.addStringAt.apply(this,[s,"\t"].concat(a)),s}},{key:"updateCaretPos",value:function(t,e){var n=this.updateCaretPosAction(t,e);this.dispatch((function(t){t.setCaretPosition(n)}))}},{key:"updateCaretPosAction",value:function(t,e){var n=this.getOptions(),r=this.getCaretPosition();return e?r>0&&(r-=t):r+=t,n.debug&&console.log("Caret at:",r,"(".concat(this.keyboardDOMClass,")")),r}},{key:"addStringAt",value:function(t,e){var n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.length,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.length,i=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return r||0===r?(n=[t.slice(0,r),e,t.slice(o)].join(""),this.isMaxLengthReached()||i&&this.updateCaretPos(e.length)):n=t+e,n}},{key:"removeAt",value:function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.length,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.length,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(0===n&&0===r)return t;if(n===r){var i=/([\uD800-\uDBFF][\uDC00-\uDFFF])/g;n&&n>=0?t.substring(n-2,n).match(i)?(e=t.substr(0,n-2)+t.substr(n),o&&this.updateCaretPos(2,!0)):(e=t.substr(0,n-1)+t.substr(n),o&&this.updateCaretPos(1,!0)):t.slice(-2).match(i)?(e=t.slice(0,-2),o&&this.updateCaretPos(2,!0)):(e=t.slice(0,-1),o&&this.updateCaretPos(1,!0))}else e=t.slice(0,n)+t.slice(r),o&&this.dispatch((function(t){t.setCaretPosition(n)}));return e}},{key:"handleMaxLength",value:function(t,e){var n=this.getOptions(),r=n.maxLength,o=t[n.inputName],a=e.length-1>=r;if(e.length<=o.length)return!1;if(Number.isInteger(r))return n.debug&&console.log("maxLength (num) reached:",a),a?(this.maxLengthReached=!0,!0):(this.maxLengthReached=!1,!1);if("object"===i(r)){var s=e.length-1>=r[n.inputName];return n.debug&&console.log("maxLength (obj) reached:",s),s?(this.maxLengthReached=!0,!0):(this.maxLengthReached=!1,!1)}}},{key:"isMaxLengthReached",value:function(){return Boolean(this.maxLengthReached)}},{key:"isTouchDevice",value:function(){return"ontouchstart"in window||navigator.maxTouchPoints}},{key:"pointerEventsSupported",value:function(){return window.PointerEvent}},{key:"camelCase",value:function(t){return!!t&&t.toLowerCase().trim().split(/[.\-_\s]/g).reduce((function(t,e){return e.length?t+e[0].toUpperCase()+e.slice(1):t}))}}])&&a(e.prototype,n),o&&a(e,o),t}();u=function(){},(c="noop")in(s=l)?Object.defineProperty(s,c,{value:u,enumerable:!0,configurable:!0,writable:!0}):s[c]=u;var f=l;function p(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:null,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;n&&(this.options.preventMouseUpDefault&&n.preventDefault(),this.options.stopMouseUpPropagation&&n.stopPropagation()),this.recurseButtons((function(e){e.classList.remove(t.activeButtonClass)})),this.isMouseHold=!1,this.holdInteractionTimeout&&clearTimeout(this.holdInteractionTimeout),e&&"function"===typeof this.options.onKeyReleased&&this.options.onKeyReleased(e)}},{key:"handleKeyboardContainerMouseDown",value:function(t){this.options.preventMouseDownDefault&&t.preventDefault()}},{key:"handleButtonHold",value:function(t){var e=this;this.holdInteractionTimeout&&clearTimeout(this.holdInteractionTimeout),this.holdInteractionTimeout=setTimeout((function(){e.isMouseHold?(e.handleButtonClicked(t),e.handleButtonHold(t)):clearTimeout(e.holdInteractionTimeout)}),100)}},{key:"syncInstanceInputs",value:function(){var t=this;this.dispatch((function(e){e.replaceInput(t.input),e.setCaretPosition(t.caretPosition,t.caretPositionEnd)}))}},{key:"clearInput",value:function(t){t=t||this.options.inputName,this.input[t]="",this.setCaretPosition(0),this.options.syncInstanceInputs&&this.syncInstanceInputs()}},{key:"getInput",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(t=t||this.options.inputName,this.options.syncInstanceInputs&&!e&&this.syncInstanceInputs(),this.options.rtl){var n=this.input[t].replace("‫","").replace("‬","");return"‫"+n+"‬"}return this.input[t]}},{key:"getAllInputs",value:function(){var t=this,e={};return Object.keys(this.input).forEach((function(n){e[n]=t.getInput(n,!0)})),e}},{key:"setInput",value:function(t,e){e=e||this.options.inputName,this.input[e]=t,this.options.syncInstanceInputs&&this.syncInstanceInputs()}},{key:"replaceInput",value:function(t){this.input=t}},{key:"setOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.changedOptions(t);this.options=Object.assign(this.options,t),e.length&&(this.options.debug&&console.log("changedOptions",e),this.onSetOptions(t),this.render())}},{key:"changedOptions",value:function(t){var e=this;return Object.keys(t).filter((function(n){return JSON.stringify(t[n])!==JSON.stringify(e.options[n])}))}},{key:"onSetOptions",value:function(t){t.inputName&&(this.options.debug&&console.log("inputName changed. caretPosition reset."),this.setCaretPosition(null))}},{key:"clear",value:function(){this.keyboardDOM.innerHTML="",this.keyboardDOM.className=this.keyboardDOMClass,this.buttonElements={}}},{key:"dispatch",value:function(t){if(!window.SimpleKeyboardInstances)throw console.warn("SimpleKeyboardInstances is not defined. Dispatch cannot be called."),new Error("INSTANCES_VAR_ERROR");return Object.keys(window.SimpleKeyboardInstances).forEach((function(e){t(window.SimpleKeyboardInstances[e],e)}))}},{key:"addButtonTheme",value:function(t,e){var n=this;if(!e||!t)return!1;t.split(" ").forEach((function(r){e.split(" ").forEach((function(e){n.options.buttonTheme||(n.options.buttonTheme=[]);var o=!1;n.options.buttonTheme.map((function(t){if(t.class.split(" ").includes(e)){o=!0;var n=t.buttons.split(" ");n.includes(r)||(o=!0,n.push(r),t.buttons=n.join(" "))}return t})),o||n.options.buttonTheme.push({class:e,buttons:t})}))})),this.render()}},{key:"removeButtonTheme",value:function(t,e){var n=this;if(!t&&!e)return this.options.buttonTheme=[],this.render(),!1;t&&Array.isArray(this.options.buttonTheme)&&this.options.buttonTheme.length&&(t.split(" ").forEach((function(t){n.options.buttonTheme.map((function(r,o){if(e&&e.includes(r.class)||!e){var i=r.buttons.split(" ").filter((function(e){return e!==t}));i.length?r.buttons=i.join(" "):(n.options.buttonTheme.splice(o,1),r=null)}return r}))})),this.render())}},{key:"getButtonElement",value:function(t){var e,n=this.buttonElements[t];return n&&(e=n.length>1?n:n[0]),e}},{key:"inputPatternIsValid",value:function(t){var e,n=this.options.inputPattern;if((e=n instanceof RegExp?n:n[this.options.inputName])&&t){var r=e.test(t);return this.options.debug&&console.log('inputPattern ("'.concat(e,'"): ').concat(r?"passed":"did not pass!")),r}return!0}},{key:"setEventListeners",value:function(){!this.isFirstKeyboardInstance&&this.allKeyboardInstances||(this.options.debug&&console.log("Caret handling started (".concat(this.keyboardDOMClass,")")),document.addEventListener("keyup",this.handleKeyUp),document.addEventListener("keydown",this.handleKeyDown),document.addEventListener("mouseup",this.handleMouseUp),document.addEventListener("touchend",this.handleTouchEnd))}},{key:"handleKeyUp",value:function(t){this.caretEventHandler(t),this.options.physicalKeyboardHighlight&&this.physicalKeyboard.handleHighlightKeyUp(t)}},{key:"handleKeyDown",value:function(t){this.options.physicalKeyboardHighlight&&this.physicalKeyboard.handleHighlightKeyDown(t)}},{key:"handleMouseUp",value:function(t){this.caretEventHandler(t)}},{key:"handleTouchEnd",value:function(t){this.caretEventHandler(t)}},{key:"caretEventHandler",value:function(t){var e;t.target.tagName&&(e=t.target.tagName.toLowerCase()),this.dispatch((function(n){var r=t.target===n.keyboardDOM||t.target&&n.keyboardDOM.contains(t.target);n.isMouseHold&&(n.isMouseHold=!1),"textarea"!==e&&"input"!==e||!["text","search","url","tel","password"].includes(t.target.type)||n.options.disableCaretPositioning?!n.options.disableCaretPositioning&&r||n.setCaretPosition(null):(n.setCaretPosition(t.target.selectionStart,t.target.selectionEnd),n.options.debug&&console.log("Caret at: ",n.getCaretPosition(),n.getCaretPositionEnd(),t&&t.target.tagName.toLowerCase(),"(".concat(n.keyboardDOMClass,")")))}))}},{key:"recurseButtons",value:function(t){var e=this;t&&Object.keys(this.buttonElements).forEach((function(n){return e.buttonElements[n].forEach(t)}))}},{key:"destroy",value:function(){this.options.debug&&console.log("Destroying simple-keyboard instance: ".concat(this.currentInstanceName)),document.removeEventListener("keyup",this.handleKeyUp),document.removeEventListener("keydown",this.handleKeyDown),document.removeEventListener("mouseup",this.handleMouseUp),document.removeEventListener("touchend",this.handleTouchEnd),document.onpointerup=null,document.ontouchend=null,document.ontouchcancel=null,document.onmouseup=null;var t=function(t){t.onpointerdown=null,t.onpointerup=null,t.onpointercancel=null,t.ontouchstart=null,t.ontouchend=null,t.ontouchcancel=null,t.onclick=null,t.onmousedown=null,t.onmouseup=null,t.remove(),t=null};this.recurseButtons(t),this.recurseButtons=null,t=null,this.keyboardDOM.onpointerdown=null,this.keyboardDOM.ontouchstart=null,this.keyboardDOM.onmousedown=null,this.clear(),window.SimpleKeyboardInstances[this.currentInstanceName]=null,delete window.SimpleKeyboardInstances[this.currentInstanceName],this.initialized=!1}},{key:"getButtonThemeClasses",value:function(t){var e=this.options.buttonTheme,n=[];return Array.isArray(e)&&e.forEach((function(e){if(e.class&&"string"===typeof e.class&&e.buttons&&"string"===typeof e.buttons){var r=e.class.split(" ");e.buttons.split(" ").includes(t)&&(n=[].concat(d(n),d(r)))}else console.warn('Incorrect "buttonTheme". Please check the documentation.',e)})),n}},{key:"setDOMButtonAttributes",value:function(t,e){var n=this.options.buttonAttributes;Array.isArray(n)&&n.forEach((function(n){n.attribute&&"string"===typeof n.attribute&&n.value&&"string"===typeof n.value&&n.buttons&&"string"===typeof n.buttons?n.buttons.split(" ").includes(t)&&e(n.attribute,n.value):console.warn('Incorrect "buttonAttributes". Please check the documentation.',n)}))}},{key:"onTouchDeviceDetected",value:function(){this.processAutoTouchEvents(),this.disableContextualWindow()}},{key:"disableContextualWindow",value:function(){window.oncontextmenu=function(t){if(t.target.classList.contains("hg-button"))return t.preventDefault(),t.stopPropagation(),!1}}},{key:"processAutoTouchEvents",value:function(){this.options.autoUseTouchEvents&&(this.options.useTouchEvents=!0,this.options.debug&&console.log("autoUseTouchEvents: Touch device detected, useTouchEvents enabled."))}},{key:"onInit",value:function(){this.options.debug&&console.log("".concat(this.keyboardDOMClass," Initialized")),this.setEventListeners(),"function"===typeof this.options.onInit&&this.options.onInit()}},{key:"beforeFirstRender",value:function(){this.utilities.isTouchDevice()&&this.onTouchDeviceDetected(),"function"===typeof this.options.beforeFirstRender&&this.options.beforeFirstRender(),this.isFirstKeyboardInstance&&this.utilities.pointerEventsSupported()&&!this.options.useTouchEvents&&!this.options.useMouseEvents&&this.options.debug&&console.log("Using PointerEvents as it is supported by this browser"),this.options.useTouchEvents&&this.options.debug&&console.log("useTouchEvents has been enabled. Only touch events will be used.")}},{key:"beforeRender",value:function(){"function"===typeof this.options.beforeRender&&this.options.beforeRender()}},{key:"onRender",value:function(){"function"===typeof this.options.onRender&&this.options.onRender()}},{key:"onModulesLoaded",value:function(){"function"===typeof this.options.onModulesLoaded&&this.options.onModulesLoaded(this)}},{key:"loadModules",value:function(){var t=this;Array.isArray(this.options.modules)&&(this.options.modules.forEach((function(e){(new e).init(t)})),this.keyboardPluginClasses="modules-loaded",this.render(),this.onModulesLoaded())}},{key:"getModuleProp",value:function(t,e){return!!this.modules[t]&&this.modules[t][e]}},{key:"getModulesList",value:function(){return Object.keys(this.modules)}},{key:"parseRowDOMContainers",value:function(t,e,n,r){var o=this,i=Array.from(t.children),a=0;return i.length&&n.forEach((function(n,s){var c=r[s];if(!c||!(c>n))return!1;var u=n-a,l=c-a,f=document.createElement("div");f.className+="hg-button-container";var p="".concat(o.options.layoutName,"-r").concat(e,"c").concat(s);f.setAttribute("data-skUID",p);var h=i.splice(u,l-u+1);a=l-u,h.forEach((function(t){return f.appendChild(t)})),i.splice(u,0,f),t.innerHTML="",i.forEach((function(e){return t.appendChild(e)})),o.options.debug&&console.log("rowDOMContainer",h,u,l,a+1)})),t}},{key:"render",value:function(){var t=this;this.clear(),this.initialized||this.beforeFirstRender(),this.beforeRender();var e="hg-layout-".concat(this.options.layoutName),n=this.options.layout||{default:["` 1 2 3 4 5 6 7 8 9 0 - = {bksp}","{tab} q w e r t y u i o p [ ] \\","{lock} a s d f g h j k l ; ' {enter}","{shift} z x c v b n m , . / {shift}",".com @ {space}"],shift:["~ ! @ # $ % ^ & * ( ) _ + {bksp}","{tab} Q W E R T Y U I O P { } |",'{lock} A S D F G H J K L : " {enter}',"{shift} Z X C V B N M < > ? {shift}",".com @ {space}"]},r=this.options.useTouchEvents||!1,o=r?"hg-touch-events":"",i=this.options.useMouseEvents||!1,a=this.options.disableRowButtonContainers;this.keyboardDOM.className=this.getKeyboardClassString(this.options.theme,e,this.keyboardPluginClasses,o),n[this.options.layoutName].forEach((function(e,n){var o=e.split(" "),s=document.createElement("div");s.className+="hg-row";var c=[],u=[];o.forEach((function(e,o){var l,f=!a&&"string"===typeof e&&e.length>1&&0===e.indexOf("["),p=!a&&"string"===typeof e&&e.length>1&&e.indexOf("]")===e.length-1;f&&(c.push(o),e=e.replace(/\[/g,"")),p&&(u.push(o),e=e.replace(/\]/g,""));var h=t.utilities.getButtonClass(e),v=t.utilities.getButtonDisplayName(e,t.options.display,t.options.mergeDisplay),m=t.options.useButtonTag?"button":"div",y=document.createElement(m);y.className+="hg-button ".concat(h),(l=y.classList).add.apply(l,d(t.getButtonThemeClasses(e))),t.setDOMButtonAttributes(e,(function(t,e){y.setAttribute(t,e)})),t.activeButtonClass="hg-activeButton",!t.utilities.pointerEventsSupported()||r||i?r?(y.ontouchstart=function(n){t.handleButtonClicked(e),t.handleButtonMouseDown(e,n)},y.ontouchend=function(n){t.handleButtonMouseUp(e,n)},y.ontouchcancel=function(n){t.handleButtonMouseUp(e,n)}):(y.onclick=function(){t.isMouseHold=!1,t.handleButtonClicked(e)},y.onmousedown=function(n){t.handleButtonMouseDown(e,n)},y.onmouseup=function(n){t.handleButtonMouseUp(e,n)}):(y.onpointerdown=function(n){t.handleButtonClicked(e),t.handleButtonMouseDown(e,n)},y.onpointerup=function(n){t.handleButtonMouseUp(e,n)},y.onpointercancel=function(n){t.handleButtonMouseUp(e,n)}),y.setAttribute("data-skBtn",e);var g="".concat(t.options.layoutName,"-r").concat(n,"b").concat(o);y.setAttribute("data-skBtnUID",g);var b=document.createElement("span");b.innerHTML=v,y.appendChild(b),t.buttonElements[e]||(t.buttonElements[e]=[]),t.buttonElements[e].push(y),s.appendChild(y)})),s=t.parseRowDOMContainers(s,n,c,u),t.keyboardDOM.appendChild(s)})),this.onRender(),this.initialized||(this.initialized=!0,!this.utilities.pointerEventsSupported()||r||i?r?(document.ontouchend=function(){return t.handleButtonMouseUp()},document.ontouchcancel=function(){return t.handleButtonMouseUp()},this.keyboardDOM.ontouchstart=function(e){return t.handleKeyboardContainerMouseDown(e)}):r||(document.onmouseup=function(){return t.handleButtonMouseUp()},this.keyboardDOM.onmousedown=function(e){return t.handleKeyboardContainerMouseDown(e)}):(document.onpointerup=function(){return t.handleButtonMouseUp()},this.keyboardDOM.onpointerdown=function(e){return t.handleKeyboardContainerMouseDown(e)}),this.onInit())}}])&&y(e.prototype,n),r&&y(e,r),t}();e.default=b}])}))},df7c:function(t,e,n){(function(t){function n(t,e){for(var n=0,r=t.length-1;r>=0;r--){var o=t[r];"."===o?t.splice(r,1):".."===o?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function r(t){"string"!==typeof t&&(t+="");var e,n=0,r=-1,o=!0;for(e=t.length-1;e>=0;--e)if(47===t.charCodeAt(e)){if(!o){n=e+1;break}}else-1===r&&(o=!1,r=e+1);return-1===r?"":t.slice(n,r)}function o(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r=-1&&!r;i--){var a=i>=0?arguments[i]:t.cwd();if("string"!==typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,r="/"===a.charAt(0))}return e=n(o(e.split("/"),(function(t){return!!t})),!r).join("/"),(r?"/":"")+e||"."},e.normalize=function(t){var r=e.isAbsolute(t),a="/"===i(t,-1);return t=n(o(t.split("/"),(function(t){return!!t})),!r).join("/"),t||r||(t="."),t&&a&&(t+="/"),(r?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(o(t,(function(t,e){if("string"!==typeof t)throw new TypeError("Arguments to path.join must be strings");return t})).join("/"))},e.relative=function(t,n){function r(t){for(var e=0;e=0;n--)if(""!==t[n])break;return e>n?[]:t.slice(e,n-e+1)}t=e.resolve(t).substr(1),n=e.resolve(n).substr(1);for(var o=r(t.split("/")),i=r(n.split("/")),a=Math.min(o.length,i.length),s=a,c=0;c=1;--i)if(e=t.charCodeAt(i),47===e){if(!o){r=i;break}}else o=!1;return-1===r?n?"/":".":n&&1===r?"/":t.slice(0,r)},e.basename=function(t,e){var n=r(t);return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},e.extname=function(t){"string"!==typeof t&&(t+="");for(var e=-1,n=0,r=-1,o=!0,i=0,a=t.length-1;a>=0;--a){var s=t.charCodeAt(a);if(47!==s)-1===r&&(o=!1,r=a+1),46===s?-1===e?e=a:1!==i&&(i=1):-1!==e&&(i=-1);else if(!o){n=a+1;break}}return-1===e||-1===r||0===i||1===i&&e===r-1&&e===n+1?"":t.slice(e,r)};var i="b"==="ab".substr(-1)?function(t,e,n){return t.substr(e,n)}:function(t,e,n){return e<0&&(e=t.length+e),t.substr(e,n)}}).call(this,n("4362"))},e330:function(t,e,n){var r=n("c6b6"),o=n("7d7e");t.exports=function(t){if("Function"===r(t))return o(t)}},e683:function(t,e,n){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},e893:function(t,e,n){var r=n("1a2d"),o=n("56ef"),i=n("06cf"),a=n("9bf2");t.exports=function(t,e,n){for(var s=o(e),c=a.f,u=i.f,l=0;l= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent(\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */,\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options =\n typeof scriptExports === 'function' ? scriptExports.options : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) {\n // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","/*!\n * Vue.js v2.7.13\n * (c) 2014-2022 Evan You\n * Released under the MIT License.\n */\nvar emptyObject = Object.freeze({});\nvar isArray = Array.isArray;\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef(v) {\n return v === undefined || v === null;\n}\nfunction isDef(v) {\n return v !== undefined && v !== null;\n}\nfunction isTrue(v) {\n return v === true;\n}\nfunction isFalse(v) {\n return v === false;\n}\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive(value) {\n return (typeof value === 'string' ||\n typeof value === 'number' ||\n // $flow-disable-line\n typeof value === 'symbol' ||\n typeof value === 'boolean');\n}\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * Quick object check - this is primarily used to tell\n * objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object';\n}\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\nfunction toRawType(value) {\n return _toString.call(value).slice(8, -1);\n}\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject(obj) {\n return _toString.call(obj) === '[object Object]';\n}\nfunction isRegExp(v) {\n return _toString.call(v) === '[object RegExp]';\n}\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex(val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val);\n}\nfunction isPromise(val) {\n return (isDef(val) &&\n typeof val.then === 'function' &&\n typeof val.catch === 'function');\n}\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString(val) {\n return val == null\n ? ''\n : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n ? JSON.stringify(val, null, 2)\n : String(val);\n}\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber(val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n;\n}\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap(str, expectsLowerCase) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; };\n}\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n/**\n * Remove an item from an array.\n */\nfunction remove$2(arr, item) {\n var len = arr.length;\n if (len) {\n // fast path for the only / last item\n if (item === arr[len - 1]) {\n arr.length = len - 1;\n return;\n }\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1);\n }\n }\n}\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn(obj, key) {\n return hasOwnProperty.call(obj, key);\n}\n/**\n * Create a cached version of a pure function.\n */\nfunction cached(fn) {\n var cache = Object.create(null);\n return function cachedFn(str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); });\n});\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase();\n});\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n/* istanbul ignore next */\nfunction polyfillBind(fn, ctx) {\n function boundFn(a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx);\n }\n boundFn._length = fn.length;\n return boundFn;\n}\nfunction nativeBind(fn, ctx) {\n return fn.bind(ctx);\n}\n// @ts-expect-error bind cannot be `undefined`\nvar bind = Function.prototype.bind ? nativeBind : polyfillBind;\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray(list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret;\n}\n/**\n * Mix properties into target object.\n */\nfunction extend(to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to;\n}\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject(arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res;\n}\n/* eslint-disable no-unused-vars */\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop(a, b, c) { }\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n/* eslint-enable no-unused-vars */\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual(a, b) {\n if (a === b)\n return true;\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return (a.length === b.length &&\n a.every(function (e, i) {\n return looseEqual(e, b[i]);\n }));\n }\n else if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return (keysA.length === keysB.length &&\n keysA.every(function (key) {\n return looseEqual(a[key], b[key]);\n }));\n }\n else {\n /* istanbul ignore next */\n return false;\n }\n }\n catch (e) {\n /* istanbul ignore next */\n return false;\n }\n }\n else if (!isObjectA && !isObjectB) {\n return String(a) === String(b);\n }\n else {\n return false;\n }\n}\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf(arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val))\n return i;\n }\n return -1;\n}\n/**\n * Ensure a function is called only once.\n */\nfunction once(fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n };\n}\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill\nfunction hasChanged(x, y) {\n if (x === y) {\n return x === 0 && 1 / x !== 1 / y;\n }\n else {\n return x === x || y === y;\n }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\nvar ASSET_TYPES = ['component', 'directive', 'filter'];\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured',\n 'serverPrefetch',\n 'renderTracked',\n 'renderTriggered'\n];\n\nvar config = {\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n /**\n * Show production mode tip message on boot?\n */\n productionTip: process.env.NODE_ENV !== 'production',\n /**\n * Whether to enable devtools\n */\n devtools: process.env.NODE_ENV !== 'production',\n /**\n * Whether to record perf\n */\n performance: false,\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n /**\n * Perform updates asynchronously. Intended to be used by Vue Test Utils\n * This will significantly reduce performance if set to false.\n */\n async: true,\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n};\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved(str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5f;\n}\n/**\n * Define a property.\n */\nfunction def(obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp(\"[^\".concat(unicodeRegExp.source, \".$_\\\\d]\"));\nfunction parsePath(path) {\n if (bailRE.test(path)) {\n return;\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj)\n return;\n obj = obj[segments[i]];\n }\n return obj;\n };\n}\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nUA && UA.indexOf('android') > 0;\nvar isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);\nUA && /chrome\\/\\d+/.test(UA) && !isEdge;\nUA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n// Firefox has a \"watch\" function on Object.prototype...\n// @ts-expect-error firebox support\nvar nativeWatch = {}.watch;\nvar supportsPassive = false;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', {\n get: function () {\n /* istanbul ignore next */\n supportsPassive = true;\n }\n }); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n }\n catch (e) { }\n}\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer =\n global['process'] && global['process'].env.VUE_ENV === 'server';\n }\n else {\n _isServer = false;\n }\n }\n return _isServer;\n};\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n/* istanbul ignore next */\nfunction isNative(Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString());\n}\nvar hasSymbol = typeof Symbol !== 'undefined' &&\n isNative(Symbol) &&\n typeof Reflect !== 'undefined' &&\n isNative(Reflect.ownKeys);\nvar _Set; // $flow-disable-line\n/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n}\nelse {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = /** @class */ (function () {\n function Set() {\n this.set = Object.create(null);\n }\n Set.prototype.has = function (key) {\n return this.set[key] === true;\n };\n Set.prototype.add = function (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function () {\n this.set = Object.create(null);\n };\n return Set;\n }());\n}\n\nvar currentInstance = null;\n/**\n * This is exposed for compatibility with v3 (e.g. some functions in VueUse\n * relies on it). Do not use this internally, just use `currentInstance`.\n *\n * @internal this function needs manual type declaration because it relies\n * on previously manually authored types from Vue 2\n */\nfunction getCurrentInstance() {\n return currentInstance && { proxy: currentInstance };\n}\n/**\n * @internal\n */\nfunction setCurrentInstance(vm) {\n if (vm === void 0) { vm = null; }\n if (!vm)\n currentInstance && currentInstance._scope.off();\n currentInstance = vm;\n vm && vm._scope.on();\n}\n\n/**\n * @internal\n */\nvar VNode = /** @class */ (function () {\n function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n }\n Object.defineProperty(VNode.prototype, \"child\", {\n // DEPRECATED: alias for componentInstance for backwards compat.\n /* istanbul ignore next */\n get: function () {\n return this.componentInstance;\n },\n enumerable: false,\n configurable: true\n });\n return VNode;\n}());\nvar createEmptyVNode = function (text) {\n if (text === void 0) { text = ''; }\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node;\n};\nfunction createTextVNode(val) {\n return new VNode(undefined, undefined, undefined, String(val));\n}\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode(vnode) {\n var cloned = new VNode(vnode.tag, vnode.data, \n // #7975\n // clone children array to avoid mutating original in case of cloning\n // a child.\n vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.asyncMeta = vnode.asyncMeta;\n cloned.isCloned = true;\n return cloned;\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\nvar uid$2 = 0;\nvar pendingCleanupDeps = [];\nvar cleanupDeps = function () {\n for (var i = 0; i < pendingCleanupDeps.length; i++) {\n var dep = pendingCleanupDeps[i];\n dep.subs = dep.subs.filter(function (s) { return s; });\n dep._pending = false;\n }\n pendingCleanupDeps.length = 0;\n};\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n * @internal\n */\nvar Dep = /** @class */ (function () {\n function Dep() {\n // pending subs cleanup\n this._pending = false;\n this.id = uid$2++;\n this.subs = [];\n }\n Dep.prototype.addSub = function (sub) {\n this.subs.push(sub);\n };\n Dep.prototype.removeSub = function (sub) {\n // #12696 deps with massive amount of subscribers are extremely slow to\n // clean up in Chromium\n // to workaround this, we unset the sub for now, and clear them on\n // next scheduler flush.\n this.subs[this.subs.indexOf(sub)] = null;\n if (!this._pending) {\n this._pending = true;\n pendingCleanupDeps.push(this);\n }\n };\n Dep.prototype.depend = function (info) {\n if (Dep.target) {\n Dep.target.addDep(this);\n if (process.env.NODE_ENV !== 'production' && info && Dep.target.onTrack) {\n Dep.target.onTrack(__assign({ effect: Dep.target }, info));\n }\n }\n };\n Dep.prototype.notify = function (info) {\n // stabilize the subscriber list first\n var subs = this.subs.filter(function (s) { return s; });\n if (process.env.NODE_ENV !== 'production' && !config.async) {\n // subs aren't sorted in scheduler if not running async\n // we need to sort them now to make sure they fire in correct\n // order\n subs.sort(function (a, b) { return a.id - b.id; });\n }\n for (var i = 0, l = subs.length; i < l; i++) {\n var sub = subs[i];\n if (process.env.NODE_ENV !== 'production' && info) {\n sub.onTrigger &&\n sub.onTrigger(__assign({ effect: subs[i] }, info));\n }\n sub.update();\n }\n };\n return Dep;\n}());\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\nfunction pushTarget(target) {\n targetStack.push(target);\n Dep.target = target;\n}\nfunction popTarget() {\n targetStack.pop();\n Dep.target = targetStack[targetStack.length - 1];\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\nvar methodsToPatch = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n];\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break;\n case 'splice':\n inserted = args.slice(2);\n break;\n }\n if (inserted)\n ob.observeArray(inserted);\n // notify change\n if (process.env.NODE_ENV !== 'production') {\n ob.dep.notify({\n type: \"array mutation\" /* TriggerOpTypes.ARRAY_MUTATION */,\n target: this,\n key: method\n });\n }\n else {\n ob.dep.notify();\n }\n return result;\n });\n});\n\nvar rawMap = new WeakMap();\nfunction reactive(target) {\n makeReactive(target, false);\n return target;\n}\n/**\n * Return a shallowly-reactive copy of the original object, where only the root\n * level properties are reactive. It also does not auto-unwrap refs (even at the\n * root level).\n */\nfunction shallowReactive(target) {\n makeReactive(target, true);\n def(target, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, true);\n return target;\n}\nfunction makeReactive(target, shallow) {\n // if trying to observe a readonly proxy, return the readonly version.\n if (!isReadonly(target)) {\n if (process.env.NODE_ENV !== 'production') {\n if (isArray(target)) {\n warn(\"Avoid using Array as root value for \".concat(shallow ? \"shallowReactive()\" : \"reactive()\", \" as it cannot be tracked in watch() or watchEffect(). Use \").concat(shallow ? \"shallowRef()\" : \"ref()\", \" instead. This is a Vue-2-only limitation.\"));\n }\n var existingOb = target && target.__ob__;\n if (existingOb && existingOb.shallow !== shallow) {\n warn(\"Target is already a \".concat(existingOb.shallow ? \"\" : \"non-\", \"shallow reactive object, and cannot be converted to \").concat(shallow ? \"\" : \"non-\", \"shallow.\"));\n }\n }\n var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);\n if (process.env.NODE_ENV !== 'production' && !ob) {\n if (target == null || isPrimitive(target)) {\n warn(\"value cannot be made reactive: \".concat(String(target)));\n }\n if (isCollectionType(target)) {\n warn(\"Vue 2 does not support reactive collection types such as Map or Set.\");\n }\n }\n }\n}\nfunction isReactive(value) {\n if (isReadonly(value)) {\n return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\n }\n return !!(value && value.__ob__);\n}\nfunction isShallow(value) {\n return !!(value && value.__v_isShallow);\n}\nfunction isReadonly(value) {\n return !!(value && value.__v_isReadonly);\n}\nfunction isProxy(value) {\n return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n var raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n if (isObject(value)) {\n rawMap.set(value, true);\n }\n return value;\n}\n/**\n * @internal\n */\nfunction isCollectionType(value) {\n var type = toRawType(value);\n return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');\n}\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\nvar NO_INIITIAL_VALUE = {};\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\nfunction toggleObserving(value) {\n shouldObserve = value;\n}\n// ssr mock dep\nvar mockDep = {\n notify: noop,\n depend: noop,\n addSub: noop,\n removeSub: noop\n};\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = /** @class */ (function () {\n function Observer(value, shallow, mock) {\n if (shallow === void 0) { shallow = false; }\n if (mock === void 0) { mock = false; }\n this.value = value;\n this.shallow = shallow;\n this.mock = mock;\n // this.value = value\n this.dep = mock ? mockDep : new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (isArray(value)) {\n if (!mock) {\n if (hasProto) {\n value.__proto__ = arrayMethods;\n /* eslint-enable no-proto */\n }\n else {\n for (var i = 0, l = arrayKeys.length; i < l; i++) {\n var key = arrayKeys[i];\n def(value, key, arrayMethods[key]);\n }\n }\n }\n if (!shallow) {\n this.observeArray(value);\n }\n }\n else {\n /**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\n var keys = Object.keys(value);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);\n }\n }\n }\n /**\n * Observe a list of Array items.\n */\n Observer.prototype.observeArray = function (value) {\n for (var i = 0, l = value.length; i < l; i++) {\n observe(value[i], false, this.mock);\n }\n };\n return Observer;\n}());\n// helpers\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe(value, shallow, ssrMockReactivity) {\n if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n return value.__ob__;\n }\n if (shouldObserve &&\n (ssrMockReactivity || !isServerRendering()) &&\n (isArray(value) || isPlainObject(value)) &&\n Object.isExtensible(value) &&\n !value.__v_skip /* ReactiveFlags.SKIP */ &&\n !rawMap.has(value) &&\n !isRef(value) &&\n !(value instanceof VNode)) {\n return new Observer(value, shallow, ssrMockReactivity);\n }\n}\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive(obj, key, val, customSetter, shallow, mock) {\n var dep = new Dep();\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return;\n }\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n var setter = property && property.set;\n if ((!getter || setter) &&\n (val === NO_INIITIAL_VALUE || arguments.length === 2)) {\n val = obj[key];\n }\n var childOb = !shallow && observe(val, false, mock);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter() {\n var value = getter ? getter.call(obj) : val;\n if (Dep.target) {\n if (process.env.NODE_ENV !== 'production') {\n dep.depend({\n target: obj,\n type: \"get\" /* TrackOpTypes.GET */,\n key: key\n });\n }\n else {\n dep.depend();\n }\n if (childOb) {\n childOb.dep.depend();\n if (isArray(value)) {\n dependArray(value);\n }\n }\n }\n return isRef(value) && !shallow ? value.value : value;\n },\n set: function reactiveSetter(newVal) {\n var value = getter ? getter.call(obj) : val;\n if (!hasChanged(value, newVal)) {\n return;\n }\n if (process.env.NODE_ENV !== 'production' && customSetter) {\n customSetter();\n }\n if (setter) {\n setter.call(obj, newVal);\n }\n else if (getter) {\n // #7981: for accessor properties without setter\n return;\n }\n else if (!shallow && isRef(value) && !isRef(newVal)) {\n value.value = newVal;\n return;\n }\n else {\n val = newVal;\n }\n childOb = !shallow && observe(newVal, false, mock);\n if (process.env.NODE_ENV !== 'production') {\n dep.notify({\n type: \"set\" /* TriggerOpTypes.SET */,\n target: obj,\n key: key,\n newValue: newVal,\n oldValue: value\n });\n }\n else {\n dep.notify();\n }\n }\n });\n return dep;\n}\nfunction set(target, key, val) {\n if (process.env.NODE_ENV !== 'production' && (isUndef(target) || isPrimitive(target))) {\n warn(\"Cannot set reactive property on undefined, null, or primitive value: \".concat(target));\n }\n if (isReadonly(target)) {\n process.env.NODE_ENV !== 'production' && warn(\"Set operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\n return;\n }\n var ob = target.__ob__;\n if (isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n // when mocking for SSR, array methods are not hijacked\n if (ob && !ob.shallow && ob.mock) {\n observe(val, false, true);\n }\n return val;\n }\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val;\n }\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' &&\n warn('Avoid adding reactive properties to a Vue instance or its root $data ' +\n 'at runtime - declare it upfront in the data option.');\n return val;\n }\n if (!ob) {\n target[key] = val;\n return val;\n }\n defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);\n if (process.env.NODE_ENV !== 'production') {\n ob.dep.notify({\n type: \"add\" /* TriggerOpTypes.ADD */,\n target: target,\n key: key,\n newValue: val,\n oldValue: undefined\n });\n }\n else {\n ob.dep.notify();\n }\n return val;\n}\nfunction del(target, key) {\n if (process.env.NODE_ENV !== 'production' && (isUndef(target) || isPrimitive(target))) {\n warn(\"Cannot delete reactive property on undefined, null, or primitive value: \".concat(target));\n }\n if (isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return;\n }\n var ob = target.__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' &&\n warn('Avoid deleting properties on a Vue instance or its root $data ' +\n '- just set it to null.');\n return;\n }\n if (isReadonly(target)) {\n process.env.NODE_ENV !== 'production' &&\n warn(\"Delete operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\n return;\n }\n if (!hasOwn(target, key)) {\n return;\n }\n delete target[key];\n if (!ob) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n ob.dep.notify({\n type: \"delete\" /* TriggerOpTypes.DELETE */,\n target: target,\n key: key\n });\n }\n else {\n ob.dep.notify();\n }\n}\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray(value) {\n for (var e = void 0, i = 0, l = value.length; i < l; i++) {\n e = value[i];\n if (e && e.__ob__) {\n e.__ob__.dep.depend();\n }\n if (isArray(e)) {\n dependArray(e);\n }\n }\n}\n\n/**\n * @internal\n */\nvar RefFlag = \"__v_isRef\";\nfunction isRef(r) {\n return !!(r && r.__v_isRef === true);\n}\nfunction ref$1(value) {\n return createRef(value, false);\n}\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (isRef(rawValue)) {\n return rawValue;\n }\n var ref = {};\n def(ref, RefFlag, true);\n def(ref, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, shallow);\n def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));\n return ref;\n}\nfunction triggerRef(ref) {\n if (process.env.NODE_ENV !== 'production' && !ref.dep) {\n warn(\"received object is not a triggerable ref.\");\n }\n if (process.env.NODE_ENV !== 'production') {\n ref.dep &&\n ref.dep.notify({\n type: \"set\" /* TriggerOpTypes.SET */,\n target: ref,\n key: 'value'\n });\n }\n else {\n ref.dep && ref.dep.notify();\n }\n}\nfunction unref(ref) {\n return isRef(ref) ? ref.value : ref;\n}\nfunction proxyRefs(objectWithRefs) {\n if (isReactive(objectWithRefs)) {\n return objectWithRefs;\n }\n var proxy = {};\n var keys = Object.keys(objectWithRefs);\n for (var i = 0; i < keys.length; i++) {\n proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);\n }\n return proxy;\n}\nfunction proxyWithRefUnwrap(target, source, key) {\n Object.defineProperty(target, key, {\n enumerable: true,\n configurable: true,\n get: function () {\n var val = source[key];\n if (isRef(val)) {\n return val.value;\n }\n else {\n var ob = val && val.__ob__;\n if (ob)\n ob.dep.depend();\n return val;\n }\n },\n set: function (value) {\n var oldValue = source[key];\n if (isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n }\n else {\n source[key] = value;\n }\n }\n });\n}\nfunction customRef(factory) {\n var dep = new Dep();\n var _a = factory(function () {\n if (process.env.NODE_ENV !== 'production') {\n dep.depend({\n target: ref,\n type: \"get\" /* TrackOpTypes.GET */,\n key: 'value'\n });\n }\n else {\n dep.depend();\n }\n }, function () {\n if (process.env.NODE_ENV !== 'production') {\n dep.notify({\n target: ref,\n type: \"set\" /* TriggerOpTypes.SET */,\n key: 'value'\n });\n }\n else {\n dep.notify();\n }\n }), get = _a.get, set = _a.set;\n var ref = {\n get value() {\n return get();\n },\n set value(newVal) {\n set(newVal);\n }\n };\n def(ref, RefFlag, true);\n return ref;\n}\nfunction toRefs(object) {\n if (process.env.NODE_ENV !== 'production' && !isReactive(object)) {\n warn(\"toRefs() expects a reactive object but received a plain one.\");\n }\n var ret = isArray(object) ? new Array(object.length) : {};\n for (var key in object) {\n ret[key] = toRef(object, key);\n }\n return ret;\n}\nfunction toRef(object, key, defaultValue) {\n var val = object[key];\n if (isRef(val)) {\n return val;\n }\n var ref = {\n get value() {\n var val = object[key];\n return val === undefined ? defaultValue : val;\n },\n set value(newVal) {\n object[key] = newVal;\n }\n };\n def(ref, RefFlag, true);\n return ref;\n}\n\nvar rawToReadonlyMap = new WeakMap();\nvar rawToShallowReadonlyMap = new WeakMap();\nfunction readonly(target) {\n return createReadonly(target, false);\n}\nfunction createReadonly(target, shallow) {\n if (!isPlainObject(target)) {\n if (process.env.NODE_ENV !== 'production') {\n if (isArray(target)) {\n warn(\"Vue 2 does not support readonly arrays.\");\n }\n else if (isCollectionType(target)) {\n warn(\"Vue 2 does not support readonly collection types such as Map or Set.\");\n }\n else {\n warn(\"value cannot be made readonly: \".concat(typeof target));\n }\n }\n return target;\n }\n // already a readonly object\n if (isReadonly(target)) {\n return target;\n }\n // already has a readonly proxy\n var map = shallow ? rawToShallowReadonlyMap : rawToReadonlyMap;\n var existingProxy = map.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n var proxy = Object.create(Object.getPrototypeOf(target));\n map.set(target, proxy);\n def(proxy, \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */, true);\n def(proxy, \"__v_raw\" /* ReactiveFlags.RAW */, target);\n if (isRef(target)) {\n def(proxy, RefFlag, true);\n }\n if (shallow || isShallow(target)) {\n def(proxy, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, true);\n }\n var keys = Object.keys(target);\n for (var i = 0; i < keys.length; i++) {\n defineReadonlyProperty(proxy, target, keys[i], shallow);\n }\n return proxy;\n}\nfunction defineReadonlyProperty(proxy, target, key, shallow) {\n Object.defineProperty(proxy, key, {\n enumerable: true,\n configurable: true,\n get: function () {\n var val = target[key];\n return shallow || !isPlainObject(val) ? val : readonly(val);\n },\n set: function () {\n process.env.NODE_ENV !== 'production' &&\n warn(\"Set operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\n }\n });\n}\n/**\n * Returns a reactive-copy of the original object, where only the root level\n * properties are readonly, and does NOT unwrap refs nor recursively convert\n * returned properties.\n * This is used for creating the props proxy object for stateful components.\n */\nfunction shallowReadonly(target) {\n return createReadonly(target, true);\n}\n\nfunction computed(getterOrOptions, debugOptions) {\n var getter;\n var setter;\n var onlyGetter = isFunction(getterOrOptions);\n if (onlyGetter) {\n getter = getterOrOptions;\n setter = process.env.NODE_ENV !== 'production'\n ? function () {\n warn('Write operation failed: computed value is readonly');\n }\n : noop;\n }\n else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n var watcher = isServerRendering()\n ? null\n : new Watcher(currentInstance, getter, noop, { lazy: true });\n if (process.env.NODE_ENV !== 'production' && watcher && debugOptions) {\n watcher.onTrack = debugOptions.onTrack;\n watcher.onTrigger = debugOptions.onTrigger;\n }\n var ref = {\n // some libs rely on the presence effect for checking computed refs\n // from normal refs, but the implementation doesn't matter\n effect: watcher,\n get value() {\n if (watcher) {\n if (watcher.dirty) {\n watcher.evaluate();\n }\n if (Dep.target) {\n if (process.env.NODE_ENV !== 'production' && Dep.target.onTrack) {\n Dep.target.onTrack({\n effect: Dep.target,\n target: ref,\n type: \"get\" /* TrackOpTypes.GET */,\n key: 'value'\n });\n }\n watcher.depend();\n }\n return watcher.value;\n }\n else {\n return getter();\n }\n },\n set value(newVal) {\n setter(newVal);\n }\n };\n def(ref, RefFlag, true);\n def(ref, \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */, onlyGetter);\n return ref;\n}\n\nvar WATCHER = \"watcher\";\nvar WATCHER_CB = \"\".concat(WATCHER, \" callback\");\nvar WATCHER_GETTER = \"\".concat(WATCHER, \" getter\");\nvar WATCHER_CLEANUP = \"\".concat(WATCHER, \" cleanup\");\n// Simple effect.\nfunction watchEffect(effect, options) {\n return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n return doWatch(effect, null, (process.env.NODE_ENV !== 'production'\n ? __assign(__assign({}, options), { flush: 'post' }) : { flush: 'post' }));\n}\nfunction watchSyncEffect(effect, options) {\n return doWatch(effect, null, (process.env.NODE_ENV !== 'production'\n ? __assign(__assign({}, options), { flush: 'sync' }) : { flush: 'sync' }));\n}\n// initial value for watchers to trigger on undefined initial values\nvar INITIAL_WATCHER_VALUE = {};\n// implementation\nfunction watch(source, cb, options) {\n if (process.env.NODE_ENV !== 'production' && typeof cb !== 'function') {\n warn(\"`watch(fn, options?)` signature has been moved to a separate API. \" +\n \"Use `watchEffect(fn, options?)` instead. `watch` now only \" +\n \"supports `watch(source, cb, options?) signature.\");\n }\n return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, _a) {\n var _b = _a === void 0 ? emptyObject : _a, immediate = _b.immediate, deep = _b.deep, _c = _b.flush, flush = _c === void 0 ? 'pre' : _c, onTrack = _b.onTrack, onTrigger = _b.onTrigger;\n if (process.env.NODE_ENV !== 'production' && !cb) {\n if (immediate !== undefined) {\n warn(\"watch() \\\"immediate\\\" option is only respected when using the \" +\n \"watch(source, callback, options?) signature.\");\n }\n if (deep !== undefined) {\n warn(\"watch() \\\"deep\\\" option is only respected when using the \" +\n \"watch(source, callback, options?) signature.\");\n }\n }\n var warnInvalidSource = function (s) {\n warn(\"Invalid watch source: \".concat(s, \". A watch source can only be a getter/effect \") +\n \"function, a ref, a reactive object, or an array of these types.\");\n };\n var instance = currentInstance;\n var call = function (fn, type, args) {\n if (args === void 0) { args = null; }\n return invokeWithErrorHandling(fn, null, args, instance, type);\n };\n var getter;\n var forceTrigger = false;\n var isMultiSource = false;\n if (isRef(source)) {\n getter = function () { return source.value; };\n forceTrigger = isShallow(source);\n }\n else if (isReactive(source)) {\n getter = function () {\n source.__ob__.dep.depend();\n return source;\n };\n deep = true;\n }\n else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); });\n getter = function () {\n return source.map(function (s) {\n if (isRef(s)) {\n return s.value;\n }\n else if (isReactive(s)) {\n return traverse(s);\n }\n else if (isFunction(s)) {\n return call(s, WATCHER_GETTER);\n }\n else {\n process.env.NODE_ENV !== 'production' && warnInvalidSource(s);\n }\n });\n };\n }\n else if (isFunction(source)) {\n if (cb) {\n // getter with cb\n getter = function () { return call(source, WATCHER_GETTER); };\n }\n else {\n // no cb -> simple effect\n getter = function () {\n if (instance && instance._isDestroyed) {\n return;\n }\n if (cleanup) {\n cleanup();\n }\n return call(source, WATCHER, [onCleanup]);\n };\n }\n }\n else {\n getter = noop;\n process.env.NODE_ENV !== 'production' && warnInvalidSource(source);\n }\n if (cb && deep) {\n var baseGetter_1 = getter;\n getter = function () { return traverse(baseGetter_1()); };\n }\n var cleanup;\n var onCleanup = function (fn) {\n cleanup = watcher.onStop = function () {\n call(fn, WATCHER_CLEANUP);\n };\n };\n // in SSR there is no need to setup an actual effect, and it should be noop\n // unless it's eager\n if (isServerRendering()) {\n // we will also not call the invalidate callback (+ runner is not set up)\n onCleanup = noop;\n if (!cb) {\n getter();\n }\n else if (immediate) {\n call(cb, WATCHER_CB, [\n getter(),\n isMultiSource ? [] : undefined,\n onCleanup\n ]);\n }\n return noop;\n }\n var watcher = new Watcher(currentInstance, getter, noop, {\n lazy: true\n });\n watcher.noRecurse = !cb;\n var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;\n // overwrite default run\n watcher.run = function () {\n if (!watcher.active) {\n return;\n }\n if (cb) {\n // watch(source, cb)\n var newValue = watcher.get();\n if (deep ||\n forceTrigger ||\n (isMultiSource\n ? newValue.some(function (v, i) {\n return hasChanged(v, oldValue[i]);\n })\n : hasChanged(newValue, oldValue))) {\n // cleanup before running cb again\n if (cleanup) {\n cleanup();\n }\n call(cb, WATCHER_CB, [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,\n onCleanup\n ]);\n oldValue = newValue;\n }\n }\n else {\n // watchEffect\n watcher.get();\n }\n };\n if (flush === 'sync') {\n watcher.update = watcher.run;\n }\n else if (flush === 'post') {\n watcher.post = true;\n watcher.update = function () { return queueWatcher(watcher); };\n }\n else {\n // pre\n watcher.update = function () {\n if (instance && instance === currentInstance && !instance._isMounted) {\n // pre-watcher triggered before\n var buffer = instance._preWatchers || (instance._preWatchers = []);\n if (buffer.indexOf(watcher) < 0)\n buffer.push(watcher);\n }\n else {\n queueWatcher(watcher);\n }\n };\n }\n if (process.env.NODE_ENV !== 'production') {\n watcher.onTrack = onTrack;\n watcher.onTrigger = onTrigger;\n }\n // initial run\n if (cb) {\n if (immediate) {\n watcher.run();\n }\n else {\n oldValue = watcher.get();\n }\n }\n else if (flush === 'post' && instance) {\n instance.$once('hook:mounted', function () { return watcher.get(); });\n }\n else {\n watcher.get();\n }\n return function () {\n watcher.teardown();\n };\n}\n\nvar activeEffectScope;\nvar EffectScope = /** @class */ (function () {\n function EffectScope(detached) {\n if (detached === void 0) { detached = false; }\n this.detached = detached;\n /**\n * @internal\n */\n this.active = true;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this.parent = activeEffectScope;\n if (!detached && activeEffectScope) {\n this.index =\n (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\n }\n }\n EffectScope.prototype.run = function (fn) {\n if (this.active) {\n var currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n }\n finally {\n activeEffectScope = currentEffectScope;\n }\n }\n else if (process.env.NODE_ENV !== 'production') {\n warn(\"cannot run an inactive effect scope.\");\n }\n };\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n EffectScope.prototype.on = function () {\n activeEffectScope = this;\n };\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n EffectScope.prototype.off = function () {\n activeEffectScope = this.parent;\n };\n EffectScope.prototype.stop = function (fromParent) {\n if (this.active) {\n var i = void 0, l = void 0;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].teardown();\n }\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n }\n // nested scope, dereference from parent to avoid memory leaks\n if (!this.detached && this.parent && !fromParent) {\n // optimized O(1) removal\n var last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = undefined;\n this.active = false;\n }\n };\n return EffectScope;\n}());\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\n/**\n * @internal\n */\nfunction recordEffectScope(effect, scope) {\n if (scope === void 0) { scope = activeEffectScope; }\n if (scope && scope.active) {\n scope.effects.push(effect);\n }\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n }\n else if (process.env.NODE_ENV !== 'production') {\n warn(\"onScopeDispose() is called when there is no active effect scope\" +\n \" to be associated with.\");\n }\n}\n\nfunction provide(key, value) {\n if (!currentInstance) {\n if (process.env.NODE_ENV !== 'production') {\n warn(\"provide() can only be used inside setup().\");\n }\n }\n else {\n // TS doesn't allow symbol as index type\n resolveProvided(currentInstance)[key] = value;\n }\n}\nfunction resolveProvided(vm) {\n // by default an instance inherits its parent's provides object\n // but when it needs to provide values of its own, it creates its\n // own provides object using parent provides object as prototype.\n // this way in `inject` we can simply look up injections from direct\n // parent and let the prototype chain do the work.\n var existing = vm._provided;\n var parentProvides = vm.$parent && vm.$parent._provided;\n if (parentProvides === existing) {\n return (vm._provided = Object.create(parentProvides));\n }\n else {\n return existing;\n }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory) {\n if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; }\n // fallback to `currentRenderingInstance` so that this can be called in\n // a functional component\n var instance = currentInstance;\n if (instance) {\n // #2400\n // to support `app.use` plugins,\n // fallback to appContext's `provides` if the instance is at root\n var provides = instance.$parent && instance.$parent._provided;\n if (provides && key in provides) {\n // TS doesn't allow symbol as index type\n return provides[key];\n }\n else if (arguments.length > 1) {\n return treatDefaultAsFactory && isFunction(defaultValue)\n ? defaultValue.call(instance)\n : defaultValue;\n }\n else if (process.env.NODE_ENV !== 'production') {\n warn(\"injection \\\"\".concat(String(key), \"\\\" not found.\"));\n }\n }\n else if (process.env.NODE_ENV !== 'production') {\n warn(\"inject() can only be used inside setup() or functional components.\");\n }\n}\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once,\n capture: capture,\n passive: passive\n };\n});\nfunction createFnInvoker(fns, vm) {\n function invoker() {\n var fns = invoker.fns;\n if (isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n invokeWithErrorHandling(cloned[i], null, arguments, vm, \"v-on handler\");\n }\n }\n else {\n // return handler return value for single handlers\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\");\n }\n }\n invoker.fns = fns;\n return invoker;\n}\nfunction updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {\n var name, cur, old, event;\n for (name in on) {\n cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n if (isUndef(cur)) {\n process.env.NODE_ENV !== 'production' &&\n warn(\"Invalid handler for event \\\"\".concat(event.name, \"\\\": got \") + String(cur), vm);\n }\n else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur, vm);\n }\n if (isTrue(event.once)) {\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n }\n add(event.name, cur, event.capture, event.passive, event.params);\n }\n else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove(event.name, oldOn[name], event.capture);\n }\n }\n}\n\nfunction mergeVNodeHook(def, hookKey, hook) {\n if (def instanceof VNode) {\n def = def.data.hook || (def.data.hook = {});\n }\n var invoker;\n var oldHook = def[hookKey];\n function wrappedHook() {\n hook.apply(this, arguments);\n // important: remove merged hook to ensure it's called only once\n // and prevent memory leak\n remove$2(invoker.fns, wrappedHook);\n }\n if (isUndef(oldHook)) {\n // no existing hook\n invoker = createFnInvoker([wrappedHook]);\n }\n else {\n /* istanbul ignore if */\n if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n // already a merged invoker\n invoker = oldHook;\n invoker.fns.push(wrappedHook);\n }\n else {\n // existing plain hook\n invoker = createFnInvoker([oldHook, wrappedHook]);\n }\n }\n invoker.merged = true;\n def[hookKey] = invoker;\n}\n\nfunction extractPropsFromVNodeData(data, Ctor, tag) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n return;\n }\n var res = {};\n var attrs = data.attrs, props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n if (process.env.NODE_ENV !== 'production') {\n var keyInLowerCase = key.toLowerCase();\n if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {\n tip(\"Prop \\\"\".concat(keyInLowerCase, \"\\\" is passed to component \") +\n \"\".concat(formatComponentName(\n // @ts-expect-error tag is string\n tag || Ctor), \", but the declared prop name is\") +\n \" \\\"\".concat(key, \"\\\". \") +\n \"Note that HTML attributes are case-insensitive and camelCased \" +\n \"props need to use their kebab-case equivalents when using in-DOM \" +\n \"templates. You should probably use \\\"\".concat(altKey, \"\\\" instead of \\\"\").concat(key, \"\\\".\"));\n }\n }\n checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n }\n }\n return res;\n}\nfunction checkProp(res, hash, key, altKey, preserve) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true;\n }\n else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true;\n }\n }\n return false;\n}\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array. There are\n// two cases where extra normalization is needed:\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren(children) {\n for (var i = 0; i < children.length; i++) {\n if (isArray(children[i])) {\n return Array.prototype.concat.apply([], children);\n }\n }\n return children;\n}\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g.