@mediusinc/mng-commons 5.3.0-rc.0 → 5.3.0-rc.2
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/core/components/pages/error/error.page.component.d.ts +3 -0
- package/core/components/pages/not-found/not-found.page.component.d.ts +3 -0
- package/core/data-list/filter-metadata.model.d.ts +20 -0
- package/core/enum/enum-helpers.d.ts +5 -0
- package/core/helpers/number.d.ts +5 -0
- package/core/helpers/type-helpers.d.ts +1 -0
- package/core/index.d.ts +3 -1
- package/core/provide.d.ts +3 -2
- package/core/services/{local-storage-config.service.d.ts → commons-storage.service.d.ts} +4 -3
- package/core/services/commons.service.d.ts +24 -0
- package/core/services/tokens/module-config.token.d.ts +30 -8
- package/esm2022/core/components/pages/error/error.page.component.mjs +4 -1
- package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +4 -1
- package/esm2022/core/data-list/data-list-params-helpers.mjs +3 -1
- package/esm2022/core/data-list/filter-metadata.model.mjs +2 -0
- package/esm2022/core/enum/enum-helpers.mjs +10 -1
- package/esm2022/core/helpers/date.mjs +2 -2
- package/esm2022/core/helpers/number.mjs +19 -0
- package/esm2022/core/helpers/type-helpers.mjs +1 -1
- package/esm2022/core/index.mjs +4 -2
- package/esm2022/core/pipes/boolean.pipe.mjs +7 -1
- package/esm2022/core/pipes/enum.pipe.mjs +16 -5
- package/esm2022/core/provide.mjs +6 -5
- package/esm2022/core/router/route-builder.mjs +8 -1
- package/esm2022/core/security/permission.guard.mjs +2 -2
- package/esm2022/core/security/permission.service.mjs +2 -2
- package/esm2022/core/services/commons-storage.service.mjs +31 -0
- package/esm2022/core/services/commons.service.mjs +25 -1
- package/esm2022/core/services/tokens/module-config.token.mjs +1 -1
- package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +2 -3
- package/esm2022/filter/descriptors/filter.descriptor.mjs +76 -31
- package/esm2022/filter/models/filter.model.mjs +6 -1
- package/esm2022/form/components/date-range/date-range.component.mjs +45 -14
- package/esm2022/form/components/dropdown/dropdown.component.mjs +77 -93
- package/esm2022/form/components/number-range/number-range.component.mjs +29 -12
- package/esm2022/table/api/descriptors/column.descriptor.mjs +2 -1
- package/esm2022/table/api/descriptors/table.descriptor.mjs +11 -20
- package/esm2022/table/api/models/table-columns.model.mjs +1 -1
- package/esm2022/table/api/models/table.model.mjs +1 -1
- package/esm2022/table/components/column-filter/column-filter.component.mjs +396 -0
- package/esm2022/table/components/filter/filter-active-tag/filter-active-tag.component.mjs +52 -0
- package/esm2022/table/components/filter/filter-form/filter-form.component.mjs +197 -0
- package/esm2022/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.mjs +135 -0
- package/esm2022/table/components/table/table.component.mjs +39 -30
- package/esm2022/table/helpers/filters.mjs +297 -0
- package/esm2022/table/index.mjs +13 -2
- package/esm2022/table/models/filter.model.mjs +2 -0
- package/esm2022/table/pipes/filter-value.pipe.mjs +77 -0
- package/esm2022/table/provide.mjs +19 -0
- package/esm2022/table/services/data-list.service.mjs +1 -1
- package/esm2022/table/services/table-feature-config.token.mjs +3 -0
- package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +2 -2
- package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +2 -2
- package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +1 -1
- package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +1 -1
- package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +11 -13
- package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +2 -2
- package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +3 -4
- package/fesm2022/mediusinc-mng-commons-core.mjs +103 -17
- package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-filter.mjs +81 -32
- package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form.mjs +149 -117
- package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table-api.mjs +11 -19
- package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table.mjs +836 -363
- package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +10 -12
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview.mjs +5 -5
- package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
- package/filter/descriptors/filter.descriptor.d.ts +60 -16
- package/filter/models/filter.model.d.ts +4 -0
- package/form/components/date-range/date-range.component.d.ts +9 -3
- package/form/components/dropdown/dropdown.component.d.ts +6 -7
- package/form/components/number-range/number-range.component.d.ts +8 -4
- package/i18n/en.json +40 -0
- package/i18n/sl.json +40 -0
- package/package.json +7 -7
- package/table/api/descriptors/table.descriptor.d.ts +7 -7
- package/table/api/models/table-columns.model.d.ts +3 -3
- package/table/api/models/table.model.d.ts +0 -12
- package/table/components/{column-filter-full/column-filter-full.component.d.ts → column-filter/column-filter.component.d.ts} +23 -38
- package/table/components/filter/filter-active-tag/filter-active-tag.component.d.ts +20 -0
- package/table/components/filter/filter-form/filter-form.component.d.ts +53 -0
- package/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.d.ts +35 -0
- package/table/components/table/table.component.d.ts +11 -8
- package/table/helpers/filters.d.ts +31 -0
- package/table/index.d.ts +10 -1
- package/table/models/filter.model.d.ts +24 -0
- package/table/pipes/filter-value.pipe.d.ts +19 -0
- package/table/provide.d.ts +8 -0
- package/table/services/data-list.service.d.ts +3 -2
- package/table/services/table-feature-config.token.d.ts +6 -0
- package/tableview/api/editor/descriptors/field.descriptor.d.ts +3 -3
- package/tableview/api/editor/models/editor-fields.model.d.ts +4 -4
- package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +8 -6
- package/version-info.json +5 -5
- package/esm2022/core/services/local-storage-config.service.mjs +0 -29
- package/esm2022/table/components/column-filter-full/column-filter-full.component.mjs +0 -655
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { CommonsService } from '../../../services/commons.service';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated Use ErrorPageComponent from layout instead.
|
|
5
|
+
*/
|
|
3
6
|
export declare class ErrorPageComponent {
|
|
4
7
|
commons: CommonsService;
|
|
5
8
|
constructor(commons: CommonsService);
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { CommonsService } from '../../../services/commons.service';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated Use ErrorPageComponent from layout instead.
|
|
5
|
+
*/
|
|
3
6
|
export declare class NotFoundPageComponent {
|
|
4
7
|
commons: CommonsService;
|
|
5
8
|
constructor(commons: CommonsService);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { FilterMetadata } from 'primeng/api';
|
|
2
|
+
import { FilterMatchModeExtendedType } from '../data-list/filter-match.model';
|
|
3
|
+
export interface CommonsFilterMetadata extends Omit<FilterMetadata, 'matchMode'> {
|
|
4
|
+
/**
|
|
5
|
+
* The value used for display.
|
|
6
|
+
*/
|
|
7
|
+
displayValue?: any;
|
|
8
|
+
/**
|
|
9
|
+
* The match mode for display.
|
|
10
|
+
*/
|
|
11
|
+
displayMatchMode?: FilterMatchModeExtendedType;
|
|
12
|
+
/**
|
|
13
|
+
* Overridden PrimeNg FilterMetadata to have more specific type.
|
|
14
|
+
*/
|
|
15
|
+
matchMode?: FilterMatchModeExtendedType;
|
|
16
|
+
/**
|
|
17
|
+
* Case sensitive filter flag.
|
|
18
|
+
*/
|
|
19
|
+
caseSensitive?: boolean;
|
|
20
|
+
}
|
|
@@ -10,6 +10,11 @@ export declare function getEnumConstantNames(enumType: EnumType): Array<string>;
|
|
|
10
10
|
* @param enumObj Enum object.
|
|
11
11
|
*/
|
|
12
12
|
export declare function getEnumConstantNamesFromObject(enumObj: object): Array<string>;
|
|
13
|
+
/**
|
|
14
|
+
* Returns array of values for constants in enum.
|
|
15
|
+
* @param enumType Enum object.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getEnumConstantValues(enumType: EnumType): Array<EnumConstantType>;
|
|
13
18
|
/**
|
|
14
19
|
* Returns array of string values for constants in enum.
|
|
15
20
|
* @param enumType Enum object.
|
|
@@ -6,6 +6,7 @@ export type KeyofAndOfType<Type, PropertyType> = {
|
|
|
6
6
|
[K in keyof Type]: NonNullable<Type[K]> extends NonNullable<PropertyType> ? K : never;
|
|
7
7
|
}[keyof Type];
|
|
8
8
|
export type ArrayItemType<T> = NonNullable<T> extends Array<infer U> ? U : T;
|
|
9
|
+
export type SingleOrArrayType<T> = T | Array<T>;
|
|
9
10
|
export type IdType = number | string;
|
|
10
11
|
export type PrimitiveType = string | boolean | number;
|
|
11
12
|
export type PropertyType = PrimitiveType | Date | EnumType;
|
package/core/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export * from './components/pages/not-found/not-found.page.component';
|
|
|
6
6
|
export * from './data-list/data-list.model';
|
|
7
7
|
export * from './data-list/data-list-params-helpers';
|
|
8
8
|
export * from './data-list/filter-match.model';
|
|
9
|
+
export * from './data-list/filter-metadata.model';
|
|
9
10
|
export * from './data-providers/base.data-provider';
|
|
10
11
|
export * from './data-providers/base-data-provider.factory';
|
|
11
12
|
export * from './data-providers/lookup.data-provider';
|
|
@@ -28,6 +29,7 @@ export * from './error/error-helpers';
|
|
|
28
29
|
export * from './helpers/coercion';
|
|
29
30
|
export * from './helpers/date';
|
|
30
31
|
export * from './helpers/notification';
|
|
32
|
+
export * from './helpers/number';
|
|
31
33
|
export * from './helpers/object';
|
|
32
34
|
export * from './helpers/route';
|
|
33
35
|
export * from './helpers/string';
|
|
@@ -77,7 +79,7 @@ export * from './services/commons.service';
|
|
|
77
79
|
export * from './services/commons-configuration.service';
|
|
78
80
|
export * from './services/commons-init.service';
|
|
79
81
|
export * from './services/commons-router.service';
|
|
80
|
-
export * from './services/
|
|
82
|
+
export * from './services/commons-storage.service';
|
|
81
83
|
export * from './styles/style.model';
|
|
82
84
|
export * from './styles/style-constants';
|
|
83
85
|
export * from './provide';
|
package/core/provide.d.ts
CHANGED
|
@@ -2,8 +2,9 @@ import { Provider } from '@angular/core';
|
|
|
2
2
|
import { CommonsModuleConfig } from './services/tokens/module-config.token';
|
|
3
3
|
export declare enum CommonsFeatureTypeEnum {
|
|
4
4
|
Layout = 0,
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
Table = 1,
|
|
6
|
+
Tableview = 2,
|
|
7
|
+
DataApiAsClassV1 = 3
|
|
7
8
|
}
|
|
8
9
|
export interface CommonsFeature {
|
|
9
10
|
type: CommonsFeatureTypeEnum;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
2
|
export type LocalstorageConfigValueType = string | number | Date | object | boolean;
|
|
3
|
-
export declare class
|
|
3
|
+
export declare class CommonsStorageService {
|
|
4
|
+
private readonly localStorage;
|
|
4
5
|
private readonly _configKey;
|
|
5
6
|
private buildLocalStorageKey;
|
|
6
7
|
getItem<T = LocalstorageConfigValueType>(type: string, key: string): T | undefined;
|
|
7
8
|
setItem<T = LocalstorageConfigValueType>(type: string, key: string, value: T): void;
|
|
8
9
|
removeItem(type: string, key: string): void;
|
|
9
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<
|
|
10
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<
|
|
10
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CommonsStorageService, never>;
|
|
11
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<CommonsStorageService>;
|
|
11
12
|
}
|
|
@@ -14,17 +14,41 @@ export declare class CommonsService {
|
|
|
14
14
|
readonly breadcrumbs: import("@angular/core").WritableSignal<CommonsMenuItem[]>;
|
|
15
15
|
private breadcrumbsTranslateSubscription?;
|
|
16
16
|
private breadcrumbHomeTranslateSubscription?;
|
|
17
|
+
/**
|
|
18
|
+
* @deprecated Use layout colorScheme instead.
|
|
19
|
+
*/
|
|
17
20
|
colorScheme: import("@angular/core").WritableSignal<import("./tokens/module-config.token").ColorScheme>;
|
|
21
|
+
/**
|
|
22
|
+
* @deprecated Use layout colorScheme instead.
|
|
23
|
+
*/
|
|
18
24
|
colorSchemeIsLight: import("@angular/core").Signal<boolean>;
|
|
19
25
|
user: import("@angular/core").WritableSignal<IUser | undefined>;
|
|
20
26
|
userRoles: import("@angular/core").WritableSignal<string[]>;
|
|
21
27
|
appName: import("@angular/core").WritableSignal<string>;
|
|
22
28
|
appOwner: import("@angular/core").WritableSignal<string>;
|
|
29
|
+
/**
|
|
30
|
+
* @deprecated Use layout app logo instead.
|
|
31
|
+
*/
|
|
23
32
|
private appLogoLight;
|
|
33
|
+
/**
|
|
34
|
+
* @deprecated Use layout app logo instead.
|
|
35
|
+
*/
|
|
24
36
|
private appLogoDark;
|
|
37
|
+
/**
|
|
38
|
+
* @deprecated Use layout app logo instead.
|
|
39
|
+
*/
|
|
25
40
|
appLogo: import("@angular/core").Signal<string>;
|
|
41
|
+
/**
|
|
42
|
+
* @deprecated Use layout app logo instead.
|
|
43
|
+
*/
|
|
26
44
|
private appLogoNameLight;
|
|
45
|
+
/**
|
|
46
|
+
* @deprecated Use layout app logo instead.
|
|
47
|
+
*/
|
|
27
48
|
private appLogoNameDark;
|
|
49
|
+
/**
|
|
50
|
+
* @deprecated Use layout app logo instead.
|
|
51
|
+
*/
|
|
28
52
|
appLogoName: import("@angular/core").Signal<string>;
|
|
29
53
|
getDefaultLocale(): string;
|
|
30
54
|
appLocales: import("@angular/core").WritableSignal<string[]>;
|
|
@@ -1,21 +1,42 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
2
|
import { LogConfig } from '../../log/log.model';
|
|
3
3
|
import { VersionConfigType } from '../../models/version.model';
|
|
4
|
-
export type ColorScheme = 'light' | 'dark';
|
|
4
|
+
export type ColorScheme = 'light' | 'dark' | 'auto';
|
|
5
5
|
export interface CommonsModuleConfig {
|
|
6
6
|
app?: {
|
|
7
7
|
name?: string;
|
|
8
8
|
owner?: string;
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated Use layout config instead
|
|
11
|
+
*/
|
|
9
12
|
logoPath?: string;
|
|
13
|
+
/**
|
|
14
|
+
* @deprecated Use layout config instead
|
|
15
|
+
*/
|
|
10
16
|
logoPathLight?: string;
|
|
17
|
+
/**
|
|
18
|
+
* @deprecated Use layout config instead
|
|
19
|
+
*/
|
|
11
20
|
logoPathDark?: string;
|
|
21
|
+
/**
|
|
22
|
+
* @deprecated Use layout config instead
|
|
23
|
+
*/
|
|
12
24
|
logoNamePath?: string;
|
|
25
|
+
/**
|
|
26
|
+
* @deprecated Use layout config instead
|
|
27
|
+
*/
|
|
13
28
|
logoNamePathLight?: string;
|
|
29
|
+
/**
|
|
30
|
+
* @deprecated Use layout config instead
|
|
31
|
+
*/
|
|
14
32
|
logoNamePathDark?: string;
|
|
15
33
|
locales?: string[];
|
|
16
34
|
dataLocales?: string[];
|
|
17
35
|
version?: VersionConfigType;
|
|
18
|
-
|
|
36
|
+
/**
|
|
37
|
+
* @deprecated Use layout config instead
|
|
38
|
+
*/
|
|
39
|
+
colorScheme?: ColorScheme;
|
|
19
40
|
};
|
|
20
41
|
configuration?: {
|
|
21
42
|
projectEnvironment?: any;
|
|
@@ -23,12 +44,13 @@ export interface CommonsModuleConfig {
|
|
|
23
44
|
skipJsonSourceInit?: boolean;
|
|
24
45
|
jsonSourceEnableEnvProd?: boolean;
|
|
25
46
|
};
|
|
26
|
-
serialization?:
|
|
27
|
-
dateTimeInUtc?: boolean;
|
|
28
|
-
dateTimeWithTimezone?: boolean;
|
|
29
|
-
dateTimeWithMillis?: boolean;
|
|
30
|
-
filtersDateOnlyDisabled?: boolean;
|
|
31
|
-
};
|
|
47
|
+
serialization?: CommonsSerializationConfig;
|
|
32
48
|
log?: LogConfig;
|
|
33
49
|
}
|
|
50
|
+
export interface CommonsSerializationConfig {
|
|
51
|
+
dateTimeInUtc?: boolean;
|
|
52
|
+
dateTimeWithTimezone?: boolean;
|
|
53
|
+
dateTimeWithMillis?: boolean;
|
|
54
|
+
filtersDateOnlyDisabled?: boolean;
|
|
55
|
+
}
|
|
34
56
|
export declare const COMMONS_MODULE_CONFIG_IT: InjectionToken<CommonsModuleConfig>;
|
|
@@ -7,6 +7,9 @@ import * as i0 from "@angular/core";
|
|
|
7
7
|
import * as i1 from "../../../services/commons.service";
|
|
8
8
|
import * as i2 from "primeng/button";
|
|
9
9
|
import * as i3 from "@ngx-translate/core";
|
|
10
|
+
/**
|
|
11
|
+
* @deprecated Use ErrorPageComponent from layout instead.
|
|
12
|
+
*/
|
|
10
13
|
export class ErrorPageComponent {
|
|
11
14
|
constructor(commons) {
|
|
12
15
|
this.commons = commons;
|
|
@@ -18,4 +21,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImpor
|
|
|
18
21
|
type: Component,
|
|
19
22
|
args: [{ standalone: true, selector: 'mng-error-page', imports: [ButtonModule, TranslateModule, RouterLink], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"'exception-body min-h-screen ' + (commons.colorSchemeIsLight() ? 'layout-light' : 'layout-dark')\">\n <div class=\"exception-container min-h-screen flex align-items-center justify-content-center flex-column bg-auto md:bg-contain bg-no-repeat\">\n <div class=\"exception-panel text-center flex align-items-center justify-content-center flex-column\">\n <h1 class=\"text-red-400 mb-0\">{{ 'pages.notFound.title' | translate }}</h1>\n <h3 class=\"text-red-300\">{{ 'pages.notFound.subtitle' | translate }}</h3>\n <button type=\"button\" pButton [label]=\"'general.returnHome' | translate\" [routerLink]=\"['/']\"></button>\n </div>\n <div class=\"exception-footer align-items-center flex\">\n <img [src]=\"commons.appLogo()\" class=\"exception-logo\" alt=\"App logo\" />\n <img [src]=\"commons.appLogoName()\" class=\"exception-appname ml-3\" alt=\"App name\" />\n </div>\n </div>\n</div>\n", styles: [".exception-body{background:var(--surface-ground)}.exception-body .exception-container{background:var(--exception-pages-image);background-repeat:no-repeat;background-size:contain;box-sizing:border-box}.exception-body .exception-container .exception-panel{box-sizing:border-box;flex-grow:1;margin-top:3rem;margin-bottom:3rem}.exception-body .exception-container .exception-panel h1{font-size:140px;font-weight:900;text-shadow:0 0 50px rgba(252,97,97,.2)}.exception-body .exception-container .exception-panel h3{font-size:80px;font-weight:900;margin-top:-90px;margin-bottom:50px}.exception-body .exception-container .exception-panel button{margin-top:50px}.exception-body .exception-container .exception-footer{margin-bottom:2rem}.exception-body .exception-container .exception-footer .exception-logo{width:34px}.exception-body .exception-container .exception-footer .exception-appname{width:72px}\n"] }]
|
|
20
23
|
}], ctorParameters: () => [{ type: i1.CommonsService }] });
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IucGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9jb3JlL3NyYy9jb21wb25lbnRzL3BhZ2VzL2Vycm9yL2Vycm9yLnBhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vY29yZS9zcmMvY29tcG9uZW50cy9wYWdlcy9lcnJvci9lcnJvci5wYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1DQUFtQyxDQUFDOzs7OztBQUVqRTs7R0FFRztBQVNILE1BQU0sT0FBTyxrQkFBa0I7SUFDM0IsWUFBbUIsT0FBdUI7UUFBdkIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7SUFBRyxDQUFDOzhHQURyQyxrQkFBa0I7a0dBQWxCLGtCQUFrQiwwRUNuQi9CLGkrQkFhQSx5N0JEQ2MsWUFBWSw0T0FBRSxlQUFlLDRGQUFFLFVBQVU7OzJGQUsxQyxrQkFBa0I7a0JBUjlCLFNBQVM7aUNBQ00sSUFBSSxZQUNOLGdCQUFnQixXQUNqQixDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsVUFBVSxDQUFDLG1CQUduQyx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um91dGVyTGlua30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGV9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtCdXR0b25Nb2R1bGV9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcblxuaW1wb3J0IHtDb21tb25zU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY29tbW9ucy5zZXJ2aWNlJztcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgRXJyb3JQYWdlQ29tcG9uZW50IGZyb20gbGF5b3V0IGluc3RlYWQuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctZXJyb3ItcGFnZScsXG4gICAgaW1wb3J0czogW0J1dHRvbk1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlLCBSb3V0ZXJMaW5rXSxcbiAgICBzdHlsZVVybHM6IFsnZXJyb3IucGFnZS5jb21wb25lbnQuc2NzcyddLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9lcnJvci5wYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBFcnJvclBhZ2VDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjb21tb25zOiBDb21tb25zU2VydmljZSkge31cbn1cbiIsIjxkaXYgW2NsYXNzXT1cIidleGNlcHRpb24tYm9keSBtaW4taC1zY3JlZW4gJyArIChjb21tb25zLmNvbG9yU2NoZW1lSXNMaWdodCgpID8gJ2xheW91dC1saWdodCcgOiAnbGF5b3V0LWRhcmsnKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJleGNlcHRpb24tY29udGFpbmVyIG1pbi1oLXNjcmVlbiBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGJnLWF1dG8gbWQ6YmctY29udGFpbiBiZy1uby1yZXBlYXRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV4Y2VwdGlvbi1wYW5lbCB0ZXh0LWNlbnRlciBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICA8aDEgY2xhc3M9XCJ0ZXh0LXJlZC00MDAgbWItMFwiPnt7ICdwYWdlcy5ub3RGb3VuZC50aXRsZScgfCB0cmFuc2xhdGUgfX08L2gxPlxuICAgICAgICAgICAgPGgzIGNsYXNzPVwidGV4dC1yZWQtMzAwXCI+e3sgJ3BhZ2VzLm5vdEZvdW5kLnN1YnRpdGxlJyB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIFtsYWJlbF09XCInZ2VuZXJhbC5yZXR1cm5Ib21lJyB8IHRyYW5zbGF0ZVwiIFtyb3V0ZXJMaW5rXT1cIlsnLyddXCI+PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXhjZXB0aW9uLWZvb3RlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleFwiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImNvbW1vbnMuYXBwTG9nbygpXCIgY2xhc3M9XCJleGNlcHRpb24tbG9nb1wiIGFsdD1cIkFwcCBsb2dvXCIgLz5cbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJjb21tb25zLmFwcExvZ29OYW1lKClcIiBjbGFzcz1cImV4Y2VwdGlvbi1hcHBuYW1lIG1sLTNcIiBhbHQ9XCJBcHAgbmFtZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -7,6 +7,9 @@ import * as i0 from "@angular/core";
|
|
|
7
7
|
import * as i1 from "../../../services/commons.service";
|
|
8
8
|
import * as i2 from "primeng/button";
|
|
9
9
|
import * as i3 from "@ngx-translate/core";
|
|
10
|
+
/**
|
|
11
|
+
* @deprecated Use ErrorPageComponent from layout instead.
|
|
12
|
+
*/
|
|
10
13
|
export class NotFoundPageComponent {
|
|
11
14
|
constructor(commons) {
|
|
12
15
|
this.commons = commons;
|
|
@@ -18,4 +21,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImpor
|
|
|
18
21
|
type: Component,
|
|
19
22
|
args: [{ standalone: true, selector: 'mng-not-found-page', imports: [ButtonModule, RouterLink, TranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"'exception-body min-h-screen ' + (commons.colorSchemeIsLight() ? 'layout-light' : 'layout-dark')\">\n <div class=\"exception-container min-h-screen flex align-items-center justify-content-center flex-column bg-auto md:bg-contain bg-no-repeat\">\n <div class=\"exception-panel text-center flex align-items-center justify-content-center flex-column\">\n <h1 class=\"text-red-400 mb-0\">{{ 'pages.notFound.title' | translate }}</h1>\n <h3 class=\"text-red-300\">{{ 'pages.notFound.subtitle' | translate }}</h3>\n <p>{{ 'pages.notFound.message' | translate }}</p>\n <button type=\"button\" pButton [label]=\"'general.returnHome' | translate\" [routerLink]=\"['/']\"></button>\n </div>\n <div class=\"exception-footer align-items-center flex\">\n <img [src]=\"commons.appLogo()\" class=\"exception-logo\" alt=\"App logo\" />\n <img [src]=\"commons.appLogoName()\" class=\"exception-appname ml-3\" alt=\"App name\" />\n </div>\n </div>\n</div>\n", styles: [".exception-body{background:var(--surface-ground)}.exception-body .exception-container{background:var(--exception-pages-image);background-repeat:no-repeat;background-size:contain;box-sizing:border-box}.exception-body .exception-container .exception-panel{box-sizing:border-box;flex-grow:1;margin-top:3rem;margin-bottom:3rem}.exception-body .exception-container .exception-panel h1{font-size:140px;font-weight:900;text-shadow:0 0 50px rgba(252,97,97,.2)}.exception-body .exception-container .exception-panel h3{font-size:80px;font-weight:900;margin-top:-90px;margin-bottom:50px}.exception-body .exception-container .exception-panel p{font-size:24px;font-weight:400;max-width:320px}.exception-body .exception-container .exception-panel button{margin-top:50px}.exception-body .exception-container .exception-footer{margin-bottom:2rem}.exception-body .exception-container .exception-footer .exception-logo{width:34px}.exception-body .exception-container .exception-footer .exception-appname{width:72px}\n"] }]
|
|
20
23
|
}], ctorParameters: () => [{ type: i1.CommonsService }] });
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90LWZvdW5kLnBhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29yZS9zcmMvY29tcG9uZW50cy9wYWdlcy9ub3QtZm91bmQvbm90LWZvdW5kLnBhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vY29yZS9zcmMvY29tcG9uZW50cy9wYWdlcy9ub3QtZm91bmQvbm90LWZvdW5kLnBhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUNBQW1DLENBQUM7Ozs7O0FBRWpFOztHQUVHO0FBU0gsTUFBTSxPQUFPLHFCQUFxQjtJQUM5QixZQUFtQixPQUF1QjtRQUF2QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtJQUFHLENBQUM7OEdBRHJDLHFCQUFxQjtrR0FBckIscUJBQXFCLDhFQ25CbEMsZ2lDQWNBLGdpQ0RBYyxZQUFZLDZPQUFFLFVBQVUsbU9BQUUsZUFBZTs7MkZBSzFDLHFCQUFxQjtrQkFSakMsU0FBUztpQ0FDTSxJQUFJLFlBQ04sb0JBQW9CLFdBQ3JCLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxlQUFlLENBQUMsbUJBR25DLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJMaW5rfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0J1dHRvbk1vZHVsZX0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuXG5pbXBvcnQge0NvbW1vbnNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb21tb25zLnNlcnZpY2UnO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBFcnJvclBhZ2VDb21wb25lbnQgZnJvbSBsYXlvdXQgaW5zdGVhZC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ21uZy1ub3QtZm91bmQtcGFnZScsXG4gICAgaW1wb3J0czogW0J1dHRvbk1vZHVsZSwgUm91dGVyTGluaywgVHJhbnNsYXRlTW9kdWxlXSxcbiAgICBzdHlsZVVybHM6IFsnbm90LWZvdW5kLnBhZ2UuY29tcG9uZW50LnNjc3MnXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbm90LWZvdW5kLnBhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE5vdEZvdW5kUGFnZUNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHVibGljIGNvbW1vbnM6IENvbW1vbnNTZXJ2aWNlKSB7fVxufVxuIiwiPGRpdiBbY2xhc3NdPVwiJ2V4Y2VwdGlvbi1ib2R5IG1pbi1oLXNjcmVlbiAnICsgKGNvbW1vbnMuY29sb3JTY2hlbWVJc0xpZ2h0KCkgPyAnbGF5b3V0LWxpZ2h0JyA6ICdsYXlvdXQtZGFyaycpXCI+XG4gICAgPGRpdiBjbGFzcz1cImV4Y2VwdGlvbi1jb250YWluZXIgbWluLWgtc2NyZWVuIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYmctYXV0byBtZDpiZy1jb250YWluIGJnLW5vLXJlcGVhdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXhjZXB0aW9uLXBhbmVsIHRleHQtY2VudGVyIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxoMSBjbGFzcz1cInRleHQtcmVkLTQwMCBtYi0wXCI+e3sgJ3BhZ2VzLm5vdEZvdW5kLnRpdGxlJyB8IHRyYW5zbGF0ZSB9fTwvaDE+XG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LXJlZC0zMDBcIj57eyAncGFnZXMubm90Rm91bmQuc3VidGl0bGUnIHwgdHJhbnNsYXRlIH19PC9oMz5cbiAgICAgICAgICAgIDxwPnt7ICdwYWdlcy5ub3RGb3VuZC5tZXNzYWdlJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gW2xhYmVsXT1cIidnZW5lcmFsLnJldHVybkhvbWUnIHwgdHJhbnNsYXRlXCIgW3JvdXRlckxpbmtdPVwiWycvJ11cIj48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJleGNlcHRpb24tZm9vdGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4XCI+XG4gICAgICAgICAgICA8aW1nIFtzcmNdPVwiY29tbW9ucy5hcHBMb2dvKClcIiBjbGFzcz1cImV4Y2VwdGlvbi1sb2dvXCIgYWx0PVwiQXBwIGxvZ29cIiAvPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImNvbW1vbnMuYXBwTG9nb05hbWUoKVwiIGNsYXNzPVwiZXhjZXB0aW9uLWFwcG5hbWUgbWwtM1wiIGFsdD1cIkFwcCBuYW1lXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -31,10 +31,12 @@ export function fromTableLoadToDataListParams(event) {
|
|
|
31
31
|
if (Array.isArray(eventFilter)) {
|
|
32
32
|
filter.value = eventFilter[0].value;
|
|
33
33
|
filter.matchMode = eventFilter[0].matchMode;
|
|
34
|
+
filter.caseSensitive = eventFilter[0].caseSensitive;
|
|
34
35
|
}
|
|
35
36
|
else if (eventFilter !== undefined) {
|
|
36
37
|
filter.value = eventFilter.value;
|
|
37
38
|
filter.matchMode = eventFilter.matchMode;
|
|
39
|
+
filter.caseSensitive = eventFilter.caseSensitive;
|
|
38
40
|
}
|
|
39
41
|
return { ...acc, [key]: filter };
|
|
40
42
|
}, {});
|
|
@@ -415,4 +417,4 @@ export function dataListParamsFilterValueToUrlString(value, allowNull = false) {
|
|
|
415
417
|
}
|
|
416
418
|
return String(value);
|
|
417
419
|
}
|
|
418
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LXBhcmFtcy1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGF0YS1saXN0L2RhdGEtbGlzdC1wYXJhbXMtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFDLEtBQXlCO0lBQ25FLE1BQU0sTUFBTSxHQUFtQixFQUFFLENBQUM7SUFFbEMsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQUssQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ3ZDLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFL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QUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMzRixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QixJQUFJLEtBQUssWUFBWSxJQUFJO1lBQUUsT0FBTyxlQUFlLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO2FBQzdFLENBQUM7WUFDRixNQUFNLElBQUksb0JBQW9CLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNwRSxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BhcmFtc30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUYWJsZUxhenlMb2FkRXZlbnR9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBmcm9tICcuLi9lcnJvci9lcnJvci5tb2RlbCc7XG5pbXBvcnQge2RhdGVUb0lzb1N0cmluZ30gZnJvbSAnLi4vaGVscGVycy9kYXRlJztcbmltcG9ydCB7RGF0YUxpc3RGaWx0ZXIsIERhdGFMaXN0RmlsdGVyVmFsdWVUeXBlLCBEYXRhTGlzdEZpbHRlcnNUeXBlLCBEYXRhTGlzdFBhcmFtc30gZnJvbSAnLi9kYXRhLWxpc3QubW9kZWwnO1xuaW1wb3J0IHtGaWx0ZXJNYXRjaE1vZGV9IGZyb20gJy4vZmlsdGVyLW1hdGNoLm1vZGVsJztcblxuLyoqXG4gKiBDb252ZXJ0cyBhIFRhYmxlTGF6eUxvYWRFdmVudCB0byBEYXRhTGlzdFBhcmFtcy5cbiAqXG4gKiBAcGFyYW0ge1RhYmxlTGF6eUxvYWRFdmVudH0gZXZlbnQgLSBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgZGF0YSB0byBjb252ZXJ0LlxuICogQHJldHVybiB7RGF0YUxpc3RQYXJhbXN9IC0gVGhlIGNvbnZlcnRlZCBEYXRhTGlzdFBhcmFtcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVGFibGVMb2FkVG9EYXRhTGlzdFBhcmFtcyhldmVudDogVGFibGVMYXp5TG9hZEV2ZW50KTogRGF0YUxpc3RQYXJhbXMge1xuICAgIGNvbnN0IHBhcmFtczogRGF0YUxpc3RQYXJhbXMgPSB7fTtcblxuICAgIGlmIChldmVudC5maXJzdCAhPSBudWxsKSB7XG4gICAgICAgIHBhcmFtcy5vZmZzZXQgPSBldmVudC5maXJzdDtcbiAgICB9XG4gICAgaWYgKGV2ZW50LnJvd3MgIT0gbnVsbCkge1xuICAgICAgICBwYXJhbXMubGltaXQgPSBldmVudC5yb3dzO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXZlbnQuZ2xvYmFsRmlsdGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICBwYXJhbXMuc2VhcmNoID0gZXZlbnQuZ2xvYmFsRmlsdGVyO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShldmVudC5nbG9iYWxGaWx0ZXIpICYmIGV2ZW50Lmdsb2JhbEZpbHRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBhcmFtcy5zZWFyY2ggPSBldmVudC5nbG9iYWxGaWx0ZXIuam9pbignLCcpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50Lm11bHRpU29ydE1ldGEpICYmIGV2ZW50Lm11bHRpU29ydE1ldGEubGVuZ3RoID4gMCkge1xuICAgICAgICBwYXJhbXMuc29ydCA9IGV2ZW50Lm11bHRpU29ydE1ldGEubWFwKG0gPT4gKHtwcm9wZXJ0eTogbS5maWVsZCwgYXNjZW5kaW5nOiBtLm9yZGVyID49IDB9KSk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmZpbHRlcnMpIHtcbiAgICAgICAgcGFyYW1zLmZpbHRlcnMgPSBPYmplY3Qua2V5cyhldmVudC5maWx0ZXJzKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXI6IERhdGFMaXN0RmlsdGVyID0ge307XG4gICAgICAgICAgICBjb25zdCBldmVudEZpbHRlciA9IGV2ZW50LmZpbHRlcnM/LltrZXkgYXMga2V5b2Ygb2JqZWN0XTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50RmlsdGVyKSkge1xuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IGV2ZW50RmlsdGVyWzBdLnZhbHVlO1xuICAgICAgICAgICAgICAgIGZpbHRlci5tYXRjaE1vZGUgPSBldmVudEZpbHRlclswXS5tYXRjaE1vZGU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50RmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSBldmVudEZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgICAgICBmaWx0ZXIubWF0Y2hNb2RlID0gZXZlbnRGaWx0ZXIubWF0Y2hNb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBmaWx0ZXJ9O1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gcGFyYW1ldGVycyB0byBVUkwgcXVlcnkgcGFyYW1ldGVycy5cbiAqIFNvcnRzIGFyZSBmb3JtYXR0ZWQgaW4gTWVkaXVzIGRhdGEgQVBJIHNvcnQgcXVlcnkgbGFuZ3VhZ2U6IGBhc2M6cHJvcDEsZGVzYzpwcm9wMmAsIC4uLlxuICogRmlsdGVyIGtleXMgYXJlIFwiZmxhdHRlbmVkXCIgaW4gdGhlIG5ldyBvYmplY3QsIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGluIE1lZGl1cyBkYXRhIEFQSSBmaWx0ZXIgcXVlcnkgbGFuZ3VhZ2U6IGBjczplcTphc2RgLCBgaW46YXNkLHF3ZWAsIGBleGAsIC4uLlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RQYXJhbXN9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zfG51bGx9IGRlZmF1bHRzIC0gVGhlIGRlZmF1bHQgcGFyYW1ldGVycyB1c2VkIGlmIG5vIG1hdGNoaW5nIHByb3BlcnR5IGluIHBhcmFtcyBpcyBhdmFpbGFibGUuIERlZmF1bHRzIHRvIHsgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfSBpZiBub3QgcHJvdmlkZWQuXG4gKiBAcmV0dXJucyB7UGFyYW1zfSAtIFRoZSBVUkwgcXVlcnkgcGFyYW1ldGVycyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhTGlzdFBhcmFtc1RvVXJsUXVlcnkoXG4gICAgcGFyYW1zOiBEYXRhTGlzdFBhcmFtczxhbnksIGFueT4sXG4gICAgZGVmYXVsdHM6IERhdGFMaXN0UGFyYW1zPGFueSwgYW55PiB8IG51bGwgPSB7XG4gICAgICAgIGxpbWl0OiAyNSxcbiAgICAgICAgb2Zmc2V0OiAwXG4gICAgfVxuKTogUGFyYW1zIHtcbiAgICBjb25zdCB1cmxQYXJhbXM6IFBhcmFtcyA9IHt9O1xuXG4gICAgaWYgKHBhcmFtcy5saW1pdCAmJiBwYXJhbXMubGltaXQgIT09IGRlZmF1bHRzPy5saW1pdCkge1xuICAgICAgICB1cmxQYXJhbXNbJ2xpbWl0J10gPSBwYXJhbXMubGltaXQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMub2Zmc2V0ICYmIHBhcmFtcy5vZmZzZXQgIT09IGRlZmF1bHRzPy5vZmZzZXQpIHtcbiAgICAgICAgdXJsUGFyYW1zWydvZmZzZXQnXSA9IHBhcmFtcy5vZmZzZXQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuc2VhcmNoICYmIHBhcmFtcy5zZWFyY2ggIT09IGRlZmF1bHRzPy5zZWFyY2gpIHtcbiAgICAgICAgdXJsUGFyYW1zWydxJ10gPSBwYXJhbXMuc2VhcmNoO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnNvcnQgJiYgQXJyYXkuaXNBcnJheShwYXJhbXMuc29ydCkgJiYgcGFyYW1zLnNvcnQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBkZWZhdWx0cz8uc29ydCA9PSBudWxsIHx8XG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShkZWZhdWx0cy5zb3J0KSB8fFxuICAgICAgICAgICAgZGVmYXVsdHMuc29ydC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHBhcmFtcy5zb3J0Lmxlbmd0aCAhPT0gZGVmYXVsdHMuc29ydC5sZW5ndGggfHxcbiAgICAgICAgICAgIGRlZmF1bHRzLnNvcnQuc29tZSgoZHMsIGlkeCkgPT4gZHMucHJvcGVydHkgIT09IHBhcmFtcy5zb3J0IVtpZHhdLnByb3BlcnR5IHx8IChkcy5hc2NlbmRpbmcgPz8gdHJ1ZSkgIT09IChwYXJhbXMuc29ydCFbaWR4XS5hc2NlbmRpbmcgPz8gdHJ1ZSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdXJsUGFyYW1zWydzb3J0J10gPSBkYXRhTGlzdFBhcmFtc1NvcnRUb1VybFF1ZXJ5KHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhcmFtcy5maWx0ZXJzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHBhcmFtcy5maWx0ZXJzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1GaWx0ZXIgPSBwYXJhbXMuZmlsdGVycyFbayBhcyBrZXlvZiBvYmplY3RdO1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IGRlZmF1bHRzPy5maWx0ZXJzPy5bayBhcyBrZXlvZiBvYmplY3RdO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXIgJiZcbiAgICAgICAgICAgICAgICAoKEFycmF5LmlzQXJyYXkoZGVmYXVsdEZpbHRlci52YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShwYXJhbUZpbHRlci52YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlci52YWx1ZS5sZW5ndGggPT09IHBhcmFtRmlsdGVyLnZhbHVlLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyLnZhbHVlLmV2ZXJ5KCh2LCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKHBhcmFtRmlsdGVyLnZhbHVlIGFzIEFycmF5PERhdGFMaXN0RmlsdGVyVmFsdWVUeXBlPilbaWR4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgdiBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB2YWx1ZS5nZXRUaW1lKCkgPT09IHYuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gdmFsdWUgPT09IHY7XG4gICAgICAgICAgICAgICAgICAgIH0pKSB8fCAvLyBoYW5kbGUgYXJyYXlzXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXIudmFsdWUgPT09IHBhcmFtRmlsdGVyLnZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXIubWF0Y2hNb2RlID09PSBwYXJhbUZpbHRlci5tYXRjaE1vZGUgJiZcbiAgICAgICAgICAgICAgICAoZGVmYXVsdEZpbHRlci5jYXNlU2Vuc2l0aXZlID8/IGZhbHNlKSA9PT0gKHBhcmFtRmlsdGVyLmNhc2VTZW5zaXRpdmUgPz8gZmFsc2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBwYXJhbUZpbHRlci52YWx1ZSA9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcj8udmFsdWUgPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHBhcmFtRmlsdGVyLm1hdGNoTW9kZSAhPT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyAmJlxuICAgICAgICAgICAgICAgIHBhcmFtRmlsdGVyLm1hdGNoTW9kZSAhPT0gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1cmxQYXJhbXNba10gPSBkYXRhTGlzdFBhcmFtc0ZpbHRlcnNUb1VybFF1ZXJ5KHBhcmFtcywgaywgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdHM/LmZpbHRlcnMpIHtcbiAgICAgICAgLy8gYWRkIG90aGVyIGRlZmF1bHRzXG4gICAgICAgIGNvbnN0IHBhcmFtRmlsdGVyS2V5cyA9IHBhcmFtcy5maWx0ZXJzID8gT2JqZWN0LmtleXMocGFyYW1zLmZpbHRlcnMpIDogW107XG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRzLmZpbHRlcnMpXG4gICAgICAgICAgICAuZmlsdGVyKGsgPT4gcGFyYW1GaWx0ZXJLZXlzLmluZGV4T2YoaykgPCAwKVxuICAgICAgICAgICAgLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgdXJsUGFyYW1zW2tdID0gZGF0YUxpc3RQYXJhbXNGaWx0ZXJzVG9VcmxRdWVyeShkZWZhdWx0cywgayk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsUGFyYW1zO1xufVxuXG4vKipcbiAqIE1lcmdlcyB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycyB3aXRoIGRlZmF1bHQgdmFsdWVzIGFuZCByZXR1cm5zIHRoZSBtZXJnZWQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RQYXJhbXN9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIG1lcmdlIHdpdGggZGVmYXVsdHMuXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zfSBkZWZhdWx0cyAtIFRoZSBkZWZhdWx0IHZhbHVlcyB0byBtZXJnZSB3aXRoIHBhcmFtcyAob3B0aW9uYWwsIGRlZmF1bHQgaXMgeyBsaW1pdDogMjUsIG9mZnNldDogMCB9KS5cbiAqIEByZXR1cm5zIHtEYXRhTGlzdFBhcmFtc30gLSBUaGUgbWVyZ2VkIHBhcmFtZXRlcnMgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEYXRhTGlzdFBhcmFtc1dpdGhEZWZhdWx0czxTb3J0cyA9IGFueSwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGFueT4oXG4gICAgcGFyYW1zOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4sXG4gICAgZGVmYXVsdHM6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPiA9IHtcbiAgICAgICAgbGltaXQ6IDI1LFxuICAgICAgICBvZmZzZXQ6IDBcbiAgICB9XG4pOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4ge1xuICAgIGNvbnN0IG1lcmdlZDogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+ID0ge1xuICAgICAgICBsaW1pdDogcGFyYW1zLmxpbWl0ID8/IGRlZmF1bHRzLmxpbWl0LFxuICAgICAgICBvZmZzZXQ6IHBhcmFtcy5vZmZzZXQgPz8gZGVmYXVsdHMub2Zmc2V0LFxuICAgICAgICBzZWFyY2g6IHBhcmFtcy5zZWFyY2ggPz8gZGVmYXVsdHMuc2VhcmNoLFxuICAgICAgICBzb3J0OiAocGFyYW1zLnNvcnQgPz8gZGVmYXVsdHMuc29ydCk/Lm1hcChzID0+ICh7Li4uc30pKVxuICAgIH07XG5cbiAgICBpZiAocGFyYW1zLmZpbHRlcnMpIHtcbiAgICAgICAgbWVyZ2VkLmZpbHRlcnMgPSB7fSBhcyBEYXRhTGlzdEZpbHRlcnNUeXBlPEZpbHRlcnM+O1xuICAgICAgICBPYmplY3QuZW50cmllcyhwYXJhbXMuZmlsdGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiAobWVyZ2VkLmZpbHRlcnMhW2tleSBhcyBGaWx0ZXJzXSA9IHsuLi4odmFsdWUgYXMgRGF0YUxpc3RGaWx0ZXIpfSkpO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdHMuZmlsdGVycykge1xuICAgICAgICBpZiAoIW1lcmdlZC5maWx0ZXJzKSBtZXJnZWQuZmlsdGVycyA9IHt9IGFzIERhdGFMaXN0RmlsdGVyc1R5cGU8RmlsdGVycz47XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGRlZmF1bHRzLmZpbHRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1lcmdlZC5maWx0ZXJzIVtrZXkgYXMgRmlsdGVyc10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1lcmdlZC5maWx0ZXJzIVtrZXkgYXMgRmlsdGVyc10gPSB7Li4uKHZhbHVlIGFzIERhdGFMaXN0RmlsdGVyKX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHBhcmFtZXRlcnMgdG8gYSBVUkwgcXVlcnkgc3RyaW5nIGZvciBzb3J0aW5nLlxuICogU29ydHMgYXJlIGZvcm1hdHRlZCBpbiBNZWRpdXMgZGF0YSBBUEkgc29ydCBxdWVyeSBsYW5ndWFnZTogYGFzYzpwcm9wMSxkZXNjOnByb3AyYCwgLi4uXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtc30gcGFyYW1zIC0gQW4gb3B0aW9uYWwgb2JqZWN0IGNvbnRhaW5pbmcgc29ydCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVUkwgcXVlcnkgb3IgdW5kZWZpbmVkIGlmIG5vIHNvcnQgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhTGlzdFBhcmFtc1NvcnRUb1VybFF1ZXJ5KHBhcmFtcz86IERhdGFMaXN0UGFyYW1zPGFueSwgYW55Pik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHBhcmFtcyAmJiBBcnJheS5pc0FycmF5KHBhcmFtcy5zb3J0KVxuICAgICAgICA/IHBhcmFtcy5zb3J0Lm1hcChzID0+IGAke3MuYXNjZW5kaW5nID09PSB0cnVlIHx8IHMuYXNjZW5kaW5nID09PSB1bmRlZmluZWQgPyAnYXNjJyA6ICdkZXNjJ306JHtTdHJpbmcocy5wcm9wZXJ0eSl9YCkuam9pbignLCcpXG4gICAgICAgIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3BlY2lmaWMgZmlsdGVyIHBhcmFtZXRlciAoYnkga2V5KSBmcm9tIERhdGFMaXN0UGFyYW1zIG9iamVjdCB0byBhIFVSTCBxdWVyeSBzdHJpbmcuXG4gKiBGaWx0ZXIga2V5cyBhcmUgXCJmbGF0dGVuZWRcIiBpbiB0aGUgbmV3IG9iamVjdCwgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgaW4gTWVkaXVzIGRhdGEgQVBJIGZpbHRlciBxdWVyeSBsYW5ndWFnZTogYGNzOmVxOmFzZGAsIGBpbjphc2QscXdlYCwgYGV4YCwgLi4uXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtczxhbnksIEZpbHRlcnM+IHwgdW5kZWZpbmVkfSBwYXJhbXMgLSBUaGUgRGF0YUxpc3RQYXJhbXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbHRlcnMuXG4gKiBAcGFyYW0ge0ZpbHRlcnN9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGZpbHRlciB0byBjb252ZXJ0LlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dOdWxsPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIGFsbG93IG51bGwgdmFsdWVzIGluIHRoZSBxdWVyeSBzdHJpbmcuXG4gKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIFVSTCBxdWVyeSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzcGVjaWZpZWQgZmlsdGVyLCBvciB1bmRlZmluZWQgaWYgdGhlIGZpbHRlciBpcyBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhTGlzdFBhcmFtc0ZpbHRlcnNUb1VybFF1ZXJ5PEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBzdHJpbmc+KFxuICAgIHBhcmFtczogRGF0YUxpc3RQYXJhbXM8YW55LCBGaWx0ZXJzPiB8IHVuZGVmaW5lZCxcbiAgICBrZXk6IEZpbHRlcnMsXG4gICAgYWxsb3dOdWxsID0gZmFsc2Vcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGFyYW1GaWx0ZXIgPSBwYXJhbXM/LmZpbHRlcnM/LltrZXldO1xuICAgIHJldHVybiBkYXRhTGlzdFBhcmFtc0ZpbHRlclRvVXJsUXVlcnkocGFyYW1GaWx0ZXIsIGFsbG93TnVsbCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBmaWx0ZXIgdG8gYSBVUkwgcXVlcnkgc3RyaW5nLlxuICogRmlsdGVyIGtleXMgYXJlIFwiZmxhdHRlbmVkXCIgaW4gdGhlIG5ldyBvYmplY3QsIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGluIE1lZGl1cyBkYXRhIEFQSSBmaWx0ZXIgcXVlcnkgbGFuZ3VhZ2U6IGBjczplcTphc2RgLCBgaW46YXNkLHF3ZWAsIGBleGAsIC4uLlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RGaWx0ZXJ9IHBhcmFtRmlsdGVyIC0gVGhlIGZpbHRlciBvYmplY3QgdG8gYmUgY29udmVydGVkLlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dOdWxsPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIGFsbG93IG51bGwgdmFsdWVzIGluIHRoZSBmaWx0ZXIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gLSBUaGUgZmlsdGVyIGNvbnZlcnRlZCB0byBhIFVSTCBxdWVyeSBzdHJpbmcsIG9yIHVuZGVmaW5lZCBpZiBubyBmaWx0ZXIgaXMgcHJvdmlkZWQgb3IgdGhlIGZpbHRlciBoYXMgZW1wdHkgb3IgaW52YWxpZCB2YWx1ZXMuXG4gKiBAdGhyb3dzIHtDb21tb25zSW50ZXJuYWxFcnJvcn0gLSBJZiB0aGUgZmlsdGVyIGhhcyBpbnZhbGlkIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGFMaXN0UGFyYW1zRmlsdGVyVG9VcmxRdWVyeShwYXJhbUZpbHRlcj86IERhdGFMaXN0RmlsdGVyLCBhbGxvd051bGwgPSBmYWxzZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmlsdGVyVmFsdWVBc0FycmF5ID0gQXJyYXkuaXNBcnJheShwYXJhbUZpbHRlcj8udmFsdWUpID8gcGFyYW1GaWx0ZXIhLnZhbHVlLmZpbHRlcih2ID0+IHYgIT09IHVuZGVmaW5lZCAmJiAoYWxsb3dOdWxsIHx8IHYgIT09IG51bGwpKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtYXRjaE1vZGUgPSBwYXJhbUZpbHRlcj8ubWF0Y2hNb2RlID8/IEZpbHRlck1hdGNoTW9kZS5FcXVhbHM7XG4gICAgaWYgKFxuICAgICAgICBwYXJhbUZpbHRlciA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICghYWxsb3dOdWxsICYmIG1hdGNoTW9kZSAhPT0gJ2V4aXN0cycgJiYgbWF0Y2hNb2RlICE9PSAnZG9lc05vdEV4aXN0JyAmJiBwYXJhbUZpbHRlci52YWx1ZSA9PSBudWxsKSB8fFxuICAgICAgICAodHlwZW9mIHBhcmFtRmlsdGVyLnZhbHVlID09PSAnc3RyaW5nJyAmJiBwYXJhbUZpbHRlci52YWx1ZS5sZW5ndGggPT09IDApIHx8XG4gICAgICAgIChBcnJheS5pc0FycmF5KGZpbHRlclZhbHVlQXNBcnJheSkgJiYgZmlsdGVyVmFsdWVBc0FycmF5Lmxlbmd0aCA9PT0gMClcbiAgICApIHtcbiAgICAgICAgLy8gbm8gbmVlZCB0byBpbmNsdWRlIGZpbHRlcnMgZm9yIGVtcHR5IHZhbHVlc1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuICYmICEoQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZUFzQXJyYXkpICYmIGZpbHRlclZhbHVlQXNBcnJheS5sZW5ndGggPT09IDIpKSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgRmlsdGVyIG1hdGNoIG1vZGUgYmV0d2VlbiByZXF1aXJlcyBleGFjdGx5IDIgdmFsdWVzOiAke3BhcmFtRmlsdGVyLnZhbHVlfWApO1xuICAgIH1cblxuICAgIGlmICgobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuSW4gfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuTm90SW4pICYmICghQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZUFzQXJyYXkpIHx8IGZpbHRlclZhbHVlQXNBcnJheS5sZW5ndGggPT09IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgRmlsdGVyIG1hdGNoIG1vZGUgJHttYXRjaE1vZGV9IHJlcXVpcmVzIG5vbi1lbXB0eSBhcnJheTogJHtwYXJhbUZpbHRlci52YWx1ZX1gKTtcbiAgICB9XG5cbiAgICBpZiAoKFtGaWx0ZXJNYXRjaE1vZGUuSW4sIEZpbHRlck1hdGNoTW9kZS5Ob3RJbiwgRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW5dIGFzIHN0cmluZ1tdKS5pbmRleE9mKG1hdGNoTW9kZSkgPT09IC0xICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWVBc0FycmF5KSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciBtYXRjaCBtb2RlICR7bWF0Y2hNb2RlfSBtdXN0IG5vdCBiZSBhcnJheTogJHtwYXJhbUZpbHRlci52YWx1ZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBub1ZhbCA9IHBhcmFtRmlsdGVyLm1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyB8fCBwYXJhbUZpbHRlci5tYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3Q7XG4gICAgY29uc3QgdXJsVmFsdWVQYXJ0ID0gbm9WYWwgPyAnJyA6IGA6JHtkYXRhTGlzdFBhcmFtc0ZpbHRlclZhbHVlVG9VcmxTdHJpbmcoZmlsdGVyVmFsdWVBc0FycmF5ID8/IHBhcmFtRmlsdGVyLnZhbHVlLCBhbGxvd051bGwpfWA7XG5cbiAgICByZXR1cm4gYCR7cGFyYW1GaWx0ZXIuY2FzZVNlbnNpdGl2ZSA/ICdjczonIDogcGFyYW1GaWx0ZXIuY2FzZVNlbnNpdGl2ZSA9PT0gZmFsc2UgPyAnY2k6JyA6ICcnfSR7RmlsdGVyTWF0Y2hNb2RlLmdldEFiYnJldmlhdGlvbihtYXRjaE1vZGUpID8/IG1hdGNoTW9kZX0ke3VybFZhbHVlUGFydH1gO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIFVSTCBxdWVyeSBwYXJhbWV0ZXJzIHRvIGEgRGF0YUxpc3RQYXJhbXMgb2JqZWN0LlxuICogU29ydHMgYXJlIGZvcm1hdHRlZCBmcm9tIE1lZGl1cyBkYXRhIEFQSSBzb3J0IHF1ZXJ5IGxhbmd1YWdlOiBgYXNjOnByb3AxLGRlc2M6cHJvcDJgLCAuLi5cbiAqIEZpbHRlciBrZXlzIGFyZSBhbGwga2V5cyBpbiBQYXJhbXMgb2JqZWN0IHRoYXQgYXJlIG5vdCBtYXRjaGVkIGVsc2V3aGVyZSwgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgZnJvbSBNZWRpdXMgZGF0YSBBUEkgZmlsdGVyIHF1ZXJ5IGxhbmd1YWdlOiBgY3M6ZXE6YXNkYCwgYGluOmFzZCxxd2VgLCBgZXhgLCAuLi5cbiAqXG4gKiBAcGFyYW0ge1BhcmFtc30gdXJsUGFyYW1zIC0gVGhlIFVSTCBxdWVyeSBwYXJhbWV0ZXJzLlxuICogQHJldHVybiB7RGF0YUxpc3RQYXJhbXN9IC0gVGhlIGNvbnZlcnRlZCBEYXRhTGlzdFBhcmFtcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVXJsUXVlcnlUb0RhdGFMaXN0UGFyYW1zKHVybFBhcmFtczogUGFyYW1zKTogRGF0YUxpc3RQYXJhbXMge1xuICAgIGNvbnN0IHBhcmFtczogRGF0YUxpc3RQYXJhbXMgPSB7fTtcblxuICAgIE9iamVjdC5lbnRyaWVzKHVybFBhcmFtcykuZm9yRWFjaCgoW3VybFBhcmFtS2V5LCB1cmxQYXJhbVZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAodXJsUGFyYW1LZXkgPT09ICdsaW1pdCcpIHtcbiAgICAgICAgICAgIHBhcmFtcy5saW1pdCA9ICt1cmxQYXJhbVZhbHVlO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHBhcmFtcy5saW1pdCkgfHwgcGFyYW1zLmxpbWl0IDwgMCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbXMubGltaXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodXJsUGFyYW1LZXkgPT09ICdvZmZzZXQnKSB7XG4gICAgICAgICAgICBwYXJhbXMub2Zmc2V0ID0gK3VybFBhcmFtVmFsdWU7XG4gICAgICAgICAgICBpZiAoaXNOYU4ocGFyYW1zLm9mZnNldCkgfHwgcGFyYW1zLm9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW1zLm9mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh1cmxQYXJhbUtleSA9PT0gJ3EnKSB7XG4gICAgICAgICAgICBwYXJhbXMuc2VhcmNoID0gdXJsUGFyYW1WYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh1cmxQYXJhbUtleSA9PT0gJ3NvcnQnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybFBhcmFtVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnNvcnQgPSB1cmxQYXJhbVZhbHVlLnNwbGl0KCcsJykubWFwKHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbZGlyZWN0aW9uLCBwcm9wZXJ0eV0gPSBzLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7cHJvcGVydHk6IChwcm9wZXJ0eSA/PyBkaXJlY3Rpb24pIGFzIGtleW9mIG9iamVjdCwgYXNjZW5kaW5nOiBkaXJlY3Rpb24gIT09ICdkZXNjJ307XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgU3RyaW5nIGlzIGV4cGVjdGVkIGFzIHZhbHVlIGZvciAnJHt1cmxQYXJhbUtleX0nIHdoZW4gY29udmVydGluZyBmcm9tIHVybFBhcmFtc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB1cmxQYXJhbVZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHVybFBhcmFtVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gZW1wdHkgc3RyaW5nIHNob3VsZCBiZSBpZ25vcmVkXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJQYXJ0cyA9IHVybFBhcmFtVmFsdWUuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIGxldCBwYXJ0SWR4ID0gMDtcblxuICAgICAgICAgICAgLy8gY2FzZSBzZW5zaXRpdmVcbiAgICAgICAgICAgIGxldCBjYXNlU2Vuc2l0aXZlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGZpbHRlclBhcnRzW3BhcnRJZHhdID09PSAnY3MnIHx8IGZpbHRlclBhcnRzW3BhcnRJZHhdID09PSAnY2knKSB7XG4gICAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZSA9IGZpbHRlclBhcnRzW3BhcnRJZHgrK10gPT09ICdjcyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1hdGNoIG1vZGVcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoTW9kZSA9IGZpbHRlclBhcnRzW3BhcnRJZHhdID8gRmlsdGVyTWF0Y2hNb2RlLmZyb21BYmJyZXZpYXRpb24oZmlsdGVyUGFydHNbcGFydElkeF0pID8/IGZpbHRlclBhcnRzW3BhcnRJZHhdIDogRmlsdGVyTWF0Y2hNb2RlLkVxdWFscztcbiAgICAgICAgICAgIHBhcnRJZHgrKztcblxuICAgICAgICAgICAgY29uc3Qgbm9WYWwgPSBtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5FeGlzdHMgfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRG9lc05vdEV4aXN0O1xuXG4gICAgICAgICAgICAvLyB2YWx1ZVxuICAgICAgICAgICAgbGV0IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IG51bGwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoIW5vVmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlclBhcnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwYXJ0SWR4ID09PSBmaWx0ZXJQYXJ0cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZmlsdGVyUGFydHNbcGFydElkeF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0SWR4IDwgZmlsdGVyUGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFycmF5IHRoYXQgc2hvdWxkIG5vdCBiZSBhcnJheSwgc28gam9pbiBiYWNrIHRvZ2V0aGVyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZmlsdGVyUGFydHMuc2xpY2UocGFydElkeCwgZmlsdGVyUGFydHMubGVuZ3RoKS5qb2luKCc6Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgbWF0Y2hNb2RlICE9PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzICYmIG1hdGNoTW9kZSAhPT0gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB2YWx1ZSB1bmRlZmluZWQgYW5kIG1hdGNoIG1vZGUgZXhwZWN0cyB2YWx1ZSwgdGhlbiBza2lwXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICdudWxsJykge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKChtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5JbiB8fCBtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Ob3RJbiB8fCBtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhcnJheVZhbDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2UgbWF0Y2ggbW9kZXMgZXhwZWN0IGFycmF5XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKCdcIicpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2Vuczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50VG9rZW4gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHBsaWNpdFF1b3RlcyA9IGZhbHNlOyAvL3Rva2VuIGlzIHF1b3RlZCwgZS5nLiBpbjoxLDIsXCIyMlwiXCJcIixcIiwxMjNcIlwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBxdW90ZXNPcGVuZWQgPSBmYWxzZTsgLy90b2tlbiBoYXMgc3RhcnRlZCBwcm9jZXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcXVvdGVzRXhwbGljaXRseUNsb3NlZCA9IGZhbHNlOyAvL3Rva2VuIHByb2Nlc3NpbmcgaGFzIGZpbmlzaGVkLCBhZnRlciBzaW5nbGUgXCIgaW4gcXVvdGVkIG1vZGUsIG9yIGJlZm9yZSAsIGluIG5vdCBxdW90ZWRcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGMgPSB2YWx1ZVtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0IHRoZSB0b2tlbml6ZXIgd2hlbiBzZWVpbmcgdGhlIHRva2VuIHNlcGFyYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgaWYgZWl0aGVyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBxdW90ZXMgaGF2ZSBub3QgYmVlbiBvcGVuZWQgeWV0ICh3aGVuIHRoZXJlIGFyZSBubyBjaGFyYWN0ZXJzIGJldHdlZW4gc2VwYXJhdG9ycyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHRva2VuIGhhcyBiZWVuIGV4cGxpY2l0bHkgY2xvc2VkICh3aGVuIHdlIGFjdHVhbGx5IGhhdmUgZXhwbGljaXQgb3BlbmluZyBpLmUuLCBxdW90ZXMgYXMgdGhlIGZpcnN0IGNoYXJhY3RlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciB3ZSBoYXZlIGltcGxpY2l0IHF1b3RlcyAoaS5lLiwgcXVvdGVzIGFyZSBub3QgdGhlIGZpcnN0IGNoYXJhY3RlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJywnICYmICghcXVvdGVzT3BlbmVkIHx8IHF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQgfHwgIWV4cGxpY2l0UXVvdGVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaChjdXJyZW50VG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVzT3BlbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGljaXRRdW90ZXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1wiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2NhcGVkIGRvdWJsZS1xdW90ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGxpY2l0UXVvdGVzICYmIGkgKyAxIDwgdmFsdWUubGVuZ3RoICYmIHZhbHVlW2kgKyAxXSA9PT0gJ1wiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRva2VuICs9IGM7IC8vIEFwcGVuZCBvbmUgZG91YmxlLXF1b3RlIHRvIHRoZSBjdXJyZW50IHRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7IC8vIFNraXAgdGhlIG5leHQgZG91YmxlLXF1b3RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZW5jb3VudGVyIHF1b3RlcyBhZ2FpbiBhZnRlciB0aGV5IHdlcmUgdGhlIGZpcnN0IGNoYXJhY3RlciA9PiB3ZSBjbG9zZSB0aGUgdG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXhwbGljaXRRdW90ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltcGxpY2l0IHF1b3Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChxdW90ZXNPcGVuZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiArPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHF1b3RlcyBhcmUgdGhlIGZpcnN0IGNoYXJhY3RlciA9PiBleHBsaWNpdGx5IG9wZW4gdGhlIHRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRva2VuID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZXNPcGVuZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGljaXRRdW90ZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rlc09wZW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiArPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1b3Rlc09wZW5lZCAmJiAhcXVvdGVzRXhwbGljaXRseUNsb3NlZCAmJiBleHBsaWNpdFF1b3Rlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBsYXN0IHRva2VuIGFmdGVyIHRoZSBsb29wIGVuZHNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKGN1cnJlbnRUb2tlbi50b1N0cmluZygpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlWYWwgPSB0b2tlbnM7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVZhbCA9IHZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbiAmJiBhcnJheVZhbC5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXJyYXlWYWw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlIS5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZpbHRlciB3aXRoIGVtcHR5IHZhbHVlIGlzIHRvIGJlIGlnbm9yZWRcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuZmlsdGVycykge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJzW3VybFBhcmFtS2V5IGFzIGtleW9mIG9iamVjdF0gPSB7dmFsdWU6IHZhbHVlLCBtYXRjaE1vZGU6IG1hdGNoTW9kZSwgY2FzZVNlbnNpdGl2ZTogY2FzZVNlbnNpdGl2ZX07XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBwYXJhbXM7XG59XG5cbi8qKlxuICogTWFrZXMgYSBjb3B5IG9mIHRoZSBnaXZlbiBEYXRhTGlzdFBhcmFtcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz59IHBhcmFtcyAtIFRoZSBEYXRhTGlzdFBhcmFtcyBvYmplY3QgdG8gYmUgY29waWVkLlxuICogQHJldHVybnMge0RhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPn0gLSBSZXR1cm5zIGEgbmV3IGNvcHkgb2YgdGhlIERhdGFMaXN0UGFyYW1zIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlEYXRhTGlzdFBhcmFtczxTb3J0cyA9IHN0cmluZywgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IHN0cmluZz4ocGFyYW1zOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4pOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4ge1xuICAgIGNvbnN0IGNvcHk6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPiA9IHtcbiAgICAgICAgb2Zmc2V0OiBwYXJhbXMub2Zmc2V0LFxuICAgICAgICBsaW1pdDogcGFyYW1zLmxpbWl0LFxuICAgICAgICBzZWFyY2g6IHBhcmFtcy5zZWFyY2hcbiAgICB9O1xuXG4gICAgaWYgKHBhcmFtcy5zb3J0KSB7XG4gICAgICAgIGNvcHkuc29ydCA9IHBhcmFtcy5zb3J0Py5tYXAocyA9PiAoey4uLnN9KSk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuZmlsdGVycykge1xuICAgICAgICBjb3B5LmZpbHRlcnMgPSBPYmplY3QuZW50cmllcyhwYXJhbXMuZmlsdGVycykucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSB2YWx1ZSBhcyBEYXRhTGlzdEZpbHRlcjtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICAgIFtrZXldOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmZpbHRlclZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZS52YWx1ZSkgPyBbLi4uZmlsdGVyVmFsdWUudmFsdWVdIDogZmlsdGVyVmFsdWUudmFsdWVcbiAgICAgICAgICAgICAgICB9IGFzIERhdGFMaXN0RmlsdGVyXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCB7fSBhcyBEYXRhTGlzdEZpbHRlcnNUeXBlPEZpbHRlcnM+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29weTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHZhbHVlIHRvIGEgVVJMIHF1ZXJ5IHBhcmFtIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93TnVsbD1mYWxzZV0gLSBJbmRpY2F0ZXMgd2hldGhlciBudWxsIHZhbHVlcyBhcmUgYWxsb3dlZC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBVUkwgcGFyYW1ldGVyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZS5cbiAqIEB0aHJvd3Mge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBJZiBhbiB1bmRlZmluZWQgdmFsdWUgaXMgcGFzc2VkIHdpdGhvdXQgYWxsb3dOdWxsIHNldCB0byB0cnVlLlxuICogQHRocm93cyB7Q29tbW9uc0ludGVybmFsRXJyb3J9IElmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QgKGV4Y2x1ZGluZyBEYXRlKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGFMaXN0UGFyYW1zRmlsdGVyVmFsdWVUb1VybFN0cmluZyh2YWx1ZTogdW5rbm93biwgYWxsb3dOdWxsID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiBhbGxvd051bGwpIHJldHVybiAnbnVsbCc7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcignVW5kZWZpbmVkIHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gdXJsIHBhcmFtLicpOyAvLyB0aGlzIHNob3VsZCBub3QgaGFwcGVuLCBzaG91bGQgYmUgZmlsdGVyZWQgb3V0IGVhcmxpZXJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgLm1hcCh2ID0+IGRhdGFMaXN0UGFyYW1zRmlsdGVyVmFsdWVUb1VybFN0cmluZyh2LCBhbGxvd051bGwpKVxuICAgICAgICAgICAgLm1hcCh2ID0+ICh2LmluZGV4T2YoJywnKSA+PSAwIHx8IHYuaW5kZXhPZignXCInKSA+PSAwID8gYFwiJHt2LnJlcGxhY2VBbGwoJ1wiJywgJ1wiXCInKX1cImAgOiB2KSlcbiAgICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGRhdGVUb0lzb1N0cmluZyh2YWx1ZSwgJ2RhdGVUaW1lJywge3V0YzogdHJ1ZX0pO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcignRmlsdGVyIHZhbHVlIGNhbm5vdCBiZSBvYmplY3QnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cbiJdfQ==
|
|
420
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LXBhcmFtcy1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGF0YS1saXN0L2RhdGEtbGlzdC1wYXJhbXMtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBR3JEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFDLEtBQXlCO0lBQ25FLE1BQU0sTUFBTSxHQUFtQixFQUFFLENBQUM7SUFFbEMsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQUssQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ3ZDLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFL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QzthQUM1RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksS0FBSyxZQUFZLElBQUk7WUFBRSxPQUFPLGVBQWUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7YUFDN0UsQ0FBQztZQUNGLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGFyYW1zfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RhYmxlTGF6eUxvYWRFdmVudH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5cbmltcG9ydCB7Q29tbW9uc0ludGVybmFsRXJyb3J9IGZyb20gJy4uL2Vycm9yL2Vycm9yLm1vZGVsJztcbmltcG9ydCB7ZGF0ZVRvSXNvU3RyaW5nfSBmcm9tICcuLi9oZWxwZXJzL2RhdGUnO1xuaW1wb3J0IHtEYXRhTGlzdEZpbHRlciwgRGF0YUxpc3RGaWx0ZXJWYWx1ZVR5cGUsIERhdGFMaXN0RmlsdGVyc1R5cGUsIERhdGFMaXN0UGFyYW1zfSBmcm9tICcuL2RhdGEtbGlzdC5tb2RlbCc7XG5pbXBvcnQge0ZpbHRlck1hdGNoTW9kZX0gZnJvbSAnLi9maWx0ZXItbWF0Y2gubW9kZWwnO1xuaW1wb3J0IHtDb21tb25zRmlsdGVyTWV0YWRhdGF9IGZyb20gJy4vZmlsdGVyLW1ldGFkYXRhLm1vZGVsJztcblxuLyoqXG4gKiBDb252ZXJ0cyBhIFRhYmxlTGF6eUxvYWRFdmVudCB0byBEYXRhTGlzdFBhcmFtcy5cbiAqXG4gKiBAcGFyYW0ge1RhYmxlTGF6eUxvYWRFdmVudH0gZXZlbnQgLSBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgZGF0YSB0byBjb252ZXJ0LlxuICogQHJldHVybiB7RGF0YUxpc3RQYXJhbXN9IC0gVGhlIGNvbnZlcnRlZCBEYXRhTGlzdFBhcmFtcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVGFibGVMb2FkVG9EYXRhTGlzdFBhcmFtcyhldmVudDogVGFibGVMYXp5TG9hZEV2ZW50KTogRGF0YUxpc3RQYXJhbXMge1xuICAgIGNvbnN0IHBhcmFtczogRGF0YUxpc3RQYXJhbXMgPSB7fTtcblxuICAgIGlmIChldmVudC5maXJzdCAhPSBudWxsKSB7XG4gICAgICAgIHBhcmFtcy5vZmZzZXQgPSBldmVudC5maXJzdDtcbiAgICB9XG4gICAgaWYgKGV2ZW50LnJvd3MgIT0gbnVsbCkge1xuICAgICAgICBwYXJhbXMubGltaXQgPSBldmVudC5yb3dzO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXZlbnQuZ2xvYmFsRmlsdGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICBwYXJhbXMuc2VhcmNoID0gZXZlbnQuZ2xvYmFsRmlsdGVyO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShldmVudC5nbG9iYWxGaWx0ZXIpICYmIGV2ZW50Lmdsb2JhbEZpbHRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBhcmFtcy5zZWFyY2ggPSBldmVudC5nbG9iYWxGaWx0ZXIuam9pbignLCcpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50Lm11bHRpU29ydE1ldGEpICYmIGV2ZW50Lm11bHRpU29ydE1ldGEubGVuZ3RoID4gMCkge1xuICAgICAgICBwYXJhbXMuc29ydCA9IGV2ZW50Lm11bHRpU29ydE1ldGEubWFwKG0gPT4gKHtwcm9wZXJ0eTogbS5maWVsZCwgYXNjZW5kaW5nOiBtLm9yZGVyID49IDB9KSk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmZpbHRlcnMpIHtcbiAgICAgICAgcGFyYW1zLmZpbHRlcnMgPSBPYmplY3Qua2V5cyhldmVudC5maWx0ZXJzKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXI6IERhdGFMaXN0RmlsdGVyID0ge307XG4gICAgICAgICAgICBjb25zdCBldmVudEZpbHRlcjogQ29tbW9uc0ZpbHRlck1ldGFkYXRhIHwgQ29tbW9uc0ZpbHRlck1ldGFkYXRhW10gfCB1bmRlZmluZWQgPSBldmVudC5maWx0ZXJzPy5ba2V5IGFzIGtleW9mIG9iamVjdF07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudEZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSBldmVudEZpbHRlclswXS52YWx1ZTtcbiAgICAgICAgICAgICAgICBmaWx0ZXIubWF0Y2hNb2RlID0gZXZlbnRGaWx0ZXJbMF0ubWF0Y2hNb2RlO1xuICAgICAgICAgICAgICAgIGZpbHRlci5jYXNlU2Vuc2l0aXZlID0gZXZlbnRGaWx0ZXJbMF0uY2FzZVNlbnNpdGl2ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRGaWx0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IGV2ZW50RmlsdGVyLnZhbHVlO1xuICAgICAgICAgICAgICAgIGZpbHRlci5tYXRjaE1vZGUgPSBldmVudEZpbHRlci5tYXRjaE1vZGU7XG4gICAgICAgICAgICAgICAgZmlsdGVyLmNhc2VTZW5zaXRpdmUgPSBldmVudEZpbHRlci5jYXNlU2Vuc2l0aXZlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBmaWx0ZXJ9O1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gcGFyYW1ldGVycyB0byBVUkwgcXVlcnkgcGFyYW1ldGVycy5cbiAqIFNvcnRzIGFyZSBmb3JtYXR0ZWQgaW4gTWVkaXVzIGRhdGEgQVBJIHNvcnQgcXVlcnkgbGFuZ3VhZ2U6IGBhc2M6cHJvcDEsZGVzYzpwcm9wMmAsIC4uLlxuICogRmlsdGVyIGtleXMgYXJlIFwiZmxhdHRlbmVkXCIgaW4gdGhlIG5ldyBvYmplY3QsIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGluIE1lZGl1cyBkYXRhIEFQSSBmaWx0ZXIgcXVlcnkgbGFuZ3VhZ2U6IGBjczplcTphc2RgLCBgaW46YXNkLHF3ZWAsIGBleGAsIC4uLlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RQYXJhbXN9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zfG51bGx9IGRlZmF1bHRzIC0gVGhlIGRlZmF1bHQgcGFyYW1ldGVycyB1c2VkIGlmIG5vIG1hdGNoaW5nIHByb3BlcnR5IGluIHBhcmFtcyBpcyBhdmFpbGFibGUuIERlZmF1bHRzIHRvIHsgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfSBpZiBub3QgcHJvdmlkZWQuXG4gKiBAcmV0dXJucyB7UGFyYW1zfSAtIFRoZSBVUkwgcXVlcnkgcGFyYW1ldGVycyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhTGlzdFBhcmFtc1RvVXJsUXVlcnkoXG4gICAgcGFyYW1zOiBEYXRhTGlzdFBhcmFtczxhbnksIGFueT4sXG4gICAgZGVmYXVsdHM6IERhdGFMaXN0UGFyYW1zPGFueSwgYW55PiB8IG51bGwgPSB7XG4gICAgICAgIGxpbWl0OiAyNSxcbiAgICAgICAgb2Zmc2V0OiAwXG4gICAgfVxuKTogUGFyYW1zIHtcbiAgICBjb25zdCB1cmxQYXJhbXM6IFBhcmFtcyA9IHt9O1xuXG4gICAgaWYgKHBhcmFtcy5saW1pdCAmJiBwYXJhbXMubGltaXQgIT09IGRlZmF1bHRzPy5saW1pdCkge1xuICAgICAgICB1cmxQYXJhbXNbJ2xpbWl0J10gPSBwYXJhbXMubGltaXQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMub2Zmc2V0ICYmIHBhcmFtcy5vZmZzZXQgIT09IGRlZmF1bHRzPy5vZmZzZXQpIHtcbiAgICAgICAgdXJsUGFyYW1zWydvZmZzZXQnXSA9IHBhcmFtcy5vZmZzZXQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuc2VhcmNoICYmIHBhcmFtcy5zZWFyY2ggIT09IGRlZmF1bHRzPy5zZWFyY2gpIHtcbiAgICAgICAgdXJsUGFyYW1zWydxJ10gPSBwYXJhbXMuc2VhcmNoO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnNvcnQgJiYgQXJyYXkuaXNBcnJheShwYXJhbXMuc29ydCkgJiYgcGFyYW1zLnNvcnQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBkZWZhdWx0cz8uc29ydCA9PSBudWxsIHx8XG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShkZWZhdWx0cy5zb3J0KSB8fFxuICAgICAgICAgICAgZGVmYXVsdHMuc29ydC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIHBhcmFtcy5zb3J0Lmxlbmd0aCAhPT0gZGVmYXVsdHMuc29ydC5sZW5ndGggfHxcbiAgICAgICAgICAgIGRlZmF1bHRzLnNvcnQuc29tZSgoZHMsIGlkeCkgPT4gZHMucHJvcGVydHkgIT09IHBhcmFtcy5zb3J0IVtpZHhdLnByb3BlcnR5IHx8IChkcy5hc2NlbmRpbmcgPz8gdHJ1ZSkgIT09IChwYXJhbXMuc29ydCFbaWR4XS5hc2NlbmRpbmcgPz8gdHJ1ZSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdXJsUGFyYW1zWydzb3J0J10gPSBkYXRhTGlzdFBhcmFtc1NvcnRUb1VybFF1ZXJ5KHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhcmFtcy5maWx0ZXJzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHBhcmFtcy5maWx0ZXJzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1GaWx0ZXIgPSBwYXJhbXMuZmlsdGVycyFbayBhcyBrZXlvZiBvYmplY3RdO1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IGRlZmF1bHRzPy5maWx0ZXJzPy5bayBhcyBrZXlvZiBvYmplY3RdO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXIgJiZcbiAgICAgICAgICAgICAgICAoKEFycmF5LmlzQXJyYXkoZGVmYXVsdEZpbHRlci52YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShwYXJhbUZpbHRlci52YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlci52YWx1ZS5sZW5ndGggPT09IHBhcmFtRmlsdGVyLnZhbHVlLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVyLnZhbHVlLmV2ZXJ5KCh2LCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKHBhcmFtRmlsdGVyLnZhbHVlIGFzIEFycmF5PERhdGFMaXN0RmlsdGVyVmFsdWVUeXBlPilbaWR4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgdiBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB2YWx1ZS5nZXRUaW1lKCkgPT09IHYuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gdmFsdWUgPT09IHY7XG4gICAgICAgICAgICAgICAgICAgIH0pKSB8fCAvLyBoYW5kbGUgYXJyYXlzXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXIudmFsdWUgPT09IHBhcmFtRmlsdGVyLnZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXIubWF0Y2hNb2RlID09PSBwYXJhbUZpbHRlci5tYXRjaE1vZGUgJiZcbiAgICAgICAgICAgICAgICAoZGVmYXVsdEZpbHRlci5jYXNlU2Vuc2l0aXZlID8/IGZhbHNlKSA9PT0gKHBhcmFtRmlsdGVyLmNhc2VTZW5zaXRpdmUgPz8gZmFsc2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBwYXJhbUZpbHRlci52YWx1ZSA9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcj8udmFsdWUgPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHBhcmFtRmlsdGVyLm1hdGNoTW9kZSAhPT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyAmJlxuICAgICAgICAgICAgICAgIHBhcmFtRmlsdGVyLm1hdGNoTW9kZSAhPT0gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1cmxQYXJhbXNba10gPSBkYXRhTGlzdFBhcmFtc0ZpbHRlcnNUb1VybFF1ZXJ5KHBhcmFtcywgaywgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdHM/LmZpbHRlcnMpIHtcbiAgICAgICAgLy8gYWRkIG90aGVyIGRlZmF1bHRzXG4gICAgICAgIGNvbnN0IHBhcmFtRmlsdGVyS2V5cyA9IHBhcmFtcy5maWx0ZXJzID8gT2JqZWN0LmtleXMocGFyYW1zLmZpbHRlcnMpIDogW107XG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRzLmZpbHRlcnMpXG4gICAgICAgICAgICAuZmlsdGVyKGsgPT4gcGFyYW1GaWx0ZXJLZXlzLmluZGV4T2YoaykgPCAwKVxuICAgICAgICAgICAgLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgdXJsUGFyYW1zW2tdID0gZGF0YUxpc3RQYXJhbXNGaWx0ZXJzVG9VcmxRdWVyeShkZWZhdWx0cywgayk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsUGFyYW1zO1xufVxuXG4vKipcbiAqIE1lcmdlcyB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycyB3aXRoIGRlZmF1bHQgdmFsdWVzIGFuZCByZXR1cm5zIHRoZSBtZXJnZWQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RQYXJhbXN9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIG1lcmdlIHdpdGggZGVmYXVsdHMuXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zfSBkZWZhdWx0cyAtIFRoZSBkZWZhdWx0IHZhbHVlcyB0byBtZXJnZSB3aXRoIHBhcmFtcyAob3B0aW9uYWwsIGRlZmF1bHQgaXMgeyBsaW1pdDogMjUsIG9mZnNldDogMCB9KS5cbiAqIEByZXR1cm5zIHtEYXRhTGlzdFBhcmFtc30gLSBUaGUgbWVyZ2VkIHBhcmFtZXRlcnMgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEYXRhTGlzdFBhcmFtc1dpdGhEZWZhdWx0czxTb3J0cyA9IGFueSwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGFueT4oXG4gICAgcGFyYW1zOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4sXG4gICAgZGVmYXVsdHM6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPiA9IHtcbiAgICAgICAgbGltaXQ6IDI1LFxuICAgICAgICBvZmZzZXQ6IDBcbiAgICB9XG4pOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4ge1xuICAgIGNvbnN0IG1lcmdlZDogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+ID0ge1xuICAgICAgICBsaW1pdDogcGFyYW1zLmxpbWl0ID8/IGRlZmF1bHRzLmxpbWl0LFxuICAgICAgICBvZmZzZXQ6IHBhcmFtcy5vZmZzZXQgPz8gZGVmYXVsdHMub2Zmc2V0LFxuICAgICAgICBzZWFyY2g6IHBhcmFtcy5zZWFyY2ggPz8gZGVmYXVsdHMuc2VhcmNoLFxuICAgICAgICBzb3J0OiAocGFyYW1zLnNvcnQgPz8gZGVmYXVsdHMuc29ydCk/Lm1hcChzID0+ICh7Li4uc30pKVxuICAgIH07XG5cbiAgICBpZiAocGFyYW1zLmZpbHRlcnMpIHtcbiAgICAgICAgbWVyZ2VkLmZpbHRlcnMgPSB7fSBhcyBEYXRhTGlzdEZpbHRlcnNUeXBlPEZpbHRlcnM+O1xuICAgICAgICBPYmplY3QuZW50cmllcyhwYXJhbXMuZmlsdGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiAobWVyZ2VkLmZpbHRlcnMhW2tleSBhcyBGaWx0ZXJzXSA9IHsuLi4odmFsdWUgYXMgRGF0YUxpc3RGaWx0ZXIpfSkpO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdHMuZmlsdGVycykge1xuICAgICAgICBpZiAoIW1lcmdlZC5maWx0ZXJzKSBtZXJnZWQuZmlsdGVycyA9IHt9IGFzIERhdGFMaXN0RmlsdGVyc1R5cGU8RmlsdGVycz47XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGRlZmF1bHRzLmZpbHRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1lcmdlZC5maWx0ZXJzIVtrZXkgYXMgRmlsdGVyc10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1lcmdlZC5maWx0ZXJzIVtrZXkgYXMgRmlsdGVyc10gPSB7Li4uKHZhbHVlIGFzIERhdGFMaXN0RmlsdGVyKX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHBhcmFtZXRlcnMgdG8gYSBVUkwgcXVlcnkgc3RyaW5nIGZvciBzb3J0aW5nLlxuICogU29ydHMgYXJlIGZvcm1hdHRlZCBpbiBNZWRpdXMgZGF0YSBBUEkgc29ydCBxdWVyeSBsYW5ndWFnZTogYGFzYzpwcm9wMSxkZXNjOnByb3AyYCwgLi4uXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtc30gcGFyYW1zIC0gQW4gb3B0aW9uYWwgb2JqZWN0IGNvbnRhaW5pbmcgc29ydCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVUkwgcXVlcnkgb3IgdW5kZWZpbmVkIGlmIG5vIHNvcnQgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhTGlzdFBhcmFtc1NvcnRUb1VybFF1ZXJ5KHBhcmFtcz86IERhdGFMaXN0UGFyYW1zPGFueSwgYW55Pik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHBhcmFtcyAmJiBBcnJheS5pc0FycmF5KHBhcmFtcy5zb3J0KVxuICAgICAgICA/IHBhcmFtcy5zb3J0Lm1hcChzID0+IGAke3MuYXNjZW5kaW5nID09PSB0cnVlIHx8IHMuYXNjZW5kaW5nID09PSB1bmRlZmluZWQgPyAnYXNjJyA6ICdkZXNjJ306JHtTdHJpbmcocy5wcm9wZXJ0eSl9YCkuam9pbignLCcpXG4gICAgICAgIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3BlY2lmaWMgZmlsdGVyIHBhcmFtZXRlciAoYnkga2V5KSBmcm9tIERhdGFMaXN0UGFyYW1zIG9iamVjdCB0byBhIFVSTCBxdWVyeSBzdHJpbmcuXG4gKiBGaWx0ZXIga2V5cyBhcmUgXCJmbGF0dGVuZWRcIiBpbiB0aGUgbmV3IG9iamVjdCwgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgaW4gTWVkaXVzIGRhdGEgQVBJIGZpbHRlciBxdWVyeSBsYW5ndWFnZTogYGNzOmVxOmFzZGAsIGBpbjphc2QscXdlYCwgYGV4YCwgLi4uXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtczxhbnksIEZpbHRlcnM+IHwgdW5kZWZpbmVkfSBwYXJhbXMgLSBUaGUgRGF0YUxpc3RQYXJhbXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbHRlcnMuXG4gKiBAcGFyYW0ge0ZpbHRlcnN9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGZpbHRlciB0byBjb252ZXJ0LlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dOdWxsPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIGFsbG93IG51bGwgdmFsdWVzIGluIHRoZSBxdWVyeSBzdHJpbmcuXG4gKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIFVSTCBxdWVyeSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzcGVjaWZpZWQgZmlsdGVyLCBvciB1bmRlZmluZWQgaWYgdGhlIGZpbHRlciBpcyBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhTGlzdFBhcmFtc0ZpbHRlcnNUb1VybFF1ZXJ5PEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBzdHJpbmc+KFxuICAgIHBhcmFtczogRGF0YUxpc3RQYXJhbXM8YW55LCBGaWx0ZXJzPiB8IHVuZGVmaW5lZCxcbiAgICBrZXk6IEZpbHRlcnMsXG4gICAgYWxsb3dOdWxsID0gZmFsc2Vcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGFyYW1GaWx0ZXIgPSBwYXJhbXM/LmZpbHRlcnM/LltrZXldO1xuICAgIHJldHVybiBkYXRhTGlzdFBhcmFtc0ZpbHRlclRvVXJsUXVlcnkocGFyYW1GaWx0ZXIsIGFsbG93TnVsbCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBmaWx0ZXIgdG8gYSBVUkwgcXVlcnkgc3RyaW5nLlxuICogRmlsdGVyIGtleXMgYXJlIFwiZmxhdHRlbmVkXCIgaW4gdGhlIG5ldyBvYmplY3QsIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGluIE1lZGl1cyBkYXRhIEFQSSBmaWx0ZXIgcXVlcnkgbGFuZ3VhZ2U6IGBjczplcTphc2RgLCBgaW46YXNkLHF3ZWAsIGBleGAsIC4uLlxuICpcbiAqIEBwYXJhbSB7RGF0YUxpc3RGaWx0ZXJ9IHBhcmFtRmlsdGVyIC0gVGhlIGZpbHRlciBvYmplY3QgdG8gYmUgY29udmVydGVkLlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dOdWxsPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIGFsbG93IG51bGwgdmFsdWVzIGluIHRoZSBmaWx0ZXIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gLSBUaGUgZmlsdGVyIGNvbnZlcnRlZCB0byBhIFVSTCBxdWVyeSBzdHJpbmcsIG9yIHVuZGVmaW5lZCBpZiBubyBmaWx0ZXIgaXMgcHJvdmlkZWQgb3IgdGhlIGZpbHRlciBoYXMgZW1wdHkgb3IgaW52YWxpZCB2YWx1ZXMuXG4gKiBAdGhyb3dzIHtDb21tb25zSW50ZXJuYWxFcnJvcn0gLSBJZiB0aGUgZmlsdGVyIGhhcyBpbnZhbGlkIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGFMaXN0UGFyYW1zRmlsdGVyVG9VcmxRdWVyeShwYXJhbUZpbHRlcj86IERhdGFMaXN0RmlsdGVyLCBhbGxvd051bGwgPSBmYWxzZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmlsdGVyVmFsdWVBc0FycmF5ID0gQXJyYXkuaXNBcnJheShwYXJhbUZpbHRlcj8udmFsdWUpID8gcGFyYW1GaWx0ZXIhLnZhbHVlLmZpbHRlcih2ID0+IHYgIT09IHVuZGVmaW5lZCAmJiAoYWxsb3dOdWxsIHx8IHYgIT09IG51bGwpKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtYXRjaE1vZGUgPSBwYXJhbUZpbHRlcj8ubWF0Y2hNb2RlID8/IEZpbHRlck1hdGNoTW9kZS5FcXVhbHM7XG4gICAgaWYgKFxuICAgICAgICBwYXJhbUZpbHRlciA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICghYWxsb3dOdWxsICYmIG1hdGNoTW9kZSAhPT0gJ2V4aXN0cycgJiYgbWF0Y2hNb2RlICE9PSAnZG9lc05vdEV4aXN0JyAmJiBwYXJhbUZpbHRlci52YWx1ZSA9PSBudWxsKSB8fFxuICAgICAgICAodHlwZW9mIHBhcmFtRmlsdGVyLnZhbHVlID09PSAnc3RyaW5nJyAmJiBwYXJhbUZpbHRlci52YWx1ZS5sZW5ndGggPT09IDApIHx8XG4gICAgICAgIChBcnJheS5pc0FycmF5KGZpbHRlclZhbHVlQXNBcnJheSkgJiYgZmlsdGVyVmFsdWVBc0FycmF5Lmxlbmd0aCA9PT0gMClcbiAgICApIHtcbiAgICAgICAgLy8gbm8gbmVlZCB0byBpbmNsdWRlIGZpbHRlcnMgZm9yIGVtcHR5IHZhbHVlc1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuICYmICEoQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZUFzQXJyYXkpICYmIGZpbHRlclZhbHVlQXNBcnJheS5sZW5ndGggPT09IDIpKSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgRmlsdGVyIG1hdGNoIG1vZGUgYmV0d2VlbiByZXF1aXJlcyBleGFjdGx5IDIgdmFsdWVzOiAke3BhcmFtRmlsdGVyLnZhbHVlfWApO1xuICAgIH1cblxuICAgIGlmICgobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuSW4gfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuTm90SW4pICYmICghQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZUFzQXJyYXkpIHx8IGZpbHRlclZhbHVlQXNBcnJheS5sZW5ndGggPT09IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgRmlsdGVyIG1hdGNoIG1vZGUgJHttYXRjaE1vZGV9IHJlcXVpcmVzIG5vbi1lbXB0eSBhcnJheTogJHtwYXJhbUZpbHRlci52YWx1ZX1gKTtcbiAgICB9XG5cbiAgICBpZiAoKFtGaWx0ZXJNYXRjaE1vZGUuSW4sIEZpbHRlck1hdGNoTW9kZS5Ob3RJbiwgRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW5dIGFzIHN0cmluZ1tdKS5pbmRleE9mKG1hdGNoTW9kZSkgPT09IC0xICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWVBc0FycmF5KSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciBtYXRjaCBtb2RlICR7bWF0Y2hNb2RlfSBtdXN0IG5vdCBiZSBhcnJheTogJHtwYXJhbUZpbHRlci52YWx1ZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBub1ZhbCA9IHBhcmFtRmlsdGVyLm1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyB8fCBwYXJhbUZpbHRlci5tYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3Q7XG4gICAgY29uc3QgdXJsVmFsdWVQYXJ0ID0gbm9WYWwgPyAnJyA6IGA6JHtkYXRhTGlzdFBhcmFtc0ZpbHRlclZhbHVlVG9VcmxTdHJpbmcoZmlsdGVyVmFsdWVBc0FycmF5ID8/IHBhcmFtRmlsdGVyLnZhbHVlLCBhbGxvd051bGwpfWA7XG5cbiAgICByZXR1cm4gYCR7cGFyYW1GaWx0ZXIuY2FzZVNlbnNpdGl2ZSA/ICdjczonIDogcGFyYW1GaWx0ZXIuY2FzZVNlbnNpdGl2ZSA9PT0gZmFsc2UgPyAnY2k6JyA6ICcnfSR7RmlsdGVyTWF0Y2hNb2RlLmdldEFiYnJldmlhdGlvbihtYXRjaE1vZGUpID8/IG1hdGNoTW9kZX0ke3VybFZhbHVlUGFydH1gO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIFVSTCBxdWVyeSBwYXJhbWV0ZXJzIHRvIGEgRGF0YUxpc3RQYXJhbXMgb2JqZWN0LlxuICogU29ydHMgYXJlIGZvcm1hdHRlZCBmcm9tIE1lZGl1cyBkYXRhIEFQSSBzb3J0IHF1ZXJ5IGxhbmd1YWdlOiBgYXNjOnByb3AxLGRlc2M6cHJvcDJgLCAuLi5cbiAqIEZpbHRlciBrZXlzIGFyZSBhbGwga2V5cyBpbiBQYXJhbXMgb2JqZWN0IHRoYXQgYXJlIG5vdCBtYXRjaGVkIGVsc2V3aGVyZSwgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgZnJvbSBNZWRpdXMgZGF0YSBBUEkgZmlsdGVyIHF1ZXJ5IGxhbmd1YWdlOiBgY3M6ZXE6YXNkYCwgYGluOmFzZCxxd2VgLCBgZXhgLCAuLi5cbiAqXG4gKiBAcGFyYW0ge1BhcmFtc30gdXJsUGFyYW1zIC0gVGhlIFVSTCBxdWVyeSBwYXJhbWV0ZXJzLlxuICogQHJldHVybiB7RGF0YUxpc3RQYXJhbXN9IC0gVGhlIGNvbnZlcnRlZCBEYXRhTGlzdFBhcmFtcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVXJsUXVlcnlUb0RhdGFMaXN0UGFyYW1zKHVybFBhcmFtczogUGFyYW1zKTogRGF0YUxpc3RQYXJhbXMge1xuICAgIGNvbnN0IHBhcmFtczogRGF0YUxpc3RQYXJhbXMgPSB7fTtcblxuICAgIE9iamVjdC5lbnRyaWVzKHVybFBhcmFtcykuZm9yRWFjaCgoW3VybFBhcmFtS2V5LCB1cmxQYXJhbVZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAodXJsUGFyYW1LZXkgPT09ICdsaW1pdCcpIHtcbiAgICAgICAgICAgIHBhcmFtcy5saW1pdCA9ICt1cmxQYXJhbVZhbHVlO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHBhcmFtcy5saW1pdCkgfHwgcGFyYW1zLmxpbWl0IDwgMCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbXMubGltaXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodXJsUGFyYW1LZXkgPT09ICdvZmZzZXQnKSB7XG4gICAgICAgICAgICBwYXJhbXMub2Zmc2V0ID0gK3VybFBhcmFtVmFsdWU7XG4gICAgICAgICAgICBpZiAoaXNOYU4ocGFyYW1zLm9mZnNldCkgfHwgcGFyYW1zLm9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW1zLm9mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh1cmxQYXJhbUtleSA9PT0gJ3EnKSB7XG4gICAgICAgICAgICBwYXJhbXMuc2VhcmNoID0gdXJsUGFyYW1WYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh1cmxQYXJhbUtleSA9PT0gJ3NvcnQnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybFBhcmFtVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnNvcnQgPSB1cmxQYXJhbVZhbHVlLnNwbGl0KCcsJykubWFwKHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbZGlyZWN0aW9uLCBwcm9wZXJ0eV0gPSBzLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7cHJvcGVydHk6IChwcm9wZXJ0eSA/PyBkaXJlY3Rpb24pIGFzIGtleW9mIG9iamVjdCwgYXNjZW5kaW5nOiBkaXJlY3Rpb24gIT09ICdkZXNjJ307XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgU3RyaW5nIGlzIGV4cGVjdGVkIGFzIHZhbHVlIGZvciAnJHt1cmxQYXJhbUtleX0nIHdoZW4gY29udmVydGluZyBmcm9tIHVybFBhcmFtc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB1cmxQYXJhbVZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHVybFBhcmFtVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gZW1wdHkgc3RyaW5nIHNob3VsZCBiZSBpZ25vcmVkXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJQYXJ0cyA9IHVybFBhcmFtVmFsdWUuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIGxldCBwYXJ0SWR4ID0gMDtcblxuICAgICAgICAgICAgLy8gY2FzZSBzZW5zaXRpdmVcbiAgICAgICAgICAgIGxldCBjYXNlU2Vuc2l0aXZlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGZpbHRlclBhcnRzW3BhcnRJZHhdID09PSAnY3MnIHx8IGZpbHRlclBhcnRzW3BhcnRJZHhdID09PSAnY2knKSB7XG4gICAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZSA9IGZpbHRlclBhcnRzW3BhcnRJZHgrK10gPT09ICdjcyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1hdGNoIG1vZGVcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoTW9kZSA9IGZpbHRlclBhcnRzW3BhcnRJZHhdID8gRmlsdGVyTWF0Y2hNb2RlLmZyb21BYmJyZXZpYXRpb24oZmlsdGVyUGFydHNbcGFydElkeF0pID8/IGZpbHRlclBhcnRzW3BhcnRJZHhdIDogRmlsdGVyTWF0Y2hNb2RlLkVxdWFscztcbiAgICAgICAgICAgIHBhcnRJZHgrKztcblxuICAgICAgICAgICAgY29uc3Qgbm9WYWwgPSBtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5FeGlzdHMgfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRG9lc05vdEV4aXN0O1xuXG4gICAgICAgICAgICAvLyB2YWx1ZVxuICAgICAgICAgICAgbGV0IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IG51bGwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoIW5vVmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlclBhcnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwYXJ0SWR4ID09PSBmaWx0ZXJQYXJ0cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZmlsdGVyUGFydHNbcGFydElkeF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0SWR4IDwgZmlsdGVyUGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFycmF5IHRoYXQgc2hvdWxkIG5vdCBiZSBhcnJheSwgc28gam9pbiBiYWNrIHRvZ2V0aGVyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZmlsdGVyUGFydHMuc2xpY2UocGFydElkeCwgZmlsdGVyUGFydHMubGVuZ3RoKS5qb2luKCc6Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgbWF0Y2hNb2RlICE9PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzICYmIG1hdGNoTW9kZSAhPT0gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB2YWx1ZSB1bmRlZmluZWQgYW5kIG1hdGNoIG1vZGUgZXhwZWN0cyB2YWx1ZSwgdGhlbiBza2lwXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICdudWxsJykge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKChtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5JbiB8fCBtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Ob3RJbiB8fCBtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhcnJheVZhbDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2UgbWF0Y2ggbW9kZXMgZXhwZWN0IGFycmF5XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKCdcIicpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2Vuczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50VG9rZW4gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHBsaWNpdFF1b3RlcyA9IGZhbHNlOyAvL3Rva2VuIGlzIHF1b3RlZCwgZS5nLiBpbjoxLDIsXCIyMlwiXCJcIixcIiwxMjNcIlwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBxdW90ZXNPcGVuZWQgPSBmYWxzZTsgLy90b2tlbiBoYXMgc3RhcnRlZCBwcm9jZXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcXVvdGVzRXhwbGljaXRseUNsb3NlZCA9IGZhbHNlOyAvL3Rva2VuIHByb2Nlc3NpbmcgaGFzIGZpbmlzaGVkLCBhZnRlciBzaW5nbGUgXCIgaW4gcXVvdGVkIG1vZGUsIG9yIGJlZm9yZSAsIGluIG5vdCBxdW90ZWRcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGMgPSB2YWx1ZVtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0IHRoZSB0b2tlbml6ZXIgd2hlbiBzZWVpbmcgdGhlIHRva2VuIHNlcGFyYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgaWYgZWl0aGVyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBxdW90ZXMgaGF2ZSBub3QgYmVlbiBvcGVuZWQgeWV0ICh3aGVuIHRoZXJlIGFyZSBubyBjaGFyYWN0ZXJzIGJldHdlZW4gc2VwYXJhdG9ycyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHRva2VuIGhhcyBiZWVuIGV4cGxpY2l0bHkgY2xvc2VkICh3aGVuIHdlIGFjdHVhbGx5IGhhdmUgZXhwbGljaXQgb3BlbmluZyBpLmUuLCBxdW90ZXMgYXMgdGhlIGZpcnN0IGNoYXJhY3RlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciB3ZSBoYXZlIGltcGxpY2l0IHF1b3RlcyAoaS5lLiwgcXVvdGVzIGFyZSBub3QgdGhlIGZpcnN0IGNoYXJhY3RlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJywnICYmICghcXVvdGVzT3BlbmVkIHx8IHF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQgfHwgIWV4cGxpY2l0UXVvdGVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaChjdXJyZW50VG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVzT3BlbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGljaXRRdW90ZXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1wiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2NhcGVkIGRvdWJsZS1xdW90ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGxpY2l0UXVvdGVzICYmIGkgKyAxIDwgdmFsdWUubGVuZ3RoICYmIHZhbHVlW2kgKyAxXSA9PT0gJ1wiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRva2VuICs9IGM7IC8vIEFwcGVuZCBvbmUgZG91YmxlLXF1b3RlIHRvIHRoZSBjdXJyZW50IHRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7IC8vIFNraXAgdGhlIG5leHQgZG91YmxlLXF1b3RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZW5jb3VudGVyIHF1b3RlcyBhZ2FpbiBhZnRlciB0aGV5IHdlcmUgdGhlIGZpcnN0IGNoYXJhY3RlciA9PiB3ZSBjbG9zZSB0aGUgdG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXhwbGljaXRRdW90ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltcGxpY2l0IHF1b3Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChxdW90ZXNPcGVuZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiArPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHF1b3RlcyBhcmUgdGhlIGZpcnN0IGNoYXJhY3RlciA9PiBleHBsaWNpdGx5IG9wZW4gdGhlIHRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRva2VuID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZXNPcGVuZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGljaXRRdW90ZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1b3Rlc0V4cGxpY2l0bHlDbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rlc09wZW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiArPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1b3Rlc09wZW5lZCAmJiAhcXVvdGVzRXhwbGljaXRseUNsb3NlZCAmJiBleHBsaWNpdFF1b3Rlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBsYXN0IHRva2VuIGFmdGVyIHRoZSBsb29wIGVuZHNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKGN1cnJlbnRUb2tlbi50b1N0cmluZygpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlWYWwgPSB0b2tlbnM7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVZhbCA9IHZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbiAmJiBhcnJheVZhbC5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXJyYXlWYWw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlIS5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZpbHRlciB3aXRoIGVtcHR5IHZhbHVlIGlzIHRvIGJlIGlnbm9yZWRcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuZmlsdGVycykge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJzW3VybFBhcmFtS2V5IGFzIGtleW9mIG9iamVjdF0gPSB7dmFsdWU6IHZhbHVlLCBtYXRjaE1vZGU6IG1hdGNoTW9kZSwgY2FzZVNlbnNpdGl2ZTogY2FzZVNlbnNpdGl2ZX07XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBwYXJhbXM7XG59XG5cbi8qKlxuICogTWFrZXMgYSBjb3B5IG9mIHRoZSBnaXZlbiBEYXRhTGlzdFBhcmFtcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz59IHBhcmFtcyAtIFRoZSBEYXRhTGlzdFBhcmFtcyBvYmplY3QgdG8gYmUgY29waWVkLlxuICogQHJldHVybnMge0RhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPn0gLSBSZXR1cm5zIGEgbmV3IGNvcHkgb2YgdGhlIERhdGFMaXN0UGFyYW1zIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlEYXRhTGlzdFBhcmFtczxTb3J0cyA9IHN0cmluZywgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IHN0cmluZz4ocGFyYW1zOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4pOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz4ge1xuICAgIGNvbnN0IGNvcHk6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPiA9IHtcbiAgICAgICAgb2Zmc2V0OiBwYXJhbXMub2Zmc2V0LFxuICAgICAgICBsaW1pdDogcGFyYW1zLmxpbWl0LFxuICAgICAgICBzZWFyY2g6IHBhcmFtcy5zZWFyY2hcbiAgICB9O1xuXG4gICAgaWYgKHBhcmFtcy5zb3J0KSB7XG4gICAgICAgIGNvcHkuc29ydCA9IHBhcmFtcy5zb3J0Py5tYXAocyA9PiAoey4uLnN9KSk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuZmlsdGVycykge1xuICAgICAgICBjb3B5LmZpbHRlcnMgPSBPYmplY3QuZW50cmllcyhwYXJhbXMuZmlsdGVycykucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSB2YWx1ZSBhcyBEYXRhTGlzdEZpbHRlcjtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICAgIFtrZXldOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmZpbHRlclZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogQXJyYXkuaXNBcnJheShmaWx0ZXJWYWx1ZS52YWx1ZSkgPyBbLi4uZmlsdGVyVmFsdWUudmFsdWVdIDogZmlsdGVyVmFsdWUudmFsdWVcbiAgICAgICAgICAgICAgICB9IGFzIERhdGFMaXN0RmlsdGVyXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCB7fSBhcyBEYXRhTGlzdEZpbHRlcnNUeXBlPEZpbHRlcnM+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29weTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHZhbHVlIHRvIGEgVVJMIHF1ZXJ5IHBhcmFtIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93TnVsbD1mYWxzZV0gLSBJbmRpY2F0ZXMgd2hldGhlciBudWxsIHZhbHVlcyBhcmUgYWxsb3dlZC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBVUkwgcGFyYW1ldGVyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZS5cbiAqIEB0aHJvd3Mge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBJZiBhbiB1bmRlZmluZWQgdmFsdWUgaXMgcGFzc2VkIHdpdGhvdXQgYWxsb3dOdWxsIHNldCB0byB0cnVlLlxuICogQHRocm93cyB7Q29tbW9uc0ludGVybmFsRXJyb3J9IElmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QgKGV4Y2x1ZGluZyBEYXRlKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGFMaXN0UGFyYW1zRmlsdGVyVmFsdWVUb1VybFN0cmluZyh2YWx1ZTogdW5rbm93biwgYWxsb3dOdWxsID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiBhbGxvd051bGwpIHJldHVybiAnbnVsbCc7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcignVW5kZWZpbmVkIHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gdXJsIHBhcmFtLicpOyAvLyB0aGlzIHNob3VsZCBub3QgaGFwcGVuLCBzaG91bGQgYmUgZmlsdGVyZWQgb3V0IGVhcmxpZXJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgLm1hcCh2ID0+IGRhdGFMaXN0UGFyYW1zRmlsdGVyVmFsdWVUb1VybFN0cmluZyh2LCBhbGxvd051bGwpKVxuICAgICAgICAgICAgLm1hcCh2ID0+ICh2LmluZGV4T2YoJywnKSA+PSAwIHx8IHYuaW5kZXhPZignXCInKSA+PSAwID8gYFwiJHt2LnJlcGxhY2VBbGwoJ1wiJywgJ1wiXCInKX1cImAgOiB2KSlcbiAgICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGRhdGVUb0lzb1N0cmluZyh2YWx1ZSwgJ2RhdGVUaW1lJywge3V0YzogdHJ1ZX0pO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcignRmlsdGVyIHZhbHVlIGNhbm5vdCBiZSBvYmplY3QnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLW1ldGFkYXRhLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZGF0YS1saXN0L2ZpbHRlci1tZXRhZGF0YS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtGaWx0ZXJNZXRhZGF0YX0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQge0ZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZX0gZnJvbSAnLi4vZGF0YS1saXN0L2ZpbHRlci1tYXRjaC5tb2RlbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uc0ZpbHRlck1ldGFkYXRhIGV4dGVuZHMgT21pdDxGaWx0ZXJNZXRhZGF0YSwgJ21hdGNoTW9kZSc+IHtcbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgdXNlZCBmb3IgZGlzcGxheS5cbiAgICAgKi9cbiAgICBkaXNwbGF5VmFsdWU/OiBhbnk7XG4gICAgLyoqXG4gICAgICogVGhlIG1hdGNoIG1vZGUgZm9yIGRpc3BsYXkuXG4gICAgICovXG4gICAgZGlzcGxheU1hdGNoTW9kZT86IEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZTtcbiAgICAvKipcbiAgICAgKiBPdmVycmlkZGVuIFByaW1lTmcgRmlsdGVyTWV0YWRhdGEgdG8gaGF2ZSBtb3JlIHNwZWNpZmljIHR5cGUuXG4gICAgICovXG4gICAgbWF0Y2hNb2RlPzogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlO1xuICAgIC8qKlxuICAgICAqIENhc2Ugc2Vuc2l0aXZlIGZpbHRlciBmbGFnLlxuICAgICAqL1xuICAgIGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xufVxuIl19
|
|
@@ -13,6 +13,15 @@ export function getEnumConstantNamesFromObject(enumObj) {
|
|
|
13
13
|
// in number enum, the numbers are also represented in objects and should be filtered out
|
|
14
14
|
return Object.keys(enumObj).filter(v => isNaN(+v));
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Returns array of values for constants in enum.
|
|
18
|
+
* @param enumType Enum object.
|
|
19
|
+
*/
|
|
20
|
+
export function getEnumConstantValues(enumType) {
|
|
21
|
+
return Object.keys(enumType)
|
|
22
|
+
.filter(v => isNaN(+v))
|
|
23
|
+
.map(v => enumType[v]);
|
|
24
|
+
}
|
|
16
25
|
/**
|
|
17
26
|
* Returns array of string values for constants in enum.
|
|
18
27
|
* @param enumType Enum object.
|
|
@@ -78,4 +87,4 @@ export function getEnumConstantNameFromObject(enumObj, value) {
|
|
|
78
87
|
return typeof enumObjAny[value] !== 'undefined' ? enumObjAny[value] : null;
|
|
79
88
|
}
|
|
80
89
|
}
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvZW51bS9lbnVtLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFFBQWtCO0lBQ25ELE9BQU8sOEJBQThCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxPQUFlO0lBQzFELHlGQUF5RjtJQUN6RixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLFFBQWtCO0lBQ3BELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxRQUFrQjtJQUM1RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQWlCLENBQVcsQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsUUFBa0I7SUFDNUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFDLFFBQWtCLEVBQUUsV0FBVyxHQUFHLEtBQUssRUFBRSxTQUFrQjtJQUNyRyxPQUFPLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQVcsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUEsQ0FBQyxDQUFDO0FBQ2pLLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQWtDLFFBQWtCLEVBQUUsTUFBMkIsRUFBRSxXQUFXLEdBQUcsS0FBSyxFQUFFLFNBQWtCO0lBQ2hLLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNsQixNQUFNLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsT0FBTyxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQWMsQ0FBQztJQUNoSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFrQyxRQUFrQixFQUFFLEtBQW1CO0lBQ3hHLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsT0FBTyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ25GLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxPQUFPLFFBQVEsQ0FBQyxLQUFxQixDQUFDLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBRSxRQUFRLENBQUMsS0FBcUIsQ0FBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdkgsQ0FBQztBQUNMLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFrQyxPQUFlLEVBQUUsS0FBbUI7SUFDL0csTUFBTSxVQUFVLEdBQUcsT0FBYyxDQUFDO0lBQ2xDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsT0FBTyw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzlGLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFFLFVBQVUsQ0FBQyxLQUFLLENBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNGLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFbnVtQ29uc3RhbnRUeXBlLCBFbnVtVHlwZX0gZnJvbSAnLi4vaGVscGVycy90eXBlLWhlbHBlcnMnO1xuaW1wb3J0IHtFbnVtVmFsdWV9IGZyb20gJy4vZW51bS5tb2RlbCc7XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiBuYW1lcyBmb3IgY29uc3RhbnRzIGluIGVudW0uXG4gKiBAcGFyYW0gZW51bVR5cGUgRW51bSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnVtQ29uc3RhbnROYW1lcyhlbnVtVHlwZTogRW51bVR5cGUpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50TmFtZXNGcm9tT2JqZWN0KGVudW1UeXBlKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFycmF5IG9mIG5hbWVzIGZvciBjb25zdGFudHMgaW4gZW51bS5cbiAqIEBwYXJhbSBlbnVtT2JqIEVudW0gb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bUNvbnN0YW50TmFtZXNGcm9tT2JqZWN0KGVudW1PYmo6IG9iamVjdCk6IEFycmF5PHN0cmluZz4ge1xuICAgIC8vIGluIG51bWJlciBlbnVtLCB0aGUgbnVtYmVycyBhcmUgYWxzbyByZXByZXNlbnRlZCBpbiBvYmplY3RzIGFuZCBzaG91bGQgYmUgZmlsdGVyZWQgb3V0XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGVudW1PYmopLmZpbHRlcih2ID0+IGlzTmFOKCt2KSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiB2YWx1ZXMgZm9yIGNvbnN0YW50cyBpbiBlbnVtLlxuICogQHBhcmFtIGVudW1UeXBlIEVudW0gb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bUNvbnN0YW50VmFsdWVzKGVudW1UeXBlOiBFbnVtVHlwZSk6IEFycmF5PEVudW1Db25zdGFudFR5cGU+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZW51bVR5cGUpXG4gICAgICAgIC5maWx0ZXIodiA9PiBpc05hTigrdikpXG4gICAgICAgIC5tYXAodiA9PiBlbnVtVHlwZVt2XSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiBzdHJpbmcgdmFsdWVzIGZvciBjb25zdGFudHMgaW4gZW51bS5cbiAqIEBwYXJhbSBlbnVtVHlwZSBFbnVtIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1Db25zdGFudFZhbHVlc0FzU3RyaW5nKGVudW1UeXBlOiBFbnVtVHlwZSk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnVtVHlwZSkubWFwKHYgPT4gZW51bVR5cGVbdiBhcyBrZXlvZiBvYmplY3RdIGFzIHN0cmluZyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiBudW1iZXIgdmFsdWVzIGZvciBjb25zdGFudHMgaW4gZW51bS5cbiAqIEBwYXJhbSBlbnVtVHlwZSBFbnVtIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1Db25zdGFudFZhbHVlc0FzTnVtYmVyKGVudW1UeXBlOiBFbnVtVHlwZSk6IEFycmF5PG51bWJlcj4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnVtVHlwZSlcbiAgICAgICAgLmZpbHRlcih2ID0+ICFpc05hTigrdikpXG4gICAgICAgIC5tYXAodiA9PiArdik7XG59XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiB0eXBlIEVudW1WYWx1ZSBmb3IgYWxsIGNvbnN0YW50cyBpbiBlbnVtLlxuICogQHBhcmFtIGVudW1UeXBlIEVudW0gb2JqZWN0LlxuICogQHBhcmFtIG5hbWVBc1ZhbHVlIElmIHVzZSBuYW1lIG9mIGNvbnN0YW50IGFzIHZhbHVlIChvcHRpb25hbCwgZGVmYXVsdDogZmFsc2UpLlxuICogQHBhcmFtIHRpdGxlUGF0aCBCYXNlIHBhdGggZm9yIHRpdGxlIHRvIHVzZSBhcyB0cmFuc2xhdGlvbiAob3B0aW9uYWwpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUVudW1Db25zdGFudHNBc1ZhbHVlQXJyYXkoZW51bVR5cGU6IEVudW1UeXBlLCBuYW1lQXNWYWx1ZSA9IGZhbHNlLCB0aXRsZVBhdGg/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50TmFtZXMoZW51bVR5cGUpLm1hcChuID0+IDxFbnVtVmFsdWU+e25hbWU6IG4sIHRpdGxlOiBgJHt0aXRsZVBhdGggPyBgJHt0aXRsZVBhdGh9LmAgOiAnJ30ke259YCwgdmFsdWU6IG5hbWVBc1ZhbHVlID8gbiA6IGVudW1UeXBlW25dfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhcnJheSBvZiB0eXBlIEVudW1WYWx1ZSBmb3IgcHJvdmlkZWQgdmFsdWVzIGluIGVudW0uXG4gKiBAcGFyYW0gZW51bVR5cGUgRW51bSBvYmplY3QuXG4gKiBAcGFyYW0gdmFsdWVzIEVudW0gdmFsdWVzIChjb25zdGFudHMpLlxuICogQHBhcmFtIG5hbWVBc1ZhbHVlIElmIHVzZSBuYW1lIG9mIGNvbnN0YW50IGFzIHZhbHVlIChvcHRpb25hbCwgZGVmYXVsdDogZmFsc2UpLlxuICogQHBhcmFtIHRpdGxlUGF0aCBCYXNlIHBhdGggZm9yIHRpdGxlIHRvIHVzZSBhcyB0cmFuc2xhdGlvbiAob3B0aW9uYWwpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUVudW1WYWx1ZXNBc1ZhbHVlQXJyYXk8RW51bUNvbnN0YW50ID0gRW51bUNvbnN0YW50VHlwZT4oZW51bVR5cGU6IEVudW1UeXBlLCB2YWx1ZXM6IEFycmF5PEVudW1Db25zdGFudD4sIG5hbWVBc1ZhbHVlID0gZmFsc2UsIHRpdGxlUGF0aD86IHN0cmluZykge1xuICAgIHJldHVybiB2YWx1ZXMubWFwKHYgPT4ge1xuICAgICAgICBjb25zdCBrID0gZ2V0RW51bUNvbnN0YW50TmFtZShlbnVtVHlwZSwgdik7XG4gICAgICAgIHJldHVybiB7bmFtZTogaywgdGl0bGU6IGAke3RpdGxlUGF0aCA/IGAke3RpdGxlUGF0aH0uYCA6ICcnfSR7a31gLCB2YWx1ZTogbmFtZUFzVmFsdWUgPyBrIDogdn0gYXMgRW51bVZhbHVlO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEdldHMgY29uc3RhbnQgbmFtZSBmb3IgdmFsdWUuXG4gKiBAcGFyYW0gZW51bVR5cGUgRW51bSBvYmplY3QuXG4gKiBAcGFyYW0gdmFsdWUgVmFsdWUgb2YgZW51bSBjb25zdGFudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1Db25zdGFudE5hbWU8RW51bUNvbnN0YW50ID0gRW51bUNvbnN0YW50VHlwZT4oZW51bVR5cGU6IEVudW1UeXBlLCB2YWx1ZTogRW51bUNvbnN0YW50KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGdldEVudW1Db25zdGFudE5hbWVzKGVudW1UeXBlKS5maW5kKGMgPT4gZW51bVR5cGVbY10gPT09IHZhbHVlKSA/PyBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZW51bVR5cGVbdmFsdWUgYXMga2V5b2Ygb2JqZWN0XSAhPT0gJ3VuZGVmaW5lZCcgPyAoZW51bVR5cGVbdmFsdWUgYXMga2V5b2Ygb2JqZWN0XSBhcyBzdHJpbmcpIDogbnVsbDtcbiAgICB9XG59XG5cbi8qKlxuICogR2V0cyBjb25zdGFudCBuYW1lIGZvciB2YWx1ZS5cbiAqIEBwYXJhbSBlbnVtT2JqIEVudW0gb2JqZWN0LlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIG9mIGVudW0gY29uc3RhbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnVtQ29uc3RhbnROYW1lRnJvbU9iamVjdDxFbnVtQ29uc3RhbnQgPSBFbnVtQ29uc3RhbnRUeXBlPihlbnVtT2JqOiBvYmplY3QsIHZhbHVlOiBFbnVtQ29uc3RhbnQpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBlbnVtT2JqQW55ID0gZW51bU9iaiBhcyBhbnk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGdldEVudW1Db25zdGFudE5hbWVzRnJvbU9iamVjdChlbnVtT2JqKS5maW5kKGMgPT4gZW51bU9iakFueVtjXSA9PT0gdmFsdWUpID8/IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBlbnVtT2JqQW55W3ZhbHVlXSAhPT0gJ3VuZGVmaW5lZCcgPyAoZW51bU9iakFueVt2YWx1ZV0gYXMgc3RyaW5nKSA6IG51bGw7XG4gICAgfVxufVxuIl19
|