@wavemaker/app-ng-runtime 11.14.2-rc.6311 → 11.15.0-1.246
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/build-task/bundles/index.umd.js +13 -2
- package/build-task/esm2022/input/default/checkbox/checkbox.build.mjs +9 -2
- package/build-task/esm2022/input/default/radioset/radioset.build.mjs +6 -2
- package/build-task/fesm2022/index.mjs +13 -2
- package/build-task/fesm2022/index.mjs.map +1 -1
- package/components/base/bundles/index.umd.js +271 -128
- package/components/base/esm2022/public_api.mjs +2 -2
- package/components/base/esm2022/utils/autolayout-utils.mjs +252 -0
- package/components/base/esm2022/utils/live-utils.mjs +10 -7
- package/components/base/esm2022/utils/widget-utils.mjs +8 -1
- package/components/base/esm2022/widgets/common/base/base.component.mjs +7 -8
- package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +4 -1
- package/components/base/esm2022/widgets/common/container/container.directive.mjs +28 -150
- package/components/base/esm2022/widgets/common/container/container.props.mjs +6 -2
- package/components/base/fesm2022/index.mjs +273 -129
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/base/public_api.d.ts +1 -1
- package/components/base/utils/autolayout-utils.d.ts +29 -0
- package/components/base/utils/widget-utils.d.ts +1 -0
- package/components/base/widgets/common/container/container.directive.d.ts +7 -9
- package/components/basic/label/bundles/index.umd.js +4 -0
- package/components/basic/label/esm2022/label.directive.mjs +5 -1
- package/components/basic/label/fesm2022/index.mjs +4 -0
- package/components/basic/label/fesm2022/index.mjs.map +1 -1
- package/components/basic/search/bundles/index.umd.js +13 -11
- package/components/basic/search/esm2022/search.component.mjs +14 -12
- package/components/basic/search/fesm2022/index.mjs +13 -11
- package/components/basic/search/fesm2022/index.mjs.map +1 -1
- package/components/chart/bundles/index.umd.js +2 -2
- package/components/chart/esm2022/chart.utils.mjs +3 -3
- package/components/chart/fesm2022/index.mjs +2 -2
- package/components/chart/fesm2022/index.mjs.map +1 -1
- package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -0
- package/components/containers/accordion/accordion.directive.d.ts +4 -0
- package/components/containers/accordion/bundles/index.umd.js +34 -0
- package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +6 -2
- package/components/containers/accordion/esm2022/accordion.directive.mjs +32 -2
- package/components/containers/accordion/fesm2022/index.mjs +36 -2
- package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
- package/components/containers/tabs/bundles/index.umd.js +34 -0
- package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +6 -2
- package/components/containers/tabs/esm2022/tabs.component.mjs +33 -4
- package/components/containers/tabs/fesm2022/index.mjs +36 -2
- package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
- package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -0
- package/components/containers/tabs/tabs.component.d.ts +5 -1
- package/components/containers/wizard/bundles/index.umd.js +46 -2
- package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +8 -2
- package/components/containers/wizard/esm2022/wizard.component.mjs +42 -4
- package/components/containers/wizard/fesm2022/index.mjs +48 -4
- package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +4 -0
- package/components/containers/wizard/wizard.component.d.ts +1 -0
- package/components/data/form/bundles/index.umd.js +28 -1
- package/components/data/form/esm2022/form-field/form-field.directive.mjs +4 -1
- package/components/data/form/esm2022/form.component.mjs +24 -2
- package/components/data/form/esm2022/form.props.mjs +3 -2
- package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +2 -1
- package/components/data/form/fesm2022/index.mjs +29 -2
- package/components/data/form/fesm2022/index.mjs.map +1 -1
- package/components/data/form/form.component.d.ts +3 -0
- package/components/data/list/bundles/index.umd.js +0 -9
- package/components/data/list/esm2022/list-item.directive.mjs +1 -10
- package/components/data/list/fesm2022/index.mjs +0 -9
- package/components/data/list/fesm2022/index.mjs.map +1 -1
- package/components/data/pagination/bundles/index.umd.js +6 -2
- package/components/data/pagination/esm2022/pagination.component.mjs +7 -3
- package/components/data/pagination/fesm2022/index.mjs +6 -2
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/table/bundles/index.umd.js +21 -4
- package/components/data/table/esm2022/table.component.mjs +22 -5
- package/components/data/table/fesm2022/index.mjs +21 -4
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +6 -2
- package/components/dialogs/alert-dialog/bundles/index.umd.js +18 -8
- package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +17 -7
- package/components/dialogs/alert-dialog/fesm2022/index.mjs +15 -5
- package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
- package/components/input/checkbox/bundles/index.umd.js +12 -3
- package/components/input/checkbox/checkbox.component.d.ts +2 -0
- package/components/input/checkbox/esm2022/checkbox.component.mjs +9 -3
- package/components/input/checkbox/esm2022/checkbox.props.mjs +5 -2
- package/components/input/checkbox/fesm2022/index.mjs +12 -3
- package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
- package/components/input/checkboxset/bundles/index.umd.js +12 -1
- package/components/input/checkboxset/checkboxset.component.d.ts +1 -0
- package/components/input/checkboxset/esm2022/checkboxset.component.mjs +11 -1
- package/components/input/checkboxset/esm2022/checkboxset.props.mjs +3 -2
- package/components/input/checkboxset/fesm2022/index.mjs +12 -1
- package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
- package/components/input/epoch/base-date-time/base-date-time.component.d.ts +0 -1
- package/components/input/epoch/base-date-time/bundles/index.umd.js +29 -27
- package/components/input/epoch/base-date-time/esm2022/base-date-time.component.mjs +30 -28
- package/components/input/epoch/base-date-time/fesm2022/index.mjs +29 -27
- package/components/input/epoch/base-date-time/fesm2022/index.mjs.map +1 -1
- package/components/input/epoch/date/bundles/index.umd.js +4 -3
- package/components/input/epoch/date/esm2022/date.component.mjs +5 -4
- package/components/input/epoch/date/fesm2022/index.mjs +4 -3
- package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
- package/components/input/epoch/date-time/bundles/index.umd.js +5 -4
- package/components/input/epoch/date-time/esm2022/date-time.component.mjs +7 -6
- package/components/input/epoch/date-time/fesm2022/index.mjs +6 -5
- package/components/input/epoch/date-time/fesm2022/index.mjs.map +1 -1
- package/components/input/file-upload/bundles/index.umd.js +1 -1
- package/components/input/file-upload/esm2022/file-upload.props.mjs +2 -2
- package/components/input/file-upload/fesm2022/index.mjs +1 -1
- package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- package/components/input/radioset/bundles/index.umd.js +13 -1
- package/components/input/radioset/esm2022/radioset.component.mjs +11 -1
- package/components/input/radioset/esm2022/radioset.props.mjs +4 -2
- package/components/input/radioset/fesm2022/index.mjs +13 -1
- package/components/input/radioset/fesm2022/index.mjs.map +1 -1
- package/components/input/radioset/radioset.component.d.ts +1 -0
- package/components/input/slider/bundles/index.umd.js +86 -16
- package/components/input/slider/esm2022/slider.component.mjs +76 -9
- package/components/input/slider/esm2022/slider.props.mjs +5 -1
- package/components/input/slider/fesm2022/index.mjs +79 -8
- package/components/input/slider/fesm2022/index.mjs.map +1 -1
- package/components/input/slider/slider.component.d.ts +12 -3
- package/components/input/text/bundles/index.umd.js +24 -3
- package/components/input/text/esm2022/input-text/input-text.component.mjs +6 -3
- package/components/input/text/esm2022/input-text/input-text.props.mjs +5 -2
- package/components/input/text/esm2022/number-locale/number-locale.mjs +16 -1
- package/components/input/text/fesm2022/index.mjs +24 -3
- package/components/input/text/fesm2022/index.mjs.map +1 -1
- package/components/input/text/input-text/input-text.component.d.ts +4 -0
- package/components/input/text/number-locale/number-locale.d.ts +12 -0
- package/components/navigation/breadcrumb/bundles/index.umd.js +2 -2
- package/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +3 -3
- package/components/navigation/breadcrumb/fesm2022/index.mjs +2 -2
- package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/bundles/index.umd.js +12 -0
- package/components/navigation/popover/esm2022/popover.component.mjs +13 -1
- package/components/navigation/popover/fesm2022/index.mjs +12 -0
- package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/popover.component.d.ts +2 -0
- package/components/page/default/bundles/index.umd.js +0 -4
- package/components/page/default/esm2022/router-outlet.directive.mjs +1 -5
- package/components/page/default/fesm2022/index.mjs +0 -4
- package/components/page/default/fesm2022/index.mjs.map +1 -1
- package/components/page/header/bundles/index.umd.js +4 -3
- package/components/page/header/esm2022/header.component.mjs +5 -4
- package/components/page/header/fesm2022/index.mjs +4 -3
- package/components/page/header/fesm2022/index.mjs.map +1 -1
- package/components/page/header/header.component.d.ts +2 -1
- package/core/bundles/index.umd.js +90 -6
- package/core/enums/enums.d.ts +1 -0
- package/core/esm2022/enums/enums.mjs +2 -1
- package/core/esm2022/utils/build-utils.mjs +5 -1
- package/core/esm2022/utils/utils.mjs +5 -2
- package/core/esm2022/utils/watcher.mjs +83 -4
- package/core/fesm2022/index.mjs +91 -4
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/utils/watcher.d.ts +2 -0
- package/npm-shrinkwrap.json +2 -2
- package/oAuth/esm2022/oAuth.service.mjs +1 -1
- package/oAuth/fesm2022/index.mjs.map +1 -1
- package/oAuth/oAuth.service.d.ts +1 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +33 -31
- package/runtime/base/components/base-prefab.component.d.ts +6 -4
- package/runtime/base/esm2022/components/app-component/app.component.mjs +1 -1
- package/runtime/base/esm2022/components/base-page.component.mjs +2 -5
- package/runtime/base/esm2022/components/base-partial.component.mjs +2 -2
- package/runtime/base/esm2022/components/base-prefab.component.mjs +20 -12
- package/runtime/base/esm2022/components/base-spa-page.component.mjs +1 -4
- package/runtime/base/esm2022/services/http-interceptor.services.mjs +14 -13
- package/runtime/base/fesm2022/index.mjs +34 -31
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/runtime/base/runtime-base.module.d.ts +2 -1
- package/runtime/dynamic/app/app.config.d.ts +1 -1
- package/runtime/dynamic/bundles/index.umd.js +1 -1
- package/runtime/dynamic/esm2022/app/app.config.mjs +7 -7
- package/runtime/dynamic/fesm2022/index.mjs +2 -2
- package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- package/scripts/datatable/datatable.js +17 -15
package/core/utils/watcher.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ interface WatchConfig {
|
|
|
4
4
|
arrayType?: boolean;
|
|
5
5
|
isList?: boolean;
|
|
6
6
|
}
|
|
7
|
+
export declare const cleanupStaleWatchers: () => number;
|
|
8
|
+
export declare const scheduleThresholdCleanup: () => void;
|
|
7
9
|
export declare const isFirstTimeChange: (v: any) => boolean;
|
|
8
10
|
export declare const debounce: (fn: Function, wait?: number) => (...args: any[]) => void;
|
|
9
11
|
export declare const muteWatchers: () => void;
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wavemaker/app-ng-runtime",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.15.0-1.246",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@wavemaker/app-ng-runtime",
|
|
9
|
-
"version": "11.
|
|
9
|
+
"version": "11.15.0-1.246",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"engines": {
|
|
12
12
|
"node": ">=18.16.1",
|
|
@@ -48,4 +48,4 @@ export class OAuthService {
|
|
|
48
48
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OAuthService, decorators: [{
|
|
49
49
|
type: Injectable
|
|
50
50
|
}], ctorParameters: () => [{ type: i1.AbstractHttpService }] });
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib0F1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL29BdXRoL3NyYy9vQXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFdEQsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQzs7O0FBR3ZDLE1BQU0sT0FBTyxZQUFZO0lBQ3JCLFlBQW9CLFdBQWdDO1FBQWhDLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtRQUVwRCxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUUxQixvQkFBZSxHQUFRLEVBQUUsQ0FBQztJQUo2QixDQUFDO0lBTXhELDZCQUE2QjtRQUN6QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELGlCQUFpQixDQUFDLFFBQVE7UUFDdEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELG9CQUFvQixDQUFDLFVBQVU7UUFDM0IsTUFBTSxDQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQscUJBQXFCLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFdBQVksRUFBRSxlQUFnQixFQUFFLFdBQVk7UUFDbkcsb0JBQW9CLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDcE0sQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCO1FBQ3RDLE9BQU8sY0FBYyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxRQUFRO1FBQ3RCLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxXQUFXO1FBQ1AsNkRBQTZEO1FBQzdELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQztRQUVELGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUM5QixDQUFDOytHQTVDUSxZQUFZO21IQUFaLFlBQVk7OzRGQUFaLFlBQVk7a0JBRHhCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdEh0dHBTZXJ2aWNlIH0gZnJvbSAnQHdtL2NvcmUnO1xuXG5pbXBvcnQgeyBnZXRBY2Nlc3NUb2tlbiwgcGVyZm9ybUF1dGhvcml6YXRpb24sIHJlbW92ZUFjY2Vzc1Rva2VuIH0gZnJvbSAnLi9vQXV0aC51dGlscyc7XG5pbXBvcnQge2ZpbmQsIHJlbW92ZX0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT0F1dGhTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHBTZXJ2aWNlOiBBYnN0cmFjdEh0dHBTZXJ2aWNlKSB7fVxuXG4gICAgcHJvdmlkZXJzID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHByb3ZpZGVyc0NvbmZpZzogYW55ID0gW107XG5cbiAgICBnZXRPQXV0aFByb3ZpZGVyc0FzT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlcnMuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgYWRkUHJvdmlkZXJDb25maWcocHJvdmlkZXIpIHtcbiAgICAgICAgaWYgKCEoZmluZCh0aGlzLnByb3ZpZGVyc0NvbmZpZywgeyduYW1lJzogcHJvdmlkZXIubmFtZX0pKSkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnNDb25maWcucHVzaChwcm92aWRlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm92aWRlcnMubmV4dCh0aGlzLnByb3ZpZGVyc0NvbmZpZyk7XG4gICAgfVxuXG4gICAgcmVtb3ZlUHJvdmlkZXJDb25maWcocHJvdmlkZXJJZCkge1xuICAgICAgICByZW1vdmU8YW55Pih0aGlzLnByb3ZpZGVyc0NvbmZpZywgcHJvdmlkZXIgPT4gcHJvdmlkZXIubmFtZSA9PT0gcHJvdmlkZXJJZCk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLm5leHQodGhpcy5wcm92aWRlcnNDb25maWcpO1xuICAgIH1cblxuICAgIHBlcmZyb21PQXV0aG9yaXphdGlvbih1cmwsIHByb3ZpZGVySWQsIG9uU3VjY2Vzcywgb25FcnJvciwgc2VjdXJpdHlPYmo/LCBjdXN0b21VcmlTY2hlbWU/LCBkZXBsb3llZFVSTD8pIHtcbiAgICAgICAgcGVyZm9ybUF1dGhvcml6YXRpb24odXJsLCBwcm92aWRlcklkLCBvblN1Y2Nlc3MsIG9uRXJyb3IsIHRoaXMuaHR0cFNlcnZpY2UsIHRoaXMuYWRkUHJvdmlkZXJDb25maWcuYmluZCh0aGlzKSwgdGhpcy5yZW1vdmVQcm92aWRlckNvbmZpZy5iaW5kKHRoaXMpLCBzZWN1cml0eU9iaiwgY3VzdG9tVXJpU2NoZW1lLCBkZXBsb3llZFVSTCk7XG4gICAgfVxuXG4gICAgZ2V0QWNjZXNzVG9rZW4ocHJvdmlkZXIsIGNoZWNrTG9jYWxTdG9yYWdlKSB7XG4gICAgICAgIHJldHVybiBnZXRBY2Nlc3NUb2tlbihwcm92aWRlciwgY2hlY2tMb2NhbFN0b3JhZ2UpO1xuICAgIH1cblxuICAgIHJlbW92ZUFjY2Vzc1Rva2VuKHByb3ZpZGVyKSB7XG4gICAgICAgIHJlbW92ZUFjY2Vzc1Rva2VuKHByb3ZpZGVyKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDb21wbGV0ZSBTdWJqZWN0IHRvIHJlbGVhc2Ugc3Vic2NyaXB0aW9uc1xuICAgICAgICBpZiAodGhpcy5wcm92aWRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIHByb3ZpZGVycyBjb25maWcgYXJyYXlcbiAgICAgICAgdGhpcy5wcm92aWRlcnNDb25maWcgPSBbXTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../projects/oAuth/src/oAuth.utils.ts","../../../projects/oAuth/src/oAuth.service.ts","../../../projects/oAuth/src/index.ts"],"sourcesContent":["import { _WM_APP_PROJECT, isIE, getWmProjectProperties } from '@wm/core';\nimport {get, isUndefined} from \"lodash-es\";\n\nimport * as momentLib from 'moment';\nconst moment = momentLib.default || window['moment'];\ndeclare const jsSHA;\n\nconst accessTokenSuffix = '.access_token', pkceIdentifier = 'pkce', implicitIdentifier = 'implicit';\n\nlet code_verifier, redirectUri;\n\nexport const parseConfig = (serviceParams: any): any => {\n\n let val, param, config;\n const urlParams = serviceParams.urlParams;\n\n config = {\n url: 'services/oauth2/:providerId/authorizationUrl',\n method: 'GET'\n };\n\n /*To handle dynamic urls, append the serviceParams.config.url with the static url(i.e., config.url)*/\n if (serviceParams.config) {\n config.url = (serviceParams.config.url || '') + config.url;\n config.method = serviceParams.config.method || config.method;\n config.headers = config.headers || {};\n\n // TODO[Shubham] - change to for - of\n for (const key in serviceParams.config.headers) {\n val = serviceParams.config.headers[key];\n config.headers[key] = val;\n }\n }\n /* check for url parameters to replace the url */\n if (urlParams) {\n for (param in urlParams) {\n if (urlParams.hasOwnProperty(param)) {\n val = urlParams[param];\n if (!isUndefined(val) && val !== null) {\n config.url = config.url.replace(new RegExp(':' + param, 'g'), val);\n }\n }\n }\n }\n\n /* check for data */\n if (serviceParams.params) {\n config.params = serviceParams.params;\n }\n /* check for data */\n if (!isUndefined(serviceParams.data)) {\n config.data = serviceParams.data;\n }\n /* check for data parameters, written to support old service calls (.json calls) */\n if (serviceParams.dataParams) {\n config.data.params = serviceParams.dataParams;\n }\n /* check for headers */\n if (serviceParams.headers) {\n config.headers = serviceParams.headers;\n }\n\n /* set extra config flags */\n config.byPassResult = serviceParams.byPassResult;\n config.isDirectCall = serviceParams.isDirectCall;\n config.isExtURL = serviceParams.isExtURL;\n config.preventMultiple = serviceParams.preventMultiple;\n config.responseType = serviceParams.responseType;\n\n return config;\n};\n\nconst listeners = {},\n ACCESSTOKEN_PLACEHOLDERS = {\n 'STUDIO': 'WM_STUDIO_',\n 'RUN': 'WM_RUN_'\n },\n newWindowProps = 'width=400,height=600';\n\n/**\n * This function remove the accessToken for a provider\n * @param provider\n */\nexport const removeAccessToken = (provider) => {\n const accessTokenKey = getAccessTokenPlaceholder(provider);\n localStorage.removeItem(accessTokenKey);\n};\n\n/**\n * This function returns the accesstoken placeholder based on the studio or run mode for the project\n * @param provider\n * @returns {*}\n */\nfunction getAccessTokenPlaceholder(provider) {\n let accessTokenKey;\n accessTokenKey = ACCESSTOKEN_PLACEHOLDERS.RUN + _WM_APP_PROJECT.id + '_' + provider + accessTokenSuffix;\n return accessTokenKey;\n}\n\n/**\n * This function performs the fake local storage update, so the IE gets the latest token instead of returning the cached localStorageValue\n */\nfunction performFakeLocalStorageUpdate() {\n const dummy_key = 'dummy_key';\n localStorage.setItem(dummy_key, dummy_key);\n localStorage.removeItem(dummy_key);\n}\n\n/**\n * This function sets the accessToken\n * @param provider\n * @param accesstoken\n */\nfunction setAccessToken(provider, accesstoken) {\n const accessTokenKey = getAccessTokenPlaceholder(provider);\n localStorage.setItem(accessTokenKey, accesstoken);\n}\n\n/**\n * this is a callback function to check if the authentication is done and invokes the successCallback\n * @param providerId\n * @param successCallback\n * @param evt\n */\nfunction checkAuthenticationStatus(providerId, successCallback, removeProviderConfigCallBack, evt, http?, securityObj?) {\n const accessTokenKey = providerId + accessTokenSuffix,\n accessTokenOrCode = localStorage.getItem(accessTokenKey);\n if (evt && evt.origin !== window.location.origin) {\n return;\n }\n if (accessTokenOrCode) {\n if (isPassedFlow(securityObj, pkceIdentifier)) {\n const req = 'client_id=' + securityObj.clientId + '&code=' + accessTokenOrCode + '&grant_type=authorization_code&code_verifier=' + code_verifier + '&redirect_uri=' + redirectUri;\n http.send({\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n url: securityObj.accessTokenUrl,\n data: req\n }).then(function(response) {\n triggerAccessTokenSuccessCallback(providerId, successCallback, removeProviderConfigCallBack, accessTokenKey, response.body.access_token);\n });\n } else {\n triggerAccessTokenSuccessCallback(providerId, successCallback, removeProviderConfigCallBack, accessTokenKey, accessTokenOrCode);\n }\n }\n}\n\n/**\n * function trigger the successCallback after getting the access token\n */\nfunction triggerAccessTokenSuccessCallback(providerId, successCallback, removeProviderConfigCallBack, accessTokenKey, token) {\n removeProviderConfigCallBack(providerId);\n localStorage.removeItem(accessTokenKey);\n setAccessToken(providerId, token);\n window.removeEventListener('message', listeners[providerId]);\n setTimeout(() => {\n delete listeners[providerId];\n if (successCallback) {\n successCallback(token);\n }\n });\n}\n\n/**\n * this function keeps on checking the accesstoken in the LocalStorage and updates it accordingly\n * @param providerId\n * @param onSuccess\n * @param onError\n * @param startTime\n * @param loginObj\n */\nfunction checkAccessTokenInWindow(providerId, onSuccess, onError, startTime, loginObj, removeProviderConfigCallBack) {\n performFakeLocalStorageUpdate();\n const currentTime = moment.duration(moment().format('HH:mm'), 'HH:mm' as any),\n timeDiff = currentTime.subtract(startTime),\n accessToken = getAccessToken(providerId, true);\n if (accessToken) {\n loginObj.accesstoken_retrieved = true;\n setAccessToken(providerId, accessToken);\n localStorage.removeItem(providerId + accessTokenSuffix);\n removeProviderConfigCallBack(providerId);\n if (onSuccess) {\n onSuccess();\n }\n } else if (timeDiff.minutes() > 1 && onSuccess && !loginObj.accesstoken_retrieved) {\n onSuccess('error');\n } else {\n setTimeout(() => {\n checkAccessTokenInWindow(providerId, onSuccess, onError, startTime, loginObj, removeProviderConfigCallBack);\n }, 3000);\n }\n}\n\n/**\n * checks for the window existence i.e if the window is manually closed by the user or any such\n * @param oAuthWindow\n * @param provider\n * @param callback\n */\nfunction checkForWindowExistence(oAuthWindow, provider, callback, providerInfo?) {\n if (oAuthWindow && listeners[provider]) {\n if (!oAuthWindow.closed) { // .closed is supported across major browser vendors however for IE the user has to enable protected mode from security options\n setTimeout(checkForWindowExistence.bind(undefined, oAuthWindow, provider, callback, providerInfo), 3000);\n } else {\n if (!isPassedFlow(providerInfo, pkceIdentifier)) {\n window.removeEventListener('message', listeners[provider]);\n delete listeners[provider];\n if (callback) {\n callback('error');\n }\n }\n }\n }\n}\n/**\n * this functions handles the logic related to the window operations in IE\n * @param url\n * @param providerId\n * @param onSuccess\n * @param onError\n */\nfunction handleLoginForIE(url, providerId, onSuccess, onError, removeProviderConfigCallBack, securityObj?, requestSourceType?, customUriScheme?, deployedURL?) {\n const loginObj = {\n 'accesstoken_retrieved': false\n };\n if (isPassedFlow(securityObj, implicitIdentifier)) {\n url = constructURLForImplicitOrPKCE(providerId, securityObj, requestSourceType, null, customUriScheme, deployedURL);\n }\n window.open(url, '_blank', newWindowProps);\n checkAccessTokenInWindow(providerId, onSuccess, onError, moment.duration(moment().format('HH:mm'), 'HH:mm' as any), loginObj, removeProviderConfigCallBack);\n}\n\n/**\n * this functions returns if the current oAuth Flow matches the passed flow or not\n * @param providerInfo\n */\nfunction isPassedFlow(providerInfo, flow) {\n let oAuthFlow = get(providerInfo, 'oauth2Flow');\n oAuthFlow = oAuthFlow ? oAuthFlow.toLowerCase() : oAuthFlow;\n if (flow === pkceIdentifier) {\n if (get(providerInfo, 'oAuth2Pkce.enabled') === true) {\n oAuthFlow = pkceIdentifier;\n }\n }\n return oAuthFlow === flow;\n}\n\n/**\n * this function adds the listener on the window and assigns the listener\n * @param provider\n * @param callback\n */\nfunction onAuthWindowOpen(provider, callback, removeProviderConfigCallBack, http?, securityObj?) {\n listeners[provider] = checkAuthenticationStatus.bind(undefined, provider, callback, removeProviderConfigCallBack, null, http, securityObj);\n window.addEventListener('message', listeners[provider], false);\n}\n\n// Generate a secure random string using the browser crypto functions\nfunction generateRandomString() {\n const array = new Uint32Array(28);\n window.crypto.getRandomValues(array);\n return Array.from(array, dec => ('0' + dec.toString(16)).substr(-2)).join('');\n}\n\n// Returns a promise that resolves to an ArrayBuffer\nfunction getEncryptedCode(plain) {\n const encoder = new TextEncoder();\n const data = encoder.encode(plain);\n const shaObj = new jsSHA(\"SHA-256\", \"UINT8ARRAY\", { encoding: \"UTF8\" });\n shaObj.update(data);\n return shaObj.getHash(\"ARRAYBUFFER\");\n}\n\n// Base64-urlencodes the input string\nfunction base64urlencode(str) {\n // Convert the ArrayBuffer to string using Uint8 array to convert to what btoa accepts.\n // btoa accepts chars only within ascii 0-255 and base64 encodes them.\n // Then convert the base64 encoded to base64url encoded\n // (replace + with -, replace / with _, trim trailing =)\n return btoa(String.fromCharCode.apply(null, new Uint8Array(str)))\n .replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\n/**\n * this function is a callback function which enables the listener and checks for the window existence\n * @param providerId\n * @param onSuccess\n * @param url\n */\nfunction postGetAuthorizationURL(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj?, requestSourceType?, customUriScheme?, deployedURL?, http?) {\n if (isPassedFlow(securityObj, implicitIdentifier)) {\n url = constructURLForImplicitOrPKCE(providerId, securityObj, requestSourceType, null, customUriScheme, deployedURL);\n startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n } else if (isPassedFlow(securityObj, pkceIdentifier)) {\n // Create and store a new PKCE code_verifier (the plaintext random secret)\n code_verifier = generateRandomString();\n let code_challenge;\n if (get(securityObj, 'oAuth2Pkce.challengeMethod') === 'plain') {\n code_challenge = code_verifier;\n url = constructURLForImplicitOrPKCE(providerId, securityObj, requestSourceType, code_challenge, customUriScheme, deployedURL);\n startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n } else {\n const encryptedCode = getEncryptedCode(code_verifier);\n code_challenge = base64urlencode(encryptedCode);\n //code_challenge = encryptedCode;\n url = constructURLForImplicitOrPKCE(providerId, securityObj, requestSourceType, code_challenge, customUriScheme, deployedURL);\n startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n\n }\n } else {\n startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n }\n}\n\nfunction startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj?, requestSourceType?, customUriScheme?, deployedURL?, http?) {\n let oAuthWindow;\n oAuthWindow = window.open(url, '_blank', newWindowProps);\n onAuthWindowOpen(providerId, onSuccess, removeProviderConfigCallBack, http, securityObj);\n checkForWindowExistence(oAuthWindow, providerId, onSuccess, securityObj);\n}\n\n/**\n * function to construct the url for implicit flow.\n * @param providerId provider id for which the url has to be set\n * @param providerInfo provider object which contains details such as scope, client id etc\n * @param requestSourceType requesting source is web or mobile\n * @returns url string\n */\nfunction constructURLForImplicitOrPKCE(providerId, providerInfo, requestSourceType, code_challenge, customUriScheme?, deployedURL?) {\n redirectUri = window.location.href.split('/#/')[0] + '/oAuthCallback.html';\n const clientId = providerInfo.clientId;\n const scopes = providerInfo.scopes.map(function(scope) { return scope.name }).join(' ');\n let state;\n if (getWmProjectProperties().isTestRuntime === true) {\n redirectUri = location.protocol + '//' + window.location.host + '/studio/oAuthCallback.html';\n }\n if (requestSourceType === 'MOBILE') {\n redirectUri = deployedURL + 'oAuthCallback.html';\n }\n const flow = isPassedFlow(providerInfo, implicitIdentifier) ? implicitIdentifier : pkceIdentifier;\n state = {providerId: providerId, suffix: accessTokenSuffix, requestSourceType: requestSourceType, flow: flow, scheme: customUriScheme};\n const authUrlArr = providerInfo.authorizationUrl.split('?');\n let connector;\n if (authUrlArr.length === 1) {\n //query params don't exist\n connector = '?';\n } else if (authUrlArr.length > 1 && authUrlArr[1] !== '') {\n //query params exist. Append & instead of ?.\n connector = '&';\n } else {\n //nothing exists after '?'. client_id can be directly appended;\n connector = '';\n }\n const commonUrl = providerInfo.authorizationUrl + connector + 'client_id=' + clientId + '&redirect_uri=' + redirectUri + '&state=' + encodeURIComponent(JSON.stringify(state)) + '&scope=' + encodeURIComponent(scopes);\n let url;\n if (flow === implicitIdentifier) {\n const responseType = providerInfo.responseType ? providerInfo.responseType : 'token';\n url = commonUrl + '&response_type=' + responseType;\n } else {\n url = commonUrl + '&response_type=code&code_challenge=' + code_challenge + '&code_challenge_method=' + get(providerInfo, 'oAuth2Pkce.challengeMethod');\n }\n return url;\n}\n\n/**\n * function to get the authorization url\n * @param params provider id for which the auth url has to be fetched\n * @param successCallback callback to be invoked upon successful fetch of the providers\n * @param failureCallback callback to be invoked upon error\n * @returns {*}\n */\nfunction getAuthorizationUrl(params, http) {\n const action = 'getAuthorizationUrl',\n serviceSettings = parseConfig({\n target: 'oauthConfiguration',\n action: action,\n urlParams: {\n projectId: _WM_APP_PROJECT.id,\n providerId: params.providerId\n },\n params: {\n 'requestSourceType': params.requestSourceType\n }\n });\n return http.send(serviceSettings);\n}\n\n/**\n * function trigger the addProviderConfigCallBack after getting the authorization url\n */\nfunction triggerProviderConfigCallBack(url, providerId, onSuccess, onError, http, addProviderConfigCallBack, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL) {\n const urlBody = isPassedFlow(securityObj, implicitIdentifier) || isPassedFlow(securityObj, pkceIdentifier) ? url : url.body;\n addProviderConfigCallBack({\n name: providerId,\n url: urlBody,\n invoke: () => {\n if (isIE()) { // handling for IE\n handleLoginForIE(url, providerId, onSuccess, onError, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL);\n } else {\n postGetAuthorizationURL(urlBody, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n }\n }\n });\n}\n\n/**\n * this function retrieves the accessToken based on the run/studiomode\n * @param provider\n * @returns {*}\n */\nexport const getAccessToken = (provider, checkLocalStorage) => {\n const accessTokenKey = getAccessTokenPlaceholder(provider);\n if (checkLocalStorage) {\n return localStorage.getItem(provider + accessTokenSuffix);\n }\n return localStorage.getItem(accessTokenKey);\n};\n\n\n/**\n * this function is used to perform the authorization by opening the window and having active listeners\n * @param url\n * @param providerId\n * @param onSuccess\n * @returns {*}\n */\nexport const performAuthorization = (url, providerId, onSuccess, onError, http, addProviderConfigCallBack, removeProviderConfigCallBack, securityObj?, customUriScheme?, deployedURL?) => {\n let requestSourceType = 'WEB';\n if (url) {\n if (isIE()) { // handling for IE\n handleLoginForIE(url, providerId, onSuccess, onError, removeProviderConfigCallBack);\n } else {\n postGetAuthorizationURL(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, http);\n }\n } else {\n if (isPassedFlow(securityObj, implicitIdentifier) || isPassedFlow(securityObj, pkceIdentifier)) {\n triggerProviderConfigCallBack(url, providerId, onSuccess, onError, http, addProviderConfigCallBack, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL);\n } else {\n return getAuthorizationUrl({\n 'providerId': providerId,\n 'requestSourceType': requestSourceType\n }, http).then((response) => {\n triggerProviderConfigCallBack(response, providerId, onSuccess, onError, http, addProviderConfigCallBack, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL);\n });\n }\n }\n};\n","import { Injectable, OnDestroy } from '@angular/core';\n\nimport { Observable, Subject } from 'rxjs';\n\nimport { AbstractHttpService } from '@wm/core';\n\nimport { getAccessToken, performAuthorization, removeAccessToken } from './oAuth.utils';\nimport {find, remove} from \"lodash-es\";\n\n@Injectable()\nexport class OAuthService implements OnDestroy {\n constructor(private httpService: AbstractHttpService) {}\n\n providers = new Subject();\n\n providersConfig = [];\n\n getOAuthProvidersAsObservable(): Observable<any> {\n return this.providers.asObservable();\n }\n\n addProviderConfig(provider) {\n if (!(find(this.providersConfig, {'name': provider.name}))) {\n this.providersConfig.push(provider);\n }\n this.providers.next(this.providersConfig);\n }\n\n removeProviderConfig(providerId) {\n remove<any>(this.providersConfig, provider => provider.name === providerId);\n this.providers.next(this.providersConfig);\n }\n\n perfromOAuthorization(url, providerId, onSuccess, onError, securityObj?, customUriScheme?, deployedURL?) {\n performAuthorization(url, providerId, onSuccess, onError, this.httpService, this.addProviderConfig.bind(this), this.removeProviderConfig.bind(this), securityObj, customUriScheme, deployedURL);\n }\n\n getAccessToken(provider, checkLocalStorage) {\n return getAccessToken(provider, checkLocalStorage);\n }\n\n removeAccessToken(provider) {\n removeAccessToken(provider);\n }\n\n ngOnDestroy() {\n // MEMORY LEAK FIX: Complete Subject to release subscriptions\n if (this.providers) {\n this.providers.complete();\n this.providers = null;\n }\n\n // MEMORY LEAK FIX: Clear providers config array\n this.providersConfig = [];\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../projects/oAuth/src/oAuth.utils.ts","../../../projects/oAuth/src/oAuth.service.ts","../../../projects/oAuth/src/index.ts"],"sourcesContent":["import { _WM_APP_PROJECT, isIE, getWmProjectProperties } from '@wm/core';\nimport {get, isUndefined} from \"lodash-es\";\n\nimport * as momentLib from 'moment';\nconst moment = momentLib.default || window['moment'];\ndeclare const jsSHA;\n\nconst accessTokenSuffix = '.access_token', pkceIdentifier = 'pkce', implicitIdentifier = 'implicit';\n\nlet code_verifier, redirectUri;\n\nexport const parseConfig = (serviceParams: any): any => {\n\n let val, param, config;\n const urlParams = serviceParams.urlParams;\n\n config = {\n url: 'services/oauth2/:providerId/authorizationUrl',\n method: 'GET'\n };\n\n /*To handle dynamic urls, append the serviceParams.config.url with the static url(i.e., config.url)*/\n if (serviceParams.config) {\n config.url = (serviceParams.config.url || '') + config.url;\n config.method = serviceParams.config.method || config.method;\n config.headers = config.headers || {};\n\n // TODO[Shubham] - change to for - of\n for (const key in serviceParams.config.headers) {\n val = serviceParams.config.headers[key];\n config.headers[key] = val;\n }\n }\n /* check for url parameters to replace the url */\n if (urlParams) {\n for (param in urlParams) {\n if (urlParams.hasOwnProperty(param)) {\n val = urlParams[param];\n if (!isUndefined(val) && val !== null) {\n config.url = config.url.replace(new RegExp(':' + param, 'g'), val);\n }\n }\n }\n }\n\n /* check for data */\n if (serviceParams.params) {\n config.params = serviceParams.params;\n }\n /* check for data */\n if (!isUndefined(serviceParams.data)) {\n config.data = serviceParams.data;\n }\n /* check for data parameters, written to support old service calls (.json calls) */\n if (serviceParams.dataParams) {\n config.data.params = serviceParams.dataParams;\n }\n /* check for headers */\n if (serviceParams.headers) {\n config.headers = serviceParams.headers;\n }\n\n /* set extra config flags */\n config.byPassResult = serviceParams.byPassResult;\n config.isDirectCall = serviceParams.isDirectCall;\n config.isExtURL = serviceParams.isExtURL;\n config.preventMultiple = serviceParams.preventMultiple;\n config.responseType = serviceParams.responseType;\n\n return config;\n};\n\nconst listeners = {},\n ACCESSTOKEN_PLACEHOLDERS = {\n 'STUDIO': 'WM_STUDIO_',\n 'RUN': 'WM_RUN_'\n },\n newWindowProps = 'width=400,height=600';\n\n/**\n * This function remove the accessToken for a provider\n * @param provider\n */\nexport const removeAccessToken = (provider) => {\n const accessTokenKey = getAccessTokenPlaceholder(provider);\n localStorage.removeItem(accessTokenKey);\n};\n\n/**\n * This function returns the accesstoken placeholder based on the studio or run mode for the project\n * @param provider\n * @returns {*}\n */\nfunction getAccessTokenPlaceholder(provider) {\n let accessTokenKey;\n accessTokenKey = ACCESSTOKEN_PLACEHOLDERS.RUN + _WM_APP_PROJECT.id + '_' + provider + accessTokenSuffix;\n return accessTokenKey;\n}\n\n/**\n * This function performs the fake local storage update, so the IE gets the latest token instead of returning the cached localStorageValue\n */\nfunction performFakeLocalStorageUpdate() {\n const dummy_key = 'dummy_key';\n localStorage.setItem(dummy_key, dummy_key);\n localStorage.removeItem(dummy_key);\n}\n\n/**\n * This function sets the accessToken\n * @param provider\n * @param accesstoken\n */\nfunction setAccessToken(provider, accesstoken) {\n const accessTokenKey = getAccessTokenPlaceholder(provider);\n localStorage.setItem(accessTokenKey, accesstoken);\n}\n\n/**\n * this is a callback function to check if the authentication is done and invokes the successCallback\n * @param providerId\n * @param successCallback\n * @param evt\n */\nfunction checkAuthenticationStatus(providerId, successCallback, removeProviderConfigCallBack, evt, http?, securityObj?) {\n const accessTokenKey = providerId + accessTokenSuffix,\n accessTokenOrCode = localStorage.getItem(accessTokenKey);\n if (evt && evt.origin !== window.location.origin) {\n return;\n }\n if (accessTokenOrCode) {\n if (isPassedFlow(securityObj, pkceIdentifier)) {\n const req = 'client_id=' + securityObj.clientId + '&code=' + accessTokenOrCode + '&grant_type=authorization_code&code_verifier=' + code_verifier + '&redirect_uri=' + redirectUri;\n http.send({\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n url: securityObj.accessTokenUrl,\n data: req\n }).then(function(response) {\n triggerAccessTokenSuccessCallback(providerId, successCallback, removeProviderConfigCallBack, accessTokenKey, response.body.access_token);\n });\n } else {\n triggerAccessTokenSuccessCallback(providerId, successCallback, removeProviderConfigCallBack, accessTokenKey, accessTokenOrCode);\n }\n }\n}\n\n/**\n * function trigger the successCallback after getting the access token\n */\nfunction triggerAccessTokenSuccessCallback(providerId, successCallback, removeProviderConfigCallBack, accessTokenKey, token) {\n removeProviderConfigCallBack(providerId);\n localStorage.removeItem(accessTokenKey);\n setAccessToken(providerId, token);\n window.removeEventListener('message', listeners[providerId]);\n setTimeout(() => {\n delete listeners[providerId];\n if (successCallback) {\n successCallback(token);\n }\n });\n}\n\n/**\n * this function keeps on checking the accesstoken in the LocalStorage and updates it accordingly\n * @param providerId\n * @param onSuccess\n * @param onError\n * @param startTime\n * @param loginObj\n */\nfunction checkAccessTokenInWindow(providerId, onSuccess, onError, startTime, loginObj, removeProviderConfigCallBack) {\n performFakeLocalStorageUpdate();\n const currentTime = moment.duration(moment().format('HH:mm'), 'HH:mm' as any),\n timeDiff = currentTime.subtract(startTime),\n accessToken = getAccessToken(providerId, true);\n if (accessToken) {\n loginObj.accesstoken_retrieved = true;\n setAccessToken(providerId, accessToken);\n localStorage.removeItem(providerId + accessTokenSuffix);\n removeProviderConfigCallBack(providerId);\n if (onSuccess) {\n onSuccess();\n }\n } else if (timeDiff.minutes() > 1 && onSuccess && !loginObj.accesstoken_retrieved) {\n onSuccess('error');\n } else {\n setTimeout(() => {\n checkAccessTokenInWindow(providerId, onSuccess, onError, startTime, loginObj, removeProviderConfigCallBack);\n }, 3000);\n }\n}\n\n/**\n * checks for the window existence i.e if the window is manually closed by the user or any such\n * @param oAuthWindow\n * @param provider\n * @param callback\n */\nfunction checkForWindowExistence(oAuthWindow, provider, callback, providerInfo?) {\n if (oAuthWindow && listeners[provider]) {\n if (!oAuthWindow.closed) { // .closed is supported across major browser vendors however for IE the user has to enable protected mode from security options\n setTimeout(checkForWindowExistence.bind(undefined, oAuthWindow, provider, callback, providerInfo), 3000);\n } else {\n if (!isPassedFlow(providerInfo, pkceIdentifier)) {\n window.removeEventListener('message', listeners[provider]);\n delete listeners[provider];\n if (callback) {\n callback('error');\n }\n }\n }\n }\n}\n/**\n * this functions handles the logic related to the window operations in IE\n * @param url\n * @param providerId\n * @param onSuccess\n * @param onError\n */\nfunction handleLoginForIE(url, providerId, onSuccess, onError, removeProviderConfigCallBack, securityObj?, requestSourceType?, customUriScheme?, deployedURL?) {\n const loginObj = {\n 'accesstoken_retrieved': false\n };\n if (isPassedFlow(securityObj, implicitIdentifier)) {\n url = constructURLForImplicitOrPKCE(providerId, securityObj, requestSourceType, null, customUriScheme, deployedURL);\n }\n window.open(url, '_blank', newWindowProps);\n checkAccessTokenInWindow(providerId, onSuccess, onError, moment.duration(moment().format('HH:mm'), 'HH:mm' as any), loginObj, removeProviderConfigCallBack);\n}\n\n/**\n * this functions returns if the current oAuth Flow matches the passed flow or not\n * @param providerInfo\n */\nfunction isPassedFlow(providerInfo, flow) {\n let oAuthFlow = get(providerInfo, 'oauth2Flow');\n oAuthFlow = oAuthFlow ? oAuthFlow.toLowerCase() : oAuthFlow;\n if (flow === pkceIdentifier) {\n if (get(providerInfo, 'oAuth2Pkce.enabled') === true) {\n oAuthFlow = pkceIdentifier;\n }\n }\n return oAuthFlow === flow;\n}\n\n/**\n * this function adds the listener on the window and assigns the listener\n * @param provider\n * @param callback\n */\nfunction onAuthWindowOpen(provider, callback, removeProviderConfigCallBack, http?, securityObj?) {\n listeners[provider] = checkAuthenticationStatus.bind(undefined, provider, callback, removeProviderConfigCallBack, null, http, securityObj);\n window.addEventListener('message', listeners[provider], false);\n}\n\n// Generate a secure random string using the browser crypto functions\nfunction generateRandomString() {\n const array = new Uint32Array(28);\n window.crypto.getRandomValues(array);\n return Array.from(array, dec => ('0' + dec.toString(16)).substr(-2)).join('');\n}\n\n// Returns a promise that resolves to an ArrayBuffer\nfunction getEncryptedCode(plain) {\n const encoder = new TextEncoder();\n const data = encoder.encode(plain);\n const shaObj = new jsSHA(\"SHA-256\", \"UINT8ARRAY\", { encoding: \"UTF8\" });\n shaObj.update(data);\n return shaObj.getHash(\"ARRAYBUFFER\");\n}\n\n// Base64-urlencodes the input string\nfunction base64urlencode(str) {\n // Convert the ArrayBuffer to string using Uint8 array to convert to what btoa accepts.\n // btoa accepts chars only within ascii 0-255 and base64 encodes them.\n // Then convert the base64 encoded to base64url encoded\n // (replace + with -, replace / with _, trim trailing =)\n return btoa(String.fromCharCode.apply(null, new Uint8Array(str)))\n .replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\n/**\n * this function is a callback function which enables the listener and checks for the window existence\n * @param providerId\n * @param onSuccess\n * @param url\n */\nfunction postGetAuthorizationURL(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj?, requestSourceType?, customUriScheme?, deployedURL?, http?) {\n if (isPassedFlow(securityObj, implicitIdentifier)) {\n url = constructURLForImplicitOrPKCE(providerId, securityObj, requestSourceType, null, customUriScheme, deployedURL);\n startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n } else if (isPassedFlow(securityObj, pkceIdentifier)) {\n // Create and store a new PKCE code_verifier (the plaintext random secret)\n code_verifier = generateRandomString();\n let code_challenge;\n if (get(securityObj, 'oAuth2Pkce.challengeMethod') === 'plain') {\n code_challenge = code_verifier;\n url = constructURLForImplicitOrPKCE(providerId, securityObj, requestSourceType, code_challenge, customUriScheme, deployedURL);\n startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n } else {\n const encryptedCode = getEncryptedCode(code_verifier);\n code_challenge = base64urlencode(encryptedCode);\n //code_challenge = encryptedCode;\n url = constructURLForImplicitOrPKCE(providerId, securityObj, requestSourceType, code_challenge, customUriScheme, deployedURL);\n startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n\n }\n } else {\n startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n }\n}\n\nfunction startoAuthFlow(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj?, requestSourceType?, customUriScheme?, deployedURL?, http?) {\n let oAuthWindow;\n oAuthWindow = window.open(url, '_blank', newWindowProps);\n onAuthWindowOpen(providerId, onSuccess, removeProviderConfigCallBack, http, securityObj);\n checkForWindowExistence(oAuthWindow, providerId, onSuccess, securityObj);\n}\n\n/**\n * function to construct the url for implicit flow.\n * @param providerId provider id for which the url has to be set\n * @param providerInfo provider object which contains details such as scope, client id etc\n * @param requestSourceType requesting source is web or mobile\n * @returns url string\n */\nfunction constructURLForImplicitOrPKCE(providerId, providerInfo, requestSourceType, code_challenge, customUriScheme?, deployedURL?) {\n redirectUri = window.location.href.split('/#/')[0] + '/oAuthCallback.html';\n const clientId = providerInfo.clientId;\n const scopes = providerInfo.scopes.map(function(scope) { return scope.name }).join(' ');\n let state;\n if (getWmProjectProperties().isTestRuntime === true) {\n redirectUri = location.protocol + '//' + window.location.host + '/studio/oAuthCallback.html';\n }\n if (requestSourceType === 'MOBILE') {\n redirectUri = deployedURL + 'oAuthCallback.html';\n }\n const flow = isPassedFlow(providerInfo, implicitIdentifier) ? implicitIdentifier : pkceIdentifier;\n state = {providerId: providerId, suffix: accessTokenSuffix, requestSourceType: requestSourceType, flow: flow, scheme: customUriScheme};\n const authUrlArr = providerInfo.authorizationUrl.split('?');\n let connector;\n if (authUrlArr.length === 1) {\n //query params don't exist\n connector = '?';\n } else if (authUrlArr.length > 1 && authUrlArr[1] !== '') {\n //query params exist. Append & instead of ?.\n connector = '&';\n } else {\n //nothing exists after '?'. client_id can be directly appended;\n connector = '';\n }\n const commonUrl = providerInfo.authorizationUrl + connector + 'client_id=' + clientId + '&redirect_uri=' + redirectUri + '&state=' + encodeURIComponent(JSON.stringify(state)) + '&scope=' + encodeURIComponent(scopes);\n let url;\n if (flow === implicitIdentifier) {\n const responseType = providerInfo.responseType ? providerInfo.responseType : 'token';\n url = commonUrl + '&response_type=' + responseType;\n } else {\n url = commonUrl + '&response_type=code&code_challenge=' + code_challenge + '&code_challenge_method=' + get(providerInfo, 'oAuth2Pkce.challengeMethod');\n }\n return url;\n}\n\n/**\n * function to get the authorization url\n * @param params provider id for which the auth url has to be fetched\n * @param successCallback callback to be invoked upon successful fetch of the providers\n * @param failureCallback callback to be invoked upon error\n * @returns {*}\n */\nfunction getAuthorizationUrl(params, http) {\n const action = 'getAuthorizationUrl',\n serviceSettings = parseConfig({\n target: 'oauthConfiguration',\n action: action,\n urlParams: {\n projectId: _WM_APP_PROJECT.id,\n providerId: params.providerId\n },\n params: {\n 'requestSourceType': params.requestSourceType\n }\n });\n return http.send(serviceSettings);\n}\n\n/**\n * function trigger the addProviderConfigCallBack after getting the authorization url\n */\nfunction triggerProviderConfigCallBack(url, providerId, onSuccess, onError, http, addProviderConfigCallBack, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL) {\n const urlBody = isPassedFlow(securityObj, implicitIdentifier) || isPassedFlow(securityObj, pkceIdentifier) ? url : url.body;\n addProviderConfigCallBack({\n name: providerId,\n url: urlBody,\n invoke: () => {\n if (isIE()) { // handling for IE\n handleLoginForIE(url, providerId, onSuccess, onError, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL);\n } else {\n postGetAuthorizationURL(urlBody, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL, http);\n }\n }\n });\n}\n\n/**\n * this function retrieves the accessToken based on the run/studiomode\n * @param provider\n * @returns {*}\n */\nexport const getAccessToken = (provider, checkLocalStorage) => {\n const accessTokenKey = getAccessTokenPlaceholder(provider);\n if (checkLocalStorage) {\n return localStorage.getItem(provider + accessTokenSuffix);\n }\n return localStorage.getItem(accessTokenKey);\n};\n\n\n/**\n * this function is used to perform the authorization by opening the window and having active listeners\n * @param url\n * @param providerId\n * @param onSuccess\n * @returns {*}\n */\nexport const performAuthorization = (url, providerId, onSuccess, onError, http, addProviderConfigCallBack, removeProviderConfigCallBack, securityObj?, customUriScheme?, deployedURL?) => {\n let requestSourceType = 'WEB';\n if (url) {\n if (isIE()) { // handling for IE\n handleLoginForIE(url, providerId, onSuccess, onError, removeProviderConfigCallBack);\n } else {\n postGetAuthorizationURL(url, providerId, onSuccess, removeProviderConfigCallBack, securityObj, requestSourceType, http);\n }\n } else {\n if (isPassedFlow(securityObj, implicitIdentifier) || isPassedFlow(securityObj, pkceIdentifier)) {\n triggerProviderConfigCallBack(url, providerId, onSuccess, onError, http, addProviderConfigCallBack, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL);\n } else {\n return getAuthorizationUrl({\n 'providerId': providerId,\n 'requestSourceType': requestSourceType\n }, http).then((response) => {\n triggerProviderConfigCallBack(response, providerId, onSuccess, onError, http, addProviderConfigCallBack, removeProviderConfigCallBack, securityObj, requestSourceType, customUriScheme, deployedURL);\n });\n }\n }\n};\n","import { Injectable, OnDestroy } from '@angular/core';\n\nimport { Observable, Subject } from 'rxjs';\n\nimport { AbstractHttpService } from '@wm/core';\n\nimport { getAccessToken, performAuthorization, removeAccessToken } from './oAuth.utils';\nimport {find, remove} from \"lodash-es\";\n\n@Injectable()\nexport class OAuthService implements OnDestroy {\n constructor(private httpService: AbstractHttpService) {}\n\n providers = new Subject();\n\n providersConfig: any = [];\n\n getOAuthProvidersAsObservable(): Observable<any> {\n return this.providers.asObservable();\n }\n\n addProviderConfig(provider) {\n if (!(find(this.providersConfig, {'name': provider.name}))) {\n this.providersConfig.push(provider);\n }\n this.providers.next(this.providersConfig);\n }\n\n removeProviderConfig(providerId) {\n remove<any>(this.providersConfig, provider => provider.name === providerId);\n this.providers.next(this.providersConfig);\n }\n\n perfromOAuthorization(url, providerId, onSuccess, onError, securityObj?, customUriScheme?, deployedURL?) {\n performAuthorization(url, providerId, onSuccess, onError, this.httpService, this.addProviderConfig.bind(this), this.removeProviderConfig.bind(this), securityObj, customUriScheme, deployedURL);\n }\n\n getAccessToken(provider, checkLocalStorage) {\n return getAccessToken(provider, checkLocalStorage);\n }\n\n removeAccessToken(provider) {\n removeAccessToken(provider);\n }\n\n ngOnDestroy() {\n // MEMORY LEAK FIX: Complete Subject to release subscriptions\n if (this.providers) {\n this.providers.complete();\n this.providers = null;\n }\n\n // MEMORY LEAK FIX: Clear providers config array\n this.providersConfig = [];\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;AAIA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC;AAGpD,MAAM,iBAAiB,GAAG,eAAe,EAAE,cAAc,GAAG,MAAM,EAAE,kBAAkB,GAAG,UAAU;AAEnG,IAAI,aAAa,EAAE,WAAW;AAEvB,MAAM,WAAW,GAAG,CAAC,aAAkB,KAAS;AAEnD,IAAA,IAAI,GAAG,EAAE,KAAK,EAAE,MAAM;AACtB,IAAA,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS;AAEzC,IAAA,MAAM,GAAG;AACL,QAAA,GAAG,EAAE,8CAA8C;AACnD,QAAA,MAAM,EAAE;KACX;;AAGD,IAAA,IAAI,aAAa,CAAC,MAAM,EAAE;AACtB,QAAA,MAAM,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,IAAI,MAAM,CAAC,GAAG;AAC1D,QAAA,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM;QAC5D,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE;;QAGrC,KAAK,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE;YAC5C,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;AACvC,YAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG;QAC7B;IACJ;;IAEA,IAAI,SAAS,EAAE;AACX,QAAA,KAAK,KAAK,IAAI,SAAS,EAAE;AACrB,YAAA,IAAI,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;AACjC,gBAAA,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC;gBACtB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE;oBACnC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC;gBACtE;YACJ;QACJ;IACJ;;AAGA,IAAA,IAAI,aAAa,CAAC,MAAM,EAAE;AACtB,QAAA,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM;IACxC;;IAEA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AAClC,QAAA,MAAM,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI;IACpC;;AAEA,IAAA,IAAI,aAAa,CAAC,UAAU,EAAE;QAC1B,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,UAAU;IACjD;;AAEA,IAAA,IAAI,aAAa,CAAC,OAAO,EAAE;AACvB,QAAA,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO;IAC1C;;AAGA,IAAA,MAAM,CAAC,YAAY,GAAM,aAAa,CAAC,YAAY;AACnD,IAAA,MAAM,CAAC,YAAY,GAAM,aAAa,CAAC,YAAY;AACnD,IAAA,MAAM,CAAC,QAAQ,GAAU,aAAa,CAAC,QAAQ;AAC/C,IAAA,MAAM,CAAC,eAAe,GAAG,aAAa,CAAC,eAAe;AACtD,IAAA,MAAM,CAAC,YAAY,GAAM,aAAa,CAAC,YAAY;AAEnD,IAAA,OAAO,MAAM;AACjB;AAEA,MAAM,SAAS,GAAG,EAAE,EAChB,wBAAwB,GAAG;AACvB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,KAAK,EAAE;CACV,EACD,cAAc,GAAG,sBAAsB;AAE3C;;;AAGG;AACI,MAAM,iBAAiB,GAAG,CAAC,QAAQ,KAAI;AAC1C,IAAA,MAAM,cAAc,GAAG,yBAAyB,CAAC,QAAQ,CAAC;AAC1D,IAAA,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC;AAC3C;AAEA;;;;AAIG;AACH,SAAS,yBAAyB,CAAC,QAAQ,EAAA;AACvC,IAAA,IAAI,cAAc;AAClB,IAAA,cAAc,GAAG,wBAAwB,CAAC,GAAG,GAAG,eAAe,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,GAAG,iBAAiB;AACvG,IAAA,OAAO,cAAc;AACzB;AAEA;;AAEG;AACH,SAAS,6BAA6B,GAAA;IAClC,MAAM,SAAS,GAAG,WAAW;AAC7B,IAAA,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;AAC1C,IAAA,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC;AACtC;AAEA;;;;AAIG;AACH,SAAS,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAA;AACzC,IAAA,MAAM,cAAc,GAAG,yBAAyB,CAAC,QAAQ,CAAC;AAC1D,IAAA,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC;AACrD;AAEA;;;;;AAKG;AACH,SAAS,yBAAyB,CAAC,UAAU,EAAE,eAAe,EAAE,4BAA4B,EAAE,GAAG,EAAE,IAAK,EAAE,WAAY,EAAA;AAClH,IAAA,MAAM,cAAc,GAAG,UAAU,GAAG,iBAAiB,EACjD,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC;AAC5D,IAAA,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;QAC9C;IACJ;IACA,IAAI,iBAAiB,EAAE;AACnB,QAAA,IAAI,YAAY,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE;AAC3C,YAAA,MAAM,GAAG,GAAG,YAAY,GAAG,WAAW,CAAC,QAAQ,GAAG,QAAQ,GAAG,iBAAiB,GAAG,+CAA+C,GAAG,aAAa,GAAG,gBAAgB,GAAG,WAAW;YACjL,IAAI,CAAC,IAAI,CAAC;AACN,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,OAAO,EAAE;AACL,oBAAA,cAAc,EAAE;AACnB,iBAAA;gBACD,GAAG,EAAE,WAAW,CAAC,cAAc;AAC/B,gBAAA,IAAI,EAAE;AACT,aAAA,CAAC,CAAC,IAAI,CAAC,UAAS,QAAQ,EAAA;AACrB,gBAAA,iCAAiC,CAAC,UAAU,EAAE,eAAe,EAAE,4BAA4B,EAAE,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;AAC5I,YAAA,CAAC,CAAC;QACN;aAAO;YACH,iCAAiC,CAAC,UAAU,EAAE,eAAe,EAAE,4BAA4B,EAAE,cAAc,EAAE,iBAAiB,CAAC;QACnI;IACJ;AACJ;AAEA;;AAEG;AACH,SAAS,iCAAiC,CAAC,UAAU,EAAE,eAAe,EAAE,4BAA4B,EAAE,cAAc,EAAE,KAAK,EAAA;IACvH,4BAA4B,CAAC,UAAU,CAAC;AACxC,IAAA,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC;AACvC,IAAA,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC;IACjC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAC5D,UAAU,CAAC,MAAK;AACZ,QAAA,OAAO,SAAS,CAAC,UAAU,CAAC;QAC5B,IAAI,eAAe,EAAE;YACjB,eAAe,CAAC,KAAK,CAAC;QAC1B;AACJ,IAAA,CAAC,CAAC;AACN;AAEA;;;;;;;AAOG;AACH,SAAS,wBAAwB,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,EAAA;AAC/G,IAAA,6BAA6B,EAAE;AAC/B,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,OAAc,CAAC,EACzE,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAC1C,WAAW,GAAG,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC;IAClD,IAAI,WAAW,EAAE;AACb,QAAA,QAAQ,CAAC,qBAAqB,GAAG,IAAI;AACrC,QAAA,cAAc,CAAC,UAAU,EAAE,WAAW,CAAC;AACvC,QAAA,YAAY,CAAC,UAAU,CAAC,UAAU,GAAG,iBAAiB,CAAC;QACvD,4BAA4B,CAAC,UAAU,CAAC;QACxC,IAAI,SAAS,EAAE;AACX,YAAA,SAAS,EAAE;QACf;IACJ;AAAO,SAAA,IAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,SAAS,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE;QAC/E,SAAS,CAAC,OAAO,CAAC;IACtB;SAAO;QACH,UAAU,CAAC,MAAK;AACZ,YAAA,wBAAwB,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,CAAC;QAC/G,CAAC,EAAE,IAAI,CAAC;IACZ;AACJ;AAEA;;;;;AAKG;AACH,SAAS,uBAAuB,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAa,EAAA;AAC3E,IAAA,IAAI,WAAW,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACrB,YAAA,UAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC;QAC5G;aAAO;YACH,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE;gBAC7C,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1D,gBAAA,OAAO,SAAS,CAAC,QAAQ,CAAC;gBAC1B,IAAI,QAAQ,EAAE;oBACV,QAAQ,CAAC,OAAO,CAAC;gBACrB;YACJ;QACJ;IACJ;AACJ;AACA;;;;;;AAMG;AACH,SAAS,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,4BAA4B,EAAE,WAAY,EAAE,iBAAkB,EAAE,eAAgB,EAAE,WAAY,EAAA;AACzJ,IAAA,MAAM,QAAQ,GAAG;AACb,QAAA,uBAAuB,EAAE;KAC5B;AACD,IAAA,IAAI,YAAY,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAAE;AAC/C,QAAA,GAAG,GAAG,6BAA6B,CAAC,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,CAAC;IACvH;IACA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,cAAc,CAAC;IAC1C,wBAAwB,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,OAAc,CAAC,EAAE,QAAQ,EAAE,4BAA4B,CAAC;AAC/J;AAEA;;;AAGG;AACH,SAAS,YAAY,CAAC,YAAY,EAAE,IAAI,EAAA;IACpC,IAAI,SAAS,GAAG,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC;AAC/C,IAAA,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,SAAS;AAC3D,IAAA,IAAI,IAAI,KAAK,cAAc,EAAE;QACzB,IAAI,GAAG,CAAC,YAAY,EAAE,oBAAoB,CAAC,KAAK,IAAI,EAAE;YAClD,SAAS,GAAG,cAAc;QAC9B;IACJ;IACA,OAAO,SAAS,KAAK,IAAI;AAC7B;AAEA;;;;AAIG;AACH,SAAS,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,4BAA4B,EAAE,IAAK,EAAE,WAAY,EAAA;IAC3F,SAAS,CAAC,QAAQ,CAAC,GAAG,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,4BAA4B,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC;AAC1I,IAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;AAClE;AAEA;AACA,SAAS,oBAAoB,GAAA;AACzB,IAAA,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;AACjC,IAAA,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC;AACpC,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACjF;AAEA;AACA,SAAS,gBAAgB,CAAC,KAAK,EAAA;AAC3B,IAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AAClC,IAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACvE,IAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AACnB,IAAA,OAAO,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;AACxC;AAEA;AACA,SAAS,eAAe,CAAC,GAAG,EAAA;;;;;AAKxB,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;AAC3D,SAAA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACnE;AAEA;;;;;AAKG;AACH,SAAS,uBAAuB,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,4BAA4B,EAAE,WAAY,EAAE,iBAAkB,EAAE,eAAgB,EAAE,WAAY,EAAE,IAAK,EAAA;AAC9J,IAAA,IAAI,YAAY,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAAE;AAC/C,QAAA,GAAG,GAAG,6BAA6B,CAAC,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,CAAC;AACnH,QAAA,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,4BAA4B,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC;IAChJ;AAAO,SAAA,IAAI,YAAY,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE;;QAElD,aAAa,GAAG,oBAAoB,EAAE;AACtC,QAAA,IAAI,cAAc;QAClB,IAAI,GAAG,CAAC,WAAW,EAAE,4BAA4B,CAAC,KAAK,OAAO,EAAE;YAC5D,cAAc,GAAG,aAAa;AAC9B,YAAA,GAAG,GAAG,6BAA6B,CAAC,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,CAAC;AAC7H,YAAA,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,4BAA4B,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC;QAChJ;aAAO;AACH,YAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,aAAa,CAAC;AACrD,YAAA,cAAc,GAAG,eAAe,CAAC,aAAa,CAAC;;AAE/C,YAAA,GAAG,GAAG,6BAA6B,CAAC,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,CAAC;AAC7H,YAAA,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,4BAA4B,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC;QAEhJ;IACJ;SAAO;AACH,QAAA,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,4BAA4B,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC;IAChJ;AACJ;AAEA,SAAS,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,4BAA4B,EAAE,WAAY,EAAE,iBAAkB,EAAE,eAAgB,EAAE,WAAY,EAAE,IAAK,EAAA;AACrJ,IAAA,IAAI,WAAW;IACX,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,cAAc,CAAC;IACxD,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,4BAA4B,EAAE,IAAI,EAAE,WAAW,CAAC;IACxF,uBAAuB,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC;AAChF;AAEA;;;;;;AAMG;AACH,SAAS,6BAA6B,CAAC,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAgB,EAAE,WAAY,EAAA;AAC9H,IAAA,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,qBAAqB;AAC1E,IAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ;IACtC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,UAAS,KAAK,EAAA,EAAI,OAAO,KAAK,CAAC,IAAI,CAAA,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACvF,IAAA,IAAI,KAAK;AACT,IAAA,IAAI,sBAAsB,EAAE,CAAC,aAAa,KAAK,IAAI,EAAE;AACjD,QAAA,WAAW,GAAG,QAAQ,CAAC,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,4BAA4B;IAChG;AACA,IAAA,IAAI,iBAAiB,KAAK,QAAQ,EAAE;AAChC,QAAA,WAAW,GAAG,WAAW,GAAG,oBAAoB;IACpD;AACA,IAAA,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,EAAE,kBAAkB,CAAC,GAAG,kBAAkB,GAAG,cAAc;IACjG,KAAK,GAAG,EAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAC;IACtI,MAAM,UAAU,GAAG,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC;AAC3D,IAAA,IAAI,SAAS;AACb,IAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;;QAEzB,SAAS,GAAG,GAAG;IACnB;AAAO,SAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;;QAEtD,SAAS,GAAG,GAAG;IACnB;SAAO;;QAEH,SAAS,GAAG,EAAE;IAClB;AACA,IAAA,MAAM,SAAS,GAAG,YAAY,CAAC,gBAAgB,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,gBAAgB,GAAG,WAAW,GAAG,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC;AACvN,IAAA,IAAI,GAAG;AACP,IAAA,IAAI,IAAI,KAAK,kBAAkB,EAAE;AAC7B,QAAA,MAAM,YAAY,GAAG,YAAY,CAAC,YAAY,GAAG,YAAY,CAAC,YAAY,GAAG,OAAO;AACpF,QAAA,GAAG,GAAG,SAAS,GAAG,iBAAiB,GAAG,YAAY;IACtD;SAAO;AACH,QAAA,GAAG,GAAG,SAAS,GAAG,qCAAqC,GAAG,cAAc,GAAG,yBAAyB,GAAG,GAAG,CAAC,YAAY,EAAE,4BAA4B,CAAC;IAC1J;AACA,IAAA,OAAO,GAAG;AACd;AAEA;;;;;;AAMG;AACH,SAAS,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAA;AACrC,IAAA,MAAM,MAAM,GAAG,qBAAqB,EAChC,eAAe,GAAG,WAAW,CAAC;AAC1B,QAAA,MAAM,EAAE,oBAAoB;AAC5B,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,SAAS,EAAE;YACP,SAAS,EAAE,eAAe,CAAC,EAAE;YAC7B,UAAU,EAAE,MAAM,CAAC;AACtB,SAAA;AACD,QAAA,MAAM,EAAE;YACJ,mBAAmB,EAAE,MAAM,CAAC;AAC/B;AACJ,KAAA,CAAC;AACN,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AACrC;AAEA;;AAEG;AACH,SAAS,6BAA6B,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAA;IACnM,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,kBAAkB,CAAC,IAAI,YAAY,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI;AAC3H,IAAA,yBAAyB,CAAC;AACtB,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,GAAG,EAAE,OAAO;QACZ,MAAM,EAAE,MAAK;AACT,YAAA,IAAI,IAAI,EAAE,EAAE;AACR,gBAAA,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,4BAA4B,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,CAAC;YACrJ;iBAAO;AACH,gBAAA,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,4BAA4B,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC;YAC7J;QACJ;AACH,KAAA,CAAC;AACN;AAEA;;;;AAIG;MACU,cAAc,GAAG,CAAC,QAAQ,EAAE,iBAAiB,KAAI;AAC1D,IAAA,MAAM,cAAc,GAAG,yBAAyB,CAAC,QAAQ,CAAC;IAC1D,IAAI,iBAAiB,EAAE;QACnB,OAAO,YAAY,CAAC,OAAO,CAAC,QAAQ,GAAG,iBAAiB,CAAC;IAC7D;AACA,IAAA,OAAO,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC;AAC/C;AAGA;;;;;;AAMG;AACI,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,WAAY,EAAE,eAAgB,EAAE,WAAY,KAAI;IACrL,IAAI,iBAAiB,GAAG,KAAK;IAC7B,IAAI,GAAG,EAAE;AACL,QAAA,IAAI,IAAI,EAAE,EAAE;YACR,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,4BAA4B,CAAC;QACvF;aAAO;AACH,YAAA,uBAAuB,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,4BAA4B,EAAE,WAAW,EAAE,iBAAiB,EAAE,IAAI,CAAC;QAC3H;IACJ;SAAO;AACH,QAAA,IAAI,YAAY,CAAC,WAAW,EAAE,kBAAkB,CAAC,IAAI,YAAY,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE;YAC5F,6BAA6B,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,CAAC;QACnM;aAAO;AACH,YAAA,OAAO,mBAAmB,CAAC;AACvB,gBAAA,YAAY,EAAE,UAAU;AACxB,gBAAA,mBAAmB,EAAE;aACxB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAI;gBACvB,6BAA6B,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,CAAC;AACxM,YAAA,CAAC,CAAC;QACN;IACJ;AACJ;;MCtba,YAAY,CAAA;AACrB,IAAA,WAAA,CAAoB,WAAgC,EAAA;QAAhC,IAAA,CAAA,WAAW,GAAX,WAAW;AAE/B,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAE;QAEzB,IAAA,CAAA,eAAe,GAAQ,EAAE;IAJ8B;IAMvD,6BAA6B,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;IACxC;AAEA,IAAA,iBAAiB,CAAC,QAAQ,EAAA;AACtB,QAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAC,CAAC,CAAC,EAAE;AACxD,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;QACvC;QACA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;IAC7C;AAEA,IAAA,oBAAoB,CAAC,UAAU,EAAA;AAC3B,QAAA,MAAM,CAAM,IAAI,CAAC,eAAe,EAAE,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC;QAC3E,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;IAC7C;AAEA,IAAA,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAY,EAAE,eAAgB,EAAE,WAAY,EAAA;AACnG,QAAA,oBAAoB,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,CAAC;IACnM;IAEA,cAAc,CAAC,QAAQ,EAAE,iBAAiB,EAAA;AACtC,QAAA,OAAO,cAAc,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACtD;AAEA,IAAA,iBAAiB,CAAC,QAAQ,EAAA;QACtB,iBAAiB,CAAC,QAAQ,CAAC;IAC/B;IAEA,WAAW,GAAA;;AAEP,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACzB;;AAGA,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;IAC7B;+GA5CS,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAZ,YAAY,EAAA,CAAA,CAAA;;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB;;;ACTD;;AAEG;;;;"}
|
package/oAuth/oAuth.service.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export declare class OAuthService implements OnDestroy {
|
|
|
6
6
|
private httpService;
|
|
7
7
|
constructor(httpService: AbstractHttpService);
|
|
8
8
|
providers: Subject<unknown>;
|
|
9
|
-
providersConfig: any
|
|
9
|
+
providersConfig: any;
|
|
10
10
|
getOAuthProvidersAsObservable(): Observable<any>;
|
|
11
11
|
addProviderConfig(provider: any): void;
|
|
12
12
|
removeProviderConfig(providerId: any): void;
|
package/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wavemaker/app-ng-runtime",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.15.0-1.246",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@wavemaker/app-ng-runtime",
|
|
9
|
-
"version": "11.
|
|
9
|
+
"version": "11.15.0-1.246",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"engines": {
|
|
12
12
|
"node": ">=18.16.1",
|
package/package.json
CHANGED
|
@@ -854,7 +854,7 @@
|
|
|
854
854
|
}
|
|
855
855
|
loadScripts() {
|
|
856
856
|
return new Promise((resolve) => {
|
|
857
|
-
const scriptsRequired = this.partialDirective
|
|
857
|
+
const scriptsRequired = this.partialDirective?.$element.attr('scripts-to-load');
|
|
858
858
|
if (scriptsRequired) {
|
|
859
859
|
this.scriptLoaderService
|
|
860
860
|
.load(...scriptsRequired.split(','))
|
|
@@ -1371,10 +1371,7 @@
|
|
|
1371
1371
|
ngOnDestroy() {
|
|
1372
1372
|
// MEMORY LEAK FIX: Unwatch all Page-scoped watchers for THIS specific page when page is destroyed
|
|
1373
1373
|
if (this.pageName) {
|
|
1374
|
-
|
|
1375
|
-
if (removedCount > 0) {
|
|
1376
|
-
console.log(`🧹 Cleaned up ${removedCount} Page-scoped watcher(s) for page ${this.pageName}`);
|
|
1377
|
-
}
|
|
1374
|
+
i1.$unwatchAllByScope('Page', this.pageName);
|
|
1378
1375
|
}
|
|
1379
1376
|
//this.captureApplicationThumbnail();
|
|
1380
1377
|
this.savePageSnapShot();
|
|
@@ -1830,6 +1827,7 @@
|
|
|
1830
1827
|
constructor() {
|
|
1831
1828
|
super(...arguments);
|
|
1832
1829
|
this.compileContent = false;
|
|
1830
|
+
this.scriptsLoaded = false;
|
|
1833
1831
|
this.destroy$ = new rxjs.Subject();
|
|
1834
1832
|
this.viewInit$ = new rxjs.Subject();
|
|
1835
1833
|
}
|
|
@@ -1979,6 +1977,10 @@
|
|
|
1979
1977
|
}
|
|
1980
1978
|
loadScripts() {
|
|
1981
1979
|
return new Promise((resolve) => {
|
|
1980
|
+
if (!this.prefabContainerDirective) {
|
|
1981
|
+
resolve();
|
|
1982
|
+
return;
|
|
1983
|
+
}
|
|
1982
1984
|
const scriptsRequired = this.prefabContainerDirective.$element.attr('scripts-to-load');
|
|
1983
1985
|
if (scriptsRequired) {
|
|
1984
1986
|
this.scriptLoaderService
|
|
@@ -2015,16 +2017,19 @@
|
|
|
2015
2017
|
this.mute();
|
|
2016
2018
|
lodashEs.each(this.Widgets, w => w && w.ngOnDetach && w.ngOnDetach());
|
|
2017
2019
|
}
|
|
2018
|
-
|
|
2019
|
-
this.
|
|
2020
|
-
this.
|
|
2021
|
-
this.
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2020
|
+
ngAfterViewChecked() {
|
|
2021
|
+
if (!this.scriptsLoaded && this.prefabContainerDirective) {
|
|
2022
|
+
this.scriptsLoaded = true;
|
|
2023
|
+
this.loadScripts().then(() => {
|
|
2024
|
+
this.compileContent = true;
|
|
2025
|
+
this.registerChangeListeners();
|
|
2026
|
+
setTimeout(() => {
|
|
2027
|
+
// trigger viewInit$.complete after a timeout so that the widget listeners are ready before Variable xhr call.
|
|
2028
|
+
this.viewInit$.complete();
|
|
2029
|
+
this.fragmentsLoaded$.subscribe(i1.noop, i1.noop, () => this.invokeOnReady());
|
|
2030
|
+
}, 100);
|
|
2031
|
+
});
|
|
2032
|
+
}
|
|
2028
2033
|
}
|
|
2029
2034
|
ngOnDestroy() {
|
|
2030
2035
|
// MEMORY LEAK FIX: Unwatch all Prefab-scoped watchers for THIS specific prefab when prefab is destroyed
|
|
@@ -2068,7 +2073,7 @@
|
|
|
2068
2073
|
type: i0.Directive
|
|
2069
2074
|
}], propDecorators: { prefabContainerDirective: [{
|
|
2070
2075
|
type: i0.ViewChild,
|
|
2071
|
-
args: [prefab.PrefabContainerDirective]
|
|
2076
|
+
args: [prefab.PrefabContainerDirective, { static: false }]
|
|
2072
2077
|
}] } });
|
|
2073
2078
|
|
|
2074
2079
|
class BaseLayoutComponent {
|
|
@@ -2800,9 +2805,6 @@
|
|
|
2800
2805
|
// MEMORY LEAK FIX: Unwatch all Page-scoped watchers for THIS specific page when page is destroyed
|
|
2801
2806
|
if (this.pageName) {
|
|
2802
2807
|
i1.$unwatchAllByScope('Page', this.pageName);
|
|
2803
|
-
// if (removedCount > 0) {
|
|
2804
|
-
// console.log(`🧹 Cleaned up ${removedCount} Page-scoped watcher(s) for page ${this.pageName}`);
|
|
2805
|
-
// }
|
|
2806
2808
|
}
|
|
2807
2809
|
this.savePageSnapShot();
|
|
2808
2810
|
// MEMORY LEAK FIX: Complete Subjects to release subscriptions
|
|
@@ -4804,7 +4806,6 @@
|
|
|
4804
4806
|
return /^[a-z][a-z0-9+.-]*:\/\//i.test(url);
|
|
4805
4807
|
}
|
|
4806
4808
|
intercept(request, next) {
|
|
4807
|
-
let modifiedReq;
|
|
4808
4809
|
let modifiedResp;
|
|
4809
4810
|
let isRelativeAPIUrl = false;
|
|
4810
4811
|
if (!this.isAbsoluteUrl(request.url)) {
|
|
@@ -4814,18 +4815,19 @@
|
|
|
4814
4815
|
let apiUrl = i1._WM_APP_PROJECT.apiUrl + request.url;
|
|
4815
4816
|
request = request.clone({ url: apiUrl });
|
|
4816
4817
|
}
|
|
4817
|
-
|
|
4818
|
-
|
|
4819
|
-
|
|
4820
|
-
|
|
4821
|
-
modifiedReq = i4.appManager.appOnBeforeServiceCall(req);
|
|
4822
|
-
if (modifiedReq) {
|
|
4823
|
-
// Convert the wm HttpRequest to angular HttpRequest
|
|
4824
|
-
modifiedReq = this.wmHttpRequest.wmToAngularRequest(modifiedReq);
|
|
4825
|
-
request = modifiedReq;
|
|
4818
|
+
return rxjs.from(Promise.resolve().then(() => {
|
|
4819
|
+
if (i4.appManager && i4.appManager.appOnBeforeServiceCall) {
|
|
4820
|
+
const wmReq = this.wmHttpRequest.angularToWmRequest(request);
|
|
4821
|
+
return i4.appManager.appOnBeforeServiceCall(wmReq);
|
|
4826
4822
|
}
|
|
4827
|
-
|
|
4828
|
-
|
|
4823
|
+
return null;
|
|
4824
|
+
}))
|
|
4825
|
+
.pipe(rxjs.switchMap((receivedModifiedReq) => {
|
|
4826
|
+
if (receivedModifiedReq) {
|
|
4827
|
+
request = this.wmHttpRequest.wmToAngularRequest(receivedModifiedReq);
|
|
4828
|
+
}
|
|
4829
|
+
return next.handle(request);
|
|
4830
|
+
}), operators.tap((response) => {
|
|
4829
4831
|
if (response && response.type === 4 && i4.appManager && i4.appManager.appOnServiceSuccess) {
|
|
4830
4832
|
// Convert the angular HttpResponse to wm HttpResponse
|
|
4831
4833
|
const resp = this.wmHttpResponse.angularToWmResponse(response);
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Injector, OnDestroy, AfterViewChecked } from '@angular/core';
|
|
2
2
|
import { Subject } from 'rxjs';
|
|
3
3
|
import { AbstractI18nService, App, ScriptLoaderService, Viewport } from '@wm/core';
|
|
4
4
|
import { PageDirective, SpaPageDirective } from '@wm/components/page';
|
|
5
|
+
import { PrefabContainerDirective } from '@wm/components/prefab';
|
|
5
6
|
import { PrefabManagerService } from '../services/prefab-manager.service';
|
|
6
7
|
import { FragmentMonitor } from '../util/fragment-monitor';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
|
-
export declare abstract class BasePrefabComponent extends FragmentMonitor implements
|
|
9
|
+
export declare abstract class BasePrefabComponent extends FragmentMonitor implements AfterViewChecked, OnDestroy {
|
|
9
10
|
Widgets: any;
|
|
10
11
|
Variables: any;
|
|
11
12
|
Actions: any;
|
|
@@ -17,12 +18,13 @@ export declare abstract class BasePrefabComponent extends FragmentMonitor implem
|
|
|
17
18
|
prefabName: string;
|
|
18
19
|
i18nService: AbstractI18nService;
|
|
19
20
|
appLocale: any;
|
|
20
|
-
prefabContainerDirective
|
|
21
|
+
prefabContainerDirective?: PrefabContainerDirective;
|
|
21
22
|
scriptLoaderService: ScriptLoaderService;
|
|
22
23
|
compileContent: boolean;
|
|
23
24
|
pageDirective: PageDirective | SpaPageDirective;
|
|
24
25
|
Viewport: Viewport;
|
|
25
26
|
spa: boolean;
|
|
27
|
+
private scriptsLoaded;
|
|
26
28
|
destroy$: Subject<unknown>;
|
|
27
29
|
viewInit$: Subject<unknown>;
|
|
28
30
|
private viewParent;
|
|
@@ -50,7 +52,7 @@ export declare abstract class BasePrefabComponent extends FragmentMonitor implem
|
|
|
50
52
|
unmute(): void;
|
|
51
53
|
ngOnAttach(refreshData: any): void;
|
|
52
54
|
ngOnDetach(): void;
|
|
53
|
-
|
|
55
|
+
ngAfterViewChecked(): void;
|
|
54
56
|
ngOnDestroy(): void;
|
|
55
57
|
onPropertyChange(): void;
|
|
56
58
|
onReady(): void;
|
|
@@ -229,4 +229,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
229
229
|
type: ViewChild,
|
|
230
230
|
args: ['dynamicComponent', { read: ViewContainerRef }]
|
|
231
231
|
}] } });
|
|
232
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J1bnRpbWUtYmFzZS9zcmMvY29tcG9uZW50cy9hcHAtY29tcG9uZW50L2FwcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ydW50aW1lLWJhc2Uvc3JjL2NvbXBvbmVudHMvYXBwLWNvbXBvbmVudC9hcHAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFFSCxjQUFjLEVBQ2QsU0FBUyxFQUVULFVBQVUsRUFDVixNQUFNLEVBRU4sU0FBUyxFQUNULGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsZUFBZSxFQUNmLGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUNmLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRTdDLE9BQU8sRUFDSCxlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIsUUFBUSxFQUNSLEdBQUcsRUFDSCx3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLElBQUksRUFDSixXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxlQUFlLEVBQ2xCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDdkMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sb0NB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QUFZLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSw0QkFBNEIsRUFBRyx5QkFBeUIsQ0FBQyxZQUM3TCxVQUFVLGlCQUVMLGlCQUFpQixDQUFDLElBQUk7OFdBY1osWUFBWTtzQkFBcEMsU0FBUzt1QkFBQyxZQUFZO2dCQUVvQyw0QkFBNEI7c0JBQXRGLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QWxlcnREaWFsb2dDb21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2RpYWxvZ3MvYWxlcnQtZGlhbG9nJztcbmltcG9ydCB7Q29uZmlybURpYWxvZ0NvbXBvbmVudH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvZGlhbG9ncy9jb25maXJtLWRpYWxvZyc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXBwbGljYXRpb25SZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBOYXZpZ2F0aW9uQ2FuY2VsLFxuICAgIE5hdmlnYXRpb25FbmQsXG4gICAgTmF2aWdhdGlvbkVycm9yLFxuICAgIE5hdmlnYXRpb25TdGFydCxcbiAgICBSb3V0ZXIsXG4gICAgUm91dGVyT3V0bGV0XG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7c2V0VGhlbWV9IGZyb20gJ25neC1ib290c3RyYXAvdXRpbHMnO1xuXG5pbXBvcnQge1xuICAgICRpbnZva2VXYXRjaGVycyxcbiAgICAkdW53YXRjaEFsbEJ5U2NvcGUsXG4gICAgQWJzdHJhY3REaWFsb2dTZXJ2aWNlLFxuICAgIEFic3RyYWN0U3Bpbm5lclNlcnZpY2UsXG4gICAgYWRkQ2xhc3MsXG4gICAgQXBwLFxuICAgIEN1c3RvbUljb25zTG9hZGVyU2VydmljZSxcbiAgICBnZXRXbVByb2plY3RQcm9wZXJ0aWVzLFxuICAgIG5vb3AsXG4gICAgcmVtb3ZlQ2xhc3MsXG4gICAgc2V0QXBwUmVmLFxuICAgIHNldE5nWm9uZSxcbiAgICBzZXRQaXBlUHJvdmlkZXJcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtPQXV0aFNlcnZpY2V9IGZyb20gJ0B3bS9vQXV0aCc7XG5pbXBvcnQge0FwcE1hbmFnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAubWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7UGlwZVByb3ZpZGVyfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9waXBlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtBcHBTcGlubmVyQ29tcG9uZW50fSBmcm9tICcuLi9hcHAtc3Bpbm5lci5jb21wb25lbnQnO1xuaW1wb3J0IHtEaWFsb2dDb21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2RpYWxvZ3MvZGVzaWduLWRpYWxvZyc7XG5pbXBvcnQge0NvbnRhaW5lckRpcmVjdGl2ZSwgUGFydGlhbENvbnRhaW5lckRpcmVjdGl2ZSwgUGFydGlhbFBhcmFtSGFuZGxlckRpcmVjdGl2ZX0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcblxuaW50ZXJmYWNlIFNQSU5ORVIge1xuICAgIHNob3c6IGJvb2xlYW47XG4gICAgbWVzc2FnZXM6IEFycmF5PHN0cmluZz47XG4gICAgYXJpYWxhYmVsOiBzdHJpbmc7XG59XG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJvdXRlck91dGxldCwgQWxlcnREaWFsb2dDb21wb25lbnQsIENvbmZpcm1EaWFsb2dDb21wb25lbnQsIERpYWxvZ0NvbXBvbmVudCwgQXBwU3Bpbm5lckNvbXBvbmVudCwgQ29udGFpbmVyRGlyZWN0aXZlLCBQYXJ0aWFsUGFyYW1IYW5kbGVyRGlyZWN0aXZlICwgUGFydGlhbENvbnRhaW5lckRpcmVjdGl2ZV0sXG4gICAgc2VsZWN0b3I6ICdhcHAtcm9vdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FwcC5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQgaW1wbGVtZW50cyBEb0NoZWNrLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIHB1YmxpYyBzdGFydEFwcCA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc0FwcGxpY2F0aW9uVHlwZSA9IGZhbHNlO1xuICAgIHB1YmxpYyBlbmFibGVTa2lwVG9NYWluQ29udGVudCA9IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5lbmFibGVTa2lwVG9NYWluQ29udGVudCA9PT0gJ3RydWUnIHx8IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5lbmFibGVTa2lwVG9NYWluQ29udGVudCA9PT0gdHJ1ZTtcbiAgICBwcml2YXRlIHJldHJ5Q291bnQgPSAwO1xuICAgIHByaXZhdGUgbmF2aWdhdGlvbkVuZFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIG9BdXRoUHJvdmlkZXJzU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgc3Bpbm5lck1lc3NhZ2VTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSByb3V0ZXJFdmVudHNTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBhcHBNYW5hZ2VyU3Vic2NyaXB0aW9uczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTsgLy8gTUVNT1JZIExFQUsgRklYOiBUcmFjayBhcHBNYW5hZ2VyIHN1YnNjcmlwdGlvbnNcbiAgICBhcHBMb2NhbGU6IGFueSA9IHt9O1xuXG4gICAgQFZpZXdDaGlsZChSb3V0ZXJPdXRsZXQpIHJvdXRlck91dGxldDogUm91dGVyT3V0bGV0O1xuXG4gICAgQFZpZXdDaGlsZCgnZHluYW1pY0NvbXBvbmVudCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgc3Bpbm5lcjogU1BJTk5FUiA9IHsgc2hvdzogZmFsc2UsIG1lc3NhZ2VzOiBbXSwgYXJpYWxhYmVsOiAnJyB9O1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBfcGlwZVByb3ZpZGVyOiBQaXBlUHJvdmlkZXIsXG4gICAgICAgIF9hcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIG9BdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IEFic3RyYWN0RGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzcGlubmVyU2VydmljZTogQWJzdHJhY3RTcGlubmVyU2VydmljZSxcbiAgICAgICAgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHB1YmxpYyBhcHA6IEFwcCxcbiAgICAgICAgcHJpdmF0ZSBhcHBNYW5hZ2VyOiBBcHBNYW5hZ2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjdXN0b21JY29uc0xvYWRlclNlcnZpY2U6IEN1c3RvbUljb25zTG9hZGVyU2VydmljZVxuICAgICkge1xuICAgICAgICBzZXRQaXBlUHJvdmlkZXIoX3BpcGVQcm92aWRlcik7XG4gICAgICAgIHNldE5nWm9uZShuZ1pvbmUpO1xuICAgICAgICBzZXRBcHBSZWYoX2FwcFJlZik7XG5cbiAgICAgICAgdGhpcy5hcHBMb2NhbGUgPSBhcHAuYXBwTG9jYWxlO1xuICAgICAgICB0aGlzLmlzQXBwbGljYXRpb25UeXBlID0gZ2V0V21Qcm9qZWN0UHJvcGVydGllcygpLnR5cGUgPT09ICdBUFBMSUNBVElPTic7XG4gICAgICAgIGlmICh0aGlzLmlzQXBwbGljYXRpb25UeXBlKSB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUljb25zTG9hZGVyU2VydmljZS5sb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzdWJzY3JpYmUgdG8gT0F1dGggY2hhbmdlc1xuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFN0b3JlIHN1YnNjcmlwdGlvbiByZWZlcmVuY2UgZm9yIGNsZWFudXBcbiAgICAgICAgdGhpcy5vQXV0aFByb3ZpZGVyc1N1YnNjcmlwdGlvbiA9IG9BdXRoU2VydmljZS5nZXRPQXV0aFByb3ZpZGVyc0FzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgocHJvdmlkZXJzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzQ29uZmlnID0gcHJvdmlkZXJzO1xuICAgICAgICAgICAgaWYgKHByb3ZpZGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dPQXV0aERpYWxvZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlT0F1dGhEaWFsb2coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIHRoZSBtZXNzYWdlIHNvdXJjZSB0byBzaG93L2hpZGUgYXBwIHNwaW5uZXJcbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBTdG9yZSBzdWJzY3JpcHRpb24gcmVmZXJlbmNlIGZvciBjbGVhbnVwXG4gICAgICAgIHRoaXMuc3Bpbm5lck1lc3NhZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnNwaW5uZXJTZXJ2aWNlLmdldE1lc3NhZ2VTb3VyY2UoKS5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gc2V0VGltZW91dCBpcyB0byBhdm9pZCAnRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvcidcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3Bpbm5lci5zaG93ID0gZGF0YS5zaG93O1xuICAgICAgICAgICAgICAgIHRoaXMuc3Bpbm5lci5tZXNzYWdlcyA9IGRhdGEubWVzc2FnZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGlubmVyLmFyaWFsYWJlbCA9IGRhdGEubWVzc2FnZXMudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBzZXQgdGhlbWUgdG8gYnMzIG9uIG5neC1ib290c3RyYXAuIFRoaXMgYXZvaWRzIHJ1bnRpbWUgY2FsY3VsYXRpb24gdG8gZGV0ZXJtaW5lIGJzIHRoZW1lLiBUaHVzIHJlc29sdmVzIHBlcmZvcm1hbmNlLlxuICAgICAgICBzZXRUaGVtZSgnYnMzJyk7XG5cbiAgICAgICAgbGV0IHNwaW5uZXJJZDtcblxuICAgICAgICBsZXQgb25QYWdlUmVuZGVyZWQgPSBub29wO1xuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogU3RvcmUgc3Vic2NyaXB0aW9uIHJlZmVyZW5jZSBmb3IgY2xlYW51cFxuICAgICAgICB0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZSA9PiB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICAgICAgICAgIGxldCBwYWdlID0gZS51cmwuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgICAgICAgICBwYWdlID0gcGFnZS5zdWJzdHJpbmcoMSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHAuYWN0aXZlTGF5b3V0TmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcC5sYXlvdXRQYWdlcyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcHAuYWN0aXZlTGF5b3V0TmFtZSAmJiB0aGlzLmFwcC5sYXlvdXRQYWdlcyAmJiB0aGlzLmFwcC5sYXlvdXRQYWdlcy5sZW5ndGggJiYgdGhpcy5hcHAubGF5b3V0UGFnZXMuaW5jbHVkZXMocGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bpbm5lcklkID0gdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCcnLCAnd21Sb3V0ZXJPdXRsZXQnLCAnJywgJ3dtUm91dGVyT3V0bGV0Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bpbm5lcklkID0gdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCcnLCAnZ2xvYmFsU3Bpbm5lcicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdhcHAtcGFnZS1vdXRsZXQnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyhub2RlLCAncGFnZS1sb2FkLWluLXByb2dyZXNzJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZUxvYWRTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIG9uUGFnZVJlbmRlcmVkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoc3Bpbm5lcklkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2FwcC1wYWdlLW91dGxldCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3Mobm9kZSwgJ3BhZ2UtbG9hZC1pbi1wcm9ncmVzcycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9uUGFnZVJlbmRlcmVkID0gbm9vcDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHAuYWN0aXZlUGFnZUxvYWRUaW1lID0gRGF0ZS5ub3coKSAtIHBhZ2VMb2FkU3RhcnRUaW1lO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kIHx8IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsIHx8IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb25QYWdlUmVuZGVyZWQoKTtcbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogU3RvcmUgc3Vic2NyaXB0aW9uIHVuc3Vic2NyaWJlIGZ1bmN0aW9uc1xuICAgICAgICB0aGlzLmFwcE1hbmFnZXJTdWJzY3JpcHRpb25zLnB1c2godGhpcy5hcHBNYW5hZ2VyLnN1YnNjcmliZSgncGFnZVJlYWR5JywgKCkgPT4ge1xuICAgICAgICAgICAgb25QYWdlUmVuZGVyZWQoKTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmFwcE1hbmFnZXJTdWJzY3JpcHRpb25zLnB1c2godGhpcy5hcHBNYW5hZ2VyLnN1YnNjcmliZSgncGFnZUF0dGFjaCcsICgpID0+IHtcbiAgICAgICAgICAgIG9uUGFnZVJlbmRlcmVkKCk7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm92aWRlcnNDb25maWc7XG4gICAgaXNPQXV0aERpYWxvZ09wZW4gPSBmYWxzZTtcblxuICAgIHNob3dPQXV0aERpYWxvZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT0F1dGhEaWFsb2dPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmlzT0F1dGhEaWFsb2dPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKCdvQXV0aExvZ2luRGlhbG9nJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZU9BdXRoRGlhbG9nKCkge1xuICAgICAgICBpZiAodGhpcy5pc09BdXRoRGlhbG9nT3Blbikge1xuICAgICAgICAgICAgdGhpcy5pc09BdXRoRGlhbG9nT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsb3NlKCdvQXV0aExvZ2luRGlhbG9nJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0KCkge1xuICAgICAgICAvL3RvIGZpeCB0aGUgaXNzdWUgdGhhdCBoYXBwZW5zIG9ubHkgaW4gdGhlIGRldmVsb3BtZW50IG1vZGVcbiAgICAgICAgLy9FeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXG4gICAgICAgIC8vZml4OiBodHRwczovL2Jsb2cuYW5ndWxhci11bml2ZXJzaXR5LmlvL2FuZ3VsYXItZGVidWdnaW5nL1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBcHAgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFwcC5keW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmO1xuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVJvdXRlck91dGxldCgpO1xuICAgICAgICB9LCAxMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvdmVycmlkZVJvdXRlck91dGxldCgpIHtcbiAgICAgICAgLy9vdmVycmlkZSB0aGUgYXR0YWNoL2RldGFjaCBtZXRob2RzXG4gICAgICAgIGNvbnN0IG9BdHRhY2ggPSB0aGlzLnJvdXRlck91dGxldC5hdHRhY2g7XG4gICAgICAgIGNvbnN0IG9EZXRhY2ggPSB0aGlzLnJvdXRlck91dGxldC5kZXRhY2g7XG4gICAgICAgIHRoaXMucm91dGVyT3V0bGV0LmF0dGFjaCA9IChjb21wb25lbnRSZWY6IGFueSwgYWN0aXZhdGVkUm91dGU6ICBBY3RpdmF0ZWRSb3V0ZSkgPT4ge1xuICAgICAgICAgICAgb0F0dGFjaC5jYWxsKHRoaXMucm91dGVyT3V0bGV0LCBjb21wb25lbnRSZWYsIGFjdGl2YXRlZFJvdXRlKTtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5uZ09uQXR0YWNoKCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucm91dGVyT3V0bGV0LmRldGFjaCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBwLmFjdGl2ZVBhZ2UubmdPbkRldGFjaCgpO1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gb0RldGFjaC5jYWxsKHRoaXMucm91dGVyT3V0bGV0KTtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRSZWY7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc2tpcFRvQXBwQ29udGVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5yZXRyeUNvdW50ID0gMDtcbiAgICAgICAgdGhpcy50cnlGb2N1c0NvbnRlbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyeUZvY3VzQ29udGVudCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29udGVudEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFwcC1wYWdlLWNvbnRlbnQnKSBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICBpZiAoY29udGVudEVsKSB7XG4gICAgICAgICAgICBjb250ZW50RWwuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpOyAvLyBFbnN1cmUgaXQncyBmb2N1c2FibGVcbiAgICAgICAgICAgIGNvbnRlbnRFbC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IGZhbHNlIH0pO1xuICAgICAgICAgICAgY29udGVudEVsLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmV0cnlDb3VudCA8IDEwKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5Q291bnQrKztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cnlGb2N1c0NvbnRlbnQoKSwgMTAwKTsgLy8gUmV0cnkgZXZlcnkgMTAwbXNcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnbGFuZycsIGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5kZWZhdWx0TGFuZ3VhZ2UpO1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlU2tpcFRvTWFpbkNvbnRlbnQpIHtcbiAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRW5kU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKChlKSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcC1mb2N1cy1zdGFydCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgJGludm9rZVdhdGNoZXJzKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogVW53YXRjaCBhbGwgQXBwLXNjb3BlZCB3YXRjaGVycyB3aGVuIGFwcCBpcyBkZXN0cm95ZWRcbiAgICAgICAgJHVud2F0Y2hBbGxCeVNjb3BlKCdBcHAnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogVW5zdWJzY3JpYmUgZnJvbSBuYXZpZ2F0aW9uIGVuZCBzdWJzY3JpcHRpb25cbiAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbkVuZFN1YnNjcmlwdGlvbil7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25FbmRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkVuZFN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFVuc3Vic2NyaWJlIGZyb20gT0F1dGggcHJvdmlkZXJzIHN1YnNjcmlwdGlvblxuICAgICAgICBpZiAodGhpcy5vQXV0aFByb3ZpZGVyc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5vQXV0aFByb3ZpZGVyc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5vQXV0aFByb3ZpZGVyc1N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFVuc3Vic2NyaWJlIGZyb20gc3Bpbm5lciBtZXNzYWdlIHN1YnNjcmlwdGlvblxuICAgICAgICBpZiAodGhpcy5zcGlubmVyTWVzc2FnZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zcGlubmVyTWVzc2FnZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5zcGlubmVyTWVzc2FnZVN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFVuc3Vic2NyaWJlIGZyb20gcm91dGVyIGV2ZW50cyBzdWJzY3JpcHRpb25cbiAgICAgICAgaWYgKHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBVbnN1YnNjcmliZSBmcm9tIGFwcE1hbmFnZXIgc3Vic2NyaXB0aW9uc1xuICAgICAgICB0aGlzLmFwcE1hbmFnZXJTdWJzY3JpcHRpb25zLmZvckVhY2godW5zdWJzY3JpYmUgPT4ge1xuICAgICAgICAgICAgaWYgKHVuc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXBwTWFuYWdlclN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICB9XG59XG4iLCJAaWYgKHN0YXJ0QXBwKSB7XG4gICAgQGlmKGVuYWJsZVNraXBUb01haW5Db250ZW50KSB7XG4gICAgICAgIDxkaXYgaWQ9XCJhcHAtZm9jdXMtc3RhcnRcIiB0YWJpbmRleD1cIi0xXCI+PC9kaXY+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgY2xhc3M9XCJza2lwXCIgKGNsaWNrKT1cInNraXBUb0FwcENvbnRlbnQoJGV2ZW50KVwiPnt7YXBwTG9jYWxlLkxBQkVMX1NLSVBfVE9fTUFJTl9DT05URU5UIHx8ICdTa2lwIHRvIG1haW4gY29udGVudCd9fTwvYT5cbiAgICB9XG4gICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuICBAaWYgKGlzQXBwbGljYXRpb25UeXBlKSB7XG4gICAgPGRpdiB3bUNvbnRhaW5lciBwYXJ0aWFsQ29udGFpbmVyIGNvbnRlbnQ9XCJDb21tb25cIiBoaWRkZW4gY2xhc3M9XCJuZy1oaWRlXCI+PC9kaXY+XG4gIH1cbiAgPGFwcC1zcGlubmVyIG5hbWU9XCJnbG9iYWxzcGlubmVyXCIgY2xhc3NuYW1lPVwiZ2xvYmFsLXNwaW5uZXJcIiByb2xlPVwiYWxlcnRcIiBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInNwaW5uZXIuYXJpYWxhYmVsIHx8ICdMb2FkaW5nJ1wiIFtzaG93XT1cInNwaW5uZXIuc2hvd1wiIFtzcGlubmVybWVzc2FnZXNdPVwic3Bpbm5lci5tZXNzYWdlc1wiPjwvYXBwLXNwaW5uZXI+XG4gIDxkaXYgd21EaWFsb2cgbmFtZT1cIm9BdXRoTG9naW5EaWFsb2dcIiB0aXRsZT1cIkFwcGxpY2F0aW9uIGlzIHJlcXVlc3RpbmcgeW91IHRvIHNpZ24gaW4gd2l0aFwiXG4gICAgY2xvc2UuZXZlbnQ9XCJjbG9zZU9BdXRoRGlhbG9nKClcIj5cbiAgICA8bmctdGVtcGxhdGUgI2RpYWxvZ0JvZHk+XG4gICAgICA8dWwgY2xhc3M9XCJsaXN0LWl0ZW1zXCI+XG4gICAgICAgIEBmb3IgKHByb3ZpZGVyIG9mIHByb3ZpZGVyc0NvbmZpZzsgdHJhY2sgcHJvdmlkZXIpIHtcbiAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWl0ZW1cIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiAoY2xpY2spPVwicHJvdmlkZXIuaW52b2tlKClcIj57e3Byb3ZpZGVyLm5hbWV9fTwvYnV0dG9uPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIH1cbiAgICAgIDwvdWw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxkaXYgd21Db25maXJtRGlhbG9nIG5hbWU9XCJfYXBwLWNvbmZpcm0tZGlhbG9nXCIgdGl0bGUuYmluZD1cInRpdGxlXCIgbWVzc2FnZS5iaW5kPVwibWVzc2FnZVwiIG9rdGV4dC5iaW5kPVwib2t0ZXh0XCJcbiAgICBjYW5jZWx0ZXh0LmJpbmQ9XCJjYW5jZWx0ZXh0XCIgY2xvc2FibGU9XCJmYWxzZVwiIGljb25jbGFzcy5iaW5kPVwiaWNvbmNsYXNzXCJcbiAgZXNjYXBlLmV2ZW50PVwib25Fc2NhcGUoKVwiIG9rLmV2ZW50PVwib25PaygpXCIgY2FuY2VsLmV2ZW50PVwib25DYW5jZWwoKVwiIGNsb3NlLmV2ZW50PVwib25DbG9zZSgpXCIgb3BlbmVkLmV2ZW50PVwib25PcGVuKClcIj48L2Rpdj5cbiAgQGlmICghaXNBcHBsaWNhdGlvblR5cGUpIHtcbiAgICA8ZGl2ICB3bUNvbmZpcm1EaWFsb2cgbmFtZT1cIlByZWZhYkNvbmZpcm1EaWFsb2dcIiB0aXRsZS5iaW5kPVwidGl0bGVcIiBtZXNzYWdlLmJpbmQ9XCJ0ZXh0XCIgb2t0ZXh0LmJpbmQ9XCJva0J1dHRvblRleHRcIlxuICAgICAgY2FuY2VsdGV4dC5iaW5kPVwiY2FuY2VsQnV0dG9uVGV4dFwiIGNsb3NhYmxlPVwiZmFsc2VcIiBpY29uY2xhc3MuYmluZD1cImljb25jbGFzc1wiXG4gICAgZXNjYXBlLmV2ZW50PVwib25Fc2NhcGUoKVwiIG9rLmV2ZW50PVwib25PaygpXCIgY2FuY2VsLmV2ZW50PVwib25DYW5jZWwoKVwiIGNsb3NlLmV2ZW50PVwib25DbG9zZSgpXCIgb3BlbmVkLmV2ZW50PVwib25PcGVuKClcIj48L2Rpdj5cbiAgfVxuICBAaWYgKCFpc0FwcGxpY2F0aW9uVHlwZSkge1xuICAgIDxkaXYgIHdtQWxlcnREaWFsb2cgbmFtZT1cIlByZWZhYkFsZXJ0RGlhbG9nXCIgdGl0bGUuYmluZD1cInRpdGxlXCIgbWVzc2FnZS5iaW5kPVwidGV4dFwiIG9rdGV4dC5iaW5kPVwib2tCdXR0b25UZXh0XCJcbiAgICAgIGNhbmNlbHRleHQuYmluZD1cImNhbmNlbEJ1dHRvblRleHRcIiBjbG9zYWJsZT1cImZhbHNlXCIgaWNvbmNsYXNzLmJpbmQ9XCJpY29uY2xhc3NcIlxuICAgIGVzY2FwZS5ldmVudD1cIm9uRXNjYXBlKClcIiBvay5ldmVudD1cIm9uT2soKVwiIGNhbmNlbC5ldmVudD1cIm9uQ2FuY2VsKClcIiBjbG9zZS5ldmVudD1cIm9uQ2xvc2UoKVwiIG9wZW5lZC5ldmVudD1cIm9uT3BlbigpXCI+PC9kaXY+XG4gIH1cbiAgPGRpdiB3bUFwcEV4dD48L2Rpdj5cbiAgPGkgaWQ9XCJ3bS1tb2JpbGUtZGlzcGxheVwiPjwvaT5cbn1cbjwhLS1EdW1teSBjb250YWluZXIgdG8gY3JlYXRlIHRoZSBjb21wb25lbnQgZHluYW1pY2FsbHktLT5cbjxuZy1jb250YWluZXIgI2R5bmFtaWNDb21wb25lbnQ+PC9uZy1jb250YWluZXI+XG4iXX0=
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J1bnRpbWUtYmFzZS9zcmMvY29tcG9uZW50cy9hcHAtY29tcG9uZW50L2FwcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ydW50aW1lLWJhc2Uvc3JjL2NvbXBvbmVudHMvYXBwLWNvbXBvbmVudC9hcHAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFFSCxjQUFjLEVBQ2QsU0FBUyxFQUVULFVBQVUsRUFDVixNQUFNLEVBRU4sU0FBUyxFQUNULGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsZUFBZSxFQUNmLGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUNmLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRTdDLE9BQU8sRUFDSCxlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIsUUFBUSxFQUNSLEdBQUcsRUFDSCx3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLElBQUksRUFDSixXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxlQUFlLEVBQ2xCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDdkMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sb0NB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QUFZLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSw0QkFBNEIsRUFBRyx5QkFBeUIsQ0FBQyxZQUM3TCxVQUFVLGlCQUVMLGlCQUFpQixDQUFDLElBQUk7OFdBY1osWUFBWTtzQkFBcEMsU0FBUzt1QkFBQyxZQUFZO2dCQUVvQyw0QkFBNEI7c0JBQXRGLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QWxlcnREaWFsb2dDb21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2RpYWxvZ3MvYWxlcnQtZGlhbG9nJztcbmltcG9ydCB7Q29uZmlybURpYWxvZ0NvbXBvbmVudH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvZGlhbG9ncy9jb25maXJtLWRpYWxvZyc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXBwbGljYXRpb25SZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBOYXZpZ2F0aW9uQ2FuY2VsLFxuICAgIE5hdmlnYXRpb25FbmQsXG4gICAgTmF2aWdhdGlvbkVycm9yLFxuICAgIE5hdmlnYXRpb25TdGFydCxcbiAgICBSb3V0ZXIsXG4gICAgUm91dGVyT3V0bGV0XG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7c2V0VGhlbWV9IGZyb20gJ25neC1ib290c3RyYXAvdXRpbHMnO1xuXG5pbXBvcnQge1xuICAgICRpbnZva2VXYXRjaGVycyxcbiAgICAkdW53YXRjaEFsbEJ5U2NvcGUsXG4gICAgQWJzdHJhY3REaWFsb2dTZXJ2aWNlLFxuICAgIEFic3RyYWN0U3Bpbm5lclNlcnZpY2UsXG4gICAgYWRkQ2xhc3MsXG4gICAgQXBwLFxuICAgIEN1c3RvbUljb25zTG9hZGVyU2VydmljZSxcbiAgICBnZXRXbVByb2plY3RQcm9wZXJ0aWVzLFxuICAgIG5vb3AsXG4gICAgcmVtb3ZlQ2xhc3MsXG4gICAgc2V0QXBwUmVmLFxuICAgIHNldE5nWm9uZSxcbiAgICBzZXRQaXBlUHJvdmlkZXJcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtPQXV0aFNlcnZpY2V9IGZyb20gJ0B3bS9vQXV0aCc7XG5pbXBvcnQge0FwcE1hbmFnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAubWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7UGlwZVByb3ZpZGVyfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9waXBlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtBcHBTcGlubmVyQ29tcG9uZW50fSBmcm9tICcuLi9hcHAtc3Bpbm5lci5jb21wb25lbnQnO1xuaW1wb3J0IHtEaWFsb2dDb21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2RpYWxvZ3MvZGVzaWduLWRpYWxvZyc7XG5pbXBvcnQge0NvbnRhaW5lckRpcmVjdGl2ZSwgUGFydGlhbENvbnRhaW5lckRpcmVjdGl2ZSwgUGFydGlhbFBhcmFtSGFuZGxlckRpcmVjdGl2ZX0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcblxuaW50ZXJmYWNlIFNQSU5ORVIge1xuICAgIHNob3c6IGJvb2xlYW47XG4gICAgbWVzc2FnZXM6IEFycmF5PHN0cmluZz47XG4gICAgYXJpYWxhYmVsOiBzdHJpbmc7XG59XG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJvdXRlck91dGxldCwgQWxlcnREaWFsb2dDb21wb25lbnQsIENvbmZpcm1EaWFsb2dDb21wb25lbnQsIERpYWxvZ0NvbXBvbmVudCwgQXBwU3Bpbm5lckNvbXBvbmVudCwgQ29udGFpbmVyRGlyZWN0aXZlLCBQYXJ0aWFsUGFyYW1IYW5kbGVyRGlyZWN0aXZlICwgUGFydGlhbENvbnRhaW5lckRpcmVjdGl2ZV0sXG4gICAgc2VsZWN0b3I6ICdhcHAtcm9vdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FwcC5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQgaW1wbGVtZW50cyBEb0NoZWNrLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIHB1YmxpYyBzdGFydEFwcCA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc0FwcGxpY2F0aW9uVHlwZSA9IGZhbHNlO1xuICAgIHB1YmxpYyBlbmFibGVTa2lwVG9NYWluQ29udGVudCA9IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5lbmFibGVTa2lwVG9NYWluQ29udGVudCA9PT0gJ3RydWUnIHx8IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5lbmFibGVTa2lwVG9NYWluQ29udGVudCA9PT0gdHJ1ZTtcbiAgICBwcml2YXRlIHJldHJ5Q291bnQgPSAwO1xuICAgIHByaXZhdGUgbmF2aWdhdGlvbkVuZFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIG9BdXRoUHJvdmlkZXJzU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgc3Bpbm5lck1lc3NhZ2VTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSByb3V0ZXJFdmVudHNTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBhcHBNYW5hZ2VyU3Vic2NyaXB0aW9uczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTsgLy8gTUVNT1JZIExFQUsgRklYOiBUcmFjayBhcHBNYW5hZ2VyIHN1YnNjcmlwdGlvbnNcbiAgICBhcHBMb2NhbGU6IGFueSA9IHt9O1xuXG4gICAgQFZpZXdDaGlsZChSb3V0ZXJPdXRsZXQpIHJvdXRlck91dGxldDogUm91dGVyT3V0bGV0O1xuXG4gICAgQFZpZXdDaGlsZCgnZHluYW1pY0NvbXBvbmVudCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgc3Bpbm5lcjogU1BJTk5FUiA9IHsgc2hvdzogZmFsc2UsIG1lc3NhZ2VzOiBbXSwgYXJpYWxhYmVsOiAnJyB9O1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBfcGlwZVByb3ZpZGVyOiBQaXBlUHJvdmlkZXIsXG4gICAgICAgIF9hcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIG9BdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IEFic3RyYWN0RGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzcGlubmVyU2VydmljZTogQWJzdHJhY3RTcGlubmVyU2VydmljZSxcbiAgICAgICAgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHB1YmxpYyBhcHA6IEFwcCxcbiAgICAgICAgcHJpdmF0ZSBhcHBNYW5hZ2VyOiBBcHBNYW5hZ2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjdXN0b21JY29uc0xvYWRlclNlcnZpY2U6IEN1c3RvbUljb25zTG9hZGVyU2VydmljZVxuICAgICkge1xuICAgICAgICBzZXRQaXBlUHJvdmlkZXIoX3BpcGVQcm92aWRlcik7XG4gICAgICAgIHNldE5nWm9uZShuZ1pvbmUpO1xuICAgICAgICBzZXRBcHBSZWYoX2FwcFJlZik7XG5cbiAgICAgICAgdGhpcy5hcHBMb2NhbGUgPSBhcHAuYXBwTG9jYWxlO1xuICAgICAgICB0aGlzLmlzQXBwbGljYXRpb25UeXBlID0gZ2V0V21Qcm9qZWN0UHJvcGVydGllcygpLnR5cGUgPT09ICdBUFBMSUNBVElPTic7XG4gICAgICAgIGlmICh0aGlzLmlzQXBwbGljYXRpb25UeXBlKSB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUljb25zTG9hZGVyU2VydmljZS5sb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzdWJzY3JpYmUgdG8gT0F1dGggY2hhbmdlc1xuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFN0b3JlIHN1YnNjcmlwdGlvbiByZWZlcmVuY2UgZm9yIGNsZWFudXBcbiAgICAgICAgdGhpcy5vQXV0aFByb3ZpZGVyc1N1YnNjcmlwdGlvbiA9IG9BdXRoU2VydmljZS5nZXRPQXV0aFByb3ZpZGVyc0FzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgocHJvdmlkZXJzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzQ29uZmlnID0gcHJvdmlkZXJzO1xuICAgICAgICAgICAgaWYgKHByb3ZpZGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dPQXV0aERpYWxvZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlT0F1dGhEaWFsb2coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIHRoZSBtZXNzYWdlIHNvdXJjZSB0byBzaG93L2hpZGUgYXBwIHNwaW5uZXJcbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBTdG9yZSBzdWJzY3JpcHRpb24gcmVmZXJlbmNlIGZvciBjbGVhbnVwXG4gICAgICAgIHRoaXMuc3Bpbm5lck1lc3NhZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnNwaW5uZXJTZXJ2aWNlLmdldE1lc3NhZ2VTb3VyY2UoKS5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gc2V0VGltZW91dCBpcyB0byBhdm9pZCAnRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvcidcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3Bpbm5lci5zaG93ID0gZGF0YS5zaG93O1xuICAgICAgICAgICAgICAgIHRoaXMuc3Bpbm5lci5tZXNzYWdlcyA9IGRhdGEubWVzc2FnZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGlubmVyLmFyaWFsYWJlbCA9IGRhdGEubWVzc2FnZXMudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBzZXQgdGhlbWUgdG8gYnMzIG9uIG5neC1ib290c3RyYXAuIFRoaXMgYXZvaWRzIHJ1bnRpbWUgY2FsY3VsYXRpb24gdG8gZGV0ZXJtaW5lIGJzIHRoZW1lLiBUaHVzIHJlc29sdmVzIHBlcmZvcm1hbmNlLlxuICAgICAgICBzZXRUaGVtZSgnYnMzJyk7XG5cbiAgICAgICAgbGV0IHNwaW5uZXJJZDtcblxuICAgICAgICBsZXQgb25QYWdlUmVuZGVyZWQgPSBub29wO1xuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogU3RvcmUgc3Vic2NyaXB0aW9uIHJlZmVyZW5jZSBmb3IgY2xlYW51cFxuICAgICAgICB0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZSA9PiB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICAgICAgICAgIGxldCBwYWdlID0gZS51cmwuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgICAgICAgICBwYWdlID0gcGFnZS5zdWJzdHJpbmcoMSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHAuYWN0aXZlTGF5b3V0TmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcC5sYXlvdXRQYWdlcyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcHAuYWN0aXZlTGF5b3V0TmFtZSAmJiB0aGlzLmFwcC5sYXlvdXRQYWdlcyAmJiB0aGlzLmFwcC5sYXlvdXRQYWdlcy5sZW5ndGggJiYgdGhpcy5hcHAubGF5b3V0UGFnZXMuaW5jbHVkZXMocGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bpbm5lcklkID0gdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCcnLCAnd21Sb3V0ZXJPdXRsZXQnLCAnJywgJ3dtUm91dGVyT3V0bGV0Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bpbm5lcklkID0gdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCcnLCAnZ2xvYmFsU3Bpbm5lcicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdhcHAtcGFnZS1vdXRsZXQnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyhub2RlLCAncGFnZS1sb2FkLWluLXByb2dyZXNzJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZUxvYWRTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIG9uUGFnZVJlbmRlcmVkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoc3Bpbm5lcklkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2FwcC1wYWdlLW91dGxldCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3Mobm9kZSwgJ3BhZ2UtbG9hZC1pbi1wcm9ncmVzcycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9uUGFnZVJlbmRlcmVkID0gbm9vcDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHAuYWN0aXZlUGFnZUxvYWRUaW1lID0gRGF0ZS5ub3coKSAtIHBhZ2VMb2FkU3RhcnRUaW1lO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kIHx8IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsIHx8IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb25QYWdlUmVuZGVyZWQoKTtcbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogU3RvcmUgc3Vic2NyaXB0aW9uIHVuc3Vic2NyaWJlIGZ1bmN0aW9uc1xuICAgICAgICB0aGlzLmFwcE1hbmFnZXJTdWJzY3JpcHRpb25zLnB1c2godGhpcy5hcHBNYW5hZ2VyLnN1YnNjcmliZSgncGFnZVJlYWR5JywgKCkgPT4ge1xuICAgICAgICAgICAgb25QYWdlUmVuZGVyZWQoKTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmFwcE1hbmFnZXJTdWJzY3JpcHRpb25zLnB1c2godGhpcy5hcHBNYW5hZ2VyLnN1YnNjcmliZSgncGFnZUF0dGFjaCcsICgpID0+IHtcbiAgICAgICAgICAgIG9uUGFnZVJlbmRlcmVkKCk7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm92aWRlcnNDb25maWc7XG4gICAgaXNPQXV0aERpYWxvZ09wZW4gPSBmYWxzZTtcblxuICAgIHNob3dPQXV0aERpYWxvZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT0F1dGhEaWFsb2dPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmlzT0F1dGhEaWFsb2dPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKCdvQXV0aExvZ2luRGlhbG9nJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZU9BdXRoRGlhbG9nKCkge1xuICAgICAgICBpZiAodGhpcy5pc09BdXRoRGlhbG9nT3Blbikge1xuICAgICAgICAgICAgdGhpcy5pc09BdXRoRGlhbG9nT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsb3NlKCdvQXV0aExvZ2luRGlhbG9nJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0KCkge1xuICAgICAgICAvL3RvIGZpeCB0aGUgaXNzdWUgdGhhdCBoYXBwZW5zIG9ubHkgaW4gdGhlIGRldmVsb3BtZW50IG1vZGVcbiAgICAgICAgLy9FeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXG4gICAgICAgIC8vZml4OiBodHRwczovL2Jsb2cuYW5ndWxhci11bml2ZXJzaXR5LmlvL2FuZ3VsYXItZGVidWdnaW5nL1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBcHAgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFwcC5keW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmO1xuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVJvdXRlck91dGxldCgpO1xuICAgICAgICB9LCAxMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvdmVycmlkZVJvdXRlck91dGxldCgpIHtcbiAgICAgICAgLy9vdmVycmlkZSB0aGUgYXR0YWNoL2RldGFjaCBtZXRob2RzXG4gICAgICAgIGNvbnN0IG9BdHRhY2ggPSB0aGlzLnJvdXRlck91dGxldC5hdHRhY2g7XG4gICAgICAgIGNvbnN0IG9EZXRhY2ggPSB0aGlzLnJvdXRlck91dGxldC5kZXRhY2g7XG4gICAgICAgIHRoaXMucm91dGVyT3V0bGV0LmF0dGFjaCA9IChjb21wb25lbnRSZWY6IGFueSwgYWN0aXZhdGVkUm91dGU6ICBBY3RpdmF0ZWRSb3V0ZSkgPT4ge1xuICAgICAgICAgICAgb0F0dGFjaC5jYWxsKHRoaXMucm91dGVyT3V0bGV0LCBjb21wb25lbnRSZWYsIGFjdGl2YXRlZFJvdXRlKTtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5uZ09uQXR0YWNoKCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucm91dGVyT3V0bGV0LmRldGFjaCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBwLmFjdGl2ZVBhZ2UubmdPbkRldGFjaCgpO1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gb0RldGFjaC5jYWxsKHRoaXMucm91dGVyT3V0bGV0KTtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRSZWY7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc2tpcFRvQXBwQ29udGVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5yZXRyeUNvdW50ID0gMDtcbiAgICAgICAgdGhpcy50cnlGb2N1c0NvbnRlbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyeUZvY3VzQ29udGVudCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29udGVudEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFwcC1wYWdlLWNvbnRlbnQnKSBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICBpZiAoY29udGVudEVsKSB7XG4gICAgICAgICAgICBjb250ZW50RWwuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpOyAvLyBFbnN1cmUgaXQncyBmb2N1c2FibGVcbiAgICAgICAgICAgIGNvbnRlbnRFbC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IGZhbHNlIH0pO1xuICAgICAgICAgICAgY29udGVudEVsLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmV0cnlDb3VudCA8IDEwKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5Q291bnQrKztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cnlGb2N1c0NvbnRlbnQoKSwgMTAwKTsgLy8gUmV0cnkgZXZlcnkgMTAwbXNcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnbGFuZycsIGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5kZWZhdWx0TGFuZ3VhZ2UpO1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlU2tpcFRvTWFpbkNvbnRlbnQpIHtcbiAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRW5kU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKChlKSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcC1mb2N1cy1zdGFydCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgJGludm9rZVdhdGNoZXJzKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogVW53YXRjaCBhbGwgQXBwLXNjb3BlZCB3YXRjaGVycyB3aGVuIGFwcCBpcyBkZXN0cm95ZWRcbiAgICAgICAgJHVud2F0Y2hBbGxCeVNjb3BlKCdBcHAnKTtcblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFVuc3Vic2NyaWJlIGZyb20gbmF2aWdhdGlvbiBlbmQgc3Vic2NyaXB0aW9uXG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb25FbmRTdWJzY3JpcHRpb24pe1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRW5kU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25FbmRTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBVbnN1YnNjcmliZSBmcm9tIE9BdXRoIHByb3ZpZGVycyBzdWJzY3JpcHRpb25cbiAgICAgICAgaWYgKHRoaXMub0F1dGhQcm92aWRlcnNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMub0F1dGhQcm92aWRlcnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMub0F1dGhQcm92aWRlcnNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBVbnN1YnNjcmliZSBmcm9tIHNwaW5uZXIgbWVzc2FnZSBzdWJzY3JpcHRpb25cbiAgICAgICAgaWYgKHRoaXMuc3Bpbm5lck1lc3NhZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc3Bpbm5lck1lc3NhZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuc3Bpbm5lck1lc3NhZ2VTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBVbnN1YnNjcmliZSBmcm9tIHJvdXRlciBldmVudHMgc3Vic2NyaXB0aW9uXG4gICAgICAgIGlmICh0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogVW5zdWJzY3JpYmUgZnJvbSBhcHBNYW5hZ2VyIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgdGhpcy5hcHBNYW5hZ2VyU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHVuc3Vic2NyaWJlID0+IHtcbiAgICAgICAgICAgIGlmICh1bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFwcE1hbmFnZXJTdWJzY3JpcHRpb25zID0gW107XG4gICAgfVxufVxuIiwiQGlmIChzdGFydEFwcCkge1xuICAgIEBpZihlbmFibGVTa2lwVG9NYWluQ29udGVudCkge1xuICAgICAgICA8ZGl2IGlkPVwiYXBwLWZvY3VzLXN0YXJ0XCIgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIGNsYXNzPVwic2tpcFwiIChjbGljayk9XCJza2lwVG9BcHBDb250ZW50KCRldmVudClcIj57e2FwcExvY2FsZS5MQUJFTF9TS0lQX1RPX01BSU5fQ09OVEVOVCB8fCAnU2tpcCB0byBtYWluIGNvbnRlbnQnfX08L2E+XG4gICAgfVxuICAgIDxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cbiAgQGlmIChpc0FwcGxpY2F0aW9uVHlwZSkge1xuICAgIDxkaXYgd21Db250YWluZXIgcGFydGlhbENvbnRhaW5lciBjb250ZW50PVwiQ29tbW9uXCIgaGlkZGVuIGNsYXNzPVwibmctaGlkZVwiPjwvZGl2PlxuICB9XG4gIDxhcHAtc3Bpbm5lciBuYW1lPVwiZ2xvYmFsc3Bpbm5lclwiIGNsYXNzbmFtZT1cImdsb2JhbC1zcGlubmVyXCIgcm9sZT1cImFsZXJ0XCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJzcGlubmVyLmFyaWFsYWJlbCB8fCAnTG9hZGluZydcIiBbc2hvd109XCJzcGlubmVyLnNob3dcIiBbc3Bpbm5lcm1lc3NhZ2VzXT1cInNwaW5uZXIubWVzc2FnZXNcIj48L2FwcC1zcGlubmVyPlxuICA8ZGl2IHdtRGlhbG9nIG5hbWU9XCJvQXV0aExvZ2luRGlhbG9nXCIgdGl0bGU9XCJBcHBsaWNhdGlvbiBpcyByZXF1ZXN0aW5nIHlvdSB0byBzaWduIGluIHdpdGhcIlxuICAgIGNsb3NlLmV2ZW50PVwiY2xvc2VPQXV0aERpYWxvZygpXCI+XG4gICAgPG5nLXRlbXBsYXRlICNkaWFsb2dCb2R5PlxuICAgICAgPHVsIGNsYXNzPVwibGlzdC1pdGVtc1wiPlxuICAgICAgICBAZm9yIChwcm92aWRlciBvZiBwcm92aWRlcnNDb25maWc7IHRyYWNrIHByb3ZpZGVyKSB7XG4gICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1pdGVtXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuXCIgKGNsaWNrKT1cInByb3ZpZGVyLmludm9rZSgpXCI+e3twcm92aWRlci5uYW1lfX08L2J1dHRvbj5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICB9XG4gICAgICA8L3VsPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8ZGl2IHdtQ29uZmlybURpYWxvZyBuYW1lPVwiX2FwcC1jb25maXJtLWRpYWxvZ1wiIHRpdGxlLmJpbmQ9XCJ0aXRsZVwiIG1lc3NhZ2UuYmluZD1cIm1lc3NhZ2VcIiBva3RleHQuYmluZD1cIm9rdGV4dFwiXG4gICAgY2FuY2VsdGV4dC5iaW5kPVwiY2FuY2VsdGV4dFwiIGNsb3NhYmxlPVwiZmFsc2VcIiBpY29uY2xhc3MuYmluZD1cImljb25jbGFzc1wiXG4gIGVzY2FwZS5ldmVudD1cIm9uRXNjYXBlKClcIiBvay5ldmVudD1cIm9uT2soKVwiIGNhbmNlbC5ldmVudD1cIm9uQ2FuY2VsKClcIiBjbG9zZS5ldmVudD1cIm9uQ2xvc2UoKVwiIG9wZW5lZC5ldmVudD1cIm9uT3BlbigpXCI+PC9kaXY+XG4gIEBpZiAoIWlzQXBwbGljYXRpb25UeXBlKSB7XG4gICAgPGRpdiAgd21Db25maXJtRGlhbG9nIG5hbWU9XCJQcmVmYWJDb25maXJtRGlhbG9nXCIgdGl0bGUuYmluZD1cInRpdGxlXCIgbWVzc2FnZS5iaW5kPVwidGV4dFwiIG9rdGV4dC5iaW5kPVwib2tCdXR0b25UZXh0XCJcbiAgICAgIGNhbmNlbHRleHQuYmluZD1cImNhbmNlbEJ1dHRvblRleHRcIiBjbG9zYWJsZT1cImZhbHNlXCIgaWNvbmNsYXNzLmJpbmQ9XCJpY29uY2xhc3NcIlxuICAgIGVzY2FwZS5ldmVudD1cIm9uRXNjYXBlKClcIiBvay5ldmVudD1cIm9uT2soKVwiIGNhbmNlbC5ldmVudD1cIm9uQ2FuY2VsKClcIiBjbG9zZS5ldmVudD1cIm9uQ2xvc2UoKVwiIG9wZW5lZC5ldmVudD1cIm9uT3BlbigpXCI+PC9kaXY+XG4gIH1cbiAgQGlmICghaXNBcHBsaWNhdGlvblR5cGUpIHtcbiAgICA8ZGl2ICB3bUFsZXJ0RGlhbG9nIG5hbWU9XCJQcmVmYWJBbGVydERpYWxvZ1wiIHRpdGxlLmJpbmQ9XCJ0aXRsZVwiIG1lc3NhZ2UuYmluZD1cInRleHRcIiBva3RleHQuYmluZD1cIm9rQnV0dG9uVGV4dFwiXG4gICAgICBjYW5jZWx0ZXh0LmJpbmQ9XCJjYW5jZWxCdXR0b25UZXh0XCIgY2xvc2FibGU9XCJmYWxzZVwiIGljb25jbGFzcy5iaW5kPVwiaWNvbmNsYXNzXCJcbiAgICBlc2NhcGUuZXZlbnQ9XCJvbkVzY2FwZSgpXCIgb2suZXZlbnQ9XCJvbk9rKClcIiBjYW5jZWwuZXZlbnQ9XCJvbkNhbmNlbCgpXCIgY2xvc2UuZXZlbnQ9XCJvbkNsb3NlKClcIiBvcGVuZWQuZXZlbnQ9XCJvbk9wZW4oKVwiPjwvZGl2PlxuICB9XG4gIDxkaXYgd21BcHBFeHQ+PC9kaXY+XG4gIDxpIGlkPVwid20tbW9iaWxlLWRpc3BsYXlcIj48L2k+XG59XG48IS0tRHVtbXkgY29udGFpbmVyIHRvIGNyZWF0ZSB0aGUgY29tcG9uZW50IGR5bmFtaWNhbGx5LS0+XG48bmctY29udGFpbmVyICNkeW5hbWljQ29tcG9uZW50PjwvbmctY29udGFpbmVyPlxuIl19
|