From 41483919e641220bbcadf52929c74d3c0c01069a Mon Sep 17 00:00:00 2001 From: Ina Kostova Date: Thu, 18 Apr 2019 10:31:46 +0300 Subject: [PATCH 01/14] Adding Toolbar v1.0 --- .gitignore | 6 + CONTRIBUTING.md | 27 + LICENSE | 190 + README.md | 79 +- app/apps/app.ts | 162 + .../org.finos.fdc3.demo-manifest-schema.json | 33 + ....finos.fdc3.demo.host-manifest-schema.json | 22 + app/apps/types.ts | 51 + app/config/index.ts | 26 + app/config/providers.config.ts | 20 + app/config/toolbar.config.ts | 33 + app/config/window-options.config.ts | 32 + app/main.ts | 61 + app/preload.ts | 21 + app/providers/providerFactory.ts | 27 + app/providers/rest-app-provider.ts | 104 + app/providers/types/app-provider.ts | 23 + app/providers/types/providerConfig.ts | 24 + app/shared.ts | 22 + app/toolbar.ts | 159 + app/types/client-api.ts | 415 + app/types/interface.ts | 250 + build-app.bat | 1 + build-ui.bat | 2 + package-lock.json | 2169 +++ package.json | 30 + start.bat | 1 + toolbar-ui-angular/.editorconfig | 13 + toolbar-ui-angular/.gitignore | 44 + toolbar-ui-angular/README.md | 50 + toolbar-ui-angular/angular.json | 141 + toolbar-ui-angular/package-lock.json | 11681 ++++++++++++++++ toolbar-ui-angular/package.json | 62 + toolbar-ui-angular/preload.js | 21 + .../app/app-config/app-config.component.html | 15 + .../app-config/app-config.component.spec.ts | 77 + .../app/app-config/app-config.component.ts | 84 + .../src/app/app-routing.module.ts | 38 + toolbar-ui-angular/src/app/app.component.html | 12 + .../src/app/app.component.spec.ts | 82 + toolbar-ui-angular/src/app/app.component.ts | 32 + toolbar-ui-angular/src/app/app.module.ts | 72 + toolbar-ui-angular/src/app/app.ts | 72 + .../list-of-apps/list-of-apps.component.html | 51 + .../list-of-apps.component.spec.ts | 112 + .../list-of-apps/list-of-apps.component.ts | 198 + .../src/app/logs/logs.component.html | 17 + .../src/app/logs/logs.component.spec.ts | 53 + .../src/app/logs/logs.component.ts | 25 + .../src/app/services/helper.service.spec.ts | 80 + .../src/app/services/helper.service.ts | 84 + .../app/services/initialize.service.spec.ts | 89 + .../src/app/services/initialize.service.ts | 204 + .../app-directory-form-modal.component.html | 79 + ...app-directory-form-modal.component.spec.ts | 294 + .../app-directory-form-modal.component.ts | 254 + .../logs/settings-logs.component.html | 84 + .../logs/settings-logs.component.spec.ts | 145 + .../settings/logs/settings-logs.component.ts | 216 + .../src/app/settings/settings.component.html | 85 + .../app/settings/settings.component.spec.ts | 120 + .../src/app/settings/settings.component.ts | 160 + .../modal-dialog/modal-dialog.component.html | 27 + .../modal-dialog.component.spec.ts | 56 + .../modal-dialog/modal-dialog.component.ts | 42 + .../src/app/toolbar/toolbar.component.html | 28 + .../src/app/toolbar/toolbar.component.spec.ts | 109 + .../src/app/toolbar/toolbar.component.ts | 106 + toolbar-ui-angular/src/assets/app-config.html | 66 + .../src/assets/icons/browser.svg | 52 + .../src/assets/icons/default.svg | 108 + toolbar-ui-angular/src/assets/icons/exe.svg | 51 + .../src/assets/icons/fdc3.png.icns | Bin 0 -> 46887 bytes .../src/assets/icons/fdc3.png.ico | Bin 0 -> 370070 bytes .../src/assets/icons/glue42.png | Bin 0 -> 703 bytes toolbar-ui-angular/src/assets/logs.html | 109 + .../src/assets/provider-config.html | 59 + .../src/assets/styles/bootstrap.min.css | 11032 +++++++++++++++ toolbar-ui-angular/src/browserslist | 11 + .../src/environments/environment.prod.ts | 20 + .../src/environments/environment.ts | 33 + toolbar-ui-angular/src/index.html | 26 + toolbar-ui-angular/src/karma.conf.js | 31 + toolbar-ui-angular/src/main.ts | 29 + toolbar-ui-angular/src/mock-data/apps.json | 107 + toolbar-ui-angular/src/mock-data/logs.json | 78 + .../src/mock-data/providers.json | 16 + toolbar-ui-angular/src/polyfills.ts | 63 + toolbar-ui-angular/src/styles.scss | 196 + toolbar-ui-angular/src/test.ts | 20 + toolbar-ui-angular/src/tsconfig.app.json | 11 + toolbar-ui-angular/src/tsconfig.spec.json | 18 + toolbar-ui-angular/src/tslint.json | 17 + toolbar-ui-angular/tsconfig.json | 22 + toolbar-ui-angular/tslint.json | 75 + tsconfig.json | 19 + tslint.json | 21 + 97 files changed, 31492 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 app/apps/app.ts create mode 100644 app/apps/schemas/org.finos.fdc3.demo-manifest-schema.json create mode 100644 app/apps/schemas/org.finos.fdc3.demo.host-manifest-schema.json create mode 100644 app/apps/types.ts create mode 100644 app/config/index.ts create mode 100644 app/config/providers.config.ts create mode 100644 app/config/toolbar.config.ts create mode 100644 app/config/window-options.config.ts create mode 100644 app/main.ts create mode 100644 app/preload.ts create mode 100644 app/providers/providerFactory.ts create mode 100644 app/providers/rest-app-provider.ts create mode 100644 app/providers/types/app-provider.ts create mode 100644 app/providers/types/providerConfig.ts create mode 100644 app/shared.ts create mode 100644 app/toolbar.ts create mode 100644 app/types/client-api.ts create mode 100644 app/types/interface.ts create mode 100644 build-app.bat create mode 100644 build-ui.bat create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 start.bat create mode 100644 toolbar-ui-angular/.editorconfig create mode 100644 toolbar-ui-angular/.gitignore create mode 100644 toolbar-ui-angular/README.md create mode 100644 toolbar-ui-angular/angular.json create mode 100644 toolbar-ui-angular/package-lock.json create mode 100644 toolbar-ui-angular/package.json create mode 100644 toolbar-ui-angular/preload.js create mode 100644 toolbar-ui-angular/src/app/app-config/app-config.component.html create mode 100644 toolbar-ui-angular/src/app/app-config/app-config.component.spec.ts create mode 100644 toolbar-ui-angular/src/app/app-config/app-config.component.ts create mode 100644 toolbar-ui-angular/src/app/app-routing.module.ts create mode 100644 toolbar-ui-angular/src/app/app.component.html create mode 100644 toolbar-ui-angular/src/app/app.component.spec.ts create mode 100644 toolbar-ui-angular/src/app/app.component.ts create mode 100644 toolbar-ui-angular/src/app/app.module.ts create mode 100644 toolbar-ui-angular/src/app/app.ts create mode 100644 toolbar-ui-angular/src/app/list-of-apps/list-of-apps.component.html create mode 100644 toolbar-ui-angular/src/app/list-of-apps/list-of-apps.component.spec.ts create mode 100644 toolbar-ui-angular/src/app/list-of-apps/list-of-apps.component.ts create mode 100644 toolbar-ui-angular/src/app/logs/logs.component.html create mode 100644 toolbar-ui-angular/src/app/logs/logs.component.spec.ts create mode 100644 toolbar-ui-angular/src/app/logs/logs.component.ts create mode 100644 toolbar-ui-angular/src/app/services/helper.service.spec.ts create mode 100644 toolbar-ui-angular/src/app/services/helper.service.ts create mode 100644 toolbar-ui-angular/src/app/services/initialize.service.spec.ts create mode 100644 toolbar-ui-angular/src/app/services/initialize.service.ts create mode 100644 toolbar-ui-angular/src/app/settings/app-directory-form-modal/app-directory-form-modal.component.html create mode 100644 toolbar-ui-angular/src/app/settings/app-directory-form-modal/app-directory-form-modal.component.spec.ts create mode 100644 toolbar-ui-angular/src/app/settings/app-directory-form-modal/app-directory-form-modal.component.ts create mode 100644 toolbar-ui-angular/src/app/settings/logs/settings-logs.component.html create mode 100644 toolbar-ui-angular/src/app/settings/logs/settings-logs.component.spec.ts create mode 100644 toolbar-ui-angular/src/app/settings/logs/settings-logs.component.ts create mode 100644 toolbar-ui-angular/src/app/settings/settings.component.html create mode 100644 toolbar-ui-angular/src/app/settings/settings.component.spec.ts create mode 100644 toolbar-ui-angular/src/app/settings/settings.component.ts create mode 100644 toolbar-ui-angular/src/app/shared/modal-dialog/modal-dialog.component.html create mode 100644 toolbar-ui-angular/src/app/shared/modal-dialog/modal-dialog.component.spec.ts create mode 100644 toolbar-ui-angular/src/app/shared/modal-dialog/modal-dialog.component.ts create mode 100644 toolbar-ui-angular/src/app/toolbar/toolbar.component.html create mode 100644 toolbar-ui-angular/src/app/toolbar/toolbar.component.spec.ts create mode 100644 toolbar-ui-angular/src/app/toolbar/toolbar.component.ts create mode 100644 toolbar-ui-angular/src/assets/app-config.html create mode 100644 toolbar-ui-angular/src/assets/icons/browser.svg create mode 100644 toolbar-ui-angular/src/assets/icons/default.svg create mode 100644 toolbar-ui-angular/src/assets/icons/exe.svg create mode 100644 toolbar-ui-angular/src/assets/icons/fdc3.png.icns create mode 100644 toolbar-ui-angular/src/assets/icons/fdc3.png.ico create mode 100644 toolbar-ui-angular/src/assets/icons/glue42.png create mode 100644 toolbar-ui-angular/src/assets/logs.html create mode 100644 toolbar-ui-angular/src/assets/provider-config.html create mode 100644 toolbar-ui-angular/src/assets/styles/bootstrap.min.css create mode 100644 toolbar-ui-angular/src/browserslist create mode 100644 toolbar-ui-angular/src/environments/environment.prod.ts create mode 100644 toolbar-ui-angular/src/environments/environment.ts create mode 100644 toolbar-ui-angular/src/index.html create mode 100644 toolbar-ui-angular/src/karma.conf.js create mode 100644 toolbar-ui-angular/src/main.ts create mode 100644 toolbar-ui-angular/src/mock-data/apps.json create mode 100644 toolbar-ui-angular/src/mock-data/logs.json create mode 100644 toolbar-ui-angular/src/mock-data/providers.json create mode 100644 toolbar-ui-angular/src/polyfills.ts create mode 100644 toolbar-ui-angular/src/styles.scss create mode 100644 toolbar-ui-angular/src/test.ts create mode 100644 toolbar-ui-angular/src/tsconfig.app.json create mode 100644 toolbar-ui-angular/src/tsconfig.spec.json create mode 100644 toolbar-ui-angular/src/tslint.json create mode 100644 toolbar-ui-angular/tsconfig.json create mode 100644 toolbar-ui-angular/tslint.json create mode 100644 tsconfig.json create mode 100644 tslint.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e7e3f57 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.vscode +.DS_Store +/node_modules/ +/app-js/ +/dist +/release-builds/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..98c3d6e --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,27 @@ +# Contributing to Desktop Interop API Specification +Thanks for your interest in the project! Here is some basic information about how to contribute. + +# Contributor License Agreement (CLA) +All contributions to [Fintech Open Source Foundation](https://www.finos.org/) projects must be made under a [Contributor License Agreement](https://finosfoundation.atlassian.net/wiki/spaces/FINOS/pages/75530375/Legal+Requirements) that must also be met. + +Pull requests (PRs) submitted to the project cannot be accepted until you have a CLA in place with the Foundation. + +# Contributing Issues + +## Raising an Issue +* Please raise issues to the project mailing list _(TBA)_. Some people from project teams currently can't access build-in github issue tracker from corporate network. +* Please also tag the new issue with either "Bug" or "Enhancement". + +# Contributing Pull Requests (Code & Docs) +To make review of PRs easier, please: + + * For major enhancements before working on any PR, please review the proposal with the project group via mailing list _(TBA)_ to align it with roadmap. + * Please make sure your PRs will merge cleanly - PRs that don't are unlikely to be accepted. + * For code contributions, follow the general structure of the existing code. + * For documentation contributions, follow the general structure, language, and tone of the existing docs. + * Keep PRs small and cohesive - if you have multiple contributions, please submit them as independent PRs. + * Minimize non-functional changes (e.g. whitespace shenanigans). + * Ensure all new files include a header comment block containing the [Apache License v2.0 and your copyright information](http://www.apache.org/licenses/LICENSE-2.0#apply). + * If necessary (e.g. due to 3rd party dependency licensing requirements), update the NOTICE file with any required attribution or other notices + * If your contribution includes source code for any Category B-licensed dependencies, please get a pre-approval from project leads via mailing list and then add an appropriate notice to this CONTRIBUTING file + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9ebefce --- /dev/null +++ b/LICENSE @@ -0,0 +1,190 @@ + 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 + + Copyright © 2014-2019 Tick42 OOD + + 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/README.md b/README.md index 052cb07..c39ffeb 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,84 @@ +![](./resources/fdc3.png) + # App Directory Demo Launcher aka Toolbar -This is a demo/POC Toolbar, it connects to one or more FINOS FDC3 compatible application directories that implement the FDC3 App Directory REST API https://fdc3.finos.org/appd-spec. The Toolbar will show all the defined applications. +This Toolbar, contributed by Tick42, connects to one or more FINOS FDC3 compatible application directories that implement the FDC3 App Directory REST API https://fdc3.finos.org/appd-spec. The Toolbar will show all the defined applications, and will attempt to launch applications that are defined by a supported Manifest type. -The Toolbar can also show a set of favourite application as Icons in the main Toolbar. +The Toolbar can also show a set of favourite application as Icons in the main Toolbar. The Toolbar is primarily aimed at developers working with FINOS FDC3, it provides easy access to the application definitions and to the log files to allow developers to explore the services. The Toolbar is delivered as a standalone Electron application. + +## Getting Started + +### Prerequisites + +You will need node.js & npm as well as a globally installed electron (npm i -g electron). + +### Steps to run project + +- run build-ui.bat +- run build-app.bat +- run start.bat + +### Steps to run project manually + +- Clone the project + +#### Build UI + +- ```cd``` to /toolbar-ui-angular +- ```npm i``` +- ```npm run build``` + +#### Install dependencies + +- ```cd``` to the project's root dir +- ```npm i``` + +#### Run dev version + +- ```npm run build``` +- ```electron app-js/main.js``` + +#### Run prod version + +- ```npm run package:all``` +- Inside the release-builds folder locate the built version for your OS + +## Description + +### Application providers + +The list Application providers aka (Application Directories) is defined in the Toolbar, using the Settings UI. + +Application provider details are held in local storage. + +#### AppD PoC provider + +In order to use the Glue42 FINOS FDC3 App Directroy toolbar, you need to have AppD services to connect to. If you do not have access to services, you can run your own instances using the [appd-poc](https://github.com/FDC3/appd-poc), a Java server. Steps to run: + +- Clone the project + +- Build the appd-poc + +- Launch the appd-poc + +- Register a user with the appd-poc + +- Configure ```app/config/providers.config.ts``` with your e-mail and password for the appd-poc + +- Inside of ```app/providers/appd-poc-apps``` you can find example application definitions that you can configure and provide to the appd-poc inside of ```json/apps``` + +- On Startup the Toolbar connects to all the configured application providers. The Toolbar can start applications with manifestType `org.finos.fdc3.demo` which is used to start non-FDC3 applications such as Desktop Executables and Browsers. + +##### [org.finos.fdc3.demo](./app/apps/schemas/org.finos.fdc3.demo-manifest-schema.json) + +Support for starting application of manifestType `org.finos.fdc3.demo.host` is scheduled for version 1.1. This manifestType is used for applications that are started via the FDC3 API. + +##### [org.finos.fdc3.demo.host](./app/apps/schemas/org.finos.fdc3.demo.host-manifest-schema.json) + +##### Other manifest types + +The Toolbar can easily be extended to support more manifest types, by extendinf the code in ```app/apps/app.ts```. diff --git a/app/apps/app.ts b/app/apps/app.ts new file mode 100644 index 0000000..bc5b2ac --- /dev/null +++ b/app/apps/app.ts @@ -0,0 +1,162 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import { shell } from 'electron'; +import { execFile } from 'child_process'; +import logStream from '../shared'; +import { AppAPI, Image, Icon, Intent } from './types'; + +export default class App implements AppAPI { + public appId: string; + public name: string; + public version: string; + public title: string; + public tooltip: string; + public description: string; + public images: Image[]; + public contactEmail: string; + public supportEmail: string; + public publisher: string; + public icons: Icon[]; + public customConfig: any[]; + public intents: Intent[]; + public manifestType: string; + public manifest: string; + + constructor(appConfig: AppAPI) { + if (!appConfig.appId || !appConfig.name || !appConfig.manifest || !appConfig.manifestType) { + const errorMsg = 'App is missing appId/name/manifest/manifestType field.'; + + logStream.next([errorMsg, 'error', 'Toolbar']); + throw new Error(errorMsg); + } + + this.appId = appConfig.appId; + this.name = appConfig.name; + this.version = appConfig.version || ''; + this.title = appConfig.title || ''; + this.tooltip = appConfig.tooltip || ''; + this.description = appConfig.description || ''; + this.images = appConfig.images || []; + this.contactEmail = appConfig.contactEmail || ''; + this.supportEmail = appConfig.supportEmail || ''; + this.publisher = appConfig.publisher || ''; + this.icons = appConfig.icons || []; + this.customConfig = appConfig.customConfig || []; + this.intents = appConfig.intents || []; + this.manifestType = appConfig.manifestType; + this.manifest = appConfig.manifest; + } + + public async start() { + logStream.next([`Starting app "${this.title || this.name}".`, 'info', 'Toolbar']); + + let manifestJSON: any; // The manifestType determines the shape of the parsed manifest. + let errorMsg: string; + + try { + manifestJSON = JSON.parse(this.manifest); + } catch (error) { + errorMsg = `Failed to parse "${this.title || this.name}"'s manifest.`; + + logStream.next([errorMsg, 'error', 'Toolbar']); + throw new Error(errorMsg); + } + + /* The toolbar is currently aware of the following manifest types: + 'org.finos.fdc3.demo' - covers browser/exe and therefore is platform/host independent + 'org.finos.fdc3.demo.host' - covers platform/host specific applications + */ + switch (this.manifestType) { + case 'org.finos.fdc3.demo': + + this.handleOrgFinosFdc3Demo(manifestJSON); + break; + + default: + + await this.handleOrgFinosFdc3DemoHost(manifestJSON); + break; + } + } + + private handleOrgFinosFdc3Demo(manifestJSON: any) { + let errorMsg: string; + + switch (manifestJSON.type) { + case 'browser': + const appUrl = manifestJSON.url; + + if (typeof appUrl === 'undefined') { + errorMsg = `Browser application "${this.title || this.name}" is missing url field inside the manifest.`; + + logStream.next([errorMsg, 'error', 'Toolbar']); + throw new Error(errorMsg); + } + + shell.openExternal(appUrl); + break; + case 'exe': + const exePath = manifestJSON.exePath; + + if (typeof exePath === 'undefined') { + errorMsg = `Exe application "${this.title || this.name}" is missing exePath field inside the manifest.`; + + logStream.next([errorMsg, 'error', 'Toolbar']); + throw new Error(errorMsg); + } + + execFile(exePath); + break; + default: + errorMsg = `Unknown type "${manifestJSON.type}" application "${this.title || this.name}" with manifest type "org.finos.fdc3.demo".`; + + logStream.next([errorMsg, 'error', 'Toolbar']); + throw new Error(errorMsg); + } + } + + private async handleOrgFinosFdc3DemoHost(manifestJSON: any) { + let errorMsg: string; + + const fdc3Impl = (global as any).fdc3Impl; + + if (!fdc3Impl) { + errorMsg = `No fdc3Impl implementation provided. Application "${this.title || this.name}" with manifest type "org.finos.fdc3.demo.host" can't be started.`; + + logStream.next([errorMsg, 'error', 'Toolbar']); + throw new Error(errorMsg); + } + + switch (manifestJSON.type) { + case 'host': + const wait = (ms: number, msg?: string) => new Promise((_, reject) => setTimeout(() => reject(msg), ms)); + + try { + await Promise.race([fdc3Impl.open(this.name), wait(3000)]); + } catch (error) { + logStream.next([`Failed to open application "${this.title || this.name}". ${error.msg || error}`, 'error', 'Toolbar']); + } + break; + default: + errorMsg = `Unknown type "${manifestJSON.type}" application "${this.title || this.name}" with manifest type "org.finos.fdc3.demo,host".`; + + logStream.next([errorMsg, 'error', 'Toolbar']); + throw new Error(errorMsg); + } + } +} diff --git a/app/apps/schemas/org.finos.fdc3.demo-manifest-schema.json b/app/apps/schemas/org.finos.fdc3.demo-manifest-schema.json new file mode 100644 index 0000000..241b232 --- /dev/null +++ b/app/apps/schemas/org.finos.fdc3.demo-manifest-schema.json @@ -0,0 +1,33 @@ +{ + "id": "/OrgFinosFdc3Demo", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "OrgFinosFdc3Demo", + "oneOf": [ + { "$ref": "#/definitions/BrowserDetails" }, + { "$ref": "#/definitions/ExeDetails" } + ], + "definitions": { + "BrowserDetails": { + "type": "object", + "properties": { + "type": { "const": "browser" }, + "url": { + "type": "string" + } + }, + "required": ["type", "url"], + "additionalProperties": true + }, + "ExeDetails": { + "type": "object", + "properties": { + "type": { "const": "exe" }, + "exePath": { + "type": "string" + } + }, + "required": ["type", "exePath"], + "additionalProperties": true + } + } +} diff --git a/app/apps/schemas/org.finos.fdc3.demo.host-manifest-schema.json b/app/apps/schemas/org.finos.fdc3.demo.host-manifest-schema.json new file mode 100644 index 0000000..15a7d9a --- /dev/null +++ b/app/apps/schemas/org.finos.fdc3.demo.host-manifest-schema.json @@ -0,0 +1,22 @@ +{ + "id": "/OrgFinosFdc3DemoHost", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "OrgFinosFdc3DemoHost", + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "hostType": { + "type": "string" + }, + "hostName": { + "type": "string" + }, + "hostManifest": { + "$ref": "/GlueDesktopApplicationSchema" + } + }, + "required": ["type", "hostType", "hostName", "hostManifest"], + "additionalProperties": true +} diff --git a/app/apps/types.ts b/app/apps/types.ts new file mode 100644 index 0000000..be21743 --- /dev/null +++ b/app/apps/types.ts @@ -0,0 +1,51 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +export interface AppAPI { + appId: string; + name: string; + version: string; + title: string; + tooltip: string; + description: string; + images: Image[]; + contactEmail: string; + supportEmail: string; + publisher: string; + icons: Icon[]; + customConfig: NameValuePair[]; + intents: Intent[]; + manifestType: string; + manifest: string; +} + +export interface Image { + url: string; +} + +export interface Icon { + icon: string; +} + +export interface Intent { + name: string; +} + +export interface NameValuePair { + key: string; + value: string; +} diff --git a/app/config/index.ts b/app/config/index.ts new file mode 100644 index 0000000..670a1c8 --- /dev/null +++ b/app/config/index.ts @@ -0,0 +1,26 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import providerConfigs from './providers.config'; +import toolbarConfig from './toolbar.config'; +import windowConfig from './window-options.config'; + +export { + providerConfigs, + toolbarConfig, + windowConfig, +}; diff --git a/app/config/providers.config.ts b/app/config/providers.config.ts new file mode 100644 index 0000000..bcbb8a7 --- /dev/null +++ b/app/config/providers.config.ts @@ -0,0 +1,20 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +const providersConfig: any[] = []; + +export default providersConfig; diff --git a/app/config/toolbar.config.ts b/app/config/toolbar.config.ts new file mode 100644 index 0000000..466a0d4 --- /dev/null +++ b/app/config/toolbar.config.ts @@ -0,0 +1,33 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +// Add FDC3 API Implementation package name +const FDC3_API_IMPLEMENTATION = ''; + +// Add FINOS Interop API Implementation package name +const FINOS_INTEROP_API_IMPLEMENTATION = ''; + +// Add Interop Platforms configs +const FDC3_API_PLATFORMS: any[] = []; + +const toolbarConfig = { + FDC3_API_IMPLEMENTATION, + FINOS_INTEROP_API_IMPLEMENTATION, + FDC3_API_PLATFORMS, +}; + +export default toolbarConfig; diff --git a/app/config/window-options.config.ts b/app/config/window-options.config.ts new file mode 100644 index 0000000..7583932 --- /dev/null +++ b/app/config/window-options.config.ts @@ -0,0 +1,32 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import * as path from 'path'; +import { BrowserWindowConstructorOptions } from 'electron'; + +const windowConfig: BrowserWindowConstructorOptions = { + show: false, + webPreferences: { + preload: path.join(__dirname, '..', 'preload.js') + }, + height: 100, + width: 800, + minHeight: 100, + minWidth: 500 +}; + +export default windowConfig; diff --git a/app/main.ts b/app/main.ts new file mode 100644 index 0000000..0d6f853 --- /dev/null +++ b/app/main.ts @@ -0,0 +1,61 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import logStream from './shared'; +import { Toolbar } from './toolbar'; +import { providerConfigs, toolbarConfig } from './config'; +import ProviderConfig from './providers/types/providerConfig'; +import ProviderFactory from './providers/providerFactory'; +import InteropPlatformAPI from './types/client-api'; +import { Fdc3APIImplementation } from './types/interface'; + +const providerFactory = new ProviderFactory(); + +const appProviders = providerConfigs.map((providerConfig: ProviderConfig) => { + const provider = providerFactory.create(providerConfig); + logStream.next([`Will add provider "${providerConfig.name}" with URL "${providerConfig.apiUrl}"`, 'info', 'Toolbar']); + return provider; +}); + +let InteropPlatform: (interopPlatformConfig: any) => InteropPlatformAPI; +let fdc3Impl: (interopPlatforms: InteropPlatformAPI[]) => Promise; +let fdc3ImplReady: Promise; + +try { + InteropPlatform = require(toolbarConfig.FINOS_INTEROP_API_IMPLEMENTATION); +} catch (error) { + logStream.next([`Failed to load ${toolbarConfig.FINOS_INTEROP_API_IMPLEMENTATION} implementation.`, 'error', 'Toolbar']); +} + +const interopPlatforms: InteropPlatformAPI[] = []; // https://github.com/finos-plexus/finos-plexus.github.io +toolbarConfig.FDC3_API_PLATFORMS.forEach((fdc3APIPlatform) => { + // Create Interop Platform and push it to the interopPlatforms list + const typeSpecificInteropPlatform: InteropPlatformAPI = InteropPlatform(fdc3APIPlatform); + interopPlatforms.push(typeSpecificInteropPlatform); +}); + +try { + fdc3Impl = require(toolbarConfig.FDC3_API_IMPLEMENTATION); + fdc3ImplReady = fdc3Impl(interopPlatforms); +} catch (error) { + logStream.next([`Failed to load ${toolbarConfig.FDC3_API_IMPLEMENTATION} implementation.`, 'error', 'Toolbar']); +} + +const glue42DemoToolbar = new Toolbar(); +glue42DemoToolbar.start(appProviders, fdc3ImplReady); +(global as any).glue42DemoToolbar = glue42DemoToolbar; +(global as any).logStream = logStream; diff --git a/app/preload.ts b/app/preload.ts new file mode 100644 index 0000000..98a5e3f --- /dev/null +++ b/app/preload.ts @@ -0,0 +1,21 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import { remote } from 'electron'; + +(window as any).glue42DemoToolbar = remote.getGlobal('glue42DemoToolbar'); +(window as any).logStream = remote.getGlobal('logStream'); diff --git a/app/providers/providerFactory.ts b/app/providers/providerFactory.ts new file mode 100644 index 0000000..a38ef24 --- /dev/null +++ b/app/providers/providerFactory.ts @@ -0,0 +1,27 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import RestAppProvider from './rest-app-provider'; +import ProviderConfig from './types/providerConfig'; + +class ProviderFactory { + public create(providerConfig: ProviderConfig) { + return new RestAppProvider(providerConfig); + } +} + +export default ProviderFactory; diff --git a/app/providers/rest-app-provider.ts b/app/providers/rest-app-provider.ts new file mode 100644 index 0000000..115272e --- /dev/null +++ b/app/providers/rest-app-provider.ts @@ -0,0 +1,104 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import AppProvider from './types/app-provider'; +import ProviderConfig from './types/providerConfig'; +import App from '../apps/app'; +import { AppAPI } from '../apps/types'; +import fetch from 'node-fetch'; +import logStream from '../shared'; + +export default class RestAppProvider implements AppProvider { + public name: string; + public apiUrl: string; + public email: string; + public password: string; + public authUrl: string; + + constructor(providerConfig: ProviderConfig) { + if (!providerConfig.name || !providerConfig.apiUrl) { + const errorMsg = 'App provider is missing name/apiUrl field.'; + + logStream.next([errorMsg, 'error', 'Toolbar']); + throw new Error(errorMsg); + } + + this.name = providerConfig.name; + this.apiUrl = providerConfig.apiUrl; + this.email = providerConfig.email || ''; + this.password = providerConfig.password || ''; + this.authUrl = providerConfig.authUrl || ''; + } + + public async getAuthToken() { + const body = { + email: this.email, + password: this.password, + }; + + const postOptions = { + method: 'POST', + headers: { + 'Content-Type': 'application/json; charset=utf-8', + }, + body: JSON.stringify(body), + }; + + const res = await fetch(this.authUrl, postOptions); + const resJSON = await res.json(); + + return resJSON.Authorization; + } + + public async getApps(): Promise { + let headers = {}; + + if (this.authUrl !== '') { + let authToken; + + try { + authToken = await this.getAuthToken(); + } catch (error) { + logStream.next([error.msg || error, 'error', 'Toolbar']); + throw new Error(error.msg || error); + } + + headers = { + Authorization: `Bearer ${authToken}`, + }; + } + + const getOptions = { + method: 'GET', + headers, + }; + + let resJSON; + + try { + const res = await fetch(`${this.apiUrl}/apps/search`, getOptions); + resJSON = await res.json(); + } catch (error) { + logStream.next([error.msg || error, 'error', 'Toolbar']); + throw new Error(error.msg || error); + } + + const apps = resJSON.applications.map((app: AppAPI) => new App(app)); + + return apps; + } +} diff --git a/app/providers/types/app-provider.ts b/app/providers/types/app-provider.ts new file mode 100644 index 0000000..e55fc5f --- /dev/null +++ b/app/providers/types/app-provider.ts @@ -0,0 +1,23 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import App from '../../apps/app'; +import ProviderConfig from './providerConfig'; + +export default interface AppProvider extends ProviderConfig { + getApps: () => Promise; +} diff --git a/app/providers/types/providerConfig.ts b/app/providers/types/providerConfig.ts new file mode 100644 index 0000000..35603bb --- /dev/null +++ b/app/providers/types/providerConfig.ts @@ -0,0 +1,24 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +export default interface ProviderConfig { + name: string; + apiUrl: string; + email: string; + password: string; + authUrl: string; +} diff --git a/app/shared.ts b/app/shared.ts new file mode 100644 index 0000000..b73b121 --- /dev/null +++ b/app/shared.ts @@ -0,0 +1,22 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import { ReplaySubject } from '../node_modules/rxjs'; + +const logStream = new ReplaySubject(); + +export default logStream; diff --git a/app/toolbar.ts b/app/toolbar.ts new file mode 100644 index 0000000..1cead19 --- /dev/null +++ b/app/toolbar.ts @@ -0,0 +1,159 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import AppProvider from './providers/types/app-provider'; +import ProviderConfig from './providers/types/providerConfig'; +import { app, BrowserWindow, BrowserWindowConstructorOptions, ipcMain } from 'electron'; +import { windowConfig } from './config'; +import * as path from 'path'; +import { BehaviorSubject } from 'rxjs'; +import logStream from './shared'; +import RestAppProvider from './providers/rest-app-provider'; +import { writeFileSync } from 'fs'; +import { Fdc3APIImplementation } from './types/interface'; + +export class Toolbar { + public toolbarWindow: BrowserWindow; + private toolbarWindowOptions: BrowserWindowConstructorOptions = windowConfig; + private toolbarWindowReady: Promise; + private providers = new BehaviorSubject([]); + + public start(providers: AppProvider[], fdc3ImplReady?: Promise) { + this.startToolbarWindow(); + this.addProviders(providers); + ipcMain.on('get-preload-path', (event: any) => { + event.returnValue = path.join(__dirname, '../toolbar-ui-angular/preload.js'); + }); + if (typeof fdc3ImplReady !== 'undefined') { + fdc3ImplReady.then((fdc3Impl) => { + (global as any).fdc3Impl = fdc3Impl; + }); + } + } + + public addProvider(provider: ProviderConfig): boolean { + if (this.validateProvider(provider)) { + const providers = this.providers.value; + providers.push(new RestAppProvider(provider)); + + return this.updateAllProviders(providers); + } else { + return false; + } + } + + public updateProvider(oldProvider: AppProvider, newProviderData: ProviderConfig): boolean { + let updatedProviderIndex; + const providers = this.providers.value; + providers.forEach((provider: AppProvider, index: number) => { + if (provider.name === oldProvider.name && provider.apiUrl === oldProvider.apiUrl) { + updatedProviderIndex = index; + } + }); + + if (this.validateProvider(newProviderData)) { + const newProvider = new RestAppProvider(newProviderData); + providers.splice(updatedProviderIndex, 1, newProvider); + return this.updateAllProviders(providers); + } else { + return false; + } + } + + public deleteProvider(deletedProvider: AppProvider): boolean { + let deletedProviderIndex; + const providers = this.providers.value; + providers.forEach((provider: AppProvider, index: number) => { + if (provider.name === deletedProvider.name && provider.apiUrl === deletedProvider.apiUrl) { + deletedProviderIndex = index; + } + }); + + if (deletedProviderIndex) { + providers.splice(deletedProviderIndex, 1); + } else { + logStream.next([`Unable to delete provider ${deletedProvider.name}`, 'error', 'Toolbar']); + } + return this.updateAllProviders(providers); + } + + private startToolbarWindow() { + this.toolbarWindowReady = new Promise((resolve) => { + app.on('ready', () => { + this.createWindow(); + resolve(); + logStream.next(['Electron ready.', 'info', 'Electron']); + }); + + app.on('window-all-closed', () => { + if (process.platform !== 'darwin') { + logStream.next(['Toolbar window closed, stopping Electron app.', 'info', 'Electron']); + app.quit(); + } + }); + + app.on('activate', () => { + if (!this.toolbarWindow) { + this.createWindow(); + } + }); + }); + } + + private createWindow() { + this.toolbarWindow = new BrowserWindow(this.toolbarWindowOptions); + this.toolbarWindow.setTitle('Tick42 Toolbar'); + this.toolbarWindow.setMenuBarVisibility(false); + this.toolbarWindow.loadURL( + `file://${path.join(__dirname, '..')}/toolbar-ui-angular/dist/toolbar-ui/index.html` + ); + this.toolbarWindow.on('ready-to-show', () => { + this.toolbarWindow.show(); + console.log(this.toolbarWindow); + logStream.next(['Toolbar window ready.', 'info', 'Toolbar']); + }); + this.toolbarWindow.webContents.on('did-finish-load', this.sendProviders.bind(this)); + } + + private addProviders(providers: AppProvider[]): void { + this.providers.next(providers); + } + + private sendProviders(): boolean { + this.toolbarWindowReady.then(() => { + this.providers.subscribe((providers) => { + this.toolbarWindow.webContents.send('providersChanged', providers); + }); + }); + + return true; + } + + private updateAllProviders(providers: AppProvider[]): boolean { + try { + writeFileSync(path.join(__dirname, 'config', 'rest-providers.config.json'), JSON.stringify(providers, null, 2)); + this.providers.next(providers); + return true; + } catch (e) { + return false; + } + } + + private validateProvider(provider: ProviderConfig): boolean { + return provider.name && provider.name.length > 0 && provider.apiUrl && provider.apiUrl.length > 0; + } +} diff --git a/app/types/client-api.ts b/app/types/client-api.ts new file mode 100644 index 0000000..1a05ec0 --- /dev/null +++ b/app/types/client-api.ts @@ -0,0 +1,415 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +/** + * Used to instantiate an InteropPeer. + * An application will typically create one InteropPlatform instance per Platform (e.g. 'Glue42', 'Plexus Interop', etc.) that it wishes + * to work with. + * This API does not discuss how instances are created. + * @todo: Consider how to deal with the authentication. Some platforms may do the user name/password prompt, it could be contained + * inside the config. + * Also the sign-on/security token that MAY be available after a successful connect() could be useful elsewhere so might belong + * in the InteropPeer.ApplicationInstance, but again that is not currently discussed. + * It is expected that as implementations are created for the API, a consensus will emerge about how to handle this and the spec + * might update. + */ +export default interface InteropPlatformAPI { + type: string; // Specifies the platform type (e.g. 'Glue42', 'Plexus Interop', etc.). + version: string; // The version of the platform. + + /** + * @param {InteropFeature} feature Identifies an interop feature. + * + * @return {boolean} Boolean indicating whether the given feature is supported. + */ + isFeatureSupported(feature: InteropFeature): boolean; + + /** + * @param {string} applicationName Name of the application participating in interop. + * @param {string} apiMetadata Publishes metadata which describes API implemented by the app + * in proto3 syntax (https://developers.google.com/protocol-buffers/docs/proto3) + * to help dev tools to build swagger-like API explorers. + * @param {MethodImplementation[]} methods Methods registered on peer creation. + * The InteropPeer can later register more methods. + * @param {StreamImplementation[]} streams Streams registered on peer creation. + * The InteropPeer can later register more streams. + * @return {Promise} The InteropPeer which represents application connection to interop platform (InteropPeerDescriptor) + * and is used to participate in the interop communication (InteropClient, InteropServer). + * Application can create as many connections as it wish, interop platform will assign + * unique id for each to distinguish them. + */ + connect( + applicationName: string, + apiMetadata?: string, + methods?: MethodImplementation[], + streams?: StreamImplementation[] + ): Promise; +} + +enum InteropFeature { + InvokeMethod = 'InvokeMethod', + SubscribeStream = 'SubscribeStream', + RegisterMethod = 'RegisterMethod', + RegisterMethodOnConnect = 'RegisterMethodOnConnect', + RegisterStream = 'RegisterStream', + RegisterStreamOnConnect = 'RegisterStreamOnConnect', + DiscoverPeers = 'DiscoverPeers', + DiscoverMethods = 'DiscoverMethods', + DiscoverStreams = 'DiscoverStreams', + ListenPeerConnected = 'ListenPeerConnected', + ListenMethodRegistered = 'ListenMethodRegistered', + ListenStreamRegistered = 'ListenStreamRegistered' +} + +interface InteropPeer extends InteropClient, InteropServer, InteropPeerDescriptor { + + connectionStatus: ConnectionStatus; // Shows the current connection status of the peer. + + /** + * @param {ConnectionStatus) => void} callback Event listener, called whenever the connection status changes (all events get + * replayed on subscription). + * @return {UnsubscribeFunction} Function used to unsubscribe the event listener. + */ + onConnectionStatusChanged( + callback: (status: ConnectionStatus) => void + ): Subscription; + + /** + * @return {Promise} Promise that resolves when the peer is disconnected. + */ + disconnect(): Promise; + + /** + * @param {(Error) => void} callback Callback which is called whenever the peer disconnected. + * Error argument might be passed in the cases disconnect caused by an error. + * @return {Subscription} Object used to unsubscribe the event listener. + */ + onDisconnected( + callback: (error?: Error) => void + ): Subscription; +} + +/** + * Specifies the Peer's connection statuses. + */ +enum ConnectionStatus { + Connecting = 'Connecting', /* A connection request has been started via a call to connect() but the connection has not + yet been completed. */ + Connected = 'Connected', // Connected to the Platform. All data should be up to date. + Disconnecting = 'Disconnecting', /* A disconnect request has been made. Methods' invocation/registration don't work, but the + disconnect has not yet been completed. */ + Disconnected = 'Disconnected', // The platform is disconnected. +} + +/** + * A container for the 'Client' functionality. + */ +interface InteropClient { + /** + * @param {string | Method} method The name of the method or the method instance to be invoked. + * @param {any} args An object containing the arguments to be used for the invocation. + * @return {Promise} Outcome of the method invocation, containing the result, caller and + * other information. + */ + invoke(method: string | Method, args?: any): Promise; + + /** + * @param {string | Stream} stream The name of the stream or the stream instance to subscribe to. + * @param {StreamObserver} observer An object which will be notified on stream events. + * @param {any} args An object containing the arguments to be used for the subscription. + * @return {Promise} StreamSubscription containing the subscription details and unsubscribe method. + */ + subscribe( + stream: string | Stream, + observer: StreamObserver, + args?: any): Promise; + + /** + * @return {Promise} List of all the peers currently participating in the interop communication. + */ + discoverPeers(): Promise; + + /** + * @return {Promise} List of all the currently registered methods. + * Can be used to discover methods. + */ + discoverMethods(): Promise; + + /** + * @return {Promise} List of all the currently registered streams. + * Can be used to discover streams. + */ + discoverStreams(): Promise; + + /** + * @param {Method) => void} callback Event listener, called whenever a method is registered by a server. + * @return {Subscription} Subscription object which can be used to unsubscribe the event listener. + */ + onMethodRegistered(callback: (method: Method) => void): Subscription; + + /** + * @param {Method) => void} callback Event listener, called whenever a method is unregistered by a server. + * @return {Subscription} Subscription object which can be used to unsubscribe the event listener. + */ + onMethodUnregistered(callback: (method: Method) => void): Subscription; + + /** + * @param {Stream) => void} callback Event listener, called whenever a stream is registered by a server. + * @return {Subscription} Subscription object which can be used to unsubscribe the event listener. + */ + onStreamRegistered(callback: (stream: Stream) => void): Subscription; + + /** + * @param {Stream) => void} callback Event listener, called whenever a stream is closed by a server. + * @return {Subscription} Subscription object which can be used to unsubscribe the event listener. + */ + onStreamUnregistered(callback: (stream: Stream) => void): Subscription; + + /** + * @param {InteropPeerDescriptor) => void} callback Event listener, called whenever a new peer is connected. + * @return {Subscription} Subscription object which can be used to unsubscribe the event listener. + */ + onPeerConnected(callback: (peer: InteropPeerDescriptor) => void): Subscription; + + /** + * @param {InteropPeerDescriptor) => void} callback Event listener, called whenever a peer is disconnected. + * @return {Subscription} Subscription object which can be used to unsubscribe the event listener. + */ + onPeerDisconnected(callback: (peer: InteropPeerDescriptor) => void): Subscription; +} + +/** + * Invocation result object returned after a successful method invocation. + */ +interface InvokeResult { + method: Method; // Identifies the method that was executed as well as the peer that registered/executed it. + arguments?: any; // An object containing the arguments used for the invocation. + result?: any; // Result of the method invocation. +} + +/** + * An InteropClient's stream subscription. + */ +interface StreamSubscription extends Subscription { + arguments?: object; // An object containing the arguments used for the subscription. + stream: Stream; // Reference to the stream that the subscription is to. +} + +/** + * A container for the 'Server' functionality. + */ +interface InteropServer { + /** + * @param {MethodImplementation} methodImplementation Method implementation, specifying the method's name, properties and invocation + * handler. + * @return {Promise} Method object containing the method's details and function to unregister the method implementation. + */ + register(methodImplementation: MethodImplementation): Promise; + + /** + * @param {StreamImplementation} streamImplementation Stream implementation, specifying the stream's name, properties and subscription + * handlers. The stream can be closed (unregistered) by calling close() on the + * ServerStream instance. + * @return {Promise} RegisteredStream object containing the stream's details and function to unregisted the stream implementation. + */ + registerStream(streamImplementation: StreamImplementation): Promise; + + /** + * Publishes metadata which describes API implemented by the app + * in proto3 syntax (https://developers.google.com/protocol-buffers/docs/proto3) + * to help dev tools to build swagger-like API explorers. + */ + publishApiMetadata(apiMetadata: string): Promise; +} + +/** + * @type Specifies an unsubscribe function used to unsubscribe event listeners. + */ +interface Subscription { + /** + * @return {Promise} Promise that resolves when the subscription successfully closed. + */ + unsubscribe(): Promise; +} + +/** + * Reference to a connected instance of a peer or launchable application. + */ +interface InteropPeerDescriptor { + isConnected: boolean; // Shows the current connection status of the peer. + applicationName: string; // The name of the application. + id: string; /* Platform specific id. + Unique for an InteropPeerInstance connected to the platform. Null for launchable app. + Some platforms may change the id following a disconnect/reconnect. */ + + /** + * Returns metadata describing API implemented by the application + * in proto3 syntax (https://developers.google.com/protocol-buffers/docs/proto3). + * Can be used by dev tools to implement swagger-like API explorers. + */ + getApiMetadata(): Promise; + + /** + * Notifies when application changed the published API metadata. + */ + onApiMetadataChanged(callback: (metadata: string) => void): void; +} + +/** + * Describes the attributes of a method. + */ +interface MethodDefinition { + name: string; // The name of the method. + acceptType?: string; // Optional property specifying the accepted object type ID for e.g. FINOS FDC3 Context, FINOS FInancial object and/or OpenFIGI. + returnType?: string; // Optional property specifying the returned object type ID for e.g. FINOS FDC3 Context, FINOS FInancial object and/or OpenFIGI. + + /** + * Hints from a method 'publisher' on how the method could be displayed in a UI. + * This is expected to dovetail with the FINOS FDC3 Intents capability. + */ + displayName?: string; // User friendly name to present the method to a user in a UI. + tooltip?: string; // Tooltip to describe the method. + intent?: MethodIntent[]; // MethodIntents that the Method satisfies, typically there will be 0 or 1. + + /** + * @param {any} context Object containing intent data. + * + * @return {Promise} Method object containing the method's details and function to unregister the method implementation. + */ + accepts?(context: any): Promise; /* Function checks whether the method can handle the given intent context. + Is handled by either Interop Platform or by the peer which registered the method. + */ +} + +/** + * A reference to a method available to be invoked, i.e. it is being offered by a server. + */ +interface Method extends MethodDefinition { + peer: InteropPeerDescriptor; // Identifies the peer that registered the method. +} + +interface RegisteredMethod extends Method { + unregister: () => Promise; +} + +type StreamDefinition = MethodDefinition; +type Stream = Method; +type RegisteredStream = RegisteredMethod; + +interface MethodHandler { + /** + * @param {any} args An object containing the arguments used for the invocation. + * @param {InteropPeerDescriptor} caller A reference to the peer that invoked the method. + * @return {Promise} Result of the method invocation, that is then sent to the client wrapped inside of + * an InvokeResult. + */ + onInvoke(args: any, caller: InteropPeerDescriptor): Promise; +} + +/** + * Defines a method including the handler that is being registered. + */ +interface MethodImplementation extends MethodDefinition, MethodHandler { +} + +interface StreamHandler { + + /** + * @param {StreamObserver} observer Observer object subscribing to the stream. + * @param {InteropPeerDescriptor} caller A reference to the peer that invoked the method. + * @param {any} args An object containing the arguments used for the subscription. + * @return {Promise} Subscription instance. Its unsubscribe method will be called + * when the caller closed subscription or disconnected. + */ + onSubscriptionRequested(observer: StreamObserver, caller: InteropPeerDescriptor, args?: any): Promise; +} + +/** + * Defines a stream including the handler that is being registered. + */ +interface StreamImplementation extends StreamDefinition, StreamHandler { +} + +/** + * Defines observer of a stream. + * + * Client (stream consumer) provides implementation of this interface to listen the called stream. + * + * Server (stream producer) receives an object implementing this interface and calls its methods + * to push new items or to complete the stream. + */ +interface StreamObserver { + + /** + * On client side this method is called for each new received item. + * + * On server side calling this method pushes new item to the stream. + * + * @param {any} data On client side: received stream item. + * On server side: item to push into the stream. + * + * @return {Promise} Client should return promise which will be resolved as soon as item is handled. + * Server receives promise which will be resolved as soon as interop platform + * accepted the new item (doesn't mean it was received by subscriber!). + * + */ + next: (data: any) => Promise; + + /** + * On client side this method is called when stream is completed. + * + * On server side calling this method completes the stream. + * Observer won't accept any further items after calling this method. + * + * @return {Promise} Client should return promise which will be resolved + * as soon as completion notification is handled. + * Server receives promise which will be resolved as soon as all the items + * are sent to the caller and stream completed. + * + */ + completed: () => Promise; + + /** + * On client side this method is called when stream is completed because of an error. + * + * On server side calling this method completes the stream with an error. + * Stream won't accept any further items after calling this method. + * + * @param {Error} error On client side: object representing error. + * On server side: error to send. + * + * @return {Promise} Client should return promise which will be resolved + * as soon as error notification is handled. + * Server receives promise which will be resolved as soon as all the items + * are sent to the caller and stream completed. + * + */ + error: (error: Error) => Promise; +} + +/** + * Typically an application that implements an Intent does it by publishing an Interop method to implement the Intent. + * This interface provides a way that Method publishers can record the Intent capabilities of each method. + * This is in addition to the Intent publishing capability allowed in application definitions such as the + * FINOS FDC3 Application definition. + */ +interface MethodIntent { + name: string; // Required. The name of the Intent. + contexts?: string; /* Optional 'context' which define when this method is able to implement the Intent. + This should be thought of as 'restrictions' on the scope of a method. + For example there might be a restriction to say the Intent can only be delivered for exchange traded equities. */ +} diff --git a/app/types/interface.ts b/app/types/interface.ts new file mode 100644 index 0000000..56b5ea5 --- /dev/null +++ b/app/types/interface.ts @@ -0,0 +1,250 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +export enum OpenError { + AppNotFound = 'AppNotFound', + ErrorOnLaunch = 'ErrorOnLaunch', + AppTimeout = 'AppTimeout', + ResolverUnavailable = 'ResolverUnavailable' +} + +export enum ResolveError { + NoAppsFound = 'NoAppsFound', + ResolverUnavailable = 'ResolverUnavailable', + ResolverTimeout = 'ResolverTimeout' +} + +export enum SendError { + SendOK = 'OK', + UnknownPlatform = 'Invalid Platform', + PlatformNotConnected = 'Platform Not connected', + PlatformError = 'Platform Error' +} + +/** + * An fdc3Access instance provides an application with access to the FDC3 services provided by one + * or more platforms. + * Usage Note. For applications running on a Platform, the Platform may provide a preinitialized + * fdc3Access instance. Applications may also instantiate their own instances which connect directly + * to the Platforms. + * + * The current FDC3 services available via fdc3Access are: + * - Application management, which covers launching and activating applications. It is expected that the + * applications available will have been read from one or more App Directory services but this is NOT a requirement. + * NB Should we include the enumerate apps here or leave that to the AppD REST API (my vote). + * - Intents, listing Intents and firing them. + * - Contexts, broadcasting 'current context' to interested applications. + * + * The definitions of Applications, Intents and Contexts follow the proposals from the various FDC3 Working groups. + * At some point in the future this interface can reference approved and (versioned) definitions from the WGs. + * In this iteration, the appropriate definitions have been copied in here to enable this to be a self contained + * proposal. + * + * Usage Note: Identity and Security are key issues to be addressed in a future iteration. + */ +export interface Fdc3APIImplementation { + /** + * Launches/links to an app by name. + * + * If a Context object is passed in, this object will be provided to the opened application via a contextListener. + * The Context argument is functionally equivalent to opening the target app with no context and broadcasting the context directly to it. + * + * If opening errors, it returns an `Error` with a string from the `OpenError` enumeration. + * + * ```javascript + * //no context + * agent.open('myApp'); + * //with context + * agent.open('myApp', context); + * ``` + */ + open(name: string, context?: Context): Promise; + + /** + * Find out more information about a particular intent by passing its name, and optionally its context. + * + * findIntent is effectively granting programmatic access to the Desktop Agent's resolver. + * A promise resolving to the intent, its metadata and metadata about the apps that registered it is returned. + * This can be used to raise the intent against a specific app. + * + * If the resolution fails, the promise will return an `Error` with a string from the `ResolveError` enumeration. + * + * ```javascript + * // I know 'StartChat' exists as a concept, and want to know more about it ... + * const appIntent = await agent.findIntent("StartChat"); + * + * // returns a single AppIntent: + * // { + * // intent: { name: "StartChat", displayName: "Chat" }, + * // apps: [{ name: "Skype" }, { name: "Symphony" }, { name: "Slack" }] + * // } + * + * // raise the intent against a particular app + * await agent.raiseIntent(appIntent.intent.name, context, appIntent.apps[0].name); + * ``` + */ + findIntent(intent: string, context?: Context): Promise; + + /** + * Find all the avalable intents for a particular context. + * + * findIntents is effectively granting programmatic access to the Desktop Agent's resolver. + * A promise resolving to all the intents, their metadata and metadata about the apps that registered it is returned, + * based on the context types the intents have registered. + * + * If the resolution fails, the promise will return an `Error` with a string from the `ResolveError` enumeration. + * + * ```javascript + * // I have a context object, and I want to know what I can do with it, hence, I look for for intents... + * const appIntents = await agent.findIntentsForContext(context); + * + * // returns for example: + * // [{ + * // intent: { name: "StartCall", displayName: "Call" }, + * // apps: [{ name: "Skype" }] + * // }, + * // { + * // intent: { name: "StartChat", displayName: "Chat" }, + * // apps: [{ name: "Skype" }, { name: "Symphony" }, { name: "Slack" }] + * // }]; + * + * // select a particular intent to raise + * const startChat = appIntents[1]; + * + * // target a particular app + * const selectedApp = startChat.apps[0]; + * + * // raise the intent, passing the given context, targeting the app + * await agent.raiseIntent(startChat.intent.name, context, selectedApp.name); + * ``` + */ + findIntentsByContext(context: Context): Promise; + + /** + * Publishes context to other apps on the desktop. + * ```javascript + * agent.broadcast(context); + * ``` + */ + broadcast(context: Context): void; + + /** + * Raises an intent to the desktop agent to resolve. + * ```javascript + * //raise an intent to start a chat with a given contact + * const intentR = await agent.findIntents("StartChat", context); + * //use the IntentResolution object to target the same chat app with a new context + * agent.raiseIntent("StartChat", newContext, intentR.source); + * ``` + */ + raiseIntent(intent: string, context: Context, target?: string): Promise; + + /** + * Adds a listener for incoming Intents from the Agent. + */ + addIntentListener(intent: string, handler: (context: Context) => void): Listener; + + /** + * Adds a listener for incoming context broadcast from the Desktop Agent. + */ + addContextListener(handler: (context: Context) => void): Listener; +} + +/** + * An interface that relates an intent to apps + */ +interface AppIntent { + intent: IntentMetadata; + apps: AppMetadata[]; +} + +/** + * Intent descriptor + */ +interface IntentMetadata { + name: string; + displayName: string; +} + +/** + * App metadata is Desktop Agent specific - but should support a name property. + */ +interface AppMetadata { + name: string; +} + +/** + * IntentResolution provides a standard format for data returned upon resolving an intent. + * ```javascript + * //resolve a "Chain" type intent + * var intentR = await agent.raiseIntent("intentName", context); + * //resolve a "Client-Service" type intent with data response + * var intentR = await agent.raiseIntent("intentName", context); + * var dataR = intentR.data; + * ``` + */ +interface IntentResolution { + source: string; + data?: object; + version: string; +} + +/** + * An FDC3 Application. + * UsageNote: Typically FDC3 applications are defined in an Application Directory and started via FDC3 + * However applications can also be started 'outside' FDC3 and announce themselves. + */ +export interface Application { + appId: string; // FDC App D unique id. or missing if empty or null then this is not an App Directory defined application + name?: string; // App name + platformName: string; // If the application runs on a Platform, the name of the Platform. + appType?: string; // FDC3 AppD application type. +} + +export interface Listener { + /** + * Unsubscribe the listener object. + */ + unsubscribe(): Promise; +} + +/** + * A context consists of one or more data items. + * A data item e.g, an instrument or a client could be described using multiple formats. + * TODO: Do all items need to be of the same type + */ +export interface Context { + items: ContextItem[]; +} + +/** + * A single context data item. + * NB A data items may be presented using multiple formats. + */ +export interface ContextItem { + itemFormat: ContextItemFormat[]; // The data items + + /** + * Return a comma separated list of all the formats used to define this data item. + */ + getFormats(): string; +} + +export interface ContextItemFormat { + format: string; // The name of the format using FDC3 Context WG format == type. + data: object; // The item data in the given format. +} diff --git a/build-app.bat b/build-app.bat new file mode 100644 index 0000000..3cd5607 --- /dev/null +++ b/build-app.bat @@ -0,0 +1 @@ +npm i && npm run build \ No newline at end of file diff --git a/build-ui.bat b/build-ui.bat new file mode 100644 index 0000000..17ad579 --- /dev/null +++ b/build-ui.bat @@ -0,0 +1,2 @@ +cd toolbar-ui-angular +npm i && npm run build \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b8af202 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2169 @@ +{ + "name": "finos-fdc3-appd-toolbar", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@iamadamjowett/angular-click-outside": { + "version": "2.10.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@iamadamjowett/angular-click-outside/-/angular-click-outside-2.10.1.tgz", + "integrity": "sha1-AcrNuYLCyGq5EtwynG8Y7FcE4zg=" + }, + "@types/node": { + "version": "8.10.24", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@types/node/-/node-8.10.24.tgz", + "integrity": "sha1-MCqPDAC9G/NkRxtmhyWGF8XUEPw=" + }, + "@types/node-fetch": { + "version": "2.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@types/node-fetch/-/node-fetch-2.1.2.tgz", + "integrity": "sha1-jF2hTXAyHkxOzV22aOP5PPbHOZ8=", + "requires": { + "@types/node": "8.10.24" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", + "dev": true + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "angular": { + "version": "1.7.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/angular/-/angular-1.7.2.tgz", + "integrity": "sha1-aHuVXb5cUz+Nc0YEYXB68ANgJR8=" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "1.9.3" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "asar": { + "version": "0.14.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/asar/-/asar-0.14.3.tgz", + "integrity": "sha1-xyqBVCpI47ykWfsbB+4rat+uJl0=", + "dev": true, + "requires": { + "chromium-pickle-js": "0.2.0", + "commander": "2.17.1", + "cuint": "0.2.2", + "glob": "6.0.4", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "mksnapshot": "0.3.1", + "tmp": "0.0.28" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "author-regex": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/author-regex/-/author-regex-1.0.0.tgz", + "integrity": "sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA=", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8=", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-js": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/base64-js/-/base64-js-1.2.0.tgz", + "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "binary": { + "version": "0.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, + "requires": { + "buffers": "0.1.1", + "chainsaw": "0.1.0" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk=", + "dev": true + }, + "bootstrap.native": { + "version": "2.0.23", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/bootstrap.native/-/bootstrap.native-2.0.23.tgz", + "integrity": "sha1-5QXJN0DbnZSZT98HWDT5klEucsE=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha1-iQ3ZDZI6hz4I4Q5f1RpX5bfM4Ow=", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "1.1.0", + "buffer-fill": "1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha1-vX3CauKXLQ7aJTvgYdupkjScGfA=", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", + "dev": true + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, + "requires": { + "traverse": "0.3.9" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.17.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/commander/-/commander-2.17.1.tgz", + "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=", + "dev": true + }, + "compare-version": { + "version": "0.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", + "dev": true, + "requires": { + "buffer-from": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cuint": { + "version": "0.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decompress-zip": { + "version": "0.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/decompress-zip/-/decompress-zip-0.3.0.tgz", + "integrity": "sha1-rjvLfjTGWHmt/nfhnDD4ZgK0vbA=", + "dev": true, + "requires": { + "binary": "0.3.0", + "graceful-fs": "4.1.11", + "mkpath": "0.1.0", + "nopt": "3.0.6", + "q": "1.5.1", + "readable-stream": "1.1.14", + "touch": "0.0.3" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw=", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/diff/-/diff-3.5.0.tgz", + "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" + } + }, + "electron": { + "version": "2.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/electron/-/electron-2.0.6.tgz", + "integrity": "sha1-jlwb0uvAj6em7pBt43U8Hs6dcwA=", + "dev": true, + "requires": { + "@types/node": "8.10.24", + "electron-download": "3.3.0", + "extract-zip": "1.6.7" + } + }, + "electron-download": { + "version": "3.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/electron-download/-/electron-download-3.3.0.tgz", + "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=", + "dev": true, + "requires": { + "debug": "2.6.9", + "fs-extra": "0.30.0", + "home-path": "1.0.6", + "minimist": "1.2.0", + "nugget": "2.0.1", + "path-exists": "2.1.0", + "rc": "1.2.8", + "semver": "5.5.0", + "sumchecker": "1.3.1" + } + }, + "electron-osx-sign": { + "version": "0.4.10", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/electron-osx-sign/-/electron-osx-sign-0.4.10.tgz", + "integrity": "sha1-vk87ibKnWh3F8eckkIGrKSnKOiY=", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "compare-version": "0.1.2", + "debug": "2.6.9", + "isbinaryfile": "3.0.3", + "minimist": "1.2.0", + "plist": "2.1.0" + } + }, + "electron-packager": { + "version": "12.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/electron-packager/-/electron-packager-12.1.1.tgz", + "integrity": "sha1-qKm4sxKrVrTmfvdA+OYCE47txuY=", + "dev": true, + "requires": { + "asar": "0.14.3", + "debug": "3.1.0", + "electron-download": "4.1.1", + "electron-osx-sign": "0.4.10", + "extract-zip": "1.6.7", + "fs-extra": "5.0.0", + "galactus": "0.2.1", + "get-package-info": "1.0.0", + "nodeify": "1.0.1", + "parse-author": "2.0.0", + "pify": "3.0.0", + "plist": "2.1.0", + "rcedit": "1.1.0", + "resolve": "1.8.1", + "sanitize-filename": "1.6.1", + "semver": "5.5.0", + "yargs-parser": "10.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "electron-download": { + "version": "4.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/electron-download/-/electron-download-4.1.1.tgz", + "integrity": "sha1-AuaVVnBcxFblIPngNVVu1aAV6+g=", + "dev": true, + "requires": { + "debug": "3.1.0", + "env-paths": "1.0.0", + "fs-extra": "4.0.3", + "minimist": "1.2.0", + "nugget": "2.0.1", + "path-exists": "3.0.0", + "rc": "1.2.8", + "semver": "5.5.0", + "sumchecker": "2.0.2" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha1-DYUhIuW8W+tFP7Ao6cDJvzY0DJQ=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.2" + } + } + } + }, + "fs-extra": { + "version": "5.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha1-QU0BEM3QZwVzTQVWUsVBEmDDGr0=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.2" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "sumchecker": { + "version": "2.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sumchecker/-/sumchecker-2.0.2.tgz", + "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=", + "dev": true, + "requires": { + "debug": "2.6.9" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + } + } + }, + "env-paths": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/env-paths/-/env-paths-1.0.0.tgz", + "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es6-promise": { + "version": "4.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha1-3EIhwrFlGHYL2MOaUtjzVvwA7Sk=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "extend": { + "version": "3.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/extend/-/extend-3.0.2.tgz", + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", + "dev": true + }, + "extract-zip": { + "version": "1.6.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/extract-zip/-/extract-zip-1.6.7.tgz", + "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "debug": "2.6.9", + "mkdirp": "0.5.1", + "yauzl": "2.4.1" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "1.2.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "flora-colossus": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/flora-colossus/-/flora-colossus-1.0.0.tgz", + "integrity": "sha1-VHKcNh7ezuAU3UQWeeGjfB13OkU=", + "dev": true, + "requires": { + "debug": "3.1.0", + "fs-extra": "4.0.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha1-DYUhIuW8W+tFP7Ao6cDJvzY0DJQ=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.2" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.19" + } + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "galactus": { + "version": "0.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/galactus/-/galactus-0.2.1.tgz", + "integrity": "sha1-y+0tIKQMH1Z5o1kI4rlBVzPnjbk=", + "dev": true, + "requires": { + "debug": "3.1.0", + "flora-colossus": "1.0.0", + "fs-extra": "4.0.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha1-DYUhIuW8W+tFP7Ao6cDJvzY0DJQ=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.2" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + } + } + }, + "get-package-info": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/get-package-info/-/get-package-info-1.0.0.tgz", + "integrity": "sha1-ZDJ5ZWPigRPNlHTbvQAFKYWkmZw=", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "debug": "2.6.9", + "lodash.get": "4.4.2", + "read-pkg-up": "2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/glob/-/glob-7.1.2.tgz", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "home-path": { + "version": "1.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/home-path/-/home-path-1.0.6.tgz", + "integrity": "sha1-1UncJGU4in+GZyQsWzFYjSmvKfw=", + "dev": true + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha1-l/I2l3vW4SVAiTD/bePuxigewEc=", + "dev": true + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.2" + } + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ini/-/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-promise": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-promise/-/is-promise-1.0.1.tgz", + "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha1-XW3vPt6/boyoyunDAYOoBLX4voA=", + "dev": true, + "requires": { + "buffer-alloc": "1.2.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha1-6u1lbsg0TxD1J8a/obbiJE3hZ9E=", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "4.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + } + }, + "mime-db": { + "version": "1.35.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha1-BWnWV0ZkkSg3CWY603mpm5DZq0c=", + "dev": true + }, + "mime-types": { + "version": "2.1.19", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha1-ceRkU3p++BwV8tudl+kT/A/2BvA=", + "dev": true, + "requires": { + "mime-db": "1.35.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "mkpath": { + "version": "0.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mkpath/-/mkpath-0.1.0.tgz", + "integrity": "sha1-dVSm+Nhxg0zJe1RisSLEwSTW3pE=", + "dev": true + }, + "mksnapshot": { + "version": "0.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mksnapshot/-/mksnapshot-0.3.1.tgz", + "integrity": "sha1-JQHAVldDbXQs6Vik/5LHfkDdN+Y=", + "dev": true, + "requires": { + "decompress-zip": "0.3.0", + "fs-extra": "0.26.7", + "request": "2.87.0" + }, + "dependencies": { + "fs-extra": { + "version": "0.26.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fs-extra/-/fs-extra-0.26.7.tgz", + "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.2" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node-fetch": { + "version": "2.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/node-fetch/-/node-fetch-2.2.0.tgz", + "integrity": "sha1-Tueb3pCSYvl3X3MeNlbQ21XO1bU=" + }, + "nodeify": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nodeify/-/nodeify-1.0.1.tgz", + "integrity": "sha1-ZKtpp7268DzhB7TwM1yHwLnpGx0=", + "dev": true, + "requires": { + "is-promise": "1.0.1", + "promise": "1.3.0" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", + "dev": true, + "requires": { + "hosted-git-info": "2.7.1", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.4" + } + }, + "nugget": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nugget/-/nugget-2.0.1.tgz", + "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", + "dev": true, + "requires": { + "debug": "2.6.9", + "minimist": "1.2.0", + "pretty-bytes": "1.0.4", + "progress-stream": "1.2.0", + "request": "2.87.0", + "single-line-log": "1.1.2", + "throttleit": "0.0.2" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-keys": { + "version": "0.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", + "dev": true, + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.3.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-author": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/parse-author/-/parse-author-2.0.0.tgz", + "integrity": "sha1-00YL8d3Q367tQtp1QkLmX7aEqB8=", + "dev": true, + "requires": { + "author-regex": "1.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.2" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "plist": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/plist/-/plist-2.1.0.tgz", + "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=", + "dev": true, + "requires": { + "base64-js": "1.2.0", + "xmlbuilder": "8.2.2", + "xmldom": "0.1.27" + } + }, + "pretty-bytes": { + "version": "1.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=", + "dev": true + }, + "progress-stream": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/progress-stream/-/progress-stream-1.2.0.tgz", + "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", + "dev": true, + "requires": { + "speedometer": "0.1.4", + "through2": "0.2.3" + } + }, + "promise": { + "version": "1.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/promise/-/promise-1.3.0.tgz", + "integrity": "sha1-5cyaTIJ45GZP/twBx9qEhCsEAXU=", + "dev": true, + "requires": { + "is-promise": "1.0.1" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/qs/-/qs-6.5.2.tgz", + "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=", + "dev": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/rc/-/rc-1.2.8.tgz", + "integrity": "sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=", + "dev": true, + "requires": { + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + } + }, + "rcedit": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/rcedit/-/rcedit-1.1.0.tgz", + "integrity": "sha1-riHCjU79146V/KtzCaXdCEkgsWo=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.87.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/request/-/request-2.87.0.tgz", + "integrity": "sha1-MvACNc0I1IK00NaNuTqCnA7VdW4=", + "dev": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.19", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" + } + }, + "resolve": { + "version": "1.8.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha1-gvHsGaQjrB+9CAsLqwa6NuhKeiY=", + "dev": true, + "requires": { + "path-parse": "1.0.6" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "rxjs": { + "version": "6.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/rxjs/-/rxjs-6.2.2.tgz", + "integrity": "sha1-63X6PBhv9SiZB9Bkg6d4hFhuHPk=", + "requires": { + "tslib": "1.9.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", + "dev": true + }, + "sanitize-filename": { + "version": "1.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sanitize-filename/-/sanitize-filename-1.6.1.tgz", + "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=", + "dev": true, + "requires": { + "truncate-utf8-bytes": "1.0.2" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/semver/-/semver-5.5.0.tgz", + "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "single-line-log": { + "version": "1.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/single-line-log/-/single-line-log-1.1.2.tgz", + "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", + "dev": true, + "requires": { + "string-width": "1.0.2" + } + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha1-BaW01xU6GVvJLDxCW2nzsqlSTII=", + "dev": true, + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha1-LHrmEFbHFKW5ubKyr30xHvXHj+k=", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha1-enzShHDMbToc/m1miG9rxDDTrIc=", + "dev": true + }, + "speedometer": { + "version": "0.1.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/speedometer/-/speedometer-0.1.4.tgz", + "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "dev": true, + "requires": { + "asn1": "0.2.4", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "sumchecker": { + "version": "1.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sumchecker/-/sumchecker-1.3.1.tgz", + "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=", + "dev": true, + "requires": { + "debug": "2.6.9", + "es6-promise": "4.2.4" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "throttleit": { + "version": "0.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/throttleit/-/throttleit-0.0.2.tgz", + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", + "dev": true + }, + "through2": { + "version": "0.2.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/through2/-/through2-0.2.3.tgz", + "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", + "dev": true, + "requires": { + "readable-stream": "1.1.14", + "xtend": "2.1.2" + } + }, + "tmp": { + "version": "0.0.28", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tmp/-/tmp-0.0.28.tgz", + "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "touch": { + "version": "0.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/touch/-/touch-0.0.3.tgz", + "integrity": "sha1-Ua7z1ElXHU8oel2Hyci0kYGg2x0=", + "dev": true, + "requires": { + "nopt": "1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + } + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha1-7GDO44rGdQY//JelwYlwV47oNlU=", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "dev": true, + "requires": { + "utf8-byte-length": "1.0.4" + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha1-1+TdeSRdhUKMTX5IIqeZF5VMooY=" + }, + "tslint": { + "version": "5.11.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tslint/-/tslint-5.11.0.tgz", + "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "builtin-modules": "1.1.1", + "chalk": "2.4.1", + "commander": "2.17.1", + "diff": "3.5.0", + "glob": "7.1.2", + "js-yaml": "3.12.0", + "minimatch": "3.0.4", + "resolve": "1.8.1", + "semver": "5.5.0", + "tslib": "1.9.3", + "tsutils": "2.29.0" + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha1-MrSIUBRnrL7dS4VJhnOggSrKC5k=", + "dev": true, + "requires": { + "tslib": "1.9.3" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "2.9.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha1-HL9h0F1rliaSROtqO85L2RTg8Aw=" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", + "dev": true + }, + "utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", + "dev": true, + "requires": { + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xmlbuilder": { + "version": "8.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/xmlbuilder/-/xmlbuilder-8.2.2.tgz", + "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=", + "dev": true + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", + "dev": true + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "requires": { + "object-keys": "0.4.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha1-cgImW4n36eny5XZeD+c1qQXtuqg=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true, + "requires": { + "fd-slicer": "1.0.1" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..59560a5 --- /dev/null +++ b/package.json @@ -0,0 +1,30 @@ +{ + "name": "finos-fdc3-appd-toolbar", + "productName": "FINOS FDC3 App Directory evaluation toolbar", + "version": "1.0.0", + "description": "A simple toolbar that can display and launch applications", + "main": "app-js/main.js", + "scripts": { + "build": "npm run tslint && tsc", + "tslint": "node_modules/.bin/tslint ./app/**/*.ts", + "package:win": "electron-packager . finos-fdc3-appd-toolbar --overwrite --platform=win32 --arch=all --icon=resources/icons/fdc3.png.ico --prune=true --out=release-builds --version-string.ProductName=\"FINOS FDC3 AppD Toolbar\"", + "package:all": "electron-packager . finos-fdc3-appd-toolbar --overwrite --platform=all --arch=all --icon=resources/icons/fdc3.png.ico --prune=true --out=release-builds --version-string.ProductName=\"FINOS FDC3 AppD Toolbar\"" + }, + "author": "Tick42", + "license": "Apache-2.0", + "dependencies": { + "@iamadamjowett/angular-click-outside": "^2.10.1", + "@types/node-fetch": "^2.1.2", + "angular": "^1.7.2", + "bootstrap.native": "^2.0.23", + "node-fetch": "^2.2.0", + "rxjs": "^6.2.2", + "typescript": "^2.9.2" + }, + "devDependencies": { + "electron": "^2.0.6", + "electron-packager": "^12.1.1", + "tslint": "^5.11.0" + }, + "optionalDependencies": {} +} diff --git a/start.bat b/start.bat new file mode 100644 index 0000000..a052def --- /dev/null +++ b/start.bat @@ -0,0 +1 @@ +electron app-js/main.js diff --git a/toolbar-ui-angular/.editorconfig b/toolbar-ui-angular/.editorconfig new file mode 100644 index 0000000..e89330a --- /dev/null +++ b/toolbar-ui-angular/.editorconfig @@ -0,0 +1,13 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/toolbar-ui-angular/.gitignore b/toolbar-ui-angular/.gitignore new file mode 100644 index 0000000..47765ad --- /dev/null +++ b/toolbar-ui-angular/.gitignore @@ -0,0 +1,44 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/out-tsc + +# dependencies +/node_modules + +# profiling files +chrome-profiler-events.json +speed-measure-plugin.json + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db diff --git a/toolbar-ui-angular/README.md b/toolbar-ui-angular/README.md new file mode 100644 index 0000000..6715794 --- /dev/null +++ b/toolbar-ui-angular/README.md @@ -0,0 +1,50 @@ +# Glue42 FINOS FDC3 AppD demo toolbar + +## Overview + +This Project, an open source contribution from Glue42, provides a UI that: +* connects to one or more FINOS FDC3 Application Directories. +* shows the applications defined in each server +* allows those applications to be launched. + +The UI is oriented towards developers who are investigating the AppD service, for example it provides easy access to view the JSon definitions of the applications and to easily view the log files. However the UI is functional and a production oriented toolbar could easily be created by removing access to some features. + +The UI shows the integration of the FDC3 AppD Services API and the FDC3 API used to launch applications. + + +### Application providers + +The Toolbar displays the available applications from AppD providers aka Application Directories that follow the [appd-api](https://github.com/FDC3/appd-api). + +The list of app providers can be managed using the Toolbar settings UI. + +### Applications + +The FINOS FDC3 Application Directory API defines applications, certain key attributes of each application are provided in common fields, including information on any Intents supported by the application. However the launch details of each application are defined in the application manifest, the manifest is either proviuded as a string, or a URL to the manifest definition. + +FINOS FDC3 does not define any manifest types, and the dettypes are expected to vary between FDC3 implementations. As an example of how manifest types could be used, the Toolbar projects defines two manifest types +* [org.finos.fdc3.demo](./app/apps/schemas/org.finos.fdc3.demo-manifest-schema.json) +Which is used to define Desktop Exe and Desktop Browser applications. These applications can be started by the Toolbar using the Electron native services. +* [org.finos.fdc3.demo.host](./app/apps/schemas/org.finos.fdc3.demo.host-manifest-schema.json) Which defines an FDC3 application i.e. an application which is started by an [Finos FDC3 API](https://github.com/FDC3/FDC3/blob/master/src/api/interface.ts) open call. The format specified here could be used to describe applications from a range of FDC3 API implementations. + +Support for the demo.host manifest is scheduled for v1.1 of the Toolbar demo. + +### Logs + +Log events can be exported as .csv file and can be opened in a separate window. + +## Build + +clone the project +* ```cd``` to /toolbar-ui-angular +* ```npm i``` +* ```npm run build``` + +OR + +* clone the project +* run build-ui.bat + +This generates a standalone Electron project. + +The built version of the project can be started using the start.bat batch file. diff --git a/toolbar-ui-angular/angular.json b/toolbar-ui-angular/angular.json new file mode 100644 index 0000000..e6037fc --- /dev/null +++ b/toolbar-ui-angular/angular.json @@ -0,0 +1,141 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "toolbar-ui": { + "root": "", + "sourceRoot": "src", + "projectType": "application", + "prefix": "app", + "schematics": {}, + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/toolbar-ui", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "src/tsconfig.app.json", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/assets/styles/bootstrap.min.css", + "src/styles.scss" + ], + "scripts": [], + "es5BrowserSupport": true + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "extractCss": true, + "namedChunks": false, + "aot": true, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + } + ] + } + } + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "toolbar-ui:build" + }, + "configurations": { + "production": { + "browserTarget": "toolbar-ui:build:production" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "toolbar-ui:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "src/tsconfig.spec.json", + "karmaConfig": "src/karma.conf.js", + "styles": [], + "scripts": [], + "assets": [ + "src/favicon.ico", + "src/assets" + ] + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "src/tsconfig.app.json", + "src/tsconfig.spec.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + } + } + }, + "toolbar-ui-e2e": { + "root": "e2e/", + "projectType": "application", + "prefix": "", + "architect": { + "e2e": { + "builder": "@angular-devkit/build-angular:protractor", + "options": { + "protractorConfig": "e2e/protractor.conf.js", + "devServerTarget": "toolbar-ui:serve" + }, + "configurations": { + "production": { + "devServerTarget": "toolbar-ui:serve:production" + } + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": "e2e/tsconfig.e2e.json", + "exclude": [ + "**/node_modules/**" + ] + } + }, + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist" + } + } + } + } + }, + "defaultProject": "toolbar-ui" +} diff --git a/toolbar-ui-angular/package-lock.json b/toolbar-ui-angular/package-lock.json new file mode 100644 index 0000000..2dcd943 --- /dev/null +++ b/toolbar-ui-angular/package-lock.json @@ -0,0 +1,11681 @@ +{ + "name": "toolbar-ui", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.13.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular-devkit/architect/-/architect-0.13.1.tgz", + "integrity": "sha1-OVl86U9y2Jvdie5WfLk3z/TBO5g=", + "dev": true, + "requires": { + "@angular-devkit/core": "7.3.1", + "rxjs": "6.3.3" + } + }, + "@angular-devkit/build-angular": { + "version": "0.13.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular-devkit/build-angular/-/build-angular-0.13.1.tgz", + "integrity": "sha1-Np/r2kjdQOR6TwB3Bk55JhKo4cE=", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.13.1", + "@angular-devkit/build-optimizer": "0.13.1", + "@angular-devkit/build-webpack": "0.13.1", + "@angular-devkit/core": "7.3.1", + "@ngtools/webpack": "7.3.1", + "ajv": "6.7.0", + "autoprefixer": "9.4.6", + "circular-dependency-plugin": "5.0.2", + "clean-css": "4.2.1", + "copy-webpack-plugin": "4.6.0", + "file-loader": "3.0.1", + "glob": "7.1.3", + "istanbul-instrumenter-loader": "3.0.1", + "karma-source-map-support": "1.3.0", + "less": "3.9.0", + "less-loader": "4.1.0", + "license-webpack-plugin": "2.1.0", + "loader-utils": "1.2.3", + "mini-css-extract-plugin": "0.5.0", + "minimatch": "3.0.4", + "node-sass": "4.11.0", + "opn": "5.4.0", + "parse5": "4.0.0", + "postcss": "7.0.14", + "postcss-import": "12.0.1", + "postcss-loader": "3.0.0", + "raw-loader": "1.0.0", + "rxjs": "6.3.3", + "sass-loader": "7.1.0", + "semver": "5.6.0", + "source-map-loader": "0.2.4", + "source-map-support": "0.5.10", + "speed-measure-webpack-plugin": "1.3.0", + "stats-webpack-plugin": "0.7.0", + "style-loader": "0.23.1", + "stylus": "0.54.5", + "stylus-loader": "3.0.2", + "terser-webpack-plugin": "1.2.2", + "tree-kill": "1.2.1", + "webpack": "4.29.0", + "webpack-dev-middleware": "3.5.1", + "webpack-dev-server": "3.1.14", + "webpack-merge": "4.2.1", + "webpack-sources": "1.3.0", + "webpack-subresource-integrity": "1.1.0-rc.6" + } + }, + "@angular-devkit/build-optimizer": { + "version": "0.13.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular-devkit/build-optimizer/-/build-optimizer-0.13.1.tgz", + "integrity": "sha1-VhUReb1kJ5GLqOD1p+WB5dqgApQ=", + "dev": true, + "requires": { + "loader-utils": "1.2.3", + "source-map": "0.5.6", + "typescript": "3.2.4", + "webpack-sources": "1.3.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "@angular-devkit/build-webpack": { + "version": "0.13.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular-devkit/build-webpack/-/build-webpack-0.13.1.tgz", + "integrity": "sha1-mNZmdlcF6Tecmy4KO2380DR6KjI=", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.13.1", + "@angular-devkit/core": "7.3.1", + "rxjs": "6.3.3" + } + }, + "@angular-devkit/core": { + "version": "7.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular-devkit/core/-/core-7.3.1.tgz", + "integrity": "sha1-2S9lRXllecq9z8KVeaLJd/epbGw=", + "dev": true, + "requires": { + "ajv": "6.7.0", + "chokidar": "2.0.4", + "fast-json-stable-stringify": "2.0.0", + "rxjs": "6.3.3", + "source-map": "0.7.3" + } + }, + "@angular-devkit/schematics": { + "version": "7.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular-devkit/schematics/-/schematics-7.3.1.tgz", + "integrity": "sha1-fccEAFuWbqbB7mLzgBIBg7t27uY=", + "dev": true, + "requires": { + "@angular-devkit/core": "7.3.1", + "rxjs": "6.3.3" + } + }, + "@angular/animations": { + "version": "7.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular/animations/-/animations-7.2.4.tgz", + "integrity": "sha1-TQoLnxTWv8OMp3NhO2FynQIENeY=", + "requires": { + "tslib": "1.9.3" + } + }, + "@angular/cli": { + "version": "7.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular/cli/-/cli-7.3.1.tgz", + "integrity": "sha1-oYrN7ITesDofrnnK5BW7yPnIf/o=", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.13.1", + "@angular-devkit/core": "7.3.1", + "@angular-devkit/schematics": "7.3.1", + "@schematics/angular": "7.3.1", + "@schematics/update": "0.13.1", + "@yarnpkg/lockfile": "1.1.0", + "ini": "1.3.5", + "inquirer": "6.2.1", + "npm-package-arg": "6.1.0", + "opn": "5.4.0", + "pacote": "9.4.0", + "semver": "5.6.0", + "symbol-observable": "1.2.0" + } + }, + "@angular/common": { + "version": "7.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular/common/-/common-7.2.4.tgz", + "integrity": "sha1-nx7VMOXcdhOiY+AVwgPq05DVAzY=", + "requires": { + "tslib": "1.9.3" + } + }, + "@angular/compiler": { + "version": "7.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular/compiler/-/compiler-7.2.4.tgz", + "integrity": "sha1-Ez65f8MWnsn/hPE06540l/o3U34=", + "requires": { + "tslib": "1.9.3" + } + }, + "@angular/compiler-cli": { + "version": "7.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular/compiler-cli/-/compiler-cli-7.2.4.tgz", + "integrity": "sha1-PeI/1fVYqFmkRMWNqxjymBycKTc=", + "dev": true, + "requires": { + "canonical-path": "1.0.0", + "chokidar": "1.7.0", + "convert-source-map": "1.6.0", + "dependency-graph": "0.7.2", + "magic-string": "0.25.2", + "minimist": "1.2.0", + "reflect-metadata": "0.1.13", + "shelljs": "0.8.3", + "source-map": "0.6.1", + "tslib": "1.9.3", + "yargs": "9.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=", + "dev": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.3" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.2.7", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.2.1" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.5", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "mem": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.5.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "9.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yargs/-/yargs-9.0.1.tgz", + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "dev": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.3", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + }, + "@angular/core": { + "version": "7.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular/core/-/core-7.2.4.tgz", + "integrity": "sha1-pshJQMjtz6NxWPZmofmcbkqXv5U=", + "requires": { + "tslib": "1.9.3" + } + }, + "@angular/forms": { + "version": "7.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular/forms/-/forms-7.2.4.tgz", + "integrity": "sha1-vonPg60W+jyBPBLkz/hdpUCc96A=", + "requires": { + "tslib": "1.9.3" + } + }, + "@angular/language-service": { + "version": "7.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular/language-service/-/language-service-7.2.4.tgz", + "integrity": "sha1-23JGAECwcEEMv/Z4QQwUL01oKvg=", + "dev": true + }, + "@angular/platform-browser": { + "version": "7.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular/platform-browser/-/platform-browser-7.2.4.tgz", + "integrity": "sha1-LPUwWHjQYg1rjALv8ArDyo28WXA=", + "requires": { + "tslib": "1.9.3" + } + }, + "@angular/platform-browser-dynamic": { + "version": "7.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.2.4.tgz", + "integrity": "sha1-JNzhuw2dq1QbOxs+2jCEpzLxG2Q=", + "requires": { + "tslib": "1.9.3" + } + }, + "@angular/router": { + "version": "7.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@angular/router/-/router-7.2.4.tgz", + "integrity": "sha1-g/GZfCpOas2pO5kbjX89rSs/kfA=", + "requires": { + "tslib": "1.9.3" + } + }, + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha1-BuKrGb21NThVWaq7W6WXKUgoAPg=", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0" + } + }, + "@babel/generator": { + "version": "7.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@babel/generator/-/generator-7.3.2.tgz", + "integrity": "sha1-//Maey8vPa0j744BvkWw1cL8ATI=", + "dev": true, + "requires": { + "@babel/types": "7.3.2", + "jsesc": "2.5.2", + "lodash": "4.17.11", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "2.5.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha1-oM6wFoX3M1XUNgwSR/WCv6/I/1M=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "7.0.0", + "@babel/template": "7.2.2", + "@babel/types": "7.3.2" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha1-g1ctQyDipGVyY3NBE8QoaLZOScM=", + "dev": true, + "requires": { + "@babel/types": "7.3.2" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", + "integrity": "sha1-Oq4oXAMRwqsJXZl7jJqUytVH2BM=", + "dev": true, + "requires": { + "@babel/types": "7.3.2" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha1-9xDDjI1Fjm3ZogGvtjf8t4HOmeQ=", + "dev": true, + "requires": { + "chalk": "2.4.2", + "esutils": "2.0.2", + "js-tokens": "4.0.0" + }, + "dependencies": { + "js-tokens": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", + "dev": true + } + } + }, + "@babel/parser": { + "version": "7.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@babel/parser/-/parser-7.3.2.tgz", + "integrity": "sha1-lc3t38OZKmyioTFRkcFnnKMsVc0=", + "dev": true + }, + "@babel/template": { + "version": "7.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@babel/template/-/template-7.2.2.tgz", + "integrity": "sha1-AFs/3w7ZbogEEzA3ng2ppwjrKQc=", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0", + "@babel/parser": "7.3.2", + "@babel/types": "7.3.2" + } + }, + "@babel/traverse": { + "version": "7.2.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@babel/traverse/-/traverse-7.2.3.tgz", + "integrity": "sha1-f/UM76nHwL0tgSMf2sEi85V3SNg=", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0", + "@babel/generator": "7.3.2", + "@babel/helper-function-name": "7.1.0", + "@babel/helper-split-export-declaration": "7.0.0", + "@babel/parser": "7.3.2", + "@babel/types": "7.3.2", + "debug": "4.1.1", + "globals": "11.11.0", + "lodash": "4.17.11" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "globals": { + "version": "11.11.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/globals/-/globals-11.11.0.tgz", + "integrity": "sha1-3Pk3V/ot5Uhvvu1xGFOK33ienC4=", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@babel/types/-/types-7.3.2.tgz", + "integrity": "sha1-Qk9b5L5jP/8z+4OrjWfkqCkPWi8=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "lodash": "4.17.11", + "to-fast-properties": "2.0.0" + }, + "dependencies": { + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + } + } + }, + "@ng-bootstrap/ng-bootstrap": { + "version": "4.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-4.0.3.tgz", + "integrity": "sha1-tQoXiTbbKKHmwh0bLSuaJs/iyd0=", + "requires": { + "tslib": "1.9.3" + } + }, + "@ngtools/webpack": { + "version": "7.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@ngtools/webpack/-/webpack-7.3.1.tgz", + "integrity": "sha1-T/aAB/1o/cJvIuGRFRgvlvtvczU=", + "dev": true, + "requires": { + "@angular-devkit/core": "7.3.1", + "enhanced-resolve": "4.1.0", + "rxjs": "6.3.3", + "tree-kill": "1.2.1", + "webpack-sources": "1.3.0" + } + }, + "@schematics/angular": { + "version": "7.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@schematics/angular/-/angular-7.3.1.tgz", + "integrity": "sha1-b81wBCEPqTBTEMMQnAhN9cVSF3Y=", + "dev": true, + "requires": { + "@angular-devkit/core": "7.3.1", + "@angular-devkit/schematics": "7.3.1", + "typescript": "3.2.4" + } + }, + "@schematics/update": { + "version": "0.13.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@schematics/update/-/update-0.13.1.tgz", + "integrity": "sha1-SBR1ruGLSpRyoGUSsuTWQpr2gjE=", + "dev": true, + "requires": { + "@angular-devkit/core": "7.3.1", + "@angular-devkit/schematics": "7.3.1", + "@yarnpkg/lockfile": "1.1.0", + "ini": "1.3.5", + "pacote": "9.4.0", + "rxjs": "6.3.3", + "semver": "5.6.0", + "semver-intersect": "1.4.0" + } + }, + "@types/electron": { + "version": "1.6.10", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@types/electron/-/electron-1.6.10.tgz", + "integrity": "sha1-foeIjtOIh2fMpo6SdywsjqRryHM=", + "dev": true, + "requires": { + "electron": "4.0.4" + } + }, + "@types/jasmine": { + "version": "2.8.16", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@types/jasmine/-/jasmine-2.8.16.tgz", + "integrity": "sha1-pssksRSdZSk71haSNQABSDjhTn0=", + "dev": true + }, + "@types/jasminewd2": { + "version": "2.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@types/jasminewd2/-/jasminewd2-2.0.6.tgz", + "integrity": "sha1-L1eo2YdabJ7zKKFL0HC6FKBVrDk=", + "dev": true, + "requires": { + "@types/jasmine": "2.8.16" + } + }, + "@types/node": { + "version": "8.9.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@types/node/-/node-8.9.5.tgz", + "integrity": "sha1-FiuGS8cL4Hfm2yErMidUkXkp6XY=", + "dev": true + }, + "@types/q": { + "version": "0.0.32", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@types/q/-/q-0.0.32.tgz", + "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", + "dev": true + }, + "@types/selenium-webdriver": { + "version": "3.0.14", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@types/selenium-webdriver/-/selenium-webdriver-3.0.14.tgz", + "integrity": "sha1-CyCiNw5rG4MiycPfyqQJ5sfAwKk=", + "dev": true + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha1-AHiDYGP/rxdBI0m7o2QIfgrALsk=", + "dev": true + }, + "@types/webpack-sources": { + "version": "0.1.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@types/webpack-sources/-/webpack-sources-0.1.5.tgz", + "integrity": "sha1-vkfBD3g9PW7+FHH/fwQmEb1GSpI=", + "dev": true, + "requires": { + "@types/node": "8.9.5", + "@types/source-list-map": "0.1.2", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "@webassemblyjs/ast": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/ast/-/ast-1.7.11.tgz", + "integrity": "sha1-uYhYLK+7Kwlei1VlJvMMkNBXys4=", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", + "integrity": "sha1-pp8K9lAuuaPARVVbGmEp09Py4xM=", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", + "integrity": "sha1-x7a7gQX4QDlRGis5zklPGTgYoyo=", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", + "integrity": "sha1-MSLUjcxslFbtmC3r4WyPNxAd85s=", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", + "integrity": "sha1-z48QbnRmYqDaKb3vY1/NPRJINks=", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.7.11" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", + "integrity": "sha1-3ziIKmJAgNA/dQP5Pj8XrFrAEYE=", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", + "integrity": "sha1-2HTXIuUeYqwgJHaTXWScgC+g4gk=", + "dev": true + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", + "integrity": "sha1-3ZoegX8cLrEFtM8QEwk8ufPJywY=", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", + "integrity": "sha1-nJrEHs+fvP/8lvbSZ14t4zgR5oo=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", + "integrity": "sha1-yVg562N1ejGICq7HtlEtQZGsZAs=", + "dev": true, + "requires": { + "@xtuc/ieee754": "1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", + "integrity": "sha1-1yZ6HunEWU/T9+NymIGOxlaH22M=", + "dev": true, + "requires": { + "@xtuc/long": "4.2.1" + } + }, + "@webassemblyjs/utf8": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", + "integrity": "sha1-Btchjqn9yUpnk6qSIIFg2z0m7oI=", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", + "integrity": "sha1-jHTKR01PlR0B266b1wgU7iKoIAU=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/helper-wasm-section": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-opt": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "@webassemblyjs/wast-printer": "1.7.11" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", + "integrity": "sha1-m7upQvIjdWhqb7dZr816ycRdoag=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", + "integrity": "sha1-szHo5874+OLwB9QsOjagWAp9bKc=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", + "integrity": "sha1-bj0g+mo1GfawhO+Tka1YIR77Cho=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", + "integrity": "sha1-Jb0RdWLKjAAnIP+BFu+QctnKhpw=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/floating-point-hex-parser": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-code-frame": "1.7.11", + "@webassemblyjs/helper-fsm": "1.7.11", + "@xtuc/long": "4.2.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.7.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", + "integrity": "sha1-xCRbbeJCy1CizJUBdP2/ZceNeBM=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11", + "@xtuc/long": "4.2.1" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@xtuc/long/-/long-4.2.1.tgz", + "integrity": "sha1-XIXWYvdvodNFdXZsXc1mFavNMNg=", + "dev": true + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha1-53qX+9NFt22DJF7c0X05OxtB+zE=", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha1-MgjB8I06TZkmGrZPkjArwV4RHKA=", + "dev": true, + "requires": { + "jsonparse": "1.3.1", + "through": "2.3.8" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", + "dev": true + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "2.1.21", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "6.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/acorn/-/acorn-6.1.0.tgz", + "integrity": "sha1-sKO+MXUsl6D3ATxfSQO3GgXbaBg=", + "dev": true + }, + "acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha1-SCIQFAWCo2uDw+NC4c/ryqkkCUg=", + "dev": true + }, + "adm-zip": { + "version": "0.4.13", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/adm-zip/-/adm-zip-0.4.13.tgz", + "integrity": "sha1-WX4vjMNnIVHhMH0+lc3bx1ZyMUo=", + "dev": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "agent-base": { + "version": "4.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha1-2J5ZmfeXh1Z0wH2H8mD8Qeg+jKk=", + "dev": true, + "requires": { + "es6-promisify": "5.0.0" + } + }, + "agentkeepalive": { + "version": "3.5.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha1-oROSTdP6JKC8O3gQjEUMKr7gD2c=", + "dev": true, + "requires": { + "humanize-ms": "1.2.1" + } + }, + "ajv": { + "version": "6.7.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ajv/-/ajv-6.7.0.tgz", + "integrity": "sha1-4857s3LWV3uxg58d/fy/WtKUjZY=", + "dev": true, + "requires": { + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=", + "dev": true + }, + "ajv-keywords": { + "version": "3.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha1-S4Mee1MUFafMUYzUBOc/YZPGNJ0=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha1-V9NbhoboUeLMBMQD8cACA5dqGBM=", + "dev": true + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s=", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "1.9.3" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "requires": { + "micromatch": "3.1.10", + "normalize-path": "2.1.1" + } + }, + "app-root-path": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/app-root-path/-/app-root-path-2.1.0.tgz", + "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=", + "dev": true + }, + "append-transform": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha1-BGpSrlgqIovXL1is++KWfGeHWas=", + "dev": true, + "requires": { + "default-require-extensions": "2.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha1-SzXClE8GKov82mZBB2A1D+nd/CE=", + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=", + "dev": true + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha1-O7xCdd1YTMGxCAm4nU6LY6aednU=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true, + "optional": true + }, + "asar": { + "version": "0.14.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/asar/-/asar-0.14.6.tgz", + "integrity": "sha1-Dlb/f62XRwhFORw6K4aQt8q+9tg=", + "dev": true, + "requires": { + "chromium-pickle-js": "0.2.0", + "commander": "2.17.1", + "cuint": "0.2.2", + "glob": "6.0.4", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "mksnapshot": "0.3.4", + "tmp": "0.0.28" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "tmp": { + "version": "0.0.28", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tmp/-/tmp-0.0.28.tgz", + "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + } + } + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "2.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/async/-/async-2.6.1.tgz", + "integrity": "sha1-skWiPKcZMAROxT+kaqAKPofGphA=", + "dev": true, + "requires": { + "lodash": "4.17.11" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true, + "optional": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha1-ePrtjD0HSrgfIrTphdeehzj3IPg=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/atob/-/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", + "dev": true + }, + "author-regex": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/author-regex/-/author-regex-1.0.0.tgz", + "integrity": "sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA=", + "dev": true + }, + "autoprefixer": { + "version": "9.4.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/autoprefixer/-/autoprefixer-9.4.6.tgz", + "integrity": "sha1-Cs4nXjOzfeFrCaVUfb/nOpjB1EY=", + "dev": true, + "requires": { + "browserslist": "4.4.1", + "caniuse-lite": "1.0.30000936", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8=", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.11", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.6.4", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.11" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.11" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.11", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/base/-/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM=", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=", + "dev": true + }, + "binary": { + "version": "0.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, + "requires": { + "buffers": "0.1.1", + "chainsaw": "0.1.0" + } + }, + "binary-extensions": { + "version": "1.13.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/binary-extensions/-/binary-extensions-1.13.0.tgz", + "integrity": "sha1-lSPgATBqMkRLkHQj8d4hZCIvarE=", + "dev": true + }, + "bindings": { + "version": "1.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/bindings/-/bindings-1.2.1.tgz", + "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=", + "dev": true, + "optional": true + }, + "blob": { + "version": "0.0.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/blob/-/blob-0.0.5.tgz", + "integrity": "sha1-1oDu7yX4zZGtUz9bAe7UjmTK9oM=", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "optional": true, + "requires": { + "inherits": "2.0.3" + } + }, + "blocking-proxy": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/blocking-proxy/-/blocking-proxy-1.0.1.tgz", + "integrity": "sha1-gdb9H+E6TA1pV99/kbdemNrEDLI=", + "dev": true, + "requires": { + "minimist": "1.2.0" + } + }, + "bluebird": { + "version": "3.5.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha1-fQHG+WFsmlGrD4xUmnnf5uwz76c=", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=", + "dev": true + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "1.6.16" + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "2.1.2", + "deep-equal": "1.0.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.2.3", + "multicast-dns-service-types": "1.1.0" + } + }, + "bootstrap": { + "version": "4.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/bootstrap/-/bootstrap-4.3.0.tgz", + "integrity": "sha1-JVnMuNRUJqxsVNsj6z0cn0JX+iI=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/braces/-/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", + "dev": true, + "requires": { + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.6" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.1", + "inherits": "2.0.3", + "parse-asn1": "5.1.3" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", + "dev": true, + "requires": { + "pako": "1.0.8" + } + }, + "browserslist": { + "version": "4.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/browserslist/-/browserslist-4.4.1.tgz", + "integrity": "sha1-QugolUtrKaelPjUid75ClHimkGI=", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000936", + "electron-to-chromium": "1.3.113", + "node-releases": "1.1.7" + } + }, + "browserstack": { + "version": "1.5.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/browserstack/-/browserstack-1.5.2.tgz", + "integrity": "sha1-F9i7dhJ6HMDqQWQk34DSGPgDZz8=", + "dev": true, + "requires": { + "https-proxy-agent": "2.2.1" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.3.0", + "ieee754": "1.1.12", + "isarray": "1.0.0" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha1-iQ3ZDZI6hz4I4Q5f1RpX5bfM4Ow=", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "1.1.0", + "buffer-fill": "1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha1-vX3CauKXLQ7aJTvgYdupkjScGfA=", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true + }, + "bufferutil": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/bufferutil/-/bufferutil-1.1.0.tgz", + "integrity": "sha1-P5a+d6f4ZS/2nvKfHKvIuJ9/2XI=", + "dev": true, + "optional": true, + "requires": { + "bindings": "1.2.1", + "nan": "1.8.4" + }, + "dependencies": { + "nan": { + "version": "1.8.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nan/-/nan-1.8.4.tgz", + "integrity": "sha1-PHa1OC6rM+RLdY0oE8qdkuk0LzQ=", + "dev": true, + "optional": true + } + } + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "10.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha1-ZFI2eZnv+dQYiu/ZoU6dfGomNGA=", + "dev": true, + "requires": { + "bluebird": "3.5.3", + "chownr": "1.1.1", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "lru-cache": "4.1.5", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "5.3.0", + "unique-filename": "1.1.1", + "y18n": "4.0.0" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + } + }, + "callback-registry": { + "version": "2.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/callback-registry/-/callback-registry-2.4.0.tgz", + "integrity": "sha1-wJTQVMrp6lrtYJrtQkK0GTEPkMM=", + "dev": true + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } + }, + "caniuse-lite": { + "version": "1.0.30000936", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/caniuse-lite/-/caniuse-lite-1.0.30000936.tgz", + "integrity": "sha1-XTOxGHY5iL9yG5uK1DbQQA5KEWs=", + "dev": true + }, + "canonical-path": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/canonical-path/-/canonical-path-1.0.0.tgz", + "integrity": "sha1-/LRwwjlY3vhQgYVr56hukE8YDR0=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, + "requires": { + "traverse": "0.3.9" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=", + "dev": true + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha1-NW/04rDo5D4yLRijckYLvPOszSY=", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.2.7", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "lodash.debounce": "4.0.8", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.2.1", + "upath": "1.1.0" + } + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha1-VHJri4//TfBTxCGH6AH7RBLfFJQ=", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", + "integrity": "sha1-Rakb0sIMlBHwljtarrmhuV4JzEg=", + "dev": true, + "requires": { + "tslib": "1.9.3" + } + }, + "chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "circular-dependency-plugin": { + "version": "5.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/circular-dependency-plugin/-/circular-dependency-plugin-5.0.2.tgz", + "integrity": "sha1-2haMCzfntDVj+5+RLBwAfCEzie8=", + "dev": true + }, + "circular-json": { + "version": "0.5.9", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/circular-json/-/circular-json-0.5.9.tgz", + "integrity": "sha1-kydjroj0996teg0JyKUaR0OlOx0=", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "clean-css": { + "version": "4.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha1-LUEe92uFabbQyEBo2r6FsKpeXBc=", + "dev": true, + "requires": { + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-deep": { + "version": "2.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/clone-deep/-/clone-deep-2.0.2.tgz", + "integrity": "sha1-ANs6Hhc2VnMNEYjD1qztbX6pdxM=", + "dev": true, + "requires": { + "for-own": "1.0.0", + "is-plain-object": "2.0.4", + "kind-of": "6.0.2", + "shallow-clone": "1.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codelyzer": { + "version": "4.5.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/codelyzer/-/codelyzer-4.5.0.tgz", + "integrity": "sha1-pl3e7soolGUyU6ib+iKRGP+fWbE=", + "dev": true, + "requires": { + "app-root-path": "2.1.0", + "css-selector-tokenizer": "0.7.1", + "cssauron": "1.4.0", + "semver-dsl": "1.0.1", + "source-map": "0.5.7", + "sprintf-js": "1.1.2" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha1-2hdlJiv4wPVxdJ8q1sJjACB65nM=", + "dev": true + } + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combine-lists": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "dev": true, + "requires": { + "lodash": "4.17.11" + } + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha1-LR0kMXr7ir6V1tLAsHtXgTU52Cg=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.17.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/commander/-/commander-2.17.1.tgz", + "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compare-version": { + "version": "0.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=", + "dev": true + }, + "compare-versions": { + "version": "3.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/compare-versions/-/compare-versions-3.4.0.tgz", + "integrity": "sha1-4HR99cnLfwVNbT3D4dvERPnpKyY=", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compressible": { + "version": "2.0.15", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/compressible/-/compressible-2.0.15.tgz", + "integrity": "sha1-hXqasKfloH2Ng37UP+Le//ZP4hI=", + "dev": true, + "requires": { + "mime-db": "1.37.0" + } + }, + "compression": { + "version": "1.7.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/compression/-/compression-1.7.3.tgz", + "integrity": "sha1-J+DhdqryYPfywoE8PkQK258Zk9s=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "bytes": "3.0.0", + "compressible": "2.0.15", + "debug": "2.6.9", + "on-headers": "1.0.1", + "safe-buffer": "5.1.2", + "vary": "1.1.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", + "dev": true, + "requires": { + "buffer-from": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" + } + }, + "connect": { + "version": "3.6.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "1.3.2", + "utils-merge": "1.0.1" + }, + "dependencies": { + "finalhandler": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", + "dev": true + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha1-UbU3qMQ+DwTewZk7/83VBOdYrCA=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "run-queue": "1.0.3" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "4.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz", + "integrity": "sha1-5/QN2KaEd9QF3Rt6hUquMksVi64=", + "dev": true, + "requires": { + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "globby": "7.1.1", + "is-glob": "4.0.0", + "loader-utils": "1.2.3", + "minimatch": "3.0.4", + "p-limit": "1.3.0", + "serialize-javascript": "1.6.1" + } + }, + "core-js": { + "version": "2.6.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/core-js/-/core-js-2.6.4.tgz", + "integrity": "sha1-uIl8BixNdp3TCgrFxzl2xH+S6g0=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha1-dgORVJWAu9LfHlYrwXexPCkJctw=", + "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.12.1", + "parse-json": "4.0.0", + "require-from-string": "2.0.2" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "1.3.2", + "json-parse-better-errors": "1.0.2" + } + } + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.1" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "4.1.5", + "which": "1.3.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", + "dev": true, + "requires": { + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.17", + "public-encrypt": "4.0.3", + "randombytes": "2.0.6", + "randomfill": "1.0.4" + } + }, + "css-parse": { + "version": "1.7.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/css-parse/-/css-parse-1.7.0.tgz", + "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.7.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha1-oXcnGovKUBkXL0+JH8bu2cv2jV0=", + "dev": true, + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.2", + "regexpu-core": "1.0.0" + } + }, + "cssauron": { + "version": "1.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cuint": { + "version": "0.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "date-format": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/date-format/-/date-format-1.2.0.tgz", + "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", + "dev": true + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "decompress-zip": { + "version": "0.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/decompress-zip/-/decompress-zip-0.3.0.tgz", + "integrity": "sha1-rjvLfjTGWHmt/nfhnDD4ZgK0vbA=", + "dev": true, + "requires": { + "binary": "0.3.0", + "graceful-fs": "4.1.15", + "mkpath": "0.1.0", + "nopt": "3.0.6", + "q": "1.4.1", + "readable-stream": "1.1.14", + "touch": "0.0.3" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw=", + "dev": true + }, + "default-gateway": { + "version": "2.7.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/default-gateway/-/default-gateway-2.7.2.tgz", + "integrity": "sha1-t+8znl4CSwRUZ69APVA0jbRkLQ8=", + "dev": true, + "requires": { + "execa": "0.10.0", + "ip-regex": "2.1.0" + } + }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "dev": true, + "requires": { + "strip-bom": "3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "p-map": "1.2.0", + "pify": "3.0.0", + "rimraf": "2.6.3" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.3", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "dependency-graph": { + "version": "0.7.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/dependency-graph/-/dependency-graph-0.7.2.tgz", + "integrity": "sha1-kdud5utyaZIJ2IrqTB/VIhysHEk=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=", + "dev": true + }, + "di": { + "version": "0.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/diff/-/diff-3.5.0.tgz", + "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha1-+gnwaUFTyJGLGLoN6vrpR2n8UMQ=", + "dev": true, + "requires": { + "path-type": "3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo=", + "dev": true, + "requires": { + "ip": "1.1.5", + "safe-buffer": "5.1.2" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "1.1.1" + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "1.0.1", + "ent": "2.2.0", + "extend": "3.0.2", + "void-elements": "2.0.1" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "stream-shift": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron": { + "version": "4.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/electron/-/electron-4.0.4.tgz", + "integrity": "sha1-Y44yzL6d7REkw+bbuqHhbTfDIBk=", + "dev": true, + "requires": { + "@types/node": "10.12.25", + "electron-download": "4.1.1", + "extract-zip": "1.6.7" + }, + "dependencies": { + "@types/node": { + "version": "10.12.25", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/@types/node/-/node-10.12.25.tgz", + "integrity": "sha1-DQGn3WEn3mDYYezkplCWMEKrtTg=", + "dev": true + } + } + }, + "electron-download": { + "version": "4.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/electron-download/-/electron-download-4.1.1.tgz", + "integrity": "sha1-AuaVVnBcxFblIPngNVVu1aAV6+g=", + "dev": true, + "requires": { + "debug": "3.2.6", + "env-paths": "1.0.0", + "fs-extra": "4.0.3", + "minimist": "1.2.0", + "nugget": "2.0.1", + "path-exists": "3.0.0", + "rc": "1.2.8", + "semver": "5.6.0", + "sumchecker": "2.0.2" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + } + } + }, + "electron-notarize": { + "version": "0.0.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/electron-notarize/-/electron-notarize-0.0.5.tgz", + "integrity": "sha1-2elcdjpq+FPOFtMd3nLXPLJbBwM=", + "dev": true, + "requires": { + "debug": "4.1.1", + "fs-extra": "7.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15", + "jsonfile": "4.0.0", + "universalify": "0.1.2" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + } + } + }, + "electron-osx-sign": { + "version": "0.4.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/electron-osx-sign/-/electron-osx-sign-0.4.11.tgz", + "integrity": "sha1-g3dzL+eyB5afJktnWC7kcCnOCS8=", + "dev": true, + "requires": { + "bluebird": "3.5.3", + "compare-version": "0.1.2", + "debug": "2.6.9", + "isbinaryfile": "3.0.3", + "minimist": "1.2.0", + "plist": "3.0.1" + } + }, + "electron-packager": { + "version": "13.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/electron-packager/-/electron-packager-13.0.1.tgz", + "integrity": "sha1-EmtpeqIAbY5d+eso+qMDthZ7CNQ=", + "dev": true, + "requires": { + "asar": "0.14.6", + "debug": "4.1.1", + "electron-download": "4.1.1", + "electron-notarize": "0.0.5", + "electron-osx-sign": "0.4.11", + "extract-zip": "1.6.7", + "fs-extra": "7.0.1", + "galactus": "0.2.1", + "get-package-info": "1.0.0", + "parse-author": "2.0.0", + "pify": "4.0.1", + "plist": "3.0.1", + "rcedit": "1.1.1", + "resolve": "1.10.0", + "sanitize-filename": "1.6.1", + "semver": "5.6.0", + "yargs-parser": "11.1.1" + }, + "dependencies": { + "camelcase": { + "version": "5.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha1-AylVJ9WL081Kp1Nj81sujZe+L0I=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15", + "jsonfile": "4.0.0", + "universalify": "0.1.2" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pify/-/pify-4.0.1.tgz", + "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", + "dev": true + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha1-h5oIZZc7yp9rq1y987HGfsfTvPQ=", + "dev": true, + "requires": { + "camelcase": "5.0.0", + "decamelize": "1.2.0" + } + } + } + }, + "electron-to-chromium": { + "version": "1.3.113", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz", + "integrity": "sha1-scz2Gd9yla6he8aVHcaJYyYp5Kk=", + "dev": true + }, + "elliptic": { + "version": "6.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha1-wtC3d2kRuGcixjLDwGxg8vgZk5o=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, + "requires": { + "iconv-lite": "0.4.23" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "engine.io": { + "version": "3.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha1-tgKBw1SEpw7gNR6g6/+D7IyVIqI=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "3.1.0", + "engine.io-parser": "2.1.3", + "ws": "3.3.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha1-b1TAR13khxWKGnx30QF4cItq3TY=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "3.1.0", + "engine.io-parser": "2.1.3", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "3.3.3", + "xmlhttprequest-ssl": "1.5.5", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha1-dXq5cPvy37Mse3SwMyFtVznveaY=", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "1.0.3" + } + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha1-Qcfgv9/nSsH/4eV61qXGyfN0Kn8=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15", + "memory-fs": "0.4.1", + "tapable": "1.1.1" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "env-paths": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/env-paths/-/env-paths-1.0.0.tgz", + "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", + "dev": true + }, + "err-code": { + "version": "1.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/errno/-/errno-0.1.7.tgz", + "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", + "dev": true, + "requires": { + "prr": "1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es6-promise": { + "version": "4.2.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/es6-promise/-/es6-promise-4.2.5.tgz", + "integrity": "sha1-2m0NVpLvtGHggsFIF/4kJ9j10FQ=", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "4.2.5" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha1-UL8wcekzi83EMzF5Sgy1M/ATYXI=", + "dev": true, + "requires": { + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "dev": true + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha1-CQtNbNvWRe0Qv3UNS1QHlC17oWM=", + "dev": true + }, + "events": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/events/-/events-3.0.0.tgz", + "integrity": "sha1-mgoN+vYok9krh1uPJpjKQRSXPog=", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha1-j7xyyT/NNAiAkLwKTmT0tc7m2NA=", + "dev": true, + "requires": { + "original": "1.0.2" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", + "dev": true, + "requires": { + "md5.js": "1.3.5", + "safe-buffer": "5.1.2" + } + }, + "execa": { + "version": "0.10.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/execa/-/execa-0.10.0.tgz", + "integrity": "sha1-/0Vqj1P5D47MxxqW0Rvfx/CCy1A=", + "dev": true, + "requires": { + "cross-spawn": "6.0.5", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", + "dev": true, + "requires": { + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.6.0", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + } + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-braces": { + "version": "0.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "requires": { + "array-slice": "0.2.3", + "array-unique": "0.2.1", + "braces": "0.1.5" + }, + "dependencies": { + "array-unique": { + "version": "0.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "0.1.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "dev": true, + "requires": { + "expand-range": "0.1.1" + } + }, + "expand-range": { + "version": "0.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "dev": true, + "requires": { + "is-number": "0.1.1", + "repeat-string": "0.2.2" + } + }, + "is-number": { + "version": "0.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true + }, + "repeat-string": { + "version": "0.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.4" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha1-6x53OrsFbc2N8r/favWbizqTZWU=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "3.1.1", + "repeat-element": "1.1.3", + "repeat-string": "1.6.1" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "express": { + "version": "4.16.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/express/-/express-4.16.4.tgz", + "integrity": "sha1-/d72GSYQniTFFeqX/S8b2/Yt8S4=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.4", + "qs": "6.5.2", + "range-parser": "1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "1.4.0", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/extend/-/extend-3.0.2.tgz", + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha1-WGbbKal4Jtvkvzr9JAcOrZ6kOic=", + "dev": true, + "requires": { + "chardet": "0.7.0", + "iconv-lite": "0.4.24", + "tmp": "0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } + } + }, + "extract-zip": { + "version": "1.6.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/extract-zip/-/extract-zip-1.6.7.tgz", + "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "debug": "2.6.9", + "mkdirp": "0.5.1", + "yauzl": "2.4.1" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha1-kXKMWllC7O2FMSg8eUQe5BIsNak=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "1.2.0" + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A=", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "file-loader": { + "version": "3.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/file-loader/-/file-loader-3.0.1.tgz", + "integrity": "sha1-+OC6C1mZGLUa3+RdZtHnca1WD6o=", + "dev": true, + "requires": { + "loader-utils": "1.2.3", + "schema-utils": "1.0.0" + } + }, + "file-saver": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/file-saver/-/file-saver-2.0.1.tgz", + "integrity": "sha1-f+IkKvHLxVminYF2B4qLVteB+nk=" + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "7.1.3", + "minimatch": "3.0.4" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha1-7r9O2EAHnIP0JJA4ydcDAIMBsQU=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "flatted": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/flatted/-/flatted-2.0.0.tgz", + "integrity": "sha1-VRIrZTbqSWtLRIk+4mCBQdENmRY=", + "dev": true + }, + "flora-colossus": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/flora-colossus/-/flora-colossus-1.0.0.tgz", + "integrity": "sha1-VHKcNh7ezuAU3UQWeeGjfB13OkU=", + "dev": true, + "requires": { + "debug": "3.2.6", + "fs-extra": "4.0.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + } + } + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "follow-redirects": { + "version": "1.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/follow-redirects/-/follow-redirects-1.6.1.tgz", + "integrity": "sha1-UUlzxEtXVzaLrYvd/lL4HwFclMs=", + "dev": true, + "requires": { + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.7", + "mime-types": "2.1.21" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "1.0.0" + } + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha1-DYUhIuW8W+tFP7Ao6cDJvzY0DJQ=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15", + "jsonfile": "4.0.0", + "universalify": "0.1.2" + } + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha1-BsJ3IYRU7CiN93raVKA7hwKqy50=", + "dev": true, + "requires": { + "minipass": "2.3.5" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.6" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha1-SFG2ZKN4PlIAOzxm6w7uEHSTOqQ=", + "dev": true, + "optional": true, + "requires": { + "nan": "2.12.1", + "node-pre-gyp": "0.10.3" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "2.3.5" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.3" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.1.2", + "yallist": "3.0.3" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "2.3.5" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.9", + "iconv-lite": "0.4.24", + "sax": "1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.4", + "nopt": "4.0.1", + "npm-packlist": "1.2.0", + "npmlog": "4.1.2", + "rc": "1.2.8", + "rimraf": "2.6.3", + "semver": "5.6.0", + "tar": "4.4.8" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.5" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.5" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.5", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "1.1.1", + "fs-minipass": "1.2.5", + "minipass": "2.3.5", + "minizlib": "1.2.1", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.2", + "yallist": "3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true + } + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.3" + } + }, + "galactus": { + "version": "0.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/galactus/-/galactus-0.2.1.tgz", + "integrity": "sha1-y+0tIKQMH1Z5o1kI4rlBVzPnjbk=", + "dev": true, + "requires": { + "debug": "3.2.6", + "flora-colossus": "1.0.0", + "fs-extra": "4.0.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + } + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.3" + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha1-xEFzPhO5J6yMD/C0w7Az8ogSkko=", + "dev": true, + "optional": true, + "requires": { + "globule": "1.2.1" + } + }, + "genfun": { + "version": "5.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/genfun/-/genfun-5.0.0.tgz", + "integrity": "sha1-ndlxCgaQClxKW/V6yl2k5S/nZTc=", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=", + "dev": true + }, + "get-package-info": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/get-package-info/-/get-package-info-1.0.0.tgz", + "integrity": "sha1-ZDJ5ZWPigRPNlHTbvQAFKYWkmZw=", + "dev": true, + "requires": { + "bluebird": "3.5.3", + "debug": "2.6.9", + "lodash.get": "4.4.2", + "read-pkg-up": "2.0.0" + }, + "dependencies": { + "load-json-file": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.5.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/glob/-/glob-7.1.3.tgz", + "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/globals/-/globals-9.18.0.tgz", + "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=", + "dev": true + }, + "globby": { + "version": "7.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "dir-glob": "2.2.2", + "glob": "7.1.3", + "ignore": "3.3.10", + "pify": "3.0.0", + "slash": "1.0.0" + } + }, + "globule": { + "version": "1.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/globule/-/globule-1.2.1.tgz", + "integrity": "sha1-Xf+xsZHyLSB5epNptJ6rTpg5aW0=", + "dev": true, + "optional": true, + "requires": { + "glob": "7.1.3", + "lodash": "4.17.11", + "minimatch": "3.0.4" + } + }, + "glue-fdc3-access-impl": { + "version": "1.0.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/glue-fdc3-access-impl/-/glue-fdc3-access-impl-1.0.11.tgz", + "integrity": "sha1-HlhLUqhf0bST3nqSDYWst1AOEkY=", + "dev": true, + "requires": { + "glue-interop-api-impl": "1.0.11" + } + }, + "glue-interop-api-impl": { + "version": "1.0.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/glue-interop-api-impl/-/glue-interop-api-impl-1.0.11.tgz", + "integrity": "sha1-/OvLJcuz10Tko3MH89RRVPnX4ro=", + "dev": true, + "requires": { + "callback-registry": "2.4.0", + "tick42-glue-core": "3.13.8" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha1-/7cD4QZuig7qpMi4C6klPu77+wA=", + "dev": true + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha1-DgOWlf9QyT/CiFV9aW88HcZ3Z1Q=", + "dev": true + }, + "handlebars": { + "version": "4.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/handlebars/-/handlebars-4.1.0.tgz", + "integrity": "sha1-DWpvNP8fY87OyEI6pBaYJ794fDo=", + "dev": true, + "requires": { + "async": "2.6.1", + "optimist": "0.6.1", + "source-map": "0.6.1", + "uglify-js": "3.4.9" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=", + "dev": true, + "requires": { + "ajv": "6.7.0", + "har-schema": "2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha1-d3asYn8+p3JQz8My2rfd9eT10R0=", + "dev": true, + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "1.1.7", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha1-l/I2l3vW4SVAiTD/bePuxigewEc=", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "wbuf": "1.7.3" + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha1-ObDhat2bYFvwqe89nar0hDtMrNI=", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.4.0" + } + }, + "http-parser-js": { + "version": "0.5.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/http-parser-js/-/http-parser-js-0.5.0.tgz", + "integrity": "sha1-1l7b7ehDSdDcMDIIFaFdOcw8u9g=", + "dev": true + }, + "http-proxy": { + "version": "1.17.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha1-etOElGWPhGBeL220Q230EPTlvpo=", + "dev": true, + "requires": { + "eventemitter3": "3.1.0", + "follow-redirects": "1.6.1", + "requires-port": "1.0.0" + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha1-5IIb7vWyFCogJr1zkm/lN2McVAU=", + "dev": true, + "requires": { + "agent-base": "4.2.1", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "http-proxy-middleware": { + "version": "0.18.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", + "integrity": "sha1-CYfmu1pWBuWmkWjY+WeofxXdiqs=", + "dev": true, + "requires": { + "http-proxy": "1.17.0", + "is-glob": "4.0.0", + "lodash": "4.17.11", + "micromatch": "3.1.10" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.16.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha1-UVUpcPoE1yPgTFbQQXjD+SWSu8A=", + "dev": true, + "requires": { + "agent-base": "4.2.1", + "debug": "3.2.6" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + } + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha1-KXhx9jvlB63Pv8pxXQzQ7thOmmM=", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha1-UL8k5bnIu5ivSWTJQc2wkY2ntgs=", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=", + "dev": true + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha1-qD5i59JyrA47VRqqgoMaGbafgvg=", + "dev": true, + "requires": { + "minimatch": "3.0.4" + } + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "2.1.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=", + "dev": true, + "requires": { + "pkg-dir": "3.0.0", + "resolve-cwd": "2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "dev": true, + "requires": { + "locate-path": "3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "dev": true, + "requires": { + "p-locate": "3.0.0", + "path-exists": "3.0.0" + } + }, + "p-limit": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha1-HVoNIPsScHx1imVfa7xDhrWTDWg=", + "dev": true, + "requires": { + "p-try": "2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "dev": true, + "requires": { + "p-limit": "2.1.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha1-hQgLuHxkaI+keZb+j3376CEXYLE=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=", + "dev": true, + "requires": { + "find-up": "3.0.0" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true, + "optional": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ini/-/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", + "dev": true + }, + "inquirer": { + "version": "6.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/inquirer/-/inquirer-6.2.1.tgz", + "integrity": "sha1-mUP8SIIWG9sLDJJ2dpx1sy2/zVI=", + "dev": true, + "requires": { + "ansi-escapes": "3.2.0", + "chalk": "2.4.2", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "3.0.3", + "figures": "2.0.0", + "lodash": "4.17.11", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rxjs": "6.3.3", + "string-width": "2.1.1", + "strip-ansi": "5.0.0", + "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha1-949otdCGbCCyybjGG1KYUI3IdW8=", + "dev": true, + "requires": { + "ansi-regex": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha1-cN55Ht8CFATD/WFaqJEYrgQy5ak=", + "dev": true + } + } + } + } + }, + "internal-ip": { + "version": "3.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/internal-ip/-/internal-ip-3.0.1.tgz", + "integrity": "sha1-31yZh24dLrLqLXT1IOP2aaAOzic=", + "dev": true, + "requires": { + "default-gateway": "2.7.2", + "ipaddr.js": "1.8.0" + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha1-1QYaYiS+WOgIOYX1AU2EQ1lXYpY=", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", + "dev": true, + "requires": { + "loose-envify": "1.4.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.13.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha1-XW3vPt6/boyoyunDAYOoBLX4voA=", + "dev": true, + "requires": { + "buffer-alloc": "1.2.0" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-api": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/istanbul-api/-/istanbul-api-2.1.0.tgz", + "integrity": "sha1-N6sMLD6DBlRi9SVLlHSdYVeEbE4=", + "dev": true, + "requires": { + "async": "2.6.1", + "compare-versions": "3.4.0", + "fileset": "2.0.3", + "istanbul-lib-coverage": "2.0.3", + "istanbul-lib-hook": "2.0.3", + "istanbul-lib-instrument": "3.1.0", + "istanbul-lib-report": "2.0.4", + "istanbul-lib-source-maps": "3.0.2", + "istanbul-reports": "2.1.0", + "js-yaml": "3.12.1", + "make-dir": "1.3.0", + "minimatch": "3.0.4", + "once": "1.4.0" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha1-C4keWtQjEsK5SIVU9gN5X5oiEbo=", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz", + "integrity": "sha1-orVISn1EXx8xHpMZCBP6Vt+2KXE=", + "dev": true, + "requires": { + "@babel/generator": "7.3.2", + "@babel/parser": "7.3.2", + "@babel/template": "7.2.2", + "@babel/traverse": "7.2.3", + "@babel/types": "7.3.2", + "istanbul-lib-coverage": "2.0.3", + "semver": "5.6.0" + } + } + } + }, + "istanbul-instrumenter-loader": { + "version": "3.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz", + "integrity": "sha1-mVe9WSUrNz+uXFK3tRiOb94qCUk=", + "dev": true, + "requires": { + "convert-source-map": "1.6.0", + "istanbul-lib-instrument": "1.10.2", + "loader-utils": "1.2.3", + "schema-utils": "0.3.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "5.5.2" + } + } + } + }, + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha1-zPftzQoLubj3Kf7rCTBHD5r2ZPA=", + "dev": true + }, + "istanbul-lib-hook": { + "version": "2.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/istanbul-lib-hook/-/istanbul-lib-hook-2.0.3.tgz", + "integrity": "sha1-4OWB5GHGEb5dDl7zHF8BCXWZFvs=", + "dev": true, + "requires": { + "append-transform": "1.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha1-H1XtEKw8R/K93dUweTUSZ1TQqco=", + "dev": true, + "requires": { + "babel-generator": "6.26.1", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.2.1", + "semver": "5.6.0" + } + }, + "istanbul-lib-report": { + "version": "2.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/istanbul-lib-report/-/istanbul-lib-report-2.0.4.tgz", + "integrity": "sha1-v9Mk7gwE9ZEZy08H2rFX0J8k1+Q=", + "dev": true, + "requires": { + "istanbul-lib-coverage": "2.0.3", + "make-dir": "1.3.0", + "supports-color": "6.1.0" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha1-C4keWtQjEsK5SIVU9gN5X5oiEbo=", + "dev": true + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.2.tgz", + "integrity": "sha1-8egXIpqRRuhCSijl1puiIP2jQVY=", + "dev": true, + "requires": { + "debug": "4.1.1", + "istanbul-lib-coverage": "2.0.3", + "make-dir": "1.3.0", + "rimraf": "2.6.3", + "source-map": "0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha1-C4keWtQjEsK5SIVU9gN5X5oiEbo=", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/istanbul-reports/-/istanbul-reports-2.1.0.tgz", + "integrity": "sha1-h7i1XNGQG6F0iWTJjd2JAM4wbVk=", + "dev": true, + "requires": { + "handlebars": "4.1.0" + } + }, + "jasmine": { + "version": "2.8.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jasmine/-/jasmine-2.8.0.tgz", + "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", + "dev": true, + "requires": { + "exit": "0.1.2", + "glob": "7.1.3", + "jasmine-core": "2.8.0" + }, + "dependencies": { + "jasmine-core": { + "version": "2.8.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jasmine-core/-/jasmine-core-2.8.0.tgz", + "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", + "dev": true + } + } + }, + "jasmine-core": { + "version": "2.99.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jasmine-core/-/jasmine-core-2.99.1.tgz", + "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=", + "dev": true + }, + "jasmine-spec-reporter": { + "version": "4.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz", + "integrity": "sha1-HWMq7ANBZwrTJPkrqEtLMrNeniI=", + "dev": true, + "requires": { + "colors": "1.1.2" + } + }, + "jasminewd2": { + "version": "2.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jasminewd2/-/jasminewd2-2.2.0.tgz", + "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", + "dev": true + }, + "js-base64": { + "version": "2.5.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/js-base64/-/js-base64-2.5.1.tgz", + "integrity": "sha1-Hvo57yxfeYC7F4St5KivLeMpESE=", + "dev": true, + "optional": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.12.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/js-yaml/-/js-yaml-3.12.1.tgz", + "integrity": "sha1-KVyGMqGKI+BUz1ydPOyv5ngWdgA=", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "4.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/json5/-/json5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "dev": true, + "requires": { + "minimist": "1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jszip": { + "version": "3.1.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jszip/-/jszip-3.1.5.tgz", + "integrity": "sha1-48KmxtcGrG5gMxQDbUPNQL7v3zc=", + "dev": true, + "requires": { + "core-js": "2.3.0", + "es6-promise": "3.0.2", + "lie": "3.1.1", + "pako": "1.0.8", + "readable-stream": "2.0.6" + }, + "dependencies": { + "core-js": { + "version": "2.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/core-js/-/core-js-2.3.0.tgz", + "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", + "dev": true + }, + "es6-promise": { + "version": "3.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/es6-promise/-/es6-promise-3.0.2.tgz", + "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "karma": { + "version": "3.1.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/karma/-/karma-3.1.4.tgz", + "integrity": "sha1-OJDKlyKxDR0UtybhM1kxRVeISZ4=", + "dev": true, + "requires": { + "bluebird": "3.5.3", + "body-parser": "1.18.3", + "chokidar": "2.0.4", + "colors": "1.1.2", + "combine-lists": "1.0.1", + "connect": "3.6.6", + "core-js": "2.6.4", + "di": "0.0.1", + "dom-serialize": "2.2.1", + "expand-braces": "0.1.2", + "flatted": "2.0.0", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "http-proxy": "1.17.0", + "isbinaryfile": "3.0.3", + "lodash": "4.17.11", + "log4js": "3.0.6", + "mime": "2.4.0", + "minimatch": "3.0.4", + "optimist": "0.6.1", + "qjobs": "1.2.0", + "range-parser": "1.2.0", + "rimraf": "2.6.3", + "safe-buffer": "5.1.2", + "socket.io": "2.1.1", + "source-map": "0.6.1", + "tmp": "0.0.33", + "useragent": "2.3.0" + }, + "dependencies": { + "mime": { + "version": "2.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mime/-/mime-2.4.0.tgz", + "integrity": "sha1-4FH9iBNYWF8yed8zP+aU2gvP/dY=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha1-zxudBxNswY/iOTJ9JGVMPbw2is8=", + "dev": true, + "requires": { + "fs-access": "1.0.1", + "which": "1.3.1" + } + }, + "karma-coverage-istanbul-reporter": { + "version": "2.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.4.tgz", + "integrity": "sha1-QCrk7W6tudna+9QI/9oXiXwNADo=", + "dev": true, + "requires": { + "istanbul-api": "2.1.0", + "minimatch": "3.0.4" + } + }, + "karma-jasmine": { + "version": "1.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/karma-jasmine/-/karma-jasmine-1.1.2.tgz", + "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=", + "dev": true + }, + "karma-jasmine-html-reporter": { + "version": "0.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz", + "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=", + "dev": true, + "requires": { + "karma-jasmine": "1.1.2" + } + }, + "karma-source-map-support": { + "version": "1.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/karma-source-map-support/-/karma-source-map-support-1.3.0.tgz", + "integrity": "sha1-Nt1NjKFUtirOlWliNvrjfK8Kfd4=", + "dev": true, + "requires": { + "source-map-support": "0.5.10" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/killable/-/killable-1.0.1.tgz", + "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "less": { + "version": "3.9.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/less/-/less-3.9.0.tgz", + "integrity": "sha1-t1EcQ/N89X3Iff/ZiD7BISibFHQ=", + "dev": true, + "requires": { + "clone": "2.1.2", + "errno": "0.1.7", + "graceful-fs": "4.1.15", + "image-size": "0.5.5", + "mime": "1.6.0", + "mkdirp": "0.5.1", + "promise": "7.3.1", + "request": "2.88.0", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "optional": true + } + } + }, + "less-loader": { + "version": "4.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/less-loader/-/less-loader-4.1.0.tgz", + "integrity": "sha1-LBNSxbCaT4QQFJAnT9UWdN5BNj4=", + "dev": true, + "requires": { + "clone": "2.1.2", + "loader-utils": "1.2.3", + "pify": "3.0.0" + } + }, + "license-webpack-plugin": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/license-webpack-plugin/-/license-webpack-plugin-2.1.0.tgz", + "integrity": "sha1-g6yqbonDxTFu/92Ay07Jxc2O/C8=", + "dev": true, + "requires": { + "@types/webpack-sources": "0.1.5", + "webpack-sources": "1.3.0" + } + }, + "lie": { + "version": "3.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "dev": true, + "requires": { + "immediate": "3.0.6" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=", + "dev": true + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha1-H/XcaRHJ8KBiUxpMBLYJQGEIwsc=", + "dev": true, + "requires": { + "big.js": "5.2.2", + "emojis-list": "2.1.0", + "json5": "1.0.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha1-s56mIp72B+zYniyN8SU2iRysm40=", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true, + "optional": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", + "integrity": "sha1-Y5BX5ybDr72z59QnQcqo1uQzWSc=", + "dev": true, + "optional": true + }, + "lodash.tail": { + "version": "4.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/lodash.tail/-/lodash.tail-4.1.1.tgz", + "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", + "dev": true + }, + "log4js": { + "version": "3.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/log4js/-/log4js-3.0.6.tgz", + "integrity": "sha1-5srO2Uln7uuc45n5+GgqSysoyP8=", + "dev": true, + "requires": { + "circular-json": "0.5.9", + "date-format": "1.2.0", + "debug": "3.2.6", + "rfdc": "1.1.2", + "streamroller": "0.7.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + } + } + }, + "loglevel": { + "version": "1.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "magic-string": { + "version": "0.25.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/magic-string/-/magic-string-0.25.2.tgz", + "integrity": "sha1-E5w6cpUV7FXpbmnoKhH+iQopOtk=", + "dev": true, + "requires": { + "sourcemap-codec": "1.4.4" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha1-7+ToH22yjK3WBccPKcgxtY73dsg=", + "dev": true + }, + "make-fetch-happen": { + "version": "4.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz", + "integrity": "sha1-FBSXy4ePJDupMTbIPYq6EsIWwIM=", + "dev": true, + "requires": { + "agentkeepalive": "3.5.2", + "cacache": "11.3.2", + "http-cache-semantics": "3.8.1", + "http-proxy-agent": "2.1.0", + "https-proxy-agent": "2.2.1", + "lru-cache": "4.1.5", + "mississippi": "3.0.0", + "node-fetch-npm": "2.0.2", + "promise-retry": "1.1.1", + "socks-proxy-agent": "4.0.1", + "ssri": "6.0.1" + }, + "dependencies": { + "cacache": { + "version": "11.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha1-LYHjCOPSWMo4Eltna5iyrJzmm/o=", + "dev": true, + "requires": { + "bluebird": "3.5.3", + "chownr": "1.1.1", + "figgy-pudding": "3.5.1", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "lru-cache": "5.1.1", + "mississippi": "3.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "6.0.1", + "unique-filename": "1.1.1", + "y18n": "4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", + "dev": true, + "requires": { + "yallist": "3.0.3" + } + } + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "duplexify": "3.7.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.1.1", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "3.0.0", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pump/-/pump-3.0.0.tgz", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", + "dev": true, + "requires": { + "figgy-pudding": "3.5.1" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha1-tLBJ4xS+VF486AIjbWzSLNkcPek=", + "dev": true + } + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha1-fVg6cwZDTAVf5HSw9FB45uG0uSo=", + "dev": true, + "requires": { + "p-defer": "1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, + "math-random": { + "version": "1.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha1-XdaUPJOFSCZwFtTjTwV1gwgMUUw=", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "4.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mem/-/mem-4.1.0.tgz", + "integrity": "sha1-rrm+LSH0fnivKeSsWXjor6LKW4o=", + "dev": true, + "requires": { + "map-age-cleaner": "0.1.3", + "mimic-fn": "1.2.0", + "p-is-promise": "2.0.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.7", + "readable-stream": "2.3.6" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.5.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mime/-/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", + "dev": true, + "optional": true + }, + "mime-db": { + "version": "1.37.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha1-C2oM5v2+lXbiXx8tL96IMNwK0Ng=", + "dev": true + }, + "mime-types": { + "version": "2.1.21", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha1-KJlaoey3cHQv5q5+WPkYHHRLP5Y=", + "dev": true, + "requires": { + "mime-db": "1.37.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "0.5.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz", + "integrity": "sha1-rABZsCuWklFaY3EVsMyf7To1x7A=", + "dev": true, + "requires": { + "loader-utils": "1.2.3", + "schema-utils": "1.0.0", + "webpack-sources": "1.3.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "minipass": { + "version": "2.3.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha1-ys6+SSAiSX9law8PUeJoKp7S2Eg=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2", + "yallist": "3.0.3" + }, + "dependencies": { + "yallist": { + "version": "3.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha1-tLBJ4xS+VF486AIjbWzSLNkcPek=", + "dev": true + } + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha1-3SfqYTYkPHyIBoToZyuzpF/ZthQ=", + "dev": true, + "requires": { + "minipass": "2.3.5" + } + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha1-NEKlCPr8KFAEhv7qmUCWduTuWm8=", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "duplexify": "3.7.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.1.1", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "dev": true, + "requires": { + "for-in": "0.1.8", + "is-extendable": "0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "mkpath": { + "version": "0.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mkpath/-/mkpath-0.1.0.tgz", + "integrity": "sha1-dVSm+Nhxg0zJe1RisSLEwSTW3pE=", + "dev": true + }, + "mksnapshot": { + "version": "0.3.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mksnapshot/-/mksnapshot-0.3.4.tgz", + "integrity": "sha1-o7lnEJW0ZSna7UTD+xx1tnOH0+M=", + "dev": true, + "requires": { + "decompress-zip": "0.3.0", + "fs-extra": "0.26.7", + "request": "2.88.0" + }, + "dependencies": { + "fs-extra": { + "version": "0.26.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/fs-extra/-/fs-extra-0.26.7.tgz", + "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.3" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15" + } + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "run-queue": "1.0.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=", + "dev": true, + "requires": { + "dns-packet": "1.3.1", + "thunky": "1.0.3" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.12.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nan/-/nan-2.12.1.tgz", + "integrity": "sha1-exqhk+mqhgV+PHu9CsRI53CSVVI=", + "dev": true, + "optional": true + }, + "nanoid": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nanoid/-/nanoid-2.0.1.tgz", + "integrity": "sha1-3rVcrBluPxOAcZEdq7w3JusEiGQ=", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "neo-async": { + "version": "2.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha1-udFeTXHGdikIZUtRg+04t1M0CDU=", + "dev": true + }, + "ngx-bootstrap": { + "version": "3.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ngx-bootstrap/-/ngx-bootstrap-3.2.0.tgz", + "integrity": "sha1-7OfEivC8JgRiw/d94U8i1LPd4Uk=" + }, + "ngx-clipboard": { + "version": "11.1.9", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ngx-clipboard/-/ngx-clipboard-11.1.9.tgz", + "integrity": "sha1-o5GFPcSeQ23kByYIY6LIFNc6kzI=", + "requires": { + "ngx-window-token": "1.0.2", + "tslib": "1.9.3" + } + }, + "ngx-electron": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ngx-electron/-/ngx-electron-2.1.1.tgz", + "integrity": "sha1-aQd6DU4bM8tYq45TwiwUA4l0gl4=", + "requires": { + "tslib": "1.9.3" + } + }, + "ngx-window-token": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ngx-window-token/-/ngx-window-token-1.0.2.tgz", + "integrity": "sha1-LrrdMA/uH2Hri4UbCtl7H0b15Mw=", + "requires": { + "tslib": "1.9.3" + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=", + "dev": true + }, + "node-fetch-npm": { + "version": "2.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", + "integrity": "sha1-cljJBGGC3KNFtCCO2pGNrzNpf/c=", + "dev": true, + "requires": { + "encoding": "0.1.12", + "json-parse-better-errors": "1.0.2", + "safe-buffer": "5.1.2" + } + }, + "node-forge": { + "version": "0.7.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/node-forge/-/node-forge-0.7.5.tgz", + "integrity": "sha1-bBUsNFzhHFL0ZcKr2VfoY5zWdN8=", + "dev": true + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha1-VAMEJhwzDoDQ1e3OJTpoyzlkIYw=", + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.2", + "osenv": "0.1.5", + "request": "2.88.0", + "rimraf": "2.6.3", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.3.1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true, + "optional": true + } + } + }, + "node-libs-browser": { + "version": "2.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/node-libs-browser/-/node-libs-browser-2.2.0.tgz", + "integrity": "sha1-xy9g2dRt4IqUDe27JfP/ovm7qnc=", + "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "3.0.0", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.6", + "stream-browserify": "2.0.2", + "stream-http": "2.8.3", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.10", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.11.1", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-releases": { + "version": "1.1.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/node-releases/-/node-releases-1.1.7.tgz", + "integrity": "sha1-sJoQOU0O2Pd3j3K7hh3eaLFGMDs=", + "dev": true, + "requires": { + "semver": "5.6.0" + } + }, + "node-sass": { + "version": "4.11.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/node-sass/-/node-sass-4.11.0.tgz", + "integrity": "sha1-GD+uw5jpy+k7pDNi4naMqYimNpo=", + "dev": true, + "optional": true, + "requires": { + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.3", + "get-stdin": "4.0.1", + "glob": "7.1.3", + "in-publish": "2.0.0", + "lodash.assign": "4.2.0", + "lodash.clonedeep": "4.5.0", + "lodash.mergewith": "4.6.1", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.12.1", + "node-gyp": "3.8.0", + "npmlog": "4.1.2", + "request": "2.88.0", + "sass-graph": "2.2.4", + "stdout-stream": "1.4.1", + "true-case-path": "1.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "optional": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "optional": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", + "dev": true, + "requires": { + "hosted-git-info": "2.7.1", + "resolve": "1.10.0", + "semver": "5.6.0", + "validate-npm-package-license": "3.0.4" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "npm-bundled": { + "version": "1.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha1-57qarc75YrthJI+RchzZMrP+a90=", + "dev": true + }, + "npm-package-arg": { + "version": "6.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/npm-package-arg/-/npm-package-arg-6.1.0.tgz", + "integrity": "sha1-Fa4eJ1ilAn77TCUFVLhac323/ME=", + "dev": true, + "requires": { + "hosted-git-info": "2.7.1", + "osenv": "0.1.5", + "semver": "5.6.0", + "validate-npm-package-name": "3.0.0" + } + }, + "npm-packlist": { + "version": "1.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/npm-packlist/-/npm-packlist-1.3.0.tgz", + "integrity": "sha1-fwHo5EQINBN5ypjP11bnspvSYmw=", + "dev": true, + "requires": { + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.6" + } + }, + "npm-pick-manifest": { + "version": "2.2.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz", + "integrity": "sha1-MhEdKpViY4uyyPK/J/fzCSyPrkA=", + "dev": true, + "requires": { + "figgy-pudding": "3.5.1", + "npm-package-arg": "6.1.0", + "semver": "5.6.0" + } + }, + "npm-registry-fetch": { + "version": "3.9.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/npm-registry-fetch/-/npm-registry-fetch-3.9.0.tgz", + "integrity": "sha1-RNhBeA4oM/BqzLNEiPjHRQ0aaFY=", + "dev": true, + "requires": { + "JSONStream": "1.3.5", + "bluebird": "3.5.3", + "figgy-pudding": "3.5.1", + "lru-cache": "4.1.5", + "make-fetch-happen": "4.0.1", + "npm-package-arg": "6.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=", + "dev": true, + "requires": { + "are-we-there-yet": "1.1.5", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "nugget": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nugget/-/nugget-2.0.1.tgz", + "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", + "dev": true, + "requires": { + "debug": "2.6.9", + "minimist": "1.2.0", + "pretty-bytes": "1.0.4", + "progress-stream": "1.2.0", + "request": "2.88.0", + "single-line-log": "1.1.2", + "throttleit": "0.0.2" + } + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "object-keys": { + "version": "0.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + }, + "dependencies": { + "for-own": { + "version": "0.1.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + } + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "opn": { + "version": "5.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/opn/-/opn-5.4.0.tgz", + "integrity": "sha1-y1Reeqt4VivrEao7+rxwQuF2EDU=", + "dev": true, + "requires": { + "is-wsl": "1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + } + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "original": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/original/-/original-1.0.2.tgz", + "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=", + "dev": true, + "requires": { + "url-parse": "1.4.4" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "optional": true, + "requires": { + "lcid": "1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha1-hc36+uso6Gd/QW4odZK18/SepBA=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha1-dVTj1XIQmofh8/U/an2F0bGU9MU=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", + "dev": true, + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.3.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=", + "dev": true + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pacote": { + "version": "9.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pacote/-/pacote-9.4.0.tgz", + "integrity": "sha1-r5eavesXXNNHw+M74yQa8e0lSAc=", + "dev": true, + "requires": { + "bluebird": "3.5.3", + "cacache": "11.3.2", + "figgy-pudding": "3.5.1", + "get-stream": "4.1.0", + "glob": "7.1.3", + "lru-cache": "5.1.1", + "make-fetch-happen": "4.0.1", + "minimatch": "3.0.4", + "minipass": "2.3.5", + "mississippi": "3.0.0", + "mkdirp": "0.5.1", + "normalize-package-data": "2.5.0", + "npm-package-arg": "6.1.0", + "npm-packlist": "1.3.0", + "npm-pick-manifest": "2.2.3", + "npm-registry-fetch": "3.9.0", + "osenv": "0.1.5", + "promise-inflight": "1.0.1", + "promise-retry": "1.1.1", + "protoduck": "5.0.1", + "rimraf": "2.6.3", + "safe-buffer": "5.1.2", + "semver": "5.6.0", + "ssri": "6.0.1", + "tar": "4.4.8", + "unique-filename": "1.1.1", + "which": "1.3.1" + }, + "dependencies": { + "cacache": { + "version": "11.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha1-LYHjCOPSWMo4Eltna5iyrJzmm/o=", + "dev": true, + "requires": { + "bluebird": "3.5.3", + "chownr": "1.1.1", + "figgy-pudding": "3.5.1", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "lru-cache": "5.1.1", + "mississippi": "3.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "6.0.1", + "unique-filename": "1.1.1", + "y18n": "4.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", + "dev": true, + "requires": { + "pump": "3.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", + "dev": true, + "requires": { + "yallist": "3.0.3" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "duplexify": "3.7.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.1.1", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "3.0.0", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pump/-/pump-3.0.0.tgz", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", + "dev": true, + "requires": { + "figgy-pudding": "3.5.1" + } + }, + "tar": { + "version": "4.4.8", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tar/-/tar-4.4.8.tgz", + "integrity": "sha1-sZ7sP94qluZGZt+f20DFyhvDdH0=", + "dev": true, + "requires": { + "chownr": "1.1.1", + "fs-minipass": "1.2.5", + "minipass": "2.3.5", + "minizlib": "1.2.1", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.2", + "yallist": "3.0.3" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha1-tLBJ4xS+VF486AIjbWzSLNkcPek=", + "dev": true + } + } + }, + "pako": { + "version": "1.0.8", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pako/-/pako-1.0.8.tgz", + "integrity": "sha1-aESJCqucY1r4aK1f7MYuisu6PqQ=", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "parse-asn1": { + "version": "5.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/parse-asn1/-/parse-asn1-5.1.3.tgz", + "integrity": "sha1-FgDGzAcnNl1ouX86p4k55zWnUgQ=", + "dev": true, + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.17", + "safe-buffer": "5.1.2" + } + }, + "parse-author": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/parse-author/-/parse-author-2.0.0.tgz", + "integrity": "sha1-00YL8d3Q367tQtp1QkLmX7aEqB8=", + "dev": true, + "requires": { + "author-regex": "1.0.0" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.2" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha1-bXhlbj2o14tOwLkG98CO8d/j9gg=", + "dev": true + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=", + "dev": true, + "requires": { + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "2.1.0" + } + }, + "plist": { + "version": "3.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/plist/-/plist-3.0.1.tgz", + "integrity": "sha1-qbkx0XwwTokS7wujvdYYK68uH4w=", + "dev": true, + "requires": { + "base64-js": "1.3.0", + "xmlbuilder": "9.0.7", + "xmldom": "0.1.27" + } + }, + "portfinder": { + "version": "1.0.20", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/portfinder/-/portfinder-1.0.20.tgz", + "integrity": "sha1-vqaGMuVLLhOrewxHdem0G/Jw5Eo=", + "dev": true, + "requires": { + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.14", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha1-RSftaxyg2CxTzl7BogQcI0a71uU=", + "dev": true, + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "postcss-import": { + "version": "12.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/postcss-import/-/postcss-import-12.0.1.tgz", + "integrity": "sha1-z4x6sLXMq1ZJAkU25WX4QZKLcVM=", + "dev": true, + "requires": { + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1", + "read-cache": "1.0.0", + "resolve": "1.10.0" + } + }, + "postcss-load-config": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/postcss-load-config/-/postcss-load-config-2.0.0.tgz", + "integrity": "sha1-8TEt2/WRLNdHF3CDxe96GdYu5IQ=", + "dev": true, + "requires": { + "cosmiconfig": "4.0.0", + "import-cwd": "2.1.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0=", + "dev": true, + "requires": { + "loader-utils": "1.2.3", + "postcss": "7.0.14", + "postcss-load-config": "2.0.0", + "schema-utils": "1.0.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-bytes": { + "version": "1.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=", + "dev": true + }, + "progress-stream": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/progress-stream/-/progress-stream-1.2.0.tgz", + "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", + "dev": true, + "requires": { + "speedometer": "0.1.4", + "through2": "0.2.3" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.2.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/through2/-/through2-0.2.3.tgz", + "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", + "dev": true, + "requires": { + "readable-stream": "1.1.14", + "xtend": "2.1.2" + } + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "requires": { + "object-keys": "0.4.0" + } + } + } + }, + "promise": { + "version": "7.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/promise/-/promise-7.3.1.tgz", + "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", + "dev": true, + "optional": true, + "requires": { + "asap": "2.0.6" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, + "requires": { + "err-code": "1.1.2", + "retry": "0.10.1" + } + }, + "protoduck": { + "version": "5.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/protoduck/-/protoduck-5.0.1.tgz", + "integrity": "sha1-A8NlnKGAB7aaUP2Cp+vMUWJhFR8=", + "dev": true, + "requires": { + "genfun": "5.0.0" + } + }, + "protractor": { + "version": "5.4.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/protractor/-/protractor-5.4.2.tgz", + "integrity": "sha1-Mp7+N/SLIUGrlGd5m+LU0S60jBM=", + "dev": true, + "requires": { + "@types/q": "0.0.32", + "@types/selenium-webdriver": "3.0.14", + "blocking-proxy": "1.0.1", + "browserstack": "1.5.2", + "chalk": "1.1.3", + "glob": "7.1.3", + "jasmine": "2.8.0", + "jasminewd2": "2.2.0", + "optimist": "0.6.1", + "q": "1.4.1", + "saucelabs": "1.5.0", + "selenium-webdriver": "3.6.0", + "source-map-support": "0.4.18", + "webdriver-js-extender": "2.1.0", + "webdriver-manager": "12.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.3" + } + }, + "globby": { + "version": "5.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.3", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "webdriver-manager": { + "version": "12.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/webdriver-manager/-/webdriver-manager-12.1.1.tgz", + "integrity": "sha1-ZsMnH2nO/aqf38pheula+uQcPGI=", + "dev": true, + "requires": { + "adm-zip": "0.4.13", + "chalk": "1.1.3", + "del": "2.2.2", + "glob": "7.1.3", + "ini": "1.3.5", + "minimist": "1.2.0", + "q": "1.4.1", + "request": "2.88.0", + "rimraf": "2.6.3", + "semver": "5.6.0", + "xml2js": "0.4.19" + } + } + } + }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha1-7PxzO/Iv+Mb0B/onUye5q2fki5M=", + "dev": true, + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.8.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.1.31", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/psl/-/psl-1.1.31.tgz", + "integrity": "sha1-6aqG0BAbWxBcvpOsa3hM1UcnYYQ=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.3", + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pump/-/pump-2.0.1.tgz", + "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", + "dev": true, + "requires": { + "duplexify": "3.7.1", + "inherits": "2.0.3", + "pump": "2.0.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "dev": true + }, + "q": { + "version": "1.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha1-xF6cYYAL0IfviNfiVkI73Unl0HE=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/qs/-/qs-6.5.2.tgz", + "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/querystringify/-/querystringify-2.1.0.tgz", + "integrity": "sha1-fe2N+/eHncxg0KZErGdUsoOtF+8=", + "dev": true + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha1-t3bvxZN1mE42xTey9RofCv8Noe0=", + "dev": true, + "requires": { + "is-number": "4.0.0", + "kind-of": "6.0.2", + "math-random": "1.0.4" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=", + "dev": true + } + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", + "dev": true, + "requires": { + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha1-GzJOzmtXBuFThVvBFIxlu39uoMM=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + }, + "raw-loader": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/raw-loader/-/raw-loader-1.0.0.tgz", + "integrity": "sha1-P5iJ5z2tvamkJLznmAm0EzrUZAU=", + "dev": true, + "requires": { + "loader-utils": "1.2.3", + "schema-utils": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/rc/-/rc-1.2.8.tgz", + "integrity": "sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=", + "dev": true, + "requires": { + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + } + }, + "rcedit": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/rcedit/-/rcedit-1.1.1.tgz", + "integrity": "sha1-eTIYkzV+dPeVRmF9eSxXKzjS9/A=", + "dev": true + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.5.0", + "path-type": "1.1.0" + }, + "dependencies": { + "path-type": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15", + "micromatch": "3.1.10", + "readable-stream": "2.3.6" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.10.0" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha1-Z648pXyXKiqhZCsQ/jY/4y1J3Ag=", + "dev": true + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha1-SoVuxLVuQHfFV1icroXnpMiGmhE=", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=", + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "dev": true, + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/request/-/request-2.88.0.tgz", + "integrity": "sha1-nC/KT301tZLv5Xx/ClXoEFIST+8=", + "dev": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.7", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.3", + "har-validator": "5.1.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.21", + "oauth-sign": "0.9.0", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.4.3", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha1-iaf92TgmEmcxjq/hT5wy5ZjDaQk=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha1-O9qur0XMB/N1ZW39LlTtCBCxAbo=", + "dev": true, + "requires": { + "path-parse": "1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ret/-/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", + "dev": true + }, + "retry": { + "version": "0.10.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + }, + "rfdc": { + "version": "1.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/rfdc/-/rfdc-1.1.2.tgz", + "integrity": "sha1-5uctdPXcOd6PU49l4Aw2wYAY40k=", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=", + "dev": true, + "requires": { + "glob": "7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "1.2.0" + } + }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha1-PGp/pCDoRKgTkPsRWKnsYU9LrVU=", + "requires": { + "tslib": "1.9.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", + "dev": true + }, + "sanitize-filename": { + "version": "1.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sanitize-filename/-/sanitize-filename-1.6.1.tgz", + "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=", + "dev": true, + "requires": { + "truncate-utf8-bytes": "1.0.2" + } + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "optional": true, + "requires": { + "glob": "7.1.3", + "lodash": "4.17.11", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" + } + }, + "sass-loader": { + "version": "7.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sass-loader/-/sass-loader-7.1.0.tgz", + "integrity": "sha1-Fv1ROMuLQkv4p1lSihly1yqtBp0=", + "dev": true, + "requires": { + "clone-deep": "2.0.2", + "loader-utils": "1.2.3", + "lodash.tail": "4.1.1", + "neo-async": "2.6.0", + "pify": "3.0.0", + "semver": "5.6.0" + } + }, + "saucelabs": { + "version": "1.5.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha1-lAWnPDYNRJsjKDmRmobDltN5/Z0=", + "dev": true, + "requires": { + "https-proxy-agent": "2.2.1" + } + }, + "sax": { + "version": "0.5.8", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sax/-/sax-0.5.8.tgz", + "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "requires": { + "ajv": "6.7.0", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.4.0" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "optional": true, + "requires": { + "js-base64": "2.5.1", + "source-map": "0.4.4" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "optional": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selenium-webdriver": { + "version": "3.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha1-K6h6FmLAILiYjJga5iyyoBKY6vw=", + "dev": true, + "requires": { + "jszip": "3.1.5", + "rimraf": "2.6.3", + "tmp": "0.0.30", + "xml2js": "0.4.19" + }, + "dependencies": { + "tmp": { + "version": "0.0.30", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + } + } + }, + "selfsigned": { + "version": "1.10.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/selfsigned/-/selfsigned-1.10.4.tgz", + "integrity": "sha1-zdfsz8pO12NdR6CL8tXTB0CS4s0=", + "dev": true, + "requires": { + "node-forge": "0.7.5" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/semver/-/semver-5.6.0.tgz", + "integrity": "sha1-fnQlb7qknHWqfHogXMInmcrIAAQ=", + "dev": true + }, + "semver-dsl": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true, + "requires": { + "semver": "5.6.0" + } + }, + "semver-intersect": { + "version": "1.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/semver-intersect/-/semver-intersect-1.4.0.tgz", + "integrity": "sha1-vdnAa+3N0v7bjNNSw8Q+6MYTIfM=", + "dev": true, + "requires": { + "semver": "5.6.0" + } + }, + "send": { + "version": "0.16.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/send/-/send-0.16.2.tgz", + "integrity": "sha1-bsyh4PjBVtFBWXVZhI32RzCmu8E=", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.3", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + }, + "dependencies": { + "mime": { + "version": "1.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mime/-/mime-1.4.1.tgz", + "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "1.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/serialize-javascript/-/serialize-javascript-1.6.1.tgz", + "integrity": "sha1-TR9pfsSUKahHym9EKip1USbE2Hk=", + "dev": true + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "1.0.3", + "http-errors": "1.6.3", + "mime-types": "2.1.21", + "parseurl": "1.3.2" + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha1-CV6Ecv1bRiN9tQzkhqQ/S4bGzsE=", + "dev": true, + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "shallow-clone": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/shallow-clone/-/shallow-clone-1.0.0.tgz", + "integrity": "sha1-RIDNBuiC72iyrYij6lSDLixItXE=", + "dev": true, + "requires": { + "is-extendable": "0.1.1", + "kind-of": "5.1.0", + "mixin-object": "2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shelljs": { + "version": "0.8.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha1-p/MxlSDr8J7oEnWyNorbKGZZsJc=", + "dev": true, + "requires": { + "glob": "7.1.3", + "interpret": "1.2.0", + "rechoir": "0.6.2" + } + }, + "shortid": { + "version": "2.2.14", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/shortid/-/shortid-2.2.14.tgz", + "integrity": "sha1-gNtqr8vD46RoULPIjTngUbhMjRg=", + "dev": true, + "requires": { + "nanoid": "2.0.1" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "single-line-log": { + "version": "1.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/single-line-log/-/single-line-log-1.1.2.tgz", + "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", + "dev": true, + "requires": { + "string-width": "1.0.2" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "smart-buffer": { + "version": "4.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/smart-buffer/-/smart-buffer-4.0.2.tgz", + "integrity": "sha1-UgeFjDgVzGkRBwPGuU5GwVY0OV0=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha1-oGnF/qvuPmshSnW0DOBlLhz7mYA=", + "dev": true, + "requires": { + "debug": "3.1.0", + "engine.io": "3.2.1", + "has-binary2": "1.0.3", + "socket.io-adapter": "1.1.1", + "socket.io-client": "2.1.1", + "socket.io-parser": "3.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha1-3LOBA0NqtFeN2wJmOK4vIbYjZx8=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "3.1.0", + "engine.io-client": "3.2.1", + "has-binary2": "1.0.3", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "3.2.0", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha1-58Yii2qh+BTmFIrqMltRqpSZ4Hc=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha1-2Xa76ACve9IK4IWY1YI5NQiZPA0=", + "dev": true, + "requires": { + "faye-websocket": "0.10.0", + "uuid": "3.3.2" + } + }, + "sockjs-client": { + "version": "1.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sockjs-client/-/sockjs-client-1.3.0.tgz", + "integrity": "sha1-EvydbLZj2lc509xftuhofalcsXc=", + "dev": true, + "requires": { + "debug": "3.2.6", + "eventsource": "1.0.7", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.4.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + } + } + }, + "socks": { + "version": "2.2.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/socks/-/socks-2.2.3.tgz", + "integrity": "sha1-c5nOEeGbKplxU8mDqcy2MGch8tw=", + "dev": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "4.0.2" + } + }, + "socks-proxy-agent": { + "version": "4.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz", + "integrity": "sha1-WTa/i3B6mTB5xvN9sgkYIb/6ZHM=", + "dev": true, + "requires": { + "agent-base": "4.2.1", + "socks": "2.2.3" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=", + "dev": true + }, + "source-map-loader": { + "version": "0.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map-loader/-/source-map-loader-0.2.4.tgz", + "integrity": "sha1-wYsNxuI79m9nkkN1V8VpoR4HInE=", + "dev": true, + "requires": { + "async": "2.6.1", + "loader-utils": "1.2.3" + } + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", + "dev": true, + "requires": { + "atob": "2.1.2", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-support": { + "version": "0.5.10", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map-support/-/source-map-support-0.5.10.tgz", + "integrity": "sha1-IhQIC8nVGDJRHuK6uW48L5NTEgw=", + "dev": true, + "requires": { + "buffer-from": "1.1.1", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz", + "integrity": "sha1-xj6pJ8Ap3WvZorf6A7P+wCrVbp8=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha1-+4PlBERSaPFUsHTiGMh8ADzTHfQ=", + "dev": true, + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.3" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc=", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", + "dev": true, + "requires": { + "spdx-exceptions": "2.2.0", + "spdx-license-ids": "3.0.3" + } + }, + "spdx-license-ids": { + "version": "3.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha1-gcDOjyFHR1YUi7tfO/wPNr8V124=", + "dev": true + }, + "spdy": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/spdy/-/spdy-4.0.0.tgz", + "integrity": "sha1-gfIitadDoymqEs6mo5DmDpthPFI=", + "dev": true, + "requires": { + "debug": "4.1.1", + "handle-thing": "2.0.0", + "http-deceiver": "1.2.7", + "select-hose": "2.0.0", + "spdy-transport": "3.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + } + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha1-ANSGOmQArXXfkzYaFghgXl3NzzE=", + "dev": true, + "requires": { + "debug": "4.1.1", + "detect-node": "2.0.4", + "hpack.js": "2.1.6", + "obuf": "1.1.2", + "readable-stream": "3.1.1", + "wbuf": "1.7.3" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + }, + "readable-stream": { + "version": "3.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/readable-stream/-/readable-stream-3.1.1.tgz", + "integrity": "sha1-7Wu8bFuliwkAOf8YzmcFFXla6wY=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + } + } + }, + "speed-measure-webpack-plugin": { + "version": "1.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.0.tgz", + "integrity": "sha1-x/+v71E989Y9XVRsj8GYbfxJaao=", + "dev": true, + "requires": { + "chalk": "2.4.2" + } + }, + "speedometer": { + "version": "0.1.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/speedometer/-/speedometer-0.1.4.tgz", + "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=", + "dev": true, + "requires": { + "asn1": "0.2.4", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" + } + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha1-ujhyycbTOgcEp9cf8EXl7EiZnQY=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "stats-webpack-plugin": { + "version": "0.7.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/stats-webpack-plugin/-/stats-webpack-plugin-0.7.0.tgz", + "integrity": "sha1-zP/pt0Xei7sVVXHgY/gmP8DivAY=", + "dev": true, + "requires": { + "lodash": "4.17.11" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha1-u3PURtonlhBu/MG2AaJT1sRr0Ic=", + "dev": true + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha1-WsF0zdXNcmEEqgwLK9g4FdjVNd4=", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "2.3.6" + } + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "streamroller": { + "version": "0.7.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/streamroller/-/streamroller-0.7.0.tgz", + "integrity": "sha1-odG3z4PTmvsNYwSaWsv5NJO99ks=", + "dev": true, + "requires": { + "date-format": "1.2.0", + "debug": "3.2.6", + "mkdirp": "0.5.1", + "readable-stream": "2.3.6" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + } + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "style-loader": { + "version": "0.23.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/style-loader/-/style-loader-0.23.1.tgz", + "integrity": "sha1-y5FUYG8+dxq2xKtjcCahBJF02SU=", + "dev": true, + "requires": { + "loader-utils": "1.2.3", + "schema-utils": "1.0.0" + } + }, + "stylus": { + "version": "0.54.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/stylus/-/stylus-0.54.5.tgz", + "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", + "dev": true, + "requires": { + "css-parse": "1.7.0", + "debug": "2.6.9", + "glob": "7.0.6", + "mkdirp": "0.5.1", + "sax": "0.5.8", + "source-map": "0.1.43" + }, + "dependencies": { + "glob": { + "version": "7.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "stylus-loader": { + "version": "3.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/stylus-loader/-/stylus-loader-3.0.2.tgz", + "integrity": "sha1-J6cGQgsFo44DjnyssVNXjUUFE8Y=", + "dev": true, + "requires": { + "loader-utils": "1.2.3", + "lodash.clonedeep": "4.5.0", + "when": "3.6.4" + } + }, + "sumchecker": { + "version": "2.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sumchecker/-/sumchecker-2.0.2.tgz", + "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=", + "dev": true, + "requires": { + "debug": "2.6.9" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha1-wiaIrtTqs83C3+rLtWFmBWCgCAQ=", + "dev": true + }, + "tapable": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tapable/-/tapable-1.1.1.tgz", + "integrity": "sha1-TSl5I8WnKkI2DeKrUtrfquwAAY4=", + "dev": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "optional": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "terser": { + "version": "3.16.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/terser/-/terser-3.16.1.tgz", + "integrity": "sha1-Ww3U+h/9CwtDwkk7LDZP0XkWBJM=", + "dev": true, + "requires": { + "commander": "2.17.1", + "source-map": "0.6.1", + "source-map-support": "0.5.10" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz", + "integrity": "sha1-m/86iRrWFIVafd4NcH99takn49k=", + "dev": true, + "requires": { + "cacache": "11.3.2", + "find-cache-dir": "2.0.0", + "schema-utils": "1.0.0", + "serialize-javascript": "1.6.1", + "source-map": "0.6.1", + "terser": "3.16.1", + "webpack-sources": "1.3.0", + "worker-farm": "1.6.0" + }, + "dependencies": { + "cacache": { + "version": "11.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha1-LYHjCOPSWMo4Eltna5iyrJzmm/o=", + "dev": true, + "requires": { + "bluebird": "3.5.3", + "chownr": "1.1.1", + "figgy-pudding": "3.5.1", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "lru-cache": "5.1.1", + "mississippi": "3.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "6.0.1", + "unique-filename": "1.1.1", + "y18n": "4.0.0" + } + }, + "find-cache-dir": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/find-cache-dir/-/find-cache-dir-2.0.0.tgz", + "integrity": "sha1-TB+u1Z9FGEUw+51/oSOk0EqYRy0=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "dev": true, + "requires": { + "locate-path": "3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "dev": true, + "requires": { + "p-locate": "3.0.0", + "path-exists": "3.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", + "dev": true, + "requires": { + "yallist": "3.0.3" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "duplexify": "3.7.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.1.1", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "3.0.0", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" + } + }, + "p-limit": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha1-HVoNIPsScHx1imVfa7xDhrWTDWg=", + "dev": true, + "requires": { + "p-try": "2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "dev": true, + "requires": { + "p-limit": "2.1.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha1-hQgLuHxkaI+keZb+j3376CEXYLE=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=", + "dev": true, + "requires": { + "find-up": "3.0.0" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pump/-/pump-3.0.0.tgz", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", + "dev": true, + "requires": { + "figgy-pudding": "3.5.1" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha1-tLBJ4xS+VF486AIjbWzSLNkcPek=", + "dev": true + } + } + }, + "throttleit": { + "version": "0.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/throttleit/-/throttleit-0.0.2.tgz", + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/through2/-/through2-2.0.5.tgz", + "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", + "dev": true, + "requires": { + "readable-stream": "2.3.6", + "xtend": "4.0.1" + } + }, + "thunky": { + "version": "1.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/thunky/-/thunky-1.0.3.tgz", + "integrity": "sha1-9d9zJFNAewkZHa5z4qjMc/OBqCY=", + "dev": true + }, + "tick42-glue-core": { + "version": "3.13.8", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tick42-glue-core/-/tick42-glue-core-3.13.8.tgz", + "integrity": "sha1-ab84CEcTc/II4+/btA3sTlnIsHM=", + "dev": true, + "requires": { + "callback-registry": "2.4.0", + "es6-promise": "4.2.5", + "shortid": "2.2.14", + "util-deprecate": "1.0.2", + "ws": "0.7.2" + }, + "dependencies": { + "ultron": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "ws": { + "version": "0.7.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ws/-/ws-0.7.2.tgz", + "integrity": "sha1-Q4xWC9+it9o91ba0btYTJcJGmdg=", + "dev": true, + "requires": { + "bufferutil": "1.1.0", + "options": "0.0.6", + "ultron": "1.0.2", + "utf-8-validate": "1.1.0" + } + } + } + }, + "timers-browserify": { + "version": "2.0.10", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4=", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "dev": true, + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + }, + "touch": { + "version": "0.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/touch/-/touch-0.0.3.tgz", + "integrity": "sha1-Ua7z1ElXHU8oel2Hyci0kYGg2x0=", + "dev": true, + "requires": { + "nopt": "1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + } + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha1-U/Nto/R3g7CSWvoG/587FlKA94E=", + "dev": true, + "requires": { + "psl": "1.1.31", + "punycode": "1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true + }, + "tree-kill": { + "version": "1.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tree-kill/-/tree-kill-1.2.1.tgz", + "integrity": "sha1-U5jzdOLykrncx7LnHjClw7tsdDo=", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha1-+BO1qMhrQNpZYGcisUTjIleZ9H0=", + "dev": true, + "optional": true, + "requires": { + "glob": "7.1.3" + } + }, + "truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "dev": true, + "requires": { + "utf8-byte-length": "1.0.4" + } + }, + "ts-node": { + "version": "7.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ts-node/-/ts-node-7.0.1.tgz", + "integrity": "sha1-lWLcLR5tJI0kvFX3c+P2FDN9m68=", + "dev": true, + "requires": { + "arrify": "1.0.1", + "buffer-from": "1.1.1", + "diff": "3.5.0", + "make-error": "1.3.5", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map-support": "0.5.10", + "yn": "2.0.0" + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha1-1+TdeSRdhUKMTX5IIqeZF5VMooY=" + }, + "tslint": { + "version": "5.11.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tslint/-/tslint-5.11.0.tgz", + "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "builtin-modules": "1.1.1", + "chalk": "2.4.2", + "commander": "2.17.1", + "diff": "3.5.0", + "glob": "7.1.3", + "js-yaml": "3.12.1", + "minimatch": "3.0.4", + "resolve": "1.10.0", + "semver": "5.6.0", + "tslib": "1.9.3", + "tsutils": "2.29.0" + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha1-MrSIUBRnrL7dS4VJhnOggSrKC5k=", + "dev": true, + "requires": { + "tslib": "1.9.3" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha1-+JzjQVQcZysl7nrjxz3uOyvlAZQ=", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.21" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "3.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/typescript/-/typescript-3.2.4.tgz", + "integrity": "sha1-xYXLlSkSJj2RW0YnJs4kS6UQ7z0=", + "dev": true + }, + "uglify-js": { + "version": "3.4.9", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha1-rwLxgMEgfXZDLkc+0koo9KeCuuM=", + "dev": true, + "optional": true, + "requires": { + "commander": "2.17.1", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "optional": true + } + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha1-n+FTahCmZKZSZqHjzPhf02MCvJw=", + "dev": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", + "dev": true, + "requires": { + "unique-slug": "2.0.1" + } + }, + "unique-slug": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/unique-slug/-/unique-slug-2.0.1.tgz", + "integrity": "sha1-Xp7cbRzo+yZNsYpQfvm9hURFHKY=", + "dev": true, + "requires": { + "imurmurhash": "0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/upath/-/upath-1.1.0.tgz", + "integrity": "sha1-NSVll+RqWB20eT0M5H+prr/J+r0=", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", + "dev": true, + "requires": { + "punycode": "2.1.1" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.4.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/url-parse/-/url-parse-1.4.4.tgz", + "integrity": "sha1-ysFVbpX6oDA2kf7Fz51aG8NGSPg=", + "dev": true, + "requires": { + "querystringify": "2.1.0", + "requires-port": "1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/use/-/use-3.1.1.tgz", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", + "dev": true + }, + "useragent": { + "version": "2.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha1-IX+UOtVAyyEoZYqyP8lg9qiMmXI=", + "dev": true, + "requires": { + "lru-cache": "4.1.5", + "tmp": "0.0.33" + } + }, + "utf-8-validate": { + "version": "1.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/utf-8-validate/-/utf-8-validate-1.1.0.tgz", + "integrity": "sha1-UhprshidCzB93Ft5w8laX9gIXbQ=", + "dev": true, + "optional": true, + "requires": { + "bindings": "1.2.1", + "nan": "1.8.4" + }, + "dependencies": { + "nan": { + "version": "1.8.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nan/-/nan-1.8.4.tgz", + "integrity": "sha1-PHa1OC6rM+RLdY0oE8qdkuk0LzQ=", + "dev": true, + "optional": true + } + } + }, + "utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/util/-/util-0.11.1.tgz", + "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", + "dev": true, + "requires": { + "spdx-correct": "3.1.0", + "spdx-expression-parse": "3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=", + "dev": true, + "requires": { + "chokidar": "2.0.4", + "graceful-fs": "4.1.15", + "neo-async": "2.6.0" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=", + "dev": true, + "requires": { + "minimalistic-assert": "1.0.1" + } + }, + "webdriver-js-extender": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha1-V9epPADbTMjVVuTT20tdsKgMO7c=", + "dev": true, + "requires": { + "@types/selenium-webdriver": "3.0.14", + "selenium-webdriver": "3.6.0" + } + }, + "webpack": { + "version": "4.29.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/webpack/-/webpack-4.29.0.tgz", + "integrity": "sha1-8s/vg/euQEuoif9dQ+/Shcom51A=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/wasm-edit": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "acorn": "6.1.0", + "acorn-dynamic-import": "4.0.0", + "ajv": "6.7.0", + "ajv-keywords": "3.4.0", + "chrome-trace-event": "1.0.0", + "enhanced-resolve": "4.1.0", + "eslint-scope": "4.0.0", + "json-parse-better-errors": "1.0.2", + "loader-runner": "2.4.0", + "loader-utils": "1.2.3", + "memory-fs": "0.4.1", + "micromatch": "3.1.10", + "mkdirp": "0.5.1", + "neo-async": "2.6.0", + "node-libs-browser": "2.2.0", + "schema-utils": "0.4.7", + "tapable": "1.1.1", + "terser-webpack-plugin": "1.2.2", + "watchpack": "1.6.0", + "webpack-sources": "1.3.0" + }, + "dependencies": { + "schema-utils": { + "version": "0.4.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=", + "dev": true, + "requires": { + "ajv": "6.7.0", + "ajv-keywords": "3.4.0" + } + } + } + }, + "webpack-core": { + "version": "0.6.9", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/webpack-core/-/webpack-core-0.6.9.tgz", + "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", + "dev": true, + "requires": { + "source-list-map": "0.1.8", + "source-map": "0.4.4" + }, + "dependencies": { + "source-list-map": { + "version": "0.1.8", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-list-map/-/source-list-map-0.1.8.tgz", + "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "dev": true + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.5.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/webpack-dev-middleware/-/webpack-dev-middleware-3.5.1.tgz", + "integrity": "sha1-kmW3dC71D1T1TB2a8CL8F8G+m4g=", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "2.4.0", + "range-parser": "1.2.0", + "webpack-log": "2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mime/-/mime-2.4.0.tgz", + "integrity": "sha1-4FH9iBNYWF8yed8zP+aU2gvP/dY=", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.1.14", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz", + "integrity": "sha1-YPsim5l/xaCh/GI3QhAwGAlZ1Gk=", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "3.5.0", + "chokidar": "2.0.4", + "compression": "1.7.3", + "connect-history-api-fallback": "1.6.0", + "debug": "3.2.6", + "del": "3.0.0", + "express": "4.16.4", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.18.0", + "import-local": "2.0.0", + "internal-ip": "3.0.1", + "ip": "1.1.5", + "killable": "1.0.1", + "loglevel": "1.6.1", + "opn": "5.4.0", + "portfinder": "1.0.20", + "schema-utils": "1.0.0", + "selfsigned": "1.10.4", + "semver": "5.6.0", + "serve-index": "1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.3.0", + "spdy": "4.0.0", + "strip-ansi": "3.0.1", + "supports-color": "5.5.0", + "url": "0.11.0", + "webpack-dev-middleware": "3.4.0", + "webpack-log": "2.0.0", + "yargs": "12.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha1-NIQi2+gtgAswIu709qwQvy5NG0k=", + "dev": true, + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", + "dev": true, + "requires": { + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.6.0", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/debug/-/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha1-ZW17vICUxMeI6lPFhAkIycfQY8c=", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/execa/-/execa-1.0.0.tgz", + "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=", + "dev": true, + "requires": { + "cross-spawn": "6.0.5", + "get-stream": "4.1.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "dev": true, + "requires": { + "locate-path": "3.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", + "dev": true, + "requires": { + "pump": "3.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha1-bvXS32DlL4LrIopMNz6NHzlyU88=", + "dev": true, + "requires": { + "invert-kv": "2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "dev": true, + "requires": { + "p-locate": "3.0.0", + "path-exists": "3.0.0" + } + }, + "mime": { + "version": "2.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/mime/-/mime-2.4.0.tgz", + "integrity": "sha1-4FH9iBNYWF8yed8zP+aU2gvP/dY=", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha1-qAKm7hfyTBBIOrmTVxnO9O0Wvxo=", + "dev": true, + "requires": { + "execa": "1.0.0", + "lcid": "2.0.0", + "mem": "4.1.0" + } + }, + "p-limit": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha1-HVoNIPsScHx1imVfa7xDhrWTDWg=", + "dev": true, + "requires": { + "p-try": "2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "dev": true, + "requires": { + "p-limit": "2.1.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha1-hQgLuHxkaI+keZb+j3376CEXYLE=", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/pump/-/pump-3.0.0.tgz", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "webpack-dev-middleware": { + "version": "3.4.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", + "integrity": "sha1-ETL+zJAm/ZDw7O2sXL/3XR+0WJA=", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "2.4.0", + "range-parser": "1.2.0", + "webpack-log": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "12.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yargs/-/yargs-12.0.2.tgz", + "integrity": "sha1-/lgjQ2k5KvM+y+9TgZFx7/D1qtw=", + "dev": true, + "requires": { + "cliui": "4.1.0", + "decamelize": "2.0.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.3", + "os-locale": "3.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "4.0.0", + "yargs-parser": "10.1.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha1-cgImW4n36eny5XZeD+c1qQXtuqg=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=", + "dev": true, + "requires": { + "ansi-colors": "3.2.3", + "uuid": "3.3.2" + } + }, + "webpack-merge": { + "version": "4.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/webpack-merge/-/webpack-merge-4.2.1.tgz", + "integrity": "sha1-XpI8+ALqKs5P1a8dMkc2imM0ibQ=", + "dev": true, + "requires": { + "lodash": "4.17.11" + } + }, + "webpack-sources": { + "version": "1.3.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha1-KijcufH0X+lg2PFJMlK17mUw+oU=", + "dev": true, + "requires": { + "source-list-map": "2.0.1", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "webpack-subresource-integrity": { + "version": "1.1.0-rc.6", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/webpack-subresource-integrity/-/webpack-subresource-integrity-1.1.0-rc.6.tgz", + "integrity": "sha1-N/bxJk4es3jkFGWpjagPrXariIY=", + "dev": true, + "requires": { + "webpack-core": "0.6.9" + } + }, + "websocket-driver": { + "version": "0.7.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "dev": true, + "requires": { + "http-parser-js": "0.5.0", + "websocket-extensions": "0.1.3" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha1-XS/yKXcAPsaHpLhwc9+7rBRszyk=", + "dev": true + }, + "when": { + "version": "3.6.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/when/-/when-3.6.4.tgz", + "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/which/-/which-1.3.1.tgz", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=", + "dev": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "worker-farm": { + "version": "1.6.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha1-rsxAWXb6talVJhgIRvDboojzpKA=", + "dev": true, + "requires": { + "errno": "0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "3.3.3", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ws/-/ws-3.3.3.tgz", + "integrity": "sha1-8c+E/i1ekB686U767OeF8YeiKPI=", + "dev": true, + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.2", + "ultron": "1.1.1" + } + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=", + "dev": true, + "requires": { + "sax": "1.2.4", + "xmlbuilder": "9.0.7" + }, + "dependencies": { + "sax": { + "version": "1.2.4", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/sax/-/sax-1.2.4.tgz", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "dev": true + } + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "dev": true + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha1-5pgYneSd0qGMxWh7BeF8jkOUMCA=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.3", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true, + "optional": true + } + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true + } + } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true, + "requires": { + "fd-slicer": "1.0.1" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + }, + "yn": { + "version": "2.0.0", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true + }, + "zone.js": { + "version": "0.8.29", + "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/zone.js/-/zone.js-0.8.29.tgz", + "integrity": "sha1-jc6Sqg3VU7ULxb+7kK+Zhq2EWhI=" + } + } +} diff --git a/toolbar-ui-angular/package.json b/toolbar-ui-angular/package.json new file mode 100644 index 0000000..3d2ea6a --- /dev/null +++ b/toolbar-ui-angular/package.json @@ -0,0 +1,62 @@ +{ + "name": "toolbar-ui", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build --base-href ./", + "test": "ng test", + "test:watch": "ng test --code-coverage", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "private": true, + "author": "Tick42", + "license": "Apache-2.0", + "dependencies": { + "@angular/animations": "~7.2.0", + "@angular/common": "~7.2.0", + "@angular/compiler": "~7.2.0", + "@angular/core": "~7.2.0", + "@angular/forms": "~7.2.0", + "@angular/platform-browser": "~7.2.0", + "@angular/platform-browser-dynamic": "~7.2.0", + "@angular/router": "~7.2.0", + "@ng-bootstrap/ng-bootstrap": "^4.0.3", + "bootstrap": "^4.3.0", + "core-js": "^2.5.4", + "file-saver": "^2.0.1", + "ngx-bootstrap": "^3.2.0", + "ngx-clipboard": "^11.1.9", + "ngx-electron": "^2.1.1", + "rxjs": "~6.3.3", + "tslib": "^1.9.0", + "zone.js": "~0.8.26" + }, + "devDependencies": { + "@angular-devkit/build-angular": "~0.13.0", + "@angular/cli": "~7.3.1", + "@angular/compiler-cli": "~7.2.0", + "@angular/language-service": "~7.2.0", + "@types/electron": "^1.6.10", + "@types/jasmine": "~2.8.8", + "@types/jasminewd2": "~2.0.3", + "@types/node": "~8.9.4", + "codelyzer": "~4.5.0", + "electron": "^4.0.4", + "electron-packager": "^13.0.1", + "glue-fdc3-access-impl": "^1.0.11", + "glue-interop-api-impl": "^1.0.11", + "jasmine-core": "~2.99.1", + "jasmine-spec-reporter": "~4.2.1", + "karma": "~3.1.1", + "karma-chrome-launcher": "~2.2.0", + "karma-coverage-istanbul-reporter": "~2.0.1", + "karma-jasmine": "~1.1.2", + "karma-jasmine-html-reporter": "^0.2.2", + "protractor": "~5.4.0", + "ts-node": "~7.0.0", + "tslint": "~5.11.0", + "typescript": "~3.2.2" + } +} diff --git a/toolbar-ui-angular/preload.js b/toolbar-ui-angular/preload.js new file mode 100644 index 0000000..45dc658 --- /dev/null +++ b/toolbar-ui-angular/preload.js @@ -0,0 +1,21 @@ +/** + * Copyright © 2014-2018 Tick42 BG OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +const remote = require('electron').remote; + +window.glue42DemoToolbar = remote.getGlobal('glue42DemoToolbar'); +window.logStream = remote.getGlobal('logStream'); diff --git a/toolbar-ui-angular/src/app/app-config/app-config.component.html b/toolbar-ui-angular/src/app/app-config/app-config.component.html new file mode 100644 index 0000000..b041242 --- /dev/null +++ b/toolbar-ui-angular/src/app/app-config/app-config.component.html @@ -0,0 +1,15 @@ + + +
+

"{{app?.title}}" JSON Config

+
{{appJSONConfig}}
+
diff --git a/toolbar-ui-angular/src/app/app-config/app-config.component.spec.ts b/toolbar-ui-angular/src/app/app-config/app-config.component.spec.ts new file mode 100644 index 0000000..38edfb4 --- /dev/null +++ b/toolbar-ui-angular/src/app/app-config/app-config.component.spec.ts @@ -0,0 +1,77 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {async, ComponentFixture, fakeAsync, TestBed, tick} from '@angular/core/testing'; +import {RouterTestingModule} from '@angular/router/testing'; +import {ActivatedRoute, Params} from '@angular/router'; +import {ElectronService} from 'ngx-electron'; + +import {AppConfigComponent} from './app-config.component'; + +import {InitializeService} from '../services/initialize.service'; +import {HelperService} from '../services/helper.service'; + +import {IApplication} from '../app'; + +const applications: IApplication[] = require('../../mock-data/apps.json'); +const appId: string = applications[0].appId; + +describe('App Config Component', () => { + let component: AppConfigComponent; + let fixture: ComponentFixture; + let initializeService: InitializeService; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + RouterTestingModule.withRoutes([]) + ], + declarations: [ + AppConfigComponent + ], + providers: [ + ElectronService, + HelperService, + InitializeService, + { + provide: ActivatedRoute, + useValue: { + params: { + subscribe: (fn: (value: Params) => void) => fn({id: appId}), + } + } + } + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AppConfigComponent); + component = fixture.componentInstance; + initializeService = TestBed.get(InitializeService); + fixture.detectChanges(); + }); + + it('Should subscribe for apps', fakeAsync(() => { + initializeService.init(); + tick(); + initializeService.apps.subscribe(() => { + expect(component.app.appId).toEqual(appId); + }); + })); +}); diff --git a/toolbar-ui-angular/src/app/app-config/app-config.component.ts b/toolbar-ui-angular/src/app/app-config/app-config.component.ts new file mode 100644 index 0000000..113e167 --- /dev/null +++ b/toolbar-ui-angular/src/app/app-config/app-config.component.ts @@ -0,0 +1,84 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {Component, NgZone, OnDestroy, OnInit} from '@angular/core'; +import {ActivatedRoute} from '@angular/router'; +import {Subscription} from 'rxjs/index'; + +import {InitializeService} from '../services/initialize.service'; +import {HelperService} from '../services/helper.service'; + +import {IApplication} from '../app'; + +@Component({ + selector: 'app-config', + templateUrl: './app-config.component.html' +}) +export class AppConfigComponent implements OnInit, OnDestroy { + public app: IApplication; + public appJSONConfig: string; + private subscriptions: Subscription[] = []; + + constructor(private route: ActivatedRoute, + private zone: NgZone, + private initializeService: InitializeService, + private helperService: HelperService) { + } + + public ngOnInit() { + this.subscribeForApps(); + } + + public ngOnDestroy(): void { + this.subscriptions.forEach((subscription: Subscription) => subscription.unsubscribe()); + } + + /** + * Subscribe for apps + */ + private subscribeForApps(): void { + this.subscriptions.push(this.initializeService.apps.subscribe((apps: IApplication[]) => { + this.setCurrentAppConfig(apps); + })); + } + + /** + * Set JSON configuration from provided url hash parameter app ID + * @param apps: list of apps + */ + private setCurrentAppConfig(apps: IApplication[]): void { + this.subscriptions.push(this.route.params.subscribe((params: {id: string}) => { + const appId: string = params.id; + this.app = this.getApp(apps, appId); + if (this.app) { + this.zone.run(() => { + this.appJSONConfig = JSON.stringify(this.helperService.getGlue42ToolbarApp(this.app), null, 2); + }); + } + })); + } + + /** + * Get app + * @param apps: list of apps + * @param appId: app.appId + * @returns app + */ + private getApp(apps: IApplication[], appId: string): IApplication { + return apps.filter((app: IApplication) => app.appId === appId)[0]; + } +} diff --git a/toolbar-ui-angular/src/app/app-routing.module.ts b/toolbar-ui-angular/src/app/app-routing.module.ts new file mode 100644 index 0000000..4bcb171 --- /dev/null +++ b/toolbar-ui-angular/src/app/app-routing.module.ts @@ -0,0 +1,38 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {NgModule} from '@angular/core'; +import {RouterModule, Routes} from '@angular/router'; + +import {ToolbarComponent} from './toolbar/toolbar.component'; +import {LogsComponent} from './logs/logs.component'; +import {AppConfigComponent} from './app-config/app-config.component'; + +const routes: Routes = [ + {path: 'toolbar', component: ToolbarComponent}, + {path: 'logs', component: LogsComponent}, + {path: 'app-config/:id', component: AppConfigComponent}, + {path: '', pathMatch: 'full', redirectTo: 'toolbar'}, + {path: '*', pathMatch: 'full', redirectTo: 'toolbar'} +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes, {useHash: true})], + exports: [RouterModule] +}) +export class AppRoutingModule { +} diff --git a/toolbar-ui-angular/src/app/app.component.html b/toolbar-ui-angular/src/app/app.component.html new file mode 100644 index 0000000..390c5ae --- /dev/null +++ b/toolbar-ui-angular/src/app/app.component.html @@ -0,0 +1,12 @@ + + + diff --git a/toolbar-ui-angular/src/app/app.component.spec.ts b/toolbar-ui-angular/src/app/app.component.spec.ts new file mode 100644 index 0000000..f6311fd --- /dev/null +++ b/toolbar-ui-angular/src/app/app.component.spec.ts @@ -0,0 +1,82 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import {RouterTestingModule} from '@angular/router/testing'; +import {ElectronService} from 'ngx-electron'; +import {of} from 'rxjs'; + +import {AppComponent} from './app.component'; +import {InitializeService} from './services/initialize.service'; +import {HelperService} from './services/helper.service'; +import {IGlue42ToolbarProvider, IApplication} from './app'; + +const applications: IApplication[] = require('../mock-data/apps.json'); +const providers: IGlue42ToolbarProvider[] = require('../mock-data/providers.json'); + +describe('App Component', () => { + let component: AppComponent; + let fixture: ComponentFixture; + let initializeService: InitializeService; + + const mockProviders: IGlue42ToolbarProvider[] = providers.map((provider: IGlue42ToolbarProvider) => { + provider.getApps = () => new Promise((resolve) => + resolve(applications.filter((app: IApplication) => app.provider.name === provider.name))); + return provider; + }); + (window as any).glue42DemoToolbar = { + addProvider: () => {}, + updateProvider: () => {}, + deleteProvider: () => {}, + providers: { + subscribe: (fn) => of(fn(mockProviders)) + } + }; + (window as any).logStream = { + subscribe: (fn) => of(fn([])), + next: () => {} + }; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + RouterTestingModule.withRoutes([]) + ], + declarations: [ + AppComponent + ], + providers: [ + ElectronService, + HelperService, + InitializeService + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AppComponent); + component = fixture.componentInstance; + initializeService = TestBed.get(InitializeService); + spyOn(initializeService, 'init'); + fixture.detectChanges(); + }); + + it('Should initialize', () => { + expect(initializeService.init).toHaveBeenCalled(); + }); +}); diff --git a/toolbar-ui-angular/src/app/app.component.ts b/toolbar-ui-angular/src/app/app.component.ts new file mode 100644 index 0000000..7a4496e --- /dev/null +++ b/toolbar-ui-angular/src/app/app.component.ts @@ -0,0 +1,32 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {Component, OnInit} from '@angular/core'; +import {InitializeService} from "./services/initialize.service"; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html' +}) +export class AppComponent implements OnInit { + constructor(private initializeService: InitializeService) { + } + + public ngOnInit(): void { + this.initializeService.init(); + } +} diff --git a/toolbar-ui-angular/src/app/app.module.ts b/toolbar-ui-angular/src/app/app.module.ts new file mode 100644 index 0000000..d998ca5 --- /dev/null +++ b/toolbar-ui-angular/src/app/app.module.ts @@ -0,0 +1,72 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {BrowserModule} from '@angular/platform-browser'; +import {NgModule} from '@angular/core'; +import {NgbModule} from '@ng-bootstrap/ng-bootstrap'; +import {AccordionModule, ModalModule} from 'ngx-bootstrap'; +import {FormsModule} from '@angular/forms'; +import {ClipboardModule} from 'ngx-clipboard'; +import {NgxElectronModule} from 'ngx-electron'; + +import {AppRoutingModule} from './app-routing.module'; + +import {AppComponent} from './app.component'; +import {ToolbarComponent} from './toolbar/toolbar.component'; +import {ListOfAppsComponent} from './list-of-apps/list-of-apps.component'; +import {ModalDialogComponent} from './shared/modal-dialog/modal-dialog.component'; +import {SettingsComponent} from './settings/settings.component'; +import {SettingsLogsComponent} from './settings/logs/settings-logs.component'; +import {LogsComponent} from './logs/logs.component'; +import {AppConfigComponent} from './app-config/app-config.component'; +import {AppDirectoryFormModalComponent} from './settings/app-directory-form-modal/app-directory-form-modal.component'; + +import {InitializeService} from './services/initialize.service'; +import {HelperService} from './services/helper.service'; + +@NgModule({ + imports: [ + AccordionModule.forRoot(), + AppRoutingModule, + BrowserModule, + ClipboardModule, + FormsModule, + ModalModule.forRoot(), + NgbModule.forRoot(), + NgxElectronModule + ], + declarations: [ + AppComponent, + AppConfigComponent, + ListOfAppsComponent, + LogsComponent, + ModalDialogComponent, + SettingsComponent, + SettingsLogsComponent, + ToolbarComponent, + AppDirectoryFormModalComponent + ], + providers: [ + HelperService, + InitializeService + ], + bootstrap: [ + AppComponent + ] +}) +export class AppModule { +} diff --git a/toolbar-ui-angular/src/app/app.ts b/toolbar-ui-angular/src/app/app.ts new file mode 100644 index 0000000..c435767 --- /dev/null +++ b/toolbar-ui-angular/src/app/app.ts @@ -0,0 +1,72 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +export interface IGlue42ToolbarApplication { + appId: string; + name: string; + version: string; + title: string; + tooltip: string; + description: string; + images: string[]; + contactEmail: string; + supportEmail: string; + publisher: string; + icons: string[]; + customConfig: any[]; + intents: any[]; + manifestType: string; + manifest: string | IApplicationManifest; + start: () => any; +} + +export interface IApplication extends IGlue42ToolbarApplication { + provider: IProvider; + iconPath: string; + showApp: boolean; + isFavourite: boolean; +} + +export interface IApplicationManifest { + type: string; + path?: string; + exePath?: string; + url?: string; +} + +export interface IGlue42ToolbarProvider { + name: string; + apiUrl: string; + email: string; + password: string; + authUrl: string; + getApps?: () => any; +} + +export interface IProvider extends IGlue42ToolbarProvider { + enabled: boolean; + status: string; +} + +export interface ILog { + timestamp: number; + type: string; + origin: string; + message: string; + show: boolean; + date?: string; +} diff --git a/toolbar-ui-angular/src/app/list-of-apps/list-of-apps.component.html b/toolbar-ui-angular/src/app/list-of-apps/list-of-apps.component.html new file mode 100644 index 0000000..675551b --- /dev/null +++ b/toolbar-ui-angular/src/app/list-of-apps/list-of-apps.component.html @@ -0,0 +1,51 @@ + + +
+
+
+ +
+
+
    +
  • + + + +
  • +
+
There are no applications available
+
+ + + + + + + diff --git a/toolbar-ui-angular/src/app/list-of-apps/list-of-apps.component.spec.ts b/toolbar-ui-angular/src/app/list-of-apps/list-of-apps.component.spec.ts new file mode 100644 index 0000000..059cde6 --- /dev/null +++ b/toolbar-ui-angular/src/app/list-of-apps/list-of-apps.component.spec.ts @@ -0,0 +1,112 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {async, ComponentFixture, fakeAsync, TestBed, tick} from '@angular/core/testing'; +import {FormsModule} from '@angular/forms'; +import {ClipboardModule} from 'ngx-clipboard'; +import {ModalModule} from 'ngx-bootstrap'; + +import {ListOfAppsComponent} from './list-of-apps.component'; +import {ModalDialogComponent} from '../shared/modal-dialog/modal-dialog.component'; + +import {ElectronService} from 'ngx-electron'; +import {InitializeService} from '../services/initialize.service'; +import {HelperService} from '../services/helper.service'; + +import {IApplication, IGlue42ToolbarApplication} from '../app'; + +describe('List Of Apps Component', () => { + let component: ListOfAppsComponent; + let fixture: ComponentFixture; + let initializeService: InitializeService; + let helperService: HelperService; + + (window as any).process = { + execFile: () => {}, + exec: () => {} + }; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + FormsModule, + ClipboardModule, + ModalModule.forRoot(), + ], + declarations: [ + ListOfAppsComponent, + ModalDialogComponent + ], + providers: [ + ElectronService, + InitializeService, + HelperService + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ListOfAppsComponent); + component = fixture.componentInstance; + initializeService = TestBed.get(InitializeService); + helperService = TestBed.get(HelperService); + fixture.detectChanges(); + }); + + it('Should show app config', fakeAsync(() => { + spyOn(component.logModalDialog, 'show'); + + initializeService.init(); + tick(); + initializeService.apps.subscribe((apps: IApplication[]) => { + const app: IApplication = apps[0]; + component.showAppConfig(app); + expect(component.currentAppId).toEqual(app.appId); + expect(component.appJSONConfigTitle).toEqual(`"${app.title}" JSON Config`); + const tick42App: IGlue42ToolbarApplication = Object.assign({}, app); + tick42App.manifest = JSON.parse(tick42App.manifest as string); + delete (tick42App as IApplication).iconPath; + delete (tick42App as IApplication).showApp; + delete (tick42App as IApplication).isFavourite; + expect(component.appJSONConfig).toEqual(JSON.stringify(tick42App, null, 2)); + }); + })); + + it('Should Toggle Favourite apps', fakeAsync(() => { + spyOn(initializeService, 'updateApps'); + initializeService.init(); + tick(); + initializeService.apps.subscribe((apps: IApplication[]) => { + const favApp: IApplication = apps[0]; + component.toggleFavouriteApp(favApp); + expect(initializeService.updateApps).toHaveBeenCalledWith(favApp, 'isFavourite'); + }); + })); + + it('Should update on search', () => { + spyOn(initializeService, 'filterDisplayedApps'); + + const searchValue: string = 'search value'; + component.onSearch(searchValue); + component.searchValueChanged.subscribe((value: string) => { + expect(value).toEqual(searchValue); + expect(component.searchValue).toEqual(searchValue); + expect(initializeService.filterDisplayedApps).toHaveBeenCalledWith(searchValue); + }); + }); +}); diff --git a/toolbar-ui-angular/src/app/list-of-apps/list-of-apps.component.ts b/toolbar-ui-angular/src/app/list-of-apps/list-of-apps.component.ts new file mode 100644 index 0000000..0d6e5b0 --- /dev/null +++ b/toolbar-ui-angular/src/app/list-of-apps/list-of-apps.component.ts @@ -0,0 +1,198 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {Component, NgZone, OnDestroy, OnInit, ViewChild} from '@angular/core'; +import {Subscription} from 'rxjs/index'; +import {ElectronService} from 'ngx-electron'; +import {Subject} from 'rxjs'; +import {debounceTime} from 'rxjs/operators'; + +import {InitializeService} from '../services/initialize.service'; +import {HelperService} from '../services/helper.service'; + +import {ModalDialogComponent} from '../shared/modal-dialog/modal-dialog.component'; + +import {IApplication, IGlue42ToolbarApplication} from '../app'; + +@Component({ + selector: 'app-list-of-apps', + templateUrl: './list-of-apps.component.html' +}) +export class ListOfAppsComponent implements OnInit, OnDestroy { + @ViewChild('logModalDialog') logModalDialog: ModalDialogComponent; + @ViewChild('appStartErrorModalDialog') appStartErrorModalDialog: ModalDialogComponent; + public apps: IApplication[] = []; + public currentAppId: string; + public appJSONConfigTitle: string; + public appJSONConfig: string; + public showContent: boolean; + public showSettings: boolean; + public searchValue: string; + public searchValueChanged: Subject = new Subject(); + public appStartErrorTitle: string; + public appStartErrorMessage: string; + private subscriptions: Subscription[] = []; + + constructor(private electronService: ElectronService, + private initializeService: InitializeService, + private helperService: HelperService, + private zone: NgZone) { + } + + ngOnInit() { + this.subscribeForApps(); + this.subscribeForShowContent(); + this.subscribeForShowSettings(); + this.subscribeForSearchChanges(); + this.subscribeForAppStartFail(); + } + + public ngOnDestroy(): void { + this.subscriptions.forEach((subscription: Subscription) => subscription.unsubscribe()); + } + + /** + * Start App + * @param app: app + */ + public startApp(app: IApplication): void { + app.start(); + } + + /** + * Show app configuration + * @param app: app + */ + public showAppConfig(app: IApplication): void { + this.currentAppId = app.appId; + this.appJSONConfigTitle = `"${app.title}" JSON Config`; + this.appJSONConfig = this.getAppJSONConfig(app); + this.logModalDialog.show(); + (window as any).logStream.next([`Show JSON config for app "${app.title || app.name}"`, 'INFO', 'Angular']); +} + + /** + * Toggle favourite app in the navbar + * @param app: app + */ + public toggleFavouriteApp(favouriteApp: IApplication): void { + favouriteApp.isFavourite = !favouriteApp.isFavourite; + this.initializeService.updateApps(favouriteApp, 'isFavourite'); + } + + /** + * Open app JSON config in new Electron window + */ + public openInNewWindow(): void { + const preload: string = this.electronService.ipcRenderer.sendSync('get-preload-path'); + const win = new this.electronService.remote.BrowserWindow({ + width: 700, + height: 800, + webPreferences: {preload}, + autoHideMenuBar: true + }); + const dirName: string = location.href.split('/').slice(0, -2).join('/'); + win.loadURL(`${dirName}/assets/app-config.html#${this.currentAppId}`); + } + + /** + * Update filter value on change + * @param text: filter input value + */ + public onSearch(text: string): void { + this.searchValueChanged.next(text); + } + + /** + * Get app JSON config + * @param app: app + * @returns string: the app JSON config + */ + private getAppJSONConfig(app: IApplication): string { + const tick42App: IGlue42ToolbarApplication = this.helperService.getGlue42ToolbarApp(app); + tick42App.manifest = JSON.parse(tick42App.manifest as string); + return JSON.stringify(tick42App, null, 2); + } + + /** + * Subscribe for apps + * Display them alphabetically + */ + private subscribeForApps(): void { + this.subscriptions.push(this.initializeService.apps.subscribe((apps: IApplication[]) => { + this.zone.run(() => { + const filteredApp: IApplication[] = apps.filter((app: IApplication) => app.showApp); + this.apps = this.helperService.sortArrayAlphabeticallyByKey(filteredApp, 'title'); + }); + })); + } + + /** + * Subscribe for show content + * The content of the app is the list of apps or the settings + * Show content is initially set to false + */ + private subscribeForShowContent(): void { + this.subscriptions.push(this.helperService.showContent.subscribe((showContent: boolean) => { + this.showContent = showContent; + })); + } + + /** + * Subscribe for show settings + * Show settings is initially set to false + */ + private subscribeForShowSettings(): void { + this.subscriptions.push(this.helperService.showSettings.subscribe((showSettings: boolean) => { + this.showSettings = showSettings; + })); + } + + /** + * Subscribe for search change + * Filter the displayed apps depending on the search value + */ + private subscribeForSearchChanges(): void { + this.searchValueChanged + .pipe(debounceTime(300)) + .subscribe((searchValue: string) => { + this.searchValue = searchValue; + this.initializeService.filterDisplayedApps(searchValue); + }); + } + + /** + * Subscribe for app start fail + * If app start fails, show modal dialog + */ + private subscribeForAppStartFail(): void { + this.subscriptions.push(this.helperService.appStartFail.subscribe((args: {startApp: IApplication, message: string}) => { + this.showAppStartFailModal(...(Object.values(args) as any[])); + })); + } + + /** + * Show app start fail modal dialog + * @param startApp: app + * @param message: message to be displayed + */ + private showAppStartFailModal(startApp?: IApplication, message?: string): void { + this.appStartErrorTitle = `Failed to start ${startApp.title || startApp.name}`; + this.appStartErrorMessage = message; + this.appStartErrorModalDialog.show(); + } +} diff --git a/toolbar-ui-angular/src/app/logs/logs.component.html b/toolbar-ui-angular/src/app/logs/logs.component.html new file mode 100644 index 0000000..132ca3b --- /dev/null +++ b/toolbar-ui-angular/src/app/logs/logs.component.html @@ -0,0 +1,17 @@ + + +
+

Logs

+
+ +
+
diff --git a/toolbar-ui-angular/src/app/logs/logs.component.spec.ts b/toolbar-ui-angular/src/app/logs/logs.component.spec.ts new file mode 100644 index 0000000..cba43ca --- /dev/null +++ b/toolbar-ui-angular/src/app/logs/logs.component.spec.ts @@ -0,0 +1,53 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; + +import {LogsComponent} from './logs.component'; +import {SettingsLogsComponent} from '../settings/logs/settings-logs.component'; + +import {ElectronService} from 'ngx-electron'; +import {HelperService} from '../services/helper.service'; + +describe('Logs Component', () => { + let component: LogsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ + LogsComponent, + SettingsLogsComponent + ], + providers: [ + ElectronService, + HelperService + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(LogsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('Should create component', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/toolbar-ui-angular/src/app/logs/logs.component.ts b/toolbar-ui-angular/src/app/logs/logs.component.ts new file mode 100644 index 0000000..9a28504 --- /dev/null +++ b/toolbar-ui-angular/src/app/logs/logs.component.ts @@ -0,0 +1,25 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {Component} from '@angular/core'; + +@Component({ + selector: 'app-logs', + templateUrl: './logs.component.html' +}) +export class LogsComponent { +} diff --git a/toolbar-ui-angular/src/app/services/helper.service.spec.ts b/toolbar-ui-angular/src/app/services/helper.service.spec.ts new file mode 100644 index 0000000..d77a88c --- /dev/null +++ b/toolbar-ui-angular/src/app/services/helper.service.spec.ts @@ -0,0 +1,80 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {async, fakeAsync, TestBed, tick} from '@angular/core/testing'; +import {ElectronService} from 'ngx-electron'; + +import {HelperService} from './helper.service'; + +import {IApplication, ILog} from '../app'; +import {InitializeService} from './initialize.service'; + +const applications: IApplication[] = require('../../mock-data/apps.json'); + +describe('Helper Service', () => { + let service: HelperService; + let initializeService: InitializeService; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + providers: [ + ElectronService, + HelperService, + InitializeService + ] + }); + })); + + beforeEach(() => { + service = TestBed.get(HelperService); + initializeService = TestBed.get(InitializeService); + }); + + it('Should sort array alphabetically', () => { + const apps: IApplication[] = applications; + expect(apps[0].title).toEqual('Client Contact'); + expect(apps[1].title).toEqual('Glue42 Website'); + expect(apps[2].title).toEqual('Excel'); + const sortedArrey = service.sortArrayAlphabeticallyByKey(apps, 'title'); + expect(sortedArrey[0].title).toEqual('Client Contact'); + expect(sortedArrey[1].title).toEqual('Excel'); + expect(sortedArrey[2].title).toEqual('Glue42 Website'); + }); + + it('Should add logs', () => { + const log = {timestamp: Date.now(), type: 'type', origin: 'origin', message: 'message'}; + service.addLog(log.timestamp, log.type, log.origin, log.message); + service.logs.subscribe((logs: ILog[]) => { + expect(logs.length).toEqual(1); + expect(logs[0].timestamp).toEqual(log.timestamp); + expect(logs[0].type).toEqual(log.type); + expect(logs[0].origin).toEqual(log.origin); + expect(logs[0].message).toEqual(log.message); + }); + }); + + it('Should convert apps to Tick42Apps', fakeAsync(() => { + initializeService.init(); + tick(); + initializeService.apps.subscribe((apps: IApplication[]) => { + const tick42App = service.getGlue42ToolbarApp(apps[0]); + expect((tick42App as IApplication).iconPath).toBeUndefined(); + expect((tick42App as IApplication).showApp).toBeUndefined(); + expect((tick42App as IApplication).isFavourite).toBeUndefined(); + }); + })); +}); diff --git a/toolbar-ui-angular/src/app/services/helper.service.ts b/toolbar-ui-angular/src/app/services/helper.service.ts new file mode 100644 index 0000000..d4b5750 --- /dev/null +++ b/toolbar-ui-angular/src/app/services/helper.service.ts @@ -0,0 +1,84 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {Injectable} from '@angular/core'; +import {BehaviorSubject, Observable, Subject} from 'rxjs/index'; +import {ElectronService} from 'ngx-electron'; + +import {IApplication, IApplicationManifest, ILog, IProvider, IGlue42ToolbarApplication} from '../app'; + +@Injectable() +export class HelperService { + public showSettings: BehaviorSubject = new BehaviorSubject(false); + public showContent: BehaviorSubject = new BehaviorSubject(false); + public appStartFail: Subject<{startApp: IApplication, message: string}> = + new Subject<{startApp: IApplication, message: string}>(); + public showAppDirectoryModal: Subject<{show: boolean, provider?: IProvider}> = + new Subject<{show: boolean, provider?: IProvider}>(); + public logs: BehaviorSubject = new BehaviorSubject([]); + public clearLogsFilters: Subject = new Subject(); + private innerLogs: ILog[] = []; + + constructor(private electronService: ElectronService) { + } + + /** + * Sort array of apps alphabetically + * @param apps: array of apps + * @param key: key to sort by + * @returns IApplication[]: array of apps + */ + public sortArrayAlphabeticallyByKey(apps: IApplication[], key: string): IApplication[] { + return apps.sort((a: IApplication, b: IApplication) => { + const nameA: string = a[key].toUpperCase(); + const nameB: string = b[key].toUpperCase(); + if (nameA < nameB) { + return -1; + } + if (nameA > nameB) { + return 1; + } + return 0; + }); + } + + /** + * Add log to the list of displayed logs + * @param timestamp: timestamp from log creation + * @param type: 'INFO' | 'WARNING' | 'ERROR' + * @param origin: 'Angular' | 'Electron' | 'Toolbar' + * @param message: log message + */ + public addLog(timestamp: number, type: string, origin: string, message: string): void { + this.innerLogs.unshift({timestamp, type, origin, message, show: true}); + this.logs.next(this.innerLogs); + } + + /** + * Get Glue42 toolbar app + * Converts the modified app into the originally received app from glue42DemoToolbar providers + * @param app: modified app + * @returns IGlue42ToolbarApplication: glue42DemoToolbar app + */ + public getGlue42ToolbarApp(app: IApplication): IGlue42ToolbarApplication { + const glue42ToolbarApp: IApplication | IGlue42ToolbarApplication = Object.assign({}, app); + delete (glue42ToolbarApp as IApplication).iconPath; + delete (glue42ToolbarApp as IApplication).showApp; + delete (glue42ToolbarApp as IApplication).isFavourite; + return glue42ToolbarApp; + } +} diff --git a/toolbar-ui-angular/src/app/services/initialize.service.spec.ts b/toolbar-ui-angular/src/app/services/initialize.service.spec.ts new file mode 100644 index 0000000..2d6c7b7 --- /dev/null +++ b/toolbar-ui-angular/src/app/services/initialize.service.spec.ts @@ -0,0 +1,89 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {async, fakeAsync, TestBed, tick} from '@angular/core/testing'; + +import {ElectronService} from 'ngx-electron'; +import {HelperService} from './helper.service'; +import {InitializeService} from './initialize.service'; + +import {IApplication, IProvider} from '../app'; + +const initProviders: IProvider[] = require('../../mock-data/providers.json'); +const initApps: IApplication[] = require('../../mock-data/apps.json'); + +describe('Initialize Service', () => { + let service: InitializeService; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + providers: [ + ElectronService, + HelperService, + InitializeService + ] + }); + })); + + beforeEach(() => { + service = TestBed.get(InitializeService); + }); + + it('Should update providers', fakeAsync(() => { + service.init(); + tick(); + const provider = initProviders[0]; + const enabled: boolean = provider.enabled; + service.updateProviders(provider.name, !enabled); + service.providers.subscribe((providers: IProvider[]) => { + const updatedProviders: IProvider[] = providers.filter((prov: IProvider) => prov.name === provider.name); + if (updatedProviders[0]) { + expect(updatedProviders[0].enabled).toEqual(!enabled); + } + }); + })); + + it('Should update apps', fakeAsync(() => { + service.init(); + tick(); + const application = initApps[0]; + application.showApp = !application.showApp; + service.updateApps(application, 'showApp'); + service.apps.subscribe((apps: IApplication[]) => { + const updatedApps: IApplication[] = apps.filter((app: IApplication) => app.appId === application.appId); + if (updatedApps[0]) { + expect(updatedApps[0].showApp).toEqual(application.showApp); + } + }); + })); + + it('Should filter displayed apps', fakeAsync(() => { + service.init(); + tick(); + const application = initApps[0]; + service.filterDisplayedApps(application.title); + service.apps.subscribe((apps: IApplication[]) => { + apps.forEach((app: IApplication) => { + if (app.appId === application.appId) { + expect(app.showApp).toBeTruthy(); + } else { + expect(app.showApp).toBeFalsy(); + } + }); + }); + })); +}); diff --git a/toolbar-ui-angular/src/app/services/initialize.service.ts b/toolbar-ui-angular/src/app/services/initialize.service.ts new file mode 100644 index 0000000..28958b1 --- /dev/null +++ b/toolbar-ui-angular/src/app/services/initialize.service.ts @@ -0,0 +1,204 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {Injectable} from '@angular/core'; +import {BehaviorSubject} from 'rxjs/index'; + +import {IApplication, IProvider} from '../app'; + +import {HelperService} from './helper.service'; + +@Injectable() +export class InitializeService { + public providers: BehaviorSubject = new BehaviorSubject([]); + public apps: BehaviorSubject = new BehaviorSubject([]); + private internalProviders: IProvider[] = []; + private internalApps: IApplication[] = []; + + constructor(private helperService: HelperService) { + } + + public init(): void { + this.subscribeForGlue42DemoToolbarProviders(); + this.subscribeForLogStream(); + } + + /** + * Update provider + * On toggle provider, the "enabled" and "status" props are updated + * @param providerName: provider.name + * @param isChecked: whether it is enabled or not + */ + public updateProviders(providerName: string, isChecked: boolean): void { + this.internalProviders = this.internalProviders.map((provider: IProvider) => { + if (provider.name === providerName) { + provider.enabled = isChecked; + provider.status = isChecked ? 'connecting' : 'disconnected'; + } + return provider; + }); + this.providers.next(this.internalProviders); + } + + /** + * Update apps + * @param updatedApp: app to be updated + * @param key: key by which it will be updated + */ + public updateApps(updatedApp: IApplication, key: string): void { + if (!updatedApp) { + return; + } + this.internalApps = this.internalApps.map((app: IApplication) => { + if (app.appId === updatedApp.appId) { + app[key] = updatedApp[key]; + } + return app; + }); + this.apps.next(this.internalApps); + this.updateLocalStorage(); + } + + /** + * Filter displayed apps by title + * @param filter: filter value + */ + public filterDisplayedApps(filter: string): void { + this.internalApps = this.internalApps.map((app: IApplication) => { + if (app.title.toLowerCase().indexOf(filter.toLowerCase()) < 0) { + app.showApp = false; + } else { + app.showApp = app.provider.enabled; + } + return app; + }); + this.apps.next(this.internalApps); + } + + /** + * Set apps + * Get apps from each provider and add the following props: + * provider - app provider + * iconPath - the path to the icon resource + * showApp - show apps only if the provider is enabled + * isFavourite - false by default, get favourites from local storage + * If the provider successfully gets the apps, its status is updated to "connected". If not, its status is updated to "disconnected" + */ + public setApps(): void { + const localStorageFavApps: string = window.localStorage.getItem('favApps'); + const favAppsIds: string[] = localStorageFavApps ? localStorageFavApps.split(',') : []; + const initialApps: IApplication[] = []; + this.internalProviders.forEach((provider: IProvider) => { + provider.getApps() + .then((apps: IApplication[]) => { + apps.forEach((app: IApplication) => { + const iconPath: string = this.getAppIconPath(app); + const application: IApplication = app; + app.provider = provider; + app.iconPath = iconPath; + app.showApp = provider.enabled; + app.isFavourite = favAppsIds.indexOf(app.appId) >= 0 && provider.enabled; + initialApps.push(application); + }); + provider.status = 'connected'; + this.internalApps = initialApps; + this.apps.next(this.internalApps); + }) + .catch(() => { + (window as any).logStream.next([`Unable to connect app directory "${provider.name}"`, 'ERROR', 'Toolbar']); + provider.status = 'disconnected'; + }); + }); + } + + /** + * Update local storage with the favourite apps + */ + private updateLocalStorage(): void { + const favAppIds: string[] = this.internalApps + .filter((app: IApplication) => app.isFavourite) + .map((app: IApplication) => app.appId); + window.localStorage.setItem('favApps', favAppIds.toString()); + } + + /** + * Subscribe for Glue42 demo toolbar providers + * Add the following props: + * enabled - set to true by default + * status - set to 'connecting' by default + * Set apps after updating the providers + */ + private subscribeForGlue42DemoToolbarProviders(): void { + (window as any).glue42DemoToolbar.providers.subscribe((providers: IProvider[]) => { + providers = providers.map((provider: IProvider) => { + this.addLogOnProviderAdded(provider); + provider.enabled = true; + provider.status = 'connecting'; + return provider; + }); + this.internalProviders = providers; + this.providers.next(this.internalProviders); + this.setApps(); + }); + } + + /** + * Add log on provider added + * @param provider: provider + */ + private addLogOnProviderAdded(provider: IProvider): void { + const logMessage: string = `Will add provider "${provider.name}" with URL ${provider.apiUrl}`; + this.helperService.addLog(Date.now(), 'INFO', 'Toolbar', logMessage); + } + + /** + * Get app icon path from resources + * @param app: app + * @returns string: path + */ + private getAppIconPath(app: IApplication): string { + const type: string = JSON.parse(app.manifest as string).type; + let iconPath: string; + switch (type) { + case 'host': + const hostType: string = JSON.parse(app.manifest as string).hostType; + iconPath = hostType === 'Glue42' ? 'glue42.png' : 'fdc3.png.ico'; + break; + case 'exe': + iconPath = 'exe.svg'; + break; + case 'browser': + iconPath = 'browser.svg'; + break; + default: + iconPath = 'default.svg'; + break; + } + return `./assets/icons/${iconPath}`; + } + + /** + * Subscribe for log stream + */ + private subscribeForLogStream(): void { + (window as any).logStream.subscribe((log: string[]) => { + if (log.length === 3) { + this.helperService.addLog(Date.now(), log[1].toUpperCase(), log[2], log[0]); + } + }); + } +} diff --git a/toolbar-ui-angular/src/app/settings/app-directory-form-modal/app-directory-form-modal.component.html b/toolbar-ui-angular/src/app/settings/app-directory-form-modal/app-directory-form-modal.component.html new file mode 100644 index 0000000..9ac6bd9 --- /dev/null +++ b/toolbar-ui-angular/src/app/settings/app-directory-form-modal/app-directory-form-modal.component.html @@ -0,0 +1,79 @@ + + + + + + diff --git a/toolbar-ui-angular/src/app/settings/app-directory-form-modal/app-directory-form-modal.component.spec.ts b/toolbar-ui-angular/src/app/settings/app-directory-form-modal/app-directory-form-modal.component.spec.ts new file mode 100644 index 0000000..495113e --- /dev/null +++ b/toolbar-ui-angular/src/app/settings/app-directory-form-modal/app-directory-form-modal.component.spec.ts @@ -0,0 +1,294 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {async, ComponentFixture, fakeAsync, TestBed, tick} from '@angular/core/testing'; +import {FormsModule} from '@angular/forms'; +import {NgbModule} from '@ng-bootstrap/ng-bootstrap'; +import {ModalModule} from 'ngx-bootstrap'; +import {ElectronService} from 'ngx-electron'; + +import {AppDirectoryFormModalComponent} from './app-directory-form-modal.component'; +import {ModalDialogComponent} from '../../shared/modal-dialog/modal-dialog.component'; + +import {HelperService} from '../../services/helper.service'; +import {InitializeService} from '../../services/initialize.service'; + +import {IProvider, IGlue42ToolbarProvider} from '../../app'; + +describe('App Directory Form Modal Component', () => { + let component: AppDirectoryFormModalComponent; + let fixture: ComponentFixture; + let initializeService: InitializeService; + let helperService: HelperService; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + FormsModule, + ModalModule.forRoot(), + NgbModule.forRoot() + ], + declarations: [ + AppDirectoryFormModalComponent, + ModalDialogComponent + ], + providers: [ + ElectronService, + HelperService, + InitializeService + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AppDirectoryFormModalComponent); + component = fixture.componentInstance; + initializeService = TestBed.get(InitializeService); + helperService = TestBed.get(HelperService); + + spyOn(component.newAppDirectoryModalDialog, 'show'); + spyOn(component.newAppDirectoryModalDialog, 'hide'); + + fixture.detectChanges(); + }); + + it('Should validate app directory name', () => { + expect(component.isAppDirectoryNameValid).toBeTruthy(); + let appDirectoryName: string = 'test'; + component.name = appDirectoryName; + expect(component._name).toEqual(appDirectoryName); + expect(component.isAppDirectoryNameValid).toBeTruthy(); + + appDirectoryName = ''; + component.name = appDirectoryName; + expect(component._name).toEqual(appDirectoryName); + expect(component.isAppDirectoryNameValid).toBeFalsy(); + }); + + it('Should validate api url', () => { + expect(component.isApiURLValid).toBeTruthy(); + let apiUrl: string = 'http://localhost:9875'; + component.apiURL = apiUrl; + expect(component._apiURL).toEqual(apiUrl); + expect(component.isApiURLValid).toBeTruthy(); + + apiUrl = ''; + component.apiURL = apiUrl; + expect(component._apiURL).toEqual(apiUrl); + expect(component.isApiURLValid).toBeFalsy(); + + apiUrl = 'apiUrl'; + component.apiURL = apiUrl; + expect(component._apiURL).toEqual(apiUrl); + expect(component.isApiURLValid).toBeFalsy(); + }); + + it('Should validate auth url', () => { + expect(component.isAuthURLValid).toBeTruthy(); + let authUrl: string = 'http://localhost:9875'; + component.authURL = authUrl; + expect(component._authURL).toEqual(authUrl); + expect(component.isAuthURLValid).toBeTruthy(); + + authUrl = ''; + component.authURL = authUrl; + expect(component._authURL).toEqual(authUrl); + expect(component.isAuthURLValid).toBeTruthy(); + + authUrl = 'authUrl'; + component.authURL = authUrl; + expect(component._authURL).toEqual(authUrl); + expect(component.isAuthURLValid).toBeFalsy(); + }); + + it('Should validate email', () => { + expect(component.isEmailValid).toBeTruthy(); + let email: string = 'mail@mail.com'; + component.email = email; + expect(component._email).toEqual(email); + expect(component.isEmailValid).toBeTruthy(); + + email = ''; + component.email = email; + expect(component._email).toEqual(email); + expect(component.isEmailValid).toBeTruthy(); + + email = 'email'; + component.email = email; + expect(component._email).toEqual(email); + expect(component.isEmailValid).toBeFalsy(); + }); + + it('Should validate password', () => { + expect(component.isPasswordSet).toBeTruthy(); + component.email = ''; + let password: string = 'password'; + component.password = password; + expect(component._password).toEqual(password); + expect(component.isPasswordSet).toBeTruthy(); + + component.email = 'mail@mail.com'; + password = ''; + component.password = password; + expect(component._password).toEqual(password); + expect(component.isPasswordSet).toBeFalsy(); + + component.email = 'mail@mail.com'; + password = 'password'; + component.password = password; + expect(component._password).toEqual(password); + expect(component.isPasswordSet).toBeTruthy(); + }); + + it('Should toggle create and edit buttons on form change', () => { + expect(component.enableCreateBtn).toBeFalsy(); + expect(component.enableEditBtn).toBeFalsy(); + + component.isAppDirectoryNameValid = false; + component.isApiURLValid = true; + component.isAuthURLValid = true; + component.isEmailValid = true; + component.isPasswordSet = true; + component.toggleButtons(); + expect(component.enableCreateBtn).toBeFalsy(); + expect(component.enableEditBtn).toBeFalsy(); + + component.isAppDirectoryNameValid = true; + component.isApiURLValid = false; + component.isAuthURLValid = true; + component.isEmailValid = true; + component.isPasswordSet = true; + component.toggleButtons(); + expect(component.enableCreateBtn).toBeFalsy(); + expect(component.enableEditBtn).toBeFalsy(); + + component.isAppDirectoryNameValid = true; + component.isApiURLValid = true; + component.isAuthURLValid = false; + component.isEmailValid = true; + component.isPasswordSet = true; + component.toggleButtons(); + expect(component.enableCreateBtn).toBeFalsy(); + expect(component.enableEditBtn).toBeFalsy(); + + component.isAppDirectoryNameValid = true; + component.isApiURLValid = true; + component.isAuthURLValid = true; + component.isEmailValid = false; + component.isPasswordSet = true; + component.toggleButtons(); + expect(component.enableCreateBtn).toBeFalsy(); + expect(component.enableEditBtn).toBeFalsy(); + + component.isAppDirectoryNameValid = true; + component.isApiURLValid = true; + component.isAuthURLValid = true; + component.isEmailValid = true; + component.isPasswordSet = false; + component.toggleButtons(); + expect(component.enableCreateBtn).toBeFalsy(); + expect(component.enableEditBtn).toBeFalsy(); + + component.isAppDirectoryNameValid = true; + component.isApiURLValid = true; + component.isAuthURLValid = true; + component.isEmailValid = true; + component.isPasswordSet = true; + component.toggleButtons(); + expect(component.enableCreateBtn).toBeTruthy(); + expect(component.enableEditBtn).toBeTruthy(); + }); + + it('Should show new app directory modal dialog', () => { + helperService.showAppDirectoryModal.next({show: true, provider: null}); + helperService.showAppDirectoryModal.subscribe(() => { + expect(component.isAddAppDirectoryModalOpened).toBeTruthy(); + expect(component.newAppDirectoryModalDialogTitle).toEqual('Create New App Directory'); + expect(component._name).toEqual(''); + expect(component._apiURL).toEqual(''); + expect(component._authURL).toEqual(''); + expect(component._email).toEqual(''); + expect(component._password).toEqual(''); + expect(component.isAppDirectoryNameValid).toBeTruthy(); + expect(component.isApiURLValid).toBeTruthy(); + expect(component.enableCreateBtn).toBeFalsy(); + expect(component.newAppDirectoryModalDialog.show).toHaveBeenCalled(); + }); + }); + + it('Should show edit app directory modal dialog', fakeAsync(() => { + initializeService.init(); + tick(); + initializeService.providers.subscribe(() => { + const provider: IProvider = component.providers[0]; + helperService.showAppDirectoryModal.next({show: true, provider}); + helperService.showAppDirectoryModal.subscribe(() => { + expect(component.isAddAppDirectoryModalOpened).toBeFalsy(); + expect(component.editedProviderName).toEqual(provider.name); + expect(component.newAppDirectoryModalDialogTitle).toEqual('Edit App Directory'); + expect(component._name).toEqual(provider.name); + expect(component._apiURL).toEqual(provider.apiUrl); + expect(component._authURL).toEqual(provider.authUrl); + expect(component._email).toEqual(provider.email); + expect(component._password).toEqual(provider.password); + expect(component.isAppDirectoryNameValid).toBeTruthy(); + expect(component.isApiURLValid).toBeTruthy(); + expect(component.enableEditBtn).toBeTruthy(); + expect(component.newAppDirectoryModalDialog.show).toHaveBeenCalled(); + }); + }); + })); + + it('Should create app directory', () => { + spyOn((window as any).glue42DemoToolbar, 'addProvider'); + component.name = 'test'; + component.apiURL = 'http://localhost:9875'; + component.createAppDirectory(); + const providerData: IGlue42ToolbarProvider = { + name: component.name, + apiUrl: component.apiURL, + authUrl: component.authURL, + email: component.email, + password: component.password + }; + expect((window as any).glue42DemoToolbar.addProvider).toHaveBeenCalledWith(providerData); + expect(component.newAppDirectoryModalDialog.hide).toHaveBeenCalled(); + }); + + it('Should edit app directory', fakeAsync(() => { + spyOn((window as any).glue42DemoToolbar, 'updateProvider'); + component.name = 'test'; + component.apiURL = 'http://localhost:9875'; + initializeService.init(); + tick(); + initializeService.providers.subscribe(() => { + const editedProvider: IProvider = component.providers[0]; + component.editedProviderName = editedProvider.name; + const providerData: IGlue42ToolbarProvider = { + name: component.name, + apiUrl: component.apiURL, + authUrl: component.authURL, + email: component.email, + password: component.password + }; + component.editAppDirectory(); + expect((window as any).glue42DemoToolbar.updateProvider).toHaveBeenCalledWith(editedProvider, providerData); + expect(component.newAppDirectoryModalDialog.hide).toHaveBeenCalled(); + }); + })); +}); diff --git a/toolbar-ui-angular/src/app/settings/app-directory-form-modal/app-directory-form-modal.component.ts b/toolbar-ui-angular/src/app/settings/app-directory-form-modal/app-directory-form-modal.component.ts new file mode 100644 index 0000000..ff695b7 --- /dev/null +++ b/toolbar-ui-angular/src/app/settings/app-directory-form-modal/app-directory-form-modal.component.ts @@ -0,0 +1,254 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {Component, OnDestroy, OnInit, ViewChild} from '@angular/core'; +import {Subscription} from 'rxjs/index'; + +import {ModalDialogComponent} from '../../shared/modal-dialog/modal-dialog.component'; + +import {HelperService} from '../../services/helper.service'; +import {InitializeService} from '../../services/initialize.service'; + +import {IProvider, IGlue42ToolbarProvider} from '../../app'; + +@Component({ + selector: 'app-directory-form-modal', + templateUrl: './app-directory-form-modal.component.html' +}) +export class AppDirectoryFormModalComponent implements OnInit, OnDestroy { + @ViewChild('newAppDirectoryModalDialog') newAppDirectoryModalDialog: ModalDialogComponent; + public newAppDirectoryModalDialogTitle: string; + public isAddAppDirectoryModalOpened: boolean; + public providers: IProvider[] = []; + public isAppDirectoryNameValid: boolean = true; + public isApiURLValid: boolean = true; + public isAuthURLValid: boolean = true; + public isEmailValid: boolean = true; + public isPasswordSet: boolean = true; + public apiURLInvalidFeedback: string; + public enableCreateBtn: boolean = false; + public enableEditBtn: boolean = false; + public editedProviderName: string; + + public _name: string; + get name(): string { + return this._name; + } + /** + * Set app directory name + * Validate and toggle "Create" and "Edit" buttons + * @param value: input value + */ + set name(value: string) { + this._name = value; + this.isAppDirectoryNameValid = this._name !== ''; + this.toggleButtons(); + } + + public _apiURL: string; + get apiURL(): string { + return this._apiURL; + } + /** + * Set API URL + * Validate and toggle "Create" and "Edit" buttons + * @param value: input value + */ + set apiURL(value: string) { + this._apiURL = value; + if (this._apiURL === '') { + this.isApiURLValid = false; + this.apiURLInvalidFeedback = 'API URL is required'; + } else if (this._apiURL.indexOf('http://') !== 0 && this._apiURL.indexOf('https://') !== 0) { + this.isApiURLValid = false; + this.apiURLInvalidFeedback = 'API URL is not valid'; + } else { + this.isApiURLValid = true; + } + this.toggleButtons(); + } + + public _authURL: string; + get authURL(): string { + return this._authURL; + } + /** + * Set auth URL + * Validate and toggle "Create" and "Edit" buttons + * @param value: input value + */ + set authURL(value: string) { + this._authURL = value; + this.isAuthURLValid = !value || (this._authURL.indexOf('http://') === 0 || this._authURL.indexOf('https://') === 0); + this.toggleButtons(); + } + + public _email: string; + get email(): string { + return this._email; + } + /** + * Set email + * Validate and toggle "Create" and "Edit" buttons + * @param value: input value + */ + set email(value: string) { + this._email = value; + this.isEmailValid = !this._email || /\S+@\S+\.\S+/.test(this._email); + this.isPasswordSet = !this._email || (this._email && this._password !== ''); + this.toggleButtons(); + } + + public _password: string; + get password(): string { + return this._password; + } + /** + * Set password + * Validate and toggle "Create" and "Edit" buttons + * @param value: input value + */ + set password(value: string) { + this._password = value; + this.isPasswordSet = !this._email || this._email && value !== ''; + this.toggleButtons(); + } + + private subscriptions: Subscription[] = []; + + constructor(private helperService: HelperService, + private initializeService: InitializeService) { + } + + ngOnInit() { + this.subscribeForProviders(); + this.subscribeForShowAppDirectoryModal(); + } + + public ngOnDestroy(): void { + this.subscriptions.forEach((subscription: Subscription) => subscription.unsubscribe()); + } + + /** + * Create app directory + */ + public createAppDirectory(): void { + (window as any).logStream.next([`Created new app provider "${this._name}"`, 'INFO', 'Angular']); + const providerData: IGlue42ToolbarProvider = { + name: this._name, + apiUrl: this._apiURL, + authUrl: this._authURL, + email: this._email, + password: this._password + }; + (window as any).glue42DemoToolbar.addProvider(providerData); + this.newAppDirectoryModalDialog.hide(); + } + + /** + * Edit app directory + */ + public editAppDirectory(): void { + (window as any).logStream.next([`Edited app directory "${this._name}"`, 'INFO', 'Angular']); + const providerData: IGlue42ToolbarProvider = { + name: this._name, + apiUrl: this._apiURL, + authUrl: this._authURL, + email: this._email, + password: this._password + }; + const editedProvider: IProvider = this.providers + .filter((provider: IProvider) => provider.name === this.editedProviderName)[0]; + (window as any).glue42DemoToolbar.updateProvider(editedProvider, providerData); + this.newAppDirectoryModalDialog.hide(); + } + + /** + * Toggle "Create" and "Edit" buttons + */ + public toggleButtons(): void { + this.enableCreateBtn = this.isAppDirectoryNameValid && this.isApiURLValid && this.isAuthURLValid && + this.isEmailValid && this.isPasswordSet; + this.enableEditBtn = this.enableCreateBtn; + } + + /** + * Subscribe for providers + */ + private subscribeForProviders(): void { + this.subscriptions.push(this.initializeService.providers.subscribe((providers: IProvider[]) => { + this.providers = providers; + })); + } + + /** + * Subscribe for show app directory modal dialog + * Set all fields as valid before opening the modal dialog + */ + private subscribeForShowAppDirectoryModal(): void { + this.subscriptions.push(this.helperService.showAppDirectoryModal + .subscribe((args: {show: boolean, provider?: IProvider}) => { + this.isAppDirectoryNameValid = true; + this.isApiURLValid = true; + this.isAuthURLValid = true; + this.isEmailValid = true; + this.isPasswordSet = true; + if (args.provider) { + this.showEditAppDirectoryModalDialog(args.provider); + } else { + this.showNewAppDirectoryModalDialog(); + } + }) + ); + } + + /** + * Show new app directory modal dialog + */ + private showNewAppDirectoryModalDialog(): void { + this.isAddAppDirectoryModalOpened = true; + this.newAppDirectoryModalDialogTitle = 'Create New App Directory'; + this._name = ''; + this._apiURL = ''; + this._authURL = ''; + this._email = ''; + this._password = ''; + this.isAppDirectoryNameValid = true; + this.isApiURLValid = true; + this.enableCreateBtn = false; + this.newAppDirectoryModalDialog.show(); + } + + /** + * Show edit app directory modal dialog + * @param provider: provider + */ + private showEditAppDirectoryModalDialog(provider: IProvider): void { + this.isAddAppDirectoryModalOpened = false; + this.editedProviderName = provider.name; + this.newAppDirectoryModalDialogTitle = 'Edit App Directory'; + this._name = provider.name; + this._apiURL = provider.apiUrl; + this._authURL = provider.authUrl; + this._email = provider.email; + this._password = provider.password; + this.isAppDirectoryNameValid = true; + this.isApiURLValid = true; + this.enableEditBtn = true; + this.newAppDirectoryModalDialog.show(); + } +} diff --git a/toolbar-ui-angular/src/app/settings/logs/settings-logs.component.html b/toolbar-ui-angular/src/app/settings/logs/settings-logs.component.html new file mode 100644 index 0000000..9e21b87 --- /dev/null +++ b/toolbar-ui-angular/src/app/settings/logs/settings-logs.component.html @@ -0,0 +1,84 @@ + + +
+
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+ +
+
+ + +
+
+
+
+
+
+ [{{log.date}}] {{log.type}} | + {{log.origin}} | + {{log.message}} +
+
+
+
+
There are no logs available
\ No newline at end of file diff --git a/toolbar-ui-angular/src/app/settings/logs/settings-logs.component.spec.ts b/toolbar-ui-angular/src/app/settings/logs/settings-logs.component.spec.ts new file mode 100644 index 0000000..c57ba2e --- /dev/null +++ b/toolbar-ui-angular/src/app/settings/logs/settings-logs.component.spec.ts @@ -0,0 +1,145 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; + +import {SettingsLogsComponent} from './settings-logs.component'; + +import {ElectronService} from 'ngx-electron'; +import {HelperService} from '../../services/helper.service'; + +import {ILog} from '../../app'; + +const initialLogs: ILog[] = require('../../../mock-data/logs.json'); + +describe('Settings Logs Component', () => { + let component: SettingsLogsComponent; + let fixture: ComponentFixture; + let helperService: HelperService; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ + SettingsLogsComponent + ], + providers: [ + ElectronService, + HelperService + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SettingsLogsComponent); + component = fixture.componentInstance; + helperService = TestBed.get(HelperService); + fixture.detectChanges(); + }); + + it('Should toggle sorting', () => { + helperService.logs.next(initialLogs); + helperService.logs.subscribe((logs: ILog[]) => { + component.toggleSorting(); + expect(component.logs[0].origin).toEqual('Angular'); + component.toggleSorting(); + expect(component.logs[0].origin).toEqual('Electron'); + }); + }); + + it('Should hide type options on origin filter checked', () => { + const event = {target: {value: 'origin'}}; + component.onFilterByChange(event); + expect(component.showFilterByOriginOptions).toBeTruthy(); + expect(component.showFilterByTypeOptions).toBeFalsy(); + }); + + it('Should hide origin options on type filter checked', () => { + const event = {target: {value: 'type'}}; + component.onFilterByChange(event); + expect(component.showFilterByOriginOptions).toBeFalsy(); + expect(component.showFilterByTypeOptions).toBeTruthy(); + }); + + it('Should filter logs by origin', () => { + const filterValue: string = 'electron'; + helperService.logs.next(initialLogs); + helperService.logs.subscribe(() => { + component.showFilterByOriginOptions = true; + const event = {target: {checked: true, value: filterValue}}; + component.filterLogs(event); + + component.logs.forEach((log: ILog) => { + if (log.origin.toLowerCase() === filterValue) { + expect(log.show).toBeTruthy(); + } else { + expect(log.show).toBeFalsy(); + } + }); + }); + }); + + it('Should filter logs by type', () => { + const filterValue: string = 'info'; + helperService.logs.next(initialLogs); + helperService.logs.subscribe(() => { + component.showFilterByTypeOptions = true; + const event = {target: {checked: true, value: filterValue}}; + component.filterLogs(event); + + component.logs.forEach((log: ILog) => { + if (log.type.toLowerCase() === filterValue) { + expect(log.show).toBeTruthy(); + } else { + expect(log.show).toBeFalsy(); + } + }); + }); + }); + + it('Should clear origin filters', () => { + const filterValue: string = 'electron'; + helperService.logs.next(initialLogs); + helperService.logs.subscribe(() => { + component.showFilterByOriginOptions = true; + const event = {target: {checked: true, value: filterValue}}; + component.filterLogs(event); + + const clearEvent = {target: {checked: false, value: filterValue}}; + component.filterLogs(clearEvent); + component.logs.forEach((log: ILog) => { + expect(log.show).toBeTruthy(); + }); + }); + }); + + it('Should clear type filters', () => { + const filterValue: string = 'info'; + helperService.logs.next(initialLogs); + helperService.logs.subscribe(() => { + component.showFilterByTypeOptions = true; + const event = {target: {checked: true, value: filterValue}}; + component.filterLogs(event); + + const clearEvent = {target: {checked: false, value: filterValue}}; + component.filterLogs(clearEvent); + component.logs.forEach((log: ILog) => { + expect(log.show).toBeTruthy(); + }); + }); + }); +}); diff --git a/toolbar-ui-angular/src/app/settings/logs/settings-logs.component.ts b/toolbar-ui-angular/src/app/settings/logs/settings-logs.component.ts new file mode 100644 index 0000000..0cd1f5e --- /dev/null +++ b/toolbar-ui-angular/src/app/settings/logs/settings-logs.component.ts @@ -0,0 +1,216 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {Component, Input, NgZone, OnDestroy, OnInit} from '@angular/core'; +import {Subscription} from 'rxjs/index'; +import {saveAs} from 'file-saver'; +import {ElectronService} from 'ngx-electron'; + +import {ILog} from '../../app'; + +import {HelperService} from '../../services/helper.service'; + +@Component({ + selector: 'app-settings-logs', + templateUrl: './settings-logs.component.html' +}) +export class SettingsLogsComponent implements OnInit, OnDestroy { + @Input() openNewWindow: boolean; + @Input() logs: ILog[] = [] = []; + public displayedLogs: ILog[]; + public showFilterByOriginOptions: boolean = false; + public showFilterByTypeOptions: boolean = false; + private sortAsc: boolean = true; + private logOriginFilters: string[] = []; + private logTypeFilters: string[] = []; + private subscriptions: Subscription[] = []; + + constructor(private electronService: ElectronService, + private zone: NgZone, + private helperService: HelperService) { + } + + public ngOnInit() { + this.subscribeForLogs(); + this.subscribeForClearLogsFilters(); + } + + public ngOnDestroy(): void { + this.subscriptions.forEach((subscription: Subscription) => subscription.unsubscribe()); + } + + /** + * Toggle logs sorting by timestamp + */ + public toggleSorting(): void { + this.sortAsc = !this.sortAsc; + this.logs = this.logs.sort((a: ILog, b: ILog) => { + return this.sortAsc ? a.timestamp - b.timestamp : b.timestamp - a.timestamp; + }); + this.setDisplayedLogs(); + } + + /** + * On change of filter by fields + * Toggles the displayed filters + * @param event: click event + */ + public onFilterByChange(event: any): void { + this.showFilterByOriginOptions = event.target.value === 'origin'; + this.showFilterByTypeOptions = event.target.value === 'type'; + this.filterDisplayedLogs([], ''); + } + + /** + * Filter logs + * @param event: click event + */ + public filterLogs(event: any): void { + this.setFilterValues(event); + if (this.showFilterByOriginOptions) { + this.filterDisplayedLogs(this.logOriginFilters, 'origin'); + } else if (this.showFilterByTypeOptions) { + this.filterDisplayedLogs(this.logTypeFilters, 'type'); + } + } + + /** + * Extract logs + * Downloads all logs as .csv file + */ + public extractLogs(): void { + const logs: string = this.logs.map((log: ILog) => { + const time: string = `${this.getDate(log.timestamp)}_${this.getTime(log.timestamp)}`; + return `${time},${log.type},${log.origin},${log.message}`; + }).join('\r\n'); + const blob = new Blob([logs], {type: 'text/csv'}); + saveAs(blob, `${this.getDate(Date.now())}_${this.getTime(Date.now())}.csv`); + } + + /** + * Open logs in new Electron window + */ + public openInNewWindow(): void { + const preload: string = this.electronService.ipcRenderer.sendSync('get-preload-path'); + const win = new this.electronService.remote.BrowserWindow({width: 900, height: 600, webPreferences: {preload}}); + win.loadURL(`${location.href.split('/').slice(0, -2).join('/')}/assets/logs.html`); + } + + /** + * Set filter values + * @param event: click event + */ + private setFilterValues(event: any): void { + if (event.target.checked) { + if (this.showFilterByOriginOptions) { + this.logOriginFilters.push(event.target.value); + } else if (this.showFilterByTypeOptions) { + this.logTypeFilters.push(event.target.value); + } + } else { + if (this.showFilterByOriginOptions) { + this.logOriginFilters = this.logOriginFilters + .filter((originFilter: string) => originFilter !== event.target.value); + } else if (this.showFilterByTypeOptions) { + this.logTypeFilters = this.logTypeFilters + .filter((originFilter: string) => originFilter !== event.target.value); + } + } + } + + /** + * Filter displayed logs + * @param filterValues: list of filter values + * @param filterByKey: key used to filter the logs + */ + private filterDisplayedLogs(filterValues: string[], filterByKey: string): void { + this.logs = this.logs.map((log: ILog) => { + if (filterValues.length > 0) { + log.show = filterValues.indexOf(log[filterByKey].toLowerCase()) >= 0; + } else { + log.show = true; + } + return log; + }); + this.setDisplayedLogs(); + } + + /** + * Set displayed logs + */ + private setDisplayedLogs(): void { + this.zone.run(() => { + this.displayedLogs = this.logs.map((log: ILog) => ({ + date: this.getTime(log.timestamp), + timestamp: log.timestamp, + type: log.type, + origin: log.origin, + message: log.message, + show: log.show + })); + }); + } + + /** + * Get date in format DD.MM.YYYY + * @param timestamp: timestamp + * @returns string: date in format DD.MM.YYYY + */ + private getDate(timestamp: number): string { + const date = new Date(timestamp); + const day: string = date.getDate() < 10 ? `0${date.getDate()}` : `${date.getDate()}`; + const month: string = date.getMonth() + 1 < 10 ? `0${date.getMonth() + 1}` : `${date.getMonth() + 1}`; + const year: string = `${date.getFullYear()}`; + return `${day}.${month}.${year}`; + } + + /** + * Get time in format HH:MM:SS + * @param timestamp: timestamp + * @returns string: time in format HH:MM:SS + */ + private getTime(timestamp: number): string { + const date = new Date(timestamp); + const hours: string = date.getHours() < 10 ? `0${date.getHours()}` : `${date.getHours()}`; + const minutes: string = date.getMinutes() < 10 ? `0${date.getMinutes()}` : `${date.getMinutes()}`; + const seconds: string = date.getSeconds() < 10 ? `0${date.getSeconds()}` : `${date.getSeconds()}`; + return `${hours}:${minutes}:${seconds}`; + } + + /** + * Subscribe for logs + */ + private subscribeForLogs(): void { + this.subscriptions.push(this.helperService.logs.subscribe((logs: ILog[]) => { + this.logs = logs; + this.setDisplayedLogs(); + })); + } + + /** + * Subscribe for clear logs filters + */ + private subscribeForClearLogsFilters(): void { + this.subscriptions.push(this.helperService.clearLogsFilters.subscribe((clearFilters: boolean) => { + if (clearFilters) { + this.showFilterByOriginOptions = false; + this.showFilterByTypeOptions = false; + this.filterDisplayedLogs([], ''); + } + })); + } +} diff --git a/toolbar-ui-angular/src/app/settings/settings.component.html b/toolbar-ui-angular/src/app/settings/settings.component.html new file mode 100644 index 0000000..011d23e --- /dev/null +++ b/toolbar-ui-angular/src/app/settings/settings.component.html @@ -0,0 +1,85 @@ + + +
+
+ + +
+
+ There are no App Directories defined +
+
+ +
+ + +
+ + + +
+
+
+
+ +
+
+
+ + + +
+
+
+ + + + + + + + + diff --git a/toolbar-ui-angular/src/app/settings/settings.component.spec.ts b/toolbar-ui-angular/src/app/settings/settings.component.spec.ts new file mode 100644 index 0000000..e2db8c1 --- /dev/null +++ b/toolbar-ui-angular/src/app/settings/settings.component.spec.ts @@ -0,0 +1,120 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {async, ComponentFixture, fakeAsync, TestBed, tick} from '@angular/core/testing'; +import {AccordionModule, ModalModule} from 'ngx-bootstrap'; +import {ClipboardModule} from 'ngx-clipboard'; +import {ElectronService} from 'ngx-electron'; +import {FormsModule} from '@angular/forms'; +import {NgbModule} from '@ng-bootstrap/ng-bootstrap'; + +import {SettingsComponent} from './settings.component'; +import {SettingsLogsComponent} from './logs/settings-logs.component'; +import {AppDirectoryFormModalComponent} from './app-directory-form-modal/app-directory-form-modal.component'; +import {ModalDialogComponent} from '../shared/modal-dialog/modal-dialog.component'; + +import {HelperService} from '../services/helper.service'; +import {InitializeService} from '../services/initialize.service'; + +describe('Settings Component', () => { + let component: SettingsComponent; + let fixture: ComponentFixture; + let initializeService: InitializeService; + let helperService: HelperService; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + AccordionModule.forRoot(), + ClipboardModule, + FormsModule, + ModalModule.forRoot(), + NgbModule.forRoot() + ], + declarations: [ + SettingsComponent, + SettingsLogsComponent, + AppDirectoryFormModalComponent, + ModalDialogComponent + ], + providers: [ + ElectronService, + HelperService, + InitializeService + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SettingsComponent); + component = fixture.componentInstance; + initializeService = TestBed.get(InitializeService); + helperService = TestBed.get(HelperService); + + spyOn(component.providerJSONConfigModalDialog, 'show'); + spyOn(component.deleteProviderModalDialog, 'show'); + spyOn(component.deleteProviderModalDialog, 'hide'); + + fixture.detectChanges(); + }); + + it('Should toggle provider', fakeAsync(() => { + spyOn(initializeService, 'updateProviders'); + spyOn(initializeService, 'setApps'); + initializeService.init(); + tick(); + initializeService.providers.subscribe(() => { + const provider = component.providers[0]; + const event = {target: {checked: false}}; + component.toggleProvider(event, provider.name); + expect(initializeService.updateProviders).toHaveBeenCalledWith(provider.name, event.target.checked); + expect(initializeService.setApps).toHaveBeenCalled(); + }); + })); + + it('Should show provider json config modal dialog', fakeAsync(() => { + initializeService.init(); + tick(); + initializeService.providers.subscribe(() => { + const provider = component.providers[0]; + component.showProviderJSONConfigModal(provider); + expect(component.currentProvider).toEqual(provider); + expect(component.providerJSONConfigTitle).toEqual(`"${provider.name}" JSON Config`); + expect(component.providerJSONConfig).toEqual(JSON.stringify(provider, null, 2)); + expect(component.providerJSONConfigModalDialog.show).toHaveBeenCalled(); + }); + })); + + it('Should show delete provider modal dialog', fakeAsync(() => { + initializeService.init(); + tick(); + initializeService.providers.subscribe(() => { + const provider = component.providers[0]; + component.showDeleteAppDirectoryModal(provider); + expect(component.currentProvider).toEqual(provider); + expect(component.deleteProviderModalDialog.show).toHaveBeenCalled(); + }); + })); + + it('Should delete provider', () => { + spyOn((window as any).glue42DemoToolbar, 'deleteProvider'); + component.deleteProvider(); + expect((window as any).glue42DemoToolbar.deleteProvider).toHaveBeenCalled(); + expect(component.deleteProviderModalDialog.hide).toHaveBeenCalled(); + }); +}); diff --git a/toolbar-ui-angular/src/app/settings/settings.component.ts b/toolbar-ui-angular/src/app/settings/settings.component.ts new file mode 100644 index 0000000..3751fe4 --- /dev/null +++ b/toolbar-ui-angular/src/app/settings/settings.component.ts @@ -0,0 +1,160 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {Component, OnDestroy, OnInit, ViewChild} from '@angular/core'; +import {Subscription} from 'rxjs/index'; +import {ElectronService} from 'ngx-electron'; + +import {HelperService} from '../services/helper.service'; +import {InitializeService} from '../services/initialize.service'; + +import {ModalDialogComponent} from '../shared/modal-dialog/modal-dialog.component'; + +import {IApplication, ILog, IProvider} from '../app'; + +@Component({ + selector: 'app-settings', + templateUrl: './settings.component.html' +}) +export class SettingsComponent implements OnInit, OnDestroy { + @ViewChild('providerJSONConfigModalDialog') providerJSONConfigModalDialog: ModalDialogComponent; + @ViewChild('deleteProviderModalDialog') deleteProviderModalDialog: ModalDialogComponent; + public showSettings: boolean; + public providers: IProvider[] = []; + public apps: IApplication[] = []; + public logs: ILog[] = []; + public currentProvider: IProvider; + public providerJSONConfigTitle: string; + public providerJSONConfig: string; + private subscriptions: Subscription[] = []; + + constructor(private electronService: ElectronService, + private helperService: HelperService, + private initializeService: InitializeService) { + } + + public ngOnInit() { + this.subscribeForShowSettings(); + this.subscribeForProviders(); + this.subscribeForApps(); + } + + public ngOnDestroy(): void { + this.subscriptions.forEach((subscription: Subscription) => subscription.unsubscribe()); + } + + /** + * Toggle providers + * Show apps only for enabled providers + * @param ev: event whether the toggle button was checked or not + * @param providerName: provider.name + */ + public toggleProvider(ev: any, providerName: string): void { + this.initializeService.updateProviders(providerName, ev.target.checked); + this.initializeService.setApps(); + } + + /** + * Show provider json config modal dialog + * @param provider: provider + */ + public showProviderJSONConfigModal(provider: IProvider): void { + this.currentProvider = provider; + this.providerJSONConfigTitle = `"${provider.name}" JSON Config`; + this.providerJSONConfig = JSON.stringify(provider, null, 2); + this.providerJSONConfigModalDialog.show(); + (window as any).logStream.next([`Show JSON config for provider "${provider.name}"`, 'INFO', 'Angular']); + } + + /** + * Show modal dialog for adding new app directory + */ + public showNewAppDirectoryModalDialog(): void { + this.helperService.showAppDirectoryModal.next({show: true, provider: null}); + } + + /** + * Show modal dialog for editing app directory + * @param provider: provider + */ + public showEditAppDirectory(provider: IProvider): void { + this.helperService.showAppDirectoryModal.next({show: true, provider}); + } + + /** + * Show delete app directory modal dialog + * @param provider: provider + */ + public showDeleteAppDirectoryModal(provider: IProvider): void { + this.currentProvider = provider; + this.deleteProviderModalDialog.show(); + } + + /** + * Delete provider + */ + public deleteProvider(): void { + (window as any).glue42DemoToolbar.deleteProvider(this.currentProvider); + this.deleteProviderModalDialog.hide(); + } + + /** + * Open provider config in new electron window + */ + public openInNewWindow(): void { + const preload: string = this.electronService.ipcRenderer.sendSync('get-preload-path'); + const win = new this.electronService.remote.BrowserWindow({ + width: 700, + height: 300, + webPreferences: {preload}, + autoHideMenuBar: true + }); + const dirName: string = location.href.split('/').slice(0, -2).join('/'); + win.loadURL(`${dirName}/assets/provider-config.html#${this.currentProvider.name.split(' ').join('_')}`); + } + + /** + * Subscribe for show settings + * Show settings is initially set to false + */ + private subscribeForShowSettings(): void { + this.subscriptions.push(this.helperService.showSettings.subscribe((showSettings: boolean) => { + this.showSettings = showSettings; + if (!showSettings) { + this.helperService.clearLogsFilters.next(true); + } + })); + } + + /** + * Subscribe for providers + */ + private subscribeForProviders(): void { + this.subscriptions.push(this.initializeService.providers.subscribe((providers: IProvider[]) => { + this.providers = providers; + })); + } + + /** + * Subscribe for apps + */ + private subscribeForApps(): void { + this.subscriptions.push(this.initializeService.apps.subscribe((apps: IApplication[]) => { + this.apps = apps; + })); + } +} diff --git a/toolbar-ui-angular/src/app/shared/modal-dialog/modal-dialog.component.html b/toolbar-ui-angular/src/app/shared/modal-dialog/modal-dialog.component.html new file mode 100644 index 0000000..cc12f9e --- /dev/null +++ b/toolbar-ui-angular/src/app/shared/modal-dialog/modal-dialog.component.html @@ -0,0 +1,27 @@ + + + diff --git a/toolbar-ui-angular/src/app/shared/modal-dialog/modal-dialog.component.spec.ts b/toolbar-ui-angular/src/app/shared/modal-dialog/modal-dialog.component.spec.ts new file mode 100644 index 0000000..df0f0e6 --- /dev/null +++ b/toolbar-ui-angular/src/app/shared/modal-dialog/modal-dialog.component.spec.ts @@ -0,0 +1,56 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import {ModalModule} from 'ngx-bootstrap'; + +import {ModalDialogComponent} from './modal-dialog.component'; + +describe('Modal Dialog Component', () => { + let component: ModalDialogComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + ModalModule.forRoot() + ], + declarations: [ + ModalDialogComponent + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ModalDialogComponent); + component = fixture.componentInstance; + spyOn(component.modalDialog, 'show'); + spyOn(component.modalDialog, 'hide'); + fixture.detectChanges(); + }); + + it('Should show modal dialog', () => { + component.show(); + expect(component.modalDialog.show).toHaveBeenCalled(); + }); + + it('Should hide modal dialog', () => { + component.hide(); + expect(component.modalDialog.hide).toHaveBeenCalled(); + }); +}); diff --git a/toolbar-ui-angular/src/app/shared/modal-dialog/modal-dialog.component.ts b/toolbar-ui-angular/src/app/shared/modal-dialog/modal-dialog.component.ts new file mode 100644 index 0000000..96efcc6 --- /dev/null +++ b/toolbar-ui-angular/src/app/shared/modal-dialog/modal-dialog.component.ts @@ -0,0 +1,42 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {Component, Input, ViewChild} from '@angular/core'; +import {ModalDirective} from 'ngx-bootstrap'; + +@Component({ + selector: 'app-modal-dialog', + templateUrl: './modal-dialog.component.html' +}) +export class ModalDialogComponent { + @ViewChild('modalDialog') public modalDialog: ModalDirective; + @Input() title: string; + + /** + * Show modal dialog + */ + public show() { + this.modalDialog.show(); + } + + /** + * Hide modal dialog + */ + public hide() { + this.modalDialog.hide(); + } +} diff --git a/toolbar-ui-angular/src/app/toolbar/toolbar.component.html b/toolbar-ui-angular/src/app/toolbar/toolbar.component.html new file mode 100644 index 0000000..238db65 --- /dev/null +++ b/toolbar-ui-angular/src/app/toolbar/toolbar.component.html @@ -0,0 +1,28 @@ + + + + + diff --git a/toolbar-ui-angular/src/app/toolbar/toolbar.component.spec.ts b/toolbar-ui-angular/src/app/toolbar/toolbar.component.spec.ts new file mode 100644 index 0000000..3904cf2 --- /dev/null +++ b/toolbar-ui-angular/src/app/toolbar/toolbar.component.spec.ts @@ -0,0 +1,109 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {async, ComponentFixture, fakeAsync, TestBed, tick} from '@angular/core/testing'; +import {of} from 'rxjs/index'; +import {NgbModule} from '@ng-bootstrap/ng-bootstrap'; +import {FormsModule} from '@angular/forms'; +import {AccordionModule, ModalModule} from 'ngx-bootstrap'; +import {ClipboardModule} from 'ngx-clipboard'; +import {ElectronService} from 'ngx-electron'; + +import {ToolbarComponent} from './toolbar.component'; +import {ListOfAppsComponent} from '../list-of-apps/list-of-apps.component'; +import {SettingsComponent} from '../settings/settings.component'; +import {SettingsLogsComponent} from '../settings/logs/settings-logs.component'; +import {ModalDialogComponent} from '../shared/modal-dialog/modal-dialog.component'; +import {AppDirectoryFormModalComponent} from '../settings/app-directory-form-modal/app-directory-form-modal.component'; + +import {InitializeService} from '../services/initialize.service'; +import {HelperService} from '../services/helper.service'; + +import {IApplication} from '../app'; + +describe('Toolbar Component', () => { + let component: ToolbarComponent; + let fixture: ComponentFixture; + let initializeService: InitializeService; + let helperService: HelperService; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + AccordionModule.forRoot(), + ClipboardModule, + FormsModule, + ModalModule.forRoot(), + NgbModule.forRoot() + ], + declarations: [ + ListOfAppsComponent, + ModalDialogComponent, + SettingsComponent, + SettingsLogsComponent, + AppDirectoryFormModalComponent, + ToolbarComponent + ], + providers: [ + ElectronService, + HelperService, + InitializeService + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ToolbarComponent); + component = fixture.componentInstance; + initializeService = TestBed.get(InitializeService); + helperService = TestBed.get(HelperService); + + spyOn(component, 'setWindowHeight').and.callFake(() => {}); + + fixture.detectChanges(); + }); + + it('Should toggle view', () => { + expect(component.showContent).toBeFalsy(); + expect(component.showSettings).toBeFalsy(); + + component.toggleView(); + expect(component.showContent).toBeTruthy(); + expect(component.showSettings).toBeFalsy(); + expect(component.setWindowHeight).toHaveBeenCalled(); + + component.toggleView(); + expect(component.showContent).toBeFalsy(); + expect(component.showSettings).toBeFalsy(); + expect(component.setWindowHeight).toHaveBeenCalled(); + }); + + it('Should toggle settings', () => { + expect(component.showSettings).toBeFalsy(); + expect(component.showContent).toBeFalsy(); + + component.toggleSettings(); + expect(component.showSettings).toBeTruthy(); + expect(component.showContent).toBeTruthy(); + expect(component.setWindowHeight).toHaveBeenCalled(); + + component.toggleSettings(); + expect(component.showContent).toBeTruthy(); + expect(component.showSettings).toBeFalsy(); + }); +}); diff --git a/toolbar-ui-angular/src/app/toolbar/toolbar.component.ts b/toolbar-ui-angular/src/app/toolbar/toolbar.component.ts new file mode 100644 index 0000000..96cfa1c --- /dev/null +++ b/toolbar-ui-angular/src/app/toolbar/toolbar.component.ts @@ -0,0 +1,106 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import {Component, OnDestroy, OnInit} from '@angular/core'; +import {Subscription} from 'rxjs/index'; +import {ElectronService} from 'ngx-electron'; + +import {InitializeService} from '../services/initialize.service'; +import {HelperService} from '../services/helper.service'; + +import {IApplication} from '../app'; + +@Component({ + selector: 'app-toolbar', + templateUrl: './toolbar.component.html' +}) +export class ToolbarComponent implements OnInit, OnDestroy { + public favouriteApps: IApplication[] = []; + public showContent: boolean = false; + public showSettings: boolean = false; + private subscriptions: Subscription[] = []; + private minHeight: number = 100; + private maxHeight: number = 900; + + constructor(private initializeService: InitializeService, + private electronService: ElectronService, + private helperService: HelperService) { + } + + public ngOnInit() { + this.subscribeForApps(); + } + + public ngOnDestroy(): void { + this.subscriptions.forEach((subscription: Subscription) => subscription.unsubscribe()); + } + + /** + * Toggle view + * Toggle the window height to see only the navbar or show the whole content + */ + public toggleView(): void { + this.showContent = !this.showContent; + this.helperService.showContent.next(this.showContent); + this.showSettings = false; + this.helperService.showSettings.next(this.showSettings); + const height: number = this.showContent ? this.maxHeight : this.minHeight; + this.setWindowHeight(height); + } + + /** + * Toggle settings + * If the content is not visible, it will expand the window height and show the settings + */ + public toggleSettings(): void { + this.showSettings = !this.showSettings; + this.helperService.showSettings.next(this.showSettings); + if (!this.showContent) { + this.showContent = !this.showContent; + this.helperService.showContent.next(this.showContent); + this.setWindowHeight(this.maxHeight); + } + } + + /** + * Start App + * @param ap p: app + */ + public startApp(app: IApplication): void { + app.start(); + } + + /** + * Set window height + * @param height: window height + */ + public setWindowHeight(height: number): void { + const myWindow: any = this.electronService.remote.getCurrentWindow(); + const {width, x, y} = myWindow.getBounds(); + myWindow.setBounds({width, height, x, y}); + } + + /** + * Subscribe for apps + * Filter only the favourite ones + */ + private subscribeForApps(): void { + this.subscriptions.push(this.initializeService.apps.subscribe((apps: IApplication[]) => { + this.favouriteApps = apps.filter((app: IApplication) => app.isFavourite); + })); + } +} diff --git a/toolbar-ui-angular/src/assets/app-config.html b/toolbar-ui-angular/src/assets/app-config.html new file mode 100644 index 0000000..01db5e2 --- /dev/null +++ b/toolbar-ui-angular/src/assets/app-config.html @@ -0,0 +1,66 @@ + + + + + + + Glue42 FINOS FDC3 AppD demo application config + + + + + +
+

JSON Config

+
+ The application JSON config was not found +
+

+  
+ + diff --git a/toolbar-ui-angular/src/assets/icons/browser.svg b/toolbar-ui-angular/src/assets/icons/browser.svg new file mode 100644 index 0000000..cae0c48 --- /dev/null +++ b/toolbar-ui-angular/src/assets/icons/browser.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/toolbar-ui-angular/src/assets/icons/default.svg b/toolbar-ui-angular/src/assets/icons/default.svg new file mode 100644 index 0000000..8590120 --- /dev/null +++ b/toolbar-ui-angular/src/assets/icons/default.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/toolbar-ui-angular/src/assets/icons/exe.svg b/toolbar-ui-angular/src/assets/icons/exe.svg new file mode 100644 index 0000000..afac30a --- /dev/null +++ b/toolbar-ui-angular/src/assets/icons/exe.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/toolbar-ui-angular/src/assets/icons/fdc3.png.icns b/toolbar-ui-angular/src/assets/icons/fdc3.png.icns new file mode 100644 index 0000000000000000000000000000000000000000..5643ebb5956e7e6c3d6e1c2505d911071dc577db GIT binary patch literal 46887 zcmeFa2S63Owm+P`Hyx#eQUnDQq$r4jROxj$dhfj|MMPAppn_7R2ntHEH=5FW-BjsK z5J3eMEPx<_^PdeCJbKQ(=f3;yd*Azv;LIc|YpwjUl9f!7!P(Zs8-Ry=&fa2s06^SM z1Z29#Ci(`}j^Tj9(!$I^6N3h%A%KERkb>Pz&%n|Kju$jX|nwo;NxKKcWA|(Sn=3XjXApk{U zPDynZP#~xPumzGFSAzkHOp1as7r?sc7#Zv7TRXrqEzC{rHPBk$bTQS{x3Gre1wfyz zx_Iw*cZKVU0{m4#{2~#7Kmhm$AdrBC?OQrAhFn~Q9so{JUTR@pB-kN{Aj8rCQWL&S z2ecHWgf$Lm@XNEp&-^r!yZ~oN1!y_A0U)v1%K|@R;b%G`HwsMv_7rOq4nAj<$VvU`uq^{J?$UdIlB>U7NrA$96+JL&1`6@s)o^u2b9jUke-&l zj+v?Dc|fkk0gTL4)Uf9PrLDR;4vWWK39<|Vfc_kyCZi;GJE|*&$Ls3qori7QQbz}k zlMuD}l1vR3YYSEfjSuuRhocza9F(*G2{8Ovv^HLw7!?C3NPrF+gEcZV_(DQLMMuVP zSVvz&Rf`x!9|y?LMtGdAjvny|&VXQ7#p2MKnx<{OpvVE(38yeJ?qFbKhyVz3stX`A z5CRYgfq!9O)VY}qOjK0SnlLai=;*r=&tF*xkyKntRZ ztH6-C9o5-`!|CYg5`nSM*4Dy`i&%e2UIhlDt%VCXWVTj_HDJ(u7%e;wPmEdxMq3Mw zF*MNsLb3{sx3-?TiY76N2#l5y4y&WBOMF@dMg@b_($Fwj%did@)&B-yN-o6`S}Uq* z2{15SeZy@XZEfxC9WXGJS#gBc%IZ28n2ze|hPt{&XtJHC;wmuoz0aTPp;Dk~RpCRh_D@A`qI1QE)j)K}U6cU3+`$8VNNF z3z)Pt zFAhlLUn+-yJEgxOKuBrO{CPSO*xPCzUz319A(1E~AYRruqEHBc(jx%}xqlJ?=UAnI z|D$*FB=SdqtvYy|o&w<2!C|)%`{Ye#4m;s!T7!ddQ-_;-;5j232OV%G!qoAK1ps2# z%(XLhfjR=%O2Hiv3iwOF)F=?T8@^-;fNVav`@Ku&jph$zT+M%sm`(yt?gbRU%!(-i zkdgpN7E&WySQ?T4iPL%(b~`}0D15Kx#(x^VzzJ(bSxrBQHL~DcOILN{KeLt&kZ>u# z^GB`mH?>~lFUm|zBL);WCJjhYBy0Lz5dzn?13-F<^{W6B2v{q|nbXF$X|@3DziFs- z*#s`xT0j6EqDMghK4X1-J|aHs*3QJD{xYn?_gnfGQUr=vFK~cw{v`LeEWdBQA>iyp z^sHpGL^lF~6xdg2XsW58F_+*n5F{yi_r785VyVXUK15Dm?O+4 z2#^GB*&>We0n{5VTkX--)Y9f-_C0hN9##S@PDdMq(b2{S6N$KXqv8Q-3)sLE1gI#O z4oH|-s_VoBIubc>atNRjzy=!F9Fc%V7mYR0)e6$4)Bzxna}zJgM#?030Lrlsr>>!G zfDY27)LTv1PQnbcM38TQ8B%W1#%O42;dub;-pJrw#KdI4L<5d$>KdW7usD{TU%63S z0QBatnd%wf-~mSrF`8{BTmrIVOkSnb_$S3$Vw{n$jOt$02D2t*#t8nr{1vRIzYj#9d7gFr*`e!$HdQvyZ``A zCLl|An~~iPptV{j{(oh){#PwPLtR5vSqqIOS^!2}Mc)JqL2A@+rNWi3ucNJp*M%Mt zEx^MWtDt0JgLgJ`AXwzeJ`jYH$Kw9Mc~XLWVBQh_|)(%j^m1=tCRnJA0F9Cfte zG1YeqNV62hYiQzkFdbgA01Q?eHY9C4?pGEdCt+-^rX3gP@ZADfzgmD6Mqfu$8;{ri zT4!G@0IQ~s*VhWtq163_1>n)@8k#t60FTmsuz({PI)+-B7%U6i<*wNi(E`kj;Fh3| zH8uIs0?Ki6+}I$^Ut7R6c3>p^{~ZfxYj5l7=U0qXseLMWvRae_oRU`7Sx${x`Hw$YlQ82mqU0^8H#UM!ap zo{x0?WC9xqWy5{lRWSFKuayRy05fWPaD7o}YkzfHTTAOtCP0m;uCHpYZn}L89{l}a z0#G%ft+u?Z=4RDbZbTD!(b3u2-r53>AxDVOtDOMVMgY~ETp9P<{y6F{2xL91&?F@`9Pen|Jgw7ms}WayrqAc@T*7!;K=vH z-go~t68sg>x;PX_GJ*Z+J$O3&PX-(vtbID?w<5p;L}Gv;Kz_NdF(N*#jTk9tjN`tM z|0D%|mjZ`XREWb3Ko0g7^$UKXhsX7fhv0C~7j`|G2i-l~FdNsB5SX|NhnQCH5kNGP z^ovlS`8+Z{E-p631%TF^n53lA0ZjnUFc?Z}{0?Q0DgdMe1w5>e(O3fr3GjEmK~=Y# zNO|DJemJHgmiUrKV~hi2?S<(tD1M{Q2V`)`NZ;el>GGX{{XJ>2deJ(Zlrxo6X*52jG|*_{|Lx$c=rs%hfDMp!?t(ee0db z_}HAs`ovn^Tvy>?dudGTTjH7o1lXqWRTj`YcJ$~`bNV$B662(FfA&9+e3NXpZNec;R z=Rck(yZ@lyLeIkV*imp~5-{VP^>uCKWH82-R+grC6>D=_7hf#)IbiWPbX?CIr;5gF zscNce;IJA;!Aa0?`vqXu^;VR|VR5R;;C7pgIu@@>!{%gxeFippg}Cb*xZ$zzOy6F| zRZmkMgR?lG0dB+Gv}}}=_3@epCTcs4x62ypYGE7zNC<>8od^jlt}@b;=9M-vGsZ(w z9Aa23S`7>HL+I-VX;b4=0N@hB%Sm9h)q-#+Z5=!w&ZV#K?&Il!h9GW6peCz>HbLXC zT51@~G@ymw#^Z2@AX#n+jJ`K8Glr>+jA-FErxN~Bq8J=b0dH=siFE|LO))P3`IFbr zAH%9_foJU)btO#<-pE8(N~#Yaoo?L-z8MafYr47%4k_Za;GAlb8hD(MHh#cNxd$M( z6)p!s$mRR&ksuf!jHAG7XlZJ|GeWBZ*! zG^z%MM&R6mP28F|djaY4uvJNZ1?5c5fDQJEl#rF9kCUOTjWWDyh33}Kz+&|xANVP( zk=-k1t^_CwwoNQ20m*iD?wu4t5d5-_e21JiR?l4-mN`eLP0b z6xc}sK5n3|uY|*4aN78Fl%;?S0a)$L^$?+e1+|%k3}Db`yef2$L);moy@SQfMHUx? zLEzBq@(=(UxvH9&rH8w=mNdUCu%-0I@R`S};2n(3#GKa=HiOOd0Hi7@nc&r(T=cN; z0-q6139FYj8zvt0U0axpVu$2r2RDChth%@JUa$qHC5^$E%gR4@|ACAZxs`#=UR@c7 z!)vJP>FS|X;e`zV4$8}<{U{YF2OG7zy@(nSe=Rh;N~7{#@JQ(?w;$MTMoIzTjq^1F z+f;Nd?X2`wx3XjXJp5&3){(UVa&w>$fPo!41R`hgGE>tt+lh}}uRS%9kG~~wMeN4z z3j*Z3Ff!n*h=M}QccMqIk%`L~rDt3%yLlxHC$n3?JobBPGhifYd=voja9`|>lDfLB z8Xi3|@kBEuR_MaoP1*XJZ*@KYolgUx;H9R}GV~MMk)829dL2a_pkiR4K_a&cnF0|1 zr!*|ATPVp@wSBl~Q`XVcfgmKjOhrzu45Pa)9$qL#3Xmehe~cpM7Gh!iF$y+@GwSQ2 z2!NDaMp|UQ$hx?4K*F6B5{L=~WJnGGa8w#_VnD!GyGD_R1F>vC85nppzmf$W#UV-o zi751Ol;RXXk^+C2`1tX|w+a~nq8xtBwuN~!y#7YV!ls@DC?g`m%IbwTZ{Xfe00=TF zIHsYY^x0(iF^QzCVnBriTb0z5w!vd7_}v~7!Au5$OhB2Ea;<03!I01W2m~GiN(6W{ z*HYO&KQ=fAC=|ibz<_|0K=|*tj(?7}_g{BRN*XF^0wNNJ?3A?78n9zJAg^Y$=XCVB zsB_jpTU{M?OgBW19M;fe+b2;ItDprS9Vh^HOtP|4LIU`_;qlUY1%0O4=BECBYmUiD zPsc`98f|1@X<>>}wlcGEIgCcbuEhP|aXk|)6)l{miiWB>7NdR)c1(@8h>poqK?;k( zswjb*t90s|9b|z>FK-TFz^dVJ8c(TjRR<`xt#i{W74!yRMNv~=o_o< zG~|^r(9uNO!&Vls>X=RzR~c$Z@kkk)8sQ*G_B|MkmMR7VJ0?B7AUrh|Hb*W&oUAwo zuNs6!;k9u%IG3KDoA;qFj!9KkTgzAri_ug?qhZGccN$piK}dF+I9ksOm>R*l+w?b8;-(G_ZC8Ql%$k%CjySbwb7G7#l$E@p{zc{8TExbMst!n~o z#la39pr@|{k2T;G{dJT-J0`T27ET4a%f8nMjo;2}>MVl|LL+cm>+*bYOcoyQcugrj z8DK-6daV5{*_}=v)ipo#9vbj zUL{w4C*WHW?)szDRmY?mXacq>>%fjlPlbyObHvS0T6!HB?3l~|yyT&8s|7nIW=~U9 z9n+n-UpOXn-~!ehlQ3EuMDCWC|IsmN?UOdVba~Y=VWoHNH2bwn(gx06Qk=6a*D^ zLeRA9g~w$8>V_cLG3Df>9ro^o=4PiRU%Xm|UNrRe<#oa{rkaN8lE%D?b*-Hpk2)Ii zpqEW!W6jO5W9n`!$scIQuWhX>Z>p|pZ7j)yYQXe!*fG`CRh3i{S_*E#i(~N*8(Iku z^SdXS;r_p8u&cGTtEDNorfz=dMMGJ3eM@_N)8*$dH^QU(x|Wvmk!OXjL&h0H1LcHH zaA$M?&eT6JIQhK2GS2eC(A3jbC<%Y6sksr}HwGuQv@{c%+6n;B@vFWV-PBQ1*WBC! zuUf!Kt*zbtz1>+5gck*Q=iBT1TAE>6LNn}`T3QAOk3K*d=I0vPIzfBeDs^Gj_39xA zN~mvXy4UtJT^rfRCJYpC;ss@gmHVb|2q zpaJnSU2P>0Akf{AH}EHOCMtN&1j0SsFD}my1a)oT8q1I|s%Y(~s((2YvNpf@Hfthl z?(7@vEUjy~TTf`NHYqNyBeV=X?``-?=fq%}-bCp6d>>3hIV~M6t;vu6Y}VA?)!$Lk zLVyTZP(ZEn9=ZruQFCMSInPVdCw6$& zL=Ff|jco<+N@~={`c@aQX(+7)-X_$rp8J|}+SAk3(OPxhE)77Npc=Y(JS$&ZT3VHbON8eN$dbYFe#j{t>Cm&ZP`@6sSrEf}tppw$5 zHfoPy4$NzY+M2z;6V8Bk&u6-w6Ch;5P!l5%`V3 zZv_6=AOPWecbfgT$@vq;2*4TH_;T@G zSBChHd-?u^{@)x8AK;pTW{R%f8;2H7!;9ko;eZ5=(6m2%asjY8jX`Js(+D7d_~M)* zEENUYzwkJO|8aZde>)fmkOH~GyAEJM2vXn%UHi`hfB^JelU!e9!iW9FN8v*N|G|I) zDp2WnqeHg8gLhW^2Ll2KrdWNKhwPb#w{`tb1tj2_Y5oqze@G2@?=BqRgZM}kI0c3O z&-8(-Dgfif(Vx$%{zqUy@Cxq6rLRmW{SOtNdIVbe4Bch>tKJ8$qMySTbbd(qbHv~S z!mEdbf1;qc-B{oEanSPHzV@Fe{ze3R1o>Cg-#5*}o$W6OSk&vFxL?G7i9&H~<>dM) zz{d~aK*r9&{xz_z_FzA20LPF^8oC{JGm@eD6HiZd2kwi1&PkL2Z!Ihz?d$(T=zB~& z#()4~y}do~IW#zQ_jJ|VIH^MY$8H?=ve}t0l4!L{4!QC^WV)8Szltnz%@-@J2<~jt; z-_a4{;oL4^QnUztP9j@NXOf2Z#(fFIu>gE9^y}mLD=dEy@?OVsT_P<16Rh{QdovKHd6< zKulbfZwT-5`x0QeY+0Y7{B>(LsSuR05kAiYkFw!@7717@Ajk#Ihyt3>?QeP_fio2Q z7xMkSQU0LYs(k%*`QVm@Oo3py)(VCM#t>1Puf+uL(GiYrXo8n`+JmuoYU@|FNRR~& zfPUEkR?Gj-$|piX-waI=zaKyhh$`sm&UNC63gA9NL2wijL_wjez#!qn`FlSM{K@#^ zZ_0-SXnuqOR?C6{xFsm^2l22<sWbW=}ctB_{oG!*|APFzi;xFg5AY`wrr>e?AFK-g ze!`hF?5ZfZ72qyDs4l#0Lh%QX)@kxD$me{zDi#SOK0>a4sQz`Fzx2Q)#FGC($#qnJ zTRyxAvkA(C3k09wf*^xm$p3y)3ATTt@bB$&o!~FGtMY&9f7WX2r}n>=hvFfW4_7+^ zo>eR={zCrGLjEFVRleu1>*r78qwYWz@G(3DI1bH-{{^&vA@zIGs{D&8@Rt7XK~o3r z!C;bK%SV7~P(8dC76DE}FW`fS-+BEjcd+{&f`@3|y)5+k^C##iY~Oz_KND(#y*UD$ zg`NrhTjYOu_x|1Y@O~QdTCLVUEC0V&KHUGs?UE4R_brI;m1bLo^3UX7{f7VKzXAV$ z;Q!bAzqJZR-u_~LC!iUL|2qD#e7OC6_3>-hf7Jd8;Mp7kxI>Fd|CaXmxBL&FYk;o8 z(%}=E5M=lZ`Cq=A^Ut-0zuo`A8J<8Tu=!li}~mM*-z|=rnA8#G#JK3Vi#ccS9iapwV@+pns&s-;|F46eZA% z$f|sJ-q#F`@cvL%6j1sEMf^dhztZ9F$%jYy;Sh0LyUG&&N*4rOL#;ok4Crd0SAVBd z{D<}QIbdUZUI)5qnOX8~k_y2VkB#>D@|At2fE4|({>%l z{6^q60>2UXjlgdNek1T3f!_%HM&LIBzY+M2z;6V8Bk&u6-w6Ch;Qt5$&bA`^;V(6B zhKsYo1;2IcMygZr_C>(t;B)kl%b`76iN*YK#lctj`(A*>*~!j}xMZ{XOG3W3&_Zi_ z(9LV@%`@>YnQ+_M**mOmUm#Mg?FJ;K5*KWVYj$ve+1WxkNE^VP82!eMc)J?Du>bl< zLXJRu`+>Jn!5f~GyzH%g4thy#)wK4;+k0&_u=nzIKIpMkbeE)v$SzSx2M{-VA>cm* z1Md=o%mAajyt+Dm{SRagm=M2=MgB4t^>b_tAi@RI`(P3AqrsK*Tjo~+1ZJo$cB&+e ztK?yhl5e6r#eMOahv>FL`gVBVh?lPXOa^r{hL|sF0+o* zn5x}AzIohnG`QoN)ZJ4@MLu1|vzM!B6N~`r?j7aqhJ{5z#Kj7FTv$Pm9fXo1=kFK=$TowaWdBaj)>b zE2#3ap4e;E8Z@sOQ{K0fP2MVvII4HAVNiw3X+rMN6I9oZ>koB2JyO!qON|S3{n+T~ z2A2bU?9^Mf9ZS_WdKO|V7Umrc{~@XB6NQ*3)6dv9g&)COM}^HJGd>?qCs*I%EH`f1 zgw(KQ|JW)|vdjDQM2|^-`39kwn+qeyP~yd9hQ*;CBtNDgUgpnC3y?Z&w>@nx!KxMse| zs_&q5EzEX9guJ*;ytFJHxFm{+eAeLydD+3={Y7i9PG*<-?kz`Ent3 zNiDqUamW}y>4@?Clh346Z$eOpqQ?0GdLMj9 z;aaTpv+h9+EL3mGJ$*bihmjf;_)C>D8zfjC33pU)$)Bd#amU=r?UT!-e~Bk+Tfj&8 zef(`~zVm-jdD=l2I~snaNymHRSls@=Ga*OHy(Mm^84Pzu2+&Mhi+D-zH(|)g4Q#I> z3n0J$2`e9w!5A46MYph%U%Jiejk3~xRgE3jm~9h;sItn=U%#7Rn%ZX!t|{;S7#QEr z+|$k-lx4*EC^V0^xJ+Eh|NSIY;i+KTMfVI~F2{%!Bc-bPI5+zL;hLsg1Ff$j<2 ztsF&=V@FZMS{|$FSMXPXxRG8q#zkxy zcclZ&lV*#!;D}Fu_{ZWmX zN~5`SmUqYD!-ZseVhS|(R|ZQ-4Lah}_O&*5rM}%Lb~Btk`Gu}=l2t$FhT(vr0CV<< zq*J-N3X$QEZ*BA0;)&*{J&x3(n(2vT^2ecrlPnI1iG4foQTPq2w2|r2w@eaHL*B1@ zvrpviEDH>`+|h-#k|dPx$#_xq(Esi85BbWXJzmhk?1=4ljj84~oc?SR7)vR(&VhT5 z;#+DqSFyYk4Yw>~4p6h@L!0CWqqJU)?aLK%4p%U8zJ8@(zCBW9fnPIUA{`iP?E4t2 zrV{9TxVUdQ=Fa(m&S2L4(vMyGvbqGs>JXh-uOU)I;=KGdFhPEd^2x)S+vhI1KYq*O zlcXi;A{5z&s^{}L=O>V*B6KkSz`f9=7b1mqbMXi{#+JiY$74KpoKrJ7RC;TEKDyM* zqx!+el%oM{n`-N&vKxlfaMhuw2A67R92KuxM^t!4dgcgz+7d8~?c^GNVwyI=<1CV3>L_Wp$jja0{3X&b?Ek{u_Mk z+e9l9X1arnlpwYfX?b^=8_Ew7E<|P3isiG5VB~Sro1UoUCb(Z0Fd`#6a^_~7X~=?- zsrB|JHz$=exUL{i1U3w*wpWMz6V=jhEW#E?i7%CIh{+j$oYK>8`#R;Go1(#zeu1df z2}*j=J86;Ki2^z-dvPJkQexMGxsxlGsZVmV+*ie}0rdgS7tz6S z3_h(U<5y?i#1MqRlI2s*$t!0Vu{5ou8q^)0@lSljJ=^C6OHOhyM-y=AaTc}@wq9+* z>y7?ZrO=Napkq0o;~GSh2c+2`TAybd*OaM)@b` zrlm7CV(ld6_%#CpItOamGAZcv9s~#M#BQ@-meeaaTJ;ifEtuZ=Im5&FYzrR0ww<)) z6}nPk$1iL~p^?!=U3-Mi*ga@g4n3Ci7iBDMBy71HF{ zWN>EC<(j}MlmVFzX+`fn?U&pcvqgK*G%+f4AL~A*jNY-oFOo+_LB)T8m!7vG;e*}X zPl6)zER_c z$I-h%3}J`n_T*Q4YOOrrqhYB#^}(Qzi_j3}dWo0w+Ia+rc6?IcRhDPg>Ie}Q(##7P zxuF|hy}r*He@biUysW$XXT?3Ygm)_%yzUllz#q%&pSqK=BZ>&A+2OQ`PqA;X+iDP6X};8RL$v}o+e@3e5j%K9}wj+AB-415b^Bnh~p{z_?UTU zYmtVsZ_m3cG0)Cz?Yq5MY>(odBYeX0Z*g@UR6{ODG)qT}J|GXzyc&|dp|M@_gimXc z>ORQ(NzBM-(CHb1yrHyy-h=2zS=d8rGL*re0=M1bi+uR}v6+%|>42nbQ{L^19wCd- znZ@z%m~h#$iATGe`xmq}lv`I>-Zsz5c5Ht8TvJCg$?tMxhb8C!(BN>jjfdxPAIsi3 zn^{qmo^ZIbXiwK);zN5$CB5r9DYnFBj1~&Kfl&>4ydcPBT9PchyvytGS<>3H0M;5J9pMZo%vSqb5fx_++wp-Z_F@n86^Pu?_dpMGzE@Z2tayCmLN($1o;xMRuU z*hDa*F|p}F0Q&VZiD0groGVq&g(H6a-sC9+|XyGxlA4r0j9Z+CgN#dgaB0qTY4R%vUz)PwJvfDmmbfEn9!e^X)9U zQEwk@5WM+u*gLxI!F_G=(S!?Mmp z9O4aFh}%HRPh35oX2B#%{OR~ZW&_2;!&4E7pR`yQyTa`CY8%>;pVSTV6?7g58s$Z5 zxHg(4`7|xGj_oqeTz~@GYm6PoZqP3}cf64CpOmGprxTFsL0!O9^4qGty-);F(l;o) zt`mM5F*819)Al%gWxr?YjQ5?%H+w^rWz_kM8}O-DYZjwjVy<8o8sRz2$B!2#MC;Qt zOUO#hUo}12Jf>1!tsijh!4Spu#zF5xoT0lFcd*a<9u_Ge!`v@L9g<4s9vHyvz9!=` zG|=z!b~*3eZ8I#M_CRO=qsxf z9?qu}oHw^2aAeFjBS$$hinyO*h*lqz;1mK*0}&oo!(^m|_{3yXGXT0T2t zxNm%~pl@Q$rM;S}&-pP6d%Bpk9UKo1M|0Jeok)4B{QOMH3CF{3&z-M6GEq?%ow*>o zQ$*)(9B=mihau$03J&z-8W$gf)HpPP&)GhGY%STva?VCAtXbj#n<@u4K}BY4(M``Q zU1lkJZv;BaqNJ{|#&u4^0jb+^^Gfn$Iz^L7@RcrrSMr%MY4e*`lUmMAytE0d+?-puXtHd=^Zd}EBC1= zRrNhc_I_z-w^evNAtT1E|5|%V=OCN5*Gm0seb1QFz3-fI$%oo)3%lnX{Zy}o3Fe6S zK5!x|j|?Q_;+-L$G7pKft;CfkO+apNI^+~EAK6z1}e2f1+#T^@#8@;ujI80VN@7UOJ zd)J2SPAdENi%+hd4@s_%kp;uL`oop*oWdd*zc4dHwLA?L5r$H+@*nOTS-Ix-GNvc7W|| zvLuINy<2Ck-948CwFnK?;06I-J_${3$CQCw2If}Jk5Y+YeK%N`W_2!WZnvM&!J&_N zGN}~YcI+3hE1eYzx?WqzC6HFeSkLof_uDt|8I~g=L0Px>?I_Wbdwql`KD}{|Jbx@v zKySIaV{z$)lNpxbn9KRJyOAO%>;(OmRl{q@ns_STYi~UF*{aJmZ*$ZG>S6rNd!q;I zf`;wXaqTrmFUD?&E;{%B8yfseD)KHv^P8i+2JfGw1`D*yF5J2}>)nRgXWQ|#*3dyP z{i@f*p;uYL>^iq!OXtztOjgt~tlXgyi5*F2@w881i9w_(zB3Zs9l?GnMsJVW!`j*7 z3RkPKSC?>s*qDIaE`_$ZFYUelErbhr;0aEi63V2XOejns8RK-y zF1%zr$9he-3wvn?jb+XJc{kGR1Hp=k1tNsh@Br75=v{sScMm<5j`UG1?=Ma}Lj`Ww zEJfz{Z=)Y&E{F}mUiL25q>?S=r*D5rX6ifkcH>^Rqz!kveEDuB?JN_1WGR;{f18b@ z!Qk$K7wZ_EY-0>Xq|vNKx!dr>oP;lj5Br0;x8D0tX9&lkmnb%vo!oE;v+{7~c`v#h z2z{MYk;~g_vT_c8C^2G`Rmm z;S}38AraisXFXe%o-g0Wj$Cw!p_RXwFiXQ-i?4b8IIi8eHP!b0l^9a3_Q2XOrmDI7 zNRtQi$;phgWEr`BUfj9^NA~#48&-!|-4-N7J}|%jdEkTw_gT4-bJYAC7il`Zsd;YD za_JR68rj=XoxZ%wIc-@bFn0M4XX(Nxu{nhjCUqXJk42|VU!u1eGRE~J$ky) z%EN7{-}q4aTf_DmlQ-?UnQyyAp6Bj5)8irQ=`-h8%?6%bw~!MepLiRzJ++&%^`*~r zMdh33sN-Agmos_NC;T1HP*okxNZOLi{62!^3fYUQsh-=D*J5Aea-%k{dScgVGnGFX<{?DTlz!X}2{sYK->mKu6-I|ikgr9=wO&rA4`Ynn?mZ8rvo z2pqA;@+|7N&D~`1Ef4X}<0IUq_I7fNKX>W{*Fz;Bn_uS-URXeX%Q7=J5kTPl&r;E=_u**EjGMoglqTXCGmEY*WSI zR~iWChet?`c{&+BV0bw}mJ&1R|FTK7W#7ryt^0E7*c@ojE%N2Y*`e6u(vBOS!k*YiP7NNrn9(3$$<-F4YZ<*ma?hPQLh@z#{IyD7X7 zp7_kjs#6|mj6NQ+Z^f+v$Ft+!R9V#icobX38!AI;vjwx9JFgy0KYtKuEW;NiM=%=~ zLheV=n;J1DW|g)!x{xJ4Z*0jCy^hpw*yvk%W6u60f?Aup;?PxvD3fkAqZqv+yoN`9 zKu`YR-tfvp&lm-0jBI>X0w_M597aCMB|+WQRWaC@aA|wWW3JP}E3CPiTg?u5CdJOi zkLQjj80?QsQ~$@TPuw^6sd(K_`) ziaht82H$%WaJs_%aA4-g{E4AsX;e?Hrrx0@W#SdrnsBy>JL#M=zhsn#WZ_f9NSlP{Jc-n6&1g0_6vl- zVe+!Ufa2+b=?*e;=TGYAV>DExZC{DF&OEty*!dkD?wIXhIz`Y1Zpb`jJh5n($V1(f zP5bN4CvE}diDO3^`k(Fd+ZUY~AXsZGdGN9R(xxaYI(bO5#D6EG-hL+UVL-{Nq5DT~ zW9bLH{HgCb>q_;j?k}Rk*59skxG$15*41%0HIVV0$CbUYx(Q|5nw=)PrlN~CXtiYH zi#p5SZ)@eaGt5~OG%710vD>S0&#gN$IwM}niuF!2Uwhx+emsif(BqrzixaPx? zT?hOt+35pMm&CZ9re)+SuO{C-8F8<@CV+3OEOyZyyx?ujmDVCpt1z}t?JXqN;we$} zU$|^%ztG6-y6wQ_E6Msovqw!hbGDsM#qw1ixU621RDaQDj}omswS)wu*IeZ9A+g8u zbogmQ{&_0n2b8ZFfc|i!^Xz{7C;HHrA-b;qrW>tZDu3=5lWn)o*R}p2sf;yYPr?b* zOS%uuU7lSzxh!HO0Es-hn9-@4UE5q)o(irOFgNBFt`OT;c1) zTu^s!y<0#aWl$2owU8aiarRjP!9JgqUt^Zf_m!|T`McZg<A|VOOrFTRwlhut-<=J{#BN`C^pNS>7YI@9v7KbfAH- zz`@$g_iR?TxC@RgzAo8nVl(1dSsk~iT5_CK(??K+s>mv}80Y!QTJMuvzw(8dk_+90 zM}ys7(-VG~BX?#5tgA|kubqFkTV~IPy~qJ`lL=|04kUA*;)6Fyvbo~%r#B#xzDFYu zx9}{#IWT0)p6_I6x9JtX>Pf-ubVVfn&MB&si66t``8rzn2mlX0yzP;tXF9>VN1{&i zN@b#XwBFn#pFFOVE8m~`*g39ZMB95YE1$Q&!H%EBU2J1lAXyI6^67G|^yx##1aos_ z15O+@5aPLiPyEo*OV7FU^If`wlJQ2AjLEwqv*ynBS{Ns>_6nQRbdA|A9NKGzI$ZQw z;rb){Yj@O|#Ge<1Z+!8T#Y*LtM=?L&)iVj+ds;JDsvi-aO^$qcA^zMZ<%+bJV>EZG-rY%zxm5@4;qcZH$ycE9&s1hn-1d{bIqR<~7G0F4ayNr=aQCv+Xav=PIr6L%k**h8DUP&~lt!#PU?M+BawNHq{_z%e z4d%4k%t5*PCu_;4%h>c?7H1RY!bS;2&kz}dImwNu&N4EtP+axvup+r)n1;HUCAqsM zLo0fT>EZkQafb`)7e^8tTJnrg4$PHX+M6S^`|I{IA-t~IG0&Hd3*Gg9cKMKV2r2dP zxcGGTbAhPG-6!9w9eYX>E}*oj=y4fE%hj#~yNIRb@h%#h3)(U%^tX1nmW{kfwOl?O zOZ&*uZx|!4nJuCANPxjN1AD$u&M)X~6nmk+Tc-E1n}VUd<|0pakr-Ky)#|*KzY}w8 z(NXsq#TFl~!Tr4+JS`oZJ=hh6lp`H=jLLrd-k;v*aiZzCRLGVK)=e1)KD}v?9cHrc zKe+Gq&R3&-A;zR#pR{uR`!aqFIx87xxh`e$xy~mpI@AW+6wmP9-Ip{_qWPBV*l3v#g(e>eagWmY1;U zPT7mHL30)NA~xhFGsFwy97waBq>f*-u-x6Ra#+Wh8FER~^Eer6h8ej0PHNOt&r;$z z&!tCwJC9=3&I(Lae26x8*j}3^Ho|>9zJgl(ouRD0_cYRP9}OX0a%wr~h)a6(vGgL+ zXU8iL(Ux33Ogyb8EDbh?)tq_!!PCp;yv2}>!H1JMHrFh8H)&r>zK-6{TF89Q`|Q++ zr$c$j*bc3?ckk@nA?<@jweB-}mAfU|Ky|qC67AiNi_Y@FyN;T+&1TIcedGspila+K z42jw14_z+ye=_MrMRvRQ8HPEOi+}1#^(gYs;jrtxdo(bANa#v-vGZR(PVi=}08;yQVxGO8uv+a zyO4CC*WHXtMB)>&vl(5_biM2yolUe>tQ%#n4efHgs2&^{b#cGlqrP~zL1ThDVX-Yx zn(d-~bo-UV1w2oD9d#mh-8_6o70ADxnW+sbEaEKYIj%TWbtB!L(PJ@z{}BfReg3X3 zDWTJLe4T37oe)zh8L=;E`*nFppLMc2KIrHuK4b&5r=xUd@*ckDaG4o7H}cS6Q_XC% zX}NS&vazV5`_qmrH%RgqZXmyFb1`n0?P@LgtR9aHcQlIU$nX?z9$lyRr!Y5N<4=Fwzf*X26>xP|@h z7lg9Z=Sr{-XIvM`WSA+oIai%cS0^&Mm2S_%-N%J{Wewbh?)p1-NIdWKGy%nA#D3VYa5;Hg%dArBLuVL$7+HW+sOFw= zCd4W755jw%Z6!DrbeA{IQd!@W$>x1^>7X=C_=#xVp?AmpT<>zI#IEGB>Xo8-S`#O; zCblECX|q*R%8eP^bYG(6xD_2Pl)XuE<4gjNftkOP$L2`(xw*%3+E+DY@AB42-B{`< zU=q4=v!Y)Ix1CC(;ki61*Iqs4`neyhcKIB=rp7<<@UwF-$zC_Y$?Ref{mvhr)EQ^57v%^47( z!f~MB*ra829OS%d(JOh_Q5*T5{(<2qTV=ww8w&ADRLga;bQ|V-oq4jI=A(KPDmyP4 zk{aZ;B10A!#iip*`s&-{Gc&g`)TbGMd-_;LZZzDIoJ`QRSN}AFG-@8fE68k&>R#x0AEQ*K(Fa5!?zZ+3k8?>E>C^ zqNv57;!j34gpN73sIA*ST2#C}!&Y)KXrcZ_wHL|8Fb#Es#SQww&8dA$G|EwTY_#+- zueOwlR=HEX7Mh{Ec+33#)X^t|n9bE(g1*;r1PUhw4)3~#4^4~BmMSTgc8l~RZ5tM^ z_`2>{DBw1)*+iSQg;{V{xAGe`^kQ^Uuyx$@?fmYRU9wdbY%Y&%m^-b9oIL%=vQ;J80 zcWE$}&TYnf+?4T9oc+a$9WUEHdP-aF+Qjduc^A<)5^X(a&{TO#b`Wnso#RM;0L zYVL1U`@*$m_s;MaQxwNSV8U(L`{azN zI;xoE*bwpwnd6joZ*8gMhkg?MoTlZ(#nuu!+lzE;QKalT)g5+N_a}qw9&mKv& z>4}`#D=d-OKOcZ)nJMXsp4hl#zgKxPy1uA2N%?wI)s~U`imsVUZ};37cV%L%6%ur_ zxLO&zi432V|E8|l{01wT&5BjWrSybCDaQR-Os|I8_Ecis=saJR`Sp8Qoth?HpdAK5>xaSwE7)EjYGjN}Qq3y6cH*SE>SDb(ELeVxtWA zGylVM;pypX1Ga152W)}g2W;B^z5&|}%z1&F^x4=+{rC^YR7e-WjAFjCtw!(JfXV%6 zH?_Kq)5E=snrK~F<|P-8gq~14 zFL14TfQbz)xx=D_&Fq3hbZa@oNB;cg|5x5!ti_=~TLOkku;3IB+}+(Bf(F+B!8N!B zrwH!u?uEMrFWfb_yIbMfXVOp5ll$F%g*E!u-h);9Rry{iOT0uhmUK&*DxN3MQi;o6 z0N;ytrBornhm+?41;oDpvRH1lpJv*gn0st4GTdRp;#lv%M&+oE&AI!S8pV{%m-s~h zCoCywzdOgcx8%ctg(2iaZ#9FYgmD-q4&_sjJFx(&u~#%1!~o}KXJ+(^-|&-}#u^mE z{2^QY?1kbX$fvEj2v!>}pC#`p)bN=5_P3SPGt&4aY(LQ@!Q0&KH(V>5BW10*OfQ}N z1A5=2W*&^UsJ>S=gY=Pvci2h|kN;CR+WfNKAUpJH__?V6uA&=fFU`{k^KbH2$-PN*>YdO-Hr`&Ccs$ z(%+-+SHbT~pVxJqrqT^LA~PH=0(&hf{PpQlBLZq}U){tzSnixr67HQc^{Q3*N6OE} z_X(yyM7htr3Jh$N`2&VI6e1qk5Rw*Flb+aU3uNp^m16R-o;Mm81BjTk8b72cDx#`0 zSoZw)e#Rg6JbGUQc_`293s(G_L-?9M6%gZmugPmlzzVy1XyL47sam1lOBu>q!&*o` z4Bq}gH~rcrlzTz|gTGq`CX=;k?_%|?U}mmvIZB4OQfz>q1OP@aQuGF~|Nn|jngk}a z6>@Q1hXY0yVZh0*;uhLIjT-yHm}c1=9Odrhen+nBmB3hy+xHwVT#uTIehc-cIj$I* zByN6#w%FIy)HCtl;mXDx(#PmdGh!y2&3l-ee6Hn3G)uAy_E~JKiC!cOEMuhe^XD$! zre{Zud+MNXI=;-@V~%r^;m_1N!f)$*+;y-^{dHQ*zz2eT& zkuMcwkfIg2AhOPFDH`zjyT#;J1Oy$A{0)r>Xu!;dvo00Tejf^pHU4JutJ8%biNR-3 z16HXg*uczT=iBy}+JZuzJ4MpViqw}-R+1k!O!H!|J+hy70@RVK&N9C+t`QVFB65XF z@Qe!y*TxXqH8bRgA7DP^xsY0EU?1SPIlUk>n2+pb3Q`OAD1b zyQc9OnJ)7~-1n#H|MC%hhiz&c$qx>lh_SG0;IJ({s+tdum=hnO8!UVi`d}wJlN=2sv(-IsKDq!*{x{SjBOvgTGks+A#}VMp3#}8H!W{UfTpv z)>r5~Lh=u3b^lw*r24$QHs)R!H*DNfhN!SNayAw7#wdA9_$?rUn`|uizcA0Ej&+ao z3;cVUZ|GJUIlyv25z_B_z<9FtKVxEQ4y0i+`8C@;+=j`)sQ*85O*@Rl3jV`Yt2t`- zfje_5X2_m{%$85nknI6pzdGPM)xR&sfs4CfUHocfj04!#8lXrekZgbUu0cvwO z-uX)OZ!@IK-NQvzX%x{p%?1ATjWIbpD)jeCE^6%u24MAq42vf5xJW?my3)ghSe#)tP(Y$8 zpD3wB?FTXvS`j57p?6YzOKJ5Ys|+h9N3za5sN>8GmW-(WYBwQ5C+xQ58354&)Xq7f&d%SWVu%K+R*nYlU9q8KIxPUY_j0QFeB;%|S7$00Cq+n-! ziU(cNar#19-ET+W{-2nUoAtIT3n8bsuW_W>9Oh^*K5{}aWQ@qfkUKUFSz!1;O{6$@5=x*ZdlQMmH{f4H#4kG`awI0~X) zAm(di6YYzIlV2C#-eW6oSjTZHnmKPT*WC&9Ig6U0h%v#L;jl8;9N+Hbp=a*&PtF_0 z?jd52!S5oUU_Z|kNU}ZBq`vx@pQ@)R*|cQV(r#$lCVw7WKKK9pOvJB{d@yaJc1$^o zGWW`XbS-xVXT}M;e;an3iWM!&drj2!GuUn7_AG&kjY)=KQ!U3i!VFsv?GcFr^54_7 zyFD@X-`1+Sq4exnZp|`RU&$Yd5TEH;Up7$RrvwXpqg~WU)!4Ju8upy+yiFoX6V}>*A$e*2X7~-WAEfw2rb9YO&qdm} z+4TmxJn_j!$H_x!BnVl}Pc7={)${RXlMO))4lUQn3RUjC$rE^M<04Og-V9woqxOwT zv2i~wD|_N*GxUNqCT>L+606a>Q}O*Asdopk9=pzzb#<%ZFp9cmP~uYTH)*;(_=MZz z6Rysb>kOvN$XW-EAmwBXB<50;hN8m{d_tJTWj7{K+P((g4#66l|AwOj6g>RK9n5p2 z$mBnT4*cY*FIxj~iXFd=C0HB6NmrB=m5T$mhU23k2j~eR>X#z zNgY3;`jcIkI*e&T{FF7`$_-A{a`Sk^Y(!!s90f09*Mook=Lg{%9VMea^lun<0s<%( zxd=SX*j$}L;8{^Sqj2gj=A1r!bbE3K^h}mvZKZcW!(Tx5Od0M?HiZuTQowjOt-m*I zMkpX8XcBXodat=2T&GQ|_*=nX^C!-4(ZJp{&UZrHeKduA6bL*rE!8x=WilZQSwlT;4K3 z)pou6Zr_@;LJO%lr49CJOyE%S$RzdnBefbe}SA0m{vRHvs7}2!=l^ zK3dQ62-W}IRoVMnW%vUlh^KB!@S#8SE198;k4^|Pix1`{`DLwePRXJL`$gm?2s@dT zb!!DaTL%Hq?)Z*4iJt)ch&>)vc{o04BX9I| z>P1zOpUOK;Y+?4wchRW*^^DkJq)iC{TR!CW1RxUc6~5L4KJWE`cYuh3+eLDNQQlc3 z%3sq+0WOrhrPsG8NF)1q5*<0mfjz|!seybKBT+IcO&a_%AFyzQBo}e_8m*R6>!dI5 z5m&+&>kp}FXmO?5mEDJwUJr`;;ARI%eAJT~^@AD&3U(|jHd6z%|I_{3E^^??{VOj) zJN%1sF!CSpO5EERe^aV-sO-2Q-?-{^xgy9(ot5Vsv<>g_8T%WSZ7qV<{2Vxvi)+Dv zCj8>ZaUV%kS$MHL-2R_vIWD^<0$&~W2DUHm=3y&JGQ8_t|N6Ivr4Us%_5DBood2?ycG5bK zokVO*J6+b(FFRCXxjgLaY=fqZlVt0fE^i5OE(-p)O0bnp-$tVBEUED2L(N3-4cAzLgEr$NJ$P@B2sQg^H+H8I?t3 zmEc!l3G`klAX=eu3VPhhkXdq_h(i@g z`O0->D|f8NKhaR|C(>=z{qt&nDWV-50!cBJdGKK)L>X-R_Dz)}M zm^Eq`2+-xK(sEWyUc~#*ua8NfPRBW9a1OOATw-N>rbCqIWByANkO)6 zp&oS8CH`L+z41^o7C4ms^wP;(x`teLI3hZ0;}iNBUNldV1abwjVVkA>6|k~zGi|Ky znc(}+B<9tS# zXm(^yr#akO2rz6a1tCEuT;!(5N1g?1mZ%O9X6s?-Pa|JF7YjmI{E3V^m0Fys%!7x& z^J2dq*r2HgCU1J1vu{o5!*9#a$t?E;_*UDdM5OvZ41Bxyo4GBXA3V=*&C;TFGcUgh z?-#q9dmzu?snz<$`8Qupv3nJQ7w>!?O(n3JeJ|2iy$yDKORQ@6`u7 zY`#cS>#fF$i#_TTPd5qn3<;O%6R|`iPiC5hnQ*7s?3Hcf5ZM+97dcYhPCB?{7|ofv z2U`A?Ux-f1`gyGR+smBJX-QcB+2Lw-9LN7eXXs#_IeyJfk$<569>@&2H-xgQ*hS*CTHLePkl?$4mfE!+D8;VJ|Qj9chdc*oPGO>^v0x zL736-T{J|(doeywSDDL!yy2}$LN(%SGV6pX>MVTK}YIYNoe(d57 z*+j7;Loqiw0lwL>{#xGHhnGTa?`AxFeE^PYf_W#B;-Jy{M4R`o&3y!^t}Cm{i9Zgh zSs;&yZ!Q#GHhD<$Qv>0EDzngMr&8e|@n}Q3$MQ9!kTa)$4k0fOURkfCqIy4YVY?u2 zFM0s6dTf}b&jwzDOF8pFa%7bl{}>FrNG`)Y*(Q6gfL&Hn7~_4Eijv#2;$XWt66Y{XhHYjd3(4{qk+7S)~K%=x)BL zr~Q+|byRoZBcw#Bp|fCUM?`Yi2$<~0O)XBc*kbpqlZo_HEF}A!_3Oad?&2L0)qU4r zsp`xLKJ^ddvd1E@RsWHMk9EY$5%g6I27OPg3`L5(p_05k9wWnz!KZz`Jt$% zxF9?;Y~31v403`A9^z8)jk5HsB=fkt458LO@WgzWTHRDRb zVb_TzgQ&Zf-6)m6($Z9gQ+g*qW#i_uM{d4l4$lkdp9K3+Mk$2PwKNk z`7SoZoJA3$c`qUP`QI}%csM#VVa1|d@HKH&8Ohb(URZXY^auI2*zZYTef(g5z~Y3Q zpCuErH9GYcmmfj0C}izvt!+WP+RN6y)RZ_7X0&ktB{-@5>(wOca8uo!;ue$I+ROH# zrG{~k<$uxDkFGBAxc7plhILsDjTeZTZcc*~ce}FLr!i*RmYr}R zqJ@q~6*XEEW-+TZU-)0szI5+QamM@aT{pt~8j@v(&$eDd4cD!5 z?JfC^6OMOBAXpWH`^of@sktuzu~p5JLh+yuS$hC~FW2|#(2*Ur^6&}j$AAXiN^(%3Q5!RIBMPYOHq&F+8zOAqHS(X8?o zsu@pcc8BFxejc0An%H=DR5edTvPQ~^x zp{5$Vj^`H+AxqK49A2s`aW0V=i=|`TISmEa@r5PIXxRtkaBm_lRJ>BFE^<=Ze$NI7 zDG85GDW77nMj=|?1FJe@c*Kg#wWqc-{RK)JkwT9(DaVxaR+Xu^;Sql?EsVT=iTV`Y z^Mintlmiwa`U?X|B2}h&17piQJ>FWV)P_H>43Gt-x0!auu7`&<99b=2;B4qMh?Ogg z`9(k^nUr^9rI%LREz(h*4hObB!q9Cz+e+t~znEktF1Z^^pI0;>)C>b+J`?(89i+-0 z8^loqrVsi`cS?#2*Ilj;Vv1^Iskba(gL?Fyy$&Px*S;5ir`j|~y_v~uv5!TM)Ku>? zP`tb!tCzH%Q{BF-sP}#+JQvd8;CNorD%9#gv4uM(Z5HJkgbFZGaT_}9{fga8#4Yfn zQ75w3sTV(#M75d+pU!I_3v;(0l7uTxP)@|GyEG9^IzU?jreKtVJkFO-OuFQXLGlwv z)`-N;ki=$}ngvTSWP$Rrkk#ZjKM`xKVZZKLD zjp_$wUzy`_Ewjmil^mW=UN5QlPaBU!k-&t>W8}=?(fDfNG$wn{B@=z zIU3_4f3sh7)oj;#FwQNX)sH2QnJ_5R3ijoB4-V+QRrU~U`(CGMl5T>TU$?>DqFoI7 zdHR7Ni|@qq;#Y{5P|i=g+nE(=v*EB*qc}WgQ0TbpT+$jb{wP6@B3p0Mu5xa+sy@m5 z8?X^As_pr>DpW_AFV^)WKg)jRvsr-V1b^^BEIPTB07qPCxrq~M$VFhir%>D1xF$LO z7RP00KZwT3)Hzmz5J$eoMrBVKj8e#`g`Br{ixQ`RxtRMP{T2n!F>#wn$_Tq0?#R~p zR}SuVCuRxwm!?~@s7isu+D(zE!x1S`li xzB$_F$X_!*z;KW?rjPpIzmAj-j?N~U_{5A)i)AWLODsh6?dkWYKlmTZ{|C)r74`rC literal 0 HcmV?d00001 diff --git a/toolbar-ui-angular/src/assets/icons/fdc3.png.ico b/toolbar-ui-angular/src/assets/icons/fdc3.png.ico new file mode 100644 index 0000000000000000000000000000000000000000..9b1e372df27cc6382cdcadd1faca6383ce93ea2e GIT binary patch literal 370070 zcmeHQ2Y4058of7x(0lK_gHogiLMOe`s{$&DSg;qshl&*yeNSxgP_S22I)vUr2%-XF z0Yw3yqF4ci+;`60{V$tv(|hv&UruIr`ka}6W_EUVufySV_&F#}M`K6p#w8qA!ajSp zbzR!&m{$o;~*Xl4fDyz@nn~7zYm?tTuP<+`iMNPaid7#*En8Zo6&x zWtUy%4+g3gau%c?Hbp&REex~S#VtE#4AP4Pf`Gojr9fSPdT$r@|AIIckR$4?T|enY z&O(5zf&0prFaKhlI(3#cZQ68W%a$#7w`tSn3$6C0M-Dn0Z#%m0FDdfurgp5a_`~a?vclKDTA10k$-Q1 z`uifV3pfcR0WOvH9Aelpi^4rAScuoH^6e4_B>P)f4Nubtsdx zEzMOxpZqRoHuFzQ|Jgs;r`bny3U+-EE~yV^fFrybAOOC_WV{R%HEE@{j>9`o9j@OB>PT`rkhfi{T}!mV1H*`)Th5JJKd;b9!gO09Y=Hl+Asm|8tdrVyyq{hwOjUdrBpM zdsEbj%%X}Fw>He?KzASt;Qjs!zz*OCfc>6%QujF*N*Rv8eht8MD0!g+6_5|_^S=aG zCYFtmvFc~oIX2w|^Z*z>qawP@ID>%u0FDE{15$t1o%aX4-U)ErFynNkN|o}W{>V;6 z_210>(h+j2-*Ml662N_Q>KErhnuO>8_23SmB0v!xa$n`lf1_VWiffJg0j|@TFXv*G zMdoDA`7?p+jz{)7)IfU7^H+d*F<;?<_V24zs}=y0Qo?QM|J-Ik^*>MapUqenXbM~o ztOsN*z;yuoKXu|H!2NORX-kU|^t>mzOHJ#DMC5GX2kPpJTrlP=A>oLA&S# z=U%R-9|w*D)IqL=WjvtUZGcF2%OvSAUkdL{4goUec=Qi$PXH}}ly#7@!zU$pXLp0dwJJzNSj04O{MkQ-}od;K{EtOZyOqyMzy8Nj#g z+O^{vNF=*;mvq$h!hq_3p6S1^&;BfZn$Q1l1%3ml2Xa45eS9B~=i_$0fpexs^nVUw z+VxHD!&kw*v6U+IUcy^WIcnJJABL2<_s25vnX?)H%9bsg@ci@7x0YP*yz|c7ERSSU zEKSw_JlB8eXEFwG&YcIy{jjV7xK};`ka;*OI$)2(d-_d)j5ECFpq+aW9$kao9tW4X zCQ`3q$U(+G!$FxcWq$13x%0iDp`qL_aCGe0F{kc&k0~UAd*+Q&-|o5O<{iykn!)VkB^V5 zbm`KGZQHi3!+?LltQ2oz0{byT<4zPbm1BU^Q0kQ_5oqK`Q%gpMgJ$!w{ z-wZH4x#y?-1)wn?Vvi$kxoL`C_d_Os04&p=G;uHRJDveV;arg!!=_H1n%8ARF^ayZ z{^zUyvxCVPK>Mozb>MHyr2QS>G9a@eYl||7$T5U-eaf^iw-OaSv@Y|^kbG+)$F%_0 zCT4wtHNZd3nl*bfARxfpo8UcTJ5PC5z@na!>VLlLzkQ897X9rLfO;zH^lxFm0uagQ zJSe(V8xa!#yY6$Jk!O{8UY8%Vj?(ZN}8NU8tJ;Ks2*M8e8-N>g--&ljfx zqEFO&rhN#IXZ@vM&rh-I^-Cy-3v2(=xc@inAG}jI7kdCaKdq7r45j$K zWUO#sXD*6!QjCVDMqYW-B^bl&?Pw9=9>;0UgV0}@8^gj3#2-MV#UOmjf*d-?nOKQwIE zus0(jB3{8aMqa=1#v5n8{PN2@AEA;945z%Y zJ-X%=fY0e=9q=9OVSudt(^><_Jw5mSQ|kX#xXIWd;oy}2g7v=>=Y2|y8a1jUzC&Lk zIy$=K%{SldyL9PNDR2H4vWS&H^}j&se=~HmcY(hF(cd3nzXB)&P}0(W`t#Y}y@14* z^*^5_iWDgQmqMwTcMPch7byLgxt-7Ep9f9@qQ56$zZs|qP}0-g`UvwhAo015;IoA1 z0Fm_4kZ@`iQ3h213zYtgKGsHedlZm+cIxmc;9r1zlTXG9IC+(}aD5pN{g*Tzu!WZV zY))z|P7J927fAiDjy^aW_yZ9AE&9uIKnnrh z8&J~I|3L_|5s>&ad4^yLAfoy&OcYZy4gHsX!|%{_E9CSP7X24}EDye~26)de?ZCaj zrGT6Pl4pf*@+u*4-3ds1nx6sV0TIbhuGK7N45Xp|+$(0E;rr+h0_-{||%&tKSoBs3J-Iah{|Igt1RUo7K&$9x%0JfpD<;Sp(1VmK-g^6NnrlJ3Q zUc|n`e#d7|$MXr_AYb0E^W2KO2P*murwoaNFX-!k(MSG9$7CR-{=WvddRC3ooBzWR zZZ}}pe|}?-=fl8b zz`Q)hL&%S3VQ&Yh7Zm$C*X@$_|H7vKIko>64_erU_Wi#RHmdag-$q7pw5Fl|GT-wI z8PAdxW+`m?&*y*F0QTqqS$Y1q18GP*(&RnVI6y@8UzjMSW*Yi0bH++g)5k_nX6Ig8 z)O@oR7X6oURsvHu0`~KNd>7yapf*5B@BGgIgoy*}`p@$}e6Ap(`Y%irQ!@+t&pyL3 zAU}}RRua7`==c9p&MK(rZGc_>xev;3dDZ|Z>FIxOgjo*Q_5U!gd6q&%^^q>2j_X6_lgF4KyfO|0207`oL&wIAF0lWSm!!^eh5!HWTqL`Yh{{`~> zKd$k)&&o6ZqQ5)~FdN|7fFfg>`|9HVt>Ls7koYutp6Gr+B)v2woSH?H0oDHkrT;Rg zH$-=P5jX>g{{95}4L}8elAi9?L6|22iO(|}e5Ug(Ad+4h5>Cw`%7E&Bfzp3D)7Ko` zZ5hDxR-(TrU>^^Z1}N#R-Af_NJ%GfQvE)5Qwxn3=|Ib^tIPDNpij%4OUm*3r1NtDJ z-SHU==WXinQ6Lx)olQ&sWgRiuip%(Xen4{zAR=kWb$*+y6Te-|vCE)i$BrfMxZ{qr z>YAZ4Khv$7&!(v8k~;VJXM|3T<<_-!vooi~H`s=Ih5EyZ!JJPuzR>$tUN0J#XG!U(S7S z`u_1nSW~z;EE3mPXcJV5gu`#?g(>cXL!W6XL|LXF{54k zhRi#rQRDQ++^iHa-{YwM7byK_e`p6R21Ng9at?n4F#Q>3dVNvGhqeg&E+BgdOzTI0 z`+}U?DCwo;4wZZV?fQQcviTP9)V+QC_8;AI&po{|ll|s#6U^9lZR<9*7xw9U>&~$7 zUAw{~euR12=sop6rS7}O05dM^c8?E#Zwn3kX-{O-fsY0cSumk_i#}3@75)0>H)m3m zY@4e81xEixx5uGTj{}_l&I8niL?8l?Fm|1R^F<>4liv#BxFKr@rp5h)*8#bgkaYl@ z@s~c{h?}3{_LYHj_4*8bzePU#k z3pfvbcI}RcOahJpdw>nVdSD0eCGclLL?pu|?L~OT+Y%D``9qax!3_t3`!viB!@iQG$QWF?m0 z{n)Pm*qS$Wm%R#C=gysHV_%NnLrGKCjU6ZaIbIG3=)E;GY>TDy|4^T|hlQV79~8U~ zScb9TY3TWMj0>^AP+%|+0ZfAXebDzMYXgJgFn)Xuw=*0Im=^p_Z;g(*XT{jDHCUK! z5s{ue(=1#8_Ei1Pcl{S#WiM$3ybp-}%k%&H=xK>PytsKYMXx%;Q}zJmJTb?CC|jhA zrfG|k}GFWOj*}+oxcuXnsPru za~W_6K#{S+eU*3rC11|(tot#5<&<&nJEzmxAJ-JAkNe8@A9`;5U^W8QKv&OES2^!P z_rH6kU;pT!diBj3;syUc8RgI6x^^1JoJt=K9`Y~TH*jx|`vXZBTh3sNd02|Dt+&6u z4aK=on5zHzuKzNxu@Aosu>X73zpyU`xGu=7h;DIx&wGF)K+3eIz>Sh$_W+V_LzF@0 zexv(7K0aqVbm;K(xN+m?=jhh0o79Jw9{FMU3Zu`sM=1Tp{SRCX-8{bwdwF}KqFviV z!wxO#(|24%!-i&jz&@VQQ$EMr7ZvT?78dTr7~#ZtVSshN^Tg;ePS;iL=Y|h=?PkIc zs8grLOML@oBkcJE+z0Fm4Rh@oHvHqS=RMx{^s(cn{SMxBcZSCmPvHxIMfE>l_22YM zbc1rht-uceb(HIKn#9!r#cTg}d!_nc`Xtw?s{p2F-wRxd>o$OhgqQ2wG?^Dc9pm#z zsq>$(yD;zn5*{Az4?88*`Sp`)t~GuKZo9q5$CDzs?;StkzxyUl=C@iLiDSpf zIL^yLBdY)TrvL1>(jR-no>KR@Mqdwf1SnbQUv|BrF8mB|3`hdFzsPrrZUaQ}Qvans z9gsQKJ@Sn59Oiyk*|KFfSFBjkJfnbJ)(KKhkGZvb55pnm@JYLZL(alH&$<7jAww5* ztyaCh1bnPp_bk=znwG76T#r9t;!bPRwh`6{@fZW-%)nP)Kk-B(=CPu5S*ed?Stv}^ z|9sPb(S7!R?(a+gmwE6w-1-3&_P?z3UwfQRNaF*5`p>aNo-OQzeIOuV?PCUBvFKVod1!cY_8Ey7tyvZ!N>z`}FA}TzM@F*8b%_zWnkh%sC$Se&0{n?>GCKc>X7A zEU$4h;`mzs3(x!C9yn;;#*olo5^#^PJ1Y9uujb90g#61goo^Q|%q#9PQtS+cQT@+z z{bwJM{>-`K8Gt%Th#vd~`+tCn042L~i}cGIkrwmeSi?1d83`p9G}-X6^6i=eOnOpMS2LR=x?*F_MNOA$C|ud}P!X?)PE+e|~Y_fVXdH-@)u{ zK9z|ze`@(*?cm|#o=ZE9STQs(5oZJVeBli8eq+zbku4Y(_UyJ(YDLI3ch&zq(SPLTZ4xi{y#f9(JfPhS^@OqvqE9^yR;h`z~lHtsia4I+86oGh=W z-@~3=q29|np5@^^|7U=VduHDcYyOWfx#W@&a5vJtd2=bdI2kiOG|W>r*k@wTk7xCa z{?F;$3s&)Ec@Q_tT|HC8BA@477-_e6f#D|1R z{nAOX;CN?H|NGcVOfCunY(+}fD)a4C2uVF7WRHEZEw;=}*{vV@CexDin1%G$O0Z7^ zRs&|fgUK~N%S2t^K6oS`BJt!pt7a)HBIl~LfZT7$n8Unze=rb`aSB#bZq_3!LLOOu z;e%!Og|0_^6?oSnFk^Y;W{(JgV4p)}C z$8)1xW8VwNx|?H=*trJy9+0`uu7hySwn!glx`ToJ0QHaaF7?mMzc9A~F#yY(QkaIM zlhV(A?JW%NXuNXS?RndQI3<#tL^k2qUUKR?;;Qa4jC@PbBA@fWBsRwld zu5}jxhXBs=)OG5f%=xr`1B?br0=XrkGc;p?J%Ee>EEC58UjGkx4(JWYoaRlZ;hn13 z!*d@a8sPfkcR=bdy8k!*s#dKk_aD+;aP}_$w#Fgsy_HOeiCts#A8P>WKj!DojD=_U zQg-i&WX;u^{s%FsBC7v!s2a~rRsm`Qb%8qh43>k>v@X0LS7U`uW%!?o|{Q&B?>;q6Q#m;hbj5-7? z1^xwG?eFhDeD2)2fp{-JVCKx3z43jHz7IY0(7>@{$A-dxEN~Of?>q{VoE`y$YmT{0 zU#>YOJOyyvG~(;)n-}$$>@sAIwCy3*C{?Qc`-28A=NSX6{ki}5`L2-A?o0^w++4e5 zsH~X{>}y)8N2>-ej`{nnd_uJ*{!2JKGPRn zlCm=&+PS{wcrg`d1W-61OF4~0F8^a*k{`=(KkzBQGD|sSJ-}=`*K zH})Hnl_jSy?E1fY_3B>Oe_e+>*hY5Ukp7#WCi@W~<$4@;k@VVJ`Z@KDbz?fx4|B3k zOjE#gB@dRF>wnJu2Z5PDHGslClV15vz+CtzYXC`__X8^dmX+gxy$cHPNcJIuZ4 z=d)+$S364aGHu%Rf7Pm0)c^HJgzYGLMtea3`x?P=u{>NiiloQ8wBI#|z_|8)nHzNz zy`cFM5C?F)iUk@2rGbJdVwda1Uv#v2e{|m2j~FQ1xf*SNw3`Yu(@exImnTe z#}D>KKu=&Yz_H*UU>^%aukEJz%b4&j;w%A}hCk2{u#bJrPx6Gd;0e9~MlKvHh72u@ zZvjliUf;KT&WL9Yzwe!R`5XJLyvoe|co(S9-TS9x8~R@X`p>@F4`6$-?-n#jxtgME znU$J|z;!3l!)6z^teQ-#8^C?6Rsi$y)*sl{IZu=T3Sz(K7{Kz`%jSc9Kpq>K&bh zBsxDQx>?*+VwZv`w} zIW%zDvcZG5;T_*2a6iZA{Cuwv`~F|T@A@~UU&lR6ZiYHP|LCJ4Js##>OK8fVDog zq2{OzWSIfzxLyDGdmq&QzX9sM83SlyO+a_f`@g@@f54LK+qUEL9TjCj87RaIK&S2c zFME1?f5)T$nDfmZKTWv*jeCH9fFl?a?zys6YjeMUV8lpsA5n;@(4s2?#f|~!vstr4 zmz_WtfWQ0GA7^|9tr{8_x-_8QSUl^y8Q%|k7UzB9ssDV>pW_3<{es^Fe*J}OuH_jI z9wIekNwFhQE36C@Z3fEt*QnX-zy5s!@tu#mq4S5h?@wSHaBYemwrs`dF^MKy!o^0PciFxbj^6>Fh%w+3;0)FPfAhP) ziLt}x9oxLQEYAGv9$*peA6l*A&A(ip#Y6w){NK+w2Rus{+S;?1 zo&yjv)KmtF2m>?PxA)BN_@>|p+yh+r{jU)txBT|$XHBK5$KHC|6IR^RR0foR+-Km2 zxH#wOgan^2mo4-8&vn=3=v<6*KjwW!d{eOgn!up-xF0yPo4@}zdd!!HpPWD8RKgy! z5BTMS59wY&?l-mOpbX?G19RKCzcU=zu6=2|12_u58TzgH_D4+YkNYN1`S+*SO)tj+ zeSF0v^B!QH7EUu$29yEEA4y40yo=|vDe1hA(33abFu=c6D}HMw$HoCX zC-BVe(ED|K4hWO@6foa1f@!`JQWW^qIw%7LodLXq>(Ou6?@1gx_VdJ1qrce}75({j z?b`9XBj&!nYxU~c-j}oMKkV;N_c;atM}cbO3a09RLGLtLz9PfG&Y^)G{ogrc=#x7G zgU%&jUk=ab&p+O+`<p1nQj{%g?nbJiGeT=l=mbSbS!A!1<9 zsL>w%PaHe$YW()@L33Y@-{i#^-iL?QtyiDbnbWC@CtOym2OamU|6zaMHvfOC`kz%+ zHJ&n%bp}44Iny(*e?5Qx;JsH&isRWl=;rz7d;2fDwsjkGPXCdv-8^%5R&&Gr@6msx zzX>|8_y1WXQ{yQEIm`gRIr#CU$xrdyTsY60gl~Bq$G3X<4RZ&6t0!CU>C9+%;SA7C z?b=_uJv8iq`JM5w@Uz(aUyk4YcJKd(gk~$B9HvB*QwE9!16#ZGF!Ostbj;LUxc|r8 zoW$Se!dabrK|o2@nzf#FLRJXDcYusuGH(x~Ok}34hO}9h<-2 zf57v&_fInV&-s7&h;?UwK3PlBKCx_Bw$>Svj+)AVGLSh2Hh1h~*628o+Zpd4xv)9C$ zex;IqvmfJu&;Rh=|AClTzke>jqNMAZYn|7&ai13ms8!qN{w|jdUK<$nCek>?eFdfm zT~A6JIcg5p{iPS{`~TT*JWW9v$N>i4@6*@wobQ!>{jb5=|7+_TzUH0%bwR=VF^@07 zH~nY)yGPI7%_~$e=XO(M?RRy{R?XiXIA|2YJ-s$4cn6*({K5Txo-Nn|>>NJg`OOnA zZ_ar8ZoAEsXNq+6QW;PN@{fU1?+zMt8@}sz6ncDy>vnv{?;OA7hxd1WTRvpy@|Oep z-S_6eL6bL!hQ)3Vj|g8I95V9de*JI6eg2DaLBR*8?+g!}KaY2QleUJ0{<<=X2-oSu+g;>)Y z(9U}X=slkwm}dy^;~v64SWA5Q#(;sdDwHf~p7pzC&eHq+RM}S#WuV|N@Jz4XRTuT? zI}Gc9Ett!x*XMCgC<)K-3D-q{-)=lVFylc)X<=)y&jNB_Hc@QF9y>h|sGHT4{}-!T6mEZhg@h?Aw0 zf3?z_l>ucSGYmX|?|Ea7ujH5g2V_`>|EgNm`B`XK$yI^Dy2qaxvNfzSpbRJj%78MU z3@8K2fHI&ACm?q6{bl%78MU z3@8K2fHI&AC<6tVfg{djr8_mtT%N-1h1=cX2yk26|84$_=yJ~CsO0u>|F`-3(gg__ zQ^MH%O$Hl08C?|LF$+$!E1ffD%J}dz1w$gU1H==iq!0fijZi#fPSYbc|1&7~xl%3{ zO^?|8#gC>(Z2n0|`&1*BD=8I!*S*L)05RH6Ed-bLvrRZ7Zv|9}hGcuk-C3XR+} z=9_;&8u`ykr~EnSe=Z&V;cr*{3k9>f>A6Pf`MdkSiD>=v*8g+DKOl|tk*8-Cu;+h9 z^lz4Hw#)*_{5|@e#6Dxh?tjWNKAiJCW%XpQ{;o5PWROhe?-`%qY7LTh{|n>WDVKYs zOFlka7$3j!3}W{97#GdZcCQQmNP=SbN0w&jn&aB+)!zx%0L1a7|Cw2^C5vyHAGUk* z_slPqTywqolQJueSN{!-F!!JgM;dvJf6hHWqU{1$FexAP+n3X_!!Zlap83`8?==2M z8WW7eVa#Ol-TtNM@0s7v@XA~>2GeiEYtQ;X_+`c>e={|p0Hzp-$k1NolskJiQJS(b zO<$LLCQCic#hRKdY?8Y+$=vK0ZnEtz$?eG(G0FXSm0tYhiNO6~NQK$`;mS5yyIh^rL%}3pp0cAiLPzIC% zWuSmF&>D;T*<9f}`PY~>2rg8V0cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiL zPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk4 z0cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx z8Bhk40cAiLPzIC%WuU+?aOIU(I!BBc;gg32VqTd6KW>~CA2?pu} z{`>DYeR$ipZS^{I=&-AH?b>I`moI-kOVOf5i`?kn(0VYDM>INc;OUFAKu4T&HC+EO8!SJIw$p0u)KxeU<)y3D5Ws11AAb zo0ln5=4gWk4Yt&%QDZIiVjKK^u=`u#{{_?JU%7JStoA`9kw0?B9e0>AZ`iP*LCu;q z526%o|Jzv_n7L6O;k-Ap5FMKbdn|ATFd-FO4)+^@XMlL%3?ThxHSCQ5ilpzpO8vit zcuoaN@A7QcO z2a|2*4fcC4X@fEdI~U-b%y!_~z`iEHWvasT-UOuWpN74J6`J|`Hf`F}xn#)_lh>?S zvz)%ZzQ!GXG%4kP*8msRgs%Ga>)%61i1@p&3h@5|(*D$CN=Efx!V1q1z(Lw^4m}~_ z=f1k|U)-m_N#eW;JM(5+i$APsij=i7LTv_I7z2Lv_xHb)u{w6_n9+0?Jl~`cw?8?P zaiBEpYXG+A&p=0jBL42H3;#Jza}B}pUjxknN@m+k`oKWMHFH^&Dpk0Sq==vUs(}74 zDJO%9V2s8Z?M|5)>(y z`>Fu`FJkTA2^60O*tXm&poo4-TeODTPXNO_3Q)4Gr)c{sLxv0)6BQLT_2!#z?&40i z;QudT?cV^59|735+*6`R+ltu(Zf608nFdf&juCFxV(`C+w7;|z@5QzQY};2XN6~v} z{}{`kVPxMSN7^6HOMKe5Z|^&1%oxejDnh|EQfdD?trBzWByU+kY8*&A^hUboo(X1F z?*9?(A}I|Q?%}a*KLYG?yOifT%b)wl0|82ow7)y4!u3Cu_Rr1rOK!G5(|!wJ`^N#? zpA(Vx=N=vXxlhpD@{}@Jm&M0OrTyoFflC1L(+%jFK``uP0Cl@A;7x?KaoJPUx;b1%jyKh_yfW9yqSE{ij>il=~0iw-wy^+}B$lv7%(kkaX)I z)G-z-{LUhavdnZg-{_*6=oAyqexH2(z*ngJ~9x^(j zQDe?yj<~RJN!wd;IpS8t+W%gV!gf6c^t1>{sYiT9!1DnNw+67U5pbDlk@1@MOXt!4 zuD*Ty-fX4fX}>L#rx^Q+Awvgj3=Y|{J3PV_59|sFJ+mt~C-?IJr{z)^-GpjsHK9iUx z+W&97H`JeLR;gUs$?JfLCTSdU(Z-9N^5zABj ztji1=>^FSQv>tHb9f1QaTehsj*bQsfcE(S+()6qScih=>cVyIwUC{BBLj$MK-*weg z<3~GXPk4m6UeK#|yRD&Nhu8-a$Bvs!zwH72Qr3me*_J}y{=x~@{qX?XlXH6;fRc<~ zx0A$^QH+z0LKgwFeX92w<%c*IDP=9>csUbZtV{I7(V*w4RNxUf9qr7yyCE*TBX|uROZoX3|6SI- z{0_|Pd(e)U+ux$U>z#L{{JgwKPFn4ZJ~EYa0MdDqf#P#vZy=TS7adBooEH^5V-CWd zz5RJ6hmsN9W0{%) zOWF>s=}mnSh7B7>J;t0qp9vowJtob19*P}iIC^{Fz%jf>02VSH=7==oF-&G9Mf)E_ zeAeepU@X9O%A{<7@f!gY;lEN-0HX7M!_F~) zZAp=Q+*hgpmvCG=yauow#Ge44Aw)NC-n`3#1q+%14e!4D?iN_vbMI(0unLfU2A1O) zz}!coA4s}za?8QnZmYic%By1^+%*QU9U$PcRbh4|A>kSFc{( z2+#k&LN?@p&wquFteE6P(ujqfB4wBM?*lhUTiQ~tQ!^P(a1Qnz0QXu-0+frmcRQ#0 zU&2$Lrvl#r%-fU)Yxz@k>(>3UR;^kG@Gi$;xc_1Ihy55Z5ioVDSFfI=2dAvd$#L%a z|NVi3{=;!&?-f^=@i75=hgnb6drZ;)_3PKysb0PMdW2#<4*(nsvIC~U{xkrfNZEy> zE^ym#;WL39>4m-PVVNi#jvMHp}QLDH|_oh|XC(x8Q^T}2r^Di=Wh~sT;@F8huq;@Prn);lPMC@Uzmnv2Bm45vLu}`oSYdzPl;Umm? z(H-y5bTfmN;;St+5 z1P33$J;K@T*!#oyKjHTIPcVO#BFaE~L}WR%{nr5R@y=tdpTs@Fb%8vUh31wwDV)#x;Mf)@aH|T z!{YbdG=uk}Dus-JPp4gH^nL#gH@5q9`t;|PgoaMcXccycg!*7z@EP`ePvU$~uJ8Y3 zv|Ji4;|#>(c|Jq$jEowLvmGv+`CE(24C(S#oCiSrCj!6X+z6jhs1z~=4&CSew(_x! z8>=La82QPDpx_hpd-XPZ#?SWZebHKg)qAF=`|SAK&Rr_u{Krw~|6x2o_O|a?$k-^J z#oabwplRpbvBRF@vmC7L&3^9pqeholIb>+EHQh@%6Y|CI5oZ5?eQ?M$Jok6)n{wr= zWDXA`z4n*l$!g)Lbwcbg({7(!JFOeq{|t2c51j2Cz#3q$&-i^2743WcnrofgV`9zq z(tv&)aQ}Cd&wdlfjgMs5ow^T18VaRs>_5Qh`G)X_t9Va`c0Gx+KzF`5a8N6Ig`Vo| zUl(VBug00cZ@3S*D>~*;`hQrfuIj#>s6uG}eDpZeh93?dG70DVe_;D=4G#Hv{oo<1 zb_NB%vT4ZBcQ*zG9py8>9bw_8aX$RP5AM1nLu)tVAKG_}-`4Y~3b|XRm8|&^f#geQdTIqd}QJyv5??=BY z{lnUIjZeJ$UYp||EpPGTfrD~}&2ij116D+7DAv_l85Hc?7aZ#82X->P!dhV+_I~Vc zYA?DB9De)>=U0!-^Z9z-=t{H~)%CH@9SsWh)shIf}QIg6wcm`OI0(1`nN&uA9>L~8~7W}g)!&dwrc_My$ z{3BdX$4?WNV`R8Xp1jNviH&vt4$0$>KVG9;xpKcE(O@fKDN}0sNLk3&Kfo?vCBWak zS_7;G;(;^3*FbN8;w@eN4i33<0bB6f^!L@NQ|A`^{_@MXJ_&pebOjvX#9MrNWl3VJ z-`afYsi&%yEnD^nBr?QGD7}27{>>5o58%>N;?;orOTc-cA3%|`C5>0$_9x&^Pl&iX z(Dvl!Rs0_HZ;cu?YDUkhRjYdZd7T|eQGaqh)Jjjvm|F5u2G*Z#+{FsWzRtJ=!$`R2 zVE+y%4Nw@45(BW^yYm7fwbLF!qvUcGv+2L=XSLeE~k+`paX37AET)PMf``P6^*e;NP$V7K=}u}j~Ray3Ud z_W#t{A6}mN-wXTabg-l?%yU3j>sr#bE_2_I`ak*PldS(w$ZOXJZyy~bw$N%-f^T12MVjC90{yK0AKw*ENWTyQmBK(g) z1%MI(`~{fbe}|b~{ShQ*Me6_9V~?@^Cy@G1;4NSo@V*Tkqd2F}1}H_U{(02@uK{oD z|1t+=w*QlNk8B7IapJe7q#YawqoSSoEqTwiCtw;DX@6_|V;}#x?qFIeAv!31H8cHx z4$?blD^45OvpoKNb>&s245yEM@B7!c-;|Mb6RqFYlk2ohFZIvr`X?jf|8kUtIwevC zmfwI>=Rf!f&vmi(-O{;pXPGM;_}%a-_7LE1K`PMC3nBP=gHto7nyCNcYZVm}u z7&l~S+l0YGnyd>98i3zYOiYN5VLx;17%))!YVs6qS5kl5{2yd_vwV#24dhn%mHyw^ zipTQW{UsdN_`DC|x`HCSgu>4CZy!2B=x&E`#J`WRKk=GeB*ettfVy*xcAOY9)(5{e zXYzT~zfY}g;Su}yPnyhfIq;j3l0Ppm5~;s6{{4Ue1Fb;maVP0ApS13On!%szKCY2u zjW20S8oW0+3k(4$bT@vu2juT$twh`Z5BERy=}C!?huECBab}7`(KWKp8+cYt^?Mk0Pkye0(Sr+En)cwNCe`5&A=vL zBX9^v0_b-sK#{t;uP*$55LWhsc--GTRkv>4M^Jap!_*nB8QTDkh7~H9_c-=6lt@5h&LO`gKO=hzey8n-ug82gn2V?%2B(c2>rKKLM}|FSp1;bGvBRPYeo zp9VySVRdi}yA5~%U>&&UL6f*1=mAI>q`l#kOpHJ3+X}9alrLXCu6p(AThQk3;(8SB zflDzo`hRNi9b2v6(b^mw5*r^K6OZ$rk|(3)x3Jvll_xEK#!puFJ<#i2*6+(<4bUCG zHG2=n{ss6w(dD~Fj^cfVV@G6EvN&{0OVIzRD;Yt`vZfU$W!SWez_3hnZaCJpYMmMG3l%|o zuAbWMjhL8*EOcCSv=4q~*Npuu1`V!`bwT{zk)ycZQse}`6Hc9Q@HfU+4Go-Q?BNlm zu{XxMMtBua*qMoYz`|5-ds+8dx?p#s{o`U#cd7H{&@dm4 ziMxV=eK7|3;+{BDYaU5QO=UnCPzIC%Wk4BF29yD1Kp9X5iYfzz^?L~axQ+zy%PlY~ zoqC++FUOA`H|FoZ;G-(I{wMJtW1c-MCMpZ}^M_%c@wH5++Z1=0XX$Uue>Pj`yg(D_ zuBVB7X1dNek#D6W*E#2@S@BmAo4*D`Ot^>_jLzzt+&jbmWhJrle9+1?g&f- zJl~1nlROn=Kp9X5lmTTx8Bhk40cAiL$Pos*cJ1oKxu%Ss$&j-zDb4hrZ)G-oj?^ua ziFo6H_3~Obod5C`KEqk|>C?xgJ800LCU}1)D1#AW5$-O4XZ-}@VCQ)^%0*?WRH+ir zAdJF$de79VRcjIKcLMbQN2yY!E(%Zgj7a0gjZNIvty{dZ{EB)`RAF?jPxIS`Mu@29m({uvS**fH*My`I}hIK zi{vhdl;7Tepkto&E`&^GOO1aCM1Sc&?2~ErA89iO&Lw*6k`T@=UgRczG^P9)KU33R z(PMiwd-auNMf6DdFX5BcYunvwBmD}u@VMgE1$0N9TMJQq)qwuytC zb2Nov#hqiuH!bSdH}5{+-Hs(V_jwru;f$wgE1dU#c29K70J?cQ?=R(V+qP{m(mIA< z)Lpjud<)F?IY9a_tcFjn7oGq(_YiA=&w*foVy{APNv+8R>o!S^Q&xW<-0X7h;8ZE85R8u^mVj^ zUD2<9dAxu0?!E~Vss9C5P;SF(eC)9L9RIh3hTXU|A~GEP|2>TV93vdttam61Y$dFM ztsgkBTEgftSM0rF(v0nqQN0U#dF|!HnPulE(J{&T_$P(%ymI`o;l6uDkMYHPoRKlj zPJ!B$0cAiLPzIEN0?&Z^coJSrH&7yh!pTsz0o)7JGr;_u2m zURtAvGzR(so^x8}?g0)e%78MU3=|*+@SG>vy&!gc7-p&7m%n{tGfG+H4ppL6i}E5U0D{UuC2>_1+P=af_7 zX7-QM`tAuMTVnQSux~jN&ue?p4g0QAH{%BPO>3oR3d5$;L90q#fOS#}8Q z|HXEn?Da@m?vNM%H+kS$AD@}ao&@(q=`PO{=D;p{;!@wmaBB}xUIkhhoBLl$$eZ{U zY#m;v^UX_>KX_yQ-QCeWoEks4-3OSxbC_li8s-?_a)A51e2&R)%$BTNxw0uUvhIZM z0@t8>I%4ub{qI3I<`WK#1jYl+0m=hFCu4K-LhBHKd()ii**+90ucHJS)9r-)*|2aQ ze%}r6`+MBPPvThlvyEc`<~3ZGYqPV%~R$r2^rfmwNPRP+oyX9>mLVe747;j{suoz$)iFASGRp|RT=pUbDybL9dq36cXu)w*kTATWA z3<;ftZ~qt_=eM8e4>5jd|HiO0zepegU_a;&P?`huqdWU&6M(|FCO*ts_zuum^naGS z4d57PJ%0fQmGHc8`1Xj%>yOWzW$H`+Y>Jeh$w(PINtW{S^SC8OMOVRho~CUNkGRnj zAcY0>XLy#4=@Mdx)ub=i^z)=mPZ6B4@kJZ>R`GL>{U`6Z!*@$`OzgtWT}+?E_hqif zetlDh$9LGgrXgu%*W6@%>jQP3f_^s%d)C2t=6$#8zl&M^Jd^q0YS)O7y%NTZ4cahh zaK${!*ve>+jpsf2^o(TJ@DV=Pch6Ja^O|SPuW&MeeT&S=^Iy1J>(;qkadEC+EYME3 zU+9-f;o^mh-o}7upTdlma47o1Ilway@T@=v*X${oNtRAZPhJlmJlKivVDb!u2z5v(y{Q<5iF2$NZ$ggC{ewYX8=7??D z%rn;q2M3ox+FY|-hNUULz10)ox`M(r#R#A*FR*rImq;c70RbfupZ654aeKmf#2%mP z5>I^CEA1OLygr_Bnzbs9?stn2`z>B zx*N__435Xz1%5_wPb1+ZtXvy^_MdL`>X~^4-?6H>bJ*~@R@8hkkiV2O+xc^EHaqw~ D$$(%& literal 0 HcmV?d00001 diff --git a/toolbar-ui-angular/src/assets/icons/glue42.png b/toolbar-ui-angular/src/assets/icons/glue42.png new file mode 100644 index 0000000000000000000000000000000000000000..ccf9f47c1bc62edfa0eedfebdd278eac980c50f5 GIT binary patch literal 703 zcmV;w0zmzVP)h1Dr59OO6A6Lhg`}RUw6uE>(Sq~zR$Qy+^vdOPOqTjV8nufc|YrkSFUI8^8)Jh%W#J>5(8ffEHvffQ1l5 zskia;nd@e!1qlSOHnAur0BgvV0RNsq2~aBEKW7112tbfz@af?8@yYlW*nf9-L=!>; zzyYJt==C4~Sff8TCt53hMg!sqfP)4F(1e5vpaG!*2o;h_rL{yd4bTz<`Lhe)hPmbd z@9_gbA#Yp4Zyb`}E|lCLN;dxshivccJc{g9YRz)>B|z&%xuzEi1tJ1ohu`BpU%%a% z3vv8&_w4&{2+%T)j&_|8{eFLKXc(vHdh_$dFpSH)u|gB#2p9~CK>@RUK?4#dfC_{L zAXErVfGcFLQg?jq@PhmpZJp2rEF7YLd4A3UuyDxx4rdn5=8Kp;rB+g%+T z9`^QIZD8vu*NZFwb3q`${9%1M1n>i)1@Hwy0mv}m^&4&M1fdP^I!8JA#RUR5~NbCU$6o=LcGoa9D*WP0EiGj=Ku<^5G(;Uh!+5dK*TZtW{^s)q4@!z lkVfNGdszTHJUl$% + + + + + + Glue42 FINOS FDC3 AppD demo logs + + + + + +
+

Logs

+
There are no logs available
+
+
+ + diff --git a/toolbar-ui-angular/src/assets/provider-config.html b/toolbar-ui-angular/src/assets/provider-config.html new file mode 100644 index 0000000..cee15c7 --- /dev/null +++ b/toolbar-ui-angular/src/assets/provider-config.html @@ -0,0 +1,59 @@ + + + + + + + Glue42 FINOS FDC3 AppD demo provider config + + + + + +
+

JSON Config

+
+ The provider JSON config was not found +
+

+  
+ + diff --git a/toolbar-ui-angular/src/assets/styles/bootstrap.min.css b/toolbar-ui-angular/src/assets/styles/bootstrap.min.css new file mode 100644 index 0000000..490938a --- /dev/null +++ b/toolbar-ui-angular/src/assets/styles/bootstrap.min.css @@ -0,0 +1,11032 @@ +/*! + * Bootswatch v4.3.1 + * Homepage: https://bootswatch.com + * Copyright 2012-2019 Thomas Park + * Licensed under MIT + * Based on Bootstrap +*/ +/*! + * Bootstrap v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + :root { + --blue: #007bff; + --indigo: #6610f2; + --purple: #6f42c1; + --pink: #e83e8c; + --red: #ee5f5b; + --orange: #fd7e14; + --yellow: #f89406; + --green: #62c462; + --teal: #20c997; + --cyan: #5bc0de; + --white: #fff; + --gray: #7A8288; + --gray-dark: #3A3F44; + --primary: #3A3F44; + --secondary: #7A8288; + --success: #62c462; + --info: #5bc0de; + --warning: #f89406; + --danger: #ee5f5b; + --light: #e9ecef; + --dark: #272B30; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + } + + *, + *::before, + *::after { + -webkit-box-sizing: border-box; + box-sizing: border-box; + } + + html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + } + + article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; + } + + body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-size: 0.9375rem; + font-weight: 400; + line-height: 1.5; + color: #aaa; + text-align: left; + background-color: #272B30; + } + + [tabindex="-1"]:focus { + outline: 0 !important; + } + + hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; + overflow: visible; + } + + h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 0.5rem; + } + + p { + margin-top: 0; + margin-bottom: 1rem; + } + + abbr[title], + abbr[data-original-title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; + text-decoration-skip-ink: none; + } + + address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; + } + + ol, + ul, + dl { + margin-top: 0; + margin-bottom: 1rem; + } + + ol ol, + ul ul, + ol ul, + ul ol { + margin-bottom: 0; + } + + dt { + font-weight: 700; + } + + dd { + margin-bottom: .5rem; + margin-left: 0; + } + + blockquote { + margin: 0 0 1rem; + } + + b, + strong { + font-weight: bolder; + } + + small { + font-size: 80%; + } + + sub, + sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; + } + + sub { + bottom: -.25em; + } + + sup { + top: -.5em; + } + + a { + color: #fff; + text-decoration: none; + background-color: transparent; + } + + a:hover { + color: #d9d9d9; + text-decoration: underline; + } + + a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; + } + + a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { + color: inherit; + text-decoration: none; + } + + a:not([href]):not([tabindex]):focus { + outline: 0; + } + + pre, + code, + kbd, + samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 1em; + } + + pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + } + + figure { + margin: 0 0 1rem; + } + + img { + vertical-align: middle; + border-style: none; + } + + svg { + overflow: hidden; + vertical-align: middle; + } + + table { + border-collapse: collapse; + } + + caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #7A8288; + text-align: left; + caption-side: bottom; + } + + th { + text-align: inherit; + } + + label { + display: inline-block; + margin-bottom: 0.5rem; + } + + button { + border-radius: 0; + } + + button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; + } + + input, + button, + select, + optgroup, + textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + } + + button, + input { + overflow: visible; + } + + button, + select { + text-transform: none; + } + + select { + word-wrap: normal; + } + + button, + [type="button"], + [type="reset"], + [type="submit"] { + -webkit-appearance: button; + } + + button:not(:disabled), + [type="button"]:not(:disabled), + [type="reset"]:not(:disabled), + [type="submit"]:not(:disabled) { + cursor: pointer; + } + + button::-moz-focus-inner, + [type="button"]::-moz-focus-inner, + [type="reset"]::-moz-focus-inner, + [type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; + } + + input[type="radio"], + input[type="checkbox"] { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0; + } + + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="month"] { + -webkit-appearance: listbox; + } + + textarea { + overflow: auto; + resize: vertical; + } + + fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; + } + + legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; + } + + progress { + vertical-align: baseline; + } + + [type="number"]::-webkit-inner-spin-button, + [type="number"]::-webkit-outer-spin-button { + height: auto; + } + + [type="search"] { + outline-offset: -2px; + -webkit-appearance: none; + } + + [type="search"]::-webkit-search-decoration { + -webkit-appearance: none; + } + + ::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; + } + + output { + display: inline-block; + } + + summary { + display: list-item; + cursor: pointer; + } + + template { + display: none; + } + + [hidden] { + display: none !important; + } + + h1, h2, h3, h4, h5, h6, + .h1, .h2, .h3, .h4, .h5, .h6 { + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; + } + + h1, .h1 { + font-size: 2.34375rem; + } + + h2, .h2 { + font-size: 1.875rem; + } + + h3, .h3 { + font-size: 1.640625rem; + } + + h4, .h4 { + font-size: 1.40625rem; + } + + h5, .h5 { + font-size: 1.171875rem; + } + + h6, .h6 { + font-size: 0.9375rem; + } + + .lead { + font-size: 1.171875rem; + font-weight: 300; + } + + .display-1 { + font-size: 6rem; + font-weight: 300; + line-height: 1.2; + } + + .display-2 { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.2; + } + + .display-3 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.2; + } + + .display-4 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.2; + } + + hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); + } + + small, + .small { + font-size: 80%; + font-weight: 400; + } + + mark, + .mark { + padding: 0.2em; + background-color: #fcf8e3; + } + + .list-unstyled { + padding-left: 0; + list-style: none; + } + + .list-inline { + padding-left: 0; + list-style: none; + } + + .list-inline-item { + display: inline-block; + } + + .list-inline-item:not(:last-child) { + margin-right: 0.5rem; + } + + .initialism { + font-size: 90%; + text-transform: uppercase; + } + + .blockquote { + margin-bottom: 1rem; + font-size: 1.171875rem; + } + + .blockquote-footer { + display: block; + font-size: 80%; + color: #7A8288; + } + + .blockquote-footer::before { + content: "\2014\00A0"; + } + + .img-fluid { + max-width: 100%; + height: auto; + } + + .img-thumbnail { + padding: 0.25rem; + background-color: #272B30; + border: 1px solid #dee2e6; + border-radius: 0.25rem; + max-width: 100%; + height: auto; + } + + .figure { + display: inline-block; + } + + .figure-img { + margin-bottom: 0.5rem; + line-height: 1; + } + + .figure-caption { + font-size: 90%; + color: #7A8288; + } + + code { + font-size: 87.5%; + color: #e83e8c; + word-break: break-word; + } + + a > code { + color: inherit; + } + + kbd { + padding: 0.2rem 0.4rem; + font-size: 87.5%; + color: #fff; + background-color: #272B30; + border-radius: 0.2rem; + } + + kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; + } + + pre { + display: block; + font-size: 87.5%; + color: inherit; + } + + pre code { + font-size: inherit; + color: inherit; + word-break: normal; + } + + .pre-scrollable { + max-height: 340px; + overflow-y: scroll; + } + + .container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; + } + + @media (min-width: 576px) { + .container { + max-width: 540px; + } + } + + @media (min-width: 768px) { + .container { + max-width: 720px; + } + } + + @media (min-width: 992px) { + .container { + max-width: 960px; + } + } + + @media (min-width: 1200px) { + .container { + max-width: 1140px; + } + } + + .container-fluid { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; + } + + .row { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; + } + + .no-gutters { + margin-right: 0; + margin-left: 0; + } + + .no-gutters > .col, + .no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; + } + + .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, + .col-auto, .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, + .col-sm-auto, .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, + .col-md-auto, .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, + .col-lg-auto, .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, + .col-xl-auto { + position: relative; + width: 100%; + padding-right: 15px; + padding-left: 15px; + } + + .col { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + + .col-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + + .col-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.3333333333%; + flex: 0 0 8.3333333333%; + max-width: 8.3333333333%; + } + + .col-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.6666666667%; + flex: 0 0 16.6666666667%; + max-width: 16.6666666667%; + } + + .col-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + + .col-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.3333333333%; + flex: 0 0 33.3333333333%; + max-width: 33.3333333333%; + } + + .col-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.6666666667%; + flex: 0 0 41.6666666667%; + max-width: 41.6666666667%; + } + + .col-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + + .col-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.3333333333%; + flex: 0 0 58.3333333333%; + max-width: 58.3333333333%; + } + + .col-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.6666666667%; + flex: 0 0 66.6666666667%; + max-width: 66.6666666667%; + } + + .col-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + + .col-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.3333333333%; + flex: 0 0 83.3333333333%; + max-width: 83.3333333333%; + } + + .col-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.6666666667%; + flex: 0 0 91.6666666667%; + max-width: 91.6666666667%; + } + + .col-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + + .order-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; + } + + .order-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; + } + + .order-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; + } + + .order-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + } + + .order-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; + } + + .order-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; + } + + .order-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; + } + + .order-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; + } + + .order-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; + } + + .order-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; + } + + .order-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; + } + + .order-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; + } + + .order-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; + } + + .order-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; + } + + .order-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; + } + + .offset-1 { + margin-left: 8.3333333333%; + } + + .offset-2 { + margin-left: 16.6666666667%; + } + + .offset-3 { + margin-left: 25%; + } + + .offset-4 { + margin-left: 33.3333333333%; + } + + .offset-5 { + margin-left: 41.6666666667%; + } + + .offset-6 { + margin-left: 50%; + } + + .offset-7 { + margin-left: 58.3333333333%; + } + + .offset-8 { + margin-left: 66.6666666667%; + } + + .offset-9 { + margin-left: 75%; + } + + .offset-10 { + margin-left: 83.3333333333%; + } + + .offset-11 { + margin-left: 91.6666666667%; + } + + @media (min-width: 576px) { + .col-sm { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-sm-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-sm-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.3333333333%; + flex: 0 0 8.3333333333%; + max-width: 8.3333333333%; + } + .col-sm-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.6666666667%; + flex: 0 0 16.6666666667%; + max-width: 16.6666666667%; + } + .col-sm-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-sm-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.3333333333%; + flex: 0 0 33.3333333333%; + max-width: 33.3333333333%; + } + .col-sm-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.6666666667%; + flex: 0 0 41.6666666667%; + max-width: 41.6666666667%; + } + .col-sm-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-sm-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.3333333333%; + flex: 0 0 58.3333333333%; + max-width: 58.3333333333%; + } + .col-sm-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.6666666667%; + flex: 0 0 66.6666666667%; + max-width: 66.6666666667%; + } + .col-sm-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-sm-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.3333333333%; + flex: 0 0 83.3333333333%; + max-width: 83.3333333333%; + } + .col-sm-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.6666666667%; + flex: 0 0 91.6666666667%; + max-width: 91.6666666667%; + } + .col-sm-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-sm-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; + } + .order-sm-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; + } + .order-sm-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; + } + .order-sm-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + } + .order-sm-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; + } + .order-sm-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; + } + .order-sm-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; + } + .order-sm-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; + } + .order-sm-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; + } + .order-sm-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; + } + .order-sm-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; + } + .order-sm-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; + } + .order-sm-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; + } + .order-sm-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; + } + .order-sm-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.3333333333%; + } + .offset-sm-2 { + margin-left: 16.6666666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.3333333333%; + } + .offset-sm-5 { + margin-left: 41.6666666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.3333333333%; + } + .offset-sm-8 { + margin-left: 66.6666666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.3333333333%; + } + .offset-sm-11 { + margin-left: 91.6666666667%; + } + } + + @media (min-width: 768px) { + .col-md { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-md-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-md-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.3333333333%; + flex: 0 0 8.3333333333%; + max-width: 8.3333333333%; + } + .col-md-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.6666666667%; + flex: 0 0 16.6666666667%; + max-width: 16.6666666667%; + } + .col-md-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-md-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.3333333333%; + flex: 0 0 33.3333333333%; + max-width: 33.3333333333%; + } + .col-md-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.6666666667%; + flex: 0 0 41.6666666667%; + max-width: 41.6666666667%; + } + .col-md-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-md-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.3333333333%; + flex: 0 0 58.3333333333%; + max-width: 58.3333333333%; + } + .col-md-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.6666666667%; + flex: 0 0 66.6666666667%; + max-width: 66.6666666667%; + } + .col-md-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-md-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.3333333333%; + flex: 0 0 83.3333333333%; + max-width: 83.3333333333%; + } + .col-md-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.6666666667%; + flex: 0 0 91.6666666667%; + max-width: 91.6666666667%; + } + .col-md-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-md-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; + } + .order-md-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; + } + .order-md-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; + } + .order-md-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + } + .order-md-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; + } + .order-md-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; + } + .order-md-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; + } + .order-md-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; + } + .order-md-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; + } + .order-md-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; + } + .order-md-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; + } + .order-md-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; + } + .order-md-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; + } + .order-md-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; + } + .order-md-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.3333333333%; + } + .offset-md-2 { + margin-left: 16.6666666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.3333333333%; + } + .offset-md-5 { + margin-left: 41.6666666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.3333333333%; + } + .offset-md-8 { + margin-left: 66.6666666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.3333333333%; + } + .offset-md-11 { + margin-left: 91.6666666667%; + } + } + + @media (min-width: 992px) { + .col-lg { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-lg-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-lg-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.3333333333%; + flex: 0 0 8.3333333333%; + max-width: 8.3333333333%; + } + .col-lg-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.6666666667%; + flex: 0 0 16.6666666667%; + max-width: 16.6666666667%; + } + .col-lg-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-lg-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.3333333333%; + flex: 0 0 33.3333333333%; + max-width: 33.3333333333%; + } + .col-lg-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.6666666667%; + flex: 0 0 41.6666666667%; + max-width: 41.6666666667%; + } + .col-lg-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-lg-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.3333333333%; + flex: 0 0 58.3333333333%; + max-width: 58.3333333333%; + } + .col-lg-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.6666666667%; + flex: 0 0 66.6666666667%; + max-width: 66.6666666667%; + } + .col-lg-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-lg-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.3333333333%; + flex: 0 0 83.3333333333%; + max-width: 83.3333333333%; + } + .col-lg-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.6666666667%; + flex: 0 0 91.6666666667%; + max-width: 91.6666666667%; + } + .col-lg-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-lg-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; + } + .order-lg-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; + } + .order-lg-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; + } + .order-lg-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + } + .order-lg-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; + } + .order-lg-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; + } + .order-lg-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; + } + .order-lg-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; + } + .order-lg-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; + } + .order-lg-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; + } + .order-lg-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; + } + .order-lg-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; + } + .order-lg-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; + } + .order-lg-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; + } + .order-lg-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.3333333333%; + } + .offset-lg-2 { + margin-left: 16.6666666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.3333333333%; + } + .offset-lg-5 { + margin-left: 41.6666666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.3333333333%; + } + .offset-lg-8 { + margin-left: 66.6666666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.3333333333%; + } + .offset-lg-11 { + margin-left: 91.6666666667%; + } + } + + @media (min-width: 1200px) { + .col-xl { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-xl-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-xl-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.3333333333%; + flex: 0 0 8.3333333333%; + max-width: 8.3333333333%; + } + .col-xl-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.6666666667%; + flex: 0 0 16.6666666667%; + max-width: 16.6666666667%; + } + .col-xl-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-xl-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.3333333333%; + flex: 0 0 33.3333333333%; + max-width: 33.3333333333%; + } + .col-xl-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.6666666667%; + flex: 0 0 41.6666666667%; + max-width: 41.6666666667%; + } + .col-xl-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-xl-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.3333333333%; + flex: 0 0 58.3333333333%; + max-width: 58.3333333333%; + } + .col-xl-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.6666666667%; + flex: 0 0 66.6666666667%; + max-width: 66.6666666667%; + } + .col-xl-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-xl-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.3333333333%; + flex: 0 0 83.3333333333%; + max-width: 83.3333333333%; + } + .col-xl-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.6666666667%; + flex: 0 0 91.6666666667%; + max-width: 91.6666666667%; + } + .col-xl-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-xl-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; + } + .order-xl-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; + } + .order-xl-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; + } + .order-xl-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + } + .order-xl-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; + } + .order-xl-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; + } + .order-xl-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; + } + .order-xl-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; + } + .order-xl-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; + } + .order-xl-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; + } + .order-xl-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; + } + .order-xl-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; + } + .order-xl-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; + } + .order-xl-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; + } + .order-xl-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.3333333333%; + } + .offset-xl-2 { + margin-left: 16.6666666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.3333333333%; + } + .offset-xl-5 { + margin-left: 41.6666666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.3333333333%; + } + .offset-xl-8 { + margin-left: 66.6666666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.3333333333%; + } + .offset-xl-11 { + margin-left: 91.6666666667%; + } + } + + .table { + width: 100%; + margin-bottom: 1rem; + color: #aaa; + } + + .table th, + .table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid rgba(0, 0, 0, 0.6); + } + + .table thead th { + vertical-align: bottom; + border-bottom: 2px solid rgba(0, 0, 0, 0.6); + } + + .table tbody + tbody { + border-top: 2px solid rgba(0, 0, 0, 0.6); + } + + .table-sm th, + .table-sm td { + padding: 0.3rem; + } + + .table-bordered { + border: 1px solid rgba(0, 0, 0, 0.6); + } + + .table-bordered th, + .table-bordered td { + border: 1px solid rgba(0, 0, 0, 0.6); + } + + .table-bordered thead th, + .table-bordered thead td { + border-bottom-width: 2px; + } + + .table-borderless th, + .table-borderless td, + .table-borderless thead th, + .table-borderless tbody + tbody { + border: 0; + } + + .table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.05); + } + + .table-hover tbody tr:hover { + color: #aaa; + background-color: rgba(255, 255, 255, 0.075); + } + + .table-primary, + .table-primary > th, + .table-primary > td { + background-color: #c8c9cb; + } + + .table-primary th, + .table-primary td, + .table-primary thead th, + .table-primary tbody + tbody { + border-color: #999b9e; + } + + .table-hover .table-primary:hover { + background-color: #bbbcbf; + } + + .table-hover .table-primary:hover > td, + .table-hover .table-primary:hover > th { + background-color: #bbbcbf; + } + + .table-secondary, + .table-secondary > th, + .table-secondary > td { + background-color: #dadcde; + } + + .table-secondary th, + .table-secondary td, + .table-secondary thead th, + .table-secondary tbody + tbody { + border-color: #babec1; + } + + .table-hover .table-secondary:hover { + background-color: #cdcfd2; + } + + .table-hover .table-secondary:hover > td, + .table-hover .table-secondary:hover > th { + background-color: #cdcfd2; + } + + .table-success, + .table-success > th, + .table-success > td { + background-color: #d3eed3; + } + + .table-success th, + .table-success td, + .table-success thead th, + .table-success tbody + tbody { + border-color: #ade0ad; + } + + .table-hover .table-success:hover { + background-color: #c1e7c1; + } + + .table-hover .table-success:hover > td, + .table-hover .table-success:hover > th { + background-color: #c1e7c1; + } + + .table-info, + .table-info > th, + .table-info > td { + background-color: #d1edf6; + } + + .table-info th, + .table-info td, + .table-info thead th, + .table-info tbody + tbody { + border-color: #aadeee; + } + + .table-hover .table-info:hover { + background-color: #bce5f2; + } + + .table-hover .table-info:hover > td, + .table-hover .table-info:hover > th { + background-color: #bce5f2; + } + + .table-warning, + .table-warning > th, + .table-warning > td { + background-color: #fde1b9; + } + + .table-warning th, + .table-warning td, + .table-warning thead th, + .table-warning tbody + tbody { + border-color: #fbc77e; + } + + .table-hover .table-warning:hover { + background-color: #fcd6a0; + } + + .table-hover .table-warning:hover > td, + .table-hover .table-warning:hover > th { + background-color: #fcd6a0; + } + + .table-danger, + .table-danger > th, + .table-danger > td { + background-color: #fad2d1; + } + + .table-danger th, + .table-danger td, + .table-danger thead th, + .table-danger tbody + tbody { + border-color: #f6acaa; + } + + .table-hover .table-danger:hover { + background-color: #f8bcba; + } + + .table-hover .table-danger:hover > td, + .table-hover .table-danger:hover > th { + background-color: #f8bcba; + } + + .table-light, + .table-light > th, + .table-light > td { + background-color: #f9fafb; + } + + .table-light th, + .table-light td, + .table-light thead th, + .table-light tbody + tbody { + border-color: #f4f5f7; + } + + .table-hover .table-light:hover { + background-color: #eaedf1; + } + + .table-hover .table-light:hover > td, + .table-hover .table-light:hover > th { + background-color: #eaedf1; + } + + .table-dark, + .table-dark > th, + .table-dark > td { + background-color: #c3c4c5; + } + + .table-dark th, + .table-dark td, + .table-dark thead th, + .table-dark tbody + tbody { + border-color: #8f9193; + } + + .table-hover .table-dark:hover { + background-color: #b6b7b8; + } + + .table-hover .table-dark:hover > td, + .table-hover .table-dark:hover > th { + background-color: #b6b7b8; + } + + .table-active, + .table-active > th, + .table-active > td { + background-color: rgba(255, 255, 255, 0.075); + } + + .table-hover .table-active:hover { + background-color: rgba(242, 242, 242, 0.075); + } + + .table-hover .table-active:hover > td, + .table-hover .table-active:hover > th { + background-color: rgba(242, 242, 242, 0.075); + } + + .table .thead-dark th { + color: #fff; + background-color: #3A3F44; + border-color: rgba(0, 0, 0, 0.6); + } + + .table .thead-light th { + color: #52575C; + background-color: #e9ecef; + border-color: rgba(0, 0, 0, 0.6); + } + + .table-dark { + color: #fff; + background-color: #3A3F44; + } + + .table-dark th, + .table-dark td, + .table-dark thead th { + border-color: rgba(0, 0, 0, 0.6); + } + + .table-dark.table-bordered { + border: 0; + } + + .table-dark.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.05); + } + + .table-dark.table-hover tbody tr:hover { + color: #fff; + background-color: rgba(255, 255, 255, 0.075); + } + + @media (max-width: 575.98px) { + .table-responsive-sm { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-sm > .table-bordered { + border: 0; + } + } + + @media (max-width: 767.98px) { + .table-responsive-md { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-md > .table-bordered { + border: 0; + } + } + + @media (max-width: 991.98px) { + .table-responsive-lg { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-lg > .table-bordered { + border: 0; + } + } + + @media (max-width: 1199.98px) { + .table-responsive-xl { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-xl > .table-bordered { + border: 0; + } + } + + .table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + + .table-responsive > .table-bordered { + border: 0; + } + + .form-control { + display: block; + width: 100%; + height: calc(1.5em + 1.5rem + 2px); + padding: 0.75rem 1rem; + font-size: 0.9375rem; + font-weight: 400; + line-height: 1.5; + color: #52575C; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + border-radius: 0.25rem; + -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + } + + @media (prefers-reduced-motion: reduce) { + .form-control { + -webkit-transition: none; + transition: none; + } + } + + .form-control::-ms-expand { + background-color: transparent; + border: 0; + } + + .form-control:focus { + color: #52575C; + background-color: #fff; + border-color: #757f89; + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.25); + box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.25); + } + + .form-control::-webkit-input-placeholder { + color: #7A8288; + opacity: 1; + } + + .form-control::-ms-input-placeholder { + color: #7A8288; + opacity: 1; + } + + .form-control::placeholder { + color: #7A8288; + opacity: 1; + } + + .form-control:disabled, .form-control[readonly] { + background-color: #ccc; + opacity: 1; + } + + select.form-control:focus::-ms-value { + color: #52575C; + background-color: #fff; + } + + .form-control-file, + .form-control-range { + display: block; + width: 100%; + } + + .col-form-label { + padding-top: calc(0.75rem + 1px); + padding-bottom: calc(0.75rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; + } + + .col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.171875rem; + line-height: 1.5; + } + + .col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.8203125rem; + line-height: 1.5; + } + + .form-control-plaintext { + display: block; + width: 100%; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + margin-bottom: 0; + line-height: 1.5; + color: #aaa; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; + } + + .form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; + } + + .form-control-sm { + height: calc(1.5em + 0.5rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.8203125rem; + line-height: 1.5; + border-radius: 0.2rem; + } + + .form-control-lg { + height: calc(1.5em + 1rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.171875rem; + line-height: 1.5; + border-radius: 0.3rem; + } + + select.form-control[size], select.form-control[multiple] { + height: auto; + } + + textarea.form-control { + height: auto; + } + + .form-group { + margin-bottom: 1rem; + } + + .form-text { + display: block; + margin-top: 0.25rem; + } + + .form-row { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px; + } + + .form-row > .col, + .form-row > [class*="col-"] { + padding-right: 5px; + padding-left: 5px; + } + + .form-check { + position: relative; + display: block; + padding-left: 1.25rem; + } + + .form-check-input { + position: absolute; + margin-top: 0.3rem; + margin-left: -1.25rem; + } + + .form-check-input:disabled ~ .form-check-label { + color: #7A8288; + } + + .form-check-label { + margin-bottom: 0; + } + + .form-check-inline { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding-left: 0; + margin-right: 0.75rem; + } + + .form-check-inline .form-check-input { + position: static; + margin-top: 0; + margin-right: 0.3125rem; + margin-left: 0; + } + + .valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #62c462; + } + + .valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.8203125rem; + line-height: 1.5; + color: #272B30; + background-color: rgba(98, 196, 98, 0.9); + border-radius: 0.25rem; + } + + .was-validated .form-control:valid, .form-control.is-valid { + border-color: #62c462; + padding-right: calc(1.5em + 1.5rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2362c462' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: center right calc(0.375em + 0.375rem); + background-size: calc(0.75em + 0.75rem) calc(0.75em + 0.75rem); + } + + .was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: #62c462; + -webkit-box-shadow: 0 0 0 0.2rem rgba(98, 196, 98, 0.25); + box-shadow: 0 0 0 0.2rem rgba(98, 196, 98, 0.25); + } + + .was-validated .form-control:valid ~ .valid-feedback, + .was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, + .form-control.is-valid ~ .valid-tooltip { + display: block; + } + + .was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 1.5rem); + background-position: top calc(0.375em + 0.375rem) right calc(0.375em + 0.375rem); + } + + .was-validated .custom-select:valid, .custom-select.is-valid { + border-color: #62c462; + padding-right: calc((1em + 1.5rem) * 3 / 4 + 2rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%233A3F44' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 1rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2362c462' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 2rem/calc(0.75em + 0.75rem) calc(0.75em + 0.75rem); + } + + .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { + border-color: #62c462; + -webkit-box-shadow: 0 0 0 0.2rem rgba(98, 196, 98, 0.25); + box-shadow: 0 0 0 0.2rem rgba(98, 196, 98, 0.25); + } + + .was-validated .custom-select:valid ~ .valid-feedback, + .was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback, + .custom-select.is-valid ~ .valid-tooltip { + display: block; + } + + .was-validated .form-control-file:valid ~ .valid-feedback, + .was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback, + .form-control-file.is-valid ~ .valid-tooltip { + display: block; + } + + .was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: #62c462; + } + + .was-validated .form-check-input:valid ~ .valid-feedback, + .was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, + .form-check-input.is-valid ~ .valid-tooltip { + display: block; + } + + .was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { + color: #62c462; + } + + .was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { + border-color: #62c462; + } + + .was-validated .custom-control-input:valid ~ .valid-feedback, + .was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, + .custom-control-input.is-valid ~ .valid-tooltip { + display: block; + } + + .was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { + border-color: #87d287; + background-color: #87d287; + } + + .was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { + -webkit-box-shadow: 0 0 0 0.2rem rgba(98, 196, 98, 0.25); + box-shadow: 0 0 0 0.2rem rgba(98, 196, 98, 0.25); + } + + .was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #62c462; + } + + .was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { + border-color: #62c462; + } + + .was-validated .custom-file-input:valid ~ .valid-feedback, + .was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, + .custom-file-input.is-valid ~ .valid-tooltip { + display: block; + } + + .was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { + border-color: #62c462; + -webkit-box-shadow: 0 0 0 0.2rem rgba(98, 196, 98, 0.25); + box-shadow: 0 0 0 0.2rem rgba(98, 196, 98, 0.25); + } + + .invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #ee5f5b; + } + + .invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.8203125rem; + line-height: 1.5; + color: #fff; + background-color: rgba(238, 95, 91, 0.9); + border-radius: 0.25rem; + } + + .was-validated .form-control:invalid, .form-control.is-invalid { + border-color: #ee5f5b; + padding-right: calc(1.5em + 1.5rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23ee5f5b' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23ee5f5b' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E"); + background-repeat: no-repeat; + background-position: center right calc(0.375em + 0.375rem); + background-size: calc(0.75em + 0.75rem) calc(0.75em + 0.75rem); + } + + .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: #ee5f5b; + -webkit-box-shadow: 0 0 0 0.2rem rgba(238, 95, 91, 0.25); + box-shadow: 0 0 0 0.2rem rgba(238, 95, 91, 0.25); + } + + .was-validated .form-control:invalid ~ .invalid-feedback, + .was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, + .form-control.is-invalid ~ .invalid-tooltip { + display: block; + } + + .was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 1.5rem); + background-position: top calc(0.375em + 0.375rem) right calc(0.375em + 0.375rem); + } + + .was-validated .custom-select:invalid, .custom-select.is-invalid { + border-color: #ee5f5b; + padding-right: calc((1em + 1.5rem) * 3 / 4 + 2rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%233A3F44' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 1rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23ee5f5b' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23ee5f5b' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 2rem/calc(0.75em + 0.75rem) calc(0.75em + 0.75rem); + } + + .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { + border-color: #ee5f5b; + -webkit-box-shadow: 0 0 0 0.2rem rgba(238, 95, 91, 0.25); + box-shadow: 0 0 0 0.2rem rgba(238, 95, 91, 0.25); + } + + .was-validated .custom-select:invalid ~ .invalid-feedback, + .was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback, + .custom-select.is-invalid ~ .invalid-tooltip { + display: block; + } + + .was-validated .form-control-file:invalid ~ .invalid-feedback, + .was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback, + .form-control-file.is-invalid ~ .invalid-tooltip { + display: block; + } + + .was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: #ee5f5b; + } + + .was-validated .form-check-input:invalid ~ .invalid-feedback, + .was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, + .form-check-input.is-invalid ~ .invalid-tooltip { + display: block; + } + + .was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { + color: #ee5f5b; + } + + .was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { + border-color: #ee5f5b; + } + + .was-validated .custom-control-input:invalid ~ .invalid-feedback, + .was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, + .custom-control-input.is-invalid ~ .invalid-tooltip { + display: block; + } + + .was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { + border-color: #f38c89; + background-color: #f38c89; + } + + .was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { + -webkit-box-shadow: 0 0 0 0.2rem rgba(238, 95, 91, 0.25); + box-shadow: 0 0 0 0.2rem rgba(238, 95, 91, 0.25); + } + + .was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #ee5f5b; + } + + .was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { + border-color: #ee5f5b; + } + + .was-validated .custom-file-input:invalid ~ .invalid-feedback, + .was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, + .custom-file-input.is-invalid ~ .invalid-tooltip { + display: block; + } + + .was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { + border-color: #ee5f5b; + -webkit-box-shadow: 0 0 0 0.2rem rgba(238, 95, 91, 0.25); + box-shadow: 0 0 0 0.2rem rgba(238, 95, 91, 0.25); + } + + .form-inline { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + } + + .form-inline .form-check { + width: 100%; + } + + @media (min-width: 576px) { + .form-inline label { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + margin-bottom: 0; + } + .form-inline .form-group { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin-bottom: 0; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-plaintext { + display: inline-block; + } + .form-inline .input-group, + .form-inline .custom-select { + width: auto; + } + .form-inline .form-check { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: auto; + padding-left: 0; + } + .form-inline .form-check-input { + position: relative; + -ms-flex-negative: 0; + flex-shrink: 0; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; + } + .form-inline .custom-control { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + } + .form-inline .custom-control-label { + margin-bottom: 0; + } + } + + .btn { + display: inline-block; + font-weight: 400; + color: #aaa; + text-align: center; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 0.75rem 1rem; + font-size: 0.9375rem; + line-height: 1.5; + border-radius: 0.25rem; + -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + } + + @media (prefers-reduced-motion: reduce) { + .btn { + -webkit-transition: none; + transition: none; + } + } + + .btn:hover { + color: #aaa; + text-decoration: none; + } + + .btn:focus, .btn.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.25); + box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.25); + } + + .btn.disabled, .btn:disabled { + opacity: 0.65; + } + + a.btn.disabled, + fieldset:disabled a.btn { + pointer-events: none; + } + + .btn-primary { + color: #fff; + background-color: #3A3F44; + border-color: #3A3F44; + } + + .btn-primary:hover { + color: #fff; + background-color: #282c2f; + border-color: #232628; + } + + .btn-primary:focus, .btn-primary.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(88, 92, 96, 0.5); + box-shadow: 0 0 0 0.2rem rgba(88, 92, 96, 0.5); + } + + .btn-primary.disabled, .btn-primary:disabled { + color: #fff; + background-color: #3A3F44; + border-color: #3A3F44; + } + + .btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, + .show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #232628; + border-color: #1d1f22; + } + + .btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, + .show > .btn-primary.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(88, 92, 96, 0.5); + box-shadow: 0 0 0 0.2rem rgba(88, 92, 96, 0.5); + } + + .btn-secondary { + color: #fff; + background-color: #7A8288; + border-color: #7A8288; + } + + .btn-secondary:hover { + color: #fff; + background-color: #686f74; + border-color: #62686d; + } + + .btn-secondary:focus, .btn-secondary.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(142, 149, 154, 0.5); + box-shadow: 0 0 0 0.2rem rgba(142, 149, 154, 0.5); + } + + .btn-secondary.disabled, .btn-secondary:disabled { + color: #fff; + background-color: #7A8288; + border-color: #7A8288; + } + + .btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, + .show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #62686d; + border-color: #5c6267; + } + + .btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, + .show > .btn-secondary.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(142, 149, 154, 0.5); + box-shadow: 0 0 0 0.2rem rgba(142, 149, 154, 0.5); + } + + .btn-success { + color: #272B30; + background-color: #62c462; + border-color: #62c462; + } + + .btn-success:hover { + color: #fff; + background-color: #46ba46; + border-color: #42b142; + } + + .btn-success:focus, .btn-success.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(89, 173, 91, 0.5); + box-shadow: 0 0 0 0.2rem rgba(89, 173, 91, 0.5); + } + + .btn-success.disabled, .btn-success:disabled { + color: #272B30; + background-color: #62c462; + border-color: #62c462; + } + + .btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, + .show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #42b142; + border-color: #3fa73f; + } + + .btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, + .show > .btn-success.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(89, 173, 91, 0.5); + box-shadow: 0 0 0 0.2rem rgba(89, 173, 91, 0.5); + } + + .btn-info { + color: #272B30; + background-color: #5bc0de; + border-color: #5bc0de; + } + + .btn-info:hover { + color: #fff; + background-color: #3bb4d8; + border-color: #31b0d5; + } + + .btn-info:focus, .btn-info.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(83, 170, 196, 0.5); + box-shadow: 0 0 0 0.2rem rgba(83, 170, 196, 0.5); + } + + .btn-info.disabled, .btn-info:disabled { + color: #272B30; + background-color: #5bc0de; + border-color: #5bc0de; + } + + .btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, + .show > .btn-info.dropdown-toggle { + color: #fff; + background-color: #31b0d5; + border-color: #2aaacf; + } + + .btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, + .show > .btn-info.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(83, 170, 196, 0.5); + box-shadow: 0 0 0 0.2rem rgba(83, 170, 196, 0.5); + } + + .btn-warning { + color: #272B30; + background-color: #f89406; + border-color: #f89406; + } + + .btn-warning:hover { + color: #fff; + background-color: #d37e05; + border-color: #c67605; + } + + .btn-warning:focus, .btn-warning.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(217, 132, 12, 0.5); + box-shadow: 0 0 0 0.2rem rgba(217, 132, 12, 0.5); + } + + .btn-warning.disabled, .btn-warning:disabled { + color: #272B30; + background-color: #f89406; + border-color: #f89406; + } + + .btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, + .show > .btn-warning.dropdown-toggle { + color: #fff; + background-color: #c67605; + border-color: #ba6f04; + } + + .btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, + .show > .btn-warning.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(217, 132, 12, 0.5); + box-shadow: 0 0 0 0.2rem rgba(217, 132, 12, 0.5); + } + + .btn-danger { + color: #fff; + background-color: #ee5f5b; + border-color: #ee5f5b; + } + + .btn-danger:hover { + color: #fff; + background-color: #ea3d38; + border-color: #e9322d; + } + + .btn-danger:focus, .btn-danger.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(241, 119, 116, 0.5); + box-shadow: 0 0 0 0.2rem rgba(241, 119, 116, 0.5); + } + + .btn-danger.disabled, .btn-danger:disabled { + color: #fff; + background-color: #ee5f5b; + border-color: #ee5f5b; + } + + .btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, + .show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #e9322d; + border-color: #e82721; + } + + .btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, + .show > .btn-danger.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(241, 119, 116, 0.5); + box-shadow: 0 0 0 0.2rem rgba(241, 119, 116, 0.5); + } + + .btn-light { + color: #272B30; + background-color: #e9ecef; + border-color: #e9ecef; + } + + .btn-light:hover { + color: #272B30; + background-color: #d3d9df; + border-color: #cbd3da; + } + + .btn-light:focus, .btn-light.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(204, 207, 210, 0.5); + box-shadow: 0 0 0 0.2rem rgba(204, 207, 210, 0.5); + } + + .btn-light.disabled, .btn-light:disabled { + color: #272B30; + background-color: #e9ecef; + border-color: #e9ecef; + } + + .btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, + .show > .btn-light.dropdown-toggle { + color: #272B30; + background-color: #cbd3da; + border-color: #c4ccd4; + } + + .btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, + .show > .btn-light.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(204, 207, 210, 0.5); + box-shadow: 0 0 0 0.2rem rgba(204, 207, 210, 0.5); + } + + .btn-dark { + color: #fff; + background-color: #272B30; + border-color: #272B30; + } + + .btn-dark:hover { + color: #fff; + background-color: #16181b; + border-color: #101214; + } + + .btn-dark:focus, .btn-dark.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(71, 75, 79, 0.5); + box-shadow: 0 0 0 0.2rem rgba(71, 75, 79, 0.5); + } + + .btn-dark.disabled, .btn-dark:disabled { + color: #fff; + background-color: #272B30; + border-color: #272B30; + } + + .btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, + .show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #101214; + border-color: #0a0b0d; + } + + .btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, + .show > .btn-dark.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(71, 75, 79, 0.5); + box-shadow: 0 0 0 0.2rem rgba(71, 75, 79, 0.5); + } + + .btn-outline-primary { + color: #3A3F44; + border-color: #3A3F44; + } + + .btn-outline-primary:hover { + color: #fff; + background-color: #3A3F44; + border-color: #3A3F44; + } + + .btn-outline-primary:focus, .btn-outline-primary.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.5); + box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.5); + } + + .btn-outline-primary.disabled, .btn-outline-primary:disabled { + color: #3A3F44; + background-color: transparent; + } + + .btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, + .show > .btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #3A3F44; + border-color: #3A3F44; + } + + .btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-primary.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.5); + box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.5); + } + + .btn-outline-secondary { + color: #7A8288; + border-color: #7A8288; + } + + .btn-outline-secondary:hover { + color: #fff; + background-color: #7A8288; + border-color: #7A8288; + } + + .btn-outline-secondary:focus, .btn-outline-secondary.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(122, 130, 136, 0.5); + box-shadow: 0 0 0 0.2rem rgba(122, 130, 136, 0.5); + } + + .btn-outline-secondary.disabled, .btn-outline-secondary:disabled { + color: #7A8288; + background-color: transparent; + } + + .btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, + .show > .btn-outline-secondary.dropdown-toggle { + color: #fff; + background-color: #7A8288; + border-color: #7A8288; + } + + .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-secondary.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(122, 130, 136, 0.5); + box-shadow: 0 0 0 0.2rem rgba(122, 130, 136, 0.5); + } + + .btn-outline-success { + color: #62c462; + border-color: #62c462; + } + + .btn-outline-success:hover { + color: #272B30; + background-color: #62c462; + border-color: #62c462; + } + + .btn-outline-success:focus, .btn-outline-success.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(98, 196, 98, 0.5); + box-shadow: 0 0 0 0.2rem rgba(98, 196, 98, 0.5); + } + + .btn-outline-success.disabled, .btn-outline-success:disabled { + color: #62c462; + background-color: transparent; + } + + .btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, + .show > .btn-outline-success.dropdown-toggle { + color: #272B30; + background-color: #62c462; + border-color: #62c462; + } + + .btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-success.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(98, 196, 98, 0.5); + box-shadow: 0 0 0 0.2rem rgba(98, 196, 98, 0.5); + } + + .btn-outline-info { + color: #5bc0de; + border-color: #5bc0de; + } + + .btn-outline-info:hover { + color: #272B30; + background-color: #5bc0de; + border-color: #5bc0de; + } + + .btn-outline-info:focus, .btn-outline-info.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(91, 192, 222, 0.5); + box-shadow: 0 0 0 0.2rem rgba(91, 192, 222, 0.5); + } + + .btn-outline-info.disabled, .btn-outline-info:disabled { + color: #5bc0de; + background-color: transparent; + } + + .btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, + .show > .btn-outline-info.dropdown-toggle { + color: #272B30; + background-color: #5bc0de; + border-color: #5bc0de; + } + + .btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-info.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(91, 192, 222, 0.5); + box-shadow: 0 0 0 0.2rem rgba(91, 192, 222, 0.5); + } + + .btn-outline-warning { + color: #f89406; + border-color: #f89406; + } + + .btn-outline-warning:hover { + color: #272B30; + background-color: #f89406; + border-color: #f89406; + } + + .btn-outline-warning:focus, .btn-outline-warning.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 148, 6, 0.5); + box-shadow: 0 0 0 0.2rem rgba(248, 148, 6, 0.5); + } + + .btn-outline-warning.disabled, .btn-outline-warning:disabled { + color: #f89406; + background-color: transparent; + } + + .btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, + .show > .btn-outline-warning.dropdown-toggle { + color: #272B30; + background-color: #f89406; + border-color: #f89406; + } + + .btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-warning.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 148, 6, 0.5); + box-shadow: 0 0 0 0.2rem rgba(248, 148, 6, 0.5); + } + + .btn-outline-danger { + color: #ee5f5b; + border-color: #ee5f5b; + } + + .btn-outline-danger:hover { + color: #fff; + background-color: #ee5f5b; + border-color: #ee5f5b; + } + + .btn-outline-danger:focus, .btn-outline-danger.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(238, 95, 91, 0.5); + box-shadow: 0 0 0 0.2rem rgba(238, 95, 91, 0.5); + } + + .btn-outline-danger.disabled, .btn-outline-danger:disabled { + color: #ee5f5b; + background-color: transparent; + } + + .btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, + .show > .btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #ee5f5b; + border-color: #ee5f5b; + } + + .btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-danger.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(238, 95, 91, 0.5); + box-shadow: 0 0 0 0.2rem rgba(238, 95, 91, 0.5); + } + + .btn-outline-light { + color: #e9ecef; + border-color: #e9ecef; + } + + .btn-outline-light:hover { + color: #272B30; + background-color: #e9ecef; + border-color: #e9ecef; + } + + .btn-outline-light:focus, .btn-outline-light.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(233, 236, 239, 0.5); + box-shadow: 0 0 0 0.2rem rgba(233, 236, 239, 0.5); + } + + .btn-outline-light.disabled, .btn-outline-light:disabled { + color: #e9ecef; + background-color: transparent; + } + + .btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, + .show > .btn-outline-light.dropdown-toggle { + color: #272B30; + background-color: #e9ecef; + border-color: #e9ecef; + } + + .btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-light.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(233, 236, 239, 0.5); + box-shadow: 0 0 0 0.2rem rgba(233, 236, 239, 0.5); + } + + .btn-outline-dark { + color: #272B30; + border-color: #272B30; + } + + .btn-outline-dark:hover { + color: #fff; + background-color: #272B30; + border-color: #272B30; + } + + .btn-outline-dark:focus, .btn-outline-dark.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(39, 43, 48, 0.5); + box-shadow: 0 0 0 0.2rem rgba(39, 43, 48, 0.5); + } + + .btn-outline-dark.disabled, .btn-outline-dark:disabled { + color: #272B30; + background-color: transparent; + } + + .btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, + .show > .btn-outline-dark.dropdown-toggle { + color: #fff; + background-color: #272B30; + border-color: #272B30; + } + + .btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-dark.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(39, 43, 48, 0.5); + box-shadow: 0 0 0 0.2rem rgba(39, 43, 48, 0.5); + } + + .btn-link { + font-weight: 400; + color: #fff; + text-decoration: none; + } + + .btn-link:hover { + color: #d9d9d9; + text-decoration: underline; + } + + .btn-link:focus, .btn-link.focus { + text-decoration: underline; + -webkit-box-shadow: none; + box-shadow: none; + } + + .btn-link:disabled, .btn-link.disabled { + color: #7A8288; + pointer-events: none; + } + + .btn-lg, .btn-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.171875rem; + line-height: 1.5; + border-radius: 0.3rem; + } + + .btn-sm, .btn-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.8203125rem; + line-height: 1.5; + border-radius: 0.2rem; + } + + .btn-block { + display: block; + width: 100%; + } + + .btn-block + .btn-block { + margin-top: 0.5rem; + } + + input[type="submit"].btn-block, + input[type="reset"].btn-block, + input[type="button"].btn-block { + width: 100%; + } + + .fade { + -webkit-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; + } + + @media (prefers-reduced-motion: reduce) { + .fade { + -webkit-transition: none; + transition: none; + } + } + + .fade:not(.show) { + opacity: 0; + } + + .collapse:not(.show) { + display: none; + } + + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + transition: height 0.35s ease; + } + + @media (prefers-reduced-motion: reduce) { + .collapsing { + -webkit-transition: none; + transition: none; + } + } + + .dropup, + .dropright, + .dropdown, + .dropleft { + position: relative; + } + + .dropdown-toggle { + white-space: nowrap; + } + + .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; + } + + .dropdown-toggle:empty::after { + margin-left: 0; + } + + .dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0.125rem 0 0; + font-size: 0.9375rem; + color: #aaa; + text-align: left; + list-style: none; + background-color: #3A3F44; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; + } + + .dropdown-menu-left { + right: auto; + left: 0; + } + + .dropdown-menu-right { + right: 0; + left: auto; + } + + @media (min-width: 576px) { + .dropdown-menu-sm-left { + right: auto; + left: 0; + } + .dropdown-menu-sm-right { + right: 0; + left: auto; + } + } + + @media (min-width: 768px) { + .dropdown-menu-md-left { + right: auto; + left: 0; + } + .dropdown-menu-md-right { + right: 0; + left: auto; + } + } + + @media (min-width: 992px) { + .dropdown-menu-lg-left { + right: auto; + left: 0; + } + .dropdown-menu-lg-right { + right: 0; + left: auto; + } + } + + @media (min-width: 1200px) { + .dropdown-menu-xl-left { + right: auto; + left: 0; + } + .dropdown-menu-xl-right { + right: 0; + left: auto; + } + } + + .dropup .dropdown-menu { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.125rem; + } + + .dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; + } + + .dropup .dropdown-toggle:empty::after { + margin-left: 0; + } + + .dropright .dropdown-menu { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; + } + + .dropright .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; + } + + .dropright .dropdown-toggle:empty::after { + margin-left: 0; + } + + .dropright .dropdown-toggle::after { + vertical-align: 0; + } + + .dropleft .dropdown-menu { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; + } + + .dropleft .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + } + + .dropleft .dropdown-toggle::after { + display: none; + } + + .dropleft .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; + } + + .dropleft .dropdown-toggle:empty::after { + margin-left: 0; + } + + .dropleft .dropdown-toggle::before { + vertical-align: 0; + } + + .dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] { + right: auto; + bottom: auto; + } + + .dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid rgba(0, 0, 0, 0.15); + } + + .dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1.5rem; + clear: both; + font-weight: 400; + color: #aaa; + text-align: inherit; + white-space: nowrap; + background-color: transparent; + border: 0; + } + + .dropdown-item:hover, .dropdown-item:focus { + color: #fff; + text-decoration: none; + background-color: #272B30; + } + + .dropdown-item.active, .dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #3A3F44; + } + + .dropdown-item.disabled, .dropdown-item:disabled { + color: #7A8288; + pointer-events: none; + background-color: transparent; + } + + .dropdown-menu.show { + display: block; + } + + .dropdown-header { + display: block; + padding: 0.5rem 1.5rem; + margin-bottom: 0; + font-size: 0.8203125rem; + color: #7A8288; + white-space: nowrap; + } + + .dropdown-item-text { + display: block; + padding: 0.25rem 1.5rem; + color: #aaa; + } + + .btn-group, + .btn-group-vertical { + position: relative; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + vertical-align: middle; + } + + .btn-group > .btn, + .btn-group-vertical > .btn { + position: relative; + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + } + + .btn-group > .btn:hover, + .btn-group-vertical > .btn:hover { + z-index: 1; + } + + .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, + .btn-group-vertical > .btn:focus, + .btn-group-vertical > .btn:active, + .btn-group-vertical > .btn.active { + z-index: 1; + } + + .btn-toolbar { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + } + + .btn-toolbar .input-group { + width: auto; + } + + .btn-group > .btn:not(:first-child), + .btn-group > .btn-group:not(:first-child) { + margin-left: -1px; + } + + .btn-group > .btn:not(:last-child):not(.dropdown-toggle), + .btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .btn-group > .btn:not(:first-child), + .btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; + } + + .dropdown-toggle-split::after, + .dropup .dropdown-toggle-split::after, + .dropright .dropdown-toggle-split::after { + margin-left: 0; + } + + .dropleft .dropdown-toggle-split::before { + margin-right: 0; + } + + .btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; + } + + .btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; + } + + .btn-group-vertical { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + } + + .btn-group-vertical > .btn, + .btn-group-vertical > .btn-group { + width: 100%; + } + + .btn-group-vertical > .btn:not(:first-child), + .btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; + } + + .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), + .btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + + .btn-group-vertical > .btn:not(:first-child), + .btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + + .btn-group-toggle > .btn, + .btn-group-toggle > .btn-group > .btn { + margin-bottom: 0; + } + + .btn-group-toggle > .btn input[type="radio"], + .btn-group-toggle > .btn input[type="checkbox"], + .btn-group-toggle > .btn-group > .btn input[type="radio"], + .btn-group-toggle > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; + } + + .input-group { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: stretch; + -ms-flex-align: stretch; + align-items: stretch; + width: 100%; + } + + .input-group > .form-control, + .input-group > .form-control-plaintext, + .input-group > .custom-select, + .input-group > .custom-file { + position: relative; + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0; + } + + .input-group > .form-control + .form-control, + .input-group > .form-control + .custom-select, + .input-group > .form-control + .custom-file, + .input-group > .form-control-plaintext + .form-control, + .input-group > .form-control-plaintext + .custom-select, + .input-group > .form-control-plaintext + .custom-file, + .input-group > .custom-select + .form-control, + .input-group > .custom-select + .custom-select, + .input-group > .custom-select + .custom-file, + .input-group > .custom-file + .form-control, + .input-group > .custom-file + .custom-select, + .input-group > .custom-file + .custom-file { + margin-left: -1px; + } + + .input-group > .form-control:focus, + .input-group > .custom-select:focus, + .input-group > .custom-file .custom-file-input:focus ~ .custom-file-label { + z-index: 3; + } + + .input-group > .custom-file .custom-file-input:focus { + z-index: 4; + } + + .input-group > .form-control:not(:last-child), + .input-group > .custom-select:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .input-group > .form-control:not(:first-child), + .input-group > .custom-select:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .input-group > .custom-file { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + } + + .input-group > .custom-file:not(:last-child) .custom-file-label, + .input-group > .custom-file:not(:last-child) .custom-file-label::after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .input-group > .custom-file:not(:first-child) .custom-file-label { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .input-group-prepend, + .input-group-append { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + } + + .input-group-prepend .btn, + .input-group-append .btn { + position: relative; + z-index: 2; + } + + .input-group-prepend .btn:focus, + .input-group-append .btn:focus { + z-index: 3; + } + + .input-group-prepend .btn + .btn, + .input-group-prepend .btn + .input-group-text, + .input-group-prepend .input-group-text + .input-group-text, + .input-group-prepend .input-group-text + .btn, + .input-group-append .btn + .btn, + .input-group-append .btn + .input-group-text, + .input-group-append .input-group-text + .input-group-text, + .input-group-append .input-group-text + .btn { + margin-left: -1px; + } + + .input-group-prepend { + margin-right: -1px; + } + + .input-group-append { + margin-left: -1px; + } + + .input-group-text { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 0.75rem 1rem; + margin-bottom: 0; + font-size: 0.9375rem; + font-weight: 400; + line-height: 1.5; + color: #52575C; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.25rem; + } + + .input-group-text input[type="radio"], + .input-group-text input[type="checkbox"] { + margin-top: 0; + } + + .input-group-lg > .form-control:not(textarea), + .input-group-lg > .custom-select { + height: calc(1.5em + 1rem + 2px); + } + + .input-group-lg > .form-control, + .input-group-lg > .custom-select, + .input-group-lg > .input-group-prepend > .input-group-text, + .input-group-lg > .input-group-append > .input-group-text, + .input-group-lg > .input-group-prepend > .btn, + .input-group-lg > .input-group-append > .btn { + padding: 0.5rem 1rem; + font-size: 1.171875rem; + line-height: 1.5; + border-radius: 0.3rem; + } + + .input-group-sm > .form-control:not(textarea), + .input-group-sm > .custom-select { + height: calc(1.5em + 0.5rem + 2px); + } + + .input-group-sm > .form-control, + .input-group-sm > .custom-select, + .input-group-sm > .input-group-prepend > .input-group-text, + .input-group-sm > .input-group-append > .input-group-text, + .input-group-sm > .input-group-prepend > .btn, + .input-group-sm > .input-group-append > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.8203125rem; + line-height: 1.5; + border-radius: 0.2rem; + } + + .input-group-lg > .custom-select, + .input-group-sm > .custom-select { + padding-right: 2rem; + } + + .input-group > .input-group-prepend > .btn, + .input-group > .input-group-prepend > .input-group-text, + .input-group > .input-group-append:not(:last-child) > .btn, + .input-group > .input-group-append:not(:last-child) > .input-group-text, + .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), + .input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .input-group > .input-group-append > .btn, + .input-group > .input-group-append > .input-group-text, + .input-group > .input-group-prepend:not(:first-child) > .btn, + .input-group > .input-group-prepend:not(:first-child) > .input-group-text, + .input-group > .input-group-prepend:first-child > .btn:not(:first-child), + .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .custom-control { + position: relative; + display: block; + min-height: 1.40625rem; + padding-left: 1.5rem; + } + + .custom-control-inline { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + margin-right: 1rem; + } + + .custom-control-input { + position: absolute; + z-index: -1; + opacity: 0; + } + + .custom-control-input:checked ~ .custom-control-label::before { + color: #fff; + border-color: #3A3F44; + background-color: #3A3F44; + } + + .custom-control-input:focus ~ .custom-control-label::before { + -webkit-box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.25); + box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.25); + } + + .custom-control-input:focus:not(:checked) ~ .custom-control-label::before { + border-color: #757f89; + } + + .custom-control-input:not(:disabled):active ~ .custom-control-label::before { + color: #fff; + background-color: #9098a0; + border-color: #9098a0; + } + + .custom-control-input:disabled ~ .custom-control-label { + color: #7A8288; + } + + .custom-control-input:disabled ~ .custom-control-label::before { + background-color: #ccc; + } + + .custom-control-label { + position: relative; + margin-bottom: 0; + vertical-align: top; + } + + .custom-control-label::before { + position: absolute; + top: 0.203125rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + content: ""; + background-color: #fff; + border: #999 solid 1px; + } + + .custom-control-label::after { + position: absolute; + top: 0.203125rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + content: ""; + background: no-repeat 50% / 50% 50%; + } + + .custom-checkbox .custom-control-label::before { + border-radius: 0.25rem; + } + + .custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"); + } + + .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { + border-color: #3A3F44; + background-color: #3A3F44; + } + + .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); + } + + .custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(58, 63, 68, 0.5); + } + + .custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { + background-color: rgba(58, 63, 68, 0.5); + } + + .custom-radio .custom-control-label::before { + border-radius: 50%; + } + + .custom-radio .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); + } + + .custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(58, 63, 68, 0.5); + } + + .custom-switch { + padding-left: 2.25rem; + } + + .custom-switch .custom-control-label::before { + left: -2.25rem; + width: 1.75rem; + pointer-events: all; + border-radius: 0.5rem; + } + + .custom-switch .custom-control-label::after { + top: calc(0.203125rem + 2px); + left: calc(-2.25rem + 2px); + width: calc(1rem - 4px); + height: calc(1rem - 4px); + background-color: #999; + border-radius: 0.5rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + } + + @media (prefers-reduced-motion: reduce) { + .custom-switch .custom-control-label::after { + -webkit-transition: none; + transition: none; + } + } + + .custom-switch .custom-control-input:checked ~ .custom-control-label::after { + background-color: #fff; + -webkit-transform: translateX(0.75rem); + transform: translateX(0.75rem); + } + + .custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(58, 63, 68, 0.5); + } + + .custom-select { + display: inline-block; + width: 100%; + height: calc(1.5em + 1.5rem + 2px); + padding: 0.75rem 2rem 0.75rem 1rem; + font-size: 0.9375rem; + font-weight: 400; + line-height: 1.5; + color: #52575C; + vertical-align: middle; + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%233A3F44' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 1rem center/8px 10px; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 0.25rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + } + + .custom-select:focus { + border-color: #757f89; + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.25); + box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.25); + } + + .custom-select:focus::-ms-value { + color: #52575C; + background-color: #fff; + } + + .custom-select[multiple], .custom-select[size]:not([size="1"]) { + height: auto; + padding-right: 1rem; + background-image: none; + } + + .custom-select:disabled { + color: #7A8288; + background-color: #e9ecef; + } + + .custom-select::-ms-expand { + display: none; + } + + .custom-select-sm { + height: calc(1.5em + 0.5rem + 2px); + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.8203125rem; + } + + .custom-select-lg { + height: calc(1.5em + 1rem + 2px); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.171875rem; + } + + .custom-file { + position: relative; + display: inline-block; + width: 100%; + height: calc(1.5em + 1.5rem + 2px); + margin-bottom: 0; + } + + .custom-file-input { + position: relative; + z-index: 2; + width: 100%; + height: calc(1.5em + 1.5rem + 2px); + margin: 0; + opacity: 0; + } + + .custom-file-input:focus ~ .custom-file-label { + border-color: #757f89; + -webkit-box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.25); + box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.25); + } + + .custom-file-input:disabled ~ .custom-file-label { + background-color: #ccc; + } + + .custom-file-input:lang(en) ~ .custom-file-label::after { + content: "Browse"; + } + + .custom-file-input ~ .custom-file-label[data-browse]::after { + content: attr(data-browse); + } + + .custom-file-label { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 1; + height: calc(1.5em + 1.5rem + 2px); + padding: 0.75rem 1rem; + font-weight: 400; + line-height: 1.5; + color: #52575C; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 0.25rem; + } + + .custom-file-label::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + z-index: 3; + display: block; + height: calc(1.5em + 1.5rem); + padding: 0.75rem 1rem; + line-height: 1.5; + color: #52575C; + content: "Browse"; + background-color: #e9ecef; + border-left: inherit; + border-radius: 0 0.25rem 0.25rem 0; + } + + .custom-range { + width: 100%; + height: calc(1rem + 0.4rem); + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + } + + .custom-range:focus { + outline: none; + } + + .custom-range:focus::-webkit-slider-thumb { + -webkit-box-shadow: 0 0 0 1px #272B30, 0 0 0 0.2rem rgba(58, 63, 68, 0.25); + box-shadow: 0 0 0 1px #272B30, 0 0 0 0.2rem rgba(58, 63, 68, 0.25); + } + + .custom-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #272B30, 0 0 0 0.2rem rgba(58, 63, 68, 0.25); + } + + .custom-range:focus::-ms-thumb { + box-shadow: 0 0 0 1px #272B30, 0 0 0 0.2rem rgba(58, 63, 68, 0.25); + } + + .custom-range::-moz-focus-outer { + border: 0; + } + + .custom-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #3A3F44; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; + } + + @media (prefers-reduced-motion: reduce) { + .custom-range::-webkit-slider-thumb { + -webkit-transition: none; + transition: none; + } + } + + .custom-range::-webkit-slider-thumb:active { + background-color: #9098a0; + } + + .custom-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; + } + + .custom-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #3A3F44; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; + } + + @media (prefers-reduced-motion: reduce) { + .custom-range::-moz-range-thumb { + -webkit-transition: none; + transition: none; + } + } + + .custom-range::-moz-range-thumb:active { + background-color: #9098a0; + } + + .custom-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; + } + + .custom-range::-ms-thumb { + width: 1rem; + height: 1rem; + margin-top: 0; + margin-right: 0.2rem; + margin-left: 0.2rem; + background-color: #3A3F44; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + appearance: none; + } + + @media (prefers-reduced-motion: reduce) { + .custom-range::-ms-thumb { + -webkit-transition: none; + transition: none; + } + } + + .custom-range::-ms-thumb:active { + background-color: #9098a0; + } + + .custom-range::-ms-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: transparent; + border-color: transparent; + border-width: 0.5rem; + } + + .custom-range::-ms-fill-lower { + background-color: #dee2e6; + border-radius: 1rem; + } + + .custom-range::-ms-fill-upper { + margin-right: 15px; + background-color: #dee2e6; + border-radius: 1rem; + } + + .custom-range:disabled::-webkit-slider-thumb { + background-color: #999; + } + + .custom-range:disabled::-webkit-slider-runnable-track { + cursor: default; + } + + .custom-range:disabled::-moz-range-thumb { + background-color: #999; + } + + .custom-range:disabled::-moz-range-track { + cursor: default; + } + + .custom-range:disabled::-ms-thumb { + background-color: #999; + } + + .custom-control-label::before, + .custom-file-label, + .custom-select { + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + } + + @media (prefers-reduced-motion: reduce) { + .custom-control-label::before, + .custom-file-label, + .custom-select { + -webkit-transition: none; + transition: none; + } + } + + .nav { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; + } + + .nav-link { + display: block; + padding: 0.5rem 1rem; + } + + .nav-link:hover, .nav-link:focus { + text-decoration: none; + } + + .nav-link.disabled { + color: #7A8288; + pointer-events: none; + cursor: default; + } + + .nav-tabs { + border-bottom: 1px solid rgba(0, 0, 0, 0.6); + } + + .nav-tabs .nav-item { + margin-bottom: -1px; + } + + .nav-tabs .nav-link { + border: 1px solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; + } + + .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: rgba(0, 0, 0, 0.6); + } + + .nav-tabs .nav-link.disabled { + color: #7A8288; + background-color: transparent; + border-color: transparent; + } + + .nav-tabs .nav-link.active, + .nav-tabs .nav-item.show .nav-link { + color: #fff; + background-color: #272B30; + border-color: rgba(0, 0, 0, 0.6); + } + + .nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; + } + + .nav-pills .nav-link { + border-radius: 0.25rem; + } + + .nav-pills .nav-link.active, + .nav-pills .show > .nav-link { + color: #fff; + background-color: #3A3F44; + } + + .nav-fill .nav-item { + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + text-align: center; + } + + .nav-justified .nav-item { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: center; + } + + .tab-content > .tab-pane { + display: none; + } + + .tab-content > .active { + display: block; + } + + .navbar { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 0 1rem; + } + + .navbar > .container, + .navbar > .container-fluid { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + } + + .navbar-brand { + display: inline-block; + padding-top: 0.32421875rem; + padding-bottom: 0.32421875rem; + margin-right: 1rem; + font-size: 1.171875rem; + line-height: inherit; + white-space: nowrap; + } + + .navbar-brand:hover, .navbar-brand:focus { + text-decoration: none; + } + + .navbar-nav { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; + } + + .navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; + } + + .navbar-nav .dropdown-menu { + position: static; + float: none; + } + + .navbar-text { + display: inline-block; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + } + + .navbar-collapse { + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + } + + .navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1.171875rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: 0.25rem; + } + + .navbar-toggler:hover, .navbar-toggler:focus { + text-decoration: none; + } + + .navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ""; + background: no-repeat center center; + background-size: 100% 100%; + } + + @media (max-width: 575.98px) { + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + padding-right: 0; + padding-left: 0; + } + } + + @media (min-width: 576px) { + .navbar-expand-sm { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-sm .navbar-collapse { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } + } + + @media (max-width: 767.98px) { + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + padding-right: 0; + padding-left: 0; + } + } + + @media (min-width: 768px) { + .navbar-expand-md { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-md .navbar-collapse { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } + } + + @media (max-width: 991.98px) { + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + padding-right: 0; + padding-left: 0; + } + } + + @media (min-width: 992px) { + .navbar-expand-lg { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-lg .navbar-collapse { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } + } + + @media (max-width: 1199.98px) { + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + padding-right: 0; + padding-left: 0; + } + } + + @media (min-width: 1200px) { + .navbar-expand-xl { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-xl .navbar-collapse { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } + } + + .navbar-expand { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + } + + .navbar-expand > .container, + .navbar-expand > .container-fluid { + padding-right: 0; + padding-left: 0; + } + + .navbar-expand .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + + .navbar-expand .navbar-nav .dropdown-menu { + position: absolute; + } + + .navbar-expand .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + + .navbar-expand > .container, + .navbar-expand > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + + .navbar-expand .navbar-collapse { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + + .navbar-expand .navbar-toggler { + display: none; + } + + .navbar-light .navbar-brand { + color: #3A3F44; + } + + .navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { + color: #3A3F44; + } + + .navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.5); + } + + .navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { + color: #3A3F44; + } + + .navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); + } + + .navbar-light .navbar-nav .show > .nav-link, + .navbar-light .navbar-nav .active > .nav-link, + .navbar-light .navbar-nav .nav-link.show, + .navbar-light .navbar-nav .nav-link.active { + color: #3A3F44; + } + + .navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.5); + border-color: rgba(0, 0, 0, 0.1); + } + + .navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + } + + .navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.5); + } + + .navbar-light .navbar-text a { + color: #3A3F44; + } + + .navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { + color: #3A3F44; + } + + .navbar-dark .navbar-brand { + color: #fff; + } + + .navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { + color: #fff; + } + + .navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.5); + } + + .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { + color: #fff; + } + + .navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); + } + + .navbar-dark .navbar-nav .show > .nav-link, + .navbar-dark .navbar-nav .active > .nav-link, + .navbar-dark .navbar-nav .nav-link.show, + .navbar-dark .navbar-nav .nav-link.active { + color: #fff; + } + + .navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.5); + border-color: rgba(255, 255, 255, 0.1); + } + + .navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + } + + .navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.5); + } + + .navbar-dark .navbar-text a { + color: #fff; + } + + .navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { + color: #fff; + } + + .card { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #32383e; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, 0.6); + border-radius: 0.25rem; + } + + .card > hr { + margin-right: 0; + margin-left: 0; + } + + .card > .list-group:first-child .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; + } + + .card > .list-group:last-child .list-group-item:last-child { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + } + + .card-body { + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1.25rem; + } + + .card-title { + margin-bottom: 0.75rem; + } + + .card-subtitle { + margin-top: -0.375rem; + margin-bottom: 0; + } + + .card-text:last-child { + margin-bottom: 0; + } + + .card-link:hover { + text-decoration: none; + } + + .card-link + .card-link { + margin-left: 1.25rem; + } + + .card-header { + padding: 0.75rem 1.25rem; + margin-bottom: 0; + background-color: #515960; + border-bottom: 1px solid rgba(0, 0, 0, 0.6); + } + + .card-header:first-child { + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; + } + + .card-header + .list-group .list-group-item:first-child { + border-top: 0; + } + + .card-footer { + padding: 0.75rem 1.25rem; + background-color: #515960; + border-top: 1px solid rgba(0, 0, 0, 0.6); + } + + .card-footer:last-child { + border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); + } + + .card-header-tabs { + margin-right: -0.625rem; + margin-bottom: -0.75rem; + margin-left: -0.625rem; + border-bottom: 0; + } + + .card-header-pills { + margin-right: -0.625rem; + margin-left: -0.625rem; + } + + .card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; + } + + .card-img { + width: 100%; + border-radius: calc(0.25rem - 1px); + } + + .card-img-top { + width: 100%; + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); + } + + .card-img-bottom { + width: 100%; + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); + } + + .card-deck { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + } + + .card-deck .card { + margin-bottom: 15px; + } + + @media (min-width: 576px) { + .card-deck { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + margin-right: -15px; + margin-left: -15px; + } + .card-deck .card { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + margin-right: 15px; + margin-bottom: 0; + margin-left: 15px; + } + } + + .card-group { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + } + + .card-group > .card { + margin-bottom: 15px; + } + + @media (min-width: 576px) { + .card-group { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + } + .card-group > .card { + -webkit-box-flex: 1; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-top, + .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-bottom, + .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-top, + .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-bottom, + .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } + } + + .card-columns .card { + margin-bottom: 0.75rem; + } + + @media (min-width: 576px) { + .card-columns { + -webkit-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + column-gap: 1.25rem; + orphans: 1; + widows: 1; + } + .card-columns .card { + display: inline-block; + width: 100%; + } + } + + .accordion > .card { + overflow: hidden; + } + + .accordion > .card:not(:first-of-type) .card-header:first-child { + border-radius: 0; + } + + .accordion > .card:not(:first-of-type):not(:last-of-type) { + border-bottom: 0; + border-radius: 0; + } + + .accordion > .card:first-of-type { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + + .accordion > .card:last-of-type { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + + .accordion > .card .card-header { + margin-bottom: -1px; + } + + .breadcrumb { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding: 0.75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #e9ecef; + border-radius: 0.25rem; + } + + .breadcrumb-item + .breadcrumb-item { + padding-left: 0.5rem; + } + + .breadcrumb-item + .breadcrumb-item::before { + display: inline-block; + padding-right: 0.5rem; + color: #7A8288; + content: "/"; + } + + .breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: underline; + } + + .breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: none; + } + + .breadcrumb-item.active { + color: #999; + } + + .pagination { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + padding-left: 0; + list-style: none; + border-radius: 0.25rem; + } + + .page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: -1px; + line-height: 1.25; + color: #fff; + background-color: transparent; + border: 1px solid rgba(0, 0, 0, 0.6); + } + + .page-link:hover { + z-index: 2; + color: #fff; + text-decoration: none; + background-color: transparent; + border-color: rgba(0, 0, 0, 0.6); + } + + .page-link:focus { + z-index: 2; + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.25); + box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.25); + } + + .page-item:first-child .page-link { + margin-left: 0; + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + } + + .page-item:last-child .page-link { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + } + + .page-item.active .page-link { + z-index: 1; + color: #fff; + background-color: transparent; + border-color: rgba(0, 0, 0, 0.6); + } + + .page-item.disabled .page-link { + color: #7A8288; + pointer-events: none; + cursor: auto; + background-color: transparent; + border-color: rgba(0, 0, 0, 0.6); + } + + .pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.171875rem; + line-height: 1.5; + } + + .pagination-lg .page-item:first-child .page-link { + border-top-left-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; + } + + .pagination-lg .page-item:last-child .page-link { + border-top-right-radius: 0.3rem; + border-bottom-right-radius: 0.3rem; + } + + .pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.8203125rem; + line-height: 1.5; + } + + .pagination-sm .page-item:first-child .page-link { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; + } + + .pagination-sm .page-item:last-child .page-link { + border-top-right-radius: 0.2rem; + border-bottom-right-radius: 0.2rem; + } + + .badge { + display: inline-block; + padding: 0.25em 0.4em; + font-size: 75%; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; + -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + } + + @media (prefers-reduced-motion: reduce) { + .badge { + -webkit-transition: none; + transition: none; + } + } + + a.badge:hover, a.badge:focus { + text-decoration: none; + } + + .badge:empty { + display: none; + } + + .btn .badge { + position: relative; + top: -1px; + } + + .badge-pill { + padding-right: 0.6em; + padding-left: 0.6em; + border-radius: 10rem; + } + + .badge-primary { + color: #fff; + background-color: #3A3F44; + } + + a.badge-primary:hover, a.badge-primary:focus { + color: #fff; + background-color: #232628; + } + + a.badge-primary:focus, a.badge-primary.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.5); + box-shadow: 0 0 0 0.2rem rgba(58, 63, 68, 0.5); + } + + .badge-secondary { + color: #fff; + background-color: #7A8288; + } + + a.badge-secondary:hover, a.badge-secondary:focus { + color: #fff; + background-color: #62686d; + } + + a.badge-secondary:focus, a.badge-secondary.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(122, 130, 136, 0.5); + box-shadow: 0 0 0 0.2rem rgba(122, 130, 136, 0.5); + } + + .badge-success { + color: #272B30; + background-color: #62c462; + } + + a.badge-success:hover, a.badge-success:focus { + color: #272B30; + background-color: #42b142; + } + + a.badge-success:focus, a.badge-success.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(98, 196, 98, 0.5); + box-shadow: 0 0 0 0.2rem rgba(98, 196, 98, 0.5); + } + + .badge-info { + color: #272B30; + background-color: #5bc0de; + } + + a.badge-info:hover, a.badge-info:focus { + color: #272B30; + background-color: #31b0d5; + } + + a.badge-info:focus, a.badge-info.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(91, 192, 222, 0.5); + box-shadow: 0 0 0 0.2rem rgba(91, 192, 222, 0.5); + } + + .badge-warning { + color: #272B30; + background-color: #f89406; + } + + a.badge-warning:hover, a.badge-warning:focus { + color: #272B30; + background-color: #c67605; + } + + a.badge-warning:focus, a.badge-warning.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 148, 6, 0.5); + box-shadow: 0 0 0 0.2rem rgba(248, 148, 6, 0.5); + } + + .badge-danger { + color: #fff; + background-color: #ee5f5b; + } + + a.badge-danger:hover, a.badge-danger:focus { + color: #fff; + background-color: #e9322d; + } + + a.badge-danger:focus, a.badge-danger.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(238, 95, 91, 0.5); + box-shadow: 0 0 0 0.2rem rgba(238, 95, 91, 0.5); + } + + .badge-light { + color: #272B30; + background-color: #e9ecef; + } + + a.badge-light:hover, a.badge-light:focus { + color: #272B30; + background-color: #cbd3da; + } + + a.badge-light:focus, a.badge-light.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(233, 236, 239, 0.5); + box-shadow: 0 0 0 0.2rem rgba(233, 236, 239, 0.5); + } + + .badge-dark { + color: #fff; + background-color: #272B30; + } + + a.badge-dark:hover, a.badge-dark:focus { + color: #fff; + background-color: #101214; + } + + a.badge-dark:focus, a.badge-dark.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(39, 43, 48, 0.5); + box-shadow: 0 0 0 0.2rem rgba(39, 43, 48, 0.5); + } + + .jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #1c1e22; + border-radius: 0.3rem; + } + + @media (min-width: 576px) { + .jumbotron { + padding: 4rem 2rem; + } + } + + .jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0; + } + + .alert { + position: relative; + padding: 0.75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: 0.25rem; + } + + .alert-heading { + color: inherit; + } + + .alert-link { + font-weight: 700; + } + + .alert-dismissible { + padding-right: 3.90625rem; + } + + .alert-dismissible .close { + position: absolute; + top: 0; + right: 0; + padding: 0.75rem 1.25rem; + color: inherit; + } + + .alert-primary { + color: #1e2123; + background-color: #d8d9da; + border-color: #c8c9cb; + } + + .alert-primary hr { + border-top-color: #bbbcbf; + } + + .alert-primary .alert-link { + color: #060708; + } + + .alert-secondary { + color: #3f4447; + background-color: #e4e6e7; + border-color: #dadcde; + } + + .alert-secondary hr { + border-top-color: #cdcfd2; + } + + .alert-secondary .alert-link { + color: #272a2c; + } + + .alert-success { + color: #336633; + background-color: #e0f3e0; + border-color: #d3eed3; + } + + .alert-success hr { + border-top-color: #c1e7c1; + } + + .alert-success .alert-link { + color: #224422; + } + + .alert-info { + color: #2f6473; + background-color: #def2f8; + border-color: #d1edf6; + } + + .alert-info hr { + border-top-color: #bce5f2; + } + + .alert-info .alert-link { + color: #20454f; + } + + .alert-warning { + color: #814d03; + background-color: #feeacd; + border-color: #fde1b9; + } + + .alert-warning hr { + border-top-color: #fcd6a0; + } + + .alert-warning .alert-link { + color: #4f2f02; + } + + .alert-danger { + color: #7c312f; + background-color: #fcdfde; + border-color: #fad2d1; + } + + .alert-danger hr { + border-top-color: #f8bcba; + } + + .alert-danger .alert-link { + color: #572221; + } + + .alert-light { + color: #797b7c; + background-color: #fbfbfc; + border-color: #f9fafb; + } + + .alert-light hr { + border-top-color: #eaedf1; + } + + .alert-light .alert-link { + color: #606162; + } + + .alert-dark { + color: #141619; + background-color: #d4d5d6; + border-color: #c3c4c5; + } + + .alert-dark hr { + border-top-color: #b6b7b8; + } + + .alert-dark .alert-link { + color: black; + } + + @-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } + } + + @keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } + } + + .progress { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + height: 1rem; + overflow: hidden; + font-size: 0.703125rem; + background-color: #1c1e22; + border-radius: 0.25rem; + } + + .progress-bar { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + color: #7A8288; + text-align: center; + white-space: nowrap; + background-color: #3A3F44; + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; + } + + @media (prefers-reduced-motion: reduce) { + .progress-bar { + -webkit-transition: none; + transition: none; + } + } + + .progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; + } + + .progress-bar-animated { + -webkit-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite; + } + + @media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + -webkit-animation: none; + animation: none; + } + } + + .media { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + } + + .media-body { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + } + + .list-group { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + } + + .list-group-item-action { + width: 100%; + color: #fff; + text-align: inherit; + } + + .list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; + color: #fff; + text-decoration: none; + background-color: #3e444c; + } + + .list-group-item-action:active { + color: #aaa; + background-color: #e9ecef; + } + + .list-group-item { + position: relative; + display: block; + padding: 0.75rem 1.25rem; + margin-bottom: -1px; + background-color: #32383e; + border: 1px solid rgba(0, 0, 0, 0.6); + } + + .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; + } + + .list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + } + + .list-group-item.disabled, .list-group-item:disabled { + color: #52575C; + pointer-events: none; + background-color: #32383e; + } + + .list-group-item.active { + z-index: 2; + color: #fff; + background-color: #3e444c; + border-color: rgba(0, 0, 0, 0.6); + } + + .list-group-horizontal { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + + .list-group-horizontal .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + + .list-group-horizontal .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + + .list-group-horizontal .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + + @media (min-width: 576px) { + .list-group-horizontal-sm { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-sm .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal-sm .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-sm .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + } + + @media (min-width: 768px) { + .list-group-horizontal-md { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-md .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal-md .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-md .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + } + + @media (min-width: 992px) { + .list-group-horizontal-lg { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-lg .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal-lg .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-lg .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + } + + @media (min-width: 1200px) { + .list-group-horizontal-xl { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-xl .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal-xl .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-xl .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + } + + .list-group-flush .list-group-item { + border-right: 0; + border-left: 0; + border-radius: 0; + } + + .list-group-flush .list-group-item:last-child { + margin-bottom: -1px; + } + + .list-group-flush:first-child .list-group-item:first-child { + border-top: 0; + } + + .list-group-flush:last-child .list-group-item:last-child { + margin-bottom: 0; + border-bottom: 0; + } + + .list-group-item-primary { + color: #1e2123; + background-color: #c8c9cb; + } + + .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #1e2123; + background-color: #bbbcbf; + } + + .list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #1e2123; + border-color: #1e2123; + } + + .list-group-item-secondary { + color: #3f4447; + background-color: #dadcde; + } + + .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #3f4447; + background-color: #cdcfd2; + } + + .list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #3f4447; + border-color: #3f4447; + } + + .list-group-item-success { + color: #336633; + background-color: #d3eed3; + } + + .list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: #336633; + background-color: #c1e7c1; + } + + .list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #336633; + border-color: #336633; + } + + .list-group-item-info { + color: #2f6473; + background-color: #d1edf6; + } + + .list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: #2f6473; + background-color: #bce5f2; + } + + .list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #2f6473; + border-color: #2f6473; + } + + .list-group-item-warning { + color: #814d03; + background-color: #fde1b9; + } + + .list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: #814d03; + background-color: #fcd6a0; + } + + .list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #814d03; + border-color: #814d03; + } + + .list-group-item-danger { + color: #7c312f; + background-color: #fad2d1; + } + + .list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: #7c312f; + background-color: #f8bcba; + } + + .list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #7c312f; + border-color: #7c312f; + } + + .list-group-item-light { + color: #797b7c; + background-color: #f9fafb; + } + + .list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: #797b7c; + background-color: #eaedf1; + } + + .list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #797b7c; + border-color: #797b7c; + } + + .list-group-item-dark { + color: #141619; + background-color: #c3c4c5; + } + + .list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #141619; + background-color: #b6b7b8; + } + + .list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #141619; + border-color: #141619; + } + + .close { + float: right; + font-size: 1.40625rem; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5; + } + + .close:hover { + color: #000; + text-decoration: none; + } + + .close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { + opacity: .75; + } + + button.close { + padding: 0; + background-color: transparent; + border: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + } + + a.close.disabled { + pointer-events: none; + } + + .toast { + max-width: 350px; + overflow: hidden; + font-size: 0.875rem; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + -webkit-box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + -webkit-backdrop-filter: blur(10px); + backdrop-filter: blur(10px); + opacity: 0; + border-radius: 0.25rem; + } + + .toast:not(:last-child) { + margin-bottom: 0.75rem; + } + + .toast.showing { + opacity: 1; + } + + .toast.show { + display: block; + opacity: 1; + } + + .toast.hide { + display: none; + } + + .toast-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 0.25rem 0.75rem; + color: #7A8288; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + } + + .toast-body { + padding: 0.75rem; + } + + .modal-open { + overflow: hidden; + } + + .modal-open .modal { + overflow-x: hidden; + overflow-y: auto; + } + + .modal { + position: fixed; + top: 0; + left: 0; + z-index: 1050; + display: none; + width: 100%; + height: 100%; + overflow: hidden; + outline: 0; + } + + .modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; + } + + .modal.fade .modal-dialog { + -webkit-transition: -webkit-transform 0.3s ease-out; + transition: -webkit-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; + -webkit-transform: translate(0, -50px); + transform: translate(0, -50px); + } + + @media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + -webkit-transition: none; + transition: none; + } + } + + .modal.show .modal-dialog { + -webkit-transform: none; + transform: none; + } + + .modal-dialog-scrollable { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + max-height: calc(100% - 1rem); + } + + .modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 1rem); + overflow: hidden; + } + + .modal-dialog-scrollable .modal-header, + .modal-dialog-scrollable .modal-footer { + -ms-flex-negative: 0; + flex-shrink: 0; + } + + .modal-dialog-scrollable .modal-body { + overflow-y: auto; + } + + .modal-dialog-centered { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: calc(100% - 1rem); + } + + .modal-dialog-centered::before { + display: block; + height: calc(100vh - 1rem); + content: ""; + } + + .modal-dialog-centered.modal-dialog-scrollable { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + height: 100%; + } + + .modal-dialog-centered.modal-dialog-scrollable .modal-content { + max-height: none; + } + + .modal-dialog-centered.modal-dialog-scrollable::before { + content: none; + } + + .modal-content { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #32383e; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; + outline: 0; + } + + .modal-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; + } + + .modal-backdrop.fade { + opacity: 0; + } + + .modal-backdrop.show { + opacity: 0.5; + } + + .modal-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 1rem 1rem; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + border-top-left-radius: 0.3rem; + border-top-right-radius: 0.3rem; + } + + .modal-header .close { + padding: 1rem 1rem; + margin: -1rem -1rem -1rem auto; + } + + .modal-title { + margin-bottom: 0; + line-height: 1.5; + } + + .modal-body { + position: relative; + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1rem; + } + + .modal-footer { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 1rem; + border-top: 1px solid rgba(0, 0, 0, 0.2); + border-bottom-right-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; + } + + .modal-footer > :not(:first-child) { + margin-left: .25rem; + } + + .modal-footer > :not(:last-child) { + margin-right: .25rem; + } + + .modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; + } + + @media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } + .modal-dialog-scrollable { + max-height: calc(100% - 3.5rem); + } + .modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 3.5rem); + } + .modal-dialog-centered { + min-height: calc(100% - 3.5rem); + } + .modal-dialog-centered::before { + height: calc(100vh - 3.5rem); + } + .modal-sm { + max-width: 300px; + } + } + + @media (min-width: 992px) { + .modal-lg, + .modal-xl { + max-width: 800px; + } + } + + @media (min-width: 1200px) { + .modal-xl { + max-width: 1140px; + } + } + + .tooltip { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.8203125rem; + word-wrap: break-word; + opacity: 0; + } + + .tooltip.show { + opacity: 0.9; + } + + .tooltip .arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; + } + + .tooltip .arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; + } + + .bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] { + padding: 0.4rem 0; + } + + .bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow { + bottom: 0; + } + + .bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { + top: 0; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; + } + + .bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] { + padding: 0 0.4rem; + } + + .bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; + } + + .bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before { + right: 0; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; + } + + .bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] { + padding: 0.4rem 0; + } + + .bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow { + top: 0; + } + + .bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { + bottom: 0; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; + } + + .bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] { + padding: 0 0.4rem; + } + + .bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; + } + + .bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before { + left: 0; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; + } + + .tooltip-inner { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 0.25rem; + } + + .popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.8203125rem; + word-wrap: break-word; + background-color: #32383e; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; + } + + .popover .arrow { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; + margin: 0 0.3rem; + } + + .popover .arrow::before, .popover .arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; + } + + .bs-popover-top, .bs-popover-auto[x-placement^="top"] { + margin-bottom: 0.5rem; + } + + .bs-popover-top > .arrow, .bs-popover-auto[x-placement^="top"] > .arrow { + bottom: calc((0.5rem + 1px) * -1); + } + + .bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^="top"] > .arrow::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); + } + + .bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^="top"] > .arrow::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: #32383e; + } + + .bs-popover-right, .bs-popover-auto[x-placement^="right"] { + margin-left: 0.5rem; + } + + .bs-popover-right > .arrow, .bs-popover-auto[x-placement^="right"] > .arrow { + left: calc((0.5rem + 1px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; + } + + .bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^="right"] > .arrow::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); + } + + .bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^="right"] > .arrow::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: #32383e; + } + + .bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { + margin-top: 0.5rem; + } + + .bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^="bottom"] > .arrow { + top: calc((0.5rem + 1px) * -1); + } + + .bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^="bottom"] > .arrow::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); + } + + .bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^="bottom"] > .arrow::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #32383e; + } + + .bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ""; + border-bottom: 1px solid #2c3036; + } + + .bs-popover-left, .bs-popover-auto[x-placement^="left"] { + margin-right: 0.5rem; + } + + .bs-popover-left > .arrow, .bs-popover-auto[x-placement^="left"] > .arrow { + right: calc((0.5rem + 1px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; + } + + .bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^="left"] > .arrow::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); + } + + .bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^="left"] > .arrow::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: #32383e; + } + + .popover-header { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 0.9375rem; + background-color: #2c3036; + border-bottom: 1px solid #202328; + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); + } + + .popover-header:empty { + display: none; + } + + .popover-body { + padding: 0.5rem 0.75rem; + color: #aaa; + } + + .carousel { + position: relative; + } + + .carousel.pointer-event { + -ms-touch-action: pan-y; + touch-action: pan-y; + } + + .carousel-inner { + position: relative; + width: 100%; + overflow: hidden; + } + + .carousel-inner::after { + display: block; + clear: both; + content: ""; + } + + .carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transition: -webkit-transform 0.6s ease-in-out; + transition: -webkit-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out; + } + + @media (prefers-reduced-motion: reduce) { + .carousel-item { + -webkit-transition: none; + transition: none; + } + } + + .carousel-item.active, + .carousel-item-next, + .carousel-item-prev { + display: block; + } + + .carousel-item-next:not(.carousel-item-left), + .active.carousel-item-right { + -webkit-transform: translateX(100%); + transform: translateX(100%); + } + + .carousel-item-prev:not(.carousel-item-right), + .active.carousel-item-left { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + } + + .carousel-fade .carousel-item { + opacity: 0; + -webkit-transition-property: opacity; + transition-property: opacity; + -webkit-transform: none; + transform: none; + } + + .carousel-fade .carousel-item.active, + .carousel-fade .carousel-item-next.carousel-item-left, + .carousel-fade .carousel-item-prev.carousel-item-right { + z-index: 1; + opacity: 1; + } + + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-right { + z-index: 0; + opacity: 0; + -webkit-transition: 0s 0.6s opacity; + transition: 0s 0.6s opacity; + } + + @media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-right { + -webkit-transition: none; + transition: none; + } + } + + .carousel-control-prev, + .carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: 0.5; + -webkit-transition: opacity 0.15s ease; + transition: opacity 0.15s ease; + } + + @media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + -webkit-transition: none; + transition: none; + } + } + + .carousel-control-prev:hover, .carousel-control-prev:focus, + .carousel-control-next:hover, + .carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; + } + + .carousel-control-prev { + left: 0; + } + + .carousel-control-next { + right: 0; + } + + .carousel-control-prev-icon, + .carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: no-repeat 50% / 100% 100%; + } + + .carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e"); + } + + .carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e"); + } + + .carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 15; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; + } + + .carousel-indicators li { + -webkit-box-sizing: content-box; + box-sizing: content-box; + -webkit-box-flex: 0; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: .5; + -webkit-transition: opacity 0.6s ease; + transition: opacity 0.6s ease; + } + + @media (prefers-reduced-motion: reduce) { + .carousel-indicators li { + -webkit-transition: none; + transition: none; + } + } + + .carousel-indicators .active { + opacity: 1; + } + + .carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + } + + @-webkit-keyframes spinner-border { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } + } + + @keyframes spinner-border { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } + } + + .spinner-border { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + border: 0.25em solid currentColor; + border-right-color: transparent; + border-radius: 50%; + -webkit-animation: spinner-border .75s linear infinite; + animation: spinner-border .75s linear infinite; + } + + .spinner-border-sm { + width: 1rem; + height: 1rem; + border-width: 0.2em; + } + + @-webkit-keyframes spinner-grow { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + opacity: 1; + } + } + + @keyframes spinner-grow { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + opacity: 1; + } + } + + .spinner-grow { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + -webkit-animation: spinner-grow .75s linear infinite; + animation: spinner-grow .75s linear infinite; + } + + .spinner-grow-sm { + width: 1rem; + height: 1rem; + } + + .align-baseline { + vertical-align: baseline !important; + } + + .align-top { + vertical-align: top !important; + } + + .align-middle { + vertical-align: middle !important; + } + + .align-bottom { + vertical-align: bottom !important; + } + + .align-text-bottom { + vertical-align: text-bottom !important; + } + + .align-text-top { + vertical-align: text-top !important; + } + + .bg-primary { + background-color: #3A3F44 !important; + } + + a.bg-primary:hover, a.bg-primary:focus, + button.bg-primary:hover, + button.bg-primary:focus { + background-color: #232628 !important; + } + + .bg-secondary { + background-color: #7A8288 !important; + } + + a.bg-secondary:hover, a.bg-secondary:focus, + button.bg-secondary:hover, + button.bg-secondary:focus { + background-color: #62686d !important; + } + + .bg-success { + background-color: #62c462 !important; + } + + a.bg-success:hover, a.bg-success:focus, + button.bg-success:hover, + button.bg-success:focus { + background-color: #42b142 !important; + } + + .bg-info { + background-color: #5bc0de !important; + } + + a.bg-info:hover, a.bg-info:focus, + button.bg-info:hover, + button.bg-info:focus { + background-color: #31b0d5 !important; + } + + .bg-warning { + background-color: #f89406 !important; + } + + a.bg-warning:hover, a.bg-warning:focus, + button.bg-warning:hover, + button.bg-warning:focus { + background-color: #c67605 !important; + } + + .bg-danger { + background-color: #ee5f5b !important; + } + + a.bg-danger:hover, a.bg-danger:focus, + button.bg-danger:hover, + button.bg-danger:focus { + background-color: #e9322d !important; + } + + .bg-light { + background-color: #e9ecef !important; + } + + a.bg-light:hover, a.bg-light:focus, + button.bg-light:hover, + button.bg-light:focus { + background-color: #cbd3da !important; + } + + .bg-dark { + background-color: #272B30 !important; + } + + a.bg-dark:hover, a.bg-dark:focus, + button.bg-dark:hover, + button.bg-dark:focus { + background-color: #101214 !important; + } + + .bg-white { + background-color: #fff !important; + } + + .bg-transparent { + background-color: transparent !important; + } + + .border { + border: 1px solid #dee2e6 !important; + } + + .border-top { + border-top: 1px solid #dee2e6 !important; + } + + .border-right { + border-right: 1px solid #dee2e6 !important; + } + + .border-bottom { + border-bottom: 1px solid #dee2e6 !important; + } + + .border-left { + border-left: 1px solid #dee2e6 !important; + } + + .border-0 { + border: 0 !important; + } + + .border-top-0 { + border-top: 0 !important; + } + + .border-right-0 { + border-right: 0 !important; + } + + .border-bottom-0 { + border-bottom: 0 !important; + } + + .border-left-0 { + border-left: 0 !important; + } + + .border-primary { + border-color: #3A3F44 !important; + } + + .border-secondary { + border-color: #7A8288 !important; + } + + .border-success { + border-color: #62c462 !important; + } + + .border-info { + border-color: #5bc0de !important; + } + + .border-warning { + border-color: #f89406 !important; + } + + .border-danger { + border-color: #ee5f5b !important; + } + + .border-light { + border-color: #e9ecef !important; + } + + .border-dark { + border-color: #272B30 !important; + } + + .border-white { + border-color: #fff !important; + } + + .rounded-sm { + border-radius: 0.2rem !important; + } + + .rounded { + border-radius: 0.25rem !important; + } + + .rounded-top { + border-top-left-radius: 0.25rem !important; + border-top-right-radius: 0.25rem !important; + } + + .rounded-right { + border-top-right-radius: 0.25rem !important; + border-bottom-right-radius: 0.25rem !important; + } + + .rounded-bottom { + border-bottom-right-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; + } + + .rounded-left { + border-top-left-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; + } + + .rounded-lg { + border-radius: 0.3rem !important; + } + + .rounded-circle { + border-radius: 50% !important; + } + + .rounded-pill { + border-radius: 50rem !important; + } + + .rounded-0 { + border-radius: 0 !important; + } + + .clearfix::after { + display: block; + clear: both; + content: ""; + } + + .d-none { + display: none !important; + } + + .d-inline { + display: inline !important; + } + + .d-inline-block { + display: inline-block !important; + } + + .d-block { + display: block !important; + } + + .d-table { + display: table !important; + } + + .d-table-row { + display: table-row !important; + } + + .d-table-cell { + display: table-cell !important; + } + + .d-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + } + + .d-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + + @media (min-width: 576px) { + .d-sm-none { + display: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-sm-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + } + + @media (min-width: 768px) { + .d-md-none { + display: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-md-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + } + + @media (min-width: 992px) { + .d-lg-none { + display: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-lg-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + } + + @media (min-width: 1200px) { + .d-xl-none { + display: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-xl-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + } + + @media print { + .d-print-none { + display: none !important; + } + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-print-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + } + + .embed-responsive { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden; + } + + .embed-responsive::before { + display: block; + content: ""; + } + + .embed-responsive .embed-responsive-item, + .embed-responsive iframe, + .embed-responsive embed, + .embed-responsive object, + .embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; + } + + .embed-responsive-21by9::before { + padding-top: 42.8571428571%; + } + + .embed-responsive-16by9::before { + padding-top: 56.25%; + } + + .embed-responsive-4by3::before { + padding-top: 75%; + } + + .embed-responsive-1by1::before { + padding-top: 100%; + } + + .flex-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + + .flex-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + + .flex-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + + .flex-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + + .flex-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + + .flex-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + + .flex-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + + .flex-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + + .flex-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + + .flex-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + + .flex-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + + .flex-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + + .justify-content-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + + .justify-content-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + + .justify-content-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + + .justify-content-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + + .justify-content-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + + .align-items-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + + .align-items-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + + .align-items-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + + .align-items-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + + .align-items-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + + .align-content-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + + .align-content-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + + .align-content-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + + .align-content-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + + .align-content-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + + .align-content-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + + .align-self-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + + .align-self-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + + .align-self-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + + .align-self-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + + .align-self-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + + .align-self-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } + + @media (min-width: 576px) { + .flex-sm-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-sm-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-sm-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-sm-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-sm-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-sm-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-sm-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-sm-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-sm-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-sm-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-sm-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-sm-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-sm-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-sm-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-sm-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-sm-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-sm-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-sm-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-sm-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-sm-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-sm-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-sm-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-sm-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-sm-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-sm-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-sm-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-sm-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-sm-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } + } + + @media (min-width: 768px) { + .flex-md-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-md-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-md-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-md-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-md-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-md-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-md-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-md-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-md-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-md-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-md-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-md-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-md-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-md-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-md-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-md-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-md-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-md-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-md-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-md-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-md-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-md-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-md-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-md-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-md-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-md-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-md-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-md-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-md-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-md-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } + } + + @media (min-width: 992px) { + .flex-lg-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-lg-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-lg-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-lg-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-lg-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-lg-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-lg-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-lg-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-lg-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-lg-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-lg-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-lg-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-lg-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-lg-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-lg-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-lg-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-lg-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-lg-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-lg-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-lg-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-lg-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-lg-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-lg-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-lg-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-lg-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-lg-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-lg-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-lg-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } + } + + @media (min-width: 1200px) { + .flex-xl-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-xl-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-xl-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-xl-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-xl-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-xl-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-xl-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-xl-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-xl-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-xl-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-xl-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-xl-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-xl-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-xl-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-xl-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-xl-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-xl-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-xl-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-xl-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-xl-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-xl-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-xl-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-xl-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-xl-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-xl-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-xl-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-xl-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-xl-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } + } + + .float-left { + float: left !important; + } + + .float-right { + float: right !important; + } + + .float-none { + float: none !important; + } + + @media (min-width: 576px) { + .float-sm-left { + float: left !important; + } + .float-sm-right { + float: right !important; + } + .float-sm-none { + float: none !important; + } + } + + @media (min-width: 768px) { + .float-md-left { + float: left !important; + } + .float-md-right { + float: right !important; + } + .float-md-none { + float: none !important; + } + } + + @media (min-width: 992px) { + .float-lg-left { + float: left !important; + } + .float-lg-right { + float: right !important; + } + .float-lg-none { + float: none !important; + } + } + + @media (min-width: 1200px) { + .float-xl-left { + float: left !important; + } + .float-xl-right { + float: right !important; + } + .float-xl-none { + float: none !important; + } + } + + .overflow-auto { + overflow: auto !important; + } + + .overflow-hidden { + overflow: hidden !important; + } + + .position-static { + position: static !important; + } + + .position-relative { + position: relative !important; + } + + .position-absolute { + position: absolute !important; + } + + .position-fixed { + position: fixed !important; + } + + .position-sticky { + position: -webkit-sticky !important; + position: sticky !important; + } + + .fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; + } + + .fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; + } + + @supports ((position: -webkit-sticky) or (position: sticky)) { + .sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + } + + .sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; + } + + .sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; + } + + .shadow-sm { + -webkit-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; + } + + .shadow { + -webkit-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; + } + + .shadow-lg { + -webkit-box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; + } + + .shadow-none { + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + + .w-25 { + width: 25% !important; + } + + .w-50 { + width: 50% !important; + } + + .w-75 { + width: 75% !important; + } + + .w-100 { + width: 100% !important; + } + + .w-auto { + width: auto !important; + } + + .h-25 { + height: 25% !important; + } + + .h-50 { + height: 50% !important; + } + + .h-75 { + height: 75% !important; + } + + .h-100 { + height: 100% !important; + } + + .h-auto { + height: auto !important; + } + + .mw-100 { + max-width: 100% !important; + } + + .mh-100 { + max-height: 100% !important; + } + + .min-vw-100 { + min-width: 100vw !important; + } + + .min-vh-100 { + min-height: 100vh !important; + } + + .vw-100 { + width: 100vw !important; + } + + .vh-100 { + height: 100vh !important; + } + + .stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + pointer-events: auto; + content: ""; + background-color: rgba(0, 0, 0, 0); + } + + .m-0 { + margin: 0 !important; + } + + .mt-0, + .my-0 { + margin-top: 0 !important; + } + + .mr-0, + .mx-0 { + margin-right: 0 !important; + } + + .mb-0, + .my-0 { + margin-bottom: 0 !important; + } + + .ml-0, + .mx-0 { + margin-left: 0 !important; + } + + .m-1 { + margin: 0.25rem !important; + } + + .mt-1, + .my-1 { + margin-top: 0.25rem !important; + } + + .mr-1, + .mx-1 { + margin-right: 0.25rem !important; + } + + .mb-1, + .my-1 { + margin-bottom: 0.25rem !important; + } + + .ml-1, + .mx-1 { + margin-left: 0.25rem !important; + } + + .m-2 { + margin: 0.5rem !important; + } + + .mt-2, + .my-2 { + margin-top: 0.5rem !important; + } + + .mr-2, + .mx-2 { + margin-right: 0.5rem !important; + } + + .mb-2, + .my-2 { + margin-bottom: 0.5rem !important; + } + + .ml-2, + .mx-2 { + margin-left: 0.5rem !important; + } + + .m-3 { + margin: 1rem !important; + } + + .mt-3, + .my-3 { + margin-top: 1rem !important; + } + + .mr-3, + .mx-3 { + margin-right: 1rem !important; + } + + .mb-3, + .my-3 { + margin-bottom: 1rem !important; + } + + .ml-3, + .mx-3 { + margin-left: 1rem !important; + } + + .m-4 { + margin: 1.5rem !important; + } + + .mt-4, + .my-4 { + margin-top: 1.5rem !important; + } + + .mr-4, + .mx-4 { + margin-right: 1.5rem !important; + } + + .mb-4, + .my-4 { + margin-bottom: 1.5rem !important; + } + + .ml-4, + .mx-4 { + margin-left: 1.5rem !important; + } + + .m-5 { + margin: 3rem !important; + } + + .mt-5, + .my-5 { + margin-top: 3rem !important; + } + + .mr-5, + .mx-5 { + margin-right: 3rem !important; + } + + .mb-5, + .my-5 { + margin-bottom: 3rem !important; + } + + .ml-5, + .mx-5 { + margin-left: 3rem !important; + } + + .p-0 { + padding: 0 !important; + } + + .pt-0, + .py-0 { + padding-top: 0 !important; + } + + .pr-0, + .px-0 { + padding-right: 0 !important; + } + + .pb-0, + .py-0 { + padding-bottom: 0 !important; + } + + .pl-0, + .px-0 { + padding-left: 0 !important; + } + + .p-1 { + padding: 0.25rem !important; + } + + .pt-1, + .py-1 { + padding-top: 0.25rem !important; + } + + .pr-1, + .px-1 { + padding-right: 0.25rem !important; + } + + .pb-1, + .py-1 { + padding-bottom: 0.25rem !important; + } + + .pl-1, + .px-1 { + padding-left: 0.25rem !important; + } + + .p-2 { + padding: 0.5rem !important; + } + + .pt-2, + .py-2 { + padding-top: 0.5rem !important; + } + + .pr-2, + .px-2 { + padding-right: 0.5rem !important; + } + + .pb-2, + .py-2 { + padding-bottom: 0.5rem !important; + } + + .pl-2, + .px-2 { + padding-left: 0.5rem !important; + } + + .p-3 { + padding: 1rem !important; + } + + .pt-3, + .py-3 { + padding-top: 1rem !important; + } + + .pr-3, + .px-3 { + padding-right: 1rem !important; + } + + .pb-3, + .py-3 { + padding-bottom: 1rem !important; + } + + .pl-3, + .px-3 { + padding-left: 1rem !important; + } + + .p-4 { + padding: 1.5rem !important; + } + + .pt-4, + .py-4 { + padding-top: 1.5rem !important; + } + + .pr-4, + .px-4 { + padding-right: 1.5rem !important; + } + + .pb-4, + .py-4 { + padding-bottom: 1.5rem !important; + } + + .pl-4, + .px-4 { + padding-left: 1.5rem !important; + } + + .p-5 { + padding: 3rem !important; + } + + .pt-5, + .py-5 { + padding-top: 3rem !important; + } + + .pr-5, + .px-5 { + padding-right: 3rem !important; + } + + .pb-5, + .py-5 { + padding-bottom: 3rem !important; + } + + .pl-5, + .px-5 { + padding-left: 3rem !important; + } + + .m-n1 { + margin: -0.25rem !important; + } + + .mt-n1, + .my-n1 { + margin-top: -0.25rem !important; + } + + .mr-n1, + .mx-n1 { + margin-right: -0.25rem !important; + } + + .mb-n1, + .my-n1 { + margin-bottom: -0.25rem !important; + } + + .ml-n1, + .mx-n1 { + margin-left: -0.25rem !important; + } + + .m-n2 { + margin: -0.5rem !important; + } + + .mt-n2, + .my-n2 { + margin-top: -0.5rem !important; + } + + .mr-n2, + .mx-n2 { + margin-right: -0.5rem !important; + } + + .mb-n2, + .my-n2 { + margin-bottom: -0.5rem !important; + } + + .ml-n2, + .mx-n2 { + margin-left: -0.5rem !important; + } + + .m-n3 { + margin: -1rem !important; + } + + .mt-n3, + .my-n3 { + margin-top: -1rem !important; + } + + .mr-n3, + .mx-n3 { + margin-right: -1rem !important; + } + + .mb-n3, + .my-n3 { + margin-bottom: -1rem !important; + } + + .ml-n3, + .mx-n3 { + margin-left: -1rem !important; + } + + .m-n4 { + margin: -1.5rem !important; + } + + .mt-n4, + .my-n4 { + margin-top: -1.5rem !important; + } + + .mr-n4, + .mx-n4 { + margin-right: -1.5rem !important; + } + + .mb-n4, + .my-n4 { + margin-bottom: -1.5rem !important; + } + + .ml-n4, + .mx-n4 { + margin-left: -1.5rem !important; + } + + .m-n5 { + margin: -3rem !important; + } + + .mt-n5, + .my-n5 { + margin-top: -3rem !important; + } + + .mr-n5, + .mx-n5 { + margin-right: -3rem !important; + } + + .mb-n5, + .my-n5 { + margin-bottom: -3rem !important; + } + + .ml-n5, + .mx-n5 { + margin-left: -3rem !important; + } + + .m-auto { + margin: auto !important; + } + + .mt-auto, + .my-auto { + margin-top: auto !important; + } + + .mr-auto, + .mx-auto { + margin-right: auto !important; + } + + .mb-auto, + .my-auto { + margin-bottom: auto !important; + } + + .ml-auto, + .mx-auto { + margin-left: auto !important; + } + + @media (min-width: 576px) { + .m-sm-0 { + margin: 0 !important; + } + .mt-sm-0, + .my-sm-0 { + margin-top: 0 !important; + } + .mr-sm-0, + .mx-sm-0 { + margin-right: 0 !important; + } + .mb-sm-0, + .my-sm-0 { + margin-bottom: 0 !important; + } + .ml-sm-0, + .mx-sm-0 { + margin-left: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .mt-sm-1, + .my-sm-1 { + margin-top: 0.25rem !important; + } + .mr-sm-1, + .mx-sm-1 { + margin-right: 0.25rem !important; + } + .mb-sm-1, + .my-sm-1 { + margin-bottom: 0.25rem !important; + } + .ml-sm-1, + .mx-sm-1 { + margin-left: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .mt-sm-2, + .my-sm-2 { + margin-top: 0.5rem !important; + } + .mr-sm-2, + .mx-sm-2 { + margin-right: 0.5rem !important; + } + .mb-sm-2, + .my-sm-2 { + margin-bottom: 0.5rem !important; + } + .ml-sm-2, + .mx-sm-2 { + margin-left: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .mt-sm-3, + .my-sm-3 { + margin-top: 1rem !important; + } + .mr-sm-3, + .mx-sm-3 { + margin-right: 1rem !important; + } + .mb-sm-3, + .my-sm-3 { + margin-bottom: 1rem !important; + } + .ml-sm-3, + .mx-sm-3 { + margin-left: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .mt-sm-4, + .my-sm-4 { + margin-top: 1.5rem !important; + } + .mr-sm-4, + .mx-sm-4 { + margin-right: 1.5rem !important; + } + .mb-sm-4, + .my-sm-4 { + margin-bottom: 1.5rem !important; + } + .ml-sm-4, + .mx-sm-4 { + margin-left: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .mt-sm-5, + .my-sm-5 { + margin-top: 3rem !important; + } + .mr-sm-5, + .mx-sm-5 { + margin-right: 3rem !important; + } + .mb-sm-5, + .my-sm-5 { + margin-bottom: 3rem !important; + } + .ml-sm-5, + .mx-sm-5 { + margin-left: 3rem !important; + } + .p-sm-0 { + padding: 0 !important; + } + .pt-sm-0, + .py-sm-0 { + padding-top: 0 !important; + } + .pr-sm-0, + .px-sm-0 { + padding-right: 0 !important; + } + .pb-sm-0, + .py-sm-0 { + padding-bottom: 0 !important; + } + .pl-sm-0, + .px-sm-0 { + padding-left: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .pt-sm-1, + .py-sm-1 { + padding-top: 0.25rem !important; + } + .pr-sm-1, + .px-sm-1 { + padding-right: 0.25rem !important; + } + .pb-sm-1, + .py-sm-1 { + padding-bottom: 0.25rem !important; + } + .pl-sm-1, + .px-sm-1 { + padding-left: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .pt-sm-2, + .py-sm-2 { + padding-top: 0.5rem !important; + } + .pr-sm-2, + .px-sm-2 { + padding-right: 0.5rem !important; + } + .pb-sm-2, + .py-sm-2 { + padding-bottom: 0.5rem !important; + } + .pl-sm-2, + .px-sm-2 { + padding-left: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .pt-sm-3, + .py-sm-3 { + padding-top: 1rem !important; + } + .pr-sm-3, + .px-sm-3 { + padding-right: 1rem !important; + } + .pb-sm-3, + .py-sm-3 { + padding-bottom: 1rem !important; + } + .pl-sm-3, + .px-sm-3 { + padding-left: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .pt-sm-4, + .py-sm-4 { + padding-top: 1.5rem !important; + } + .pr-sm-4, + .px-sm-4 { + padding-right: 1.5rem !important; + } + .pb-sm-4, + .py-sm-4 { + padding-bottom: 1.5rem !important; + } + .pl-sm-4, + .px-sm-4 { + padding-left: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .pt-sm-5, + .py-sm-5 { + padding-top: 3rem !important; + } + .pr-sm-5, + .px-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-5, + .py-sm-5 { + padding-bottom: 3rem !important; + } + .pl-sm-5, + .px-sm-5 { + padding-left: 3rem !important; + } + .m-sm-n1 { + margin: -0.25rem !important; + } + .mt-sm-n1, + .my-sm-n1 { + margin-top: -0.25rem !important; + } + .mr-sm-n1, + .mx-sm-n1 { + margin-right: -0.25rem !important; + } + .mb-sm-n1, + .my-sm-n1 { + margin-bottom: -0.25rem !important; + } + .ml-sm-n1, + .mx-sm-n1 { + margin-left: -0.25rem !important; + } + .m-sm-n2 { + margin: -0.5rem !important; + } + .mt-sm-n2, + .my-sm-n2 { + margin-top: -0.5rem !important; + } + .mr-sm-n2, + .mx-sm-n2 { + margin-right: -0.5rem !important; + } + .mb-sm-n2, + .my-sm-n2 { + margin-bottom: -0.5rem !important; + } + .ml-sm-n2, + .mx-sm-n2 { + margin-left: -0.5rem !important; + } + .m-sm-n3 { + margin: -1rem !important; + } + .mt-sm-n3, + .my-sm-n3 { + margin-top: -1rem !important; + } + .mr-sm-n3, + .mx-sm-n3 { + margin-right: -1rem !important; + } + .mb-sm-n3, + .my-sm-n3 { + margin-bottom: -1rem !important; + } + .ml-sm-n3, + .mx-sm-n3 { + margin-left: -1rem !important; + } + .m-sm-n4 { + margin: -1.5rem !important; + } + .mt-sm-n4, + .my-sm-n4 { + margin-top: -1.5rem !important; + } + .mr-sm-n4, + .mx-sm-n4 { + margin-right: -1.5rem !important; + } + .mb-sm-n4, + .my-sm-n4 { + margin-bottom: -1.5rem !important; + } + .ml-sm-n4, + .mx-sm-n4 { + margin-left: -1.5rem !important; + } + .m-sm-n5 { + margin: -3rem !important; + } + .mt-sm-n5, + .my-sm-n5 { + margin-top: -3rem !important; + } + .mr-sm-n5, + .mx-sm-n5 { + margin-right: -3rem !important; + } + .mb-sm-n5, + .my-sm-n5 { + margin-bottom: -3rem !important; + } + .ml-sm-n5, + .mx-sm-n5 { + margin-left: -3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mt-sm-auto, + .my-sm-auto { + margin-top: auto !important; + } + .mr-sm-auto, + .mx-sm-auto { + margin-right: auto !important; + } + .mb-sm-auto, + .my-sm-auto { + margin-bottom: auto !important; + } + .ml-sm-auto, + .mx-sm-auto { + margin-left: auto !important; + } + } + + @media (min-width: 768px) { + .m-md-0 { + margin: 0 !important; + } + .mt-md-0, + .my-md-0 { + margin-top: 0 !important; + } + .mr-md-0, + .mx-md-0 { + margin-right: 0 !important; + } + .mb-md-0, + .my-md-0 { + margin-bottom: 0 !important; + } + .ml-md-0, + .mx-md-0 { + margin-left: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .mt-md-1, + .my-md-1 { + margin-top: 0.25rem !important; + } + .mr-md-1, + .mx-md-1 { + margin-right: 0.25rem !important; + } + .mb-md-1, + .my-md-1 { + margin-bottom: 0.25rem !important; + } + .ml-md-1, + .mx-md-1 { + margin-left: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .mt-md-2, + .my-md-2 { + margin-top: 0.5rem !important; + } + .mr-md-2, + .mx-md-2 { + margin-right: 0.5rem !important; + } + .mb-md-2, + .my-md-2 { + margin-bottom: 0.5rem !important; + } + .ml-md-2, + .mx-md-2 { + margin-left: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .mt-md-3, + .my-md-3 { + margin-top: 1rem !important; + } + .mr-md-3, + .mx-md-3 { + margin-right: 1rem !important; + } + .mb-md-3, + .my-md-3 { + margin-bottom: 1rem !important; + } + .ml-md-3, + .mx-md-3 { + margin-left: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .mt-md-4, + .my-md-4 { + margin-top: 1.5rem !important; + } + .mr-md-4, + .mx-md-4 { + margin-right: 1.5rem !important; + } + .mb-md-4, + .my-md-4 { + margin-bottom: 1.5rem !important; + } + .ml-md-4, + .mx-md-4 { + margin-left: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .mt-md-5, + .my-md-5 { + margin-top: 3rem !important; + } + .mr-md-5, + .mx-md-5 { + margin-right: 3rem !important; + } + .mb-md-5, + .my-md-5 { + margin-bottom: 3rem !important; + } + .ml-md-5, + .mx-md-5 { + margin-left: 3rem !important; + } + .p-md-0 { + padding: 0 !important; + } + .pt-md-0, + .py-md-0 { + padding-top: 0 !important; + } + .pr-md-0, + .px-md-0 { + padding-right: 0 !important; + } + .pb-md-0, + .py-md-0 { + padding-bottom: 0 !important; + } + .pl-md-0, + .px-md-0 { + padding-left: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .pt-md-1, + .py-md-1 { + padding-top: 0.25rem !important; + } + .pr-md-1, + .px-md-1 { + padding-right: 0.25rem !important; + } + .pb-md-1, + .py-md-1 { + padding-bottom: 0.25rem !important; + } + .pl-md-1, + .px-md-1 { + padding-left: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .pt-md-2, + .py-md-2 { + padding-top: 0.5rem !important; + } + .pr-md-2, + .px-md-2 { + padding-right: 0.5rem !important; + } + .pb-md-2, + .py-md-2 { + padding-bottom: 0.5rem !important; + } + .pl-md-2, + .px-md-2 { + padding-left: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .pt-md-3, + .py-md-3 { + padding-top: 1rem !important; + } + .pr-md-3, + .px-md-3 { + padding-right: 1rem !important; + } + .pb-md-3, + .py-md-3 { + padding-bottom: 1rem !important; + } + .pl-md-3, + .px-md-3 { + padding-left: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .pt-md-4, + .py-md-4 { + padding-top: 1.5rem !important; + } + .pr-md-4, + .px-md-4 { + padding-right: 1.5rem !important; + } + .pb-md-4, + .py-md-4 { + padding-bottom: 1.5rem !important; + } + .pl-md-4, + .px-md-4 { + padding-left: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .pt-md-5, + .py-md-5 { + padding-top: 3rem !important; + } + .pr-md-5, + .px-md-5 { + padding-right: 3rem !important; + } + .pb-md-5, + .py-md-5 { + padding-bottom: 3rem !important; + } + .pl-md-5, + .px-md-5 { + padding-left: 3rem !important; + } + .m-md-n1 { + margin: -0.25rem !important; + } + .mt-md-n1, + .my-md-n1 { + margin-top: -0.25rem !important; + } + .mr-md-n1, + .mx-md-n1 { + margin-right: -0.25rem !important; + } + .mb-md-n1, + .my-md-n1 { + margin-bottom: -0.25rem !important; + } + .ml-md-n1, + .mx-md-n1 { + margin-left: -0.25rem !important; + } + .m-md-n2 { + margin: -0.5rem !important; + } + .mt-md-n2, + .my-md-n2 { + margin-top: -0.5rem !important; + } + .mr-md-n2, + .mx-md-n2 { + margin-right: -0.5rem !important; + } + .mb-md-n2, + .my-md-n2 { + margin-bottom: -0.5rem !important; + } + .ml-md-n2, + .mx-md-n2 { + margin-left: -0.5rem !important; + } + .m-md-n3 { + margin: -1rem !important; + } + .mt-md-n3, + .my-md-n3 { + margin-top: -1rem !important; + } + .mr-md-n3, + .mx-md-n3 { + margin-right: -1rem !important; + } + .mb-md-n3, + .my-md-n3 { + margin-bottom: -1rem !important; + } + .ml-md-n3, + .mx-md-n3 { + margin-left: -1rem !important; + } + .m-md-n4 { + margin: -1.5rem !important; + } + .mt-md-n4, + .my-md-n4 { + margin-top: -1.5rem !important; + } + .mr-md-n4, + .mx-md-n4 { + margin-right: -1.5rem !important; + } + .mb-md-n4, + .my-md-n4 { + margin-bottom: -1.5rem !important; + } + .ml-md-n4, + .mx-md-n4 { + margin-left: -1.5rem !important; + } + .m-md-n5 { + margin: -3rem !important; + } + .mt-md-n5, + .my-md-n5 { + margin-top: -3rem !important; + } + .mr-md-n5, + .mx-md-n5 { + margin-right: -3rem !important; + } + .mb-md-n5, + .my-md-n5 { + margin-bottom: -3rem !important; + } + .ml-md-n5, + .mx-md-n5 { + margin-left: -3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mt-md-auto, + .my-md-auto { + margin-top: auto !important; + } + .mr-md-auto, + .mx-md-auto { + margin-right: auto !important; + } + .mb-md-auto, + .my-md-auto { + margin-bottom: auto !important; + } + .ml-md-auto, + .mx-md-auto { + margin-left: auto !important; + } + } + + @media (min-width: 992px) { + .m-lg-0 { + margin: 0 !important; + } + .mt-lg-0, + .my-lg-0 { + margin-top: 0 !important; + } + .mr-lg-0, + .mx-lg-0 { + margin-right: 0 !important; + } + .mb-lg-0, + .my-lg-0 { + margin-bottom: 0 !important; + } + .ml-lg-0, + .mx-lg-0 { + margin-left: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .mt-lg-1, + .my-lg-1 { + margin-top: 0.25rem !important; + } + .mr-lg-1, + .mx-lg-1 { + margin-right: 0.25rem !important; + } + .mb-lg-1, + .my-lg-1 { + margin-bottom: 0.25rem !important; + } + .ml-lg-1, + .mx-lg-1 { + margin-left: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .mt-lg-2, + .my-lg-2 { + margin-top: 0.5rem !important; + } + .mr-lg-2, + .mx-lg-2 { + margin-right: 0.5rem !important; + } + .mb-lg-2, + .my-lg-2 { + margin-bottom: 0.5rem !important; + } + .ml-lg-2, + .mx-lg-2 { + margin-left: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .mt-lg-3, + .my-lg-3 { + margin-top: 1rem !important; + } + .mr-lg-3, + .mx-lg-3 { + margin-right: 1rem !important; + } + .mb-lg-3, + .my-lg-3 { + margin-bottom: 1rem !important; + } + .ml-lg-3, + .mx-lg-3 { + margin-left: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .mt-lg-4, + .my-lg-4 { + margin-top: 1.5rem !important; + } + .mr-lg-4, + .mx-lg-4 { + margin-right: 1.5rem !important; + } + .mb-lg-4, + .my-lg-4 { + margin-bottom: 1.5rem !important; + } + .ml-lg-4, + .mx-lg-4 { + margin-left: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .mt-lg-5, + .my-lg-5 { + margin-top: 3rem !important; + } + .mr-lg-5, + .mx-lg-5 { + margin-right: 3rem !important; + } + .mb-lg-5, + .my-lg-5 { + margin-bottom: 3rem !important; + } + .ml-lg-5, + .mx-lg-5 { + margin-left: 3rem !important; + } + .p-lg-0 { + padding: 0 !important; + } + .pt-lg-0, + .py-lg-0 { + padding-top: 0 !important; + } + .pr-lg-0, + .px-lg-0 { + padding-right: 0 !important; + } + .pb-lg-0, + .py-lg-0 { + padding-bottom: 0 !important; + } + .pl-lg-0, + .px-lg-0 { + padding-left: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .pt-lg-1, + .py-lg-1 { + padding-top: 0.25rem !important; + } + .pr-lg-1, + .px-lg-1 { + padding-right: 0.25rem !important; + } + .pb-lg-1, + .py-lg-1 { + padding-bottom: 0.25rem !important; + } + .pl-lg-1, + .px-lg-1 { + padding-left: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .pt-lg-2, + .py-lg-2 { + padding-top: 0.5rem !important; + } + .pr-lg-2, + .px-lg-2 { + padding-right: 0.5rem !important; + } + .pb-lg-2, + .py-lg-2 { + padding-bottom: 0.5rem !important; + } + .pl-lg-2, + .px-lg-2 { + padding-left: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .pt-lg-3, + .py-lg-3 { + padding-top: 1rem !important; + } + .pr-lg-3, + .px-lg-3 { + padding-right: 1rem !important; + } + .pb-lg-3, + .py-lg-3 { + padding-bottom: 1rem !important; + } + .pl-lg-3, + .px-lg-3 { + padding-left: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .pt-lg-4, + .py-lg-4 { + padding-top: 1.5rem !important; + } + .pr-lg-4, + .px-lg-4 { + padding-right: 1.5rem !important; + } + .pb-lg-4, + .py-lg-4 { + padding-bottom: 1.5rem !important; + } + .pl-lg-4, + .px-lg-4 { + padding-left: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .pt-lg-5, + .py-lg-5 { + padding-top: 3rem !important; + } + .pr-lg-5, + .px-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-5, + .py-lg-5 { + padding-bottom: 3rem !important; + } + .pl-lg-5, + .px-lg-5 { + padding-left: 3rem !important; + } + .m-lg-n1 { + margin: -0.25rem !important; + } + .mt-lg-n1, + .my-lg-n1 { + margin-top: -0.25rem !important; + } + .mr-lg-n1, + .mx-lg-n1 { + margin-right: -0.25rem !important; + } + .mb-lg-n1, + .my-lg-n1 { + margin-bottom: -0.25rem !important; + } + .ml-lg-n1, + .mx-lg-n1 { + margin-left: -0.25rem !important; + } + .m-lg-n2 { + margin: -0.5rem !important; + } + .mt-lg-n2, + .my-lg-n2 { + margin-top: -0.5rem !important; + } + .mr-lg-n2, + .mx-lg-n2 { + margin-right: -0.5rem !important; + } + .mb-lg-n2, + .my-lg-n2 { + margin-bottom: -0.5rem !important; + } + .ml-lg-n2, + .mx-lg-n2 { + margin-left: -0.5rem !important; + } + .m-lg-n3 { + margin: -1rem !important; + } + .mt-lg-n3, + .my-lg-n3 { + margin-top: -1rem !important; + } + .mr-lg-n3, + .mx-lg-n3 { + margin-right: -1rem !important; + } + .mb-lg-n3, + .my-lg-n3 { + margin-bottom: -1rem !important; + } + .ml-lg-n3, + .mx-lg-n3 { + margin-left: -1rem !important; + } + .m-lg-n4 { + margin: -1.5rem !important; + } + .mt-lg-n4, + .my-lg-n4 { + margin-top: -1.5rem !important; + } + .mr-lg-n4, + .mx-lg-n4 { + margin-right: -1.5rem !important; + } + .mb-lg-n4, + .my-lg-n4 { + margin-bottom: -1.5rem !important; + } + .ml-lg-n4, + .mx-lg-n4 { + margin-left: -1.5rem !important; + } + .m-lg-n5 { + margin: -3rem !important; + } + .mt-lg-n5, + .my-lg-n5 { + margin-top: -3rem !important; + } + .mr-lg-n5, + .mx-lg-n5 { + margin-right: -3rem !important; + } + .mb-lg-n5, + .my-lg-n5 { + margin-bottom: -3rem !important; + } + .ml-lg-n5, + .mx-lg-n5 { + margin-left: -3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mt-lg-auto, + .my-lg-auto { + margin-top: auto !important; + } + .mr-lg-auto, + .mx-lg-auto { + margin-right: auto !important; + } + .mb-lg-auto, + .my-lg-auto { + margin-bottom: auto !important; + } + .ml-lg-auto, + .mx-lg-auto { + margin-left: auto !important; + } + } + + @media (min-width: 1200px) { + .m-xl-0 { + margin: 0 !important; + } + .mt-xl-0, + .my-xl-0 { + margin-top: 0 !important; + } + .mr-xl-0, + .mx-xl-0 { + margin-right: 0 !important; + } + .mb-xl-0, + .my-xl-0 { + margin-bottom: 0 !important; + } + .ml-xl-0, + .mx-xl-0 { + margin-left: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .mt-xl-1, + .my-xl-1 { + margin-top: 0.25rem !important; + } + .mr-xl-1, + .mx-xl-1 { + margin-right: 0.25rem !important; + } + .mb-xl-1, + .my-xl-1 { + margin-bottom: 0.25rem !important; + } + .ml-xl-1, + .mx-xl-1 { + margin-left: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .mt-xl-2, + .my-xl-2 { + margin-top: 0.5rem !important; + } + .mr-xl-2, + .mx-xl-2 { + margin-right: 0.5rem !important; + } + .mb-xl-2, + .my-xl-2 { + margin-bottom: 0.5rem !important; + } + .ml-xl-2, + .mx-xl-2 { + margin-left: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .mt-xl-3, + .my-xl-3 { + margin-top: 1rem !important; + } + .mr-xl-3, + .mx-xl-3 { + margin-right: 1rem !important; + } + .mb-xl-3, + .my-xl-3 { + margin-bottom: 1rem !important; + } + .ml-xl-3, + .mx-xl-3 { + margin-left: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .mt-xl-4, + .my-xl-4 { + margin-top: 1.5rem !important; + } + .mr-xl-4, + .mx-xl-4 { + margin-right: 1.5rem !important; + } + .mb-xl-4, + .my-xl-4 { + margin-bottom: 1.5rem !important; + } + .ml-xl-4, + .mx-xl-4 { + margin-left: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .mt-xl-5, + .my-xl-5 { + margin-top: 3rem !important; + } + .mr-xl-5, + .mx-xl-5 { + margin-right: 3rem !important; + } + .mb-xl-5, + .my-xl-5 { + margin-bottom: 3rem !important; + } + .ml-xl-5, + .mx-xl-5 { + margin-left: 3rem !important; + } + .p-xl-0 { + padding: 0 !important; + } + .pt-xl-0, + .py-xl-0 { + padding-top: 0 !important; + } + .pr-xl-0, + .px-xl-0 { + padding-right: 0 !important; + } + .pb-xl-0, + .py-xl-0 { + padding-bottom: 0 !important; + } + .pl-xl-0, + .px-xl-0 { + padding-left: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .pt-xl-1, + .py-xl-1 { + padding-top: 0.25rem !important; + } + .pr-xl-1, + .px-xl-1 { + padding-right: 0.25rem !important; + } + .pb-xl-1, + .py-xl-1 { + padding-bottom: 0.25rem !important; + } + .pl-xl-1, + .px-xl-1 { + padding-left: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .pt-xl-2, + .py-xl-2 { + padding-top: 0.5rem !important; + } + .pr-xl-2, + .px-xl-2 { + padding-right: 0.5rem !important; + } + .pb-xl-2, + .py-xl-2 { + padding-bottom: 0.5rem !important; + } + .pl-xl-2, + .px-xl-2 { + padding-left: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .pt-xl-3, + .py-xl-3 { + padding-top: 1rem !important; + } + .pr-xl-3, + .px-xl-3 { + padding-right: 1rem !important; + } + .pb-xl-3, + .py-xl-3 { + padding-bottom: 1rem !important; + } + .pl-xl-3, + .px-xl-3 { + padding-left: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .pt-xl-4, + .py-xl-4 { + padding-top: 1.5rem !important; + } + .pr-xl-4, + .px-xl-4 { + padding-right: 1.5rem !important; + } + .pb-xl-4, + .py-xl-4 { + padding-bottom: 1.5rem !important; + } + .pl-xl-4, + .px-xl-4 { + padding-left: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .pt-xl-5, + .py-xl-5 { + padding-top: 3rem !important; + } + .pr-xl-5, + .px-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-5, + .py-xl-5 { + padding-bottom: 3rem !important; + } + .pl-xl-5, + .px-xl-5 { + padding-left: 3rem !important; + } + .m-xl-n1 { + margin: -0.25rem !important; + } + .mt-xl-n1, + .my-xl-n1 { + margin-top: -0.25rem !important; + } + .mr-xl-n1, + .mx-xl-n1 { + margin-right: -0.25rem !important; + } + .mb-xl-n1, + .my-xl-n1 { + margin-bottom: -0.25rem !important; + } + .ml-xl-n1, + .mx-xl-n1 { + margin-left: -0.25rem !important; + } + .m-xl-n2 { + margin: -0.5rem !important; + } + .mt-xl-n2, + .my-xl-n2 { + margin-top: -0.5rem !important; + } + .mr-xl-n2, + .mx-xl-n2 { + margin-right: -0.5rem !important; + } + .mb-xl-n2, + .my-xl-n2 { + margin-bottom: -0.5rem !important; + } + .ml-xl-n2, + .mx-xl-n2 { + margin-left: -0.5rem !important; + } + .m-xl-n3 { + margin: -1rem !important; + } + .mt-xl-n3, + .my-xl-n3 { + margin-top: -1rem !important; + } + .mr-xl-n3, + .mx-xl-n3 { + margin-right: -1rem !important; + } + .mb-xl-n3, + .my-xl-n3 { + margin-bottom: -1rem !important; + } + .ml-xl-n3, + .mx-xl-n3 { + margin-left: -1rem !important; + } + .m-xl-n4 { + margin: -1.5rem !important; + } + .mt-xl-n4, + .my-xl-n4 { + margin-top: -1.5rem !important; + } + .mr-xl-n4, + .mx-xl-n4 { + margin-right: -1.5rem !important; + } + .mb-xl-n4, + .my-xl-n4 { + margin-bottom: -1.5rem !important; + } + .ml-xl-n4, + .mx-xl-n4 { + margin-left: -1.5rem !important; + } + .m-xl-n5 { + margin: -3rem !important; + } + .mt-xl-n5, + .my-xl-n5 { + margin-top: -3rem !important; + } + .mr-xl-n5, + .mx-xl-n5 { + margin-right: -3rem !important; + } + .mb-xl-n5, + .my-xl-n5 { + margin-bottom: -3rem !important; + } + .ml-xl-n5, + .mx-xl-n5 { + margin-left: -3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mt-xl-auto, + .my-xl-auto { + margin-top: auto !important; + } + .mr-xl-auto, + .mx-xl-auto { + margin-right: auto !important; + } + .mb-xl-auto, + .my-xl-auto { + margin-bottom: auto !important; + } + .ml-xl-auto, + .mx-xl-auto { + margin-left: auto !important; + } + } + + .text-monospace { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important; + } + + .text-justify { + text-align: justify !important; + } + + .text-wrap { + white-space: normal !important; + } + + .text-nowrap { + white-space: nowrap !important; + } + + .text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .text-left { + text-align: left !important; + } + + .text-right { + text-align: right !important; + } + + .text-center { + text-align: center !important; + } + + @media (min-width: 576px) { + .text-sm-left { + text-align: left !important; + } + .text-sm-right { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } + } + + @media (min-width: 768px) { + .text-md-left { + text-align: left !important; + } + .text-md-right { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } + } + + @media (min-width: 992px) { + .text-lg-left { + text-align: left !important; + } + .text-lg-right { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } + } + + @media (min-width: 1200px) { + .text-xl-left { + text-align: left !important; + } + .text-xl-right { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } + } + + .text-lowercase { + text-transform: lowercase !important; + } + + .text-uppercase { + text-transform: uppercase !important; + } + + .text-capitalize { + text-transform: capitalize !important; + } + + .font-weight-light { + font-weight: 300 !important; + } + + .font-weight-lighter { + font-weight: lighter !important; + } + + .font-weight-normal { + font-weight: 400 !important; + } + + .font-weight-bold { + font-weight: 700 !important; + } + + .font-weight-bolder { + font-weight: bolder !important; + } + + .font-italic { + font-style: italic !important; + } + + .text-white { + color: #fff !important; + } + + .text-primary { + color: #3A3F44 !important; + } + + a.text-primary:hover, a.text-primary:focus { + color: #17191b !important; + } + + .text-secondary { + color: #7A8288 !important; + } + + a.text-secondary:hover, a.text-secondary:focus { + color: #565b60 !important; + } + + .text-success { + color: #62c462 !important; + } + + a.text-success:hover, a.text-success:focus { + color: #3b9e3b !important; + } + + .text-info { + color: #5bc0de !important; + } + + a.text-info:hover, a.text-info:focus { + color: #28a1c5 !important; + } + + .text-warning { + color: #f89406 !important; + } + + a.text-warning:hover, a.text-warning:focus { + color: #ad6704 !important; + } + + .text-danger { + color: #ee5f5b !important; + } + + a.text-danger:hover, a.text-danger:focus { + color: #e51d18 !important; + } + + .text-light { + color: #e9ecef !important; + } + + a.text-light:hover, a.text-light:focus { + color: #bdc6cf !important; + } + + .text-dark { + color: #272B30 !important; + } + + a.text-dark:hover, a.text-dark:focus { + color: #050506 !important; + } + + .text-body { + color: #aaa !important; + } + + .text-muted { + color: #7A8288 !important; + } + + .text-black-50 { + color: rgba(0, 0, 0, 0.5) !important; + } + + .text-white-50 { + color: rgba(255, 255, 255, 0.5) !important; + } + + .text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; + } + + .text-decoration-none { + text-decoration: none !important; + } + + .text-break { + word-break: break-word !important; + overflow-wrap: break-word !important; + } + + .text-reset { + color: inherit !important; + } + + .visible { + visibility: visible !important; + } + + .invisible { + visibility: hidden !important; + } + + @media print { + *, + *::before, + *::after { + text-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a:not(.btn) { + text-decoration: underline; + } + abbr[title]::after { + content: " (" attr(title) ")"; + } + pre { + white-space: pre-wrap !important; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + @page { + size: a3; + } + body { + min-width: 992px !important; + } + .container { + min-width: 992px !important; + } + .navbar { + display: none; + } + .badge { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #dee2e6 !important; + } + .table-dark { + color: inherit; + } + .table-dark th, + .table-dark td, + .table-dark thead th, + .table-dark tbody + tbody { + border-color: rgba(0, 0, 0, 0.6); + } + .table .thead-dark th { + color: inherit; + border-color: rgba(0, 0, 0, 0.6); + } + } + + .navbar { + border: 1px solid rgba(0, 0, 0, 0.6); + text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3); + } + + .navbar .container { + padding: 0; + } + + .navbar .navbar-toggler { + border-color: rgba(0, 0, 0, 0.6); + } + + .navbar-fixed-top { + border-width: 0 0 1px 0; + } + + .navbar-fixed-bottom { + border-width: 1px 0 0 0; + } + + .navbar .nav-link { + padding: 1rem; + border-left: 1px solid rgba(255, 255, 255, 0.1); + border-right: 1px solid rgba(0, 0, 0, 0.2); + } + + .navbar .nav-link:hover, .navbar .nav-link:focus { + background-image: -webkit-gradient(linear, left top, left bottom, from(#101112), color-stop(40%, #17191b), to(#1b1e20)); + background-image: linear-gradient(#101112, #17191b 40%, #1b1e20); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + border-left: 1px solid rgba(0, 0, 0, 0.2); + } + + .navbar-brand { + padding: 0.75rem 1rem calc(54px - 0.75rem - 30px); + margin-right: 0; + border-right: 1px solid rgba(0, 0, 0, 0.2); + } + + .navbar .nav-item.active .nav-link { + background-color: rgba(0, 0, 0, 0.3); + border-left: 1px solid rgba(0, 0, 0, 0.2); + } + + .navbar-nav .nav-item + .nav-item { + margin-left: 0; + } + + .navbar.bg-light { + text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1); + } + + .navbar.bg-light .nav-link:hover, .navbar.bg-light .nav-link:focus { + background-image: -webkit-gradient(linear, left top, left bottom, from(#4e5458), color-stop(40%, #565b60), to(#5b6165)); + background-image: linear-gradient(#4e5458, #565b60 40%, #5b6165); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + border-left: 1px solid rgba(0, 0, 0, 0.2); + } + + @media (max-width: 576px) { + .navbar-expand-sm .navbar-brand, + .navbar-expand-sm .nav-link { + border: none !important; + } + } + + @media (max-width: 768px) { + .navbar-expand-md .navbar-brand, + .navbar-expand-md .nav-link { + border: none !important; + } + } + + @media (max-width: 992px) { + .navbar-expand-lg .navbar-brand, + .navbar-expand-lg .nav-link { + border: none !important; + } + } + + .btn { + border-color: rgba(0, 0, 0, 0.6); + text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3); + } + + .btn:not([disabled]):not(.disabled).active, .btn.disabled { + border-color: rgba(0, 0, 0, 0.6); + -webkit-box-shadow: none; + box-shadow: none; + } + + .btn:hover, .btn:focus, .btn:not([disabled]):not(.disabled):active, .btn:not([disabled]):not(.disabled):active:hover, .btn:not([disabled]):not(.disabled).active:hover { + border-color: rgba(0, 0, 0, 0.6); + } + + .btn-primary { + background-image: -webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3A3F44), to(#313539)); + background-image: linear-gradient(#484e55, #3A3F44 60%, #313539); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + } + + .btn-primary:not([disabled]):not(.disabled):hover, .btn-primary:not([disabled]):not(.disabled):focus, .btn-primary:not([disabled]):not(.disabled):active:hover, .btn-primary:not([disabled]):not(.disabled).active:hover { + background-image: -webkit-gradient(linear, left top, left bottom, from(#101112), color-stop(40%, #17191b), to(#1b1e20)); + background-image: linear-gradient(#101112, #17191b 40%, #1b1e20); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + } + + .btn-secondary { + background-image: -webkit-gradient(linear, left top, left bottom, from(#8a9196), color-stop(60%, #7A8288), to(#70787d)); + background-image: linear-gradient(#8a9196, #7A8288 60%, #70787d); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + } + + .btn-secondary:not([disabled]):not(.disabled):hover, .btn-secondary:not([disabled]):not(.disabled):focus, .btn-secondary:not([disabled]):not(.disabled):active, .btn-secondary:not([disabled]):not(.disabled).active { + background-image: -webkit-gradient(linear, left top, left bottom, from(#4e5458), color-stop(40%, #565b60), to(#5b6165)); + background-image: linear-gradient(#4e5458, #565b60 40%, #5b6165); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + } + + .btn-success { + background-image: -webkit-gradient(linear, left top, left bottom, from(#78cc78), color-stop(60%, #62c462), to(#53be53)); + background-image: linear-gradient(#78cc78, #62c462 60%, #53be53); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + color: #fff; + } + + .btn-success:not([disabled]):not(.disabled):hover, .btn-success:not([disabled]):not(.disabled):focus, .btn-success:not([disabled]):not(.disabled):active, .btn-success:not([disabled]):not(.disabled).active { + background-image: -webkit-gradient(linear, left top, left bottom, from(#379337), color-stop(40%, #3b9e3b), to(#3ea63e)); + background-image: linear-gradient(#379337, #3b9e3b 40%, #3ea63e); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + } + + .btn-info { + background-image: -webkit-gradient(linear, left top, left bottom, from(#74cae3), color-stop(60%, #5bc0de), to(#4ab9db)); + background-image: linear-gradient(#74cae3, #5bc0de 60%, #4ab9db); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + color: #fff; + } + + .btn-info:not([disabled]):not(.disabled):hover, .btn-info:not([disabled]):not(.disabled):focus, .btn-info:not([disabled]):not(.disabled):active, .btn-info:not([disabled]):not(.disabled).active { + background-image: -webkit-gradient(linear, left top, left bottom, from(#2596b8), color-stop(40%, #28a1c5), to(#29a8cd)); + background-image: linear-gradient(#2596b8, #28a1c5 40%, #29a8cd); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + } + + .btn-warning { + background-image: -webkit-gradient(linear, left top, left bottom, from(#faa123), color-stop(60%, #f89406), to(#e48806)); + background-image: linear-gradient(#faa123, #f89406 60%, #e48806); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + color: #fff; + } + + .btn-warning:not([disabled]):not(.disabled):hover, .btn-warning:not([disabled]):not(.disabled):focus, .btn-warning:not([disabled]):not(.disabled):active, .btn-warning:not([disabled]):not(.disabled).active { + background-image: -webkit-gradient(linear, left top, left bottom, from(#9e5f04), color-stop(40%, #ad6704), to(#b76d04)); + background-image: linear-gradient(#9e5f04, #ad6704 40%, #b76d04); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + } + + .btn-danger { + background-image: -webkit-gradient(linear, left top, left bottom, from(#f17a77), color-stop(60%, #ee5f5b), to(#ec4d49)); + background-image: linear-gradient(#f17a77, #ee5f5b 60%, #ec4d49); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + } + + .btn-danger:not([disabled]):not(.disabled):hover, .btn-danger:not([disabled]):not(.disabled):focus, .btn-danger:not([disabled]):not(.disabled):active, .btn-danger:not([disabled]):not(.disabled).active { + background-image: -webkit-gradient(linear, left top, left bottom, from(#d71c16), color-stop(40%, #e51d18), to(#e8241f)); + background-image: linear-gradient(#d71c16, #e51d18 40%, #e8241f); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + } + + .btn-link, + .btn-link:hover { + border-color: transparent; + } + + .btn-group .btn.active, + .btn-group-vertical .btn.active { + border-color: rgba(0, 0, 0, 0.6); + } + + h1, h2, h3, h4, h5, h6 { + text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3); + } + + .table-primary, .table-secondary, .table-success, .table-info, .table-warning, .table-danger { + color: #fff; + } + + .table-primary, + .table-primary > th, + .table-primary > td { + background-color: #3A3F44; + } + + .table-secondary, + .table-secondary > th, + .table-secondary > td { + background-color: #7A8288; + } + + .table-light, + .table-light > th, + .table-light > td { + background-color: #e9ecef; + } + + .table-dark, + .table-dark > th, + .table-dark > td { + background-color: #272B30; + } + + .table-success, + .table-success > th, + .table-success > td { + background-color: #62c462; + } + + .table-info, + .table-info > th, + .table-info > td { + background-color: #5bc0de; + } + + .table-danger, + .table-danger > th, + .table-danger > td { + background-color: #ee5f5b; + } + + .table-warning, + .table-warning > th, + .table-warning > td { + background-color: #f89406; + } + + .table-active, + .table-active > th, + .table-active > td { + background-color: rgba(255, 255, 255, 0.075); + } + + .table-hover .table-primary:hover, .table-hover .table-primary:hover > th, .table-hover .table-primary:hover > td { + background-color: #2e3236; + } + + .table-hover .table-secondary:hover, .table-hover .table-secondary:hover > th, .table-hover .table-secondary:hover > td { + background-color: #6e757b; + } + + .table-hover .table-light:hover, .table-hover .table-light:hover > th, .table-hover .table-light:hover > td { + background-color: #dadfe4; + } + + .table-hover .table-dark:hover, .table-hover .table-dark:hover > th, .table-hover .table-dark:hover > td { + background-color: #1c1e22; + } + + .table-hover .table-success:hover, .table-hover .table-success:hover > th, .table-hover .table-success:hover > td { + background-color: #4fbd4f; + } + + .table-hover .table-info:hover, .table-hover .table-info:hover > th, .table-hover .table-info:hover > td { + background-color: #46b8da; + } + + .table-hover .table-danger:hover, .table-hover .table-danger:hover > th, .table-hover .table-danger:hover > td { + background-color: #ec4844; + } + + .table-hover .table-warning:hover, .table-hover .table-warning:hover > th, .table-hover .table-warning:hover > td { + background-color: #df8505; + } + + .table-hover .table-active:hover, .table-hover .table-active:hover > th, .table-hover .table-active:hover > td { + background-color: rgba(255, 255, 255, 0.075); + } + + legend { + color: #fff; + } + + .input-group-addon { + background-image: -webkit-gradient(linear, left top, left bottom, from(#8a9196), color-stop(60%, #7A8288), to(#70787d)); + background-image: linear-gradient(#8a9196, #7A8288 60%, #70787d); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3); + color: #fff; + } + + .nav-tabs .nav-link, + .nav-tabs .nav-link:hover { + color: #fff; + } + + .nav-pills .nav-link { + background-image: -webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3A3F44), to(#313539)); + background-image: linear-gradient(#484e55, #3A3F44 60%, #313539); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + border: 1px solid rgba(0, 0, 0, 0.6); + text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3); + color: #fff; + } + + .nav-pills .nav-link:hover { + background-image: -webkit-gradient(linear, left top, left bottom, from(#101112), color-stop(40%, #17191b), to(#1b1e20)); + background-image: linear-gradient(#101112, #17191b 40%, #1b1e20); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + border: 1px solid rgba(0, 0, 0, 0.6); + } + + .nav-pills .nav-link.active, + .nav-pills .nav-link:hover { + background-color: transparent; + background-image: -webkit-gradient(linear, left top, left bottom, from(#101112), color-stop(40%, #17191b), to(#1b1e20)); + background-image: linear-gradient(#101112, #17191b 40%, #1b1e20); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + border: 1px solid rgba(0, 0, 0, 0.6); + } + + .nav-pills .nav-link.disabled, + .nav-pills .nav-link.disabled:hover { + background-image: -webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3A3F44), to(#313539)); + background-image: linear-gradient(#484e55, #3A3F44 60%, #313539); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + color: #7A8288; + } + + .pagination .page-link { + text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3); + background-image: -webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3A3F44), to(#313539)); + background-image: linear-gradient(#484e55, #3A3F44 60%, #313539); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + } + + .pagination .page-link:hover { + background-image: -webkit-gradient(linear, left top, left bottom, from(#101112), color-stop(40%, #17191b), to(#1b1e20)); + background-image: linear-gradient(#101112, #17191b 40%, #1b1e20); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + text-decoration: none; + } + + .pagination .page-item.active .page-link { + background-image: -webkit-gradient(linear, left top, left bottom, from(#101112), color-stop(40%, #17191b), to(#1b1e20)); + background-image: linear-gradient(#101112, #17191b 40%, #1b1e20); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + } + + .pagination .page-item.disabled .page-link { + background-image: -webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3A3F44), to(#313539)); + background-image: linear-gradient(#484e55, #3A3F44 60%, #313539); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + } + + .breadcrumb { + border: 1px solid rgba(0, 0, 0, 0.6); + text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3); + background-color: transparent; + background-image: -webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3A3F44), to(#313539)); + background-image: linear-gradient(#484e55, #3A3F44 60%, #313539); + background-repeat: no-repeat; + -webkit-filter: none; + filter: none; + } + + .breadcrumb a, + .breadcrumb a:hover { + color: #fff; + } + + .alert .close { + color: #000; + text-decoration: none; + } + + .alert { + border: none; + color: #fff; + } + + .alert a, + .alert .alert-link { + color: #fff; + text-decoration: underline; + } + + .alert-primary { + background-color: #3A3F44; + } + + .alert-secondary { + background-color: #7A8288; + } + + .alert-success { + background-color: #62c462; + } + + .alert-info { + background-color: #5bc0de; + } + + .alert-warning { + background-color: #f89406; + } + + .alert-danger { + background-color: #ee5f5b; + } + + .alert-light { + background-color: #e9ecef; + } + + .alert-dark { + background-color: #272B30; + } + + .alert-light, + .alert-light a:not(.btn), + .alert-light .alert-link { + color: #272B30; + } + + .badge-success, .badge-warning, .badge-info { + color: #fff; + } + + .jumbotron { + border: 1px solid rgba(0, 0, 0, 0.6); + } + + .list-group-item:hover { + background-color: #1c1e22; + } \ No newline at end of file diff --git a/toolbar-ui-angular/src/browserslist b/toolbar-ui-angular/src/browserslist new file mode 100644 index 0000000..37371cb --- /dev/null +++ b/toolbar-ui-angular/src/browserslist @@ -0,0 +1,11 @@ +# This file is currently used by autoprefixer to adjust CSS to support the below specified browsers +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries +# +# For IE 9-11 support, please remove 'not' from the last line of the file and adjust as needed + +> 0.5% +last 2 versions +Firefox ESR +not dead +not IE 9-11 \ No newline at end of file diff --git a/toolbar-ui-angular/src/environments/environment.prod.ts b/toolbar-ui-angular/src/environments/environment.prod.ts new file mode 100644 index 0000000..e72e7e6 --- /dev/null +++ b/toolbar-ui-angular/src/environments/environment.prod.ts @@ -0,0 +1,20 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +export const environment = { + production: true +}; diff --git a/toolbar-ui-angular/src/environments/environment.ts b/toolbar-ui-angular/src/environments/environment.ts new file mode 100644 index 0000000..621a8f9 --- /dev/null +++ b/toolbar-ui-angular/src/environments/environment.ts @@ -0,0 +1,33 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false +}; + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/toolbar-ui-angular/src/index.html b/toolbar-ui-angular/src/index.html new file mode 100644 index 0000000..3843156 --- /dev/null +++ b/toolbar-ui-angular/src/index.html @@ -0,0 +1,26 @@ + + + + + + + Glue42 FINOS FDC3 AppD demo toolbar + + + + + + + + + + diff --git a/toolbar-ui-angular/src/karma.conf.js b/toolbar-ui-angular/src/karma.conf.js new file mode 100644 index 0000000..2cd8cbd --- /dev/null +++ b/toolbar-ui-angular/src/karma.conf.js @@ -0,0 +1,31 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, '../coverage/toolbar-ui-ina'), + reports: ['html', 'lcovonly', 'text-summary'], + fixWebpackSourcePaths: true + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false + }); +}; diff --git a/toolbar-ui-angular/src/main.ts b/toolbar-ui-angular/src/main.ts new file mode 100644 index 0000000..566d860 --- /dev/null +++ b/toolbar-ui-angular/src/main.ts @@ -0,0 +1,29 @@ +/** + * Copyright © 2014-2019 Tick42 OOD + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/toolbar-ui-angular/src/mock-data/apps.json b/toolbar-ui-angular/src/mock-data/apps.json new file mode 100644 index 0000000..6b70bf5 --- /dev/null +++ b/toolbar-ui-angular/src/mock-data/apps.json @@ -0,0 +1,107 @@ +[ + { + "appId": "clientcontact", + "name": "clientcontact", + "version": "", + "title": "Client Contact", + "tooltip": "", + "description": "", + "images": [], + "contactEmail": "", + "supportEmail": "", + "publisher": "", + "icons": [ + { + "icon": "https://enterprise-demos.tick42.com/resources/icons/client-contact.ico" + } + ], + "customConfig": [], + "intents": [], + "manifestType": "org.finos.fdc3.demo.host", + "manifest": "{\n \"type\": \"host\",\n \"hostType\": \"Glue42\",\n \"hostName\": \"Glue42\",\n \"hostManifest\": \"\"\n }", + "provider": { + "name": "Glue Desktop", + "apiUrl": "http://localhost:3000", + "email": "", + "password": "", + "authUrl": "", + "status": "connected" + } + }, + { + "appId": "Glue42 Website", + "name": "Glue42 Website", + "version": "1.0.0", + "title": "Glue42 Website", + "tooltip": "Glue42 Website", + "description": "Glue42 Website", + "images": [], + "contactEmail": "", + "supportEmail": "", + "publisher": "Glue42", + "icons": [ + { + "icon": "../resources/icons/glue42.png" + } + ], + "customConfig": [ + { + "name": "string", + "value": "string" + } + ], + "intents": [ + { + "name": "show-glue42-com" + } + ], + "manifestType": "org.finos.fdc3.demo", + "manifest": "{\"type\":\"browser\",\"url\":\"https://glue42.com\"}", + "provider": { + "name": "Dock01 App Directory", + "apiUrl": "http://localhost:8080/appd/v1", + "email": "georgi.georgiev@tick42.com", + "password": "password", + "authUrl": "http://localhost:8080/appd/user/authenticate", + "status": "connected" + } + }, + { + "appId": "Excel", + "name": "Excel", + "version": "1.0.0", + "title": "Excel", + "tooltip": "Excel", + "description": "Microsoft Excel", + "images": [], + "contactEmail": "", + "supportEmail": "", + "publisher": "Tick42", + "icons": [ + { + "icon": "https://cdn.freebiesupply.com/logos/large/2x/microsoft-excel-2013-logo-png-transparent.png" + } + ], + "customConfig": [ + { + "name": "string", + "value": "string" + } + ], + "intents": [ + { + "name": "open-sheets" + } + ], + "manifestType": "org.finos.fdc3.demo", + "manifest": "{\"type\":\"exe\",\"exePath\":\"C:\\\\Program Files (x86)\\\\Microsoft Office\\\\root\\\\Office16\\\\EXCEL.EXE\"}", + "provider": { + "name": "Dock01 App Directory", + "apiUrl": "http://localhost:8080/appd/v1", + "email": "georgi.georgiev@tick42.com", + "password": "password", + "authUrl": "http://localhost:8080/appd/user/authenticate", + "status": "connected" + } + } +] diff --git a/toolbar-ui-angular/src/mock-data/logs.json b/toolbar-ui-angular/src/mock-data/logs.json new file mode 100644 index 0000000..06e0b85 --- /dev/null +++ b/toolbar-ui-angular/src/mock-data/logs.json @@ -0,0 +1,78 @@ +[ + { + "timestamp": 1550741730800, + "type": "ERROR", + "origin": "Toolbar", + "message": { + "message": "request to http://localhost:8080/appd/user/authenticate failed, reason: connect ECONNREFUSED 127.0.0.1:8080", + "type": "system", + "errno": "ECONNREFUSED", + "code": "ECONNREFUSED", + "name": "FetchError" + }, + "show": true + }, + { + "timestamp": 1550741730507, + "type": "ERROR", + "origin": "Toolbar", + "message": { + "message": "request to http://localhost:8080/appd/user/authenticate failed, reason: connect ECONNREFUSED 127.0.0.1:8080", + "type": "system", + "errno": "ECONNREFUSED", + "code": "ECONNREFUSED", + "name": "FetchError" + }, + "show": true + }, + { + "timestamp": 1550741730507, + "type": "INFO", + "origin": "Toolbar", + "message": "Toolbar window ready.", + "show": true + }, + { + "timestamp": 1550721730507, + "type": "INFO", + "origin": "Electron", + "message": "Electron ready.", + "show": true + }, + { + "timestamp": 1550741730507, + "type": "INFO", + "origin": "Toolbar", + "message": "Will add provider \"Glue Desktop\" with URL \"http://localhost:3000\"", + "show": true + }, + { + "timestamp": 1550741730507, + "type": "INFO", + "origin": "Toolbar", + "message": "Will add provider \"Dock01 App Directory\" with URL \"http://localhost:8080/appd/v1\"", + "show": true + }, + { + "timestamp": 1550741730500, + "type": "INFO", + "origin": "Toolbar", + "message": "Will add provider \"Glue Desktop\" with URL http://localhost:3000", + "show": true + }, + { + "timestamp": 1550741730500, + "type": "INFO", + "origin": "Toolbar", + "message": "Will add provider \"Dock01 App Directory\" with URL http://localhost:8080/appd/v1", + "show": true + }, + { + "timestamp": 1550742052852, + "type": "INFO", + "origin": "Angular", + "message": "Showing app info for \"Client List\"", + "1CanvasDummy": "", + "show": true + } +] diff --git a/toolbar-ui-angular/src/mock-data/providers.json b/toolbar-ui-angular/src/mock-data/providers.json new file mode 100644 index 0000000..89c3979 --- /dev/null +++ b/toolbar-ui-angular/src/mock-data/providers.json @@ -0,0 +1,16 @@ +[ + { + "name": "Glue Desktop", + "apiUrl": "http://localhost:3000", + "email": "", + "password": "", + "authUrl": "" + }, + { + "name": "Dock01 App Directory", + "apiUrl": "http://localhost:8080/appd/v1", + "email": "georgi.georgiev@tick42.com", + "password": "password", + "authUrl": "http://localhost:8080/appd/user/authenticate" + } +] diff --git a/toolbar-ui-angular/src/polyfills.ts b/toolbar-ui-angular/src/polyfills.ts new file mode 100644 index 0000000..75d6393 --- /dev/null +++ b/toolbar-ui-angular/src/polyfills.ts @@ -0,0 +1,63 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** IE10 and IE11 requires the following for NgClass support on SVG elements */ +// import 'classlist.js'; // Run `npm install --save classlist.js`. + +/** + * Web Animations `@angular/platform-browser/animations` + * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. + * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). + */ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags.ts'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js/dist/zone'; // Included with Angular CLI. + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/toolbar-ui-angular/src/styles.scss b/toolbar-ui-angular/src/styles.scss new file mode 100644 index 0000000..5f0752c --- /dev/null +++ b/toolbar-ui-angular/src/styles.scss @@ -0,0 +1,196 @@ +/* Copyright © 2014-2019 Tick42 OOD + SPDX-License-Identifier: Apache-2.0 + 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. */ + +//Variables +$dark: rgb(25, 27, 31); +$input-bg: #4c525d; +$border-radius: 1px; +$light: #f3f3f3; +$scrollbar-bg: rgba(25, 27, 31, .3); +$card-header: lighten($dark,5%); +body { + overflow: hidden; +} + +/* Custom scrollbar - start */ + +::-webkit-scrollbar-track { + border-radius: $border-radius; + background-color: transparent; +} + +::-webkit-scrollbar { + width: 8px; + height: 8px; + background-color: $scrollbar-bg; +} + +::-webkit-scrollbar-thumb { + border-radius: $border-radius; + background-color: $dark; +} + +//Navbar +.navbar { + flex-flow: row nowrap; + z-index: 10; + position: fixed; + top: 0; + height: 68px; + left: 0; + right: 0; + box-shadow: 0 2px 6px -1px rgba(0, 0, 0, .5); + >.btn { + flex-basis: 74px; + } +} + +.toolbar-apps-container { + flex: row nowrap; + width: calc(100vw - 200px); + height: 2.75rem; + overflow: hidden; + overflow-x: auto; + flex-flow: row nowrap; + display: flex; + justify-content: center; + .btn { + margin-right: .5rem; + flex: 0 0 56px; + align-self: center; + &.btn-link { + padding: 0; + } + } +} + +//Buttons +.btn { + &.btn-link { + &.active { + background-color: $dark; + } + &:not([disabled]):not(.disabled):active, + &:active, + &:focus-within, + &:focus { + border-color: transparent; + outline: none; + } + } + border-radius: $border-radius; +} + +.status-btn { + width: 3rem; + align-items: center; +} + +.close { + color: $light; +} + +//Vieport +.viewport { + position: relative; + top: 68px; + overflow: auto; + height: calc(100vh - 68px); +} + +//Containers + +.logs-container { + .border-left { + border-left-width: 4px !important; + } +} + +.app-list-container { + height: calc(100vh - 138px); + overflow: auto; + position: relative; + top: 138px; +} + +.filter-container { + position: fixed; + top: 69px; + width: 100%; + z-index: 10; +} + +.app-icon { + width: 30px; + height: 30px; + &.app-icon { + background-color: #fff; + } +} + +.logs-container, .app-directories-container { + max-height: 350px; + overflow: auto; + min-height: 50px; +} + +//Modals +.modal-dialog-scrollable { + &.modal-dialog { + max-width: 90vw; + } + .modal-content { + max-height: 90vh; + overflow: hidden; + } + .modal-header, + .modal-footer { + flex-shrink: 0; + } + .modal-body { + overflow-y: auto; + } +} + +//Custom control +.pointer, +.custom-control-label { + cursor: pointer; +} + +.custom-control { + overflow: hidden; + text-overflow: ellipsis; +} + +.custom-control-label { + white-space: pre; +} + +.custom-control-input:checked~.custom-control-label::before { + border-color: $dark; + background-color: $input-bg; +} +.card-header { + background: $card-header; +} + + +//Tooltip + +.info-tooltip + .tooltip { + &.bs-tooltip-left { + top:1rem !important; + .arrow { + top: calc(30% - .4rem); + } + } +} diff --git a/toolbar-ui-angular/src/test.ts b/toolbar-ui-angular/src/test.ts new file mode 100644 index 0000000..1631789 --- /dev/null +++ b/toolbar-ui-angular/src/test.ts @@ -0,0 +1,20 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/dist/zone-testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: any; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/toolbar-ui-angular/src/tsconfig.app.json b/toolbar-ui-angular/src/tsconfig.app.json new file mode 100644 index 0000000..190fd30 --- /dev/null +++ b/toolbar-ui-angular/src/tsconfig.app.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/app", + "types": [] + }, + "exclude": [ + "test.ts", + "**/*.spec.ts" + ] +} diff --git a/toolbar-ui-angular/src/tsconfig.spec.json b/toolbar-ui-angular/src/tsconfig.spec.json new file mode 100644 index 0000000..de77336 --- /dev/null +++ b/toolbar-ui-angular/src/tsconfig.spec.json @@ -0,0 +1,18 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/spec", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "test.ts", + "polyfills.ts" + ], + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/toolbar-ui-angular/src/tslint.json b/toolbar-ui-angular/src/tslint.json new file mode 100644 index 0000000..52e2c1a --- /dev/null +++ b/toolbar-ui-angular/src/tslint.json @@ -0,0 +1,17 @@ +{ + "extends": "../tslint.json", + "rules": { + "directive-selector": [ + true, + "attribute", + "app", + "camelCase" + ], + "component-selector": [ + true, + "element", + "app", + "kebab-case" + ] + } +} diff --git a/toolbar-ui-angular/tsconfig.json b/toolbar-ui-angular/tsconfig.json new file mode 100644 index 0000000..b271fd9 --- /dev/null +++ b/toolbar-ui-angular/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "module": "es2015", + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "target": "es5", + "typeRoots": [ + "node_modules/@types" + ], + "lib": [ + "es2018", + "dom" + ] + } +} diff --git a/toolbar-ui-angular/tslint.json b/toolbar-ui-angular/tslint.json new file mode 100644 index 0000000..868ecba --- /dev/null +++ b/toolbar-ui-angular/tslint.json @@ -0,0 +1,75 @@ +{ + "extends": "tslint:recommended", + "rulesDirectory": [ + "codelyzer" + ], + "rules": { + "array-type": false, + "arrow-parens": false, + "deprecation": { + "severity": "warn" + }, + "import-blacklist": [ + true, + "rxjs/Rx" + ], + "interface-name": false, + "max-classes-per-file": false, + "max-line-length": [ + true, + 140 + ], + "member-access": false, + "member-ordering": [ + true, + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } + ], + "no-consecutive-blank-lines": false, + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-empty": false, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-non-null-assertion": true, + "no-redundant-jsdoc": true, + "no-switch-case-fall-through": true, + "no-use-before-declare": true, + "no-var-requires": false, + "object-literal-key-quotes": [ + true, + "as-needed" + ], + "object-literal-sort-keys": false, + "ordered-imports": false, + "quotemark": [ + true, + "single" + ], + "trailing-comma": false, + "no-output-on-prefix": true, + "use-input-property-decorator": true, + "use-output-property-decorator": true, + "use-host-property-decorator": true, + "no-input-rename": true, + "no-output-rename": true, + "use-life-cycle-interface": true, + "use-pipe-transform-interface": true, + "component-class-suffix": true, + "directive-class-suffix": true + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..c01f3e7 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "noImplicitAny": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "noUnusedLocals": true, + "pretty": true, + "outDir": "app-js" + }, + "include": [ + "app/main.ts", + "app/preload.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..209b7b1 --- /dev/null +++ b/tslint.json @@ -0,0 +1,21 @@ +{ + "extends": "tslint:recommended", + "rules": { + "no-var-requires": false, + "interface-name": [true, "never-prefix"], + "variable-name": [ + true, + "ban-keywords", + "check-format", + "allow-leading-underscore", + "allow-pascal-case" + ], + "object-literal-sort-keys": false, + "ordered-imports": [false], + "trailing-comma": [false], + "max-line-length": [true, 200], + "no-string-literal": false, + "quotemark": [true, "single"], + "no-console": [false] + } +} From bb25e5bf7e14e85e09bdcf014123d912f9b30707 Mon Sep 17 00:00:00 2001 From: Ina Kostova Date: Sun, 19 May 2019 22:54:16 +0300 Subject: [PATCH 02/14] remove unnecessary node module dependencies --- toolbar-ui-angular/package.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/toolbar-ui-angular/package.json b/toolbar-ui-angular/package.json index 3d2ea6a..d805bb1 100644 --- a/toolbar-ui-angular/package.json +++ b/toolbar-ui-angular/package.json @@ -45,8 +45,6 @@ "codelyzer": "~4.5.0", "electron": "^4.0.4", "electron-packager": "^13.0.1", - "glue-fdc3-access-impl": "^1.0.11", - "glue-interop-api-impl": "^1.0.11", "jasmine-core": "~2.99.1", "jasmine-spec-reporter": "~4.2.1", "karma": "~3.1.1", From 0f8e57ff88949f97c08e6f92439fa4014771479c Mon Sep 17 00:00:00 2001 From: Ina Kostova Date: Sun, 19 May 2019 23:01:29 +0300 Subject: [PATCH 03/14] fix window collapse / expand --- app/config/window-options.config.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/config/window-options.config.ts b/app/config/window-options.config.ts index 7583932..a68ad41 100644 --- a/app/config/window-options.config.ts +++ b/app/config/window-options.config.ts @@ -21,7 +21,8 @@ import { BrowserWindowConstructorOptions } from 'electron'; const windowConfig: BrowserWindowConstructorOptions = { show: false, webPreferences: { - preload: path.join(__dirname, '..', 'preload.js') + preload: path.join(__dirname, '..', 'preload.js'), + nodeIntegration: true }, height: 100, width: 800, From a7678417b0358c47ca8e8520d0d61f90d20bdaeb Mon Sep 17 00:00:00 2001 From: Ina Kostova Date: Sun, 19 May 2019 23:08:32 +0300 Subject: [PATCH 04/14] fix window initial bounds, fix log message for implementations load --- app/config/window-options.config.ts | 2 ++ app/main.ts | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/config/window-options.config.ts b/app/config/window-options.config.ts index a68ad41..91c1965 100644 --- a/app/config/window-options.config.ts +++ b/app/config/window-options.config.ts @@ -24,6 +24,8 @@ const windowConfig: BrowserWindowConstructorOptions = { preload: path.join(__dirname, '..', 'preload.js'), nodeIntegration: true }, + x: 200, + y: 200, height: 100, width: 800, minHeight: 100, diff --git a/app/main.ts b/app/main.ts index 0d6f853..6c75560 100644 --- a/app/main.ts +++ b/app/main.ts @@ -38,7 +38,7 @@ let fdc3ImplReady: Promise; try { InteropPlatform = require(toolbarConfig.FINOS_INTEROP_API_IMPLEMENTATION); } catch (error) { - logStream.next([`Failed to load ${toolbarConfig.FINOS_INTEROP_API_IMPLEMENTATION} implementation.`, 'error', 'Toolbar']); + logStream.next([`Failed to load ${toolbarConfig.FINOS_INTEROP_API_IMPLEMENTATION || 'FINOS Interop'} implementation.`, 'error', 'Toolbar']); } const interopPlatforms: InteropPlatformAPI[] = []; // https://github.com/finos-plexus/finos-plexus.github.io @@ -52,7 +52,7 @@ try { fdc3Impl = require(toolbarConfig.FDC3_API_IMPLEMENTATION); fdc3ImplReady = fdc3Impl(interopPlatforms); } catch (error) { - logStream.next([`Failed to load ${toolbarConfig.FDC3_API_IMPLEMENTATION} implementation.`, 'error', 'Toolbar']); + logStream.next([`Failed to load ${toolbarConfig.FDC3_API_IMPLEMENTATION || 'FDC3 API'} implementation.`, 'error', 'Toolbar']); } const glue42DemoToolbar = new Toolbar(); From 7c5fa85c66614c196f402b5850bfc0a00d849b92 Mon Sep 17 00:00:00 2001 From: Ina Kostova Date: Mon, 3 Jun 2019 14:30:03 +0300 Subject: [PATCH 05/14] Remove .bat files, add build and start scripts, update README.md --- README.md | 23 ++--- build-app.bat | 1 - build-ui.bat | 2 - package.json | 3 +- start.bat | 1 - toolbar-ui-angular/package-lock.json | 126 --------------------------- toolbar-ui-angular/package.json | 2 +- 7 files changed, 8 insertions(+), 150 deletions(-) delete mode 100644 build-app.bat delete mode 100644 build-ui.bat delete mode 100644 start.bat diff --git a/README.md b/README.md index c39ffeb..8d97102 100644 --- a/README.md +++ b/README.md @@ -18,34 +18,21 @@ You will need node.js & npm as well as a globally installed electron (npm i -g e ### Steps to run project -- run build-ui.bat -- run build-app.bat -- run start.bat - -### Steps to run project manually - - Clone the project -#### Build UI +#### Build Toolbar Window (UI) - ```cd``` to /toolbar-ui-angular -- ```npm i``` - ```npm run build``` -#### Install dependencies - -- ```cd``` to the project's root dir -- ```npm i``` - -#### Run dev version +#### Build Electron app +- ```cd``` to - ```npm run build``` -- ```electron app-js/main.js``` -#### Run prod version +#### Run Toolbar -- ```npm run package:all``` -- Inside the release-builds folder locate the built version for your OS +- ```npm run start``` ## Description diff --git a/build-app.bat b/build-app.bat deleted file mode 100644 index 3cd5607..0000000 --- a/build-app.bat +++ /dev/null @@ -1 +0,0 @@ -npm i && npm run build \ No newline at end of file diff --git a/build-ui.bat b/build-ui.bat deleted file mode 100644 index 17ad579..0000000 --- a/build-ui.bat +++ /dev/null @@ -1,2 +0,0 @@ -cd toolbar-ui-angular -npm i && npm run build \ No newline at end of file diff --git a/package.json b/package.json index 59560a5..5bbb061 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "description": "A simple toolbar that can display and launch applications", "main": "app-js/main.js", "scripts": { - "build": "npm run tslint && tsc", + "build": "npm i && npm run tslint && tsc", + "start": "electron app-js/main.js", "tslint": "node_modules/.bin/tslint ./app/**/*.ts", "package:win": "electron-packager . finos-fdc3-appd-toolbar --overwrite --platform=win32 --arch=all --icon=resources/icons/fdc3.png.ico --prune=true --out=release-builds --version-string.ProductName=\"FINOS FDC3 AppD Toolbar\"", "package:all": "electron-packager . finos-fdc3-appd-toolbar --overwrite --platform=all --arch=all --icon=resources/icons/fdc3.png.ico --prune=true --out=release-builds --version-string.ProductName=\"FINOS FDC3 AppD Toolbar\"" diff --git a/start.bat b/start.bat deleted file mode 100644 index a052def..0000000 --- a/start.bat +++ /dev/null @@ -1 +0,0 @@ -electron app-js/main.js diff --git a/toolbar-ui-angular/package-lock.json b/toolbar-ui-angular/package-lock.json index 2dcd943..a366554 100644 --- a/toolbar-ui-angular/package-lock.json +++ b/toolbar-ui-angular/package-lock.json @@ -1695,13 +1695,6 @@ "integrity": "sha1-lSPgATBqMkRLkHQj8d4hZCIvarE=", "dev": true }, - "bindings": { - "version": "1.2.1", - "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/bindings/-/bindings-1.2.1.tgz", - "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=", - "dev": true, - "optional": true - }, "blob": { "version": "0.0.5", "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/blob/-/blob-0.0.5.tgz", @@ -1969,26 +1962,6 @@ "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", "dev": true }, - "bufferutil": { - "version": "1.1.0", - "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/bufferutil/-/bufferutil-1.1.0.tgz", - "integrity": "sha1-P5a+d6f4ZS/2nvKfHKvIuJ9/2XI=", - "dev": true, - "optional": true, - "requires": { - "bindings": "1.2.1", - "nan": "1.8.4" - }, - "dependencies": { - "nan": { - "version": "1.8.4", - "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nan/-/nan-1.8.4.tgz", - "integrity": "sha1-PHa1OC6rM+RLdY0oE8qdkuk0LzQ=", - "dev": true, - "optional": true - } - } - }, "builtin-modules": { "version": "1.1.1", "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -2051,12 +2024,6 @@ "unset-value": "1.0.0" } }, - "callback-registry": { - "version": "2.4.0", - "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/callback-registry/-/callback-registry-2.4.0.tgz", - "integrity": "sha1-wJTQVMrp6lrtYJrtQkK0GTEPkMM=", - "dev": true - }, "callsite": { "version": "1.0.0", "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/callsite/-/callsite-1.0.0.tgz", @@ -5020,25 +4987,6 @@ "minimatch": "3.0.4" } }, - "glue-fdc3-access-impl": { - "version": "1.0.11", - "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/glue-fdc3-access-impl/-/glue-fdc3-access-impl-1.0.11.tgz", - "integrity": "sha1-HlhLUqhf0bST3nqSDYWst1AOEkY=", - "dev": true, - "requires": { - "glue-interop-api-impl": "1.0.11" - } - }, - "glue-interop-api-impl": { - "version": "1.0.11", - "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/glue-interop-api-impl/-/glue-interop-api-impl-1.0.11.tgz", - "integrity": "sha1-/OvLJcuz10Tko3MH89RRVPnX4ro=", - "dev": true, - "requires": { - "callback-registry": "2.4.0", - "tick42-glue-core": "3.13.8" - } - }, "graceful-fs": { "version": "4.1.15", "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/graceful-fs/-/graceful-fs-4.1.15.tgz", @@ -7157,12 +7105,6 @@ "dev": true, "optional": true }, - "nanoid": { - "version": "2.0.1", - "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nanoid/-/nanoid-2.0.1.tgz", - "integrity": "sha1-3rVcrBluPxOAcZEdq7w3JusEiGQ=", - "dev": true - }, "nanomatch": { "version": "1.2.13", "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nanomatch/-/nanomatch-1.2.13.tgz", @@ -7686,12 +7628,6 @@ } } }, - "options": { - "version": "0.0.6", - "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "dev": true - }, "original": { "version": "1.0.2", "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/original/-/original-1.0.2.tgz", @@ -9371,15 +9307,6 @@ "rechoir": "0.6.2" } }, - "shortid": { - "version": "2.2.14", - "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/shortid/-/shortid-2.2.14.tgz", - "integrity": "sha1-gNtqr8vD46RoULPIjTngUbhMjRg=", - "dev": true, - "requires": { - "nanoid": "2.0.1" - } - }, "signal-exit": { "version": "3.0.2", "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/signal-exit/-/signal-exit-3.0.2.tgz", @@ -10390,39 +10317,6 @@ "integrity": "sha1-9d9zJFNAewkZHa5z4qjMc/OBqCY=", "dev": true }, - "tick42-glue-core": { - "version": "3.13.8", - "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/tick42-glue-core/-/tick42-glue-core-3.13.8.tgz", - "integrity": "sha1-ab84CEcTc/II4+/btA3sTlnIsHM=", - "dev": true, - "requires": { - "callback-registry": "2.4.0", - "es6-promise": "4.2.5", - "shortid": "2.2.14", - "util-deprecate": "1.0.2", - "ws": "0.7.2" - }, - "dependencies": { - "ultron": { - "version": "1.0.2", - "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", - "dev": true - }, - "ws": { - "version": "0.7.2", - "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/ws/-/ws-0.7.2.tgz", - "integrity": "sha1-Q4xWC9+it9o91ba0btYTJcJGmdg=", - "dev": true, - "requires": { - "bufferutil": "1.1.0", - "options": "0.0.6", - "ultron": "1.0.2", - "utf-8-validate": "1.1.0" - } - } - } - }, "timers-browserify": { "version": "2.0.10", "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/timers-browserify/-/timers-browserify-2.0.10.tgz", @@ -10871,26 +10765,6 @@ "tmp": "0.0.33" } }, - "utf-8-validate": { - "version": "1.1.0", - "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/utf-8-validate/-/utf-8-validate-1.1.0.tgz", - "integrity": "sha1-UhprshidCzB93Ft5w8laX9gIXbQ=", - "dev": true, - "optional": true, - "requires": { - "bindings": "1.2.1", - "nan": "1.8.4" - }, - "dependencies": { - "nan": { - "version": "1.8.4", - "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/nan/-/nan-1.8.4.tgz", - "integrity": "sha1-PHa1OC6rM+RLdY0oE8qdkuk0LzQ=", - "dev": true, - "optional": true - } - } - }, "utf8-byte-length": { "version": "1.0.4", "resolved": "https://repo.tick42.com:443/api/npm/tick42-npm/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", diff --git a/toolbar-ui-angular/package.json b/toolbar-ui-angular/package.json index d805bb1..50658a7 100644 --- a/toolbar-ui-angular/package.json +++ b/toolbar-ui-angular/package.json @@ -4,7 +4,7 @@ "scripts": { "ng": "ng", "start": "ng serve", - "build": "ng build --base-href ./", + "build": "npm i && ng build --base-href ./", "test": "ng test", "test:watch": "ng test --code-coverage", "lint": "ng lint", From bc1b86184b303c9e913c492f6ab111b45c3df23b Mon Sep 17 00:00:00 2001 From: Ina Kostova Date: Mon, 3 Jun 2019 14:43:16 +0300 Subject: [PATCH 06/14] Update Glue42 FINOS FDC3 App Directroy toolbar name to FDC3 Demo Toolbar --- README.md | 2 +- toolbar-ui-angular/src/assets/app-config.html | 2 +- toolbar-ui-angular/src/assets/logs.html | 2 +- toolbar-ui-angular/src/assets/provider-config.html | 2 +- toolbar-ui-angular/src/index.html | 3 +-- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 8d97102..ff08dd6 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Application provider details are held in local storage. ####
AppD PoC provider -In order to use the Glue42 FINOS FDC3 App Directroy toolbar, you need to have AppD services to connect to. If you do not have access to services, you can run your own instances using the [appd-poc](https://github.com/FDC3/appd-poc), a Java server. Steps to run: +In order to use the FDC3 Demo Toolbar, you need to have AppD services to connect to. If you do not have access to services, you can run your own instances using the [appd-poc](https://github.com/FDC3/appd-poc), a Java server. Steps to run: - Clone the project diff --git a/toolbar-ui-angular/src/assets/app-config.html b/toolbar-ui-angular/src/assets/app-config.html index 01db5e2..dbb785b 100644 --- a/toolbar-ui-angular/src/assets/app-config.html +++ b/toolbar-ui-angular/src/assets/app-config.html @@ -13,7 +13,7 @@ - Glue42 FINOS FDC3 AppD demo application config + FDC3 Demo Toolbar application config