@c8y/ngx-components 1021.63.2 → 1021.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/auth-configuration/sso-configuration/template-parts/signature-configuration.component.d.ts +7 -2
- package/auth-configuration/sso-configuration/template-parts/signature-configuration.component.d.ts.map +1 -1
- package/core/bottom-drawer/bottom-drawer-ref.d.ts +4 -0
- package/core/bottom-drawer/bottom-drawer-ref.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb-item.component.d.ts +1 -1
- package/core/breadcrumb/breadcrumb-item.component.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb-outlet.component.d.ts +1 -1
- package/core/breadcrumb/breadcrumb-outlet.component.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb.component.d.ts +1 -1
- package/core/breadcrumb/breadcrumb.component.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb.module.d.ts +7 -7
- package/core/breadcrumb/breadcrumb.module.d.ts.map +1 -1
- package/core/common/common.module.d.ts +38 -38
- package/core/common/date-format.service.d.ts +30 -0
- package/core/common/date-format.service.d.ts.map +1 -0
- package/core/common/date.pipe.d.ts +7 -3
- package/core/common/date.pipe.d.ts.map +1 -1
- package/core/common/index.d.ts +1 -0
- package/core/common/index.d.ts.map +1 -1
- package/core/common/outlet.directive.d.ts +1 -1
- package/core/common/outlet.directive.d.ts.map +1 -1
- package/core/common/user-preferences/user-preferences-store-current-user.d.ts +11 -0
- package/core/common/user-preferences/user-preferences-store-current-user.d.ts.map +1 -0
- package/core/common/user-preferences/user-preferences.service.d.ts +40 -1
- package/core/common/user-preferences/user-preferences.service.d.ts.map +1 -1
- package/core/date-picker/date-picker.component.d.ts +3 -1
- package/core/date-picker/date-picker.component.d.ts.map +1 -1
- package/core/date-time-picker/date-time-picker.component.d.ts +6 -3
- package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
- package/core/dynamic-forms/date/date.type.component.d.ts +3 -0
- package/core/dynamic-forms/date/date.type.component.d.ts.map +1 -1
- package/core/plugins/plugins.model.d.ts +1 -0
- package/core/plugins/plugins.model.d.ts.map +1 -1
- package/core/plugins/plugins.service.d.ts +7 -2
- package/core/plugins/plugins.service.d.ts.map +1 -1
- package/core/time-interval/time-interval.component.d.ts +4 -2
- package/core/time-interval/time-interval.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugin-readme.component.d.ts +15 -0
- package/ecosystem/application-plugins/application-plugin-readme.component.d.ts.map +1 -0
- package/ecosystem/application-plugins/application-plugins.component.d.ts +4 -2
- package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugins.module.d.ts +4 -3
- package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
- package/ecosystem/application-plugins/install-plugin.component.d.ts +8 -4
- package/ecosystem/application-plugins/install-plugin.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/plugin-list.component.d.ts +10 -26
- package/ecosystem/application-plugins/plugin-list.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/plugin-list.service.d.ts +27 -0
- package/ecosystem/application-plugins/plugin-list.service.d.ts.map +1 -0
- package/ecosystem/ecosystem.module.d.ts +2 -1
- package/ecosystem/ecosystem.module.d.ts.map +1 -1
- package/ecosystem/packages/package-changelog-tab/package-changelog-tab.component.d.ts +15 -0
- package/ecosystem/packages/package-changelog-tab/package-changelog-tab.component.d.ts.map +1 -0
- package/ecosystem/packages/package-changelog.guard.d.ts +10 -0
- package/ecosystem/packages/package-changelog.guard.d.ts.map +1 -0
- package/ecosystem/packages/package-details/package-details.component.d.ts +7 -9
- package/ecosystem/packages/package-details/package-details.component.d.ts.map +1 -1
- package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts +5 -1
- package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts.map +1 -1
- package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts +8 -3
- package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts.map +1 -1
- package/ecosystem/packages/package-versions/packages-versions.component.d.ts +9 -2
- package/ecosystem/packages/package-versions/packages-versions.component.d.ts.map +1 -1
- package/ecosystem/shared/index.d.ts +1 -0
- package/ecosystem/shared/index.d.ts.map +1 -1
- package/ecosystem/shared/package-changelog/package-changelog.component.d.ts +24 -0
- package/ecosystem/shared/package-changelog/package-changelog.component.d.ts.map +1 -0
- package/ecosystem/shared/shared-ecosystem.module.d.ts +2 -1
- package/ecosystem/shared/shared-ecosystem.module.d.ts.map +1 -1
- package/esm2022/auth-configuration/sso-configuration/template-parts/signature-configuration.component.mjs +11 -7
- package/esm2022/core/bottom-drawer/bottom-drawer-ref.mjs +9 -3
- package/esm2022/core/breadcrumb/breadcrumb-item.component.mjs +3 -3
- package/esm2022/core/breadcrumb/breadcrumb-outlet.component.mjs +19 -9
- package/esm2022/core/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2022/core/breadcrumb/breadcrumb.module.mjs +16 -5
- package/esm2022/core/common/common.module.mjs +6 -6
- package/esm2022/core/common/date-format.service.mjs +81 -0
- package/esm2022/core/common/date.pipe.mjs +29 -6
- package/esm2022/core/common/index.mjs +2 -1
- package/esm2022/core/common/outlet.directive.mjs +4 -3
- package/esm2022/core/common/user-preferences/user-preferences-store-current-user.mjs +22 -0
- package/esm2022/core/common/user-preferences/user-preferences.service.mjs +106 -16
- package/esm2022/core/date-picker/date-picker.component.mjs +11 -4
- package/esm2022/core/date-time-picker/date-time-picker.component.mjs +20 -11
- package/esm2022/core/dynamic-forms/date/date.type.component.mjs +12 -4
- package/esm2022/core/plugins/plugins.model.mjs +1 -1
- package/esm2022/core/plugins/plugins.service.mjs +31 -5
- package/esm2022/core/time-interval/time-interval.component.mjs +9 -2
- package/esm2022/ecosystem/application-plugins/application-plugin-readme.component.mjs +26 -0
- package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +29 -14
- package/esm2022/ecosystem/application-plugins/application-plugins.module.mjs +6 -3
- package/esm2022/ecosystem/application-plugins/install-plugin.component.mjs +21 -15
- package/esm2022/ecosystem/application-plugins/plugin-list-item.component.mjs +3 -3
- package/esm2022/ecosystem/application-plugins/plugin-list.component.mjs +26 -202
- package/esm2022/ecosystem/application-plugins/plugin-list.service.mjs +200 -0
- package/esm2022/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.mjs +3 -3
- package/esm2022/ecosystem/application-properties/update-application-modal/update-application-modal.component.mjs +1 -1
- package/esm2022/ecosystem/ecosystem.module.mjs +21 -5
- package/esm2022/ecosystem/packages/package-changelog-tab/package-changelog-tab.component.mjs +33 -0
- package/esm2022/ecosystem/packages/package-changelog.guard.mjs +22 -0
- package/esm2022/ecosystem/packages/package-details/package-details.component.mjs +25 -44
- package/esm2022/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.mjs +14 -4
- package/esm2022/ecosystem/packages/package-versions/package-contents/packages-contents.component.mjs +27 -8
- package/esm2022/ecosystem/packages/package-versions/packages-versions.component.mjs +22 -8
- package/esm2022/ecosystem/shared/index.mjs +2 -1
- package/esm2022/ecosystem/shared/list-filters/list-filters.component.mjs +3 -3
- package/esm2022/ecosystem/shared/package-changelog/package-changelog.component.mjs +82 -0
- package/esm2022/ecosystem/shared/package-version-select/package-version-select.component.mjs +3 -3
- package/esm2022/ecosystem/shared/shared-ecosystem.module.mjs +12 -6
- package/esm2022/operations/bulk-operation-scheduler/operation-scheduler.component.mjs +9 -7
- package/esm2022/operations/bulk-operations-list/bulk-operations-list.component.mjs +1 -1
- package/esm2022/upgrade/ng1/downgraded.services.mjs +3 -2
- package/esm2022/upgrade/ng1/index.mjs +3 -2
- package/esm2022/widgets/cockpit/index.mjs +3 -1
- package/esm2022/widgets/cockpit-exports/index.mjs +8 -1
- package/esm2022/widgets/definitions/index.mjs +2 -1
- package/esm2022/widgets/definitions/radial-gauge/c8y-ngx-components-widgets-definitions-radial-gauge.mjs +5 -0
- package/esm2022/widgets/definitions/radial-gauge/index.mjs +33 -0
- package/esm2022/widgets/implementations/info-gauge/index.mjs +2 -2
- package/esm2022/widgets/implementations/info-gauge/info-gauge-widget-config/gauge.model.mjs +295 -0
- package/esm2022/widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.mjs +141 -11
- package/esm2022/widgets/implementations/info-gauge/info-gauge-widget-config/preset-preview/preset-preview.component.mjs +67 -0
- package/esm2022/widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.mjs +34 -6
- package/esm2022/widgets/implementations/info-gauge/info-gauge-widget.module.mjs +9 -4
- package/esm2022/widgets/implementations/info-gauge/radial-gauge/radial-gauge.component.mjs +97 -0
- package/esm2022/widgets/implementations/info-gauge/radial-gauge/radial-gauge.service.mjs +369 -0
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +9 -5
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +209 -142
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +96 -13
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +336 -186
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +7 -5
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs +3 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs +7 -0
- package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs +2 -0
- package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs +40 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +991 -28
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +833 -550
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +45 -6
- package/locales/es.po +45 -6
- package/locales/fr.po +45 -6
- package/locales/ja_JP.po +45 -6
- package/locales/ko.po +45 -6
- package/locales/locales.pot +73 -10
- package/locales/nl.po +45 -6
- package/locales/pl.po +45 -6
- package/locales/pt_BR.po +45 -6
- package/locales/zh_CN.po +45 -6
- package/locales/zh_TW.po +45 -6
- package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts +4 -2
- package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/upgrade/ng1/downgraded.services.d.ts +1 -0
- package/upgrade/ng1/downgraded.services.d.ts.map +1 -1
- package/upgrade/ng1/index.d.ts.map +1 -1
- package/widgets/cockpit/index.d.ts +29 -0
- package/widgets/cockpit/index.d.ts.map +1 -1
- package/widgets/cockpit-exports/index.d.ts +6 -0
- package/widgets/cockpit-exports/index.d.ts.map +1 -1
- package/widgets/definitions/index.d.ts +1 -0
- package/widgets/definitions/index.d.ts.map +1 -1
- package/widgets/definitions/radial-gauge/c8y-ngx-components-widgets-definitions-radial-gauge.d.ts.map +1 -0
- package/widgets/definitions/radial-gauge/index.d.ts +33 -0
- package/widgets/definitions/radial-gauge/index.d.ts.map +1 -0
- package/widgets/implementations/info-gauge/index.d.ts +1 -1
- package/widgets/implementations/info-gauge/index.d.ts.map +1 -1
- package/widgets/implementations/info-gauge/info-gauge-widget-config/gauge.model.d.ts +339 -0
- package/widgets/implementations/info-gauge/info-gauge-widget-config/gauge.model.d.ts.map +1 -0
- package/widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.d.ts +27 -7
- package/widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/info-gauge/info-gauge-widget-config/preset-preview/preset-preview.component.d.ts +33 -0
- package/widgets/implementations/info-gauge/info-gauge-widget-config/preset-preview/preset-preview.component.d.ts.map +1 -0
- package/widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.d.ts +7 -3
- package/widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.d.ts.map +1 -1
- package/widgets/implementations/info-gauge/info-gauge-widget.module.d.ts +2 -1
- package/widgets/implementations/info-gauge/info-gauge-widget.module.d.ts.map +1 -1
- package/widgets/implementations/info-gauge/radial-gauge/radial-gauge.component.d.ts +37 -0
- package/widgets/implementations/info-gauge/radial-gauge/radial-gauge.component.d.ts.map +1 -0
- package/widgets/implementations/info-gauge/radial-gauge/radial-gauge.service.d.ts +146 -0
- package/widgets/implementations/info-gauge/radial-gauge/radial-gauge.service.d.ts.map +1 -0
- package/esm2022/widgets/implementations/info-gauge/info-gauge.model.mjs +0 -2
- package/widgets/implementations/info-gauge/info-gauge.model.d.ts +0 -7
- package/widgets/implementations/info-gauge/info-gauge.model.d.ts.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component, Input, ViewChild } from '@angular/core';
|
|
2
2
|
import { ActivatedRoute } from '@angular/router';
|
|
3
|
-
import { AlertService, ApplicationPluginStatus, DataGridComponent, GainsightService, gettext, PluginsService, PluginsExportScopes } from '@c8y/ngx-components';
|
|
3
|
+
import { AlertService, ApplicationPluginStatus, DataGridComponent, GainsightService, gettext, PluginsService, PluginsExportScopes, BottomDrawerService } from '@c8y/ngx-components';
|
|
4
4
|
import { EcosystemService, PRODUCT_EXPERIENCE_ECOSYSTEM } from '@c8y/ngx-components/ecosystem/shared';
|
|
5
5
|
import { pick } from 'lodash-es';
|
|
6
6
|
import { BsModalService } from 'ngx-bootstrap/modal';
|
|
@@ -10,6 +10,7 @@ import { InstallPluginComponent } from './install-plugin.component';
|
|
|
10
10
|
import { LabelCellRendererComponent } from './label-cell-renderer.component';
|
|
11
11
|
import { OrphanedStatusCellRendererComponent } from './orphaned-status-cell-renderer.component';
|
|
12
12
|
import { UpdatePluginOfAppComponent } from './update-plugin-of-app/update-plugin-of-app.component';
|
|
13
|
+
import { ApplicationPluginReadmeComponent } from './application-plugin-readme.component';
|
|
13
14
|
import * as i0 from "@angular/core";
|
|
14
15
|
import * as i1 from "@angular/router";
|
|
15
16
|
import * as i2 from "@c8y/ngx-components/ecosystem/shared";
|
|
@@ -17,13 +18,14 @@ import * as i3 from "ngx-bootstrap/modal";
|
|
|
17
18
|
import * as i4 from "@c8y/ngx-components";
|
|
18
19
|
import * as i5 from "@angular/common";
|
|
19
20
|
export class ApplicationPluginsComponent {
|
|
20
|
-
constructor(activatedRoute, ecosystemService, bsModalService, pluginsService, alertService, gainsightService) {
|
|
21
|
+
constructor(activatedRoute, ecosystemService, bsModalService, pluginsService, alertService, gainsightService, bottomDrawerService) {
|
|
21
22
|
this.activatedRoute = activatedRoute;
|
|
22
23
|
this.ecosystemService = ecosystemService;
|
|
23
24
|
this.bsModalService = bsModalService;
|
|
24
25
|
this.pluginsService = pluginsService;
|
|
25
26
|
this.alertService = alertService;
|
|
26
27
|
this.gainsightService = gainsightService;
|
|
28
|
+
this.bottomDrawerService = bottomDrawerService;
|
|
27
29
|
this.PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_ECOSYSTEM;
|
|
28
30
|
this.CURRENT_LOCATION = location.href;
|
|
29
31
|
this.remotePlugins$ = new BehaviorSubject({});
|
|
@@ -154,13 +156,11 @@ export class ApplicationPluginsComponent {
|
|
|
154
156
|
targetApplicationName: this.app.name,
|
|
155
157
|
targetApplicationContextPath: this.app.contextPath
|
|
156
158
|
});
|
|
157
|
-
const
|
|
158
|
-
class: 'modal-md',
|
|
159
|
-
ariaDescribedby: 'modal-body',
|
|
160
|
-
ariaLabelledBy: 'modal-title',
|
|
159
|
+
const drawer = this.bottomDrawerService.openDrawer(InstallPluginComponent, {
|
|
161
160
|
initialState: this.getInstallModalInitState(),
|
|
162
|
-
|
|
163
|
-
})
|
|
161
|
+
closeOnNavigation: true
|
|
162
|
+
});
|
|
163
|
+
const pluginsToAdd = await drawer.instance.result;
|
|
164
164
|
const isArchived = await this.ecosystemService.verifyArchived(pluginsToAdd);
|
|
165
165
|
if (!isArchived) {
|
|
166
166
|
return;
|
|
@@ -223,10 +223,19 @@ export class ApplicationPluginsComponent {
|
|
|
223
223
|
}
|
|
224
224
|
getActionControls() {
|
|
225
225
|
return [
|
|
226
|
+
{
|
|
227
|
+
type: 'showReadme',
|
|
228
|
+
text: gettext('Show readme'),
|
|
229
|
+
icon: 'documents',
|
|
230
|
+
showIf: (plugin) => {
|
|
231
|
+
return !!plugin.readmePath;
|
|
232
|
+
},
|
|
233
|
+
callback: plugin => this.showPluginReadme(plugin)
|
|
234
|
+
},
|
|
226
235
|
{
|
|
227
236
|
type: 'customUpdate',
|
|
228
237
|
text: gettext('Update'),
|
|
229
|
-
icon: '
|
|
238
|
+
icon: 'installing-updates',
|
|
230
239
|
showIf: plugin => {
|
|
231
240
|
return (plugin.status === ApplicationPluginStatus.OUTDATED ||
|
|
232
241
|
plugin.status === ApplicationPluginStatus.REVOKED);
|
|
@@ -236,7 +245,7 @@ export class ApplicationPluginsComponent {
|
|
|
236
245
|
{
|
|
237
246
|
type: 'customDowngrade',
|
|
238
247
|
text: gettext('Downgrade'),
|
|
239
|
-
icon: '
|
|
248
|
+
icon: 'installing-updates',
|
|
240
249
|
showIf: (plugin) => {
|
|
241
250
|
if (plugin.scope === PluginsExportScopes.SELF ||
|
|
242
251
|
plugin.scope === PluginsExportScopes.SELF_OPTIONAL) {
|
|
@@ -248,6 +257,12 @@ export class ApplicationPluginsComponent {
|
|
|
248
257
|
}
|
|
249
258
|
];
|
|
250
259
|
}
|
|
260
|
+
showPluginReadme(plugin) {
|
|
261
|
+
this.bottomDrawerService.openDrawer(ApplicationPluginReadmeComponent, {
|
|
262
|
+
initialState: { plugin },
|
|
263
|
+
closeOnNavigation: true
|
|
264
|
+
});
|
|
265
|
+
}
|
|
251
266
|
getBulkActionControls() {
|
|
252
267
|
return [
|
|
253
268
|
{
|
|
@@ -261,7 +276,7 @@ export class ApplicationPluginsComponent {
|
|
|
261
276
|
async updatePlugin(app, plugin, downgrade = false) {
|
|
262
277
|
try {
|
|
263
278
|
await this.bsModalService.show(UpdatePluginOfAppComponent, {
|
|
264
|
-
class: 'modal-
|
|
279
|
+
class: 'modal-md',
|
|
265
280
|
ariaDescribedby: 'modal-body',
|
|
266
281
|
ariaLabelledBy: 'modal-title',
|
|
267
282
|
initialState: {
|
|
@@ -471,16 +486,16 @@ export class ApplicationPluginsComponent {
|
|
|
471
486
|
targetApplicationContextPath: this.app.contextPath
|
|
472
487
|
});
|
|
473
488
|
}
|
|
474
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApplicationPluginsComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.EcosystemService }, { token: i3.BsModalService }, { token: i4.PluginsService }, { token: i4.AlertService }, { token: i4.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
489
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApplicationPluginsComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.EcosystemService }, { token: i3.BsModalService }, { token: i4.PluginsService }, { token: i4.AlertService }, { token: i4.GainsightService }, { token: i4.BottomDrawerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
475
490
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ApplicationPluginsComponent, selector: "c8y-app-plugins", inputs: { appId: "appId" }, viewQueries: [{ propertyName: "dataGrid", first: true, predicate: DataGridComponent, descendants: true }], ngImport: i0, template: "<c8y-title>{{ app | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-atom'\"\n [label]=\"'Ecosystem' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-modules'\"\n [label]=\"'Applications' | translate\"\n [path]=\"'ecosystem/application/applications'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"app | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Plugins' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *ngIf=\"!(isStandard$ | async)\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset to default plugins' | translate }}\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n (click)=\"resetToDefault()\"\n >\n <i c8yIcon=\"undo\"></i>\n {{ 'Reset to default' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Install plugins' | translate }}\"\n (click)=\"installPlugins()\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Install plugins' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<ng-container *ngIf=\"orphanedPlugins$ | async as orphanedPlugins\">\n <c8y-action-bar-item\n *ngIf=\"orphanedPlugins?.length\"\n [placement]=\"'right'\"\n >\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Clean up orphaned plugins' | translate }}\"\n (click)=\"cleanupOrphanedPlugins(orphanedPlugins)\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n >\n <i c8yIcon=\"erase\"></i>\n {{ 'Clean up orphaned plugins' | translate }}\n </button>\n </c8y-action-bar-item>\n</ng-container>\n\n<div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n class=\"d-contents\"\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [rows]=\"installedPlugins$ | async\"\n [pagination]=\"pagination\"\n [selectable]=\"true\"\n [actionControls]=\"actionControls\"\n [bulkActionControls]=\"bulkActionControls\"\n [headerActionControls]=\"headerActionControls\"\n (onReload)=\"refresh()\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'plugin'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <p *ngIf=\"stats?.size === 0\">\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Install plugins' | translate }}\"\n (click)=\"installPlugins()\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n translate\n >\n Install plugins\n </button>\n </p>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "component", type: i4.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i4.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i4.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i4.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i4.EmptyStateContextDirective, selector: "[emptyStateContext]" }, { kind: "directive", type: i4.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "hideReload"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: i4.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.HumanizeAppNamePipe, name: "humanizeAppName" }] }); }
|
|
476
491
|
}
|
|
477
492
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApplicationPluginsComponent, decorators: [{
|
|
478
493
|
type: Component,
|
|
479
494
|
args: [{ selector: 'c8y-app-plugins', template: "<c8y-title>{{ app | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-atom'\"\n [label]=\"'Ecosystem' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-modules'\"\n [label]=\"'Applications' | translate\"\n [path]=\"'ecosystem/application/applications'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"app | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Plugins' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *ngIf=\"!(isStandard$ | async)\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset to default plugins' | translate }}\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n (click)=\"resetToDefault()\"\n >\n <i c8yIcon=\"undo\"></i>\n {{ 'Reset to default' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Install plugins' | translate }}\"\n (click)=\"installPlugins()\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Install plugins' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<ng-container *ngIf=\"orphanedPlugins$ | async as orphanedPlugins\">\n <c8y-action-bar-item\n *ngIf=\"orphanedPlugins?.length\"\n [placement]=\"'right'\"\n >\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Clean up orphaned plugins' | translate }}\"\n (click)=\"cleanupOrphanedPlugins(orphanedPlugins)\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n >\n <i c8yIcon=\"erase\"></i>\n {{ 'Clean up orphaned plugins' | translate }}\n </button>\n </c8y-action-bar-item>\n</ng-container>\n\n<div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n class=\"d-contents\"\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [rows]=\"installedPlugins$ | async\"\n [pagination]=\"pagination\"\n [selectable]=\"true\"\n [actionControls]=\"actionControls\"\n [bulkActionControls]=\"bulkActionControls\"\n [headerActionControls]=\"headerActionControls\"\n (onReload)=\"refresh()\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'plugin'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <p *ngIf=\"stats?.size === 0\">\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Install plugins' | translate }}\"\n (click)=\"installPlugins()\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n translate\n >\n Install plugins\n </button>\n </p>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n</div>\n" }]
|
|
480
|
-
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.EcosystemService }, { type: i3.BsModalService }, { type: i4.PluginsService }, { type: i4.AlertService }, { type: i4.GainsightService }], propDecorators: { appId: [{
|
|
495
|
+
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.EcosystemService }, { type: i3.BsModalService }, { type: i4.PluginsService }, { type: i4.AlertService }, { type: i4.GainsightService }, { type: i4.BottomDrawerService }], propDecorators: { appId: [{
|
|
481
496
|
type: Input
|
|
482
497
|
}], dataGrid: [{
|
|
483
498
|
type: ViewChild,
|
|
484
499
|
args: [DataGridComponent, { static: false }]
|
|
485
500
|
}] } });
|
|
486
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tcGx1Z2lucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vYXBwbGljYXRpb24tcGx1Z2lucy9hcHBsaWNhdGlvbi1wbHVnaW5zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi1wbHVnaW5zL2FwcGxpY2F0aW9uLXBsdWdpbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUVMLFlBQVksRUFFWix1QkFBdUIsRUFHdkIsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUNoQixPQUFPLEVBSVAsY0FBYyxFQUNkLG1CQUFtQixFQUNwQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBQzdCLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRixPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSww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R0FBM0IsMkJBQTJCLDZIQUszQixpQkFBaUIsZ0RDMUM5Qiw2bEdBaUdBOzs0RkQ1RGEsMkJBQTJCO2tCQUp2QyxTQUFTOytCQUNFLGlCQUFpQjtzT0FPbEIsS0FBSztzQkFBYixLQUFLO2dCQUVOLFFBQVE7c0JBRFAsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMsIElBcHBsaWNhdGlvbiB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwbGljYXRpb25QbHVnaW4sXG4gIEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLFxuICBCdWxrQWN0aW9uQ29udHJvbCxcbiAgQ29sdW1uLFxuICBEYXRhR3JpZENvbXBvbmVudCxcbiAgRGlzcGxheU9wdGlvbnMsXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEhlYWRlckFjdGlvbkNvbnRyb2wsXG4gIFBhZ2luYXRpb24sXG4gIFBsdWdpbnNDb25maWcsXG4gIFBsdWdpbnNTZXJ2aWNlLFxuICBQbHVnaW5zRXhwb3J0U2NvcGVzXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgRWNvc3lzdGVtU2VydmljZSxcbiAgUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuaW1wb3J0IHsgcGljayB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEluc3RhbGxQbHVnaW5Db21wb25lbnQgfSBmcm9tICcuL2luc3RhbGwtcGx1Z2luLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMYWJlbENlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vbGFiZWwtY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3JwaGFuZWRTdGF0dXNDZWxsUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuL29ycGhhbmVkLXN0YXR1cy1jZWxsLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVcGRhdGVQbHVnaW5PZkFwcENvbXBvbmVudCB9IGZyb20gJy4vdXBkYXRlLXBsdWdpbi1vZi1hcHAvdXBkYXRlLXBsdWdpbi1vZi1hcHAuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFwcC1wbHVnaW5zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcGxpY2F0aW9uLXBsdWdpbnMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uUGx1Z2luc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgUFJPRFVDVF9FWFBFUklFTkNFID0gUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTTtcbiAgQ1VSUkVOVF9MT0NBVElPTiA9IGxvY2F0aW9uLmhyZWY7XG5cbiAgQElucHV0KCkgYXBwSWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgQFZpZXdDaGlsZChEYXRhR3JpZENvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGRhdGFHcmlkOiBEYXRhR3JpZENvbXBvbmVudDtcblxuICByZW1vdGVQbHVnaW5zJDogQmVoYXZpb3JTdWJqZWN0PEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KTtcbiAgYWxsQXZhaWxhYmxlUGx1Z2lucyQ6IEJlaGF2aW9yU3ViamVjdDxBcHBsaWNhdGlvblBsdWdpbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuICBzZWxmUGx1Z2lucyQ6IEJlaGF2aW9yU3ViamVjdDxBcHBsaWNhdGlvblBsdWdpbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuXG4gIGluc3RhbGxlZFBsdWdpbnMkOiBPYnNlcnZhYmxlPEFwcGxpY2F0aW9uUGx1Z2luW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5yZW1vdGVQbHVnaW5zJC5waXBlKG1hcChyZW1vdGVzID0+IFBsdWdpbnNTZXJ2aWNlLmNvbnZlcnRJbnN0YWxsZWRSZW1vdGVzVG9JZHMocmVtb3RlcykpKSxcbiAgICB0aGlzLmFsbEF2YWlsYWJsZVBsdWdpbnMkXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbcmVtb3RlUGx1Z2lucywgYWxsUGx1Z2luc10pID0+IHRoaXMuZ2V0SW5zdGFsbGVkUGx1Z2lucyhhbGxQbHVnaW5zLCByZW1vdGVQbHVnaW5zKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcbiAgb3JwaGFuZWRQbHVnaW5zJCA9IHRoaXMuaW5zdGFsbGVkUGx1Z2lucyQucGlwZShcbiAgICBtYXAocGx1Z2lucyA9PiBwbHVnaW5zLmZpbHRlcihwID0+IHAuc3RhdHVzID09PSBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5PUlBIQU5FRCkpXG4gICk7XG4gIGlzU3RhbmRhcmQkID0gY29tYmluZUxhdGVzdChbdGhpcy5pbnN0YWxsZWRQbHVnaW5zJCwgdGhpcy5zZWxmUGx1Z2lucyRdKS5waXBlKFxuICAgIG1hcCgoW2luc3RhbGxlZFBsdWdpbnMsIHNlbGZQbHVnaW5zXSkgPT4ge1xuICAgICAgY29uc3QgbWFuaWZlc3RSZW1vdGVzID0gdGhpcy5hcHA/Lm1hbmlmZXN0Py5yZW1vdGVzIHx8IHt9O1xuICAgICAgLy8gZW5zdXJlIHRoYXQgZXZlcnkgaW5zdGFsbGVkIHBsdWdpbiBpcyBhIHNlbGYgcGx1Z2luIG9yIGEgcGx1Z2luIGZyb20gdGhlIG1hbmlmZXN0XG4gICAgICBjb25zdCBhbGxJbnN0YWxsZWRQbHVnaW5zQXJlU2VsZiA9IGluc3RhbGxlZFBsdWdpbnMuZXZlcnkoXG4gICAgICAgIHAgPT5cbiAgICAgICAgICBzZWxmUGx1Z2lucy5zb21lKHNlbGZQbHVnaW4gPT4gc2VsZlBsdWdpbi5pZCA9PT0gcC5pZCkgfHxcbiAgICAgICAgICAoQXJyYXkuaXNBcnJheShtYW5pZmVzdFJlbW90ZXNbcC5jb250ZXh0UGF0aF0pICYmXG4gICAgICAgICAgICBtYW5pZmVzdFJlbW90ZXNbcC5jb250ZXh0UGF0aF0uaW5jbHVkZXMocC5tb2R1bGUpKVxuICAgICAgKTtcblxuICAgICAgLy8gZW5zdXJlIHRoYXQgZXZlcnkgc2VsZiBwbHVnaW4gaXMgaW5zdGFsbGVkXG4gICAgICBjb25zdCBhbGxTZWxmUGx1Z2luc0FyZUluc3RhbGxlZCA9IHNlbGZQbHVnaW5zLmV2ZXJ5KHNlbGZQbHVnaW4gPT5cbiAgICAgICAgaW5zdGFsbGVkUGx1Z2lucy5zb21lKHAgPT4gcC5pZCA9PT0gc2VsZlBsdWdpbi5pZClcbiAgICAgICk7XG4gICAgICBjb25zdCBjb25maWdSZW1vdGVzID0gdGhpcy5hcHA/LmNvbmZpZz8ucmVtb3RlcyB8fCB7fTtcblxuICAgICAgLy8gZW5zdXJlIHRoYXQgZXZlcnkgcmVtb3RlIGZyb20gdGhlIG1hbmlmZXN0IGlzIGluIHRoZSBjb25maWdcbiAgICAgIC8vIGlmIG5vIGNvbmZpZyBleGlzdHMgd2UgYXJlIGFsc28gYWxsIGdvb2RcbiAgICAgIGNvbnN0IGV2ZXJ5UmVtb3RlRnJvbU1hbmlmZXN0SXNJbkNvbmZpZyA9XG4gICAgICAgICF0aGlzLmFwcD8uY29uZmlnPy5yZW1vdGVzIHx8XG4gICAgICAgIE9iamVjdC5rZXlzKG1hbmlmZXN0UmVtb3RlcykuZXZlcnkoXG4gICAgICAgICAgY29udGV4dFBhdGggPT5cbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoY29uZmlnUmVtb3Rlc1tjb250ZXh0UGF0aF0pICYmXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KG1hbmlmZXN0UmVtb3Rlc1tjb250ZXh0UGF0aF0pICYmXG4gICAgICAgICAgICBtYW5pZmVzdFJlbW90ZXNbY29udGV4dFBhdGhdLmV2ZXJ5KG1vZHVsZSA9PlxuICAgICAgICAgICAgICBjb25maWdSZW1vdGVzW2NvbnRleHRQYXRoXS5pbmNsdWRlcyhtb2R1bGUpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIGFsbEluc3RhbGxlZFBsdWdpbnNBcmVTZWxmICYmXG4gICAgICAgIGFsbFNlbGZQbHVnaW5zQXJlSW5zdGFsbGVkICYmXG4gICAgICAgIGV2ZXJ5UmVtb3RlRnJvbU1hbmlmZXN0SXNJbkNvbmZpZ1xuICAgICAgKTtcbiAgICB9KVxuICApO1xuICBhcHA6IElBcHBsaWNhdGlvbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICB0aXRsZTogc3RyaW5nID0gZ2V0dGV4dCgnSW5zdGFsbGVkIHBsdWdpbnMnKTtcbiAgbG9hZE1vcmVJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkIG1vcmUgcGFja2FnZXMnKTtcbiAgbG9hZGluZ0l0ZW1zTGFiZWw6IHN0cmluZyA9IGdldHRleHQoJ0xvYWRpbmcgcGFja2FnZXPigKYnKTtcbiAgYWN0aW9uQ29udHJvbHM6IEFjdGlvbkNvbnRyb2xbXSA9IHRoaXMuZ2V0QWN0aW9uQ29udHJvbHMoKTtcbiAgYnVsa0FjdGlvbkNvbnRyb2xzOiBCdWxrQWN0aW9uQ29udHJvbFtdID0gdGhpcy5nZXRCdWxrQWN0aW9uQ29udHJvbHMoKTtcbiAgaGVhZGVyQWN0aW9uQ29udHJvbHM6IEhlYWRlckFjdGlvbkNvbnRyb2xbXSA9IFtdO1xuICBub1Jlc3VsdHNNZXNzYWdlID0gZ2V0dGV4dCgnTm8gcGx1Z2lucyB0byBkaXNwbGF5LicpO1xuICBub0RhdGFNZXNzYWdlID0gZ2V0dGV4dCgnTm8gcGx1Z2lucyBpbnN0YWxsZWQuJyk7XG4gIG5vUmVzdWx0c1N1YnRpdGxlID0gZ2V0dGV4dCgnUmVmaW5lIHlvdXIgc2VhcmNoIHRlcm1zIG9yIGNoZWNrIHlvdXIgc3BlbGxpbmcuJyk7XG4gIG5vRGF0YVN1YnRpdGxlID0gZ2V0dGV4dChcIlRoaXMgYXBwbGljYXRpb24gZG9lc24ndCBoYXZlIGFueSBwbHVnaW4uIENsaWNrIGJlbG93IHRvIGluc3RhbGwuXCIpO1xuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0ge1xuICAgIHBhZ2VTaXplOiAxMCxcbiAgICBjdXJyZW50UGFnZTogMVxuICB9O1xuICBkaXNwbGF5T3B0aW9uczogRGlzcGxheU9wdGlvbnMgPSB7XG4gICAgYm9yZGVyZWQ6IGZhbHNlLFxuICAgIHN0cmlwZWQ6IHRydWUsXG4gICAgZmlsdGVyOiB0cnVlLFxuICAgIGdyaWRIZWFkZXI6IHRydWUsXG4gICAgaG92ZXI6IHRydWVcbiAgfTtcbiAgY29sdW1uczogQ29sdW1uW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdQbHVnaW4gbmFtZScpLFxuICAgICAgcGF0aDogJ25hbWUnLFxuICAgICAgZmlsdGVyYWJsZTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ1ZlcnNpb24nLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdWZXJzaW9uJyksXG4gICAgICBwYXRoOiAndmVyc2lvbicsXG4gICAgICBmaWx0ZXJhYmxlOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ1RhZycsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ1RhZ2Bub3VuYCcpLFxuICAgICAgcGF0aDogJ2luc3RhbGxlZFZpYVRhZycsXG4gICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNlbGxSZW5kZXJlckNvbXBvbmVudDogTGFiZWxDZWxsUmVuZGVyZXJDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdkZXNjcmlwdGlvbicsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBwYXRoOiAnZGVzY3JpcHRpb24nLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICBjZWxsQ1NTQ2xhc3NOYW1lOiAnc21hbGwnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY29udGV4dFBhdGgnLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdTb3VyY2UnKSxcbiAgICAgIHBhdGg6ICdjb250ZXh0UGF0aCcsXG4gICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNlbGxSZW5kZXJlckNvbXBvbmVudDogTGFiZWxDZWxsUmVuZGVyZXJDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzY29wZScsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ1Njb3BlJyksXG4gICAgICBwYXRoOiAnc2NvcGUnLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgIGNlbGxSZW5kZXJlckNvbXBvbmVudDogTGFiZWxDZWxsUmVuZGVyZXJDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzdGF0dXMnLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdTdGF0dXMnKSxcbiAgICAgIHBhdGg6ICdzdGF0dXMnLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICBjZWxsUmVuZGVyZXJDb21wb25lbnQ6IE9ycGhhbmVkU3RhdHVzQ2VsbFJlbmRlcmVyQ29tcG9uZW50XG4gICAgfVxuICBdO1xuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGVjb3N5c3RlbVNlcnZpY2U6IEVjb3N5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBic01vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwbHVnaW5zU2VydmljZTogUGx1Z2luc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYWRkSW5zdGFsbEJ1dHRvblRvSGVhZGVyQWN0aW9uQ29udHJvbHMoKTtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBhc3luYyBsb2FkRGF0YSgpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbk1PKCk7XG4gICAgYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbk1GUmVtb3Rlcyh0aGlzLmFwcCk7XG4gICAgYXdhaXQgdGhpcy5nZXRBbGxBcHBsaWNhdGlvbnNNRkV4cG9ydHModGhpcy5hcHApO1xuICAgIGF3YWl0IHRoaXMuZ2V0QWxsU2VsZk1GRXhwb3J0cyh0aGlzLmFwcCk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0VG9EZWZhdWx0KCkge1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLnBsdWdpbnNTZXJ2aWNlLnJlc2V0UmVtb3Rlcyh0aGlzLmFwcCk7XG4gICAgYXdhaXQgdGhpcy5sb2FkRGF0YSgpO1xuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnVGhlIGFwcGxpY2F0aW9uIHdhcyByZXNldCB0byBpdHMgZGVmYXVsdCBwbHVnaW5zLicpKTtcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGxQbHVnaW5zKCkge1xuICAgIGxldCBjdXJyZW50UGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbiB8IG51bGwgPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoXG4gICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU0uQVBQTElDQVRJT05TLkVWRU5UUy5JTlNUQUxMRURfUExVR0lOUyxcbiAgICAgICAge1xuICAgICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTS5BUFBMSUNBVElPTlMuQ09NUE9ORU5UUy5BUFBMSUNBVElPTl9QTFVHSU5TLFxuICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTS5BUFBMSUNBVElPTlMuQUNUSU9OUy5JTlNUQUxMX1BMVUdJTlNfSU5JVElBVEVELFxuICAgICAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OLFxuICAgICAgICAgIHRhcmdldEFwcGxpY2F0aW9uTmFtZTogdGhpcy5hcHAubmFtZSxcbiAgICAgICAgICB0YXJnZXRBcHBsaWNhdGlvbkNvbnRleHRQYXRoOiB0aGlzLmFwcC5jb250ZXh0UGF0aFxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgY29uc3QgcGx1Z2luc1RvQWRkOiBBcHBsaWNhdGlvblBsdWdpbltdID1cbiAgICAgICAgYXdhaXQgdGhpcy5ic01vZGFsU2VydmljZS5zaG93PEluc3RhbGxQbHVnaW5Db21wb25lbnQ+KEluc3RhbGxQbHVnaW5Db21wb25lbnQsIHtcbiAgICAgICAgICBjbGFzczogJ21vZGFsLW1kJyxcbiAgICAgICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgICAgICBhcmlhTGFiZWxsZWRCeTogJ21vZGFsLXRpdGxlJyxcbiAgICAgICAgICBpbml0aWFsU3RhdGU6IHRoaXMuZ2V0SW5zdGFsbE1vZGFsSW5pdFN0YXRlKCksXG4gICAgICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZVxuICAgICAgICB9KS5jb250ZW50LnJlc3VsdDtcblxuICAgICAgY29uc3QgaXNBcmNoaXZlZCA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS52ZXJpZnlBcmNoaXZlZChwbHVnaW5zVG9BZGQpO1xuICAgICAgaWYgKCFpc0FyY2hpdmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGljZW5zZXNWZXJpZmllZEJ5VXNlciA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS52ZXJpZnlMaWNlbnNlcyhwbHVnaW5zVG9BZGQpO1xuICAgICAgaWYgKCFsaWNlbnNlc1ZlcmlmaWVkQnlVc2VyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZlcmlmeVZlcnNpb25Db21wYXRpYmlsaXR5ID1cbiAgICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnZlcmlmeVBsdWdpblZlcnNpb25zQ29tcGF0aWJpbGl0eShwbHVnaW5zVG9BZGQsIHRoaXMuYXBwKTtcblxuICAgICAgaWYgKCF2ZXJpZnlWZXJzaW9uQ29tcGF0aWJpbGl0eSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlUmVtb3Rlc0luc3RhbGxhdGlvbihwbHVnaW5zVG9BZGQpO1xuXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ1BsdWdpbnMgaW5zdGFsbGVkLicpKTtcbiAgICAgIHBsdWdpbnNUb0FkZC5mb3JFYWNoKHBsdWdpbiA9PiB7XG4gICAgICAgIGN1cnJlbnRQbHVnaW4gPSBwbHVnaW47XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyUGx1Z2luRXZlbnQoXG4gICAgICAgICAgcGx1Z2luLFxuICAgICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU0uQVBQTElDQVRJT05TLlJFU1VMVFMuUExVR0lOX0lOU1RBTExFRFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgICAgdGhpcy50cmlnZ2VyUGx1Z2luRXZlbnQoXG4gICAgICAgICAgY3VycmVudFBsdWdpbixcbiAgICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlNFUlZFUl9GQUlMVVJFXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVtb3ZlUGx1Z2lucyhwbHVnaW5zOiBzdHJpbmdbXSkge1xuICAgIGxldCBjdXJyZW50UGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbiB8IG51bGwgPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGluc3RhbGxlZFBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW10gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmluc3RhbGxlZFBsdWdpbnMkKTtcbiAgICAgIGNvbnN0IHBsdWdpbnNUb1JlbW92ZTogQXBwbGljYXRpb25QbHVnaW5bXSA9IGluc3RhbGxlZFBsdWdpbnMuZmlsdGVyKHAgPT5cbiAgICAgICAgcGx1Z2lucy5pbmNsdWRlcyhwLmlkKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRSZW1vdGVzID0gYXdhaXQgdGhpcy5wbHVnaW5zU2VydmljZS5yZW1vdmVSZW1vdGVzKFxuICAgICAgICB0aGlzLmFwcCxcbiAgICAgICAgcGx1Z2lucy5tYXAoaWQgPT4gaW5zdGFsbGVkUGx1Z2lucy5maW5kKHAgPT4gcC5pZCA9PT0gaWQpKVxuICAgICAgKTtcbiAgICAgIHRoaXMuZW1pdFJlbW90ZXModXBkYXRlZFJlbW90ZXMpO1xuXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRhR3JpZC5jYW5jZWwoKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnUGx1Z2lucyByZW1vdmVkLicpKTtcblxuICAgICAgcGx1Z2luc1RvUmVtb3ZlLmZvckVhY2gocGx1Z2luID0+IHtcbiAgICAgICAgY3VycmVudFBsdWdpbiA9IHBsdWdpbjtcblxuICAgICAgICB0aGlzLnRyaWdnZXJQbHVnaW5FdmVudChcbiAgICAgICAgICBwbHVnaW4sXG4gICAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTS5BUFBMSUNBVElPTlMuUkVTVUxUUy5QTFVHSU5fUkVNT1ZFRFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgICAgdGhpcy50cmlnZ2VyUGx1Z2luRXZlbnQoXG4gICAgICAgICAgY3VycmVudFBsdWdpbixcbiAgICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlNFUlZFUl9GQUlMVVJFXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2xlYW51cE9ycGhhbmVkUGx1Z2lucyhwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdKSB7XG4gICAgY29uc3QgcGx1Z2luSWRzID0gcGx1Z2lucy5tYXAocCA9PiBwLmlkKTtcbiAgICBhd2FpdCB0aGlzLnJlbW92ZVBsdWdpbnMocGx1Z2luSWRzKTtcbiAgfVxuXG4gIGdldEFjdGlvbkNvbnRyb2xzKCk6IEFjdGlvbkNvbnRyb2xbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2N1c3RvbVVwZGF0ZScsXG4gICAgICAgIHRleHQ6IGdldHRleHQoJ1VwZGF0ZScpLFxuICAgICAgICBpY29uOiAnY2FyZXQtc3F1YXJlLW8tdXAnLFxuICAgICAgICBzaG93SWY6IHBsdWdpbiA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBsdWdpbi5zdGF0dXMgPT09IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLk9VVERBVEVEIHx8XG4gICAgICAgICAgICBwbHVnaW4uc3RhdHVzID09PSBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5SRVZPS0VEXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2FsbGJhY2s6IHBsdWdpbiA9PiB0aGlzLnVwZGF0ZVBsdWdpbih0aGlzLmFwcCwgcGx1Z2luIGFzIEFwcGxpY2F0aW9uUGx1Z2luKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2N1c3RvbURvd25ncmFkZScsXG4gICAgICAgIHRleHQ6IGdldHRleHQoJ0Rvd25ncmFkZScpLFxuICAgICAgICBpY29uOiAnY2FyZXQtc3F1YXJlLW8tZG93bicsXG4gICAgICAgIHNob3dJZjogKHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4pID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwbHVnaW4uc2NvcGUgPT09IFBsdWdpbnNFeHBvcnRTY29wZXMuU0VMRiB8fFxuICAgICAgICAgICAgcGx1Z2luLnNjb3BlID09PSBQbHVnaW5zRXhwb3J0U2NvcGVzLlNFTEZfT1BUSU9OQUxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHBsdWdpbi5zdGF0dXMgPT09IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLkxBVEVTVDtcbiAgICAgICAgfSxcbiAgICAgICAgY2FsbGJhY2s6IHBsdWdpbiA9PiB0aGlzLnVwZGF0ZVBsdWdpbih0aGlzLmFwcCwgcGx1Z2luIGFzIEFwcGxpY2F0aW9uUGx1Z2luLCB0cnVlKVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBnZXRCdWxrQWN0aW9uQ29udHJvbHMoKTogQnVsa0FjdGlvbkNvbnRyb2xbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2N1c3RvbURlbGV0ZScsXG4gICAgICAgIHRleHQ6IGdldHRleHQoJ1JlbW92ZScpLFxuICAgICAgICBpY29uOiAndHJhc2gnLFxuICAgICAgICBjYWxsYmFjazogcGx1Z2lucyA9PiB0aGlzLnJlbW92ZVBsdWdpbnMocGx1Z2lucylcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlUGx1Z2luKGFwcDogSUFwcGxpY2F0aW9uLCBwbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luLCBkb3duZ3JhZGUgPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCAoXG4gICAgICAgIHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhVcGRhdGVQbHVnaW5PZkFwcENvbXBvbmVudCwge1xuICAgICAgICAgIGNsYXNzOiAnbW9kYWwtc20nLFxuICAgICAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnLFxuICAgICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgcGx1Z2luLFxuICAgICAgICAgICAgZG93bmdyYWRlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlXG4gICAgICAgIH0pLmNvbnRlbnQgYXMgVXBkYXRlUGx1Z2luT2ZBcHBDb21wb25lbnRcbiAgICAgICkucmVzdWx0O1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkSW5zdGFsbEJ1dHRvblRvSGVhZGVyQWN0aW9uQ29udHJvbHMoKSB7XG4gICAgaWYgKHRoaXMuYXBwSWQpIHtcbiAgICAgIHRoaXMuaGVhZGVyQWN0aW9uQ29udHJvbHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdJbnN0YWxsIHBsdWdpbnMnKSxcbiAgICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnN0YWxsUGx1Z2lucygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaWNvbjogJ3BsdXMtY2lyY2xlJyxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tJ1xuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlUmVtb3Rlc0luc3RhbGxhdGlvbihwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdKSB7XG4gICAgY29uc3QgdXBkYXRlZFJlbW90ZXMgPSBhd2FpdCB0aGlzLnBsdWdpbnNTZXJ2aWNlLmFkZFJlbW90ZXModGhpcy5hcHAsIHBsdWdpbnMpO1xuICAgIHJldHVybiB0aGlzLmVtaXRSZW1vdGVzKHVwZGF0ZWRSZW1vdGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFJlbW90ZXMocGx1Z2luc0NvbmZpZzogUGx1Z2luc0NvbmZpZykge1xuICAgIGNvbnN0IHsgcmVtb3RlcywgZXhjbHVkZWRSZW1vdGVzIH0gPSBwbHVnaW5zQ29uZmlnO1xuXG4gICAgLy8gbmVlZGVkIGZvciBmaXJzdCB0aW1lIGFkZGluZy9yZW1vdmluZyBhIHBsdWdpblxuICAgIGlmICghdGhpcy5hcHAuY29uZmlnKSB7XG4gICAgICB0aGlzLmFwcC5jb25maWcgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLmFwcC5jb25maWcucmVtb3RlcyA9IHJlbW90ZXM7XG4gICAgdGhpcy5hcHAuY29uZmlnLmV4Y2x1ZGVkUmVtb3RlcyA9IGV4Y2x1ZGVkUmVtb3RlcztcbiAgICBjb25zdCBhY3R1YWxSZW1vdGVzID0gdGhpcy5wbHVnaW5zU2VydmljZS5nZXRNRlJlbW90ZXModGhpcy5hcHApO1xuICAgIHRoaXMucmVtb3RlUGx1Z2lucyQubmV4dChhY3R1YWxSZW1vdGVzKTtcbiAgICByZXR1cm4geyAuLi50aGlzLnJlbW90ZVBsdWdpbnMkLnZhbHVlIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFwcGxpY2F0aW9uTU8oKTogUHJvbWlzZTxJQXBwbGljYXRpb24+IHtcbiAgICBsZXQgaWQgPSB0aGlzLmFwcElkO1xuICAgIGlmICghaWQpIHtcbiAgICAgIGNvbnN0IHsgaWQ6IHJvdXRlSWQgfSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucGFyZW50LmRhdGEuY29udGV4dERhdGE7XG4gICAgICBpZCA9IHJvdXRlSWQ7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYXBwID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEFwcGxpY2F0aW9uKGlkKTtcbiAgICB9IGNhdGNoIChlcikge1xuICAgICAgaWYgKGVyKSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hcHA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFwcGxpY2F0aW9uTUZFeHBvcnRzKGFwcDogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgZXhwb3J0cyA9IHRoaXMucGx1Z2luc1NlcnZpY2UuZ2V0TUZFeHBvcnRzKGFwcCwgW10sIHRydWUpO1xuICAgIHJldHVybiBleHBvcnRzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBcHBsaWNhdGlvbk1GUmVtb3RlcyhhcHA6IElBcHBsaWNhdGlvbikge1xuICAgIGNvbnN0IGFwcENvbmZpZ1JlbW90ZXMgPSB0aGlzLnBsdWdpbnNTZXJ2aWNlLmdldE1GUmVtb3RlcyhhcHApO1xuICAgIHRoaXMucmVtb3RlUGx1Z2lucyQubmV4dChhcHBDb25maWdSZW1vdGVzIHx8IHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0QWxsQXBwbGljYXRpb25zTUZFeHBvcnRzKGFwcDogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgZXhwb3J0ZWRCeUN1cnJlbnRBcHAgPSBhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uTUZFeHBvcnRzKGFwcCk7XG4gICAgY29uc3QgYWxsQXBwc01GRXhwb3J0cyA9IGF3YWl0IHRoaXMucGx1Z2luc1NlcnZpY2UuZ2V0QWxsTUZFeHBvcnRzKHRydWUpO1xuICAgIHRoaXMuYWxsQXZhaWxhYmxlUGx1Z2lucyQubmV4dChbLi4uYWxsQXBwc01GRXhwb3J0cywgLi4uZXhwb3J0ZWRCeUN1cnJlbnRBcHBdKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0QWxsU2VsZk1GRXhwb3J0cyhhcHA6IElBcHBsaWNhdGlvbikge1xuICAgIGNvbnN0IGV4cG9ydGVkQnlDdXJyZW50QXBwID0gYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbk1GRXhwb3J0cyhhcHApO1xuICAgIHRoaXMuc2VsZlBsdWdpbnMkLm5leHQoZXhwb3J0ZWRCeUN1cnJlbnRBcHAuZmlsdGVyKCh7IHNjb3BlIH0pID0+IHNjb3BlID09PSAnc2VsZicpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5zdGFsbE1vZGFsSW5pdFN0YXRlKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBsdWdpbnMkOiBjb21iaW5lTGF0ZXN0KFt0aGlzLmFsbEF2YWlsYWJsZVBsdWdpbnMkLCB0aGlzLmluc3RhbGxlZFBsdWdpbnMkXSkucGlwZShcbiAgICAgICAgbWFwKChbYWxsUGx1Z2lucywgaW5zdGFsbGVkUGx1Z2luc10pID0+IHtcbiAgICAgICAgICAvLyB0byBub3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBhcnJheSBhbmQgb2JqZWN0cyBjb250YWluZWQgaW4gaXRcbiAgICAgICAgICBjb25zdCBhbGxQbHVnaW5zQXNOZXdPYmplY3RzID0gYWxsUGx1Z2lucy5tYXAocCA9PiAoeyAuLi5wIH0pKTtcblxuICAgICAgICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIGluc3RhbGxlZFBsdWdpbnMpIHtcbiAgICAgICAgICAgIGxldCBpbnN0YWxsZWRQbHVnaW4gPSBhbGxQbHVnaW5zQXNOZXdPYmplY3RzLmZpbmQocCA9PiBwLmlkID09PSBwbHVnaW4uaWQpO1xuXG4gICAgICAgICAgICBpZiAoIWluc3RhbGxlZFBsdWdpbiAmJiBwbHVnaW4uaW5zdGFsbGVkVmlhVGFnKSB7XG4gICAgICAgICAgICAgIGluc3RhbGxlZFBsdWdpbiA9IGFsbFBsdWdpbnNBc05ld09iamVjdHMuZmluZChcbiAgICAgICAgICAgICAgICBwID0+XG4gICAgICAgICAgICAgICAgICBwLmNvbnRleHRQYXRoID09PSBwbHVnaW4uY29udGV4dFBhdGggJiZcbiAgICAgICAgICAgICAgICAgIHAubW9kdWxlID09PSBwbHVnaW4ubW9kdWxlICYmXG4gICAgICAgICAgICAgICAgICBwLnRhZ3M/LmluY2x1ZGVzKHBsdWdpbi5pbnN0YWxsZWRWaWFUYWcgYXMgc3RyaW5nKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5zdGFsbGVkUGx1Z2luKSB7XG4gICAgICAgICAgICAgIGluc3RhbGxlZFBsdWdpbi5pbnN0YWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYWxsUGx1Z2luc0FzTmV3T2JqZWN0cy5tYXAocCA9PiAoeyAuLi5wLCBpbnN0YWxsZWQ6ICEhcC5pbnN0YWxsZWQgfSkpO1xuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcnBoYW5lZFBsdWdpbnMoXG4gICAgb3JwaGFuZWRQbHVnaW5JZHM6IHN0cmluZ1tdLFxuICAgIGFsbFBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW11cbiAgKTogQXBwbGljYXRpb25QbHVnaW5bXSB7XG4gICAgY29uc3Qgb3JwaGFuZWRQbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdID0gb3JwaGFuZWRQbHVnaW5JZHMubWFwKHAgPT4gdGhpcy5leHRyYWN0RGV0YWlscyhwKSk7XG4gICAgY29uc3Qgb3JwaGFuZWRQbHVnaW5zVXBkYXRlZCA9IG9ycGhhbmVkUGx1Z2lucy5tYXAocCA9PiB7XG4gICAgICBjb25zdCBwbHVnaW5XaXRoTWF0Y2hpbmdUYWcgPSBhbGxQbHVnaW5zLmZpbmQoXG4gICAgICAgIHRtcCA9PlxuICAgICAgICAgIHRtcC5jb250ZXh0UGF0aCA9PT0gcC5jb250ZXh0UGF0aCAmJlxuICAgICAgICAgIHRtcC5tb2R1bGUgPT09IHAubW9kdWxlICYmXG4gICAgICAgICAgdG1wLnRhZ3M/LmluY2x1ZGVzKHAudmVyc2lvbiB8fCAnbGF0ZXN0JylcbiAgICAgICk7XG4gICAgICBpZiAocGx1Z2luV2l0aE1hdGNoaW5nVGFnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucGx1Z2luV2l0aE1hdGNoaW5nVGFnLFxuICAgICAgICAgIGlkOiBwLmlkLFxuICAgICAgICAgIHN0YXR1czogQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuQVVUTyxcbiAgICAgICAgICBpbnN0YWxsZWRWaWFUYWc6IHAudmVyc2lvbiB8fCAnbGF0ZXN0J1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcGx1Z2luSW5EaWZmZXJlbnRWZXJzaW9uID0gYWxsUGx1Z2lucy5maW5kKFxuICAgICAgICB0bXAgPT4gdG1wLmNvbnRleHRQYXRoID09PSBwLmNvbnRleHRQYXRoICYmIHRtcC5tb2R1bGUgPT09IHAubW9kdWxlXG4gICAgICApO1xuICAgICAgaWYgKHBsdWdpbkluRGlmZmVyZW50VmVyc2lvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnBsdWdpbkluRGlmZmVyZW50VmVyc2lvbixcbiAgICAgICAgICB2ZXJzaW9uOiBwLnZlcnNpb24sXG4gICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgc3RhdHVzOiBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5PVVREQVRFRFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb3JwaGFuZWRQbHVnaW5zVXBkYXRlZDtcbiAgfVxuXG4gIHByaXZhdGUgc3BsaXRPcnBoYW5lZFBsdWdpbnNJbnRvT3JwaGFuZWRBbmRSZXZva2VkUGx1Z2lucyhcbiAgICBhbGxQbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdLFxuICAgIG9ycGhhbmVkUGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXVxuICApIHtcbiAgICBjb25zdCByZXZva2VkUGx1Z2lucyA9IG5ldyBBcnJheTxBcHBsaWNhdGlvblBsdWdpbj4oKTtcbiAgICBjb25zdCBhY3R1YWxseU9ycGhhbmVkUGx1Z2lucyA9IG5ldyBBcnJheTxBcHBsaWNhdGlvblBsdWdpbj4oKTtcblxuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIG9ycGhhbmVkUGx1Z2lucykge1xuICAgICAgY29uc3QgZm91bmRGYW1pbGlhclBsdWdpbiA9IGFsbFBsdWdpbnMuZmluZChcbiAgICAgICAgcGx1Z2luMSA9PiBwbHVnaW4uY29udGV4dFBhdGggPT09IHBsdWdpbjEuY29udGV4dFBhdGggJiYgcGx1Z2luLm1vZHVsZSA9PT0gcGx1Z2luMS5tb2R1bGVcbiAgICAgICk7XG4gICAgICBpZiAoZm91bmRGYW1pbGlhclBsdWdpbikge1xuICAgICAgICByZXZva2VkUGx1Z2lucy5wdXNoKFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIGZvdW5kRmFtaWxpYXJQbHVnaW4sIHBsdWdpbiwge1xuICAgICAgICAgICAgc3RhdHVzOiBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5SRVZPS0VEXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdHVhbGx5T3JwaGFuZWRQbHVnaW5zLnB1c2gocGx1Z2luKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyByZXZva2VkUGx1Z2lucywgYWN0dWFsbHlPcnBoYW5lZFBsdWdpbnMgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5zdGFsbGVkUGx1Z2lucyhcbiAgICBhbGxQbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdLFxuICAgIHJlbW90ZVBsdWdpbnM6IHN0cmluZ1tdXG4gICk6IEFwcGxpY2F0aW9uUGx1Z2luW10ge1xuICAgIGNvbnN0IGF2YWlsYWJsZVBsdWdpbnMgPSBhbGxQbHVnaW5zXG4gICAgICAuZmlsdGVyKHBsdWdpbiA9PiByZW1vdGVQbHVnaW5zLmluY2x1ZGVzKHBsdWdpbi5pZCkpXG4gICAgICAubWFwKHBsdWdpbiA9PlxuICAgICAgICBPYmplY3QuYXNzaWduKHBsdWdpbiwge1xuICAgICAgICAgIHN0YXR1czogcGx1Z2luLnRhZ3M/LmluY2x1ZGVzKCdsYXRlc3QnKVxuICAgICAgICAgICAgPyBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5MQVRFU1RcbiAgICAgICAgICAgIDogQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuT1VUREFURURcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgY29uc3Qgb3JwaGFuZWRQbHVnaW5JZHMgPSByZW1vdGVQbHVnaW5zLmZpbHRlcihcbiAgICAgIHIgPT4gIWF2YWlsYWJsZVBsdWdpbnMuZmluZChwbHVnaW4gPT4gcGx1Z2luLmlkID09PSByKVxuICAgICk7XG4gICAgY29uc3Qgb3JwaGFuZWRQbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdID0gdGhpcy5nZXRPcnBoYW5lZFBsdWdpbnMoXG4gICAgICBvcnBoYW5lZFBsdWdpbklkcyxcbiAgICAgIGFsbFBsdWdpbnNcbiAgICApO1xuXG4gICAgY29uc3Qgbm90QWN0dWFsbHlPcnBoYW5lZFBsdWdpbnMgPSBvcnBoYW5lZFBsdWdpbnMuZmlsdGVyKFxuICAgICAgcCA9PiBwLnN0YXR1cyA9PT0gQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuQVVUT1xuICAgICk7XG5cbiAgICBjb25zdCBvcnBoYW5lZE9yUmV2b2tlZFBsdWdpbnMgPSBvcnBoYW5lZFBsdWdpbnMuZmlsdGVyKFxuICAgICAgcCA9PiBwLnN0YXR1cyAhPT0gQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuQVVUT1xuICAgICk7XG5cbiAgICBjb25zdCB7IGFjdHVhbGx5T3JwaGFuZWRQbHVnaW5zLCByZXZva2VkUGx1Z2lucyB9ID1cbiAgICAgIHRoaXMuc3BsaXRPcnBoYW5lZFBsdWdpbnNJbnRvT3JwaGFuZWRBbmRSZXZva2VkUGx1Z2lucyhhbGxQbHVnaW5zLCBvcnBoYW5lZE9yUmV2b2tlZFBsdWdpbnMpO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLmF2YWlsYWJsZVBsdWdpbnMsXG4gICAgICAuLi5ub3RBY3R1YWxseU9ycGhhbmVkUGx1Z2lucyxcbiAgICAgIC4uLnJldm9rZWRQbHVnaW5zLFxuICAgICAgLi4uYWN0dWFsbHlPcnBoYW5lZFBsdWdpbnNcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0RGV0YWlscyhwbHVnaW5JZDogc3RyaW5nKTogQXBwbGljYXRpb25QbHVnaW4ge1xuICAgIGNvbnN0IGNvbnRleHRQYXRoID0gdGhpcy5nZXRTdHJpbmdNYXRjaGluZ1JlZ2V4KHBsdWdpbklkLCAvXlteQF0qKEB8XFwvKS8pO1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldFN0cmluZ01hdGNoaW5nUmVnZXgocGx1Z2luSWQsIC9ALipcXC8vKTtcbiAgICBjb25zdCBtb2R1bGUgPSB0aGlzLmdldFN0cmluZ01hdGNoaW5nUmVnZXgocGx1Z2luSWQsIC9cXC8uKiQvKTtcbiAgICBjb25zdCB1bmF2YWlsYWJsZSA9IGdldHRleHQoJ3VuYXZhaWxhYmxlYHBsdWdpbmAnKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHBsdWdpbklkLFxuICAgICAgaWRMYXRlc3Q6IGAke2NvbnRleHRQYXRofS8ke21vZHVsZX1gLFxuICAgICAgcGF0aDogJycsXG4gICAgICBtb2R1bGUsXG4gICAgICBuYW1lOiBtb2R1bGUsXG4gICAgICBzdGF0dXM6IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLk9SUEhBTkVELFxuICAgICAgY29udGV4dFBhdGg6IGNvbnRleHRQYXRoLFxuICAgICAgZGVzY3JpcHRpb246IHVuYXZhaWxhYmxlLFxuICAgICAgdmVyc2lvbjogdmVyc2lvblxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldFN0cmluZ01hdGNoaW5nUmVnZXgoXG4gICAgc3RyOiBzdHJpbmcsXG4gICAgcmVnZXg6IHsgW1N5bWJvbC5tYXRjaF0oc3RyaW5nOiBzdHJpbmcpOiBSZWdFeHBNYXRjaEFycmF5IHwgbnVsbCB9XG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHN0ci5tYXRjaChyZWdleCk7XG4gICAgY29uc3QgdmFsdWUgPSBtYXRjaGVzID8gbWF0Y2hlc1swXSA6ICcnO1xuXG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoLyhAfFxcLykvZywgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmlnZ2VyUGx1Z2luRXZlbnQocGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbiwgcmVzdWx0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwbHVnaW5JbmZvID0gcGljayhwbHVnaW4sIFtcbiAgICAgICduYW1lJyxcbiAgICAgICdjb250ZXh0UGF0aCcsXG4gICAgICAnbW9kdWxlJyxcbiAgICAgICd2ZXJzaW9uJyxcbiAgICAgICd0eXBlJyxcbiAgICAgICdpZCdcbiAgICBdIHNhdGlzZmllcyAoa2V5b2YgQXBwbGljYXRpb25QbHVnaW4pW10pO1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU0uQVBQTElDQVRJT05TLkVWRU5UUy5JTlNUQUxMRURfUExVR0lOUyxcbiAgICAgIHtcbiAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLkFQUExJQ0FUSU9OX1BMVUdJTlMsXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT04sXG4gICAgICAgIC4uLnBsdWdpbkluZm8sXG4gICAgICAgIHRhcmdldEFwcGxpY2F0aW9uTmFtZTogdGhpcy5hcHAubmFtZSxcbiAgICAgICAgdGFyZ2V0QXBwbGljYXRpb25Db250ZXh0UGF0aDogdGhpcy5hcHAuY29udGV4dFBhdGhcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPnt7IGFwcCB8IGh1bWFuaXplQXBwTmFtZSB8IGFzeW5jIH19PC9jOHktdGl0bGU+XG5cbjxjOHktYnJlYWRjcnVtYj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInYzh5LWF0b20nXCJcbiAgICBbbGFiZWxdPVwiJ0Vjb3N5c3RlbScgfCB0cmFuc2xhdGVcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidjOHktbW9kdWxlcydcIlxuICAgIFtsYWJlbF09XCInQXBwbGljYXRpb25zJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJ2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi9hcHBsaWNhdGlvbnMnXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2xhYmVsXT1cImFwcCB8IGh1bWFuaXplQXBwTmFtZSB8IGFzeW5jXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSBbbGFiZWxdPVwiJ1BsdWdpbnMnIHwgdHJhbnNsYXRlXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgKm5nSWY9XCIhKGlzU3RhbmRhcmQkIHwgYXN5bmMpXCJcbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICB0aXRsZT1cInt7ICdSZXNldCB0byBkZWZhdWx0IHBsdWdpbnMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICBbbmdDbGFzc109XCJ7ICdidG4tcGVuZGluZyc6IGlzTG9hZGluZyB9XCJcbiAgICAoY2xpY2spPVwicmVzZXRUb0RlZmF1bHQoKVwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwidW5kb1wiPjwvaT5cbiAgICB7eyAnUmVzZXQgdG8gZGVmYXVsdCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIHRpdGxlPVwie3sgJ0luc3RhbGwgcGx1Z2lucycgfCB0cmFuc2xhdGUgfX1cIlxuICAgIChjbGljayk9XCJpbnN0YWxsUGx1Z2lucygpXCJcbiAgICBbbmdDbGFzc109XCJ7ICdidG4tcGVuZGluZyc6IGlzTG9hZGluZyB9XCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICB7eyAnSW5zdGFsbCBwbHVnaW5zJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9ycGhhbmVkUGx1Z2lucyQgfCBhc3luYyBhcyBvcnBoYW5lZFBsdWdpbnNcIj5cbiAgPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgICAqbmdJZj1cIm9ycGhhbmVkUGx1Z2lucz8ubGVuZ3RoXCJcbiAgICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgICAgdGl0bGU9XCJ7eyAnQ2xlYW4gdXAgb3JwaGFuZWQgcGx1Z2lucycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgKGNsaWNrKT1cImNsZWFudXBPcnBoYW5lZFBsdWdpbnMob3JwaGFuZWRQbHVnaW5zKVwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdidG4tcGVuZGluZyc6IGlzTG9hZGluZyB9XCJcbiAgICA+XG4gICAgICA8aSBjOHlJY29uPVwiZXJhc2VcIj48L2k+XG4gICAgICB7eyAnQ2xlYW4gdXAgb3JwaGFuZWQgcGx1Z2lucycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuPC9uZy1jb250YWluZXI+XG5cbjxkaXYgY2xhc3M9XCJjb250ZW50LWZ1bGxwYWdlIGQtZmxleCBkLWNvbCBib3JkZXItdG9wXCI+XG4gIDxjOHktZGF0YS1ncmlkXG4gICAgY2xhc3M9XCJkLWNvbnRlbnRzXCJcbiAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgIFtsb2FkTW9yZUl0ZW1zTGFiZWxdPVwibG9hZE1vcmVJdGVtc0xhYmVsXCJcbiAgICBbbG9hZGluZ0l0ZW1zTGFiZWxdPVwibG9hZGluZ0l0ZW1zTGFiZWxcIlxuICAgIFtkaXNwbGF5T3B0aW9uc109XCJkaXNwbGF5T3B0aW9uc1wiXG4gICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgW3Jvd3NdPVwiaW5zdGFsbGVkUGx1Z2lucyQgfCBhc3luY1wiXG4gICAgW3BhZ2luYXRpb25dPVwicGFnaW5hdGlvblwiXG4gICAgW3NlbGVjdGFibGVdPVwidHJ1ZVwiXG4gICAgW2FjdGlvbkNvbnRyb2xzXT1cImFjdGlvbkNvbnRyb2xzXCJcbiAgICBbYnVsa0FjdGlvbkNvbnRyb2xzXT1cImJ1bGtBY3Rpb25Db250cm9sc1wiXG4gICAgW2hlYWRlckFjdGlvbkNvbnRyb2xzXT1cImhlYWRlckFjdGlvbkNvbnRyb2xzXCJcbiAgICAob25SZWxvYWQpPVwicmVmcmVzaCgpXCJcbiAgPlxuICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgIFtpY29uXT1cInN0YXRzPy5zaXplID4gMCA/ICdzZWFyY2gnIDogJ3BsdWdpbidcIlxuICAgICAgW3RpdGxlXT1cInN0YXRzPy5zaXplID4gMCA/IChub1Jlc3VsdHNNZXNzYWdlIHwgdHJhbnNsYXRlKSA6IChub0RhdGFNZXNzYWdlIHwgdHJhbnNsYXRlKVwiXG4gICAgICBbc3VidGl0bGVdPVwic3RhdHM/LnNpemUgPiAwID8gKG5vUmVzdWx0c1N1YnRpdGxlIHwgdHJhbnNsYXRlKSA6IChub0RhdGFTdWJ0aXRsZSB8IHRyYW5zbGF0ZSlcIlxuICAgICAgKmVtcHR5U3RhdGVDb250ZXh0PVwibGV0IHN0YXRzXCJcbiAgICAgIFtob3Jpem9udGFsXT1cInN0YXRzPy5zaXplID4gMFwiXG4gICAgPlxuICAgICAgPHAgKm5nSWY9XCJzdGF0cz8uc2l6ZSA9PT0gMFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdJbnN0YWxsIHBsdWdpbnMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAoY2xpY2spPVwiaW5zdGFsbFBsdWdpbnMoKVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnYnRuLXBlbmRpbmcnOiBpc0xvYWRpbmcgfVwiXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgID5cbiAgICAgICAgICBJbnN0YWxsIHBsdWdpbnNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3A+XG4gICAgPC9jOHktdWktZW1wdHktc3RhdGU+XG4gIDwvYzh5LWRhdGEtZ3JpZD5cbjwvZGl2PlxuIl19
|
|
501
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tcGx1Z2lucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vYXBwbGljYXRpb24tcGx1Z2lucy9hcHBsaWNhdGlvbi1wbHVnaW5zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi1wbHVnaW5zL2FwcGxpY2F0aW9uLXBsdWdpbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUVMLFlBQVksRUFFWix1QkFBdUIsRUFHdkIsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUNoQixPQUFPLEVBSVAsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDcEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLDRCQUE0QixFQUM3QixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0YsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNo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QUVPLGtCQUFrQixDQUFDLE1BQXlCLEVBQUUsTUFBYztRQUNsRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzlCLE1BQU07WUFDTixhQUFhO1lBQ2IsUUFBUTtZQUNSLFNBQVM7WUFDVCxNQUFNO1lBQ04sSUFBSTtTQUNpQyxDQUFDLENBQUM7UUFFekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FDaEMsNEJBQTRCLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFDbEU7WUFDRSxTQUFTLEVBQUUsNEJBQTRCLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUI7WUFDbkYsTUFBTTtZQUNOLEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQzFCLEdBQUcsVUFBVTtZQUNiLHFCQUFxQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSTtZQUNwQyw0QkFBNEIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVc7U0FDbkQsQ0FDRixDQUFDO0lBQ0osQ0FBQzsrR0E3bUJVLDJCQUEyQjttR0FBM0IsMkJBQTJCLDZIQUszQixpQkFBaUIsZ0RDNUM5Qiw2bEdBaUdBOzs0RkQxRGEsMkJBQTJCO2tCQUp2QyxTQUFTOytCQUNFLGlCQUFpQjt3UUFPbEIsS0FBSztzQkFBYixLQUFLO2dCQUVOLFFBQVE7c0JBRFAsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMsIElBcHBsaWNhdGlvbiB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwbGljYXRpb25QbHVnaW4sXG4gIEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLFxuICBCdWxrQWN0aW9uQ29udHJvbCxcbiAgQ29sdW1uLFxuICBEYXRhR3JpZENvbXBvbmVudCxcbiAgRGlzcGxheU9wdGlvbnMsXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEhlYWRlckFjdGlvbkNvbnRyb2wsXG4gIFBhZ2luYXRpb24sXG4gIFBsdWdpbnNDb25maWcsXG4gIFBsdWdpbnNTZXJ2aWNlLFxuICBQbHVnaW5zRXhwb3J0U2NvcGVzLFxuICBCb3R0b21EcmF3ZXJTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgRWNvc3lzdGVtU2VydmljZSxcbiAgUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuaW1wb3J0IHsgcGljayB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEluc3RhbGxQbHVnaW5Db21wb25lbnQgfSBmcm9tICcuL2luc3RhbGwtcGx1Z2luLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMYWJlbENlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vbGFiZWwtY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3JwaGFuZWRTdGF0dXNDZWxsUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuL29ycGhhbmVkLXN0YXR1cy1jZWxsLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVcGRhdGVQbHVnaW5PZkFwcENvbXBvbmVudCB9IGZyb20gJy4vdXBkYXRlLXBsdWdpbi1vZi1hcHAvdXBkYXRlLXBsdWdpbi1vZi1hcHAuY29tcG9uZW50JztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUGx1Z2luUmVhZG1lQ29tcG9uZW50IH0gZnJvbSAnLi9hcHBsaWNhdGlvbi1wbHVnaW4tcmVhZG1lLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hcHAtcGx1Z2lucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHBsaWNhdGlvbi1wbHVnaW5zLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvblBsdWdpbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIFBST0RVQ1RfRVhQRVJJRU5DRSA9IFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU07XG4gIENVUlJFTlRfTE9DQVRJT04gPSBsb2NhdGlvbi5ocmVmO1xuXG4gIEBJbnB1dCgpIGFwcElkOiBzdHJpbmcgfCBudW1iZXI7XG4gIEBWaWV3Q2hpbGQoRGF0YUdyaWRDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBkYXRhR3JpZDogRGF0YUdyaWRDb21wb25lbnQ7XG5cbiAgcmVtb3RlUGx1Z2lucyQ6IEJlaGF2aW9yU3ViamVjdDxBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7fSk7XG4gIGFsbEF2YWlsYWJsZVBsdWdpbnMkOiBCZWhhdmlvclN1YmplY3Q8QXBwbGljYXRpb25QbHVnaW5bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgc2VsZlBsdWdpbnMkOiBCZWhhdmlvclN1YmplY3Q8QXBwbGljYXRpb25QbHVnaW5bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcblxuICBpbnN0YWxsZWRQbHVnaW5zJDogT2JzZXJ2YWJsZTxBcHBsaWNhdGlvblBsdWdpbltdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMucmVtb3RlUGx1Z2lucyQucGlwZShtYXAocmVtb3RlcyA9PiBQbHVnaW5zU2VydmljZS5jb252ZXJ0SW5zdGFsbGVkUmVtb3Rlc1RvSWRzKHJlbW90ZXMpKSksXG4gICAgdGhpcy5hbGxBdmFpbGFibGVQbHVnaW5zJFxuICBdKS5waXBlKFxuICAgIG1hcCgoW3JlbW90ZVBsdWdpbnMsIGFsbFBsdWdpbnNdKSA9PiB0aGlzLmdldEluc3RhbGxlZFBsdWdpbnMoYWxsUGx1Z2lucywgcmVtb3RlUGx1Z2lucykpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG4gIG9ycGhhbmVkUGx1Z2lucyQgPSB0aGlzLmluc3RhbGxlZFBsdWdpbnMkLnBpcGUoXG4gICAgbWFwKHBsdWdpbnMgPT4gcGx1Z2lucy5maWx0ZXIocCA9PiBwLnN0YXR1cyA9PT0gQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuT1JQSEFORUQpKVxuICApO1xuICBpc1N0YW5kYXJkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaW5zdGFsbGVkUGx1Z2lucyQsIHRoaXMuc2VsZlBsdWdpbnMkXSkucGlwZShcbiAgICBtYXAoKFtpbnN0YWxsZWRQbHVnaW5zLCBzZWxmUGx1Z2luc10pID0+IHtcbiAgICAgIGNvbnN0IG1hbmlmZXN0UmVtb3RlcyA9IHRoaXMuYXBwPy5tYW5pZmVzdD8ucmVtb3RlcyB8fCB7fTtcbiAgICAgIC8vIGVuc3VyZSB0aGF0IGV2ZXJ5IGluc3RhbGxlZCBwbHVnaW4gaXMgYSBzZWxmIHBsdWdpbiBvciBhIHBsdWdpbiBmcm9tIHRoZSBtYW5pZmVzdFxuICAgICAgY29uc3QgYWxsSW5zdGFsbGVkUGx1Z2luc0FyZVNlbGYgPSBpbnN0YWxsZWRQbHVnaW5zLmV2ZXJ5KFxuICAgICAgICBwID0+XG4gICAgICAgICAgc2VsZlBsdWdpbnMuc29tZShzZWxmUGx1Z2luID0+IHNlbGZQbHVnaW4uaWQgPT09IHAuaWQpIHx8XG4gICAgICAgICAgKEFycmF5LmlzQXJyYXkobWFuaWZlc3RSZW1vdGVzW3AuY29udGV4dFBhdGhdKSAmJlxuICAgICAgICAgICAgbWFuaWZlc3RSZW1vdGVzW3AuY29udGV4dFBhdGhdLmluY2x1ZGVzKHAubW9kdWxlKSlcbiAgICAgICk7XG5cbiAgICAgIC8vIGVuc3VyZSB0aGF0IGV2ZXJ5IHNlbGYgcGx1Z2luIGlzIGluc3RhbGxlZFxuICAgICAgY29uc3QgYWxsU2VsZlBsdWdpbnNBcmVJbnN0YWxsZWQgPSBzZWxmUGx1Z2lucy5ldmVyeShzZWxmUGx1Z2luID0+XG4gICAgICAgIGluc3RhbGxlZFBsdWdpbnMuc29tZShwID0+IHAuaWQgPT09IHNlbGZQbHVnaW4uaWQpXG4gICAgICApO1xuICAgICAgY29uc3QgY29uZmlnUmVtb3RlcyA9IHRoaXMuYXBwPy5jb25maWc/LnJlbW90ZXMgfHwge307XG5cbiAgICAgIC8vIGVuc3VyZSB0aGF0IGV2ZXJ5IHJlbW90ZSBmcm9tIHRoZSBtYW5pZmVzdCBpcyBpbiB0aGUgY29uZmlnXG4gICAgICAvLyBpZiBubyBjb25maWcgZXhpc3RzIHdlIGFyZSBhbHNvIGFsbCBnb29kXG4gICAgICBjb25zdCBldmVyeVJlbW90ZUZyb21NYW5pZmVzdElzSW5Db25maWcgPVxuICAgICAgICAhdGhpcy5hcHA/LmNvbmZpZz8ucmVtb3RlcyB8fFxuICAgICAgICBPYmplY3Qua2V5cyhtYW5pZmVzdFJlbW90ZXMpLmV2ZXJ5KFxuICAgICAgICAgIGNvbnRleHRQYXRoID0+XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGNvbmZpZ1JlbW90ZXNbY29udGV4dFBhdGhdKSAmJlxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheShtYW5pZmVzdFJlbW90ZXNbY29udGV4dFBhdGhdKSAmJlxuICAgICAgICAgICAgbWFuaWZlc3RSZW1vdGVzW2NvbnRleHRQYXRoXS5ldmVyeShtb2R1bGUgPT5cbiAgICAgICAgICAgICAgY29uZmlnUmVtb3Rlc1tjb250ZXh0UGF0aF0uaW5jbHVkZXMobW9kdWxlKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBhbGxJbnN0YWxsZWRQbHVnaW5zQXJlU2VsZiAmJlxuICAgICAgICBhbGxTZWxmUGx1Z2luc0FyZUluc3RhbGxlZCAmJlxuICAgICAgICBldmVyeVJlbW90ZUZyb21NYW5pZmVzdElzSW5Db25maWdcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcbiAgYXBwOiBJQXBwbGljYXRpb247XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgdGl0bGU6IHN0cmluZyA9IGdldHRleHQoJ0luc3RhbGxlZCBwbHVnaW5zJyk7XG4gIGxvYWRNb3JlSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZCBtb3JlIHBhY2thZ2VzJyk7XG4gIGxvYWRpbmdJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkaW5nIHBhY2thZ2Vz4oCmJyk7XG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW10gPSB0aGlzLmdldEFjdGlvbkNvbnRyb2xzKCk7XG4gIGJ1bGtBY3Rpb25Db250cm9sczogQnVsa0FjdGlvbkNvbnRyb2xbXSA9IHRoaXMuZ2V0QnVsa0FjdGlvbkNvbnRyb2xzKCk7XG4gIGhlYWRlckFjdGlvbkNvbnRyb2xzOiBIZWFkZXJBY3Rpb25Db250cm9sW10gPSBbXTtcbiAgbm9SZXN1bHRzTWVzc2FnZSA9IGdldHRleHQoJ05vIHBsdWdpbnMgdG8gZGlzcGxheS4nKTtcbiAgbm9EYXRhTWVzc2FnZSA9IGdldHRleHQoJ05vIHBsdWdpbnMgaW5zdGFsbGVkLicpO1xuICBub1Jlc3VsdHNTdWJ0aXRsZSA9IGdldHRleHQoJ1JlZmluZSB5b3VyIHNlYXJjaCB0ZXJtcyBvciBjaGVjayB5b3VyIHNwZWxsaW5nLicpO1xuICBub0RhdGFTdWJ0aXRsZSA9IGdldHRleHQoXCJUaGlzIGFwcGxpY2F0aW9uIGRvZXNuJ3QgaGF2ZSBhbnkgcGx1Z2luLiBDbGljayBiZWxvdyB0byBpbnN0YWxsLlwiKTtcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHtcbiAgICBwYWdlU2l6ZTogMTAsXG4gICAgY3VycmVudFBhZ2U6IDFcbiAgfTtcbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICBzdHJpcGVkOiB0cnVlLFxuICAgIGZpbHRlcjogdHJ1ZSxcbiAgICBncmlkSGVhZGVyOiB0cnVlLFxuICAgIGhvdmVyOiB0cnVlXG4gIH07XG4gIGNvbHVtbnM6IENvbHVtbltdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnUGx1Z2luIG5hbWUnKSxcbiAgICAgIHBhdGg6ICduYW1lJyxcbiAgICAgIGZpbHRlcmFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdWZXJzaW9uJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnVmVyc2lvbicpLFxuICAgICAgcGF0aDogJ3ZlcnNpb24nLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdUYWcnLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdUYWdgbm91bmAnKSxcbiAgICAgIHBhdGg6ICdpbnN0YWxsZWRWaWFUYWcnLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICBjZWxsUmVuZGVyZXJDb21wb25lbnQ6IExhYmVsQ2VsbFJlbmRlcmVyQ29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZGVzY3JpcHRpb24nLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdEZXNjcmlwdGlvbicpLFxuICAgICAgcGF0aDogJ2Rlc2NyaXB0aW9uJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgY2VsbENTU0NsYXNzTmFtZTogJ3NtYWxsJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2NvbnRleHRQYXRoJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnU291cmNlJyksXG4gICAgICBwYXRoOiAnY29udGV4dFBhdGgnLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICBjZWxsUmVuZGVyZXJDb21wb25lbnQ6IExhYmVsQ2VsbFJlbmRlcmVyQ29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2NvcGUnLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdTY29wZScpLFxuICAgICAgcGF0aDogJ3Njb3BlJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBjZWxsUmVuZGVyZXJDb21wb25lbnQ6IExhYmVsQ2VsbFJlbmRlcmVyQ29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc3RhdHVzJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnU3RhdHVzJyksXG4gICAgICBwYXRoOiAnc3RhdHVzJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgY2VsbFJlbmRlcmVyQ29tcG9uZW50OiBPcnBoYW5lZFN0YXR1c0NlbGxSZW5kZXJlckNvbXBvbmVudFxuICAgIH1cbiAgXTtcbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBlY29zeXN0ZW1TZXJ2aWNlOiBFY29zeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luc1NlcnZpY2U6IFBsdWdpbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYm90dG9tRHJhd2VyU2VydmljZTogQm90dG9tRHJhd2VyU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hZGRJbnN0YWxsQnV0dG9uVG9IZWFkZXJBY3Rpb25Db250cm9scygpO1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWREYXRhKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uTU8oKTtcbiAgICBhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uTUZSZW1vdGVzKHRoaXMuYXBwKTtcbiAgICBhd2FpdCB0aGlzLmdldEFsbEFwcGxpY2F0aW9uc01GRXhwb3J0cyh0aGlzLmFwcCk7XG4gICAgYXdhaXQgdGhpcy5nZXRBbGxTZWxmTUZFeHBvcnRzKHRoaXMuYXBwKTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcmVzZXRUb0RlZmF1bHQoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMucGx1Z2luc1NlcnZpY2UucmVzZXRSZW1vdGVzKHRoaXMuYXBwKTtcbiAgICBhd2FpdCB0aGlzLmxvYWREYXRhKCk7XG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdUaGUgYXBwbGljYXRpb24gd2FzIHJlc2V0IHRvIGl0cyBkZWZhdWx0IHBsdWdpbnMuJykpO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbFBsdWdpbnMoKSB7XG4gICAgbGV0IGN1cnJlbnRQbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luIHwgbnVsbCA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTS5BUFBMSUNBVElPTlMuRVZFTlRTLklOU1RBTExFRF9QTFVHSU5TLFxuICAgICAgICB7XG4gICAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLkFQUExJQ0FUSU9OX1BMVUdJTlMsXG4gICAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5BQ1RJT05TLklOU1RBTExfUExVR0lOU19JTklUSUFURUQsXG4gICAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT04sXG4gICAgICAgICAgdGFyZ2V0QXBwbGljYXRpb25OYW1lOiB0aGlzLmFwcC5uYW1lLFxuICAgICAgICAgIHRhcmdldEFwcGxpY2F0aW9uQ29udGV4dFBhdGg6IHRoaXMuYXBwLmNvbnRleHRQYXRoXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGRyYXdlciA9IHRoaXMuYm90dG9tRHJhd2VyU2VydmljZS5vcGVuRHJhd2VyPEluc3RhbGxQbHVnaW5Db21wb25lbnQ+KFxuICAgICAgICBJbnN0YWxsUGx1Z2luQ29tcG9uZW50LFxuICAgICAgICB7XG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiB0aGlzLmdldEluc3RhbGxNb2RhbEluaXRTdGF0ZSgpLFxuICAgICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiB0cnVlXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHBsdWdpbnNUb0FkZDogQXBwbGljYXRpb25QbHVnaW5bXSA9IGF3YWl0IGRyYXdlci5pbnN0YW5jZS5yZXN1bHQ7XG5cbiAgICAgIGNvbnN0IGlzQXJjaGl2ZWQgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudmVyaWZ5QXJjaGl2ZWQocGx1Z2luc1RvQWRkKTtcbiAgICAgIGlmICghaXNBcmNoaXZlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpY2Vuc2VzVmVyaWZpZWRCeVVzZXIgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudmVyaWZ5TGljZW5zZXMocGx1Z2luc1RvQWRkKTtcbiAgICAgIGlmICghbGljZW5zZXNWZXJpZmllZEJ5VXNlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB2ZXJpZnlWZXJzaW9uQ29tcGF0aWJpbGl0eSA9XG4gICAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS52ZXJpZnlQbHVnaW5WZXJzaW9uc0NvbXBhdGliaWxpdHkocGx1Z2luc1RvQWRkLCB0aGlzLmFwcCk7XG5cbiAgICAgIGlmICghdmVyaWZ5VmVyc2lvbkNvbXBhdGliaWxpdHkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVJlbW90ZXNJbnN0YWxsYXRpb24ocGx1Z2luc1RvQWRkKTtcblxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdQbHVnaW5zIGluc3RhbGxlZC4nKSk7XG4gICAgICBwbHVnaW5zVG9BZGQuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgICBjdXJyZW50UGx1Z2luID0gcGx1Z2luO1xuXG4gICAgICAgIHRoaXMudHJpZ2dlclBsdWdpbkV2ZW50KFxuICAgICAgICAgIHBsdWdpbixcbiAgICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlBMVUdJTl9JTlNUQUxMRURcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICAgIHRoaXMudHJpZ2dlclBsdWdpbkV2ZW50KFxuICAgICAgICAgIGN1cnJlbnRQbHVnaW4sXG4gICAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTS5BUFBMSUNBVElPTlMuUkVTVUxUUy5TRVJWRVJfRkFJTFVSRVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVBsdWdpbnMocGx1Z2luczogc3RyaW5nW10pIHtcbiAgICBsZXQgY3VycmVudFBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4gfCBudWxsID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICBjb25zdCBpbnN0YWxsZWRQbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5pbnN0YWxsZWRQbHVnaW5zJCk7XG4gICAgICBjb25zdCBwbHVnaW5zVG9SZW1vdmU6IEFwcGxpY2F0aW9uUGx1Z2luW10gPSBpbnN0YWxsZWRQbHVnaW5zLmZpbHRlcihwID0+XG4gICAgICAgIHBsdWdpbnMuaW5jbHVkZXMocC5pZClcbiAgICAgICk7XG4gICAgICBjb25zdCB1cGRhdGVkUmVtb3RlcyA9IGF3YWl0IHRoaXMucGx1Z2luc1NlcnZpY2UucmVtb3ZlUmVtb3RlcyhcbiAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgIHBsdWdpbnMubWFwKGlkID0+IGluc3RhbGxlZFBsdWdpbnMuZmluZChwID0+IHAuaWQgPT09IGlkKSlcbiAgICAgICk7XG4gICAgICB0aGlzLmVtaXRSZW1vdGVzKHVwZGF0ZWRSZW1vdGVzKTtcblxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0YUdyaWQuY2FuY2VsKCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ1BsdWdpbnMgcmVtb3ZlZC4nKSk7XG5cbiAgICAgIHBsdWdpbnNUb1JlbW92ZS5mb3JFYWNoKHBsdWdpbiA9PiB7XG4gICAgICAgIGN1cnJlbnRQbHVnaW4gPSBwbHVnaW47XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyUGx1Z2luRXZlbnQoXG4gICAgICAgICAgcGx1Z2luLFxuICAgICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU0uQVBQTElDQVRJT05TLlJFU1VMVFMuUExVR0lOX1JFTU9WRURcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICAgIHRoaXMudHJpZ2dlclBsdWdpbkV2ZW50KFxuICAgICAgICAgIGN1cnJlbnRQbHVnaW4sXG4gICAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTS5BUFBMSUNBVElPTlMuUkVTVUxUUy5TRVJWRVJfRkFJTFVSRVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNsZWFudXBPcnBoYW5lZFBsdWdpbnMocGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSkge1xuICAgIGNvbnN0IHBsdWdpbklkcyA9IHBsdWdpbnMubWFwKHAgPT4gcC5pZCk7XG4gICAgYXdhaXQgdGhpcy5yZW1vdmVQbHVnaW5zKHBsdWdpbklkcyk7XG4gIH1cblxuICBnZXRBY3Rpb25Db250cm9scygpOiBBY3Rpb25Db250cm9sW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdzaG93UmVhZG1lJyxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnU2hvdyByZWFkbWUnKSxcbiAgICAgICAgaWNvbjogJ2RvY3VtZW50cycsXG4gICAgICAgIHNob3dJZjogKHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4pID0+IHtcbiAgICAgICAgICByZXR1cm4gISFwbHVnaW4ucmVhZG1lUGF0aDtcbiAgICAgICAgfSxcbiAgICAgICAgY2FsbGJhY2s6IHBsdWdpbiA9PiB0aGlzLnNob3dQbHVnaW5SZWFkbWUocGx1Z2luIGFzIEFwcGxpY2F0aW9uUGx1Z2luKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2N1c3RvbVVwZGF0ZScsXG4gICAgICAgIHRleHQ6IGdldHRleHQoJ1VwZGF0ZScpLFxuICAgICAgICBpY29uOiAnaW5zdGFsbGluZy11cGRhdGVzJyxcbiAgICAgICAgc2hvd0lmOiBwbHVnaW4gPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwbHVnaW4uc3RhdHVzID09PSBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5PVVREQVRFRCB8fFxuICAgICAgICAgICAgcGx1Z2luLnN0YXR1cyA9PT0gQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuUkVWT0tFRFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGxiYWNrOiBwbHVnaW4gPT4gdGhpcy51cGRhdGVQbHVnaW4odGhpcy5hcHAsIHBsdWdpbiBhcyBBcHBsaWNhdGlvblBsdWdpbilcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdjdXN0b21Eb3duZ3JhZGUnLFxuICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdEb3duZ3JhZGUnKSxcbiAgICAgICAgaWNvbjogJ2luc3RhbGxpbmctdXBkYXRlcycsXG4gICAgICAgIHNob3dJZjogKHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4pID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwbHVnaW4uc2NvcGUgPT09IFBsdWdpbnNFeHBvcnRTY29wZXMuU0VMRiB8fFxuICAgICAgICAgICAgcGx1Z2luLnNjb3BlID09PSBQbHVnaW5zRXhwb3J0U2NvcGVzLlNFTEZfT1BUSU9OQUxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHBsdWdpbi5zdGF0dXMgPT09IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLkxBVEVTVDtcbiAgICAgICAgfSxcbiAgICAgICAgY2FsbGJhY2s6IHBsdWdpbiA9PiB0aGlzLnVwZGF0ZVBsdWdpbih0aGlzLmFwcCwgcGx1Z2luIGFzIEFwcGxpY2F0aW9uUGx1Z2luLCB0cnVlKVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBzaG93UGx1Z2luUmVhZG1lKHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4pOiB2b2lkIHtcbiAgICB0aGlzLmJvdHRvbURyYXdlclNlcnZpY2Uub3BlbkRyYXdlcihBcHBsaWNhdGlvblBsdWdpblJlYWRtZUNvbXBvbmVudCwge1xuICAgICAgaW5pdGlhbFN0YXRlOiB7IHBsdWdpbiB9LFxuICAgICAgY2xvc2VPbk5hdmlnYXRpb246IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIGdldEJ1bGtBY3Rpb25Db250cm9scygpOiBCdWxrQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnY3VzdG9tRGVsZXRlJyxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnUmVtb3ZlJyksXG4gICAgICAgIGljb246ICd0cmFzaCcsXG4gICAgICAgIGNhbGxiYWNrOiBwbHVnaW5zID0+IHRoaXMucmVtb3ZlUGx1Z2lucyhwbHVnaW5zKVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBhc3luYyB1cGRhdGVQbHVnaW4oYXBwOiBJQXBwbGljYXRpb24sIHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4sIGRvd25ncmFkZSA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IChcbiAgICAgICAgdGhpcy5ic01vZGFsU2VydmljZS5zaG93KFVwZGF0ZVBsdWdpbk9mQXBwQ29tcG9uZW50LCB7XG4gICAgICAgICAgY2xhc3M6ICdtb2RhbC1tZCcsXG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5OiAnbW9kYWwtYm9keScsXG4gICAgICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBwbHVnaW4sXG4gICAgICAgICAgICBkb3duZ3JhZGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWVcbiAgICAgICAgfSkuY29udGVudCBhcyBVcGRhdGVQbHVnaW5PZkFwcENvbXBvbmVudFxuICAgICAgKS5yZXN1bHQ7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9IGNhdGNoIChlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRJbnN0YWxsQnV0dG9uVG9IZWFkZXJBY3Rpb25Db250cm9scygpIHtcbiAgICBpZiAodGhpcy5hcHBJZCkge1xuICAgICAgdGhpcy5oZWFkZXJBY3Rpb25Db250cm9scyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IGdldHRleHQoJ0luc3RhbGwgcGx1Z2lucycpLFxuICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbGxQbHVnaW5zKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpY29uOiAncGx1cy1jaXJjbGUnLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b20nXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVSZW1vdGVzSW5zdGFsbGF0aW9uKHBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW10pIHtcbiAgICBjb25zdCB1cGRhdGVkUmVtb3RlcyA9IGF3YWl0IHRoaXMucGx1Z2luc1NlcnZpY2UuYWRkUmVtb3Rlcyh0aGlzLmFwcCwgcGx1Z2lucyk7XG4gICAgcmV0dXJuIHRoaXMuZW1pdFJlbW90ZXModXBkYXRlZFJlbW90ZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVtb3RlcyhwbHVnaW5zQ29uZmlnOiBQbHVnaW5zQ29uZmlnKSB7XG4gICAgY29uc3QgeyByZW1vdGVzLCBleGNsdWRlZFJlbW90ZXMgfSA9IHBsdWdpbnNDb25maWc7XG5cbiAgICAvLyBuZWVkZWQgZm9yIGZpcnN0IHRpbWUgYWRkaW5nL3JlbW92aW5nIGEgcGx1Z2luXG4gICAgaWYgKCF0aGlzLmFwcC5jb25maWcpIHtcbiAgICAgIHRoaXMuYXBwLmNvbmZpZyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMuYXBwLmNvbmZpZy5yZW1vdGVzID0gcmVtb3RlcztcbiAgICB0aGlzLmFwcC5jb25maWcuZXhjbHVkZWRSZW1vdGVzID0gZXhjbHVkZWRSZW1vdGVzO1xuICAgIGNvbnN0IGFjdHVhbFJlbW90ZXMgPSB0aGlzLnBsdWdpbnNTZXJ2aWNlLmdldE1GUmVtb3Rlcyh0aGlzLmFwcCk7XG4gICAgdGhpcy5yZW1vdGVQbHVnaW5zJC5uZXh0KGFjdHVhbFJlbW90ZXMpO1xuICAgIHJldHVybiB7IC4uLnRoaXMucmVtb3RlUGx1Z2lucyQudmFsdWUgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0QXBwbGljYXRpb25NTygpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIGxldCBpZCA9IHRoaXMuYXBwSWQ7XG4gICAgaWYgKCFpZCkge1xuICAgICAgY29uc3QgeyBpZDogcm91dGVJZCB9ID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJlbnQuZGF0YS5jb250ZXh0RGF0YTtcbiAgICAgIGlkID0gcm91dGVJZDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5hcHAgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZ2V0QXBwbGljYXRpb24oaWQpO1xuICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICBpZiAoZXIpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFwcDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0QXBwbGljYXRpb25NRkV4cG9ydHMoYXBwOiBJQXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBleHBvcnRzID0gdGhpcy5wbHVnaW5zU2VydmljZS5nZXRNRkV4cG9ydHMoYXBwLCBbXSwgdHJ1ZSk7XG4gICAgcmV0dXJuIGV4cG9ydHM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFwcGxpY2F0aW9uTUZSZW1vdGVzKGFwcDogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgYXBwQ29uZmlnUmVtb3RlcyA9IHRoaXMucGx1Z2luc1NlcnZpY2UuZ2V0TUZSZW1vdGVzKGFwcCk7XG4gICAgdGhpcy5yZW1vdGVQbHVnaW5zJC5uZXh0KGFwcENvbmZpZ1JlbW90ZXMgfHwge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBbGxBcHBsaWNhdGlvbnNNRkV4cG9ydHMoYXBwOiBJQXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBleHBvcnRlZEJ5Q3VycmVudEFwcCA9IGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25NRkV4cG9ydHMoYXBwKTtcbiAgICBjb25zdCBhbGxBcHBzTUZFeHBvcnRzID0gYXdhaXQgdGhpcy5wbHVnaW5zU2VydmljZS5nZXRBbGxNRkV4cG9ydHModHJ1ZSk7XG4gICAgdGhpcy5hbGxBdmFpbGFibGVQbHVnaW5zJC5uZXh0KFsuLi5hbGxBcHBzTUZFeHBvcnRzLCAuLi5leHBvcnRlZEJ5Q3VycmVudEFwcF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBbGxTZWxmTUZFeHBvcnRzKGFwcDogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgZXhwb3J0ZWRCeUN1cnJlbnRBcHAgPSBhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uTUZFeHBvcnRzKGFwcCk7XG4gICAgdGhpcy5zZWxmUGx1Z2lucyQubmV4dChleHBvcnRlZEJ5Q3VycmVudEFwcC5maWx0ZXIoKHsgc2NvcGUgfSkgPT4gc2NvcGUgPT09ICdzZWxmJykpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbnN0YWxsTW9kYWxJbml0U3RhdGUoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGx1Z2lucyQ6IGNvbWJpbmVMYXRlc3QoW3RoaXMuYWxsQXZhaWxhYmxlUGx1Z2lucyQsIHRoaXMuaW5zdGFsbGVkUGx1Z2lucyRdKS5waXBlKFxuICAgICAgICBtYXAoKFthbGxQbHVnaW5zLCBpbnN0YWxsZWRQbHVnaW5zXSkgPT4ge1xuICAgICAgICAgIC8vIHRvIG5vdCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFycmF5IGFuZCBvYmplY3RzIGNvbnRhaW5lZCBpbiBpdFxuICAgICAgICAgIGNvbnN0IGFsbFBsdWdpbnNBc05ld09iamVjdHMgPSBhbGxQbHVnaW5zLm1hcChwID0+ICh7IC4uLnAgfSkpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBwbHVnaW4gb2YgaW5zdGFsbGVkUGx1Z2lucykge1xuICAgICAgICAgICAgbGV0IGluc3RhbGxlZFBsdWdpbiA9IGFsbFBsdWdpbnNBc05ld09iamVjdHMuZmluZChwID0+IHAuaWQgPT09IHBsdWdpbi5pZCk7XG5cbiAgICAgICAgICAgIGlmICghaW5zdGFsbGVkUGx1Z2luICYmIHBsdWdpbi5pbnN0YWxsZWRWaWFUYWcpIHtcbiAgICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2luID0gYWxsUGx1Z2luc0FzTmV3T2JqZWN0cy5maW5kKFxuICAgICAgICAgICAgICAgIHAgPT5cbiAgICAgICAgICAgICAgICAgIHAuY29udGV4dFBhdGggPT09IHBsdWdpbi5jb250ZXh0UGF0aCAmJlxuICAgICAgICAgICAgICAgICAgcC5tb2R1bGUgPT09IHBsdWdpbi5tb2R1bGUgJiZcbiAgICAgICAgICAgICAgICAgIHAudGFncz8uaW5jbHVkZXMocGx1Z2luLmluc3RhbGxlZFZpYVRhZyBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbnN0YWxsZWRQbHVnaW4pIHtcbiAgICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2luLmluc3RhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBhbGxQbHVnaW5zQXNOZXdPYmplY3RzLm1hcChwID0+ICh7IC4uLnAsIGluc3RhbGxlZDogISFwLmluc3RhbGxlZCB9KSk7XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldE9ycGhhbmVkUGx1Z2lucyhcbiAgICBvcnBoYW5lZFBsdWdpbklkczogc3RyaW5nW10sXG4gICAgYWxsUGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXVxuICApOiBBcHBsaWNhdGlvblBsdWdpbltdIHtcbiAgICBjb25zdCBvcnBoYW5lZFBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW10gPSBvcnBoYW5lZFBsdWdpbklkcy5tYXAocCA9PiB0aGlzLmV4dHJhY3REZXRhaWxzKHApKTtcbiAgICBjb25zdCBvcnBoYW5lZFBsdWdpbnNVcGRhdGVkID0gb3JwaGFuZWRQbHVnaW5zLm1hcChwID0+IHtcbiAgICAgIGNvbnN0IHBsdWdpbldpdGhNYXRjaGluZ1RhZyA9IGFsbFBsdWdpbnMuZmluZChcbiAgICAgICAgdG1wID0+XG4gICAgICAgICAgdG1wLmNvbnRleHRQYXRoID09PSBwLmNvbnRleHRQYXRoICYmXG4gICAgICAgICAgdG1wLm1vZHVsZSA9PT0gcC5tb2R1bGUgJiZcbiAgICAgICAgICB0bXAudGFncz8uaW5jbHVkZXMocC52ZXJzaW9uIHx8ICdsYXRlc3QnKVxuICAgICAgKTtcbiAgICAgIGlmIChwbHVnaW5XaXRoTWF0Y2hpbmdUYWcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wbHVnaW5XaXRoTWF0Y2hpbmdUYWcsXG4gICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgc3RhdHVzOiBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5BVVRPLFxuICAgICAgICAgIGluc3RhbGxlZFZpYVRhZzogcC52ZXJzaW9uIHx8ICdsYXRlc3QnXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwbHVnaW5JbkRpZmZlcmVudFZlcnNpb24gPSBhbGxQbHVnaW5zLmZpbmQoXG4gICAgICAgIHRtcCA9PiB0bXAuY29udGV4dFBhdGggPT09IHAuY29udGV4dFBhdGggJiYgdG1wLm1vZHVsZSA9PT0gcC5tb2R1bGVcbiAgICAgICk7XG4gICAgICBpZiAocGx1Z2luSW5EaWZmZXJlbnRWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucGx1Z2luSW5EaWZmZXJlbnRWZXJzaW9uLFxuICAgICAgICAgIHZlcnNpb246IHAudmVyc2lvbixcbiAgICAgICAgICBpZDogcC5pZCxcbiAgICAgICAgICBzdGF0dXM6IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLk9VVERBVEVEXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gcDtcbiAgICB9KTtcblxuICAgIHJldHVybiBvcnBoYW5lZFBsdWdpbnNVcGRhdGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzcGxpdE9ycGhhbmVkUGx1Z2luc0ludG9PcnBoYW5lZEFuZFJldm9rZWRQbHVnaW5zKFxuICAgIGFsbFBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW10sXG4gICAgb3JwaGFuZWRQbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdXG4gICkge1xuICAgIGNvbnN0IHJldm9rZWRQbHVnaW5zID0gbmV3IEFycmF5PEFwcGxpY2F0aW9uUGx1Z2luPigpO1xuICAgIGNvbnN0IGFjdHVhbGx5T3JwaGFuZWRQbHVnaW5zID0gbmV3IEFycmF5PEFwcGxpY2F0aW9uUGx1Z2luPigpO1xuXG4gICAgZm9yIChjb25zdCBwbHVnaW4gb2Ygb3JwaGFuZWRQbHVnaW5zKSB7XG4gICAgICBjb25zdCBmb3VuZEZhbWlsaWFyUGx1Z2luID0gYWxsUGx1Z2lucy5maW5kKFxuICAgICAgICBwbHVnaW4xID0+IHBsdWdpbi5jb250ZXh0UGF0aCA9PT0gcGx1Z2luMS5jb250ZXh0UGF0aCAmJiBwbHVnaW4ubW9kdWxlID09PSBwbHVnaW4xLm1vZHVsZVxuICAgICAgKTtcbiAgICAgIGlmIChmb3VuZEZhbWlsaWFyUGx1Z2luKSB7XG4gICAgICAgIHJldm9rZWRQbHVnaW5zLnB1c2goXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgZm91bmRGYW1pbGlhclBsdWdpbiwgcGx1Z2luLCB7XG4gICAgICAgICAgICBzdGF0dXM6IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLlJFVk9LRURcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsbHlPcnBoYW5lZFBsdWdpbnMucHVzaChwbHVnaW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHJldm9rZWRQbHVnaW5zLCBhY3R1YWxseU9ycGhhbmVkUGx1Z2lucyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbnN0YWxsZWRQbHVnaW5zKFxuICAgIGFsbFBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW10sXG4gICAgcmVtb3RlUGx1Z2luczogc3RyaW5nW11cbiAgKTogQXBwbGljYXRpb25QbHVnaW5bXSB7XG4gICAgY29uc3QgYXZhaWxhYmxlUGx1Z2lucyA9IGFsbFBsdWdpbnNcbiAgICAgIC5maWx0ZXIocGx1Z2luID0+IHJlbW90ZVBsdWdpbnMuaW5jbHVkZXMocGx1Z2luLmlkKSlcbiAgICAgIC5tYXAocGx1Z2luID0+XG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGx1Z2luLCB7XG4gICAgICAgICAgc3RhdHVzOiBwbHVnaW4udGFncz8uaW5jbHVkZXMoJ2xhdGVzdCcpXG4gICAgICAgICAgICA/IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLkxBVEVTVFxuICAgICAgICAgICAgOiBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5PVVREQVRFRFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICBjb25zdCBvcnBoYW5lZFBsdWdpbklkcyA9IHJlbW90ZVBsdWdpbnMuZmlsdGVyKFxuICAgICAgciA9PiAhYXZhaWxhYmxlUGx1Z2lucy5maW5kKHBsdWdpbiA9PiBwbHVnaW4uaWQgPT09IHIpXG4gICAgKTtcbiAgICBjb25zdCBvcnBoYW5lZFBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW10gPSB0aGlzLmdldE9ycGhhbmVkUGx1Z2lucyhcbiAgICAgIG9ycGhhbmVkUGx1Z2luSWRzLFxuICAgICAgYWxsUGx1Z2luc1xuICAgICk7XG5cbiAgICBjb25zdCBub3RBY3R1YWxseU9ycGhhbmVkUGx1Z2lucyA9IG9ycGhhbmVkUGx1Z2lucy5maWx0ZXIoXG4gICAgICBwID0+IHAuc3RhdHVzID09PSBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5BVVRPXG4gICAgKTtcblxuICAgIGNvbnN0IG9ycGhhbmVkT3JSZXZva2VkUGx1Z2lucyA9IG9ycGhhbmVkUGx1Z2lucy5maWx0ZXIoXG4gICAgICBwID0+IHAuc3RhdHVzICE9PSBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5BVVRPXG4gICAgKTtcblxuICAgIGNvbnN0IHsgYWN0dWFsbHlPcnBoYW5lZFBsdWdpbnMsIHJldm9rZWRQbHVnaW5zIH0gPVxuICAgICAgdGhpcy5zcGxpdE9ycGhhbmVkUGx1Z2luc0ludG9PcnBoYW5lZEFuZFJldm9rZWRQbHVnaW5zKGFsbFBsdWdpbnMsIG9ycGhhbmVkT3JSZXZva2VkUGx1Z2lucyk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgLi4uYXZhaWxhYmxlUGx1Z2lucyxcbiAgICAgIC4uLm5vdEFjdHVhbGx5T3JwaGFuZWRQbHVnaW5zLFxuICAgICAgLi4ucmV2b2tlZFBsdWdpbnMsXG4gICAgICAuLi5hY3R1YWxseU9ycGhhbmVkUGx1Z2luc1xuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3REZXRhaWxzKHBsdWdpbklkOiBzdHJpbmcpOiBBcHBsaWNhdGlvblBsdWdpbiB7XG4gICAgY29uc3QgY29udGV4dFBhdGggPSB0aGlzLmdldFN0cmluZ01hdGNoaW5nUmVnZXgocGx1Z2luSWQsIC9eW15AXSooQHxcXC8pLyk7XG4gICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuZ2V0U3RyaW5nTWF0Y2hpbmdSZWdleChwbHVnaW5JZCwgL0AuKlxcLy8pO1xuICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMuZ2V0U3RyaW5nTWF0Y2hpbmdSZWdleChwbHVnaW5JZCwgL1xcLy4qJC8pO1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlID0gZ2V0dGV4dCgndW5hdmFpbGFibGVgcGx1Z2luYCcpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcGx1Z2luSWQsXG4gICAgICBpZExhdGVzdDogYCR7Y29udGV4dFBhdGh9LyR7bW9kdWxlfWAsXG4gICAgICBwYXRoOiAnJyxcbiAgICAgIG1vZHVsZSxcbiAgICAgIG5hbWU6IG1vZHVsZSxcbiAgICAgIHN0YXR1czogQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuT1JQSEFORUQsXG4gICAgICBjb250ZXh0UGF0aDogY29udGV4dFBhdGgsXG4gICAgICBkZXNjcmlwdGlvbjogdW5hdmFpbGFibGUsXG4gICAgICB2ZXJzaW9uOiB2ZXJzaW9uXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RyaW5nTWF0Y2hpbmdSZWdleChcbiAgICBzdHI6IHN0cmluZyxcbiAgICByZWdleDogeyBbU3ltYm9sLm1hdGNoXShzdHJpbmc6IHN0cmluZyk6IFJlZ0V4cE1hdGNoQXJyYXkgfCBudWxsIH1cbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXRjaGVzID0gc3RyLm1hdGNoKHJlZ2V4KTtcbiAgICBjb25zdCB2YWx1ZSA9IG1hdGNoZXMgPyBtYXRjaGVzWzBdIDogJyc7XG5cbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvKEB8XFwvKS9nLCAnJyk7XG4gIH1cblxuICBwcml2YXRlIHRyaWdnZXJQbHVnaW5FdmVudChwbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luLCByZXN1bHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHBsdWdpbkluZm8gPSBwaWNrKHBsdWdpbiwgW1xuICAgICAgJ25hbWUnLFxuICAgICAgJ2NvbnRleHRQYXRoJyxcbiAgICAgICdtb2R1bGUnLFxuICAgICAgJ3ZlcnNpb24nLFxuICAgICAgJ3R5cGUnLFxuICAgICAgJ2lkJ1xuICAgIF0gc2F0aXNmaWVzIChrZXlvZiBBcHBsaWNhdGlvblBsdWdpbilbXSk7XG5cbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFxuICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTS5BUFBMSUNBVElPTlMuRVZFTlRTLklOU1RBTExFRF9QTFVHSU5TLFxuICAgICAge1xuICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU0uQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuQVBQTElDQVRJT05fUExVR0lOUyxcbiAgICAgICAgcmVzdWx0LFxuICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTixcbiAgICAgICAgLi4ucGx1Z2luSW5mbyxcbiAgICAgICAgdGFyZ2V0QXBwbGljYXRpb25OYW1lOiB0aGlzLmFwcC5uYW1lLFxuICAgICAgICB0YXJnZXRBcHBsaWNhdGlvbkNvbnRleHRQYXRoOiB0aGlzLmFwcC5jb250ZXh0UGF0aFxuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiIsIjxjOHktdGl0bGU+e3sgYXBwIHwgaHVtYW5pemVBcHBOYW1lIHwgYXN5bmMgfX08L2M4eS10aXRsZT5cblxuPGM4eS1icmVhZGNydW1iPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidjOHktYXRvbSdcIlxuICAgIFtsYWJlbF09XCInRWNvc3lzdGVtJyB8IHRyYW5zbGF0ZVwiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ2M4eS1tb2R1bGVzJ1wiXG4gICAgW2xhYmVsXT1cIidBcHBsaWNhdGlvbnMnIHwgdHJhbnNsYXRlXCJcbiAgICBbcGF0aF09XCInZWNvc3lzdGVtL2FwcGxpY2F0aW9uL2FwcGxpY2F0aW9ucydcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSBbbGFiZWxdPVwiYXBwIHwgaHVtYW5pemVBcHBOYW1lIHwgYXN5bmNcIj48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtIFtsYWJlbF09XCInUGx1Z2lucycgfCB0cmFuc2xhdGVcIj48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICAqbmdJZj1cIiEoaXNTdGFuZGFyZCQgfCBhc3luYylcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIHRpdGxlPVwie3sgJ1Jlc2V0IHRvIGRlZmF1bHQgcGx1Z2lucycgfCB0cmFuc2xhdGUgfX1cIlxuICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1wZW5kaW5nJzogaXNMb2FkaW5nIH1cIlxuICAgIChjbGljayk9XCJyZXNldFRvRGVmYXVsdCgpXCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJ1bmRvXCI+PC9pPlxuICAgIHt7ICdSZXNldCB0byBkZWZhdWx0JyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7eyAnSW5zdGFsbCBwbHVnaW5zJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgKGNsaWNrKT1cImluc3RhbGxQbHVnaW5zKClcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1wZW5kaW5nJzogaXNMb2FkaW5nIH1cIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCI+PC9pPlxuICAgIHt7ICdJbnN0YWxsIHBsdWdpbnMnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwib3JwaGFuZWRQbHVnaW5zJCB8IGFzeW5jIGFzIG9ycGhhbmVkUGx1Z2luc1wiPlxuICA8Yzh5LWFjdGlvbi1iYXItaXRlbVxuICAgICpuZ0lmPVwib3JwaGFuZWRQbHVnaW5zPy5sZW5ndGhcIlxuICAgIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgICB0aXRsZT1cInt7ICdDbGVhbiB1cCBvcnBoYW5lZCBwbHVnaW5zJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAoY2xpY2spPVwiY2xlYW51cE9ycGhhbmVkUGx1Z2lucyhvcnBoYW5lZFBsdWdpbnMpXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1wZW5kaW5nJzogaXNMb2FkaW5nIH1cIlxuICAgID5cbiAgICAgIDxpIGM4eUljb249XCJlcmFzZVwiPjwvaT5cbiAgICAgIHt7ICdDbGVhbiB1cCBvcnBoYW5lZCBwbHVnaW5zJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG48L25nLWNvbnRhaW5lcj5cblxuPGRpdiBjbGFzcz1cImNvbnRlbnQtZnVsbHBhZ2UgZC1mbGV4IGQtY29sIGJvcmRlci10b3BcIj5cbiAgPGM4eS1kYXRhLWdyaWRcbiAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgW2xvYWRNb3JlSXRlbXNMYWJlbF09XCJsb2FkTW9yZUl0ZW1zTGFiZWxcIlxuICAgIFtsb2FkaW5nSXRlbXNMYWJlbF09XCJsb2FkaW5nSXRlbXNMYWJlbFwiXG4gICAgW2Rpc3BsYXlPcHRpb25zXT1cImRpc3BsYXlPcHRpb25zXCJcbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICBbcm93c109XCJpbnN0YWxsZWRQbHVnaW5zJCB8IGFzeW5jXCJcbiAgICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgICBbc2VsZWN0YWJsZV09XCJ0cnVlXCJcbiAgICBbYWN0aW9uQ29udHJvbHNdPVwiYWN0aW9uQ29udHJvbHNcIlxuICAgIFtidWxrQWN0aW9uQ29udHJvbHNdPVwiYnVsa0FjdGlvbkNvbnRyb2xzXCJcbiAgICBbaGVhZGVyQWN0aW9uQ29udHJvbHNdPVwiaGVhZGVyQWN0aW9uQ29udHJvbHNcIlxuICAgIChvblJlbG9hZCk9XCJyZWZyZXNoKClcIlxuICA+XG4gICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgW2ljb25dPVwic3RhdHM/LnNpemUgPiAwID8gJ3NlYXJjaCcgOiAncGx1Z2luJ1wiXG4gICAgICBbdGl0bGVdPVwic3RhdHM/LnNpemUgPiAwID8gKG5vUmVzdWx0c01lc3NhZ2UgfCB0cmFuc2xhdGUpIDogKG5vRGF0YU1lc3NhZ2UgfCB0cmFuc2xhdGUpXCJcbiAgICAgIFtzdWJ0aXRsZV09XCJzdGF0cz8uc2l6ZSA+IDAgPyAobm9SZXN1bHRzU3VidGl0bGUgfCB0cmFuc2xhdGUpIDogKG5vRGF0YVN1YnRpdGxlIHwgdHJhbnNsYXRlKVwiXG4gICAgICAqZW1wdHlTdGF0ZUNvbnRleHQ9XCJsZXQgc3RhdHNcIlxuICAgICAgW2hvcml6b250YWxdPVwic3RhdHM/LnNpemUgPiAwXCJcbiAgICA+XG4gICAgICA8cCAqbmdJZj1cInN0YXRzPy5zaXplID09PSAwXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIlxuICAgICAgICAgIHRpdGxlPVwie3sgJ0luc3RhbGwgcGx1Z2lucycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIChjbGljayk9XCJpbnN0YWxsUGx1Z2lucygpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdidG4tcGVuZGluZyc6IGlzTG9hZGluZyB9XCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgPlxuICAgICAgICAgIEluc3RhbGwgcGx1Z2luc1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvcD5cbiAgICA8L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgPC9jOHktZGF0YS1ncmlkPlxuPC9kaXY+XG4iXX0=
|
|
@@ -13,6 +13,7 @@ import { LabelCellRendererComponent } from './label-cell-renderer.component';
|
|
|
13
13
|
import { gettext, hookRoute, ViewContext } from '@c8y/ngx-components';
|
|
14
14
|
import { ApplicationPluginsGuard } from './application-plugins.guard';
|
|
15
15
|
import { OnlyLatestFilterComponent } from './only-latest-filter/only-latest-filter.component';
|
|
16
|
+
import { ApplicationPluginReadmeComponent } from './application-plugin-readme.component';
|
|
16
17
|
import * as i0 from "@angular/core";
|
|
17
18
|
export class ApplicationPluginsModule {
|
|
18
19
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApplicationPluginsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
@@ -25,7 +26,8 @@ export class ApplicationPluginsModule {
|
|
|
25
26
|
LabelCellRendererComponent,
|
|
26
27
|
OrphanedStatusCellRendererComponent,
|
|
27
28
|
UpdatePluginOfAppComponent,
|
|
28
|
-
OnlyLatestFilterComponent
|
|
29
|
+
OnlyLatestFilterComponent,
|
|
30
|
+
ApplicationPluginReadmeComponent], imports: [CoreModule, SharedEcosystemModule], exports: [ApplicationPluginsComponent,
|
|
29
31
|
PluginListItemComponent,
|
|
30
32
|
InstallPluginComponent,
|
|
31
33
|
PluginListComponent,
|
|
@@ -64,7 +66,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
64
66
|
LabelCellRendererComponent,
|
|
65
67
|
OrphanedStatusCellRendererComponent,
|
|
66
68
|
UpdatePluginOfAppComponent,
|
|
67
|
-
OnlyLatestFilterComponent
|
|
69
|
+
OnlyLatestFilterComponent,
|
|
70
|
+
ApplicationPluginReadmeComponent
|
|
68
71
|
],
|
|
69
72
|
exports: [
|
|
70
73
|
ApplicationPluginsComponent,
|
|
@@ -94,4 +97,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
94
97
|
]
|
|
95
98
|
}]
|
|
96
99
|
}] });
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tcGx1Z2lucy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vYXBwbGljYXRpb24tcGx1Z2lucy9hcHBsaWNhdGlvbi1wbHVnaW5zLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDaEcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDOUYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBNEN6RixNQUFNLE9BQU8sd0JBQXdCOytHQUF4Qix3QkFBd0I7Z0hBQXhCLHdCQUF3QixpQkF2Q2pDLDJCQUEyQjtZQUMzQix1QkFBdUI7WUFDdkIsc0JBQXNCO1lBQ3RCLG1CQUFtQjtZQUNuQixrQ0FBa0M7WUFDbEMsWUFBWTtZQUNaLDBCQUEwQjtZQUMxQixtQ0FBbUM7WUFDbkMsMEJBQTBCO1lBQzFCLHlCQUF5QjtZQUN6QixnQ0FBZ0MsYUFaeEIsVUFBVSxFQUFFLHFCQUFxQixhQWV6QywyQkFBMkI7WUFDM0IsdUJBQXVCO1lBQ3ZCLHNCQUFzQjtZQUN0QixtQkFBbUI7WUFDbkIsa0NBQWtDO1lBQ2xDLFlBQVk7WUFDWiwwQkFBMEI7WUFDMUIsbUNBQW1DO1lBQ25DLDBCQUEwQjtZQUMxQix5QkFBeUI7Z0hBaUJoQix3QkFBd0IsYUFmeEI7WUFDVCx1QkFBdUI7WUFDdkIsU0FBUyxDQUFDO2dCQUNSO29CQUNFLElBQUksRUFBRSxTQUFTO29CQUNmLFNBQVMsRUFBRSwyQkFBMkI7b0JBQ3RDLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO29CQUN6QixPQUFPLEVBQUUsV0FBVyxDQUFDLFdBQVc7b0JBQ2hDLFFBQVEsRUFBRSxDQUFDO29CQUNYLFdBQVcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO2lCQUN2QzthQUNGLENBQUM7U0FDSCxZQXZDUyxVQUFVLEVBQUUscUJBQXFCOzs0RkF5Q2hDLHdCQUF3QjtrQkExQ3BDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLHFCQUFxQixDQUFDO29CQUM1QyxZQUFZLEVBQUU7d0JBQ1osMkJBQTJCO3dCQUMzQix1QkFBdUI7d0JBQ3ZCLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQixrQ0FBa0M7d0JBQ2xDLFlBQVk7d0JBQ1osMEJBQTBCO3dCQUMxQixtQ0FBbUM7d0JBQ25DLDBCQUEwQjt3QkFDMUIseUJBQXlCO3dCQUN6QixnQ0FBZ0M7cUJBQ2pDO29CQUNELE9BQU8sRUFBRTt3QkFDUCwyQkFBMkI7d0JBQzNCLHVCQUF1Qjt3QkFDdkIsc0JBQXNCO3dCQUN0QixtQkFBbUI7d0JBQ25CLGtDQUFrQzt3QkFDbEMsWUFBWTt3QkFDWiwwQkFBMEI7d0JBQzFCLG1DQUFtQzt3QkFDbkMsMEJBQTBCO3dCQUMxQix5QkFBeUI7cUJBQzFCO29CQUNELFNBQVMsRUFBRTt3QkFDVCx1QkFBdUI7d0JBQ3ZCLFNBQVMsQ0FBQzs0QkFDUjtnQ0FDRSxJQUFJLEVBQUUsU0FBUztnQ0FDZixTQUFTLEVBQUUsMkJBQTJCO2dDQUN0QyxJQUFJLEVBQUUsUUFBUTtnQ0FDZCxLQUFLLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQztnQ0FDekIsT0FBTyxFQUFFLFdBQVcsQ0FBQyxXQUFXO2dDQUNoQyxRQUFRLEVBQUUsQ0FBQztnQ0FDWCxXQUFXLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQzs2QkFDdkM7eUJBQ0YsQ0FBQztxQkFDSDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb3JlTW9kdWxlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBTaGFyZWRFY29zeXN0ZW1Nb2R1bGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25QbHVnaW5zQ29tcG9uZW50IH0gZnJvbSAnLi9hcHBsaWNhdGlvbi1wbHVnaW5zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVcGRhdGVQbHVnaW5PZkFwcENvbXBvbmVudCB9IGZyb20gJy4vdXBkYXRlLXBsdWdpbi1vZi1hcHAvdXBkYXRlLXBsdWdpbi1vZi1hcHAuY29tcG9uZW50JztcbmltcG9ydCB7IEFwcFN0YXRlUGlwZSB9IGZyb20gJy4vYXBwU3RhdGUucGlwZSc7XG5pbXBvcnQgeyBBcHBzVG9VcGRhdGVSZW1vdGVzU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9hcHBzLXRvLXVwZGF0ZS1yZW1vdGVzLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5zdGFsbFBsdWdpbkNvbXBvbmVudCB9IGZyb20gJy4vaW5zdGFsbC1wbHVnaW4uY29tcG9uZW50JztcbmltcG9ydCB7IE9ycGhhbmVkU3RhdHVzQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9vcnBoYW5lZC1zdGF0dXMtY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGx1Z2luTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL3BsdWdpbi1saXN0LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IFBsdWdpbkxpc3RDb21wb25lbnQgfSBmcm9tICcuL3BsdWdpbi1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMYWJlbENlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vbGFiZWwtY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0dGV4dCwgaG9va1JvdXRlLCBWaWV3Q29udGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25QbHVnaW5zR3VhcmQgfSBmcm9tICcuL2FwcGxpY2F0aW9uLXBsdWdpbnMuZ3VhcmQnO1xuaW1wb3J0IHsgT25seUxhdGVzdEZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4vb25seS1sYXRlc3QtZmlsdGVyL29ubHktbGF0ZXN0LWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25QbHVnaW5SZWFkbWVDb21wb25lbnQgfSBmcm9tICcuL2FwcGxpY2F0aW9uLXBsdWdpbi1yZWFkbWUuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvcmVNb2R1bGUsIFNoYXJlZEVjb3N5c3RlbU1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEFwcGxpY2F0aW9uUGx1Z2luc0NvbXBvbmVudCxcbiAgICBQbHVnaW5MaXN0SXRlbUNvbXBvbmVudCxcbiAgICBJbnN0YWxsUGx1Z2luQ29tcG9uZW50LFxuICAgIFBsdWdpbkxpc3RDb21wb25lbnQsXG4gICAgQXBwc1RvVXBkYXRlUmVtb3Rlc1NlbGVjdENvbXBvbmVudCxcbiAgICBBcHBTdGF0ZVBpcGUsXG4gICAgTGFiZWxDZWxsUmVuZGVyZXJDb21wb25lbnQsXG4gICAgT3JwaGFuZWRTdGF0dXNDZWxsUmVuZGVyZXJDb21wb25lbnQsXG4gICAgVXBkYXRlUGx1Z2luT2ZBcHBDb21wb25lbnQsXG4gICAgT25seUxhdGVzdEZpbHRlckNvbXBvbmVudCxcbiAgICBBcHBsaWNhdGlvblBsdWdpblJlYWRtZUNvbXBvbmVudFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgQXBwbGljYXRpb25QbHVnaW5zQ29tcG9uZW50LFxuICAgIFBsdWdpbkxpc3RJdGVtQ29tcG9uZW50LFxuICAgIEluc3RhbGxQbHVnaW5Db21wb25lbnQsXG4gICAgUGx1Z2luTGlzdENvbXBvbmVudCxcbiAgICBBcHBzVG9VcGRhdGVSZW1vdGVzU2VsZWN0Q29tcG9uZW50LFxuICAgIEFwcFN0YXRlUGlwZSxcbiAgICBMYWJlbENlbGxSZW5kZXJlckNvbXBvbmVudCxcbiAgICBPcnBoYW5lZFN0YXR1c0NlbGxSZW5kZXJlckNvbXBvbmVudCxcbiAgICBVcGRhdGVQbHVnaW5PZkFwcENvbXBvbmVudCxcbiAgICBPbmx5TGF0ZXN0RmlsdGVyQ29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIEFwcGxpY2F0aW9uUGx1Z2luc0d1YXJkLFxuICAgIGhvb2tSb3V0ZShbXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICdwbHVnaW5zJyxcbiAgICAgICAgY29tcG9uZW50OiBBcHBsaWNhdGlvblBsdWdpbnNDb21wb25lbnQsXG4gICAgICAgIGljb246ICdwbHVnaW4nLFxuICAgICAgICBsYWJlbDogZ2V0dGV4dCgnUGx1Z2lucycpLFxuICAgICAgICBjb250ZXh0OiBWaWV3Q29udGV4dC5BcHBsaWNhdGlvbixcbiAgICAgICAgcHJpb3JpdHk6IDMsXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbQXBwbGljYXRpb25QbHVnaW5zR3VhcmRdXG4gICAgICB9XG4gICAgXSlcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvblBsdWdpbnNNb2R1bGUge31cbiJdfQ==
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { BottomDrawerRef, PluginsService } from '@c8y/ngx-components';
|
|
2
3
|
import { defaultPackageTypes, EcosystemService } from '@c8y/ngx-components/ecosystem/shared';
|
|
3
|
-
import { BsModalRef } from 'ngx-bootstrap/modal';
|
|
4
4
|
import { BehaviorSubject, map, Observable } from 'rxjs';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "ngx-
|
|
6
|
+
import * as i1 from "@c8y/ngx-components";
|
|
7
7
|
import * as i2 from "@c8y/ngx-components/ecosystem/shared";
|
|
8
|
-
import * as i3 from "@
|
|
9
|
-
import * as i4 from "
|
|
10
|
-
import * as i5 from "./
|
|
11
|
-
import * as i6 from "./only-latest-filter/only-latest-filter.component";
|
|
8
|
+
import * as i3 from "@angular/common";
|
|
9
|
+
import * as i4 from "./plugin-list.component";
|
|
10
|
+
import * as i5 from "./only-latest-filter/only-latest-filter.component";
|
|
12
11
|
export class InstallPluginComponent {
|
|
13
|
-
constructor(
|
|
14
|
-
this.
|
|
12
|
+
constructor(bottomDrawerRef, ecosystemService, pluginsService) {
|
|
13
|
+
this.bottomDrawerRef = bottomDrawerRef;
|
|
15
14
|
this.ecosystemService = ecosystemService;
|
|
15
|
+
this.pluginsService = pluginsService;
|
|
16
16
|
this.filteredPlugins$ = new BehaviorSubject([]);
|
|
17
17
|
this.selectedPlugins = [];
|
|
18
18
|
this.packageTypes = defaultPackageTypes;
|
|
@@ -29,20 +29,26 @@ export class InstallPluginComponent {
|
|
|
29
29
|
})), src => filterPipe(src));
|
|
30
30
|
}
|
|
31
31
|
cancel() {
|
|
32
|
-
this.
|
|
32
|
+
this.bottomDrawerRef.close();
|
|
33
33
|
this._cancel();
|
|
34
34
|
}
|
|
35
35
|
install() {
|
|
36
36
|
this._install(this.selectedPlugins);
|
|
37
|
-
this.
|
|
37
|
+
this.bottomDrawerRef.close();
|
|
38
38
|
}
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
async showPluginOverview(plugin) {
|
|
40
|
+
this.selectedPlugin = plugin;
|
|
41
|
+
const baseUrl = `/apps/${plugin.id}/`;
|
|
42
|
+
this.pluginBaseUrl = baseUrl;
|
|
43
|
+
this.pluginMarkdown = await this.pluginsService.getReadmeFileContent(baseUrl);
|
|
44
|
+
}
|
|
45
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InstallPluginComponent, deps: [{ token: i1.BottomDrawerRef }, { token: i2.EcosystemService }, { token: i1.PluginsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
46
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: InstallPluginComponent, selector: "c8y-install-plugin", inputs: { plugins$: "plugins$" }, host: { classAttribute: "d-contents" }, ngImport: i0, template: " <div class=\"card-header gap-8 d-col p-l-24 p-r-24 separator-bottom flex-no-shrink\">\n <div\n class=\"card-title h4 text-center\"\n translate\n >\n Available plugins\n </div>\n <c8y-list-filters\n (filterPipeChange)=\"setFilterPipe($event)\"\n [packageTypes]=\"packageTypes\"\n >\n <c8y-archived-filter></c8y-archived-filter>\n <c8y-only-latest-filter></c8y-only-latest-filter>\n </c8y-list-filters>\n </div>\n <div class=\"d-grid grid__col--5-7--md min-height-0 flex-grow\">\n <c8y-plugin-list\n class=\"inner-scroll bg-level-1\"\n (selectedItems)=\"selectedPlugins = $event\"\n [emptyListText]=\"'No matching plugins' | translate\"\n [plugins$]=\"filteredPlugins$\"\n [selectable]=\"true\"\n [selectedPlugin]=\"selectedPlugin\"\n (showOverview)=\"showPluginOverview($event)\"\n ></c8y-plugin-list>\n <div class=\"inner-scroll bg-component\">\n <div class=\"card-header separator sticky-top bg-inherit\"\n *ngIf=\"pluginMarkdown\">\n <button\n class=\"m-l-auto btn-clean\"\n title=\"{{ 'Close' | translate }}\"\n type=\"button\"\n (click)=\"selectedPlugin = null; pluginMarkdown = null\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </div>\n <div class=\"card-block p-l-24 p-r-24\">\n <div\n class=\"markdown-content\"\n *ngIf=\"pluginMarkdown\"\n [innerHTML]=\"pluginMarkdown | markdownToHtml: { baseUrl: pluginBaseUrl } | async\"\n ></div>\n <c8y-ui-empty-state\n [icon]=\"'user-manual'\"\n [title]=\"'No plugin selected' | translate\"\n [subtitle]=\"\n 'Select a plugin from the list to view its documentation.' | translate\"\n *ngIf=\"!pluginMarkdown\"\n [horizontal]=\"true\"\n >\n <p>\n <small >\n {{ 'Documentation availability varies by plugin.' | translate }}\n </small>\n </p>\n </c8y-ui-empty-state>\n </div>\n </div>\n </div>\n <div class=\"text-center card-footer p-24 separator\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n data-cy=\"install-plugin--cancel-button\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Install' | translate }}\"\n type=\"button\"\n (click)=\"install()\"\n [disabled]=\"selectedPlugins.length === 0\"\n data-cy=\"install-plugin--install-button\"\n >\n {{ 'Install' | translate }}\n <span\n class=\"badge\"\n *ngIf=\"selectedPlugins.length as length\"\n >\n {{ length }}\n </span>\n </button>\n </div>\n\n", dependencies: [{ kind: "component", type: i1.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ListFiltersComponent, selector: "c8y-list-filters", inputs: ["packageTypes", "packageAvailabilities", "packageContents"], outputs: ["filterPipeChange"] }, { kind: "component", type: i2.ArchivedFilterComponent, selector: "c8y-archived-filter" }, { kind: "component", type: i4.PluginListComponent, selector: "c8y-plugin-list", inputs: ["plugins$", "emptyListText", "selectable", "hideSource", "installable", "package", "selectedPlugin"], outputs: ["selectedItems", "showOverview"] }, { kind: "component", type: i5.OnlyLatestFilterComponent, selector: "c8y-only-latest-filter" }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.MarkdownToHtmlPipe, name: "markdownToHtml" }] }); }
|
|
41
47
|
}
|
|
42
48
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InstallPluginComponent, decorators: [{
|
|
43
49
|
type: Component,
|
|
44
|
-
args: [{ selector: 'c8y-install-plugin',
|
|
45
|
-
}], ctorParameters: () => [{ type: i1.
|
|
50
|
+
args: [{ selector: 'c8y-install-plugin', host: { class: 'd-contents' }, template: " <div class=\"card-header gap-8 d-col p-l-24 p-r-24 separator-bottom flex-no-shrink\">\n <div\n class=\"card-title h4 text-center\"\n translate\n >\n Available plugins\n </div>\n <c8y-list-filters\n (filterPipeChange)=\"setFilterPipe($event)\"\n [packageTypes]=\"packageTypes\"\n >\n <c8y-archived-filter></c8y-archived-filter>\n <c8y-only-latest-filter></c8y-only-latest-filter>\n </c8y-list-filters>\n </div>\n <div class=\"d-grid grid__col--5-7--md min-height-0 flex-grow\">\n <c8y-plugin-list\n class=\"inner-scroll bg-level-1\"\n (selectedItems)=\"selectedPlugins = $event\"\n [emptyListText]=\"'No matching plugins' | translate\"\n [plugins$]=\"filteredPlugins$\"\n [selectable]=\"true\"\n [selectedPlugin]=\"selectedPlugin\"\n (showOverview)=\"showPluginOverview($event)\"\n ></c8y-plugin-list>\n <div class=\"inner-scroll bg-component\">\n <div class=\"card-header separator sticky-top bg-inherit\"\n *ngIf=\"pluginMarkdown\">\n <button\n class=\"m-l-auto btn-clean\"\n title=\"{{ 'Close' | translate }}\"\n type=\"button\"\n (click)=\"selectedPlugin = null; pluginMarkdown = null\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </div>\n <div class=\"card-block p-l-24 p-r-24\">\n <div\n class=\"markdown-content\"\n *ngIf=\"pluginMarkdown\"\n [innerHTML]=\"pluginMarkdown | markdownToHtml: { baseUrl: pluginBaseUrl } | async\"\n ></div>\n <c8y-ui-empty-state\n [icon]=\"'user-manual'\"\n [title]=\"'No plugin selected' | translate\"\n [subtitle]=\"\n 'Select a plugin from the list to view its documentation.' | translate\"\n *ngIf=\"!pluginMarkdown\"\n [horizontal]=\"true\"\n >\n <p>\n <small >\n {{ 'Documentation availability varies by plugin.' | translate }}\n </small>\n </p>\n </c8y-ui-empty-state>\n </div>\n </div>\n </div>\n <div class=\"text-center card-footer p-24 separator\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n data-cy=\"install-plugin--cancel-button\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Install' | translate }}\"\n type=\"button\"\n (click)=\"install()\"\n [disabled]=\"selectedPlugins.length === 0\"\n data-cy=\"install-plugin--install-button\"\n >\n {{ 'Install' | translate }}\n <span\n class=\"badge\"\n *ngIf=\"selectedPlugins.length as length\"\n >\n {{ length }}\n </span>\n </button>\n </div>\n\n" }]
|
|
51
|
+
}], ctorParameters: () => [{ type: i1.BottomDrawerRef }, { type: i2.EcosystemService }, { type: i1.PluginsService }], propDecorators: { plugins$: [{
|
|
46
52
|
type: Input
|
|
47
53
|
}] } });
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC1wbHVnaW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXBsdWdpbnMvaW5zdGFsbC1wbHVnaW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXBsdWdpbnMvaW5zdGFsbC1wbHVnaW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFxQixlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekYsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFHakIsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFPeEQsTUFBTSxPQUFPLHNCQUFzQjtJQWlCakMsWUFDVSxlQUF3RCxFQUN4RCxnQkFBa0MsRUFDbEMsY0FBOEI7UUFGOUIsb0JBQWUsR0FBZixlQUFlLENBQXlDO1FBQ3hELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBbEJ4QyxxQkFBZ0IsR0FBd0MsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEYsb0JBQWUsR0FBd0IsRUFBRSxDQUFDO1FBQzFDLGlCQUFZLEdBQUcsbUJBQW1CLENBQUM7UUFDbkMsV0FBTSxHQUFpQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyRSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILDRCQUF1QixHQUFHLElBQUksQ0FBQztJQVk1QixDQUFDO0lBRUosYUFBYSxDQUFDLFVBQXNCO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDeEMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNuQixNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0UsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQ0gsRUFDRCxHQUFHLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FDdkIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBeUI7UUFDaEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFDN0IsTUFBTSxPQUFPLEdBQUcsU0FBUyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEYsQ0FBQzsrR0FsRFUsc0JBQXNCO21HQUF0QixzQkFBc0Isb0lDZm5DLGl6RkF3RkE7OzRGRHpFYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0Usb0JBQW9CLFFBQ3hCLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtnSkFJcEIsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUGx1Z2luLCBCb3R0b21EcmF3ZXJSZWYsIFBsdWdpbnNTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBkZWZhdWx0UGFja2FnZVR5cGVzLFxuICBFY29zeXN0ZW1TZXJ2aWNlLFxuICBGaWx0ZXJhYmxlQXBwT3JQbHVnaW4sXG4gIEZpbHRlclBpcGVcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY29zeXN0ZW0vc2hhcmVkJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1pbnN0YWxsLXBsdWdpbicsXG4gIGhvc3Q6IHsgY2xhc3M6ICdkLWNvbnRlbnRzJyB9LFxuICB0ZW1wbGF0ZVVybDogJy4vaW5zdGFsbC1wbHVnaW4uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEluc3RhbGxQbHVnaW5Db21wb25lbnQge1xuICBASW5wdXQoKSBwbHVnaW5zJDogT2JzZXJ2YWJsZTxGaWx0ZXJhYmxlQXBwT3JQbHVnaW5bXT47XG4gIGZpbHRlcmVkUGx1Z2lucyQ6IE9ic2VydmFibGU8RmlsdGVyYWJsZUFwcE9yUGx1Z2luW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gIHNlbGVjdGVkUGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSA9IFtdO1xuICBwYWNrYWdlVHlwZXMgPSBkZWZhdWx0UGFja2FnZVR5cGVzO1xuICByZXN1bHQ6IFByb21pc2U8QXBwbGljYXRpb25QbHVnaW5bXT4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5faW5zdGFsbCA9IHJlc29sdmU7XG4gICAgdGhpcy5fY2FuY2VsID0gcmVqZWN0O1xuICB9KTtcbiAgb25seUxhdGVzdFBsdWdpblZlcnNpb24gPSB0cnVlO1xuICBzZWxlY3RlZFBsdWdpbjogQXBwbGljYXRpb25QbHVnaW47XG4gIHBsdWdpbkJhc2VVcmw6IHN0cmluZztcbiAgcGx1Z2luTWFya2Rvd246IHN0cmluZztcblxuICBwcml2YXRlIF9pbnN0YWxsO1xuICBwcml2YXRlIF9jYW5jZWw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBib3R0b21EcmF3ZXJSZWY6IEJvdHRvbURyYXdlclJlZjxJbnN0YWxsUGx1Z2luQ29tcG9uZW50PixcbiAgICBwcml2YXRlIGVjb3N5c3RlbVNlcnZpY2U6IEVjb3N5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwbHVnaW5zU2VydmljZTogUGx1Z2luc1NlcnZpY2VcbiAgKSB7fVxuXG4gIHNldEZpbHRlclBpcGUoZmlsdGVyUGlwZTogRmlsdGVyUGlwZSkge1xuICAgIHRoaXMuZmlsdGVyZWRQbHVnaW5zJCA9IHRoaXMucGx1Z2lucyQucGlwZShcbiAgICAgIG1hcChwbHVnaW5zID0+XG4gICAgICAgIHBsdWdpbnMubWFwKHBsdWdpbiA9PiB7XG4gICAgICAgICAgcGx1Z2luLmZpbHRlclByb3BzID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEFwcEZpbHRlclByb3BzKHBsdWdpbi5vcmlnaW5BcHApO1xuICAgICAgICAgIHJldHVybiBwbHVnaW47XG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgc3JjID0+IGZpbHRlclBpcGUoc3JjKVxuICAgICk7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5ib3R0b21EcmF3ZXJSZWYuY2xvc2UoKTtcbiAgICB0aGlzLl9jYW5jZWwoKTtcbiAgfVxuXG4gIGluc3RhbGwoKSB7XG4gICAgdGhpcy5faW5zdGFsbCh0aGlzLnNlbGVjdGVkUGx1Z2lucyk7XG4gICAgdGhpcy5ib3R0b21EcmF3ZXJSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIGFzeW5jIHNob3dQbHVnaW5PdmVydmlldyhwbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luKSB7XG4gICAgdGhpcy5zZWxlY3RlZFBsdWdpbiA9IHBsdWdpbjtcbiAgICBjb25zdCBiYXNlVXJsID0gYC9hcHBzLyR7cGx1Z2luLmlkfS9gO1xuICAgIHRoaXMucGx1Z2luQmFzZVVybCA9IGJhc2VVcmw7XG4gICAgdGhpcy5wbHVnaW5NYXJrZG93biA9IGF3YWl0IHRoaXMucGx1Z2luc1NlcnZpY2UuZ2V0UmVhZG1lRmlsZUNvbnRlbnQoYmFzZVVybCk7XG4gIH1cbn1cbiIsIiAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGdhcC04IGQtY29sIHAtbC0yNCBwLXItMjQgc2VwYXJhdG9yLWJvdHRvbSBmbGV4LW5vLXNocmlua1wiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY2FyZC10aXRsZSBoNCB0ZXh0LWNlbnRlclwiXG4gICAgICB0cmFuc2xhdGVcbiAgICA+XG4gICAgICBBdmFpbGFibGUgcGx1Z2luc1xuICAgIDwvZGl2PlxuICAgIDxjOHktbGlzdC1maWx0ZXJzXG4gICAgICAoZmlsdGVyUGlwZUNoYW5nZSk9XCJzZXRGaWx0ZXJQaXBlKCRldmVudClcIlxuICAgICAgW3BhY2thZ2VUeXBlc109XCJwYWNrYWdlVHlwZXNcIlxuICAgID5cbiAgICAgIDxjOHktYXJjaGl2ZWQtZmlsdGVyPjwvYzh5LWFyY2hpdmVkLWZpbHRlcj5cbiAgICAgIDxjOHktb25seS1sYXRlc3QtZmlsdGVyPjwvYzh5LW9ubHktbGF0ZXN0LWZpbHRlcj5cbiAgICA8L2M4eS1saXN0LWZpbHRlcnM+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZC1ncmlkIGdyaWRfX2NvbC0tNS03LS1tZCBtaW4taGVpZ2h0LTAgZmxleC1ncm93XCI+XG4gICAgPGM4eS1wbHVnaW4tbGlzdFxuICAgICAgY2xhc3M9XCJpbm5lci1zY3JvbGwgYmctbGV2ZWwtMVwiXG4gICAgICAoc2VsZWN0ZWRJdGVtcyk9XCJzZWxlY3RlZFBsdWdpbnMgPSAkZXZlbnRcIlxuICAgICAgW2VtcHR5TGlzdFRleHRdPVwiJ05vIG1hdGNoaW5nIHBsdWdpbnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtwbHVnaW5zJF09XCJmaWx0ZXJlZFBsdWdpbnMkXCJcbiAgICAgIFtzZWxlY3RhYmxlXT1cInRydWVcIlxuICAgICAgW3NlbGVjdGVkUGx1Z2luXT1cInNlbGVjdGVkUGx1Z2luXCJcbiAgICAgIChzaG93T3ZlcnZpZXcpPVwic2hvd1BsdWdpbk92ZXJ2aWV3KCRldmVudClcIlxuICAgID48L2M4eS1wbHVnaW4tbGlzdD5cbiAgICA8ZGl2IGNsYXNzPVwiaW5uZXItc2Nyb2xsIGJnLWNvbXBvbmVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvciBzdGlja3ktdG9wIGJnLWluaGVyaXRcIlxuICAgICAgICAqbmdJZj1cInBsdWdpbk1hcmtkb3duXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cIm0tbC1hdXRvIGJ0bi1jbGVhblwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnQ2xvc2UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRQbHVnaW4gPSBudWxsOyBwbHVnaW5NYXJrZG93biA9IG51bGxcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgYzh5SWNvbj1cInRpbWVzXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgcC1sLTI0IHAtci0yNFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJtYXJrZG93bi1jb250ZW50XCJcbiAgICAgICAgICAqbmdJZj1cInBsdWdpbk1hcmtkb3duXCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cInBsdWdpbk1hcmtkb3duIHwgbWFya2Rvd25Ub0h0bWw6IHsgYmFzZVVybDogcGx1Z2luQmFzZVVybCB9IHwgYXN5bmNcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgICBbaWNvbl09XCIndXNlci1tYW51YWwnXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ05vIHBsdWdpbiBzZWxlY3RlZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtzdWJ0aXRsZV09XCJcbiAgICAgICAgICAgICdTZWxlY3QgYSBwbHVnaW4gZnJvbSB0aGUgbGlzdCB0byB2aWV3IGl0cyBkb2N1bWVudGF0aW9uLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICpuZ0lmPVwiIXBsdWdpbk1hcmtkb3duXCJcbiAgICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAgPHNtYWxsID5cbiAgICAgICAgICAgICAge3sgJ0RvY3VtZW50YXRpb24gYXZhaWxhYmlsaXR5IHZhcmllcyBieSBwbHVnaW4uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICA8L3A+XG4gICAgICAgPC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBjYXJkLWZvb3RlciBwLTI0IHNlcGFyYXRvclwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgIHRpdGxlPVwie3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxuICAgICAgZGF0YS1jeT1cImluc3RhbGwtcGx1Z2luLS1jYW5jZWwtYnV0dG9uXCJcbiAgICA+XG4gICAgICB7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgIHRpdGxlPVwie3sgJ0luc3RhbGwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cImluc3RhbGwoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwic2VsZWN0ZWRQbHVnaW5zLmxlbmd0aCA9PT0gMFwiXG4gICAgICBkYXRhLWN5PVwiaW5zdGFsbC1wbHVnaW4tLWluc3RhbGwtYnV0dG9uXCJcbiAgICA+XG4gICAgICB7eyAnSW5zdGFsbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwiYmFkZ2VcIlxuICAgICAgICAqbmdJZj1cInNlbGVjdGVkUGx1Z2lucy5sZW5ndGggYXMgbGVuZ3RoXCJcbiAgICAgID5cbiAgICAgICAge3sgbGVuZ3RoIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4iXX0=
|