@c8y/ngx-components 1017.0.31 → 1017.0.33
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/ecosystem/application-plugins/application-plugins.component.d.ts +54 -3
- package/ecosystem/application-plugins/plugin-list.component.d.ts +5 -3
- package/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.d.ts +4 -2
- package/ecosystem/application-properties/application-properties.component.d.ts +5 -3
- package/ecosystem/packages/deploy-application/deploy-application.component.d.ts +5 -4
- package/ecosystem/packages/package-availability.service.d.ts +4 -2
- package/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.d.ts +4 -2
- package/ecosystem/shared/application-card.component.d.ts +5 -3
- package/ecosystem/shared/duplicate-application/duplicate-application-properties/duplicate-application-properties.component.d.ts +4 -2
- package/ecosystem/shared/ecosystem.model.d.ts +49 -0
- package/esm2020/core/help/help.component.mjs +3 -3
- package/esm2020/ecosystem/application-plugins/application-plugins.component.mjs +32 -9
- package/esm2020/ecosystem/application-plugins/plugin-list.component.mjs +18 -6
- package/esm2020/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.mjs +20 -5
- package/esm2020/ecosystem/application-properties/application-properties.component.mjs +13 -6
- package/esm2020/ecosystem/packages/deploy-application/deploy-application.component.mjs +20 -7
- package/esm2020/ecosystem/packages/package-availability.service.mjs +18 -5
- package/esm2020/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.mjs +43 -6
- package/esm2020/ecosystem/shared/application-card.component.mjs +28 -5
- package/esm2020/ecosystem/shared/duplicate-application/duplicate-application-properties/duplicate-application-properties.component.mjs +21 -8
- package/esm2020/ecosystem/shared/ecosystem.model.mjs +50 -1
- package/esm2020/operations/operations-list/operations-list-item.component.mjs +3 -3
- package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs +61 -12
- package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs +90 -7
- package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem.mjs +143 -24
- package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-operations-operations-list.mjs +2 -2
- package/fesm2015/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +2 -2
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs +61 -12
- package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs +90 -7
- package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem.mjs +143 -24
- package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-operations-operations-list.mjs +2 -2
- package/fesm2020/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +2 -2
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
|
-
import { AlertService,
|
|
2
|
+
import { AlertService, GainsightService, PluginsService, gettext } from '@c8y/ngx-components';
|
|
3
3
|
import { uniq } from 'lodash-es';
|
|
4
4
|
import { BsModalRef } from 'ngx-bootstrap/modal';
|
|
5
|
+
import { PRODUCT_EXPERIENCE } from '@c8y/ngx-components/ecosystem/shared';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "ngx-bootstrap/modal";
|
|
7
8
|
import * as i2 from "@c8y/ngx-components";
|
|
@@ -9,10 +10,12 @@ import * as i3 from "@angular/common";
|
|
|
9
10
|
import * as i4 from "@angular/forms";
|
|
10
11
|
import * as i5 from "@c8y/ngx-components/ecosystem/shared";
|
|
11
12
|
export class UpdatePluginOfAppComponent {
|
|
12
|
-
constructor(bsModalRef, pluginsService, alert) {
|
|
13
|
+
constructor(bsModalRef, pluginsService, alert, gainsightService) {
|
|
13
14
|
this.bsModalRef = bsModalRef;
|
|
14
15
|
this.pluginsService = pluginsService;
|
|
15
16
|
this.alert = alert;
|
|
17
|
+
this.gainsightService = gainsightService;
|
|
18
|
+
this.CURRENT_LOCATION = location.href;
|
|
16
19
|
this.result = new Promise((resolve, reject) => {
|
|
17
20
|
this._install = resolve;
|
|
18
21
|
this._cancel = reject;
|
|
@@ -62,9 +65,21 @@ export class UpdatePluginOfAppComponent {
|
|
|
62
65
|
try {
|
|
63
66
|
await this.pluginsService.updateRemotesInAppConfig(this.app, newRemotes);
|
|
64
67
|
this.alert.success(gettext(`Switched the version of plugin.`));
|
|
68
|
+
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.INSTALLED_PLUGINS, {
|
|
69
|
+
component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.UPDATE_PLUGIN_OF_APP,
|
|
70
|
+
action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.CHANGE_PLUGIN_VERSION,
|
|
71
|
+
result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.PLUGIN_VERSION_CHANGED,
|
|
72
|
+
url: this.CURRENT_LOCATION
|
|
73
|
+
});
|
|
65
74
|
}
|
|
66
75
|
catch (e) {
|
|
67
76
|
this.alert.addServerFailure(e);
|
|
77
|
+
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.INSTALLED_PLUGINS, {
|
|
78
|
+
component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.UPDATE_PLUGIN_OF_APP,
|
|
79
|
+
action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.CHANGE_PLUGIN_VERSION,
|
|
80
|
+
result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.SERVER_FAILURE,
|
|
81
|
+
url: this.CURRENT_LOCATION
|
|
82
|
+
});
|
|
68
83
|
}
|
|
69
84
|
this.bsModalRef.hide();
|
|
70
85
|
this._install();
|
|
@@ -74,10 +89,10 @@ export class UpdatePluginOfAppComponent {
|
|
|
74
89
|
this._cancel();
|
|
75
90
|
}
|
|
76
91
|
}
|
|
77
|
-
UpdatePluginOfAppComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UpdatePluginOfAppComponent, deps: [{ token: i1.BsModalRef }, { token: i2.PluginsService }, { token: i2.AlertService }], target: i0.ɵɵFactoryTarget.Component });
|
|
92
|
+
UpdatePluginOfAppComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UpdatePluginOfAppComponent, deps: [{ token: i1.BsModalRef }, { token: i2.PluginsService }, { token: i2.AlertService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
|
|
78
93
|
UpdatePluginOfAppComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UpdatePluginOfAppComponent, selector: "c8y-update-plugin-of-app", ngImport: i0, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-modules'\"></i>\n <h4 *ngIf=\"!downgrade\" id=\"modal-title\" translate>Update plugin</h4>\n <h4 *ngIf=\"downgrade\" id=\"modal-title\" translate>Downgrade plugin</h4>\n </div>\n <div class=\"inner-scroll\" id=\"modal-body\">\n <div class=\"p-16\">\n <div class=\"d-block fit-w bg-gray-white\">\n <c8y-package-version-select\n [packageContextPath]=\"plugin?.contextPath\"\n [(ngModel)]=\"applicationVersion\"\n ></c8y-package-version-select>\n <div\n *ngIf=\"plugin?.version && plugin.version === applicationVersion?.version\"\n class=\"alert alert-info\"\n role=\"alert\"\n >\n <span translate ngNonBindable [translateParams]=\"applicationVersion\">\n Select another version, as {{ version }} is currently used.\n </span>\n </div>\n </div>\n\n <div class=\"form-group\">\n <label class=\"c8y-checkbox\">\n <input [(ngModel)]=\"updateAll\" type=\"checkbox\" />\n <span></span>\n <span translate ngNonBindable [translateParams]=\"plugin\">\n Set version for all plugins using the same context path \"{{ contextPath }}\".\n </span>\n </label>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Set version' | translate }}\"\n [disabled]=\"!applicationVersion || plugin?.version === applicationVersion?.version\"\n (click)=\"update()\"\n >\n {{ 'Set version' | translate }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.PackageVersionSelectComponent, selector: "c8y-package-version-select", inputs: ["label", "packageContextPath", "packageId"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
|
|
79
94
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UpdatePluginOfAppComponent, decorators: [{
|
|
80
95
|
type: Component,
|
|
81
96
|
args: [{ selector: 'c8y-update-plugin-of-app', template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-modules'\"></i>\n <h4 *ngIf=\"!downgrade\" id=\"modal-title\" translate>Update plugin</h4>\n <h4 *ngIf=\"downgrade\" id=\"modal-title\" translate>Downgrade plugin</h4>\n </div>\n <div class=\"inner-scroll\" id=\"modal-body\">\n <div class=\"p-16\">\n <div class=\"d-block fit-w bg-gray-white\">\n <c8y-package-version-select\n [packageContextPath]=\"plugin?.contextPath\"\n [(ngModel)]=\"applicationVersion\"\n ></c8y-package-version-select>\n <div\n *ngIf=\"plugin?.version && plugin.version === applicationVersion?.version\"\n class=\"alert alert-info\"\n role=\"alert\"\n >\n <span translate ngNonBindable [translateParams]=\"applicationVersion\">\n Select another version, as {{ version }} is currently used.\n </span>\n </div>\n </div>\n\n <div class=\"form-group\">\n <label class=\"c8y-checkbox\">\n <input [(ngModel)]=\"updateAll\" type=\"checkbox\" />\n <span></span>\n <span translate ngNonBindable [translateParams]=\"plugin\">\n Set version for all plugins using the same context path \"{{ contextPath }}\".\n </span>\n </label>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Set version' | translate }}\"\n [disabled]=\"!applicationVersion || plugin?.version === applicationVersion?.version\"\n (click)=\"update()\"\n >\n {{ 'Set version' | translate }}\n </button>\n </div>\n</div>\n" }]
|
|
82
|
-
}], ctorParameters: function () { return [{ type: i1.BsModalRef }, { type: i2.PluginsService }, { type: i2.AlertService }]; } });
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXBsdWdpbi1vZi1hcHAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXBsdWdpbnMvdXBkYXRlLXBsdWdpbi1vZi1hcHAvdXBkYXRlLXBsdWdpbi1vZi1hcHAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXBsdWdpbnMvdXBkYXRlLXBsdWdpbi1vZi1hcHAvdXBkYXRlLXBsdWdpbi1vZi1hcHAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsWUFBWSxFQUFxQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0YsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7QUFNakQsTUFBTSxPQUFPLDBCQUEwQjtJQWNyQyxZQUNVLFVBQXNCLEVBQ3RCLGNBQThCLEVBQzlCLEtBQW1CO1FBRm5CLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFiN0IsV0FBTSxHQUFrQixJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0RCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUVILGNBQVMsR0FBRyxJQUFJLENBQUM7SUFTZCxDQUFDO0lBRUosS0FBSyxDQUFDLE1BQU07UUFDVixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFD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LENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEM7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7O3VIQTlFVSwwQkFBMEI7MkdBQTFCLDBCQUEwQixnRUNWdkMsODJEQXNEQTsyRkQ1Q2EsMEJBQTBCO2tCQUp0QyxTQUFTOytCQUNFLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zLCBJQXBwbGljYXRpb24sIElBcHBsaWNhdGlvblZlcnNpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIEFwcGxpY2F0aW9uUGx1Z2luLCBnZXR0ZXh0LCBQbHVnaW5zU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgdW5pcSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS11cGRhdGUtcGx1Z2luLW9mLWFwcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi91cGRhdGUtcGx1Z2luLW9mLWFwcC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXBkYXRlUGx1Z2luT2ZBcHBDb21wb25lbnQge1xuICBhcHA6IElBcHBsaWNhdGlvbjtcbiAgcGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbjtcbiAgZG93bmdyYWRlOiBib29sZWFuO1xuICByZXN1bHQ6IFByb21pc2U8dm9pZD4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5faW5zdGFsbCA9IHJlc29sdmU7XG4gICAgdGhpcy5fY2FuY2VsID0gcmVqZWN0O1xuICB9KTtcbiAgYXBwbGljYXRpb25WZXJzaW9uOiBJQXBwbGljYXRpb25WZXJzaW9uO1xuICB1cGRhdGVBbGwgPSB0cnVlO1xuXG4gIHByaXZhdGUgX2luc3RhbGw6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2NhbmNlbDogKHJlYXNvbj86IGFueSkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGJzTW9kYWxSZWY6IEJzTW9kYWxSZWYsXG4gICAgcHJpdmF0ZSBwbHVnaW5zU2VydmljZTogUGx1Z2luc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyB1cGRhdGUoKSB7XG4gICAgY29uc3QgcmVtb3RlcyA9IHRoaXMucGx1Z2luc1NlcnZpY2UuZ2V0TUZSZW1vdGVzKHRoaXMuYXBwKTtcbiAgICBjb25zdCBvbGRSZW1vdGVQYXRoID0gYCR7dGhpcy5wbHVnaW4uY29udGV4dFBhdGh9QCR7dGhpcy5wbHVnaW4udmVyc2lvbn1gO1xuICAgIGNvbnN0IG5ld1JlbW90ZVBhdGggPSBgJHt0aGlzLnBsdWdpbi5jb250ZXh0UGF0aH1AJHt0aGlzLmFwcGxpY2F0aW9uVmVyc2lvbi52ZXJzaW9ufWA7XG4gICAgbGV0IG9sZFJlbW90ZU1vZHVsZXMgPSBbLi4uKHJlbW90ZXNbb2xkUmVtb3RlUGF0aF0gfHwgW10pXTtcbiAgICBpZiAoIW9sZFJlbW90ZU1vZHVsZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFsZXJ0Lndhcm5pbmcoZ2V0dGV4dCgnQ291bGQgbm90IGNoYW5nZSB0aGUgdmVyc2lvbiBvZiBwbHVnaW4uJykpO1xuICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHJlbW90ZU1vZHVsZXNPZk5ld1ZlcnNpb24gPSBbLi4uKHJlbW90ZXNbbmV3UmVtb3RlUGF0aF0gfHwgW10pXTtcbiAgICBsZXQgb2xkZXJWZXJzaW9uczogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zID0ge307XG4gICAgaWYgKHRoaXMudXBkYXRlQWxsKSB7XG4gICAgICBvbGRlclZlcnNpb25zID0gT2JqZWN0LmtleXMocmVtb3RlcylcbiAgICAgICAgLmZpbHRlcihrZXkgPT4ga2V5LnN0YXJ0c1dpdGgoYCR7dGhpcy5wbHVnaW4uY29udGV4dFBhdGh9QGApKVxuICAgICAgICAucmVkdWNlUmlnaHQoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgICBwcmV2W2N1cnJdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgIG9sZFJlbW90ZU1vZHVsZXMgPSBPYmplY3Qua2V5cyhvbGRlclZlcnNpb25zKVxuICAgICAgICAubWFwKHZlcnNpb24gPT4gcmVtb3Rlc1t2ZXJzaW9uXSlcbiAgICAgICAgLnJlZHVjZVJpZ2h0KChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICAgICAgcHJldi5wdXNoKC4uLmN1cnIpO1xuICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICB9LCBbXSk7XG4gICAgICByZW1vdGVNb2R1bGVzT2ZOZXdWZXJzaW9uLnB1c2goLi4ub2xkUmVtb3RlTW9kdWxlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW90ZU1vZHVsZXNPZk5ld1ZlcnNpb24ucHVzaCh0aGlzLnBsdWdpbi5tb2R1bGUpO1xuICAgICAgb2xkZXJWZXJzaW9uc1tvbGRSZW1vdGVQYXRoXSA9IG9sZFJlbW90ZU1vZHVsZXMuZmlsdGVyKFxuICAgICAgICBtb2R1bGUgPT4gbW9kdWxlICE9PSB0aGlzLnBsdWdpbi5tb2R1bGVcbiAgICAgICk7XG4gICAgICBpZiAoIW9sZGVyVmVyc2lvbnNbb2xkUmVtb3RlUGF0aF0ubGVuZ3RoKSB7XG4gICAgICAgIG9sZGVyVmVyc2lvbnNbb2xkUmVtb3RlUGF0aF0gPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3RlTW9kdWxlc09mTmV3VmVyc2lvbiA9IHVuaXEocmVtb3RlTW9kdWxlc09mTmV3VmVyc2lvbik7XG4gICAgY29uc3QgbmV3UmVtb3RlczogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zID0ge1xuICAgICAgLi4ucmVtb3RlcyxcbiAgICAgIC4uLm9sZGVyVmVyc2lvbnMsXG4gICAgICBbbmV3UmVtb3RlUGF0aF06IHJlbW90ZU1vZHVsZXNPZk5ld1ZlcnNpb25cbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucGx1Z2luc1NlcnZpY2UudXBkYXRlUmVtb3Rlc0luQXBwQ29uZmlnKHRoaXMuYXBwLCBuZXdSZW1vdGVzKTtcbiAgICAgIHRoaXMuYWxlcnQuc3VjY2VzcyhnZXR0ZXh0KGBTd2l0Y2hlZCB0aGUgdmVyc2lvbiBvZiBwbHVnaW4uYCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICB9XG5cbiAgICB0aGlzLmJzTW9kYWxSZWYuaGlkZSgpO1xuICAgIHRoaXMuX2luc3RhbGwoKTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLmJzTW9kYWxSZWYuaGlkZSgpO1xuICAgIHRoaXMuX2NhbmNlbCgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidmlld3BvcnQtbW9kYWxcIj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBkaWFsb2ctaGVhZGVyXCI+XG4gICAgPGkgW2M4eUljb25dPVwiJ2M4eS1tb2R1bGVzJ1wiPjwvaT5cbiAgICA8aDQgKm5nSWY9XCIhZG93bmdyYWRlXCIgaWQ9XCJtb2RhbC10aXRsZVwiIHRyYW5zbGF0ZT5VcGRhdGUgcGx1Z2luPC9oND5cbiAgICA8aDQgKm5nSWY9XCJkb3duZ3JhZGVcIiBpZD1cIm1vZGFsLXRpdGxlXCIgdHJhbnNsYXRlPkRvd25ncmFkZSBwbHVnaW48L2g0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImlubmVyLXNjcm9sbFwiIGlkPVwibW9kYWwtYm9keVwiPlxuICAgIDxkaXYgY2xhc3M9XCJwLTE2XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1ibG9jayBmaXQtdyBiZy1ncmF5LXdoaXRlXCI+XG4gICAgICAgIDxjOHktcGFja2FnZS12ZXJzaW9uLXNlbGVjdFxuICAgICAgICAgIFtwYWNrYWdlQ29udGV4dFBhdGhdPVwicGx1Z2luPy5jb250ZXh0UGF0aFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJhcHBsaWNhdGlvblZlcnNpb25cIlxuICAgICAgICA+PC9jOHktcGFja2FnZS12ZXJzaW9uLXNlbGVjdD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwicGx1Z2luPy52ZXJzaW9uICYmIHBsdWdpbi52ZXJzaW9uID09PSBhcHBsaWNhdGlvblZlcnNpb24/LnZlcnNpb25cIlxuICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiXG4gICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZSBuZ05vbkJpbmRhYmxlIFt0cmFuc2xhdGVQYXJhbXNdPVwiYXBwbGljYXRpb25WZXJzaW9uXCI+XG4gICAgICAgICAgICBTZWxlY3QgYW5vdGhlciB2ZXJzaW9uLCBhcyB7eyB2ZXJzaW9uIH19IGlzIGN1cnJlbnRseSB1c2VkLlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LWNoZWNrYm94XCI+XG4gICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwidXBkYXRlQWxsXCIgdHlwZT1cImNoZWNrYm94XCIgLz5cbiAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlIG5nTm9uQmluZGFibGUgW3RyYW5zbGF0ZVBhcmFtc109XCJwbHVnaW5cIj5cbiAgICAgICAgICAgIFNldCB2ZXJzaW9uIGZvciBhbGwgcGx1Z2lucyB1c2luZyB0aGUgc2FtZSBjb250ZXh0IHBhdGggXCJ7eyBjb250ZXh0UGF0aCB9fVwiLlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgIHRpdGxlPVwie3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxuICAgID5cbiAgICAgIHt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgdGl0bGU9XCJ7eyAnU2V0IHZlcnNpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIFtkaXNhYmxlZF09XCIhYXBwbGljYXRpb25WZXJzaW9uIHx8IHBsdWdpbj8udmVyc2lvbiA9PT0gYXBwbGljYXRpb25WZXJzaW9uPy52ZXJzaW9uXCJcbiAgICAgIChjbGljayk9XCJ1cGRhdGUoKVwiXG4gICAgPlxuICAgICAge3sgJ1NldCB2ZXJzaW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
97
|
+
}], ctorParameters: function () { return [{ type: i1.BsModalRef }, { type: i2.PluginsService }, { type: i2.AlertService }, { type: i2.GainsightService }]; } });
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXBsdWdpbi1vZi1hcHAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXBsdWdpbnMvdXBkYXRlLXBsdWdpbi1vZi1hcHAvdXBkYXRlLXBsdWdpbi1vZi1hcHAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXBsdWdpbnMvdXBkYXRlLXBsdWdpbi1vZi1hcHAvdXBkYXRlLXBsdWdpbi1vZi1hcHAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQ0wsWUFBWSxFQUVaLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsT0FBTyxFQUNSLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7QUFNMUUsTUFBTSxPQUFPLDBCQUEwQjtJQWdCckMsWUFDVSxVQUFzQixFQUN0QixjQUE4QixFQUM5QixLQUFtQixFQUNuQixnQkFBa0M7UUFIbEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBbkI1QyxxQkFBZ0IsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBS2pDLFdBQU0sR0FBa0IsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDdEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDeEIsSUFB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QUNKLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7O3VIQTdGVSwwQkFBMEI7MkdBQTFCLDBCQUEwQixnRUNqQnZDLDgyREFzREE7MkZEckNhLDBCQUEwQjtrQkFKdEMsU0FBUzsrQkFDRSwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucywgSUFwcGxpY2F0aW9uLCBJQXBwbGljYXRpb25WZXJzaW9uIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBsaWNhdGlvblBsdWdpbixcbiAgR2FpbnNpZ2h0U2VydmljZSxcbiAgUGx1Z2luc1NlcnZpY2UsXG4gIGdldHRleHRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyB1bmlxIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IFBST0RVQ1RfRVhQRVJJRU5DRSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNvc3lzdGVtL3NoYXJlZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS11cGRhdGUtcGx1Z2luLW9mLWFwcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi91cGRhdGUtcGx1Z2luLW9mLWFwcC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXBkYXRlUGx1Z2luT2ZBcHBDb21wb25lbnQge1xuICBDVVJSRU5UX0xPQ0FUSU9OID0gbG9jYXRpb24uaHJlZjtcblxuICBhcHA6IElBcHBsaWNhdGlvbjtcbiAgcGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbjtcbiAgZG93bmdyYWRlOiBib29sZWFuO1xuICByZXN1bHQ6IFByb21pc2U8dm9pZD4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5faW5zdGFsbCA9IHJlc29sdmU7XG4gICAgdGhpcy5fY2FuY2VsID0gcmVqZWN0O1xuICB9KTtcbiAgYXBwbGljYXRpb25WZXJzaW9uOiBJQXBwbGljYXRpb25WZXJzaW9uO1xuICB1cGRhdGVBbGwgPSB0cnVlO1xuXG4gIHByaXZhdGUgX2luc3RhbGw6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2NhbmNlbDogKHJlYXNvbj86IGFueSkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGJzTW9kYWxSZWY6IEJzTW9kYWxSZWYsXG4gICAgcHJpdmF0ZSBwbHVnaW5zU2VydmljZTogUGx1Z2luc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgdXBkYXRlKCkge1xuICAgIGNvbnN0IHJlbW90ZXMgPSB0aGlzLnBsdWdpbnNTZXJ2aWNlLmdldE1GUmVtb3Rlcyh0aGlzLmFwcCk7XG4gICAgY29uc3Qgb2xkUmVtb3RlUGF0aCA9IGAke3RoaXMucGx1Z2luLmNvbnRleHRQYXRofUAke3RoaXMucGx1Z2luLnZlcnNpb259YDtcbiAgICBjb25zdCBuZXdSZW1vdGVQYXRoID0gYCR7dGhpcy5wbHVnaW4uY29udGV4dFBhdGh9QCR7dGhpcy5hcHBsaWNhdGlvblZlcnNpb24udmVyc2lvbn1gO1xuICAgIGxldCBvbGRSZW1vdGVNb2R1bGVzID0gWy4uLihyZW1vdGVzW29sZFJlbW90ZVBhdGhdIHx8IFtdKV07XG4gICAgaWYgKCFvbGRSZW1vdGVNb2R1bGVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5hbGVydC53YXJuaW5nKGdldHRleHQoJ0NvdWxkIG5vdCBjaGFuZ2UgdGhlIHZlcnNpb24gb2YgcGx1Z2luLicpKTtcbiAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByZW1vdGVNb2R1bGVzT2ZOZXdWZXJzaW9uID0gWy4uLihyZW1vdGVzW25ld1JlbW90ZVBhdGhdIHx8IFtdKV07XG4gICAgbGV0IG9sZGVyVmVyc2lvbnM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyA9IHt9O1xuICAgIGlmICh0aGlzLnVwZGF0ZUFsbCkge1xuICAgICAgb2xkZXJWZXJzaW9ucyA9IE9iamVjdC5rZXlzKHJlbW90ZXMpXG4gICAgICAgIC5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKGAke3RoaXMucGx1Z2luLmNvbnRleHRQYXRofUBgKSlcbiAgICAgICAgLnJlZHVjZVJpZ2h0KChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICAgICAgcHJldltjdXJyXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgfSwge30pO1xuXG4gICAgICBvbGRSZW1vdGVNb2R1bGVzID0gT2JqZWN0LmtleXMob2xkZXJWZXJzaW9ucylcbiAgICAgICAgLm1hcCh2ZXJzaW9uID0+IHJlbW90ZXNbdmVyc2lvbl0pXG4gICAgICAgIC5yZWR1Y2VSaWdodCgocHJldiwgY3VycikgPT4ge1xuICAgICAgICAgIHByZXYucHVzaCguLi5jdXJyKTtcbiAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgfSwgW10pO1xuICAgICAgcmVtb3RlTW9kdWxlc09mTmV3VmVyc2lvbi5wdXNoKC4uLm9sZFJlbW90ZU1vZHVsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdGVNb2R1bGVzT2ZOZXdWZXJzaW9uLnB1c2godGhpcy5wbHVnaW4ubW9kdWxlKTtcbiAgICAgIG9sZGVyVmVyc2lvbnNbb2xkUmVtb3RlUGF0aF0gPSBvbGRSZW1vdGVNb2R1bGVzLmZpbHRlcihcbiAgICAgICAgbW9kdWxlID0+IG1vZHVsZSAhPT0gdGhpcy5wbHVnaW4ubW9kdWxlXG4gICAgICApO1xuICAgICAgaWYgKCFvbGRlclZlcnNpb25zW29sZFJlbW90ZVBhdGhdLmxlbmd0aCkge1xuICAgICAgICBvbGRlclZlcnNpb25zW29sZFJlbW90ZVBhdGhdID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbW90ZU1vZHVsZXNPZk5ld1ZlcnNpb24gPSB1bmlxKHJlbW90ZU1vZHVsZXNPZk5ld1ZlcnNpb24pO1xuICAgIGNvbnN0IG5ld1JlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyA9IHtcbiAgICAgIC4uLnJlbW90ZXMsXG4gICAgICAuLi5vbGRlclZlcnNpb25zLFxuICAgICAgW25ld1JlbW90ZVBhdGhdOiByZW1vdGVNb2R1bGVzT2ZOZXdWZXJzaW9uXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnBsdWdpbnNTZXJ2aWNlLnVwZGF0ZVJlbW90ZXNJbkFwcENvbmZpZyh0aGlzLmFwcCwgbmV3UmVtb3Rlcyk7XG4gICAgICB0aGlzLmFsZXJ0LnN1Y2Nlc3MoZ2V0dGV4dChgU3dpdGNoZWQgdGhlIHZlcnNpb24gb2YgcGx1Z2luLmApKTtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuSU5TVEFMTEVEX1BMVUdJTlMsIHtcbiAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuVVBEQVRFX1BMVUdJTl9PRl9BUFAsXG4gICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5BQ1RJT05TLkNIQU5HRV9QTFVHSU5fVkVSU0lPTixcbiAgICAgICAgcmVzdWx0OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLlJFU1VMVFMuUExVR0lOX1ZFUlNJT05fQ0hBTkdFRCxcbiAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuSU5TVEFMTEVEX1BMVUdJTlMsIHtcbiAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuVVBEQVRFX1BMVUdJTl9PRl9BUFAsXG4gICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5BQ1RJT05TLkNIQU5HRV9QTFVHSU5fVkVSU0lPTixcbiAgICAgICAgcmVzdWx0OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLlJFU1VMVFMuU0VSVkVSX0ZBSUxVUkUsXG4gICAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmJzTW9kYWxSZWYuaGlkZSgpO1xuICAgIHRoaXMuX2luc3RhbGwoKTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLmJzTW9kYWxSZWYuaGlkZSgpO1xuICAgIHRoaXMuX2NhbmNlbCgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidmlld3BvcnQtbW9kYWxcIj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBkaWFsb2ctaGVhZGVyXCI+XG4gICAgPGkgW2M4eUljb25dPVwiJ2M4eS1tb2R1bGVzJ1wiPjwvaT5cbiAgICA8aDQgKm5nSWY9XCIhZG93bmdyYWRlXCIgaWQ9XCJtb2RhbC10aXRsZVwiIHRyYW5zbGF0ZT5VcGRhdGUgcGx1Z2luPC9oND5cbiAgICA8aDQgKm5nSWY9XCJkb3duZ3JhZGVcIiBpZD1cIm1vZGFsLXRpdGxlXCIgdHJhbnNsYXRlPkRvd25ncmFkZSBwbHVnaW48L2g0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImlubmVyLXNjcm9sbFwiIGlkPVwibW9kYWwtYm9keVwiPlxuICAgIDxkaXYgY2xhc3M9XCJwLTE2XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1ibG9jayBmaXQtdyBiZy1ncmF5LXdoaXRlXCI+XG4gICAgICAgIDxjOHktcGFja2FnZS12ZXJzaW9uLXNlbGVjdFxuICAgICAgICAgIFtwYWNrYWdlQ29udGV4dFBhdGhdPVwicGx1Z2luPy5jb250ZXh0UGF0aFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJhcHBsaWNhdGlvblZlcnNpb25cIlxuICAgICAgICA+PC9jOHktcGFja2FnZS12ZXJzaW9uLXNlbGVjdD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwicGx1Z2luPy52ZXJzaW9uICYmIHBsdWdpbi52ZXJzaW9uID09PSBhcHBsaWNhdGlvblZlcnNpb24/LnZlcnNpb25cIlxuICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiXG4gICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZSBuZ05vbkJpbmRhYmxlIFt0cmFuc2xhdGVQYXJhbXNdPVwiYXBwbGljYXRpb25WZXJzaW9uXCI+XG4gICAgICAgICAgICBTZWxlY3QgYW5vdGhlciB2ZXJzaW9uLCBhcyB7eyB2ZXJzaW9uIH19IGlzIGN1cnJlbnRseSB1c2VkLlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LWNoZWNrYm94XCI+XG4gICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwidXBkYXRlQWxsXCIgdHlwZT1cImNoZWNrYm94XCIgLz5cbiAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlIG5nTm9uQmluZGFibGUgW3RyYW5zbGF0ZVBhcmFtc109XCJwbHVnaW5cIj5cbiAgICAgICAgICAgIFNldCB2ZXJzaW9uIGZvciBhbGwgcGx1Z2lucyB1c2luZyB0aGUgc2FtZSBjb250ZXh0IHBhdGggXCJ7eyBjb250ZXh0UGF0aCB9fVwiLlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgIHRpdGxlPVwie3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxuICAgID5cbiAgICAgIHt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgdGl0bGU9XCJ7eyAnU2V0IHZlcnNpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIFtkaXNhYmxlZF09XCIhYXBwbGljYXRpb25WZXJzaW9uIHx8IHBsdWdpbj8udmVyc2lvbiA9PT0gYXBwbGljYXRpb25WZXJzaW9uPy52ZXJzaW9uXCJcbiAgICAgIChjbGljayk9XCJ1cGRhdGUoKVwiXG4gICAgPlxuICAgICAge3sgJ1NldCB2ZXJzaW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -2,10 +2,10 @@ import { Component } from '@angular/core';
|
|
|
2
2
|
import { FormBuilder, Validators } from '@angular/forms';
|
|
3
3
|
import { ActivatedRoute, Router } from '@angular/router';
|
|
4
4
|
import { ApplicationService, ApplicationType, BillingMode, InventoryService, Isolation } from '@c8y/client';
|
|
5
|
-
import { AlertService,
|
|
5
|
+
import { AlertService, GainsightService, ModalService, Permissions, ViewContext, gettext } from '@c8y/ngx-components';
|
|
6
|
+
import { EcosystemService, PRODUCT_EXPERIENCE, packageProperties } from '@c8y/ngx-components/ecosystem/shared';
|
|
6
7
|
import { TranslateService } from '@ngx-translate/core';
|
|
7
8
|
import { BsModalService } from 'ngx-bootstrap/modal';
|
|
8
|
-
import { EcosystemService, packageProperties } from '@c8y/ngx-components/ecosystem/shared';
|
|
9
9
|
import { SubscriptionModalComponent } from './subscription-modal/subscription-modal.component';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
11
|
import * as i1 from "@angular/router";
|
|
@@ -21,7 +21,7 @@ import * as i10 from "../activity-log/activity-log.component";
|
|
|
21
21
|
const MICROSERVICES_BASE_PATH = '/microservices';
|
|
22
22
|
const APPLICATIONS_BASE_PATH = '/ecosystem';
|
|
23
23
|
export class ApplicationPropertiesComponent {
|
|
24
|
-
constructor(activatedRoute, ecosystemService, router, formBuilder, applicationService, alertService, inventoryService, permissions, modalService, translate, bsModalService) {
|
|
24
|
+
constructor(activatedRoute, ecosystemService, router, formBuilder, applicationService, alertService, inventoryService, permissions, modalService, translate, bsModalService, gainsightService) {
|
|
25
25
|
this.activatedRoute = activatedRoute;
|
|
26
26
|
this.ecosystemService = ecosystemService;
|
|
27
27
|
this.router = router;
|
|
@@ -33,6 +33,8 @@ export class ApplicationPropertiesComponent {
|
|
|
33
33
|
this.modalService = modalService;
|
|
34
34
|
this.translate = translate;
|
|
35
35
|
this.bsModalService = bsModalService;
|
|
36
|
+
this.gainsightService = gainsightService;
|
|
37
|
+
this.CURRENT_LOCATION = location.href;
|
|
36
38
|
this.singleTenant = false;
|
|
37
39
|
this.subscription = false;
|
|
38
40
|
this.iconMap = {
|
|
@@ -152,6 +154,11 @@ export class ApplicationPropertiesComponent {
|
|
|
152
154
|
this.loadBinaryMo();
|
|
153
155
|
}
|
|
154
156
|
async updateToLatestVersion() {
|
|
157
|
+
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.APPLICATION_PROPERTIES, {
|
|
158
|
+
component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.APPLICATION_PROPERTIES,
|
|
159
|
+
action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.UPDATE_AVAILABLE,
|
|
160
|
+
url: this.CURRENT_LOCATION
|
|
161
|
+
});
|
|
155
162
|
try {
|
|
156
163
|
const translatedBody = this.translate.instant(gettext(`You're using the version {{ currentVersion }} of the {{ packageName }} package, the latest version available is {{ latestVersion }}, do you want to update? You can always revert to a previous version in the Activity log panel.`), {
|
|
157
164
|
currentVersion: this.application.manifest?.version,
|
|
@@ -288,10 +295,10 @@ export class ApplicationPropertiesComponent {
|
|
|
288
295
|
}
|
|
289
296
|
}
|
|
290
297
|
}
|
|
291
|
-
ApplicationPropertiesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ApplicationPropertiesComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.EcosystemService }, { token: i1.Router }, { token: i3.FormBuilder }, { token: i4.ApplicationService }, { token: i5.AlertService }, { token: i4.InventoryService }, { token: i5.Permissions }, { token: i5.ModalService }, { token: i6.TranslateService }, { token: i7.BsModalService }], target: i0.ɵɵFactoryTarget.Component });
|
|
298
|
+
ApplicationPropertiesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ApplicationPropertiesComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.EcosystemService }, { token: i1.Router }, { token: i3.FormBuilder }, { token: i4.ApplicationService }, { token: i5.AlertService }, { token: i4.InventoryService }, { token: i5.Permissions }, { token: i5.ModalService }, { token: i6.TranslateService }, { token: i7.BsModalService }, { token: i5.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
|
|
292
299
|
ApplicationPropertiesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ApplicationPropertiesComponent, selector: "c8y-application-properties", ngImport: i0, template: "<c8y-title>{{ application | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb *ngIf=\"!isMicroservice\">\n <c8y-breadcrumb-item [icon]=\"'c8y-atom'\" [label]=\"'Ecosystem' | translate\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-modules'\"\n [label]=\"'Applications' | translate\"\n [path]=\"'ecosystem/applications'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"breadcrumbConfig?.icon\"\n [label]=\"breadcrumbConfig?.label\"\n [path]=\"breadcrumbConfig?.path\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"application | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Properties' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-breadcrumb *ngIf=\"isMicroservice\">\n <c8y-breadcrumb-item [icon]=\"'c8y-atom'\" [label]=\"'Ecosystem' | translate\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"breadcrumbConfig?.icon\"\n [label]=\"breadcrumbConfig?.label\"\n [path]=\"breadcrumbConfig?.path\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"application | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Properties' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<div class=\"row\">\n <div [ngClass]=\"{ 'col-md-8': !isActivityLogSupported, 'col-md-12': isActivityLogSupported }\">\n <div\n *ngIf=\"application\"\n [ngClass]=\"{ 'd-grid grid__col--7-5--md': isActivityLogSupported }\"\n class=\"card content-fullpage\"\n >\n <form\n (ngSubmit)=\"formGroup.valid && save(formGroup.value)\"\n [formGroup]=\"formGroup\"\n class=\"d-flex d-col content-fullpage\"\n novalidate\n >\n <div *ngIf=\"!isLoading\" class=\"d-contents\">\n <div class=\"card-block separator-bottom large-padding flex-no-shrink\">\n <div class=\"d-flex-md a-i-start text-center text-left-md\">\n <c8y-app-icon\n *ngIf=\"!isPackage && !isFeature && !isMicroservice && !isExternal\"\n [app]=\"application\"\n [contextPath]=\"application.contextPath\"\n [name]=\"application.name\"\n class=\"icon-48\"\n ></c8y-app-icon>\n <i *ngIf=\"isPackage\" c8yIcon=\"big-parcel\" class=\"icon-48\"></i>\n <i *ngIf=\"isFeature\" c8yIcon=\"tab\" class=\"icon-48\"></i>\n <i *ngIf=\"isMicroservice\" c8yIcon=\"microchip\" class=\"icon-48\"></i>\n <i *ngIf=\"isExternal\" c8yIcon=\"globe1\" class=\"icon-48\"></i>\n\n <div class=\"p-t-md-16 p-l-md-16 p-r-md-32 flex-grow\">\n <p class=\"h4 text-medium m-b-8\">{{ application | humanizeAppName | async }}</p>\n <p *ngIf=\"!isOwner\">\n <em class=\"text-muted\">\n {{ application.description || ('No description available.' | translate) }}\n </em>\n </p>\n <div *ngIf=\"isOwner\" class=\"form-group m-b-0\">\n <label\n [ngClass]=\"{ updated: formGroup?.controls?.description?.dirty }\"\n class=\"editable\"\n >\n <textarea\n c8y-textarea-autoresize\n class=\"form-control no-resize\"\n formControlName=\"description\"\n name=\"description\"\n placeholder=\"{{ 'No description available.' | translate }}\"\n ></textarea>\n </label>\n </div>\n </div>\n <div class=\"text-right-md m-t-4\">\n <span [ngClass]=\"appState?.class\" class=\"label\">\n {{ appState?.label | translate }}\n </span>\n <div class=\"fit-w m-t-2\" *ngIf=\"isPackage || isMicroservice\">\n <label class=\"text-label-small\" translate>Version:</label>\n <small class=\"p-l-4 text-bold\">{{ application.manifest?.version }}</small>\n </div>\n <div class=\"fit-w m-t-2\">\n <label class=\"text-label-small\" translate>Creation time:</label>\n <small class=\"p-l-4 text-bold\">{{ (binaryMo?.creationTime | c8yDate) || '---' }}</small>\n </div>\n <div class=\"m-t-8\">\n <button\n type=\"button\"\n *ngIf=\"isUpdateAvailable\"\n (click)=\"updateToLatestVersion()\"\n [ngClass]=\"{ 'btn-pending': isUpdateOngoing }\"\n class=\"btn btn-warning btn-sm\"\n >\n {{ 'Update available' | translate }}\n </button>\n <button\n (click)=\"openApp(application)\"\n [disabled]=\"disableOpenInBrowser\"\n *ngIf=\"canOpenInBrowser\"\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Open' | translate }}\"\n type=\"button\"\n >\n <i [c8yIcon]=\"'external-link'\"></i>\n {{ 'Open' | translate }}\n </button>\n <div *ngIf=\"canOpenInBrowser && disableOpenInBrowser\">\n <small class=\"text-muted\" translate>\n The application is overwritten by a custom application sharing the same path\n </small>\n </div>\n <span *ngIf=\"isCustomMicroservice\">\n <button\n (click)=\"subscribe()\"\n *ngIf=\"!isSubscribed\"\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Subscribe' | translate }}\"\n >\n <i [c8yIcon]=\"'check-circle-o'\"></i>\n {{ 'Subscribe' | translate }}\n </button>\n <button\n (click)=\"unsubscribe()\"\n *ngIf=\"isSubscribed\"\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Unsubscribe' | translate }}\"\n >\n <i [c8yIcon]=\"'minus-circle'\"></i>\n {{ 'Unsubscribe' | translate }}\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"inner-scroll bg-level-0 flex-grow\">\n <div class=\"card-block large-padding\">\n <div *ngIf=\"isPackage\" class=\"row p-16\">\n <c8y-properties-list\n [data]=\"application.manifest\"\n [properties]=\"packageProperties\"\n [title]=\"'Package details' | translate\"\n [emptyLabel]=\"'---'\"\n icon=\"info\"\n ></c8y-properties-list>\n </div>\n <div *ngIf=\"sourcePackage\" class=\"row p-16\">\n <c8y-properties-list\n [data]=\"sourcePackage.manifest\"\n [properties]=\"packageProperties\"\n [title]=\"'Source package information' | translate\"\n [emptyLabel]=\"'---'\"\n icon=\"info\"\n ></c8y-properties-list>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-5\">\n <c8y-form-group>\n <label for=\"appId\">ID</label>\n <input\n [readonly]=\"true\"\n autocomplete=\"off\"\n class=\"form-control\"\n formControlName=\"id\"\n name=\"id\"\n id=\"appId\"\n type=\"text\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-7\">\n <c8y-form-group>\n <label>{{ 'Name' | translate }}</label>\n <input\n [readonly]=\"!isOwner\"\n class=\"form-control\"\n formControlName=\"name\"\n name=\"name\"\n placeholder=\"{{ 'e.g. My application' | translate }}\"\n required\n type=\"text\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-sm-5\">\n <c8y-form-group>\n <label>{{ 'Application key' | translate }}</label>\n <input\n [readonly]=\"application.id || !isOwner\"\n class=\"form-control\"\n name=\"key\"\n formControlName=\"key\"\n placeholder=\"{{ 'e.g. my-application-key' | translate }}\"\n required\n type=\"text\"\n />\n </c8y-form-group>\n </div>\n\n <div class=\"col-sm-7\">\n <c8y-form-group>\n <label>{{ 'Type' | translate }}</label>\n <div>\n <div *ngIf=\"application.id\">\n <p class=\"form-control-static\">\n <i [c8yIcon]=\"iconMap[application.type]\"></i>\n <span>\n {{ application.type | translate }}\n </span>\n </p>\n </div>\n </div>\n </c8y-form-group>\n </div>\n </div>\n\n <div [ngSwitch]=\"application.type\">\n <div *ngSwitchCase=\"'HOSTED'\">\n <c8y-form-group>\n <label>{{ 'Path' | translate }}</label>\n <div class=\"input-group\">\n <span class=\"input-group-addon\">/apps/</span>\n <input\n [readOnly]=\"application.id || !isOwner\"\n class=\"form-control\"\n name=\"contextPath\"\n placeholder=\"{{ 'e.g. my-application`used in URL`' | translate }}\"\n required\n type=\"text\"\n formControlName=\"contextPath\"\n />\n </div>\n </c8y-form-group>\n </div>\n\n <div *ngSwitchCase=\"'MICROSERVICE'\">\n <c8y-form-group>\n <label>{{ 'Path' | translate }}</label>\n <div class=\"input-group\">\n <span class=\"input-group-addon\">/service/</span>\n <input\n [readOnly]=\"application.id || !isOwner\"\n class=\"form-control\"\n name=\"contextPath\"\n placeholder=\"{{ 'e.g. my-microservice`used in URL`' | translate }}\"\n required\n type=\"text\"\n formControlName=\"contextPath\"\n />\n </div>\n </c8y-form-group>\n <div class=\"row\">\n <div *ngIf=\"application.manifest.version\" class=\"col-sm-4 m-b-16 flex-auto\">\n <label>{{ 'Version' | translate }}</label>\n <p class=\"form-control-static\">\n {{ application.manifest.version }}\n </p>\n </div>\n <div *ngIf=\"application.manifest.isolation\" class=\"col-sm-4 m-b-16 flex-auto\">\n <label>{{ 'Isolation' | translate }}</label>\n <p class=\"form-control-static\">\n <span *ngIf=\"singleTenant\">\n <i [c8yIcon]=\"'c8y-enterprise'\" class=\"c8y-icon-duocolor h4\"></i>\n {{ 'Single tenant' | translate }}\n </span>\n <span *ngIf=\"!singleTenant\">\n <i [c8yIcon]=\"'c8y-sub-tenants'\" class=\"c8y-icon-duocolor icon-32\"></i>\n {{ 'Multi tenant' | translate }}\n </span>\n </p>\n </div>\n <div *ngIf=\"application.manifest.isolation\" class=\"col-sm-4 m-b-16 flex-auto\">\n <label>{{ 'Billing mode' | translate }}</label>\n <p class=\"form-control-static\">\n <span\n *ngIf=\"subscription\"\n [tooltip]=\"'Resources usage assigned to: Owner' | translate\"\n >\n {{ 'Subscription' | translate }}\n </span>\n <span\n *ngIf=\"!subscription && singleTenant\"\n [tooltip]=\"'Resources usage assigned to: Subscriber | translate'\"\n >\n {{ 'Resources' | translate }}\n </span>\n <span\n *ngIf=\"!subscription && !singleTenant\"\n [tooltip]=\"'Resources usage assigned to: Owner' | translate\"\n >\n {{ 'Resources' | translate }}\n </span>\n </p>\n </div>\n </div>\n\n <div *ngIf=\"application.manifest.provider\" class=\"legend form-block m-t-40\">\n {{ 'Provider' | translate }}\n </div>\n <div class=\"list-inline\" *ngIf=\"application.manifest.provider\">\n <div *ngIf=\"application.manifest.provider.name\">\n <div class=\"col-sm-4 m-b-16\">\n <label>{{ 'Name' | translate }}</label>\n <p class=\"form-control-static\">\n {{ application.manifest.provider.name }}\n </p>\n </div>\n </div>\n <div *ngIf=\"application.manifest.provider.domain\">\n <div class=\"col-sm-4 m-b-16\">\n <label>{{ 'Domain' | translate }}</label>\n <p class=\"form-control-static\">\n {{ application.manifest.provider.domain }}\n </p>\n </div>\n </div>\n <div *ngIf=\"application.manifest.provider.support\">\n <div class=\"col-sm-4 m-b-16\">\n <label>{{ 'Support' | translate }}</label>\n <p class=\"form-control-static\">\n {{ application.manifest.provider.support }}\n </p>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'REPOSITORY'\">\n <c8y-form-group>\n <label>{{ 'Path' | translate }}</label>\n <div class=\"input-group\">\n <span class=\"input-group-addon\">/apps/</span>\n <input\n [readOnly]=\"application.id || !isOwner\"\n class=\"form-control\"\n formControlName=\"contextPath\"\n name=\"contextPath\"\n placeholder=\"{{ 'e.g. my-application`used in URL`' | translate }}\"\n required\n type=\"text\"\n />\n </div>\n </c8y-form-group>\n\n <c8y-form-group>\n <label>{{ 'Server URL' | translate }}</label>\n <input\n class=\"form-control\"\n name=\"resourcesUrl\"\n formControlName=\"resourcesUrl\"\n placeholder=\"{{ 'e.g. my-application`used in URL`' | translate }}\"\n required\n type=\"url\"\n />\n </c8y-form-group>\n\n <div class=\"form-group\">\n <label>{{ 'Username' | translate }}</label>\n <input\n class=\"form-control\"\n formControlName=\"username\"\n name=\"username\"\n type=\"text\"\n />\n </div>\n\n <div class=\"form-group\">\n <label>{{ 'Password' | translate }}</label>\n <input\n class=\"form-control\"\n formControlName=\"password\"\n name=\"password\"\n type=\"text\"\n />\n </div>\n </div>\n\n <div *ngSwitchCase=\"'EXTERNAL'\">\n <c8y-form-group>\n <label>{{ 'External URL' | translate }}</label>\n <input\n [pattern]=\"'^(?!javascript:).+'\"\n [readOnly]=\"!isOwner\"\n class=\"form-control\"\n formControlName=\"externalUrl\"\n name=\"externalUrl\"\n placeholder=\"{{ 'e.g.' | translate }} http://www.example.com/\"\n required\n type=\"url\"\n />\n <c8y-messages>\n <c8y-message\n [name]=\"'pattern'\"\n [text]=\"'Valid URL required.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"isCustomMicroservice\">\n <div *ngIf=\"!isLoading\" class=\"d-contents\">\n <c8y-upload-archive\n [(application)]=\"application\"\n (refresh)=\"onNewArchive()\"\n ></c8y-upload-archive>\n </div>\n </ng-container>\n <div\n *ngIf=\"application && !!isOwner && hasAdminPermissions\"\n class=\"card-footer separator\"\n >\n <button\n (click)=\"cancel()\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n (click)=\"delete()\"\n *ngIf=\"canDelete\"\n class=\"btn btn-danger\"\n title=\"{{ 'Delete' | translate }}\"\n type=\"button\"\n >\n {{ 'Delete' | translate }}\n </button>\n <button\n [disabled]=\"!application.type || formGroup.invalid || formGroup.pristine\"\n class=\"btn btn-primary btn-form\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </form>\n\n <div *ngIf=\"isActivityLogSupported\" class=\"content-fullpage d-flex d-col bg-level-1\">\n <div class=\"card-header separator\">\n <div class=\"card-title\" translate>Activity log</div>\n <div class=\"m-l-auto\">\n <button\n (click)=\"load()\"\n class=\"btn btn-link btn-sm\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n >\n <i [ngClass]=\"{ 'icon-spin': isLoading }\" c8yIcon=\"refresh\"></i>\n {{ 'Reload' | translate }}\n </button>\n </div>\n </div>\n <div *ngIf=\"isLoading\" class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n <c8y-activity-log\n *ngIf=\"!isLoading\"\n [hasAdminPermissions]=\"hasAdminPermissions\"\n [application]=\"application\"\n class=\"d-contents\"\n ></c8y-activity-log>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i5.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i5.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "directive", type: i5.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i5.LoadingComponent, selector: "c8y-loading" }, { kind: "directive", type: i5.TextareaAutoresizeDirective, selector: "[c8y-textarea-autoresize]" }, { kind: "component", type: i5.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i5.AppIconComponent, selector: "c8y-app-icon", inputs: ["contextPath", "name", "app"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "component", type: i5.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i5.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i5.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults"] }, { kind: "directive", type: i5.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.PropertiesListComponent, selector: "c8y-properties-list", inputs: ["properties", "title", "icon", "data", "groups", "noParse", "emptyLabel"] }, { kind: "directive", type: i9.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "component", type: i2.UploadArchiveComponent, selector: "c8y-upload-archive", inputs: ["application", "uploadNewVersion", "preUploadCallback"], outputs: ["applicationChange", "refresh"] }, { kind: "component", type: i10.ActivityLogComponent, selector: "c8y-activity-log", inputs: ["application", "hasAdminPermissions"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.HumanizeAppNamePipe, name: "humanizeAppName" }, { kind: "pipe", type: i5.DatePipe, name: "c8yDate" }] });
|
|
293
300
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ApplicationPropertiesComponent, decorators: [{
|
|
294
301
|
type: Component,
|
|
295
302
|
args: [{ selector: 'c8y-application-properties', template: "<c8y-title>{{ application | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb *ngIf=\"!isMicroservice\">\n <c8y-breadcrumb-item [icon]=\"'c8y-atom'\" [label]=\"'Ecosystem' | translate\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-modules'\"\n [label]=\"'Applications' | translate\"\n [path]=\"'ecosystem/applications'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"breadcrumbConfig?.icon\"\n [label]=\"breadcrumbConfig?.label\"\n [path]=\"breadcrumbConfig?.path\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"application | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Properties' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-breadcrumb *ngIf=\"isMicroservice\">\n <c8y-breadcrumb-item [icon]=\"'c8y-atom'\" [label]=\"'Ecosystem' | translate\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"breadcrumbConfig?.icon\"\n [label]=\"breadcrumbConfig?.label\"\n [path]=\"breadcrumbConfig?.path\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"application | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Properties' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<div class=\"row\">\n <div [ngClass]=\"{ 'col-md-8': !isActivityLogSupported, 'col-md-12': isActivityLogSupported }\">\n <div\n *ngIf=\"application\"\n [ngClass]=\"{ 'd-grid grid__col--7-5--md': isActivityLogSupported }\"\n class=\"card content-fullpage\"\n >\n <form\n (ngSubmit)=\"formGroup.valid && save(formGroup.value)\"\n [formGroup]=\"formGroup\"\n class=\"d-flex d-col content-fullpage\"\n novalidate\n >\n <div *ngIf=\"!isLoading\" class=\"d-contents\">\n <div class=\"card-block separator-bottom large-padding flex-no-shrink\">\n <div class=\"d-flex-md a-i-start text-center text-left-md\">\n <c8y-app-icon\n *ngIf=\"!isPackage && !isFeature && !isMicroservice && !isExternal\"\n [app]=\"application\"\n [contextPath]=\"application.contextPath\"\n [name]=\"application.name\"\n class=\"icon-48\"\n ></c8y-app-icon>\n <i *ngIf=\"isPackage\" c8yIcon=\"big-parcel\" class=\"icon-48\"></i>\n <i *ngIf=\"isFeature\" c8yIcon=\"tab\" class=\"icon-48\"></i>\n <i *ngIf=\"isMicroservice\" c8yIcon=\"microchip\" class=\"icon-48\"></i>\n <i *ngIf=\"isExternal\" c8yIcon=\"globe1\" class=\"icon-48\"></i>\n\n <div class=\"p-t-md-16 p-l-md-16 p-r-md-32 flex-grow\">\n <p class=\"h4 text-medium m-b-8\">{{ application | humanizeAppName | async }}</p>\n <p *ngIf=\"!isOwner\">\n <em class=\"text-muted\">\n {{ application.description || ('No description available.' | translate) }}\n </em>\n </p>\n <div *ngIf=\"isOwner\" class=\"form-group m-b-0\">\n <label\n [ngClass]=\"{ updated: formGroup?.controls?.description?.dirty }\"\n class=\"editable\"\n >\n <textarea\n c8y-textarea-autoresize\n class=\"form-control no-resize\"\n formControlName=\"description\"\n name=\"description\"\n placeholder=\"{{ 'No description available.' | translate }}\"\n ></textarea>\n </label>\n </div>\n </div>\n <div class=\"text-right-md m-t-4\">\n <span [ngClass]=\"appState?.class\" class=\"label\">\n {{ appState?.label | translate }}\n </span>\n <div class=\"fit-w m-t-2\" *ngIf=\"isPackage || isMicroservice\">\n <label class=\"text-label-small\" translate>Version:</label>\n <small class=\"p-l-4 text-bold\">{{ application.manifest?.version }}</small>\n </div>\n <div class=\"fit-w m-t-2\">\n <label class=\"text-label-small\" translate>Creation time:</label>\n <small class=\"p-l-4 text-bold\">{{ (binaryMo?.creationTime | c8yDate) || '---' }}</small>\n </div>\n <div class=\"m-t-8\">\n <button\n type=\"button\"\n *ngIf=\"isUpdateAvailable\"\n (click)=\"updateToLatestVersion()\"\n [ngClass]=\"{ 'btn-pending': isUpdateOngoing }\"\n class=\"btn btn-warning btn-sm\"\n >\n {{ 'Update available' | translate }}\n </button>\n <button\n (click)=\"openApp(application)\"\n [disabled]=\"disableOpenInBrowser\"\n *ngIf=\"canOpenInBrowser\"\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Open' | translate }}\"\n type=\"button\"\n >\n <i [c8yIcon]=\"'external-link'\"></i>\n {{ 'Open' | translate }}\n </button>\n <div *ngIf=\"canOpenInBrowser && disableOpenInBrowser\">\n <small class=\"text-muted\" translate>\n The application is overwritten by a custom application sharing the same path\n </small>\n </div>\n <span *ngIf=\"isCustomMicroservice\">\n <button\n (click)=\"subscribe()\"\n *ngIf=\"!isSubscribed\"\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Subscribe' | translate }}\"\n >\n <i [c8yIcon]=\"'check-circle-o'\"></i>\n {{ 'Subscribe' | translate }}\n </button>\n <button\n (click)=\"unsubscribe()\"\n *ngIf=\"isSubscribed\"\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Unsubscribe' | translate }}\"\n >\n <i [c8yIcon]=\"'minus-circle'\"></i>\n {{ 'Unsubscribe' | translate }}\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"inner-scroll bg-level-0 flex-grow\">\n <div class=\"card-block large-padding\">\n <div *ngIf=\"isPackage\" class=\"row p-16\">\n <c8y-properties-list\n [data]=\"application.manifest\"\n [properties]=\"packageProperties\"\n [title]=\"'Package details' | translate\"\n [emptyLabel]=\"'---'\"\n icon=\"info\"\n ></c8y-properties-list>\n </div>\n <div *ngIf=\"sourcePackage\" class=\"row p-16\">\n <c8y-properties-list\n [data]=\"sourcePackage.manifest\"\n [properties]=\"packageProperties\"\n [title]=\"'Source package information' | translate\"\n [emptyLabel]=\"'---'\"\n icon=\"info\"\n ></c8y-properties-list>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-5\">\n <c8y-form-group>\n <label for=\"appId\">ID</label>\n <input\n [readonly]=\"true\"\n autocomplete=\"off\"\n class=\"form-control\"\n formControlName=\"id\"\n name=\"id\"\n id=\"appId\"\n type=\"text\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-7\">\n <c8y-form-group>\n <label>{{ 'Name' | translate }}</label>\n <input\n [readonly]=\"!isOwner\"\n class=\"form-control\"\n formControlName=\"name\"\n name=\"name\"\n placeholder=\"{{ 'e.g. My application' | translate }}\"\n required\n type=\"text\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-sm-5\">\n <c8y-form-group>\n <label>{{ 'Application key' | translate }}</label>\n <input\n [readonly]=\"application.id || !isOwner\"\n class=\"form-control\"\n name=\"key\"\n formControlName=\"key\"\n placeholder=\"{{ 'e.g. my-application-key' | translate }}\"\n required\n type=\"text\"\n />\n </c8y-form-group>\n </div>\n\n <div class=\"col-sm-7\">\n <c8y-form-group>\n <label>{{ 'Type' | translate }}</label>\n <div>\n <div *ngIf=\"application.id\">\n <p class=\"form-control-static\">\n <i [c8yIcon]=\"iconMap[application.type]\"></i>\n <span>\n {{ application.type | translate }}\n </span>\n </p>\n </div>\n </div>\n </c8y-form-group>\n </div>\n </div>\n\n <div [ngSwitch]=\"application.type\">\n <div *ngSwitchCase=\"'HOSTED'\">\n <c8y-form-group>\n <label>{{ 'Path' | translate }}</label>\n <div class=\"input-group\">\n <span class=\"input-group-addon\">/apps/</span>\n <input\n [readOnly]=\"application.id || !isOwner\"\n class=\"form-control\"\n name=\"contextPath\"\n placeholder=\"{{ 'e.g. my-application`used in URL`' | translate }}\"\n required\n type=\"text\"\n formControlName=\"contextPath\"\n />\n </div>\n </c8y-form-group>\n </div>\n\n <div *ngSwitchCase=\"'MICROSERVICE'\">\n <c8y-form-group>\n <label>{{ 'Path' | translate }}</label>\n <div class=\"input-group\">\n <span class=\"input-group-addon\">/service/</span>\n <input\n [readOnly]=\"application.id || !isOwner\"\n class=\"form-control\"\n name=\"contextPath\"\n placeholder=\"{{ 'e.g. my-microservice`used in URL`' | translate }}\"\n required\n type=\"text\"\n formControlName=\"contextPath\"\n />\n </div>\n </c8y-form-group>\n <div class=\"row\">\n <div *ngIf=\"application.manifest.version\" class=\"col-sm-4 m-b-16 flex-auto\">\n <label>{{ 'Version' | translate }}</label>\n <p class=\"form-control-static\">\n {{ application.manifest.version }}\n </p>\n </div>\n <div *ngIf=\"application.manifest.isolation\" class=\"col-sm-4 m-b-16 flex-auto\">\n <label>{{ 'Isolation' | translate }}</label>\n <p class=\"form-control-static\">\n <span *ngIf=\"singleTenant\">\n <i [c8yIcon]=\"'c8y-enterprise'\" class=\"c8y-icon-duocolor h4\"></i>\n {{ 'Single tenant' | translate }}\n </span>\n <span *ngIf=\"!singleTenant\">\n <i [c8yIcon]=\"'c8y-sub-tenants'\" class=\"c8y-icon-duocolor icon-32\"></i>\n {{ 'Multi tenant' | translate }}\n </span>\n </p>\n </div>\n <div *ngIf=\"application.manifest.isolation\" class=\"col-sm-4 m-b-16 flex-auto\">\n <label>{{ 'Billing mode' | translate }}</label>\n <p class=\"form-control-static\">\n <span\n *ngIf=\"subscription\"\n [tooltip]=\"'Resources usage assigned to: Owner' | translate\"\n >\n {{ 'Subscription' | translate }}\n </span>\n <span\n *ngIf=\"!subscription && singleTenant\"\n [tooltip]=\"'Resources usage assigned to: Subscriber | translate'\"\n >\n {{ 'Resources' | translate }}\n </span>\n <span\n *ngIf=\"!subscription && !singleTenant\"\n [tooltip]=\"'Resources usage assigned to: Owner' | translate\"\n >\n {{ 'Resources' | translate }}\n </span>\n </p>\n </div>\n </div>\n\n <div *ngIf=\"application.manifest.provider\" class=\"legend form-block m-t-40\">\n {{ 'Provider' | translate }}\n </div>\n <div class=\"list-inline\" *ngIf=\"application.manifest.provider\">\n <div *ngIf=\"application.manifest.provider.name\">\n <div class=\"col-sm-4 m-b-16\">\n <label>{{ 'Name' | translate }}</label>\n <p class=\"form-control-static\">\n {{ application.manifest.provider.name }}\n </p>\n </div>\n </div>\n <div *ngIf=\"application.manifest.provider.domain\">\n <div class=\"col-sm-4 m-b-16\">\n <label>{{ 'Domain' | translate }}</label>\n <p class=\"form-control-static\">\n {{ application.manifest.provider.domain }}\n </p>\n </div>\n </div>\n <div *ngIf=\"application.manifest.provider.support\">\n <div class=\"col-sm-4 m-b-16\">\n <label>{{ 'Support' | translate }}</label>\n <p class=\"form-control-static\">\n {{ application.manifest.provider.support }}\n </p>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'REPOSITORY'\">\n <c8y-form-group>\n <label>{{ 'Path' | translate }}</label>\n <div class=\"input-group\">\n <span class=\"input-group-addon\">/apps/</span>\n <input\n [readOnly]=\"application.id || !isOwner\"\n class=\"form-control\"\n formControlName=\"contextPath\"\n name=\"contextPath\"\n placeholder=\"{{ 'e.g. my-application`used in URL`' | translate }}\"\n required\n type=\"text\"\n />\n </div>\n </c8y-form-group>\n\n <c8y-form-group>\n <label>{{ 'Server URL' | translate }}</label>\n <input\n class=\"form-control\"\n name=\"resourcesUrl\"\n formControlName=\"resourcesUrl\"\n placeholder=\"{{ 'e.g. my-application`used in URL`' | translate }}\"\n required\n type=\"url\"\n />\n </c8y-form-group>\n\n <div class=\"form-group\">\n <label>{{ 'Username' | translate }}</label>\n <input\n class=\"form-control\"\n formControlName=\"username\"\n name=\"username\"\n type=\"text\"\n />\n </div>\n\n <div class=\"form-group\">\n <label>{{ 'Password' | translate }}</label>\n <input\n class=\"form-control\"\n formControlName=\"password\"\n name=\"password\"\n type=\"text\"\n />\n </div>\n </div>\n\n <div *ngSwitchCase=\"'EXTERNAL'\">\n <c8y-form-group>\n <label>{{ 'External URL' | translate }}</label>\n <input\n [pattern]=\"'^(?!javascript:).+'\"\n [readOnly]=\"!isOwner\"\n class=\"form-control\"\n formControlName=\"externalUrl\"\n name=\"externalUrl\"\n placeholder=\"{{ 'e.g.' | translate }} http://www.example.com/\"\n required\n type=\"url\"\n />\n <c8y-messages>\n <c8y-message\n [name]=\"'pattern'\"\n [text]=\"'Valid URL required.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"isCustomMicroservice\">\n <div *ngIf=\"!isLoading\" class=\"d-contents\">\n <c8y-upload-archive\n [(application)]=\"application\"\n (refresh)=\"onNewArchive()\"\n ></c8y-upload-archive>\n </div>\n </ng-container>\n <div\n *ngIf=\"application && !!isOwner && hasAdminPermissions\"\n class=\"card-footer separator\"\n >\n <button\n (click)=\"cancel()\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n (click)=\"delete()\"\n *ngIf=\"canDelete\"\n class=\"btn btn-danger\"\n title=\"{{ 'Delete' | translate }}\"\n type=\"button\"\n >\n {{ 'Delete' | translate }}\n </button>\n <button\n [disabled]=\"!application.type || formGroup.invalid || formGroup.pristine\"\n class=\"btn btn-primary btn-form\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </form>\n\n <div *ngIf=\"isActivityLogSupported\" class=\"content-fullpage d-flex d-col bg-level-1\">\n <div class=\"card-header separator\">\n <div class=\"card-title\" translate>Activity log</div>\n <div class=\"m-l-auto\">\n <button\n (click)=\"load()\"\n class=\"btn btn-link btn-sm\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n >\n <i [ngClass]=\"{ 'icon-spin': isLoading }\" c8yIcon=\"refresh\"></i>\n {{ 'Reload' | translate }}\n </button>\n </div>\n </div>\n <div *ngIf=\"isLoading\" class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n <c8y-activity-log\n *ngIf=\"!isLoading\"\n [hasAdminPermissions]=\"hasAdminPermissions\"\n [application]=\"application\"\n class=\"d-contents\"\n ></c8y-activity-log>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
296
|
-
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.EcosystemService }, { type: i1.Router }, { type: i3.FormBuilder }, { type: i4.ApplicationService }, { type: i5.AlertService }, { type: i4.InventoryService }, { type: i5.Permissions }, { type: i5.ModalService }, { type: i6.TranslateService }, { type: i7.BsModalService }]; } });
|
|
297
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tcHJvcGVydGllcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vYXBwbGljYXRpb24tcHJvcGVydGllcy9hcHBsaWNhdGlvbi1wcm9wZXJ0aWVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi1wcm9wZXJ0aWVzL2FwcGxpY2F0aW9uLXByb3BlcnRpZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsV0FBVyxFQUdYLGdCQUFnQixFQUNoQixTQUFTLEVBQ1YsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLFlBQVksRUFDWixPQUFPLEVBQ1AsWUFBWSxFQUNaLFdBQVcsRUFFWCxXQUFXLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDbEIsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7Ozs7Ozs7Ozs7O0FBRS9GLE1BQU0sdUJBQXVCLEdBQVcsZ0JBQWdCLENBQUM7QUFDekQsTUFBTSxzQkFBc0IsR0FBVyxZQUFZLENBQUM7QUFNcEQsTUFBTSxPQUFPLDhCQUE4QjtJQW1DekMsWUFDVSxj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QUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDbkUsT0FBTztTQUNSO1FBRUQsTUFBTSxzQkFBc0IsR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztRQUM1RCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQztRQUVyRCxJQUFJO1lBQ0YsTUFBTSxFQUFFLElBQUksRUFBRSw0QkFBNEIsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FDdkYsc0JBQXNCLENBQ3ZCLENBQUM7WUFDRixNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQ0FBZ0MsQ0FDbkYsNEJBQTRCLEVBQzVCLFFBQVEsQ0FDVCxDQUFDO1lBQ0YsSUFBSSxDQUFDLDJCQUEyQixHQUFHLHNCQUFzQixDQUFDLE9BQU8sQ0FBQztZQUNsRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUNqRSxjQUFjLEVBQ2Qsc0JBQXNCLENBQ3ZCLENBQUM7U0FDSDtRQUFDLE1BQU07WUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsK0NBQStDLENBQUMsQ0FBQyxDQUFDO1NBQ3JGO0lBQ0gsQ0FBQzs7MkhBM1VVLDhCQUE4QjsrR0FBOUIsOEJBQThCLGtFQ3BDM0MsOGxwQkErZEE7MkZEM2JhLDhCQUE4QjtrQkFKMUMsU0FBUzsrQkFDRSw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25TZXJ2aWNlLFxuICBBcHBsaWNhdGlvblR5cGUsXG4gIEJpbGxpbmdNb2RlLFxuICBJQXBwbGljYXRpb24sXG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJbnZlbnRvcnlTZXJ2aWNlLFxuICBJc29sYXRpb25cbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBNb2RhbFNlcnZpY2UsXG4gIFBlcm1pc3Npb25zLFxuICBQcm9wZXJ0aWVzTGlzdEl0ZW0sXG4gIFZpZXdDb250ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uU3RhdGUsXG4gIEVjb3N5c3RlbVNlcnZpY2UsXG4gIHBhY2thZ2VQcm9wZXJ0aWVzXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNvc3lzdGVtL3NoYXJlZCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25Nb2RhbENvbXBvbmVudCB9IGZyb20gJy4vc3Vic2NyaXB0aW9uLW1vZGFsL3N1YnNjcmlwdGlvbi1tb2RhbC5jb21wb25lbnQnO1xuXG5jb25zdCBNSUNST1NFUlZJQ0VTX0JBU0VfUEFUSDogc3RyaW5nID0gJy9taWNyb3NlcnZpY2VzJztcbmNvbnN0IEFQUExJQ0FUSU9OU19CQVNFX1BBVEg6IHN0cmluZyA9ICcvZWNvc3lzdGVtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFwcGxpY2F0aW9uLXByb3BlcnRpZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwbGljYXRpb24tcHJvcGVydGllcy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25Qcm9wZXJ0aWVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb247XG4gIGJpbmFyeU1vOiBJTWFuYWdlZE9iamVjdDtcbiAgc2luZ2xlVGVuYW50OiBib29sZWFuID0gZmFsc2U7XG4gIHN1YnNjcmlwdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBjYW5PcGVuSW5Ccm93c2VyOiBib29sZWFuO1xuICBkaXNhYmxlT3BlbkluQnJvd3NlcjogYm9vbGVhbjtcbiAgY2FuRGVsZXRlOiBib29sZWFuO1xuICBpc093bmVyOiBib29sZWFuO1xuICBpc1N1YnNjcmliZWQ6IGJvb2xlYW47XG4gIGlzUGFja2FnZTogYm9vbGVhbjtcbiAgaXNNaWNyb3NlcnZpY2U6IGJvb2xlYW47XG4gIGlzRmVhdHVyZTogYm9vbGVhbjtcbiAgaXNFeHRlcm5hbDogYm9vbGVhbjtcbiAgaXNVbnBhY2tlZDogYm9vbGVhbjtcbiAgaWNvbk1hcCA9IHtcbiAgICBIT1NURUQ6ICdjbG91ZCcsXG4gICAgRVhURVJOQUw6ICdleHRlcm5hbC1saW5rLXNxdWFyZScsXG4gICAgTUlDUk9TRVJWSUNFOiAnbWljcm9jaGlwJ1xuICB9O1xuICBhcHBTdGF0ZTogQXBwbGljYXRpb25TdGF0ZTtcbiAgc291cmNlUGFja2FnZTogSUFwcGxpY2F0aW9uO1xuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICBpc0FjdGl2aXR5TG9nU3VwcG9ydGVkOiBib29sZWFuO1xuICBpc0N1c3RvbU1pY3Jvc2VydmljZTogYm9vbGVhbjtcbiAgaGFzQWRtaW5QZXJtaXNzaW9ucyA9IGZhbHNlO1xuXG4gIGJyZWFkY3J1bWJDb25maWc6IHsgaWNvbjogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyBwYXRoOiBzdHJpbmcgfTtcbiAgcGFja2FnZVByb3BlcnRpZXM6IFByb3BlcnRpZXNMaXN0SXRlbVtdID0gWy4uLnBhY2thZ2VQcm9wZXJ0aWVzXTtcbiAgaXNVcGRhdGVBdmFpbGFibGUgPSBmYWxzZTtcbiAgaXNVcGRhdGVPbmdvaW5nID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBibHVlcHJpbnRBcHBsaWNhdGlvblZlcnNpb246IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGVjb3N5c3RlbVNlcnZpY2U6IEVjb3N5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uU2VydmljZTogQXBwbGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBic01vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaGFzQWRtaW5QZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMuaGFzUm9sZSgnUk9MRV9BUFBMSUNBVElPTl9NQU5BR0VNRU5UX0FETUlOJyk7XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoKCkge1xuICAgIGF3YWl0IHRoaXMubG9hZCgpO1xuICAgIHRoaXMuaXNVbnBhY2tlZCA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc1VucGFja2VkKHRoaXMuYXBwbGljYXRpb24pO1xuICAgIHRoaXMuaXNQYWNrYWdlID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmlzUGFja2FnZSh0aGlzLmFwcGxpY2F0aW9uKTtcbiAgICB0aGlzLmlzRmVhdHVyZSA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc0ZlYXR1cmUodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgdGhpcy5pc0V4dGVybmFsID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmlzRXh0ZXJuYWwodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgdGhpcy5pc01pY3Jvc2VydmljZSA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc01pY3Jvc2VydmljZSh0aGlzLmFwcGxpY2F0aW9uKTtcbiAgICB0aGlzLmFwcFN0YXRlID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEFwcFN0YXRlKHRoaXMuYXBwbGljYXRpb24pO1xuXG4gICAgaWYgKHRoaXMuaXNVbnBhY2tlZCkge1xuICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlU291cmNlUGFja2FnZURldGFpbHMoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEJyZWFkY3J1bWJDb25maWcoKTtcblxuICAgIGlmICh0aGlzLmlzQ3VzdG9tTWljcm9zZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvYWRCaW5hcnlNbygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWQoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICBhd2FpdCB0aGlzLmxvYWRBcHBsaWNhdGlvbigpO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBvbkFwcGxpY2F0aW9uKGFwcDogSUFwcGxpY2F0aW9uKSB7XG4gICAgaWYgKGFwcC5tYW5pZmVzdCkge1xuICAgICAgdGhpcy5zaW5nbGVUZW5hbnQgPSBhcHAubWFuaWZlc3QuaXNvbGF0aW9uID09PSBJc29sYXRpb24uUEVSX1RFTkFOVDtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gYXBwLm1hbmlmZXN0LmJpbGxpbmdNb2RlID09PSBCaWxsaW5nTW9kZS5TVUJTQ1JJUFRJT047XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLmFwcGxpY2F0aW9uLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoTUlDUk9TRVJWSUNFU19CQVNFX1BBVEgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKEFQUExJQ0FUSU9OU19CQVNFX1BBVEgpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5BcHAoYXBwKSB7XG4gICAgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLm9wZW5BcHAoYXBwKTtcbiAgfVxuXG4gIGdldFBhY2thZ2UoZW50aXR5T3JJZDogc3RyaW5nIHwgbnVtYmVyIHwgSUFwcGxpY2F0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRldGFpbChlbnRpdHlPcklkKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmRlbGV0ZUFwcCh0aGlzLmFwcGxpY2F0aW9uKTtcbiAgICAgIGlmICh0aGlzLmFwcGxpY2F0aW9uLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChNSUNST1NFUlZJQ0VTX0JBU0VfUEFUSCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKEFQUExJQ0FUSU9OU19CQVNFX1BBVEgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlKCkge1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHsgYXBwbGljYXRpb246IHRoaXMuYXBwbGljYXRpb24sIGlzU3Vic2NyaWJlZDogZmFsc2UgfTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpcm1TdWJzY3JpcHRpb25DaGFuZ2UoaW5pdGlhbFN0YXRlKTtcbiAgICB0aGlzLmxvYWRBcHBsaWNhdGlvbigpO1xuICB9XG5cbiAgYXN5bmMgdW5zdWJzY3JpYmUoKSB7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0geyBhcHBsaWNhdGlvbjogdGhpcy5hcHBsaWNhdGlvbiwgaXNTdWJzY3JpYmVkOiB0cnVlIH07XG4gICAgYXdhaXQgdGhpcy5jb25maXJtU3Vic2NyaXB0aW9uQ2hhbmdlKGluaXRpYWxTdGF0ZSk7XG4gICAgdGhpcy5sb2FkQXBwbGljYXRpb24oKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRBcHBsaWNhdGlvbigpIHtcbiAgICBjb25zdCB7IGlkIH0gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmVudC5kYXRhLmNvbnRleHREYXRhO1xuICAgIHRoaXMuYXBwbGljYXRpb24gPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZ2V0QXBwbGljYXRpb24oaWQpO1xuICAgIGlmICh0aGlzLmFwcGxpY2F0aW9uLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnbmFtZScpLmRpc2FibGUoKTtcbiAgICB9XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7IC4uLnRoaXMuYXBwbGljYXRpb24gfSk7XG4gICAgdGhpcy5jYW5PcGVuSW5Ccm93c2VyID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmNhbk9wZW5BcHBJbkJyb3dzZXIodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgdGhpcy5kaXNhYmxlT3BlbkluQnJvd3NlciA9XG4gICAgICB0aGlzLmNhbk9wZW5JbkJyb3dzZXIgJiZcbiAgICAgIChhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuaXNPdmVyd3JpdHRlbkJ5Q3VzdG9tQXBwKHRoaXMuYXBwbGljYXRpb24pKTtcbiAgICB0aGlzLmNhbkRlbGV0ZSA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5jYW5EZWxldGVBcHAodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgdGhpcy5pc093bmVyID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmlzT3duZXIodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgdGhpcy5pc0FjdGl2aXR5TG9nU3VwcG9ydGVkID0gdGhpcy5pc0FjdGl2aXR5TG9nU3VwcG9ydGVkQnlBcHAodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgdGhpcy5pc0N1c3RvbU1pY3Jvc2VydmljZSA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc0N1c3RvbU1pY3Jvc2VydmljZSh0aGlzLmFwcGxpY2F0aW9uKTtcbiAgICB0aGlzLmlzU3Vic2NyaWJlZCA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5jaGVja0lmU3Vic2NyaWJlZCh0aGlzLmFwcGxpY2F0aW9uKTtcbiAgICB0aGlzLm9uQXBwbGljYXRpb24odGhpcy5hcHBsaWNhdGlvbik7XG4gIH1cblxuICBhc3luYyBzYXZlKGFwcDogSUFwcGxpY2F0aW9uKSB7XG4gICAgYXBwLmlkID0gdGhpcy5hcHBsaWNhdGlvbi5pZDtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwZGF0ZUFwcChhcHApO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcHBsaWNhdGlvbiBzYXZlZC4nKSk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5yZXNldCgpO1xuICAgICAgdGhpcy5sb2FkQXBwbGljYXRpb24oKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuXG4gIG9uTmV3QXJjaGl2ZSgpIHtcbiAgICB0aGlzLmxvYWRCaW5hcnlNbygpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVG9MYXRlc3RWZXJzaW9uKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkQm9keSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgIGdldHRleHQoXG4gICAgICAgICAgYFlvdSdyZSB1c2luZyB0aGUgdmVyc2lvbiB7eyBjdXJyZW50VmVyc2lvbiB9fSBvZiB0aGUge3sgcGFja2FnZU5hbWUgfX0gcGFja2FnZSwgdGhlIGxhdGVzdCB2ZXJzaW9uIGF2YWlsYWJsZSBpcyB7eyBsYXRlc3RWZXJzaW9uIH19LCBkbyB5b3Ugd2FudCB0byB1cGRhdGU/IFlvdSBjYW4gYWx3YXlzIHJldmVydCB0byBhIHByZXZpb3VzIHZlcnNpb24gaW4gdGhlIEFjdGl2aXR5IGxvZyBwYW5lbC5gXG4gICAgICAgICksXG4gICAgICAgIHtcbiAgICAgICAgICBjdXJyZW50VmVyc2lvbjogdGhpcy5hcHBsaWNhdGlvbi5tYW5pZmVzdD8udmVyc2lvbixcbiAgICAgICAgICBsYXRlc3RWZXJzaW9uOiB0aGlzLmJsdWVwcmludEFwcGxpY2F0aW9uVmVyc2lvbixcbiAgICAgICAgICBwYWNrYWdlTmFtZTogdGhpcy5zb3VyY2VQYWNrYWdlLm5hbWVcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0oZ2V0dGV4dCgnVXBkYXRlIGFwcGxpY2F0aW9uJyksIHRyYW5zbGF0ZWRCb2R5LCAnd2FybmluZycsIHtcbiAgICAgICAgb2s6IGdldHRleHQoJ1VwZGF0ZScpLFxuICAgICAgICBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIG1vZGFsIGNhbmNlbGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc1VwZGF0ZU9uZ29pbmcgPSB0cnVlO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRPRE86IHVzZSB0aGUgY29ycmVjdCBiaW5hcnlNb0lkIChhY3RpdmVWZXJzaW9uSWQgb2YgdGhlIHZlcnNpb24gbm90IGFwcGxpY2F0aW9uKVxuICAgICAgY29uc3QgYmluYXJ5TW9JZCA9IHRoaXMuc291cmNlUGFja2FnZS5hY3RpdmVWZXJzaW9uSWQ7XG4gICAgICBhd2FpdCB0aGlzLnVwbG9hZE5ld0JpbmFyeShiaW5hcnlNb0lkKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5yZXM/LnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmFsbEJhY2tUb0Nsb25lVXBkYXRlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIoZ2V0dGV4dCgnRmFpbGVkIHRvIHVwZGF0ZSBhcHBsaWNhdGlvbi4nKSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNVcGRhdGVPbmdvaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGxvYWROZXdCaW5hcnkoYmluYXJ5TW9JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgeyBkYXRhOiBiaW5hcnlNbyB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRldGFpbChiaW5hcnlNb0lkKTtcbiAgICBjb25zdCBiaW5hcnkgPSBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuYmluYXJ5LmRvd25sb2FkKGJpbmFyeU1vLmlkKTtcbiAgICBjb25zdCBibG9iID0gYXdhaXQgYmluYXJ5LmJsb2IoKTtcbiAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBiaW5hcnlNby5uYW1lKTtcbiAgICBjb25zdCBhcHAgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudXBsb2FkQXJjaGl2ZVRvQXBwKGZpbGUsIHRoaXMuYXBwbGljYXRpb24sIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudXBkYXRlQXBwTWFuaWZlc3QoYXBwLCB0aGlzLnNvdXJjZVBhY2thZ2UpO1xuICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXBwbGljYXRpb24gdXBkYXRlZC4nKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZhbGxCYWNrVG9DbG9uZVVwZGF0ZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhOiBjbG9uZWRBcHAgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmNsb25lKHRoaXMuc291cmNlUGFja2FnZSk7XG4gICAgICBhd2FpdCB0aGlzLnVwbG9hZE5ld0JpbmFyeShjbG9uZWRBcHAuYWN0aXZlVmVyc2lvbklkKTtcbiAgICAgIHRoaXMuZWNvc3lzdGVtU2VydmljZS5kZWxldGVBcHAoY2xvbmVkQXBwLCB0cnVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29uZmlybVN1YnNjcmlwdGlvbkNoYW5nZShpbml0aWFsU3RhdGU6IHtcbiAgICBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uO1xuICAgIGlzU3Vic2NyaWJlZDogYm9vbGVhbjtcbiAgfSkge1xuICAgIGF3YWl0IChcbiAgICAgIHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhTdWJzY3JpcHRpb25Nb2RhbENvbXBvbmVudCwge1xuICAgICAgICBjbGFzczogJ21vZGFsLXNtJyxcbiAgICAgICAgYXJpYURlc2NyaWJlZGJ5OiAnbW9kYWwtYm9keScsXG4gICAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnLFxuICAgICAgICBpbml0aWFsU3RhdGUsXG4gICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWVcbiAgICAgIH0pLmNvbnRlbnQgYXMgU3Vic2NyaXB0aW9uTW9kYWxDb21wb25lbnRcbiAgICApLnJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZVNvdXJjZVBhY2thZ2VEZXRhaWxzKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnNvdXJjZVBhY2thZ2UgPSAoYXdhaXQgdGhpcy5nZXRQYWNrYWdlKHRoaXMuYXBwbGljYXRpb24ubWFuaWZlc3Q/LnNvdXJjZSkpLmRhdGE7XG4gICAgICBpZiAodGhpcy5zb3VyY2VQYWNrYWdlKSB7XG4gICAgICAgIHRoaXMucGFja2FnZVByb3BlcnRpZXMucHVzaCh7XG4gICAgICAgICAgbGFiZWw6IGdldHRleHQoJ1NvdXJjZSBwYWNrYWdlJyksXG4gICAgICAgICAgdmFsdWU6IHRoaXMuc291cmNlUGFja2FnZS5uYW1lLFxuICAgICAgICAgIHR5cGU6ICdsaW5rJyxcbiAgICAgICAgICBhY3Rpb246ICgpID0+XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFxuICAgICAgICAgICAgICBWaWV3Q29udGV4dC5BcHBsaWNhdGlvbi5yZXBsYWNlKCc6aWQnLCB0aGlzLnNvdXJjZVBhY2thZ2UuaWQudG9TdHJpbmcoKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuaW5nKGdldHRleHQoJ1VuYWJsZSB0byByZXNvbHZlIHNvdXJjZSBwYWNrYWdlLicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmV4dHJhY3RWZXJzaW9uSW5mb3JtYXRpb24odGhpcy5hcHBsaWNhdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGluaXRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBpZDogW3sgdmFsdWU6ICcnIH1dLFxuICAgICAgbmFtZTogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEyMCldLFxuICAgICAga2V5OiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTIwKV0sXG4gICAgICBjb250ZXh0UGF0aDogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEyMCldLFxuICAgICAgZGVzY3JpcHRpb246IFsnJywgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjAwKV0sXG4gICAgICByZXNvdXJjZXNVcmw6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHVzZXJuYW1lOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBwYXNzd29yZDogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgZXh0ZXJuYWxVcmw6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgIH0pO1xuICAgIGlmICghdGhpcy5oYXNBZG1pblBlcm1pc3Npb25zKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0FjdGl2aXR5TG9nU3VwcG9ydGVkQnlBcHAoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmlzT3duZXIoYXBwKSAmJlxuICAgICAgYXBwLnR5cGUgIT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UgJiZcbiAgICAgIGFwcC50eXBlICE9PSBBcHBsaWNhdGlvblR5cGUuRVhURVJOQUxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRCcmVhZGNydW1iQ29uZmlnKCkge1xuICAgIHRoaXMuYnJlYWRjcnVtYkNvbmZpZyA9IHtcbiAgICAgIGljb246IHRoaXMuaXNNaWNyb3NlcnZpY2UgPyAnbWljcm9jaGlwJyA6IHRoaXMuaXNGZWF0dXJlID8gJ3RhYicgOiAnYzh5LW1vZHVsZXMnLFxuICAgICAgbGFiZWw6IHRoaXMuaXNNaWNyb3NlcnZpY2VcbiAgICAgICAgPyBnZXR0ZXh0KCdNaWNyb3NlcnZpY2VzJylcbiAgICAgICAgOiB0aGlzLmlzRmVhdHVyZVxuICAgICAgICA/IGdldHRleHQoJ0ZlYXR1cmVzJylcbiAgICAgICAgOiBnZXR0ZXh0KCdBbGwgYXBwbGljYXRpb25zJyksXG4gICAgICBwYXRoOiB0aGlzLmlzTWljcm9zZXJ2aWNlXG4gICAgICAgID8gJ21pY3Jvc2VydmljZXMnXG4gICAgICAgIDogdGhpcy5pc0ZlYXR1cmVcbiAgICAgICAgPyAnZWNvc3lzdGVtL2ZlYXR1cmVzJ1xuICAgICAgICA6ICdlY29zeXN0ZW0vYXBwbGljYXRpb25zJ1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRCaW5hcnlNbygpIHtcbiAgICB0aGlzLmJpbmFyeU1vID0gKGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwodGhpcy5hcHBsaWNhdGlvbi5hY3RpdmVWZXJzaW9uSWQpKS5kYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleHRyYWN0VmVyc2lvbkluZm9ybWF0aW9uKGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24pIHtcbiAgICBpZiAoIWFwcGxpY2F0aW9uLm1hbmlmZXN0LmlzUGFja2FnZSAmJiAhYXBwbGljYXRpb24ubWFuaWZlc3Quc291cmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmx1ZXByaW50QXBwbGljYXRpb25JZCA9IGFwcGxpY2F0aW9uLm1hbmlmZXN0Py5zb3VyY2U7XG4gICAgY29uc3QgY3VycmVudFZlcnNpb24gPSBhcHBsaWNhdGlvbi5tYW5pZmVzdD8udmVyc2lvbjtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGRhdGE6IGJsdWVwcmludEFwcGxpY2F0aW9uVmVyc2lvbnMgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RWZXJzaW9ucyhcbiAgICAgICAgYmx1ZXByaW50QXBwbGljYXRpb25JZFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGJsdWVwcmludExhdGVzdFZlcnNpb24gPSB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZ2V0QXBwbGljYXRpb25WZXJzaW9uT2JqZWN0QnlUYWcoXG4gICAgICAgIGJsdWVwcmludEFwcGxpY2F0aW9uVmVyc2lvbnMsXG4gICAgICAgICdsYXRlc3QnXG4gICAgICApO1xuICAgICAgdGhpcy5ibHVlcHJpbnRBcHBsaWNhdGlvblZlcnNpb24gPSBibHVlcHJpbnRMYXRlc3RWZXJzaW9uLnZlcnNpb247XG4gICAgICB0aGlzLmlzVXBkYXRlQXZhaWxhYmxlID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnNob3VsZFVwZ3JhZGVQYWNrYWdlKFxuICAgICAgICBjdXJyZW50VmVyc2lvbixcbiAgICAgICAgYmx1ZXByaW50TGF0ZXN0VmVyc2lvblxuICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm5pbmcoZ2V0dGV4dCgnVW5hYmxlIHRvIHJlc29sdmUgdmVyc2lvbnMgb2Ygc291cmNlIHBhY2thZ2UuJykpO1xuICAgIH1cbiAgfVxufVxuIiwiPGM4eS10aXRsZT57eyBhcHBsaWNhdGlvbiB8IGh1bWFuaXplQXBwTmFtZSB8IGFzeW5jIH19PC9jOHktdGl0bGU+XG5cbjxjOHktYnJlYWRjcnVtYiAqbmdJZj1cIiFpc01pY3Jvc2VydmljZVwiPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSBbaWNvbl09XCInYzh5LWF0b20nXCIgW2xhYmVsXT1cIidFY29zeXN0ZW0nIHwgdHJhbnNsYXRlXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidjOHktbW9kdWxlcydcIlxuICAgIFtsYWJlbF09XCInQXBwbGljYXRpb25zJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJ2Vjb3N5c3RlbS9hcHBsaWNhdGlvbnMnXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCJicmVhZGNydW1iQ29uZmlnPy5pY29uXCJcbiAgICBbbGFiZWxdPVwiYnJlYWRjcnVtYkNvbmZpZz8ubGFiZWxcIlxuICAgIFtwYXRoXT1cImJyZWFkY3J1bWJDb25maWc/LnBhdGhcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSBbbGFiZWxdPVwiYXBwbGljYXRpb24gfCBodW1hbml6ZUFwcE5hbWUgfCBhc3luY1wiPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2xhYmVsXT1cIidQcm9wZXJ0aWVzJyB8IHRyYW5zbGF0ZVwiPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxjOHktYnJlYWRjcnVtYiAqbmdJZj1cImlzTWljcm9zZXJ2aWNlXCI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtIFtpY29uXT1cIidjOHktYXRvbSdcIiBbbGFiZWxdPVwiJ0Vjb3N5c3RlbScgfCB0cmFuc2xhdGVcIj48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiYnJlYWRjcnVtYkNvbmZpZz8uaWNvblwiXG4gICAgW2xhYmVsXT1cImJyZWFkY3J1bWJDb25maWc/LmxhYmVsXCJcbiAgICBbcGF0aF09XCJicmVhZGNydW1iQ29uZmlnPy5wYXRoXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2xhYmVsXT1cImFwcGxpY2F0aW9uIHwgaHVtYW5pemVBcHBOYW1lIHwgYXN5bmNcIj48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtIFtsYWJlbF09XCInUHJvcGVydGllcycgfCB0cmFuc2xhdGVcIj48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48ZGl2IGNsYXNzPVwicm93XCI+XG4gIDxkaXYgW25nQ2xhc3NdPVwieyAnY29sLW1kLTgnOiAhaXNBY3Rpdml0eUxvZ1N1cHBvcnRlZCwgJ2NvbC1tZC0xMic6IGlzQWN0aXZpdHlMb2dTdXBwb3J0ZWQgfVwiPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiYXBwbGljYXRpb25cIlxuICAgICAgW25nQ2xhc3NdPVwieyAnZC1ncmlkIGdyaWRfX2NvbC0tNy01LS1tZCc6IGlzQWN0aXZpdHlMb2dTdXBwb3J0ZWQgfVwiXG4gICAgICBjbGFzcz1cImNhcmQgY29udGVudC1mdWxscGFnZVwiXG4gICAgPlxuICAgICAgPGZvcm1cbiAgICAgICAgKG5nU3VibWl0KT1cImZvcm1Hcm91cC52YWxpZCAmJiBzYXZlKGZvcm1Hcm91cC52YWx1ZSlcIlxuICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGQtY29sIGNvbnRlbnQtZnVsbHBhZ2VcIlxuICAgICAgICBub3ZhbGlkYXRlXG4gICAgICA+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nXCIgY2xhc3M9XCJkLWNvbnRlbnRzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgc2VwYXJhdG9yLWJvdHRvbSBsYXJnZS1wYWRkaW5nIGZsZXgtbm8tc2hyaW5rXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4LW1kIGEtaS1zdGFydCB0ZXh0LWNlbnRlciB0ZXh0LWxlZnQtbWRcIj5cbiAgICAgICAgICAgICAgPGM4eS1hcHAtaWNvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzUGFja2FnZSAmJiAhaXNGZWF0dXJlICYmICFpc01pY3Jvc2VydmljZSAmJiAhaXNFeHRlcm5hbFwiXG4gICAgICAgICAgICAgICAgW2FwcF09XCJhcHBsaWNhdGlvblwiXG4gICAgICAgICAgICAgICAgW2NvbnRleHRQYXRoXT1cImFwcGxpY2F0aW9uLmNvbnRleHRQYXRoXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJhcHBsaWNhdGlvbi5uYW1lXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tNDhcIlxuICAgICAgICAgICAgICA+PC9jOHktYXBwLWljb24+XG4gICAgICAgICAgICAgIDxpICpuZ0lmPVwiaXNQYWNrYWdlXCIgYzh5SWNvbj1cImJpZy1wYXJjZWxcIiBjbGFzcz1cImljb24tNDhcIj48L2k+XG4gICAgICAgICAgICAgIDxpICpuZ0lmPVwiaXNGZWF0dXJlXCIgYzh5SWNvbj1cInRhYlwiIGNsYXNzPVwiaWNvbi00OFwiPjwvaT5cbiAgICAgICAgICAgICAgPGkgKm5nSWY9XCJpc01pY3Jvc2VydmljZVwiIGM4eUljb249XCJtaWNyb2NoaXBcIiBjbGFzcz1cImljb24tNDhcIj48L2k+XG4gICAgICAgICAgICAgIDxpICpuZ0lmPVwiaXNFeHRlcm5hbFwiIGM4eUljb249XCJnbG9iZTFcIiBjbGFzcz1cImljb24tNDhcIj48L2k+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtdC1tZC0xNiBwLWwtbWQtMTYgcC1yLW1kLTMyIGZsZXgtZ3Jvd1wiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiaDQgdGV4dC1tZWRpdW0gbS1iLThcIj57eyBhcHBsaWNhdGlvbiB8IGh1bWFuaXplQXBwTmFtZSB8IGFzeW5jIH19PC9wPlxuICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiIWlzT3duZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cInRleHQtbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgYXBwbGljYXRpb24uZGVzY3JpcHRpb24gfHwgKCdObyBkZXNjcmlwdGlvbiBhdmFpbGFibGUuJyB8IHRyYW5zbGF0ZSkgfX1cbiAgICAgICAgICAgICAgICAgIDwvZW0+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc093bmVyXCIgY2xhc3M9XCJmb3JtLWdyb3VwIG0tYi0wXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyB1cGRhdGVkOiBmb3JtR3JvdXA/LmNvbnRyb2xzPy5kZXNjcmlwdGlvbj8uZGlydHkgfVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICBjOHktdGV4dGFyZWEtYXV0b3Jlc2l6ZVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIG5vLXJlc2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnTm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlLicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1yaWdodC1tZCBtLXQtNFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImFwcFN0YXRlPy5jbGFzc1wiIGNsYXNzPVwibGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGFwcFN0YXRlPy5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZml0LXcgbS10LTJcIiAqbmdJZj1cImlzUGFja2FnZSB8fCBpc01pY3Jvc2VydmljZVwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbFwiIHRyYW5zbGF0ZT5WZXJzaW9uOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJwLWwtNCB0ZXh0LWJvbGRcIj57eyBhcHBsaWNhdGlvbi5tYW5pZmVzdD8udmVyc2lvbiB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpdC13IG0tdC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsXCIgdHJhbnNsYXRlPkNyZWF0aW9uIHRpbWU6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInAtbC00IHRleHQtYm9sZFwiPnt7IChiaW5hcnlNbz8uY3JlYXRpb25UaW1lIHwgYzh5RGF0ZSkgfHwgJy0tLScgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLXQtOFwiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc1VwZGF0ZUF2YWlsYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVUb0xhdGVzdFZlcnNpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1wZW5kaW5nJzogaXNVcGRhdGVPbmdvaW5nIH1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4td2FybmluZyBidG4tc21cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyAnVXBkYXRlIGF2YWlsYWJsZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkFwcChhcHBsaWNhdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZU9wZW5JbkJyb3dzZXJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNhbk9wZW5JbkJyb3dzZXJcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc21cIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdPcGVuJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aSBbYzh5SWNvbl09XCInZXh0ZXJuYWwtbGluaydcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdPcGVuJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2FuT3BlbkluQnJvd3NlciAmJiBkaXNhYmxlT3BlbkluQnJvd3NlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBpcyBvdmVyd3JpdHRlbiBieSBhIGN1c3RvbSBhcHBsaWNhdGlvbiBzaGFyaW5nIHRoZSBzYW1lIHBhdGhcbiAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0N1c3RvbU1pY3Jvc2VydmljZVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN1YnNjcmliZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc1N1YnNjcmliZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbVwiXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnU3Vic2NyaWJlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBbYzh5SWNvbl09XCInY2hlY2stY2lyY2xlLW8nXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdTdWJzY3JpYmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVuc3Vic2NyaWJlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNTdWJzY3JpYmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc21cIlxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1Vuc3Vic2NyaWJlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBbYzh5SWNvbl09XCInbWludXMtY2lyY2xlJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAnVW5zdWJzY3JpYmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGwgYmctbGV2ZWwtMCBmbGV4LWdyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIGxhcmdlLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzUGFja2FnZVwiIGNsYXNzPVwicm93IHAtMTZcIj5cbiAgICAgICAgICAgICAgICA8Yzh5LXByb3BlcnRpZXMtbGlzdFxuICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiYXBwbGljYXRpb24ubWFuaWZlc3RcIlxuICAgICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwicGFja2FnZVByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidQYWNrYWdlIGRldGFpbHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFtlbXB0eUxhYmVsXT1cIictLS0nXCJcbiAgICAgICAgICAgICAgICAgIGljb249XCJpbmZvXCJcbiAgICAgICAgICAgICAgICA+PC9jOHktcHJvcGVydGllcy1saXN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNvdXJjZVBhY2thZ2VcIiBjbGFzcz1cInJvdyBwLTE2XCI+XG4gICAgICAgICAgICAgICAgPGM4eS1wcm9wZXJ0aWVzLWxpc3RcbiAgICAgICAgICAgICAgICAgIFtkYXRhXT1cInNvdXJjZVBhY2thZ2UubWFuaWZlc3RcIlxuICAgICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwicGFja2FnZVByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidTb3VyY2UgcGFja2FnZSBpbmZvcm1hdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgW2VtcHR5TGFiZWxdPVwiJy0tLSdcIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cImluZm9cIlxuICAgICAgICAgICAgICAgID48L2M4eS1wcm9wZXJ0aWVzLWxpc3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCI+XG4gICAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhcHBJZFwiPklEPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYXBwSWRcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03XCI+XG4gICAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnTmFtZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiIWlzT3duZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLiBNeSBhcHBsaWNhdGlvbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNVwiPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0FwcGxpY2F0aW9uIGtleScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiYXBwbGljYXRpb24uaWQgfHwgIWlzT3duZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwia2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJrZXlcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gbXktYXBwbGljYXRpb24ta2V5JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03XCI+XG4gICAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnVHlwZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhcHBsaWNhdGlvbi5pZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb3JtLWNvbnRyb2wtc3RhdGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cImljb25NYXBbYXBwbGljYXRpb24udHlwZV1cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFwcGxpY2F0aW9uLnR5cGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgW25nU3dpdGNoXT1cImFwcGxpY2F0aW9uLnR5cGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInSE9TVEVEJ1wiPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ1BhdGgnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvblwiPi9hcHBzLzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJhcHBsaWNhdGlvbi5pZCB8fCAhaXNPd25lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY29udGV4dFBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLiBteS1hcHBsaWNhdGlvbmB1c2VkIGluIFVSTGAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb250ZXh0UGF0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ01JQ1JPU0VSVklDRSdcIj5cbiAgICAgICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdQYXRoJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb25cIj4vc2VydmljZS88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiYXBwbGljYXRpb24uaWQgfHwgIWlzT3duZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImNvbnRleHRQYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gbXktbWljcm9zZXJ2aWNlYHVzZWQgaW4gVVJMYCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbnRleHRQYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhcHBsaWNhdGlvbi5tYW5pZmVzdC52ZXJzaW9uXCIgY2xhc3M9XCJjb2wtc20tNCBtLWItMTYgZmxleC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdWZXJzaW9uJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb3JtLWNvbnRyb2wtc3RhdGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBhcHBsaWNhdGlvbi5tYW5pZmVzdC52ZXJzaW9uIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFwcGxpY2F0aW9uLm1hbmlmZXN0Lmlzb2xhdGlvblwiIGNsYXNzPVwiY29sLXNtLTQgbS1iLTE2IGZsZXgtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnSXNvbGF0aW9uJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb3JtLWNvbnRyb2wtc3RhdGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNpbmdsZVRlbmFudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBbYzh5SWNvbl09XCInYzh5LWVudGVycHJpc2UnXCIgY2xhc3M9XCJjOHktaWNvbi1kdW9jb2xvciBoNFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ1NpbmdsZSB0ZW5hbnQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFzaW5nbGVUZW5hbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2M4eS1zdWItdGVuYW50cydcIiBjbGFzcz1cImM4eS1pY29uLWR1b2NvbG9yIGljb24tMzJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdNdWx0aSB0ZW5hbnQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFwcGxpY2F0aW9uLm1hbmlmZXN0Lmlzb2xhdGlvblwiIGNsYXNzPVwiY29sLXNtLTQgbS1iLTE2IGZsZXgtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQmlsbGluZyBtb2RlJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb3JtLWNvbnRyb2wtc3RhdGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN1YnNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidSZXNvdXJjZXMgdXNhZ2UgYXNzaWduZWQgdG86IE93bmVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdTdWJzY3JpcHRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFzdWJzY3JpcHRpb24gJiYgc2luZ2xlVGVuYW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ1Jlc291cmNlcyB1c2FnZSBhc3NpZ25lZCB0bzogU3Vic2NyaWJlciB8IHRyYW5zbGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnUmVzb3VyY2VzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhc3Vic2NyaXB0aW9uICYmICFzaW5nbGVUZW5hbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInUmVzb3VyY2VzIHVzYWdlIGFzc2lnbmVkIHRvOiBPd25lcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnUmVzb3VyY2VzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFwcGxpY2F0aW9uLm1hbmlmZXN0LnByb3ZpZGVyXCIgY2xhc3M9XCJsZWdlbmQgZm9ybS1ibG9jayBtLXQtNDBcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ1Byb3ZpZGVyJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1pbmxpbmVcIiAqbmdJZj1cImFwcGxpY2F0aW9uLm1hbmlmZXN0LnByb3ZpZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhcHBsaWNhdGlvbi5tYW5pZmVzdC5wcm92aWRlci5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00IG0tYi0xNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdOYW1lJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvcm0tY29udHJvbC1zdGF0aWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXBwbGljYXRpb24ubWFuaWZlc3QucHJvdmlkZXIubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFwcGxpY2F0aW9uLm1hbmlmZXN0LnByb3ZpZGVyLmRvbWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNCBtLWItMTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnRG9tYWluJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvcm0tY29udHJvbC1zdGF0aWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXBwbGljYXRpb24ubWFuaWZlc3QucHJvdmlkZXIuZG9tYWluIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYXBwbGljYXRpb24ubWFuaWZlc3QucHJvdmlkZXIuc3VwcG9ydFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNCBtLWItMTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnU3VwcG9ydCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb3JtLWNvbnRyb2wtc3RhdGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFwcGxpY2F0aW9uLm1hbmlmZXN0LnByb3ZpZGVyLnN1cHBvcnQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidSRVBPU0lUT1JZJ1wiPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ1BhdGgnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvblwiPi9hcHBzLzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJhcHBsaWNhdGlvbi5pZCB8fCAhaXNPd25lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb250ZXh0UGF0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY29udGV4dFBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLiBteS1hcHBsaWNhdGlvbmB1c2VkIGluIFVSTGAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnU2VydmVyIFVSTCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJlc291cmNlc1VybFwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVzb3VyY2VzVXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuIG15LWFwcGxpY2F0aW9uYHVzZWQgaW4gVVJMYCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInVybFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ1VzZXJuYW1lJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ1c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInVzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdQYXNzd29yZCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInRVhURVJOQUwnXCI+XG4gICAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnRXh0ZXJuYWwgVVJMJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIFtwYXR0ZXJuXT1cIideKD8hamF2YXNjcmlwdDopLisnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiIWlzT3duZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJleHRlcm5hbFVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImV4dGVybmFsVXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuJyB8IHRyYW5zbGF0ZSB9fSBodHRwOi8vd3d3LmV4YW1wbGUuY29tL1wiXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidXJsXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlcz5cbiAgICAgICAgICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidwYXR0ZXJuJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCInVmFsaWQgVVJMIHJlcXVpcmVkLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgID48L2M4eS1tZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgICA8L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ3VzdG9tTWljcm9zZXJ2aWNlXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzTG9hZGluZ1wiIGNsYXNzPVwiZC1jb250ZW50c1wiPlxuICAgICAgICAgICAgICA8Yzh5LXVwbG9hZC1hcmNoaXZlXG4gICAgICAgICAgICAgICAgWyhhcHBsaWNhdGlvbildPVwiYXBwbGljYXRpb25cIlxuICAgICAgICAgICAgICAgIChyZWZyZXNoKT1cIm9uTmV3QXJjaGl2ZSgpXCJcbiAgICAgICAgICAgICAgPjwvYzh5LXVwbG9hZC1hcmNoaXZlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJhcHBsaWNhdGlvbiAmJiAhIWlzT3duZXIgJiYgaGFzQWRtaW5QZXJtaXNzaW9uc1wiXG4gICAgICAgICAgICBjbGFzcz1cImNhcmQtZm9vdGVyIHNlcGFyYXRvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlKClcIlxuICAgICAgICAgICAgICAqbmdJZj1cImNhbkRlbGV0ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdEZWxldGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdEZWxldGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFhcHBsaWNhdGlvbi50eXBlIHx8IGZvcm1Hcm91cC5pbnZhbGlkIHx8IGZvcm1Hcm91cC5wcmlzdGluZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1mb3JtXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Zvcm0+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJpc0FjdGl2aXR5TG9nU3VwcG9ydGVkXCIgY2xhc3M9XCJjb250ZW50LWZ1bGxwYWdlIGQtZmxleCBkLWNvbCBiZy1sZXZlbC0xXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBzZXBhcmF0b3JcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZVwiIHRyYW5zbGF0ZT5BY3Rpdml0eSBsb2c8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1sLWF1dG9cIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImxvYWQoKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGJ0bi1zbVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1JlbG9hZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgW25nQ2xhc3NdPVwieyAnaWNvbi1zcGluJzogaXNMb2FkaW5nIH1cIiBjOHlJY29uPVwicmVmcmVzaFwiPjwvaT5cbiAgICAgICAgICAgICAge3sgJ1JlbG9hZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ1wiIGNsYXNzPVwicC0xNiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGM4eS1hY3Rpdml0eS1sb2dcbiAgICAgICAgICAqbmdJZj1cIiFpc0xvYWRpbmdcIlxuICAgICAgICAgIFtoYXNBZG1pblBlcm1pc3Npb25zXT1cImhhc0FkbWluUGVybWlzc2lvbnNcIlxuICAgICAgICAgIFthcHBsaWNhdGlvbl09XCJhcHBsaWNhdGlvblwiXG4gICAgICAgICAgY2xhc3M9XCJkLWNvbnRlbnRzXCJcbiAgICAgICAgPjwvYzh5LWFjdGl2aXR5LWxvZz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
303
|
+
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.EcosystemService }, { type: i1.Router }, { type: i3.FormBuilder }, { type: i4.ApplicationService }, { type: i5.AlertService }, { type: i4.InventoryService }, { type: i5.Permissions }, { type: i5.ModalService }, { type: i6.TranslateService }, { type: i7.BsModalService }, { type: i5.GainsightService }]; } });
|
|
304
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tcHJvcGVydGllcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vYXBwbGljYXRpb24tcHJvcGVydGllcy9hcHBsaWNhdGlvbi1wcm9wZXJ0aWVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi1wcm9wZXJ0aWVzL2FwcGxpY2F0aW9uLXByb3BlcnRpZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsV0FBVyxFQUdYLGdCQUFnQixFQUNoQixTQUFTLEVBQ1YsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLFdBQVcsRUFFWCxXQUFXLEVBQ1gsT0FBTyxFQUNSLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2xCLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7Ozs7Ozs7Ozs7QUFFL0YsTUFBTSx1QkFBdUIsR0FBVyxnQkFBZ0IsQ0FBQztBQUN6RCxNQUFNLHNCQUFzQixHQUFXLFlBQVksQ0FBQztBQU1wRCxNQUFN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QyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDLENBQUM7U0FDckY7SUFDSCxDQUFDOzsySEF0VlUsOEJBQThCOytHQUE5Qiw4QkFBOEIsa0VDdEMzQyw4bHBCQStkQTsyRkR6YmEsOEJBQThCO2tCQUoxQyxTQUFTOytCQUNFLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvblNlcnZpY2UsXG4gIEFwcGxpY2F0aW9uVHlwZSxcbiAgQmlsbGluZ01vZGUsXG4gIElBcHBsaWNhdGlvbixcbiAgSU1hbmFnZWRPYmplY3QsXG4gIEludmVudG9yeVNlcnZpY2UsXG4gIElzb2xhdGlvblxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIE1vZGFsU2VydmljZSxcbiAgUGVybWlzc2lvbnMsXG4gIFByb3BlcnRpZXNMaXN0SXRlbSxcbiAgVmlld0NvbnRleHQsXG4gIGdldHRleHRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvblN0YXRlLFxuICBFY29zeXN0ZW1TZXJ2aWNlLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0UsXG4gIHBhY2thZ2VQcm9wZXJ0aWVzXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNvc3lzdGVtL3NoYXJlZCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL3N1YnNjcmlwdGlvbi1tb2RhbC9zdWJzY3JpcHRpb24tbW9kYWwuY29tcG9uZW50JztcblxuY29uc3QgTUlDUk9TRVJWSUNFU19CQVNFX1BBVEg6IHN0cmluZyA9ICcvbWljcm9zZXJ2aWNlcyc7XG5jb25zdCBBUFBMSUNBVElPTlNfQkFTRV9QQVRIOiBzdHJpbmcgPSAnL2Vjb3N5c3RlbSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hcHBsaWNhdGlvbi1wcm9wZXJ0aWVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcGxpY2F0aW9uLXByb3BlcnRpZXMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uUHJvcGVydGllc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIENVUlJFTlRfTE9DQVRJT04gPSBsb2NhdGlvbi5ocmVmO1xuICBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgYXBwbGljYXRpb246IElBcHBsaWNhdGlvbjtcbiAgYmluYXJ5TW86IElNYW5hZ2VkT2JqZWN0O1xuICBzaW5nbGVUZW5hbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3Vic2NyaXB0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbk9wZW5JbkJyb3dzZXI6IGJvb2xlYW47XG4gIGRpc2FibGVPcGVuSW5Ccm93c2VyOiBib29sZWFuO1xuICBjYW5EZWxldGU6IGJvb2xlYW47XG4gIGlzT3duZXI6IGJvb2xlYW47XG4gIGlzU3Vic2NyaWJlZDogYm9vbGVhbjtcbiAgaXNQYWNrYWdlOiBib29sZWFuO1xuICBpc01pY3Jvc2VydmljZTogYm9vbGVhbjtcbiAgaXNGZWF0dXJlOiBib29sZWFuO1xuICBpc0V4dGVybmFsOiBib29sZWFuO1xuICBpc1VucGFja2VkOiBib29sZWFuO1xuICBpY29uTWFwID0ge1xuICAgIEhPU1RFRDogJ2Nsb3VkJyxcbiAgICBFWFRFUk5BTDogJ2V4dGVybmFsLWxpbmstc3F1YXJlJyxcbiAgICBNSUNST1NFUlZJQ0U6ICdtaWNyb2NoaXAnXG4gIH07XG4gIGFwcFN0YXRlOiBBcHBsaWNhdGlvblN0YXRlO1xuICBzb3VyY2VQYWNrYWdlOiBJQXBwbGljYXRpb247XG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XG4gIGlzQWN0aXZpdHlMb2dTdXBwb3J0ZWQ6IGJvb2xlYW47XG4gIGlzQ3VzdG9tTWljcm9zZXJ2aWNlOiBib29sZWFuO1xuICBoYXNBZG1pblBlcm1pc3Npb25zID0gZmFsc2U7XG5cbiAgYnJlYWRjcnVtYkNvbmZpZzogeyBpY29uOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IHBhdGg6IHN0cmluZyB9O1xuICBwYWNrYWdlUHJvcGVydGllczogUHJvcGVydGllc0xpc3RJdGVtW10gPSBbLi4ucGFja2FnZVByb3BlcnRpZXNdO1xuICBpc1VwZGF0ZUF2YWlsYWJsZSA9IGZhbHNlO1xuICBpc1VwZGF0ZU9uZ29pbmcgPSBmYWxzZTtcblxuICBwcml2YXRlIGJsdWVwcmludEFwcGxpY2F0aW9uVmVyc2lvbjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uczogUGVybWlzc2lvbnMsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGJzTW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaGFzQWRtaW5QZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMuaGFzUm9sZSgnUk9MRV9BUFBMSUNBVElPTl9NQU5BR0VNRU5UX0FETUlOJyk7XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoKCkge1xuICAgIGF3YWl0IHRoaXMubG9hZCgpO1xuICAgIHRoaXMuaXNVbnBhY2tlZCA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc1VucGFja2VkKHRoaXMuYXBwbGljYXRpb24pO1xuICAgIHRoaXMuaXNQYWNrYWdlID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmlzUGFja2FnZSh0aGlzLmFwcGxpY2F0aW9uKTtcbiAgICB0aGlzLmlzRmVhdHVyZSA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc0ZlYXR1cmUodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgdGhpcy5pc0V4dGVybmFsID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmlzRXh0ZXJuYWwodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgdGhpcy5pc01pY3Jvc2VydmljZSA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc01pY3Jvc2VydmljZSh0aGlzLmFwcGxpY2F0aW9uKTtcbiAgICB0aGlzLmFwcFN0YXRlID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEFwcFN0YXRlKHRoaXMuYXBwbGljYXRpb24pO1xuXG4gICAgaWYgKHRoaXMuaXNVbnBhY2tlZCkge1xuICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlU291cmNlUGFja2FnZURldGFpbHMoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEJyZWFkY3J1bWJDb25maWcoKTtcblxuICAgIGlmICh0aGlzLmlzQ3VzdG9tTWljcm9zZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvYWRCaW5hcnlNbygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWQoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICBhd2FpdCB0aGlzLmxvYWRBcHBsaWNhdGlvbigpO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBvbkFwcGxpY2F0aW9uKGFwcDogSUFwcGxpY2F0aW9uKSB7XG4gICAgaWYgKGFwcC5tYW5pZmVzdCkge1xuICAgICAgdGhpcy5zaW5nbGVUZW5hbnQgPSBhcHAubWFuaWZlc3QuaXNvbGF0aW9uID09PSBJc29sYXRpb24uUEVSX1RFTkFOVDtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gYXBwLm1hbmlmZXN0LmJpbGxpbmdNb2RlID09PSBCaWxsaW5nTW9kZS5TVUJTQ1JJUFRJT047XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLmFwcGxpY2F0aW9uLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoTUlDUk9TRVJWSUNFU19CQVNFX1BBVEgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKEFQUExJQ0FUSU9OU19CQVNFX1BBVEgpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5BcHAoYXBwKSB7XG4gICAgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLm9wZW5BcHAoYXBwKTtcbiAgfVxuXG4gIGdldFBhY2thZ2UoZW50aXR5T3JJZDogc3RyaW5nIHwgbnVtYmVyIHwgSUFwcGxpY2F0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRldGFpbChlbnRpdHlPcklkKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmRlbGV0ZUFwcCh0aGlzLmFwcGxpY2F0aW9uKTtcbiAgICAgIGlmICh0aGlzLmFwcGxpY2F0aW9uLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChNSUNST1NFUlZJQ0VTX0JBU0VfUEFUSCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKEFQUExJQ0FUSU9OU19CQVNFX1BBVEgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlKCkge1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHsgYXBwbGljYXRpb246IHRoaXMuYXBwbGljYXRpb24sIGlzU3Vic2NyaWJlZDogZmFsc2UgfTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpcm1TdWJzY3JpcHRpb25DaGFuZ2UoaW5pdGlhbFN0YXRlKTtcbiAgICB0aGlzLmxvYWRBcHBsaWNhdGlvbigpO1xuICB9XG5cbiAgYXN5bmMgdW5zdWJzY3JpYmUoKSB7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0geyBhcHBsaWNhdGlvbjogdGhpcy5hcHBsaWNhdGlvbiwgaXNTdWJzY3JpYmVkOiB0cnVlIH07XG4gICAgYXdhaXQgdGhpcy5jb25maXJtU3Vic2NyaXB0aW9uQ2hhbmdlKGluaXRpYWxTdGF0ZSk7XG4gICAgdGhpcy5sb2FkQXBwbGljYXRpb24oKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRBcHBsaWNhdGlvbigpIHtcbiAgICBjb25zdCB7IGlkIH0gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmVudC5kYXRhLmNvbnRleHREYXRhO1xuICAgIHRoaXMuYXBwbGljYXRpb24gPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZ2V0QXBwbGljYXRpb24oaWQpO1xuICAgIGlmICh0aGlzLmFwcGxpY2F0aW9uLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnbmFtZScpLmRpc2FibGUoKTtcbiAgICB9XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7IC4uLnRoaXMuYXBwbGljYXRpb24gfSk7XG4gICAgdGhpcy5jYW5PcGVuSW5Ccm93c2VyID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmNhbk9wZW5BcHBJbkJyb3dzZXIodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgdGhpcy5kaXNhYmxlT3BlbkluQnJvd3NlciA9XG4gICAgICB0aGlzLmNhbk9wZW5JbkJyb3dzZXIgJiZcbiAgICAgIChhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuaXNPdmVyd3JpdHRlbkJ5Q3VzdG9tQXBwKHRoaXMuYXBwbGljYXRpb24pKTtcbiAgICB0aGlzLmNhbkRlbGV0ZSA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5jYW5EZWxldGVBcHAodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgdGhpcy5pc093bmVyID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmlzT3duZXIodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgdGhpcy5pc0FjdGl2aXR5TG9nU3VwcG9ydGVkID0gdGhpcy5pc0FjdGl2aXR5TG9nU3VwcG9ydGVkQnlBcHAodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgdGhpcy5pc0N1c3RvbU1pY3Jvc2VydmljZSA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc0N1c3RvbU1pY3Jvc2VydmljZSh0aGlzLmFwcGxpY2F0aW9uKTtcbiAgICB0aGlzLmlzU3Vic2NyaWJlZCA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5jaGVja0lmU3Vic2NyaWJlZCh0aGlzLmFwcGxpY2F0aW9uKTtcbiAgICB0aGlzLm9uQXBwbGljYXRpb24odGhpcy5hcHBsaWNhdGlvbik7XG4gIH1cblxuICBhc3luYyBzYXZlKGFwcDogSUFwcGxpY2F0aW9uKSB7XG4gICAgYXBwLmlkID0gdGhpcy5hcHBsaWNhdGlvbi5pZDtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwZGF0ZUFwcChhcHApO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcHBsaWNhdGlvbiBzYXZlZC4nKSk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5yZXNldCgpO1xuICAgICAgdGhpcy5sb2FkQXBwbGljYXRpb24oKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuXG4gIG9uTmV3QXJjaGl2ZSgpIHtcbiAgICB0aGlzLmxvYWRCaW5hcnlNbygpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVG9MYXRlc3RWZXJzaW9uKCkge1xuICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoXG4gICAgICBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5BUFBMSUNBVElPTl9QUk9QRVJUSUVTLFxuICAgICAge1xuICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQ09NUE9ORU5UUy5BUFBMSUNBVElPTl9QUk9QRVJUSUVTLFxuICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQUNUSU9OUy5VUERBVEVfQVZBSUxBQkxFLFxuICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTlxuICAgICAgfVxuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJhbnNsYXRlZEJvZHkgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgIGBZb3UncmUgdXNpbmcgdGhlIHZlcnNpb24ge3sgY3VycmVudFZlcnNpb24gfX0gb2YgdGhlIHt7IHBhY2thZ2VOYW1lIH19IHBhY2thZ2UsIHRoZSBsYXRlc3QgdmVyc2lvbiBhdmFpbGFibGUgaXMge3sgbGF0ZXN0VmVyc2lvbiB9fSwgZG8geW91IHdhbnQgdG8gdXBkYXRlPyBZb3UgY2FuIGFsd2F5cyByZXZlcnQgdG8gYSBwcmV2aW91cyB2ZXJzaW9uIGluIHRoZSBBY3Rpdml0eSBsb2cgcGFuZWwuYFxuICAgICAgICApLFxuICAgICAgICB7XG4gICAgICAgICAgY3VycmVudFZlcnNpb246IHRoaXMuYXBwbGljYXRpb24ubWFuaWZlc3Q/LnZlcnNpb24sXG4gICAgICAgICAgbGF0ZXN0VmVyc2lvbjogdGhpcy5ibHVlcHJpbnRBcHBsaWNhdGlvblZlcnNpb24sXG4gICAgICAgICAgcGFja2FnZU5hbWU6IHRoaXMuc291cmNlUGFja2FnZS5uYW1lXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5jb25maXJtKGdldHRleHQoJ1VwZGF0ZSBhcHBsaWNhdGlvbicpLCB0cmFuc2xhdGVkQm9keSwgJ3dhcm5pbmcnLCB7XG4gICAgICAgIG9rOiBnZXR0ZXh0KCdVcGRhdGUnKSxcbiAgICAgICAgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBtb2RhbCBjYW5jZWxlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNVcGRhdGVPbmdvaW5nID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPOiB1c2UgdGhlIGNvcnJlY3QgYmluYXJ5TW9JZCAoYWN0aXZlVmVyc2lvbklkIG9mIHRoZSB2ZXJzaW9uIG5vdCBhcHBsaWNhdGlvbilcbiAgICAgIGNvbnN0IGJpbmFyeU1vSWQgPSB0aGlzLnNvdXJjZVBhY2thZ2UuYWN0aXZlVmVyc2lvbklkO1xuICAgICAgYXdhaXQgdGhpcy51cGxvYWROZXdCaW5hcnkoYmluYXJ5TW9JZCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUucmVzPy5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICBhd2FpdCB0aGlzLmZhbGxCYWNrVG9DbG9uZVVwZGF0ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGdldHRleHQoJ0ZhaWxlZCB0byB1cGRhdGUgYXBwbGljYXRpb24uJykpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzVXBkYXRlT25nb2luZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBsb2FkTmV3QmluYXJ5KGJpbmFyeU1vSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHsgZGF0YTogYmluYXJ5TW8gfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwoYmluYXJ5TW9JZCk7XG4gICAgY29uc3QgYmluYXJ5ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmJpbmFyeS5kb3dubG9hZChiaW5hcnlNby5pZCk7XG4gICAgY29uc3QgYmxvYiA9IGF3YWl0IGJpbmFyeS5ibG9iKCk7XG4gICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgYmluYXJ5TW8ubmFtZSk7XG4gICAgY29uc3QgYXBwID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwbG9hZEFyY2hpdmVUb0FwcChmaWxlLCB0aGlzLmFwcGxpY2F0aW9uLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwZGF0ZUFwcE1hbmlmZXN0KGFwcCwgdGhpcy5zb3VyY2VQYWNrYWdlKTtcbiAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0FwcGxpY2F0aW9uIHVwZGF0ZWQuJykpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmYWxsQmFja1RvQ2xvbmVVcGRhdGUoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YTogY2xvbmVkQXBwIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5jbG9uZSh0aGlzLnNvdXJjZVBhY2thZ2UpO1xuICAgICAgYXdhaXQgdGhpcy51cGxvYWROZXdCaW5hcnkoY2xvbmVkQXBwLmFjdGl2ZVZlcnNpb25JZCk7XG4gICAgICB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZGVsZXRlQXBwKGNsb25lZEFwcCwgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbmZpcm1TdWJzY3JpcHRpb25DaGFuZ2UoaW5pdGlhbFN0YXRlOiB7XG4gICAgYXBwbGljYXRpb246IElBcHBsaWNhdGlvbjtcbiAgICBpc1N1YnNjcmliZWQ6IGJvb2xlYW47XG4gIH0pIHtcbiAgICBhd2FpdCAoXG4gICAgICB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coU3Vic2NyaXB0aW9uTW9kYWxDb21wb25lbnQsIHtcbiAgICAgICAgY2xhc3M6ICdtb2RhbC1zbScsXG4gICAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgICBhcmlhTGFiZWxsZWRCeTogJ21vZGFsLXRpdGxlJyxcbiAgICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlXG4gICAgICB9KS5jb250ZW50IGFzIFN1YnNjcmlwdGlvbk1vZGFsQ29tcG9uZW50XG4gICAgKS5yZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc29sdmVTb3VyY2VQYWNrYWdlRGV0YWlscygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zb3VyY2VQYWNrYWdlID0gKGF3YWl0IHRoaXMuZ2V0UGFja2FnZSh0aGlzLmFwcGxpY2F0aW9uLm1hbmlmZXN0Py5zb3VyY2UpKS5kYXRhO1xuICAgICAgaWYgKHRoaXMuc291cmNlUGFja2FnZSkge1xuICAgICAgICB0aGlzLnBhY2thZ2VQcm9wZXJ0aWVzLnB1c2goe1xuICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdTb3VyY2UgcGFja2FnZScpLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnNvdXJjZVBhY2thZ2UubmFtZSxcbiAgICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PlxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChcbiAgICAgICAgICAgICAgVmlld0NvbnRleHQuQXBwbGljYXRpb24ucmVwbGFjZSgnOmlkJywgdGhpcy5zb3VyY2VQYWNrYWdlLmlkLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICApXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uud2FybmluZyhnZXR0ZXh0KCdVbmFibGUgdG8gcmVzb2x2ZSBzb3VyY2UgcGFja2FnZS4nKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5leHRyYWN0VmVyc2lvbkluZm9ybWF0aW9uKHRoaXMuYXBwbGljYXRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgaWQ6IFt7IHZhbHVlOiAnJyB9XSxcbiAgICAgIG5hbWU6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxMjApXSxcbiAgICAgIGtleTogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEyMCldLFxuICAgICAgY29udGV4dFBhdGg6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxMjApXSxcbiAgICAgIGRlc2NyaXB0aW9uOiBbJycsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDIwMCldLFxuICAgICAgcmVzb3VyY2VzVXJsOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICB1c2VybmFtZTogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcGFzc3dvcmQ6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGV4dGVybmFsVXJsOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICB9KTtcbiAgICBpZiAoIXRoaXMuaGFzQWRtaW5QZXJtaXNzaW9ucykge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNBY3Rpdml0eUxvZ1N1cHBvcnRlZEJ5QXBwKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc093bmVyKGFwcCkgJiZcbiAgICAgIGFwcC50eXBlICE9PSBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFICYmXG4gICAgICBhcHAudHlwZSAhPT0gQXBwbGljYXRpb25UeXBlLkVYVEVSTkFMXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QnJlYWRjcnVtYkNvbmZpZygpIHtcbiAgICB0aGlzLmJyZWFkY3J1bWJDb25maWcgPSB7XG4gICAgICBpY29uOiB0aGlzLmlzTWljcm9zZXJ2aWNlID8gJ21pY3JvY2hpcCcgOiB0aGlzLmlzRmVhdHVyZSA/ICd0YWInIDogJ2M4eS1tb2R1bGVzJyxcbiAgICAgIGxhYmVsOiB0aGlzLmlzTWljcm9zZXJ2aWNlXG4gICAgICAgID8gZ2V0dGV4dCgnTWljcm9zZXJ2aWNlcycpXG4gICAgICAgIDogdGhpcy5pc0ZlYXR1cmVcbiAgICAgICAgPyBnZXR0ZXh0KCdGZWF0dXJlcycpXG4gICAgICAgIDogZ2V0dGV4dCgnQWxsIGFwcGxpY2F0aW9ucycpLFxuICAgICAgcGF0aDogdGhpcy5pc01pY3Jvc2VydmljZVxuICAgICAgICA/ICdtaWNyb3NlcnZpY2VzJ1xuICAgICAgICA6IHRoaXMuaXNGZWF0dXJlXG4gICAgICAgID8gJ2Vjb3N5c3RlbS9mZWF0dXJlcydcbiAgICAgICAgOiAnZWNvc3lzdGVtL2FwcGxpY2F0aW9ucydcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkQmluYXJ5TW8oKSB7XG4gICAgdGhpcy5iaW5hcnlNbyA9IChhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGV0YWlsKHRoaXMuYXBwbGljYXRpb24uYWN0aXZlVmVyc2lvbklkKSkuZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXh0cmFjdFZlcnNpb25JbmZvcm1hdGlvbihhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uKSB7XG4gICAgaWYgKCFhcHBsaWNhdGlvbi5tYW5pZmVzdC5pc1BhY2thZ2UgJiYgIWFwcGxpY2F0aW9uLm1hbmlmZXN0LnNvdXJjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJsdWVwcmludEFwcGxpY2F0aW9uSWQgPSBhcHBsaWNhdGlvbi5tYW5pZmVzdD8uc291cmNlO1xuICAgIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gYXBwbGljYXRpb24ubWFuaWZlc3Q/LnZlcnNpb247XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhOiBibHVlcHJpbnRBcHBsaWNhdGlvblZlcnNpb25zIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0VmVyc2lvbnMoXG4gICAgICAgIGJsdWVwcmludEFwcGxpY2F0aW9uSWRcbiAgICAgICk7XG4gICAgICBjb25zdCBibHVlcHJpbnRMYXRlc3RWZXJzaW9uID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEFwcGxpY2F0aW9uVmVyc2lvbk9iamVjdEJ5VGFnKFxuICAgICAgICBibHVlcHJpbnRBcHBsaWNhdGlvblZlcnNpb25zLFxuICAgICAgICAnbGF0ZXN0J1xuICAgICAgKTtcbiAgICAgIHRoaXMuYmx1ZXByaW50QXBwbGljYXRpb25WZXJzaW9uID0gYmx1ZXByaW50TGF0ZXN0VmVyc2lvbi52ZXJzaW9uO1xuICAgICAgdGhpcy5pc1VwZGF0ZUF2YWlsYWJsZSA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5zaG91bGRVcGdyYWRlUGFja2FnZShcbiAgICAgICAgY3VycmVudFZlcnNpb24sXG4gICAgICAgIGJsdWVwcmludExhdGVzdFZlcnNpb25cbiAgICAgICk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuaW5nKGdldHRleHQoJ1VuYWJsZSB0byByZXNvbHZlIHZlcnNpb25zIG9mIHNvdXJjZSBwYWNrYWdlLicpKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxjOHktdGl0bGU+e3sgYXBwbGljYXRpb24gfCBodW1hbml6ZUFwcE5hbWUgfCBhc3luYyB9fTwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWIgKm5nSWY9XCIhaXNNaWNyb3NlcnZpY2VcIj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2ljb25dPVwiJ2M4eS1hdG9tJ1wiIFtsYWJlbF09XCInRWNvc3lzdGVtJyB8IHRyYW5zbGF0ZVwiPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInYzh5LW1vZHVsZXMnXCJcbiAgICBbbGFiZWxdPVwiJ0FwcGxpY2F0aW9ucycgfCB0cmFuc2xhdGVcIlxuICAgIFtwYXRoXT1cIidlY29zeXN0ZW0vYXBwbGljYXRpb25zJ1wiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiYnJlYWRjcnVtYkNvbmZpZz8uaWNvblwiXG4gICAgW2xhYmVsXT1cImJyZWFkY3J1bWJDb25maWc/LmxhYmVsXCJcbiAgICBbcGF0aF09XCJicmVhZGNydW1iQ29uZmlnPy5wYXRoXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2xhYmVsXT1cImFwcGxpY2F0aW9uIHwgaHVtYW5pemVBcHBOYW1lIHwgYXN5bmNcIj48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtIFtsYWJlbF09XCInUHJvcGVydGllcycgfCB0cmFuc2xhdGVcIj48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48Yzh5LWJyZWFkY3J1bWIgKm5nSWY9XCJpc01pY3Jvc2VydmljZVwiPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSBbaWNvbl09XCInYzh5LWF0b20nXCIgW2xhYmVsXT1cIidFY29zeXN0ZW0nIHwgdHJhbnNsYXRlXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cImJyZWFkY3J1bWJDb25maWc/Lmljb25cIlxuICAgIFtsYWJlbF09XCJicmVhZGNydW1iQ29uZmlnPy5sYWJlbFwiXG4gICAgW3BhdGhdPVwiYnJlYWRjcnVtYkNvbmZpZz8ucGF0aFwiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtIFtsYWJlbF09XCJhcHBsaWNhdGlvbiB8IGh1bWFuaXplQXBwTmFtZSB8IGFzeW5jXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSBbbGFiZWxdPVwiJ1Byb3BlcnRpZXMnIHwgdHJhbnNsYXRlXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGRpdiBjbGFzcz1cInJvd1wiPlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2NvbC1tZC04JzogIWlzQWN0aXZpdHlMb2dTdXBwb3J0ZWQsICdjb2wtbWQtMTInOiBpc0FjdGl2aXR5TG9nU3VwcG9ydGVkIH1cIj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImFwcGxpY2F0aW9uXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2QtZ3JpZCBncmlkX19jb2wtLTctNS0tbWQnOiBpc0FjdGl2aXR5TG9nU3VwcG9ydGVkIH1cIlxuICAgICAgY2xhc3M9XCJjYXJkIGNvbnRlbnQtZnVsbHBhZ2VcIlxuICAgID5cbiAgICAgIDxmb3JtXG4gICAgICAgIChuZ1N1Ym1pdCk9XCJmb3JtR3JvdXAudmFsaWQgJiYgc2F2ZShmb3JtR3JvdXAudmFsdWUpXCJcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICAgICAgICBjbGFzcz1cImQtZmxleCBkLWNvbCBjb250ZW50LWZ1bGxwYWdlXCJcbiAgICAgICAgbm92YWxpZGF0ZVxuICAgICAgPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzTG9hZGluZ1wiIGNsYXNzPVwiZC1jb250ZW50c1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHNlcGFyYXRvci1ib3R0b20gbGFyZ2UtcGFkZGluZyBmbGV4LW5vLXNocmlua1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleC1tZCBhLWktc3RhcnQgdGV4dC1jZW50ZXIgdGV4dC1sZWZ0LW1kXCI+XG4gICAgICAgICAgICAgIDxjOHktYXBwLWljb25cbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc1BhY2thZ2UgJiYgIWlzRmVhdHVyZSAmJiAhaXNNaWNyb3NlcnZpY2UgJiYgIWlzRXh0ZXJuYWxcIlxuICAgICAgICAgICAgICAgIFthcHBdPVwiYXBwbGljYXRpb25cIlxuICAgICAgICAgICAgICAgIFtjb250ZXh0UGF0aF09XCJhcHBsaWNhdGlvbi5jb250ZXh0UGF0aFwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiYXBwbGljYXRpb24ubmFtZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLTQ4XCJcbiAgICAgICAgICAgICAgPjwvYzh5LWFwcC1pY29uPlxuICAgICAgICAgICAgICA8aSAqbmdJZj1cImlzUGFja2FnZVwiIGM4eUljb249XCJiaWctcGFyY2VsXCIgY2xhc3M9XCJpY29uLTQ4XCI+PC9pPlxuICAgICAgICAgICAgICA8aSAqbmdJZj1cImlzRmVhdHVyZVwiIGM4eUljb249XCJ0YWJcIiBjbGFzcz1cImljb24tNDhcIj48L2k+XG4gICAgICAgICAgICAgIDxpICpuZ0lmPVwiaXNNaWNyb3NlcnZpY2VcIiBjOHlJY29uPVwibWljcm9jaGlwXCIgY2xhc3M9XCJpY29uLTQ4XCI+PC9pPlxuICAgICAgICAgICAgICA8aSAqbmdJZj1cImlzRXh0ZXJuYWxcIiBjOHlJY29uPVwiZ2xvYmUxXCIgY2xhc3M9XCJpY29uLTQ4XCI+PC9pPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXQtbWQtMTYgcC1sLW1kLTE2IHAtci1tZC0zMiBmbGV4LWdyb3dcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImg0IHRleHQtbWVkaXVtIG0tYi04XCI+e3sgYXBwbGljYXRpb24gfCBodW1hbml6ZUFwcE5hbWUgfCBhc3luYyB9fTwvcD5cbiAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIiFpc093bmVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGFwcGxpY2F0aW9uLmRlc2NyaXB0aW9uIHx8ICgnTm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlLicgfCB0cmFuc2xhdGUpIH19XG4gICAgICAgICAgICAgICAgICA8L2VtPlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNPd25lclwiIGNsYXNzPVwiZm9ybS1ncm91cCBtLWItMFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgdXBkYXRlZDogZm9ybUdyb3VwPy5jb250cm9scz8uZGVzY3JpcHRpb24/LmRpcnR5IH1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgYzh5LXRleHRhcmVhLWF1dG9yZXNpemVcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBuby1yZXNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ05vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZS4nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcmlnaHQtbWQgbS10LTRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJhcHBTdGF0ZT8uY2xhc3NcIiBjbGFzcz1cImxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICB7eyBhcHBTdGF0ZT8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpdC13IG0tdC0yXCIgKm5nSWY9XCJpc1BhY2thZ2UgfHwgaXNNaWNyb3NlcnZpY2VcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtbGFiZWwtc21hbGxcIiB0cmFuc2xhdGU+VmVyc2lvbjo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwicC1sLTQgdGV4dC1ib2xkXCI+e3sgYXBwbGljYXRpb24ubWFuaWZlc3Q/LnZlcnNpb24gfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaXQtdyBtLXQtMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbFwiIHRyYW5zbGF0ZT5DcmVhdGlvbiB0aW1lOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJwLWwtNCB0ZXh0LWJvbGRcIj57eyAoYmluYXJ5TW8/LmNyZWF0aW9uVGltZSB8IGM4eURhdGUpIHx8ICctLS0nIH19PC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS10LThcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNVcGRhdGVBdmFpbGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlVG9MYXRlc3RWZXJzaW9uKClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdidG4tcGVuZGluZyc6IGlzVXBkYXRlT25nb2luZyB9XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXdhcm5pbmcgYnRuLXNtXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgJ1VwZGF0ZSBhdmFpbGFibGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5BcHAoYXBwbGljYXRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVPcGVuSW5Ccm93c2VyXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjYW5PcGVuSW5Ccm93c2VyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnT3BlbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2V4dGVybmFsLWxpbmsnXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyAnT3BlbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNhbk9wZW5JbkJyb3dzZXIgJiYgZGlzYWJsZU9wZW5JbkJyb3dzZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBUaGUgYXBwbGljYXRpb24gaXMgb3ZlcndyaXR0ZW4gYnkgYSBjdXN0b20gYXBwbGljYXRpb24gc2hhcmluZyB0aGUgc2FtZSBwYXRoXG4gICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNDdXN0b21NaWNyb3NlcnZpY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdWJzY3JpYmUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNTdWJzY3JpYmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc21cIlxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1N1YnNjcmliZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2NoZWNrLWNpcmNsZS1vJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAnU3Vic2NyaWJlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1bnN1YnNjcmliZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzU3Vic2NyaWJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdVbnN1YnNjcmliZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgW2M4eUljb25dPVwiJ21pbnVzLWNpcmNsZSdcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ1Vuc3Vic2NyaWJlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5uZXItc2Nyb2xsIGJnLWxldmVsLTAgZmxleC1ncm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBsYXJnZS1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1BhY2thZ2VcIiBjbGFzcz1cInJvdyBwLTE2XCI+XG4gICAgICAgICAgICAgICAgPGM4eS1wcm9wZXJ0aWVzLWxpc3RcbiAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImFwcGxpY2F0aW9uLm1hbmlmZXN0XCJcbiAgICAgICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cInBhY2thZ2VQcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInUGFja2FnZSBkZXRhaWxzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbZW1wdHlMYWJlbF09XCInLS0tJ1wiXG4gICAgICAgICAgICAgICAgICBpY29uPVwiaW5mb1wiXG4gICAgICAgICAgICAgICAgPjwvYzh5LXByb3BlcnRpZXMtbGlzdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzb3VyY2VQYWNrYWdlXCIgY2xhc3M9XCJyb3cgcC0xNlwiPlxuICAgICAgICAgICAgICAgIDxjOHktcHJvcGVydGllcy1saXN0XG4gICAgICAgICAgICAgICAgICBbZGF0YV09XCJzb3VyY2VQYWNrYWdlLm1hbmlmZXN0XCJcbiAgICAgICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cInBhY2thZ2VQcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInU291cmNlIHBhY2thZ2UgaW5mb3JtYXRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFtlbXB0eUxhYmVsXT1cIictLS0nXCJcbiAgICAgICAgICAgICAgICAgIGljb249XCJpbmZvXCJcbiAgICAgICAgICAgICAgICA+PC9jOHktcHJvcGVydGllcy1saXN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNVwiPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXBwSWRcIj5JRDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFwcElkXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tN1wiPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ05hbWUnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiFpc093bmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gTXkgYXBwbGljYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cbiAgICAgICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdBcHBsaWNhdGlvbiBrZXknIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImFwcGxpY2F0aW9uLmlkIHx8ICFpc093bmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwia2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuIG15LWFwcGxpY2F0aW9uLWtleScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tN1wiPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ1R5cGUnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYXBwbGljYXRpb24uaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9ybS1jb250cm9sLXN0YXRpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBbYzh5SWNvbl09XCJpY29uTWFwW2FwcGxpY2F0aW9uLnR5cGVdXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhcHBsaWNhdGlvbi50eXBlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJhcHBsaWNhdGlvbi50eXBlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ0hPU1RFRCdcIj5cbiAgICAgICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdQYXRoJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb25cIj4vYXBwcy88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiYXBwbGljYXRpb24uaWQgfHwgIWlzT3duZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImNvbnRleHRQYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gbXktYXBwbGljYXRpb25gdXNlZCBpbiBVUkxgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29udGV4dFBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidNSUNST1NFUlZJQ0UnXCI+XG4gICAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnUGF0aCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLWFkZG9uXCI+L3NlcnZpY2UvPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImFwcGxpY2F0aW9uLmlkIHx8ICFpc093bmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjb250ZXh0UGF0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuIG15LW1pY3Jvc2VydmljZWB1c2VkIGluIFVSTGAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb250ZXh0UGF0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYXBwbGljYXRpb24ubWFuaWZlc3QudmVyc2lvblwiIGNsYXNzPVwiY29sLXNtLTQgbS1iLTE2IGZsZXgtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnVmVyc2lvbicgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9ybS1jb250cm9sLXN0YXRpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgYXBwbGljYXRpb24ubWFuaWZlc3QudmVyc2lvbiB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhcHBsaWNhdGlvbi5tYW5pZmVzdC5pc29sYXRpb25cIiBjbGFzcz1cImNvbC1zbS00IG0tYi0xNiBmbGV4LWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0lzb2xhdGlvbicgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9ybS1jb250cm9sLXN0YXRpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaW5nbGVUZW5hbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2M4eS1lbnRlcnByaXNlJ1wiIGNsYXNzPVwiYzh5LWljb24tZHVvY29sb3IgaDRcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdTaW5nbGUgdGVuYW50JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhc2luZ2xlVGVuYW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cIidjOHktc3ViLXRlbmFudHMnXCIgY2xhc3M9XCJjOHktaWNvbi1kdW9jb2xvciBpY29uLTMyXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnTXVsdGkgdGVuYW50JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhcHBsaWNhdGlvbi5tYW5pZmVzdC5pc29sYXRpb25cIiBjbGFzcz1cImNvbC1zbS00IG0tYi0xNiBmbGV4LWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0JpbGxpbmcgbW9kZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9ybS1jb250cm9sLXN0YXRpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdWJzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInUmVzb3VyY2VzIHVzYWdlIGFzc2lnbmVkIHRvOiBPd25lcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnU3Vic2NyaXB0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhc3Vic2NyaXB0aW9uICYmIHNpbmdsZVRlbmFudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidSZXNvdXJjZXMgdXNhZ2UgYXNzaWduZWQgdG86IFN1YnNjcmliZXIgfCB0cmFuc2xhdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ1Jlc291cmNlcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXN1YnNjcmlwdGlvbiAmJiAhc2luZ2xlVGVuYW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ1Jlc291cmNlcyB1c2FnZSBhc3NpZ25lZCB0bzogT3duZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ1Jlc291cmNlcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhcHBsaWNhdGlvbi5tYW5pZmVzdC5wcm92aWRlclwiIGNsYXNzPVwibGVnZW5kIGZvcm0tYmxvY2sgbS10LTQwXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdQcm92aWRlcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtaW5saW5lXCIgKm5nSWY9XCJhcHBsaWNhdGlvbi5tYW5pZmVzdC5wcm92aWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYXBwbGljYXRpb24ubWFuaWZlc3QucHJvdmlkZXIubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNCBtLWItMTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnTmFtZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb3JtLWNvbnRyb2wtc3RhdGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFwcGxpY2F0aW9uLm1hbmlmZXN0LnByb3ZpZGVyLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhcHBsaWNhdGlvbi5tYW5pZmVzdC5wcm92aWRlci5kb21haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTQgbS1iLTE2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0RvbWFpbicgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb3JtLWNvbnRyb2wtc3RhdGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFwcGxpY2F0aW9uLm1hbmlmZXN0LnByb3ZpZGVyLmRvbWFpbiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFwcGxpY2F0aW9uLm1hbmlmZXN0LnByb3ZpZGVyLnN1cHBvcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTQgbS1iLTE2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ1N1cHBvcnQnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9ybS1jb250cm9sLXN0YXRpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhcHBsaWNhdGlvbi5tYW5pZmVzdC5wcm92aWRlci5zdXBwb3J0IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInUkVQT1NJVE9SWSdcIj5cbiAgICAgICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdQYXRoJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb25cIj4vYXBwcy88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiYXBwbGljYXRpb24uaWQgfHwgIWlzT3duZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29udGV4dFBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImNvbnRleHRQYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gbXktYXBwbGljYXRpb25gdXNlZCBpbiBVUkxgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cblxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ1NlcnZlciBVUkwnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZXNvdXJjZXNVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlc291cmNlc1VybFwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLiBteS1hcHBsaWNhdGlvbmB1c2VkIGluIFVSTGAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ1cmxcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdVc2VybmFtZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ1c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnUGFzc3dvcmQnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ0VYVEVSTkFMJ1wiPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0V4dGVybmFsIFVSTCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBbcGF0dGVybl09XCInXig/IWphdmFzY3JpcHQ6KS4rJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cIiFpc093bmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZXh0ZXJuYWxVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJleHRlcm5hbFVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLicgfCB0cmFuc2xhdGUgfX0gaHR0cDovL3d3dy5leGFtcGxlLmNvbS9cIlxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInVybFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxjOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCIncGF0dGVybidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ1ZhbGlkIFVSTCByZXF1aXJlZC4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICAgPC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0N1c3RvbU1pY3Jvc2VydmljZVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmdcIiBjbGFzcz1cImQtY29udGVudHNcIj5cbiAgICAgICAgICAgICAgPGM4eS11cGxvYWQtYXJjaGl2ZVxuICAgICAgICAgICAgICAgIFsoYXBwbGljYXRpb24pXT1cImFwcGxpY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAocmVmcmVzaCk9XCJvbk5ld0FyY2hpdmUoKVwiXG4gICAgICAgICAgICAgID48L2M4eS11cGxvYWQtYXJjaGl2ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiYXBwbGljYXRpb24gJiYgISFpc093bmVyICYmIGhhc0FkbWluUGVybWlzc2lvbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWZvb3RlciBzZXBhcmF0b3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZSgpXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjYW5EZWxldGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnRGVsZXRlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnRGVsZXRlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhYXBwbGljYXRpb24udHlwZSB8fCBmb3JtR3JvdXAuaW52YWxpZCB8fCBmb3JtR3JvdXAucHJpc3RpbmVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tZm9ybVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNBY3Rpdml0eUxvZ1N1cHBvcnRlZFwiIGNsYXNzPVwiY29udGVudC1mdWxscGFnZSBkLWZsZXggZC1jb2wgYmctbGV2ZWwtMVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgc2VwYXJhdG9yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIiB0cmFuc2xhdGU+QWN0aXZpdHkgbG9nPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tbC1hdXRvXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJsb2FkKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc21cIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdSZWxvYWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIFtuZ0NsYXNzXT1cInsgJ2ljb24tc3Bpbic6IGlzTG9hZGluZyB9XCIgYzh5SWNvbj1cInJlZnJlc2hcIj48L2k+XG4gICAgICAgICAgICAgIHt7ICdSZWxvYWQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdcIiBjbGFzcz1cInAtMTYgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxjOHktYWN0aXZpdHktbG9nXG4gICAgICAgICAgKm5nSWY9XCIhaXNMb2FkaW5nXCJcbiAgICAgICAgICBbaGFzQWRtaW5QZXJtaXNzaW9uc109XCJoYXNBZG1pblBlcm1pc3Npb25zXCJcbiAgICAgICAgICBbYXBwbGljYXRpb25dPVwiYXBwbGljYXRpb25cIlxuICAgICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgID48L2M4eS1hY3Rpdml0eS1sb2c+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|