ontimize-web-ngx 15.6.0-next.0 → 15.6.0-next.10
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/esm2020/lib/components/app-header/o-app-header.component.mjs +3 -3
- package/esm2020/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.mjs +19 -3
- package/esm2020/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.mjs +17 -4
- package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +7 -5
- package/esm2020/lib/components/filter-builder/o-filter-builder.component.mjs +1 -1
- package/esm2020/lib/components/form/navigation/o-form-navigation.component.mjs +42 -24
- package/esm2020/lib/components/form/o-form.component.mjs +4 -3
- package/esm2020/lib/components/form/services/o-form-message.service.mjs +2 -2
- package/esm2020/lib/components/grid/o-grid.component.mjs +19 -17
- package/esm2020/lib/components/grid/skeketon/o-grid-skeleton.component.mjs +12 -15
- package/esm2020/lib/components/index.mjs +2 -1
- package/esm2020/lib/components/input/file-input/o-file-input.component.mjs +3 -2
- package/esm2020/lib/components/input/o-boolean-form-data-component.class.mjs +9 -1
- package/esm2020/lib/components/input/o-form-service-component.class.mjs +5 -4
- package/esm2020/lib/components/list/list-item/o-list-item.component.mjs +8 -3
- package/esm2020/lib/components/list/o-list.component.mjs +41 -16
- package/esm2020/lib/components/list/skeleton/o-list-skeleton.component.mjs +12 -15
- package/esm2020/lib/components/o-form-data-component.class.mjs +2 -2
- package/esm2020/lib/components/o-repeatable-skeleton.component.mjs +33 -0
- package/esm2020/lib/components/o-service-base-component.class.mjs +5 -4
- package/esm2020/lib/components/o-service-component.class.mjs +10 -9
- package/esm2020/lib/components/o-skeleton.component.mjs +15 -6
- package/esm2020/lib/components/table/column/cell-editor/o-base-table-cell-editor.class.mjs +2 -2
- package/esm2020/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.mjs +1 -1
- package/esm2020/lib/components/table/column/cell-renderer/service/o-table-cell-renderer-service.component.mjs +5 -4
- package/esm2020/lib/components/table/column/o-column.class.mjs +2 -1
- package/esm2020/lib/components/table/column/o-table-column.component.mjs +10 -4
- package/esm2020/lib/components/table/extensions/contextmenu/o-table-context-menu.component.mjs +24 -6
- package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +75 -87
- package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.mjs +53 -0
- package/esm2020/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.mjs +12 -4
- package/esm2020/lib/components/table/extensions/header/table-menu/o-table-menu.component.mjs +2 -2
- package/esm2020/lib/components/table/extensions/o-table.dao.mjs +14 -14
- package/esm2020/lib/components/table/extensions/skeleton/o-table-skeleton.component.mjs +5 -19
- package/esm2020/lib/components/table/o-table-base.class.mjs +1 -1
- package/esm2020/lib/components/table/o-table.component.mjs +104 -10
- package/esm2020/lib/components/table/o-table.module.mjs +4 -1
- package/esm2020/lib/components/tree/o-tree.component.mjs +96 -14
- package/esm2020/lib/components/tree/o-tree.datasource.mjs +3 -3
- package/esm2020/lib/components/user-info/o-user-info.component.mjs +5 -4
- package/esm2020/lib/config/app-config.mjs +1 -1
- package/esm2020/lib/config/o-providers.mjs +6 -6
- package/esm2020/lib/i18n/i18n.mjs +6 -3
- package/esm2020/lib/injection-tokens/index.mjs +19 -0
- package/esm2020/lib/interfaces/base-response.interface.mjs +1 -1
- package/esm2020/lib/interfaces/form-layout-manager.interface.mjs +1 -1
- package/esm2020/lib/interfaces/index.mjs +3 -1
- package/esm2020/lib/interfaces/jsonapi-config.interface.mjs +3 -0
- package/esm2020/lib/interfaces/jsonapi-response.interface.mjs +2 -1
- package/esm2020/lib/interfaces/o-table-column.interface.mjs +1 -1
- package/esm2020/lib/interfaces/service-response.interface.mjs +1 -1
- package/esm2020/lib/layouts/app-layout/o-app-layout-base.class.mjs +1 -1
- package/esm2020/lib/layouts/app-layout/o-app-layout.component.mjs +26 -9
- package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +4 -3
- package/esm2020/lib/layouts/form-layout/split-pane/o-form-layout-split-pane.component.mjs +2 -2
- package/esm2020/lib/layouts/form-layout/tabgroup/o-form-layout-tabgroup.component.mjs +2 -1
- package/esm2020/lib/services/base-data-service.class.mjs +2 -1
- package/esm2020/lib/services/base-service.class.mjs +3 -3
- package/esm2020/lib/services/factories.mjs +26 -54
- package/esm2020/lib/services/index.mjs +3 -2
- package/esm2020/lib/services/jsonapi/jsonapi-preferences.service.mjs +16 -14
- package/esm2020/lib/services/jsonapi/jsonapi.service.mjs +54 -23
- package/esm2020/lib/services/ontimize/index.mjs +1 -2
- package/esm2020/lib/services/ontimize/ontimize-ee.service.mjs +1 -5
- package/esm2020/lib/services/ontimize/ontimize-export-3xx.service.mjs +2 -2
- package/esm2020/lib/services/ontimize/ontimize-preferences.service.mjs +4 -6
- package/esm2020/lib/services/request-adapter/base-request-argument.adapter.mjs +12 -0
- package/esm2020/lib/services/request-adapter/base-request-argument.interface.mjs +2 -0
- package/esm2020/lib/services/request-adapter/index.mjs +5 -0
- package/esm2020/lib/services/request-adapter/jsonapi-request-arguments.adapter.mjs +70 -0
- package/esm2020/lib/services/request-adapter/ontimize-request-arguments.adapter.mjs +19 -0
- package/esm2020/lib/services/state/o-filter-builder-component-state.service.mjs +1 -1
- package/esm2020/lib/services/state/o-table-component-state.class.mjs +7 -1
- package/esm2020/lib/services/state/o-table-component-state.service.mjs +8 -2
- package/esm2020/lib/services/translate/o-translate.service.mjs +8 -4
- package/esm2020/lib/types/config.type.mjs +1 -1
- package/esm2020/lib/types/form-layout-detail-component-data.type.mjs +1 -1
- package/esm2020/lib/types/index.mjs +1 -2
- package/esm2020/lib/types/service-configuration.type.mjs +1 -1
- package/esm2020/lib/types/table/index.mjs +2 -1
- package/esm2020/lib/types/table/o-column-value-filter.type.mjs +1 -1
- package/esm2020/lib/types/table/o-table-expandable-row-state.type.mjs +2 -0
- package/esm2020/lib/util/codes.mjs +3 -1
- package/esm2020/lib/util/errors.mjs +3 -9
- package/esm2020/lib/util/factory.util.mjs +67 -0
- package/esm2020/lib/util/index.mjs +3 -1
- package/esm2020/lib/util/injection-token.utils.mjs +4 -0
- package/esm2020/lib/util/preference-mapping-util.mjs +22 -7
- package/esm2020/lib/util/sqltypes.mjs +2 -2
- package/esm2020/lib/util/util.mjs +11 -38
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/ontimize-web-ngx.mjs +6801 -6332
- package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
- package/fesm2020/ontimize-web-ngx.mjs +6660 -6211
- package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
- package/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.d.ts +3 -0
- package/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.d.ts +1 -0
- package/lib/components/app-sidenav/o-app-sidenav.component.d.ts +2 -1
- package/lib/components/filter-builder/o-filter-builder.component.d.ts +1 -1
- package/lib/components/form/navigation/o-form-navigation.component.d.ts +7 -4
- package/lib/components/grid/skeketon/o-grid-skeleton.component.d.ts +4 -7
- package/lib/components/index.d.ts +1 -0
- package/lib/components/input/o-boolean-form-data-component.class.d.ts +1 -0
- package/lib/components/list/o-list.component.d.ts +5 -1
- package/lib/components/list/skeleton/o-list-skeleton.component.d.ts +4 -7
- package/lib/components/o-repeatable-skeleton.component.d.ts +9 -0
- package/lib/components/o-skeleton.component.d.ts +10 -5
- package/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.d.ts +1 -1
- package/lib/components/table/column/o-column.class.d.ts +2 -1
- package/lib/components/table/column/o-table-column.component.d.ts +2 -2
- package/lib/components/table/extensions/contextmenu/o-table-context-menu.component.d.ts +2 -0
- package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.d.ts +9 -6
- package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.d.ts +12 -0
- package/lib/components/table/extensions/header/o-table-header-components.d.ts +2 -2
- package/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.d.ts +1 -1
- package/lib/components/table/extensions/o-table.dao.d.ts +3 -2
- package/lib/components/table/extensions/skeleton/o-table-skeleton.component.d.ts +1 -10
- package/lib/components/table/o-table-base.class.d.ts +3 -0
- package/lib/components/table/o-table.component.d.ts +12 -2
- package/lib/components/tree/o-tree.component.d.ts +10 -1
- package/lib/components/user-info/o-user-info.component.d.ts +2 -1
- package/lib/config/app-config.d.ts +1 -1
- package/lib/config/o-directives.d.ts +1 -1
- package/lib/i18n/i18n.d.ts +3 -0
- package/lib/injection-tokens/index.d.ts +33 -0
- package/lib/interfaces/base-response.interface.d.ts +0 -2
- package/lib/interfaces/form-layout-manager.interface.d.ts +1 -1
- package/lib/interfaces/index.d.ts +2 -0
- package/lib/interfaces/jsonapi-config.interface.d.ts +3 -0
- package/lib/interfaces/jsonapi-response.interface.d.ts +47 -7
- package/lib/interfaces/o-table-column.interface.d.ts +2 -1
- package/lib/interfaces/service-response.interface.d.ts +2 -0
- package/lib/layouts/app-layout/o-app-layout-base.class.d.ts +1 -1
- package/lib/layouts/app-layout/o-app-layout.component.d.ts +7 -3
- package/lib/services/base-data-service.class.d.ts +1 -0
- package/lib/services/base-service.class.d.ts +2 -2
- package/lib/services/factories.d.ts +10 -31
- package/lib/services/index.d.ts +2 -1
- package/lib/services/jsonapi/jsonapi-preferences.service.d.ts +1 -1
- package/lib/services/jsonapi/jsonapi.service.d.ts +7 -5
- package/lib/services/ontimize/index.d.ts +0 -1
- package/lib/services/ontimize/ontimize-ee.service.d.ts +0 -1
- package/lib/services/{query-arguments/base-query-argument.adapter.d.ts → request-adapter/base-request-argument.adapter.d.ts} +2 -1
- package/lib/services/{query-arguments/base-query-argument.interface.d.ts → request-adapter/base-request-argument.interface.d.ts} +1 -1
- package/lib/services/request-adapter/index.d.ts +4 -0
- package/lib/services/request-adapter/jsonapi-request-arguments.adapter.d.ts +13 -0
- package/lib/services/request-adapter/ontimize-request-arguments.adapter.d.ts +8 -0
- package/lib/services/state/o-filter-builder-component-state.service.d.ts +1 -1
- package/lib/services/state/o-table-component-state.class.d.ts +3 -0
- package/lib/services/translate/o-translate.service.d.ts +1 -0
- package/lib/types/config.type.d.ts +2 -2
- package/lib/types/form-layout-detail-component-data.type.d.ts +1 -1
- package/lib/types/index.d.ts +0 -1
- package/lib/types/service-configuration.type.d.ts +12 -2
- package/lib/types/table/index.d.ts +1 -0
- package/lib/types/table/o-column-value-filter.type.d.ts +3 -0
- package/lib/types/table/o-table-expandable-row-state.type.d.ts +5 -0
- package/lib/util/codes.d.ts +3 -0
- package/lib/util/factory.util.d.ts +10 -0
- package/lib/util/index.d.ts +2 -0
- package/lib/util/injection-token.utils.d.ts +2 -0
- package/lib/util/preference-mapping-util.d.ts +22 -3
- package/lib/util/util.d.ts +1 -3
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/esm2020/lib/services/ontimize/o-preference-query-argument.adapter.mjs +0 -17
- package/esm2020/lib/services/query-arguments/base-query-argument.adapter.mjs +0 -9
- package/esm2020/lib/services/query-arguments/base-query-argument.interface.mjs +0 -2
- package/esm2020/lib/services/query-arguments/index.mjs +0 -5
- package/esm2020/lib/services/query-arguments/jsonapi-query-arguments.adapter.mjs +0 -63
- package/esm2020/lib/services/query-arguments/ontimize-query-arguments.adapter.mjs +0 -19
- package/esm2020/lib/types/ontimize-service-config.type.mjs +0 -2
- package/lib/services/ontimize/o-preference-query-argument.adapter.d.ts +0 -7
- package/lib/services/query-arguments/index.d.ts +0 -4
- package/lib/services/query-arguments/jsonapi-query-arguments.adapter.d.ts +0 -12
- package/lib/services/query-arguments/ontimize-query-arguments.adapter.d.ts +0 -8
- package/lib/types/ontimize-service-config.type.d.ts +0 -5
|
@@ -2,9 +2,6 @@ import moment from 'moment';
|
|
|
2
2
|
import { from, isObservable, of } from 'rxjs';
|
|
3
3
|
import { Base64 } from './base64';
|
|
4
4
|
import { Codes } from './codes';
|
|
5
|
-
import { createServiceInstance } from '../services/factories';
|
|
6
|
-
import { AppConfig } from '../config/app-config';
|
|
7
|
-
import { ServiceType } from '../types/service-type.type';
|
|
8
5
|
export class Util {
|
|
9
6
|
static isObject(val) {
|
|
10
7
|
const valType = typeof val;
|
|
@@ -343,40 +340,6 @@ export class Util {
|
|
|
343
340
|
static isPromise(obj) {
|
|
344
341
|
return !!obj && typeof obj.then === 'function';
|
|
345
342
|
}
|
|
346
|
-
static configureService(configureServiceArgs) {
|
|
347
|
-
const baseService = configureServiceArgs.baseService;
|
|
348
|
-
const entity = configureServiceArgs.entity;
|
|
349
|
-
const service = configureServiceArgs.service;
|
|
350
|
-
const injector = configureServiceArgs.injector;
|
|
351
|
-
const config = injector.get(AppConfig);
|
|
352
|
-
const serviceConfiguration = config.getServiceConfiguration();
|
|
353
|
-
const serviceConfigurationType = serviceConfiguration[service]?.serviceType;
|
|
354
|
-
const serviceType = configureServiceArgs.serviceType || serviceConfigurationType;
|
|
355
|
-
try {
|
|
356
|
-
let dataService = this.getDataServiceInstance(serviceType, baseService, injector);
|
|
357
|
-
if (Util.isDataService(dataService)) {
|
|
358
|
-
const serviceCfg = dataService.getDefaultServiceConfiguration(service);
|
|
359
|
-
if (entity) {
|
|
360
|
-
serviceCfg.entity = entity;
|
|
361
|
-
}
|
|
362
|
-
dataService.configureService(serviceCfg);
|
|
363
|
-
}
|
|
364
|
-
return dataService;
|
|
365
|
-
}
|
|
366
|
-
catch (e) {
|
|
367
|
-
console.error(e);
|
|
368
|
-
return null;
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
static getDataServiceInstance(serviceType, baseService, injector) {
|
|
372
|
-
if (!serviceType) {
|
|
373
|
-
return injector.get(baseService);
|
|
374
|
-
}
|
|
375
|
-
if (![ServiceType.Ontimize, ServiceType.OntimizeEE, ServiceType.JSONAPI].includes(serviceType)) {
|
|
376
|
-
return createServiceInstance(injector.get(serviceType), injector);
|
|
377
|
-
}
|
|
378
|
-
return createServiceInstance(serviceType, injector);
|
|
379
|
-
}
|
|
380
343
|
static createServiceInstance(clazz, injector) {
|
|
381
344
|
if (!Util.isDefined(clazz)) {
|
|
382
345
|
return;
|
|
@@ -485,6 +448,16 @@ export class Util {
|
|
|
485
448
|
}
|
|
486
449
|
return child;
|
|
487
450
|
}
|
|
451
|
+
static getValueFromPath(obj, path) {
|
|
452
|
+
if (!obj || !path)
|
|
453
|
+
return undefined;
|
|
454
|
+
return path.split('.').reduce((acc, key) => {
|
|
455
|
+
if (acc && typeof acc === 'object') {
|
|
456
|
+
return acc[key];
|
|
457
|
+
}
|
|
458
|
+
return undefined;
|
|
459
|
+
}, obj);
|
|
460
|
+
}
|
|
488
461
|
}
|
|
489
462
|
Util.columnAggregates = ['sum', 'count', 'avg', 'min', 'max'];
|
|
490
463
|
Util.objectToQueryString = (initialObj) => {
|
|
@@ -528,4 +501,4 @@ Util.mapKeys = (obj, fn) => Object.keys(obj).reduce((acc, k) => {
|
|
|
528
501
|
return acc;
|
|
529
502
|
}, {});
|
|
530
503
|
Util.mapValues = (obj, fn) => Object.keys(obj).reduce((acc, k) => ({ ...acc, [k]: fn(obj[k]) }), {});
|
|
531
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi91dGlsL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVExRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxNQUFNLE9BQU8sSUFBSTtJQUlmLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBUTtRQUN0QixNQUFNLE9BQU8sR0FBRyxPQUFPLEdBQUcsQ0FBQztRQUMzQixPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBUTtRQUNyQixPQUFPLEdBQUcsWUFBWSxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBYSxFQUFFLFlBQXNCO1FBQ3ZELElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ3BHLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTSxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMs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QUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzRSxDQUFDLENBQUM7QUFNYyxZQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDakMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRU8sY0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBmcm9tLCBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IElEYXRhU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvZGF0YS1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRm9ybURhdGFDb21wb25lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Zvcm0tZGF0YS1jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3Blcm1pc3Npb25zLXNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9Db25maWd1cmVNZXNzYWdlU2VydmljZUFyZ3MgfSBmcm9tICcuLi90eXBlcy9jb25maWd1cmUtbWVzc2FnZS1zZXJ2aWNlLWFyZ3MudHlwZSc7XG5pbXBvcnQgeyBPQ29uZmlndXJlU2VydmljZUFyZ3MgfSBmcm9tICcuLi90eXBlcy9jb25maWd1cmUtc2VydmljZS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgT0RhdGVWYWx1ZVR5cGUgfSBmcm9tICcuLi90eXBlcy9vLWRhdGUtdmFsdWUudHlwZSc7XG5pbXBvcnQgeyBCYXNlNjQgfSBmcm9tICcuL2Jhc2U2NCc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4vY29kZXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBjcmVhdGVTZXJ2aWNlSW5zdGFuY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcnO1xuaW1wb3J0IHsgU2VydmljZVR5cGUgfSBmcm9tICcuLi90eXBlcy9zZXJ2aWNlLXR5cGUudHlwZSc7XG5cbmV4cG9ydCBjbGFzcyBVdGlsIHtcblxuICBzdGF0aWMgcmVhZG9ubHkgY29sdW1uQWdncmVnYXRlcyA9IFsnc3VtJywgJ2NvdW50JywgJ2F2ZycsICdtaW4nLCAnbWF4J107XG5cbiAgc3RhdGljIGlzT2JqZWN0KHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsVHlwZSA9IHR5cGVvZiB2YWw7XG4gICAgcmV0dXJuIHZhbFR5cGUgPT09ICdvYmplY3QnO1xuICB9XG5cbiAgc3RhdGljIGlzQXJyYXkodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsIGluc3RhbmNlb2YgQXJyYXk7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VCb29sZWFuKHZhbHVlOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAoKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpICYmICh2YWx1ZS50b1VwcGVyQ2FzZSgpID09PSAnVFJVRScgfHwgdmFsdWUudG9VcHBlckNhc2UoKSA9PT0gJ1lFUycpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSAmJiAodmFsdWUudG9VcHBlckNhc2UoKSA9PT0gJ0ZBTFNFJyB8fCB2YWx1ZS50b1VwcGVyQ2FzZSgpID09PSAnTk8nKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoVXRpbC5pc0RlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlQXJyYXkodmFsdWU6IHN0cmluZywgZXhjbHVkZVJlcGVhdGVkOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmVzdWx0ID0gdmFsdWUuc3BsaXQoQ29kZXMuQVJSQVlfSU5QVVRfU0VQQVJBVE9SKTtcbiAgICB9XG4gICAgaWYgKGV4Y2x1ZGVSZXBlYXRlZCAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0ID0gQXJyYXkuZnJvbShuZXcgU2V0KHJlc3VsdCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggcGFyZW50IGtleXMgZXF1aXZhbGVuY2VzLlxuICAgKiBAcGFyYW0gIHBLZXlzQXJyYXkgQXJyYXkgb2Ygc3RyaW5ncy4gQWNjZXB0ZWQgZm9ybWF0OiBrZXkgfCBrZXk6YWxpYXNcbiAgICogQHJldHVybnMgT2JqZWN0XG4gICAqL1xuICBzdGF0aWMgcGFyc2VQYXJlbnRLZXlzRXF1aXZhbGVuY2VzKHBLZXlzQXJyYXk6IEFycmF5PHN0cmluZz4sIHNlcGFyYXRvcjogc3RyaW5nID0gJzonKTogb2JqZWN0IHtcbiAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSB7fTtcbiAgICBpZiAocEtleXNBcnJheSAmJiBwS2V5c0FycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgIHBLZXlzQXJyYXkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgYXV4ID0gaXRlbS5zcGxpdChzZXBhcmF0b3IpO1xuICAgICAgICBpZiAoYXV4ICYmIGF1eC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBpZiAoLy4rXFxbLitcXF0vLnRlc3QoYXV4WzFdKSkge1xuICAgICAgICAgICAgY29uc3QgZXF1aXZLZXkgPSBhdXhbMV0uc3Vic3RyaW5nKDAsIGF1eFsxXS5pbmRleE9mKCdbJykpO1xuICAgICAgICAgICAgY29uc3QgZXF1aXZWYWx1ZSA9IGF1eFsxXS5zdWJzdHJpbmcoYXV4WzFdLmluZGV4T2YoJ1snKSArIDEsIGF1eFsxXS5pbmRleE9mKCddJykpO1xuICAgICAgICAgICAgY29uc3QgZXF1aXYgPSB7fTtcbiAgICAgICAgICAgIGVxdWl2W2VxdWl2S2V5XSA9IGVxdWl2VmFsdWU7XG4gICAgICAgICAgICBlcXVpdmFsZW5jZXNbYXV4WzBdXSA9IGVxdWl2O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcXVpdmFsZW5jZXNbYXV4WzBdXSA9IGF1eFsxXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYXV4ICYmIGF1eC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBlcXVpdmFsZW5jZXNbaXRlbV0gPSBpdGVtO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlcztcbiAgfVxuXG4gIHN0YXRpYyBlbmNvZGVQYXJlbnRLZXlzKHBhcmVudEtleXM6IG9iamVjdCk6IHN0cmluZyB7XG4gICAgbGV0IGVuY29kZWQ6IHN0cmluZyA9ICcnO1xuICAgIGlmIChwYXJlbnRLZXlzKSB7XG4gICAgICBlbmNvZGVkID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShwYXJlbnRLZXlzKSk7XG4gICAgfVxuICAgIHJldHVybiBlbmNvZGVkO1xuICB9XG5cbiAgc3RhdGljIGRlY29kZVBhcmVudEtleXMocGFyZW50S2V5czogc3RyaW5nKTogb2JqZWN0IHtcbiAgICBsZXQgZGVjb2RlZCA9IHt9O1xuICAgIGlmIChwYXJlbnRLZXlzICYmIHBhcmVudEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZCA9IEJhc2U2NC5kZWNvZGUocGFyZW50S2V5cyk7XG4gICAgICBkZWNvZGVkID0gSlNPTi5wYXJzZShkKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlY29kZWQ7XG4gIH1cblxuICBzdGF0aWMgaXNBcnJheUVtcHR5KGFycmF5OiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQoYXJyYXkpIHx8IGFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBpc09iamVjdEVtcHR5KG9iajogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3ZXRoZXIgc3BlY2lmaWVkIHNlcnZpY2UgYXMgYXJndW1lbnQgaW1wbGVtZW50cyAnSURhdGFTZXJ2aWNlJyBpbnRlcmZhY2VcbiAgICogQHBhcmFtIGFyZyBUaGUgc2VydmljZSBpbnN0YW5jZSBmb3IgY2hlY2tpbmcuXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICovXG4gIHN0YXRpYyBpc0RhdGFTZXJ2aWNlKGFyZzogYW55KTogYXJnIGlzIElEYXRhU2VydmljZSB7XG4gICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkIHx8IGFyZyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKChhcmcgYXMgSURhdGFTZXJ2aWNlKS5nZXREZWZhdWx0U2VydmljZUNvbmZpZ3VyYXRpb24gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKGFyZyBhcyBJRGF0YVNlcnZpY2UpLmNvbmZpZ3VyZVNlcnZpY2UgIT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdldGhlciBzcGVjaWZpZWQgc2VydmljZSBhcyBhcmd1bWVudCBpbXBsZW1lbnRzICdJRGF0YVNlcnZpY2UnIGludGVyZmFjZVxuICAgKiBAcGFyYW0gYXJnIFRoZSBzZXJ2aWNlIGluc3RhbmNlIGZvciBjaGVja2luZy5cbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgc3RhdGljIGlzUGVybWlzc2lvbnNTZXJ2aWNlKGFyZzogYW55KTogYXJnIGlzIElQZXJtaXNzaW9uc1NlcnZpY2Uge1xuICAgIGlmIChhcmcgPT09IHVuZGVmaW5lZCB8fCBhcmcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICgoYXJnIGFzIElQZXJtaXNzaW9uc1NlcnZpY2UpLmxvYWRQZXJtaXNzaW9ucyAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2V0aGVyIHNwZWNpZmllZCBjb21wb25lbnQgYXMgYXJndW1lbnQgaW1wbGVtZW50cyAnSUZvcm1EYXRhQ29tcG9uZW50JyBpbnRlcmZhY2VcbiAgICogQHBhcmFtIGFyZyBUaGUgY29tcG9uZW50IGluc3RhbmNlIGZvciBjaGVja2luZy5cbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgc3RhdGljIGlzRm9ybURhdGFDb21wb25lbnQoYXJnOiBhbnkpOiBhcmcgaXMgSUZvcm1EYXRhQ29tcG9uZW50IHtcbiAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoKGFyZyBhcyBJRm9ybURhdGFDb21wb25lbnQpLmlzQXV0b21hdGljQmluZGluZyAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIGlzIGVxdWFsIHR3byBvYmplY3RzXG4gICAqIEBwYXJhbSBhIE9iamVjdCAxXG4gICAqIEBwYXJhbSBiIE9iamVjdCAyXG4gICAqXG4gICAqL1xuICBzdGF0aWMgaXNFcXVpdmFsZW50KGEsIGIpIHtcbiAgICAvLyBDcmVhdGUgYXJyYXlzIG9mIHByb3BlcnR5IG5hbWVzXG4gICAgY29uc3QgYVByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSk7XG4gICAgY29uc3QgYlByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYik7XG5cbiAgICAvLyBJZiBudW1iZXIgb2YgcHJvcGVydGllcyBpcyBkaWZmZXJlbnQsIG9iamVjdHMgYXJlIG5vdCBlcXVpdmFsZW50XG4gICAgaWYgKGFQcm9wcy5sZW5ndGggIT09IGJQcm9wcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcHJvcE5hbWUgPSBhUHJvcHNbaV07XG4gICAgICAvLyBJZiB2YWx1ZXMgb2Ygc2FtZSBwcm9wZXJ0eSBhcmUgbm90IGVxdWFsLCBvYmplY3RzIGFyZSBub3QgZXF1aXZhbGVudFxuICAgICAgbGV0IGJWYWx1ZSA9IGJbcHJvcE5hbWVdO1xuICAgICAgaWYgKHR5cGVvZiBhW3Byb3BOYW1lXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgaW50QiA9IHBhcnNlSW50KGJWYWx1ZSwgMTApO1xuICAgICAgICBiVmFsdWUgPSBpc05hTihpbnRCKSA/IGJWYWx1ZSA6IGludEI7XG4gICAgICB9XG4gICAgICBpZiAoYVtwcm9wTmFtZV0gIT09IGJWYWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWFkZSBpdCB0aGlzIGZhciwgb2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0aWMgZXF1YWxzKG8xOiBhbnksIG8yOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAobzEgPT09IG8yKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG8xID09PSBudWxsIHx8IG8yID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChvMSAhPT0gbzEgJiYgbzIgIT09IG8yKSB7XG4gICAgICAvLyBOYU4gPT09IE5hTlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHQxID0gdHlwZW9mIG8xO1xuICAgIGNvbnN0IHQyID0gdHlwZW9mIG8yO1xuICAgIGxldCBsZW5ndGg6IG51bWJlcjtcbiAgICBsZXQga2V5OiBhbnk7XG4gICAgbGV0IGtleVNldDogYW55O1xuICAgIGlmICh0MSA9PT0gdDIgJiYgdDEgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvMSkpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG8yKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZW5ndGggPSBvMS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPT09IG8yLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoa2V5ID0gMDsga2V5IDwgbGVuZ3RoOyBrZXkrKykge1xuICAgICAgICAgICAgaWYgKCFVdGlsLmVxdWFscyhvMVtrZXldLCBvMltrZXldKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvMikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAga2V5U2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZm9yIChrZXkgaW4gbzEpIHtcbiAgICAgICAgICBpZiAoIVV0aWwuZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGtleVNldFtrZXldID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGtleSBpbiBvMikge1xuICAgICAgICAgIGlmICghKGtleSBpbiBrZXlTZXQpICYmIHR5cGVvZiBvMltrZXldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYSByYW5kb20gbnVtYmVyXG4gICovXG4gIHN0YXRpYyByYW5kb21OdW1iZXIoKSB7XG4gICAgY29uc3QgcmFuZG9tQXJyYXkgPSBuZXcgVWludDMyQXJyYXkoMSk7XG4gICAgd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMocmFuZG9tQXJyYXkpO1xuICAgIHJldHVybiByYW5kb21BcnJheVswXTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHByb3ZpZGVkIHN0cmluZyBpbiBsb3dlcmNhc2UgYW5kIHdpdGhvdXQgYWNjZW50IG1hcmtzLlxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHRleHQgdG8gbm9ybWFsaXplXG4gICAqL1xuICBzdGF0aWMgbm9ybWFsaXplU3RyaW5nKHZhbHVlOiBzdHJpbmcsIHRvTG93ZXJDYXNlOiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHZhbHVlLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuICAgICAgICBpZiAodG9Mb3dlckNhc2UpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvdmlkZWQgYXJyYXkgZmxhdHRlbmQuXG4gICAqIEBwYXJhbSBhcnJheSB0aGUgYXJyYXkgdG8gZmxhdFxuICAgKi9cbiAgc3RhdGljIGZsYXR0ZW4oYXJyYXk6IEFycmF5PGFueT4pOiBBcnJheTxhbnk+IHtcbiAgICBsZXQgZmxhdHRlbmVkID0gW107XG4gICAgZm9yIChjb25zdCBjdXJyZW50IG9mIGFycmF5KSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY3VycmVudCkpIHtcbiAgICAgICAgZmxhdHRlbmVkLnB1c2goY3VycmVudCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBjaGlsZEN1cnJlbnQgb2YgY3VycmVudCkge1xuICAgICAgICBmbGF0dGVuZWQucHVzaChjaGlsZEN1cnJlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmbGF0dGVuZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCB3aXRoIGFsbCB0aGUgdmFsdWVzIGZyb20gdGhlIHByb3ZpZGVkIG9iamVjdC5cbiAgICogQHBhcmFtIG9iaiB0aGUgb2JqZWN0XG4gICAqL1xuICBzdGF0aWMgZ2V0VmFsdWVzRnJvbU9iamVjdChvYmo6IG9iamVjdCA9IHt9KTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgYXJyYXk6IEFycmF5PGFueT4gPSBbXTtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGFycmF5LnB1c2goVXRpbC5nZXRWYWx1ZXNGcm9tT2JqZWN0KG9ialtrZXldKSk7XG4gICAgICB9XG4gICAgICBhcnJheS5wdXNoKG9ialtrZXldKTtcbiAgICB9KTtcbiAgICByZXR1cm4gVXRpbC5mbGF0dGVuKGFycmF5KTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZUljb25Qb3NpdGlvbih2YWx1ZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQgPSBkZWZhdWx0VmFsdWUgfHwgQ29kZXMuSUNPTl9QT1NJVElPTl9MRUZUO1xuICAgIGNvbnN0IGF2YWlsYWJsZVBvc2l0aW9ucyA9IFtDb2Rlcy5JQ09OX1BPU0lUSU9OX0xFRlQsIENvZGVzLklDT05fUE9TSVRJT05fUklHSFRdO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIGlmIChhdmFpbGFibGVQb3NpdGlvbnMuaW5kZXhPZihyZXN1bHQpID09PSAtMSkge1xuICAgICAgcmVzdWx0ID0gZGVmYXVsdFZhbHVlIHx8IENvZGVzLklDT05fUE9TSVRJT05fTEVGVDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBjb3B5VG9DbGlwYm9hcmQoZGF0YTogc3RyaW5nKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29weScsIChlOiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgZS5jbGlwYm9hcmREYXRhLnNldERhdGEoJ3RleHQvcGxhaW4nLCBkYXRhKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvcHknLCBudWxsKTtcbiAgICB9KTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICB9XG5cbiAgc3RhdGljIGNoZWNrUGl4ZWxzVmFsdWVTdHJpbmcodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgncHgnKSA6IGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGV4dHJhY3RQaXhlbHNWYWx1ZSh2YWx1ZTogYW55LCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCByZXN1bHQ6IG51bWJlciA9IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoVXRpbC5jaGVja1BpeGVsc1ZhbHVlU3RyaW5nKHZhbHVlKSkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VGbG9hdCh2YWx1ZS5zdWJzdHIoMCwgdmFsdWUubGVuZ3RoIC0gJ3B4Jy5sZW5ndGgpKTtcbiAgICAgIHJlc3VsdCA9IGlzTmFOKHBhcnNlZCkgPyBkZWZhdWx0VmFsdWUgOiBwYXJzZWQ7XG4gICAgfVxuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChyZXN1bHQpID8gcmVzdWx0IDogZGVmYXVsdFZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBBZGRlZCBjbGFzcyAnYWNjZW50JyBpbiA8bWF0LWZvcm0tZmllbGQ+IGFuZCBzZXQgdGhlIGNvbG9yICBhY2NlbnQgaW4gdGhlIGljb25zXG4gICAqIEBwYXJhbSBlbFJlZlxuICAgKiBAcGFyYW0gb0lucHV0c09wdGlvbnNcbiAgICovXG5cbiAgc3RhdGljIHBhcnNlT0lucHV0c09wdGlvbnMoZWxSZWYsIG9JbnB1dHNPcHRpb25zKSB7XG5cbiAgICBpZiAob0lucHV0c09wdGlvbnMuaWNvbkNvbG9yID09PSBDb2Rlcy5PX0lOUFVUU19PUFRJT05TX0NPTE9SX0FDQ0VOVCkge1xuICAgICAgY29uc3QgbWF0Rm9ybUZpZWxkRUwgPSBlbFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtYXQtZm9ybS1maWVsZCcpWzBdO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG1hdEZvcm1GaWVsZEVMKSkge1xuICAgICAgICBtYXRGb3JtRmllbGRFTC5jbGFzc0xpc3QuYWRkKCdhY2NlbnQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiAgUmV0dXJuIHN0cmluZyB3aXRoIGVzY2FwZWQgc3BlY2lhbCBjaGFyYWN0ZXJcbiAgICovXG4gIHN0YXRpYyBlc2NhcGVTcGVjaWFsQ2hhcmFjdGVyKFM6IHN0cmluZyk6IHN0cmluZyB7XG5cbiAgICBjb25zdCBzdHIgPSBTdHJpbmcoUyk7XG5cbiAgICBjb25zdCBjcExpc3QgPSBBcnJheS5mcm9tKHN0cltTeW1ib2wuaXRlcmF0b3JdKCkpO1xuXG4gICAgY29uc3QgY3VMaXN0ID0gW107XG4gICAgZm9yIChjb25zdCBjIG9mIGNwTGlzdCkge1xuICAgICAgLy8gaS4gSWYgYyBpcyBhIFNwZWNpYWxDaGFyYWN0ZXIgdGhlbiBkbzpcbiAgICAgIGlmICgnXiRcXFxcLiorPygpW117fXwnLmluZGV4T2YoYykgIT09IC0xKSB7XG4gICAgICAgIC8vIGEuIEFwcGVuZCBcIlxcXCIgdG8gY3VMaXN0LlxuICAgICAgICBjdUxpc3QucHVzaCgnXFxcXCcpO1xuICAgICAgfVxuICAgICAgLy8gQXBwZW5kIGMgdG8gY3BMaXN0LlxuICAgICAgY3VMaXN0LnB1c2goYyk7XG4gICAgfVxuICAgIGNvbnN0IEwgPSBjdUxpc3Quam9pbignJyk7XG4gICAgcmV0dXJuIEw7XG5cbiAgfVxuXG4gIHN0YXRpYyBpc0FycmF5RXF1YWwoYXJyYXkxOiBBcnJheTxhbnk+LCBhcnJheTI6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gYXJyYXkxLmxlbmd0aCA9PT0gYXJyYXkyLmxlbmd0aCAmJiBhcnJheTEuZXZlcnkoKHYsIGkpID0+IHYgPT09IGFycmF5MltpXSlcbiAgfTtcblxuICBzdGF0aWMgZGlmZmVyZW5jZUFycmF5cyhhcnJheTE6IEFycmF5PGFueT4sIGFycmF5MjogQXJyYXk8YW55Pik6IEFycmF5PGFueT4ge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBhcnJheTEuZmlsdGVyKG9iaiA9PiB7XG4gICAgICByZXR1cm4gIWFycmF5Mi5zb21lKG9iajIgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lcXVhbHMob2JqLCBvYmoyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBkaWZmZXJlbmNlO1xuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUb09EYXRlVmFsdWVUeXBlKHZhbDogYW55KTogT0RhdGVWYWx1ZVR5cGUge1xuICAgIGxldCByZXN1bHQ6IE9EYXRlVmFsdWVUeXBlID0gJ3RpbWVzdGFtcCc7XG4gICAgY29uc3QgbG93ZXJWYWwgPSAodmFsIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlclZhbCA9PT0gJ3N0cmluZycgfHwgbG93ZXJWYWwgPT09ICdkYXRlJyB8fCBsb3dlclZhbCA9PT0gJ3RpbWVzdGFtcCcgfHwgbG93ZXJWYWwgPT09ICdpc28tODYwMScpIHtcbiAgICAgIHJlc3VsdCA9IGxvd2VyVmFsO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cblxuICBzdGF0aWMgdW5pcXVlQnkoYTogQXJyYXk8YW55Piwga2V5KSB7XG4gICAgY29uc3Qgc2VlbiA9IHt9O1xuICAgIHJldHVybiBhLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgayA9IGtleShpdGVtKTtcbiAgICAgIHJldHVybiBzZWVuLmhhc093blByb3BlcnR5KGspID8gZmFsc2UgOiAoc2VlbltrXSA9IHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmVzIHR3byBzdHJpbmdzIGFuZCByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgaWYgZmlyc3QgYXJndW1lbnQgaXMgbGVzcyB0aGFuIHNlY29uZCBhcmd1bWVudCwgemVybyBpZiB0aGV5J3JlIGVxdWFsIGFuZCBhIHBvc2l0aXZlIHZhbHVlIG90aGVyd2lzZS5cbiAgICovXG4gIHN0YXRpYyBjb21wYXJlKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAoYSA8IGIpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKGEgPiBiKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VCeVZhbHVlVHlwZSh2YWx1ZTogYW55LCB2YWx1ZVR5cGU6IE9EYXRlVmFsdWVUeXBlLCBmb3JtYXQ6IHN0cmluZykge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSB2YWx1ZTtcbiAgICBjb25zdCBtID0gbW9tZW50KHZhbHVlKTtcbiAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmVzdWx0ID0gbS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmVzdWx0ID0gbS50b0RhdGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpc28tODYwMSc6XG4gICAgICAgIHJlc3VsdCA9IG0udG9JU09TdHJpbmcoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0aW1lc3RhbXAnOlxuICAgICAgICByZXN1bHQgPSBtLnZhbHVlT2YoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXN1bHQgPSB2b2lkIDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIHdyYXBJbnRvT2JzZXJ2YWJsZTxUPih2YWx1ZTogVCB8IFByb21pc2U8VD4gfCBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoVXRpbC5pc1Byb21pc2UodmFsdWUpKSB7XG4gICAgICAvLyBVc2UgYFByb21pc2UucmVzb2x2ZSgpYCB0byB3cmFwIHByb21pc2UtbGlrZSBpbnN0YW5jZXMuXG4gICAgICByZXR1cm4gZnJvbShQcm9taXNlLnJlc29sdmUodmFsdWUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2YodmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGlzUHJvbWlzZTxUID0gYW55PihvYmo6IGFueSk6IG9iaiBpcyBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gISFvYmogJiYgdHlwZW9mIG9iai50aGVuID09PSAnZnVuY3Rpb24nO1xuICB9XG5cblxuICBzdGF0aWMgY29uZmlndXJlU2VydmljZShjb25maWd1cmVTZXJ2aWNlQXJnczogT0NvbmZpZ3VyZVNlcnZpY2VBcmdzKTogYW55IHtcbiAgICBjb25zdCBiYXNlU2VydmljZSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLmJhc2VTZXJ2aWNlO1xuICAgIGNvbnN0IGVudGl0eSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLmVudGl0eTtcbiAgICBjb25zdCBzZXJ2aWNlID0gY29uZmlndXJlU2VydmljZUFyZ3Muc2VydmljZTtcbiAgICBjb25zdCBpbmplY3RvciA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLmluamVjdG9yO1xuXG4gICAgY29uc3QgY29uZmlnID0gaW5qZWN0b3IuZ2V0KEFwcENvbmZpZyk7XG4gICAgY29uc3Qgc2VydmljZUNvbmZpZ3VyYXRpb24gPSBjb25maWcuZ2V0U2VydmljZUNvbmZpZ3VyYXRpb24oKTtcbiAgICBjb25zdCBzZXJ2aWNlQ29uZmlndXJhdGlvblR5cGUgPSBzZXJ2aWNlQ29uZmlndXJhdGlvbltzZXJ2aWNlXT8uc2VydmljZVR5cGU7XG4gICAgY29uc3Qgc2VydmljZVR5cGUgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5zZXJ2aWNlVHlwZSB8fCBzZXJ2aWNlQ29uZmlndXJhdGlvblR5cGU7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IGRhdGFTZXJ2aWNlID0gdGhpcy5nZXREYXRhU2VydmljZUluc3RhbmNlKHNlcnZpY2VUeXBlLCBiYXNlU2VydmljZSwgaW5qZWN0b3IpO1xuXG4gICAgICBpZiAoVXRpbC5pc0RhdGFTZXJ2aWNlKGRhdGFTZXJ2aWNlKSkge1xuICAgICAgICBjb25zdCBzZXJ2aWNlQ2ZnID0gZGF0YVNlcnZpY2UuZ2V0RGVmYXVsdFNlcnZpY2VDb25maWd1cmF0aW9uKHNlcnZpY2UpO1xuICAgICAgICBpZiAoZW50aXR5KSB7XG4gICAgICAgICAgc2VydmljZUNmZy5lbnRpdHkgPSBlbnRpdHk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVNlcnZpY2UuY29uZmlndXJlU2VydmljZShzZXJ2aWNlQ2ZnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhU2VydmljZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXREYXRhU2VydmljZUluc3RhbmNlKHNlcnZpY2VUeXBlOiBhbnksIGJhc2VTZXJ2aWNlOiBhbnksIGluamVjdG9yOiBJbmplY3Rvcik6IGFueSB7XG4gICAgaWYgKCFzZXJ2aWNlVHlwZSkge1xuICAgICAgcmV0dXJuIGluamVjdG9yLmdldDxhbnk+KGJhc2VTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBpZiAoIVtTZXJ2aWNlVHlwZS5PbnRpbWl6ZSxTZXJ2aWNlVHlwZS5PbnRpbWl6ZUVFLCBTZXJ2aWNlVHlwZS5KU09OQVBJXS5pbmNsdWRlcyhzZXJ2aWNlVHlwZSkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVTZXJ2aWNlSW5zdGFuY2UoaW5qZWN0b3IuZ2V0PGFueT4oc2VydmljZVR5cGUpLCBpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZVNlcnZpY2VJbnN0YW5jZShzZXJ2aWNlVHlwZSwgaW5qZWN0b3IpO1xuICB9XG5cbiAgLyoqXG4gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBwcm92aWRlZCBzZXJ2aWNlIGNsYXNzXG4gKiBAcGFyYW0gY2xhenogdGhlIGNsYXNzIHJlZmVyZW5jZVxuICogQHBhcmFtIGluamVjdG9yIHRoZSBpbmplY3RvclxuICovXG4gIHN0YXRpYyBjcmVhdGVTZXJ2aWNlSW5zdGFuY2UoY2xheno6IGFueSwgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChjbGF6eikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdJbnN0YW5jZSA9IG5ldyBjbGF6eihpbmplY3Rvcik7XG4gICAgcmV0dXJuIG5ld0luc3RhbmNlO1xuICB9XG5cbiAgc3RhdGljIGNvbmZpZ3VyZU1lc3NhZ2VTZXJ2aWNlKGNvbmZpZ3VyZVNlcnZpY2VBcmdzOiBPQ29uZmlndXJlTWVzc2FnZVNlcnZpY2VBcmdzKTogYW55IHtcbiAgICBsZXQgbWVzc2FnZVNlcnZpY2UgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5iYXNlU2VydmljZTtcbiAgICBjb25zdCBzZXJ2aWNlVHlwZSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLnNlcnZpY2VUeXBlO1xuICAgIGNvbnN0IGluamVjdG9yID0gY29uZmlndXJlU2VydmljZUFyZ3MuaW5qZWN0b3I7XG5cbiAgICBpZiAoc2VydmljZVR5cGUpIHtcbiAgICAgIG1lc3NhZ2VTZXJ2aWNlID0gc2VydmljZVR5cGU7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBtZXNzYWdlU2VydmljZSA9IGluamVjdG9yLmdldDxhbnk+KG1lc3NhZ2VTZXJ2aWNlKTtcbiAgICAgIGlmIChzZXJ2aWNlVHlwZSkge1xuICAgICAgICBtZXNzYWdlU2VydmljZSA9IFV0aWwuY3JlYXRlU2VydmljZUluc3RhbmNlKG1lc3NhZ2VTZXJ2aWNlLCBpbmplY3RvcilcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVNlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgaXNCYXNlNjQoZmlsZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoL14oW0EtWmEtejAtOStcXC9dezR9KSooW0EtWmEtejAtOStcXC9dezR9fFtBLVphLXowLTkrXFwvXXszfT18W0EtWmEtejAtOStcXC9dezJ9PT0pJC9nKVxuXG4gICAgaWYgKGZpbGUuc3Vic3RyaW5nKDAsIDQpID09PSAnZGF0YScpIHtcbiAgICAgIGZpbGUgPSBmaWxlLnN1YnN0cmluZyhmaWxlLmluZGV4T2YoJ2Jhc2U2NCcpICsgNyk7XG4gICAgfVxuICAgIHJldHVybiBwYXR0ZXJuLnRlc3QoZmlsZS5yZXBsYWNlKC9cXHMrL2csICcnKSk7XG5cbiAgfVxuICAvKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCB0byBhIEpTT04gc3RyaW5nLCBhdm9pZGluZyBjaXJjdWxhciByZWZlcmVuY2VzLlxuICogQHBhcmFtIG9iaiBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqIEByZXR1cm5zIEEgSlNPTiBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBvYmplY3QuXG4gKi9cbiAgc3RhdGljIHN0cmluZ2lmeShvYmo6IG9iamVjdCkge1xuICAgIGxldCBjYWNoZSA9IFtdO1xuICAgIGxldCBzdHIgPSBKU09OLnN0cmluZ2lmeShvYmosIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChjYWNoZS5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgICAgICByZXR1cm47IC8vIEF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXNcbiAgICAgICAgfVxuICAgICAgICBjYWNoZS5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgICBjYWNoZSA9IG51bGw7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHN0YXRpYyByZWFkb25seSBvYmplY3RUb1F1ZXJ5U3RyaW5nID0gKGluaXRpYWxPYmopID0+IHtcbiAgICBjb25zdCByZWR1Y2VyID0gKG9iaiwgcGFyZW50UHJlZml4ID0gbnVsbCkgPT4gKHByZXYsIGtleSkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gb2JqW2tleV07XG4gICAgICBrZXkgPSBlbmNvZGVVUklDb21wb25lbnQoa2V5KTtcbiAgICAgIGxldCBwcmVmaXg6IHN0cmluZztcbiAgICAgIGlmIChrZXkgPT09ICdmaWx0ZXJQYXJlbnRLZXlzJykge1xuICAgICAgICBwcmVmaXggPSBwYXJlbnRQcmVmaXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmVmaXggPSBwYXJlbnRQcmVmaXggPyBgJHtwYXJlbnRQcmVmaXh9WyR7a2V5fV1gIDoga2V5O1xuICAgICAgfVxuXG4gICAgICBpZiAoa2V5ID09PSAnZmlsdGVyJyAmJiAhVXRpbC5pc09iamVjdEVtcHR5KG9ialtrZXldKSkge1xuICAgICAgICBwcmV2LnB1c2goT2JqZWN0LmtleXModmFsKS5tYXAoaXRlbWZpbHRlciA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyS2V5ID0gYGZpbHRlclske2l0ZW1maWx0ZXJ9XWA7XG4gICAgICAgICAgaWYgKFV0aWwuaXNPYmplY3QodmFsW2l0ZW1maWx0ZXJdKSkge1xuICAgICAgICAgICAgLyoqIEluIGNhc2UgZmlsdGVyIGFuZCBiYXNpYyBleHByZXNpb24qL1xuICAgICAgICAgICAgcmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChmaWx0ZXJLZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh2YWxbaXRlbWZpbHRlcl0pKX1gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKiogSW4gY2FzZSB0aGUgc2ltcGxlIGZpbHRlciB0byBlc3BhcGUgcXVvdGVzKi9cbiAgICAgICAgICAgIHJldHVybiBgJHtlbmNvZGVVUklDb21wb25lbnQoZmlsdGVyS2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsW2l0ZW1maWx0ZXJdKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkuam9pbignJicpKTtcblxuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH1cblxuXG4gICAgICBpZiAodmFsID09IG51bGwgfHwgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcmV2LnB1c2goYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHByZWZpeCl9PWApO1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH1cblxuICAgICAgaWYgKFsnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnc3RyaW5nJ10uaW5jbHVkZXModHlwZW9mIHZhbCkpIHtcbiAgICAgICAgcHJldi5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChwcmVmaXgpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWwpfWApO1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH1cblxuICAgICAgcHJldi5wdXNoKE9iamVjdC5rZXlzKHZhbCkucmVkdWNlKHJlZHVjZXIodmFsLCBwcmVmaXgpLCBbXSkuam9pbignJicpKTtcbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoaW5pdGlhbE9iaikucmVkdWNlKHJlZHVjZXIoaW5pdGlhbE9iaiksIFtdKS5qb2luKCcmJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIE1hcCBrZXlzIG9mIG9iamVjdFxuICAgKiBGb3IgZXhhbXBsZTogY29udmVydGluZyB0aGUga2V5cyBvZiBhbiBvYmplY3QgdG8gdXBwZXJjYXNlXG4gICAqL1xuICBzdGF0aWMgcmVhZG9ubHkgbWFwS2V5cyA9IChvYmosIGZuKSA9PlxuICAgIE9iamVjdC5rZXlzKG9iaikucmVkdWNlKChhY2MsIGspID0+IHtcbiAgICAgIGFjY1tmbihvYmpba10sIGssIG9iaildID0gb2JqW2tdO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgc3RhdGljIHJlYWRvbmx5IG1hcFZhbHVlcyA9IChvYmosIGZuKSA9PlxuICAgIE9iamVjdC5rZXlzKG9iaikucmVkdWNlKChhY2MsIGspID0+ICh7IC4uLmFjYywgW2tdOiBmbihvYmpba10pIH0pLCB7fSk7XG5cblxuICBzdGF0aWMgdG9Mb3dlckNhc2UodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB0b1VwcGVyQ2FzZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG5cblxuICBzdGF0aWMgcGFyc2VUb0xvd2VyQ2FzZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKFV0aWwuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoKHg6IHN0cmluZykgPT4geC50b0xvY2FsZUxvd2VyQ2FzZSgpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIFV0aWwubWFwS2V5cyh2YWx1ZSwgVXRpbC50b0xvd2VyQ2FzZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZVRvVXBwZXJDYXNlKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoVXRpbC5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoeDogc3RyaW5nKSA9PiB4LnRvTG9jYWxlVXBwZXJDYXNlKCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvTG9jYWxlVXBwZXJDYXNlKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gVXRpbC5tYXBLZXlzKHZhbHVlLCBVdGlsLnRvVXBwZXJDYXNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc3RhdGljIHNvcnRGdW5jdGlvbihwcm9wZXJ0eUE6IHN0cmluZyB8IG51bWJlciwgcHJvcGVydHlCOiBzdHJpbmcgfCBudW1iZXIsIGFjdGl2ZVNvcnREaXJlY3Rpb246IHN0cmluZykge1xuXG4gICAgbGV0IHZhbHVlQTogc3RyaW5nIHwgbnVtYmVyID0gJyc7XG4gICAgbGV0IHZhbHVlQjogc3RyaW5nIHwgbnVtYmVyID0gJyc7XG5cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocHJvcGVydHlBKSkge1xuICAgICAgdmFsdWVBID0gaXNOYU4oK3Byb3BlcnR5QSkgPyBwcm9wZXJ0eUEudG9TdHJpbmcoKS50cmltKCkudG9Mb3dlckNhc2UoKSA6ICtwcm9wZXJ0eUE7XG4gICAgfVxuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHByb3BlcnR5QikpIHtcbiAgICAgIHZhbHVlQiA9IGlzTmFOKCtwcm9wZXJ0eUIpID8gcHJvcGVydHlCLnRvU3RyaW5nKCkudHJpbSgpLnRvTG93ZXJDYXNlKCkgOiArcHJvcGVydHlCO1xuICAgIH1cbiAgICByZXR1cm4gKHZhbHVlQSA8PSB2YWx1ZUIgPyAtMSA6IDEpICogKGFjdGl2ZVNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xKTtcbiAgfVxuXG4gIHN0YXRpYyBjbG9uZUFycmF5PFQ+KGFycjogVFtdKTogVFtdIHtcbiAgICBjb25zdCBjbG9uZWRBcnJheSA9IGFyci5tYXAoKHgpID0+IE9iamVjdC5hc3NpZ24oe30sIHgpKVxuICAgIHJldHVybiBjbG9uZWRBcnJheTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMYXN0QWN0aXZhdGVSb3V0ZShyb3V0ZVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB7XG4gICAgbGV0IGNoaWxkID0gcm91dGVTbmFwc2hvdDtcbiAgICB3aGlsZSAoY2hpbGQuZmlyc3RDaGlsZCkge1xuICAgICAgY2hpbGQgPSBjaGlsZC5maXJzdENoaWxkO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cbn1cbiJdfQ==
|
|
504
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi91dGlsL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU8xRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHaEMsTUFBTSxPQUFPLElBQUk7SUFJZixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQVE7UUFDdEIsTUFBTSxPQUFPLEdBQUcsT0FBTyxHQUFHLENBQUM7UUFDM0IsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQVE7UUFDckIsT0FBTyxHQUFHLFlBQVksS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWEsRUFBRSxZQUFzQjtRQUN2RCxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNwRyxPQUFPLElBQUksQ0FBQztTQUNiO2FBQU0sSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDM0csT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN2QyxPQUFPLFlBQVksQ0FBQztTQUNyQjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBYSxFQUFFLGtCQUEyQixLQUFLO1FBQy9ELElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxlQUFlLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEMsTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUN0QztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFPRCxNQUFNLENBQUMsMkJBQTJCLENBQUMsVUFBeUIsRUFBRSxZQUFvQixHQUFHO1FBQ25GLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDM0IsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUMzQixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQzFELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUNsRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7d0JBQ2pCLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxVQUFVLENBQUM7d0JBQzdCLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7cUJBQzlCO3lCQUFNO3dCQUNMLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQy9CO2lCQUNGO3FCQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUNsQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO2lCQUMzQjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQWtCO1FBQ3hDLElBQUksT0FBTyxHQUFXLEVBQUUsQ0FBQztRQUN6QixJQUFJLFVBQVUsRUFBRTtZQUNkLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUNyRDtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsVUFBa0I7UUFDeEMsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekI7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFZO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2hELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQVc7UUFDOUIsT0FBTyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFPRCxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQVE7UUFDM0IsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDckMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sQ0FBRSxHQUFvQixDQUFDLDhCQUE4QixLQUFLLFNBQVM7WUFDdkUsR0FBb0IsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBT0QsTUFBTSxDQUFDLG9CQUFvQixDQUFDLEdBQVE7UUFDbEMsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDckMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sQ0FBRSxHQUEyQixDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBT0QsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEdBQVE7UUFDakMsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDckMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sQ0FBRSxHQUEwQixDQUFDLGtCQUFrQixLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFRRCxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXRCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFHN0MsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDbkMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUzQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekIsSUFBSSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQ25DLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2xDLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ3RDO1lBQ0QsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssTUFBTSxFQUFFO2dCQUMxQixPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFHRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQU8sRUFBRSxFQUFPO1FBQzVCLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtZQUM5QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFFMUIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLElBQUksTUFBYyxDQUFDO1FBQ25CLElBQUksR0FBUSxDQUFDO1FBQ2IsSUFBSSxNQUFXLENBQUM7UUFDaEIsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxRQUFRLEVBQUU7WUFDaEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDdEIsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7Z0JBQ0QsTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7Z0JBQ25CLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUU7b0JBQ3hCLEtBQUssR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO3dCQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7NEJBQ2xDLE9BQU8sS0FBSyxDQUFDO3lCQUNkO3FCQUNGO29CQUNELE9BQU8sSUFBSSxDQUFDO2lCQUNiO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUNyQixPQUFPLEtBQUssQ0FBQztpQkFDZDtnQkFDRCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFO29CQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTt3QkFDbEMsT0FBTyxLQUFLLENBQUM7cUJBQ2Q7b0JBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztpQkFDcEI7Z0JBQ0QsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFO29CQUNkLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxXQUFXLEVBQUU7d0JBQ3RELE9BQU8sS0FBSyxDQUFDO3FCQUNkO2lCQUNGO2dCQUNELE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN6QixPQUFPLE9BQU8sS0FBSyxLQUFLLFdBQVcsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO0lBQ3hELENBQUM7SUFLRCxNQUFNLENBQUMsWUFBWTtRQUNqQixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBT0QsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFhLEVBQUUsY0FBdUIsSUFBSTtRQUMvRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUM3QixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUN6QixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxXQUFXLEVBQUU7b0JBQ2YsTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDL0I7Z0JBQ0QsT0FBTyxNQUFNLENBQUM7YUFDZjtZQUNELE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFNRCxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQWlCO1FBQzlCLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNuQixLQUFLLE1BQU0sT0FBTyxJQUFJLEtBQUssRUFBRTtZQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDM0IsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEIsU0FBUzthQUNWO1lBQ0QsS0FBSyxNQUFNLFlBQVksSUFBSSxPQUFPLEVBQUU7Z0JBQ2xDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7YUFDN0I7U0FDRjtRQUNELE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFNRCxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBYyxFQUFFO1FBQ3pDLE1BQU0sS0FBSyxHQUFlLEVBQUUsQ0FBQztRQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM3QixJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoRDtZQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsWUFBcUI7UUFDM0QsSUFBSSxNQUFNLEdBQUcsWUFBWSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUN0RCxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pGLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDekIsTUFBTSxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM5QjtRQUNELElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzdDLE1BQU0sR0FBRyxZQUFZLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDO1NBQ25EO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBWTtRQUNqQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBaUIsRUFBRSxFQUFFO1lBQ3RELENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1QyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsUUFBUSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxLQUFhO1FBQ3pDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDaEYsQ0FBQztJQUVELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFVLEVBQUUsWUFBcUI7UUFDekQsSUFBSSxNQUFNLEdBQVcsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNuRSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0QyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN2RSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUNoRDtRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDeEQsQ0FBQztJQU9ELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsY0FBYztRQUU5QyxJQUFJLGNBQWMsQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLDZCQUE2QixFQUFFO1lBQ3BFLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBQ2xDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3hDO1NBQ0Y7SUFDSCxDQUFDO0lBTUQsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQVM7UUFFckMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxFQUFFO1lBRXRCLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUV2QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ25CO1lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoQjtRQUNELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUIsT0FBTyxDQUFDLENBQUM7SUFFWCxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFrQixFQUFFLE1BQWtCO1FBQ3hELE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbkYsQ0FBQztJQUFBLENBQUM7SUFFRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBa0IsRUFBRSxNQUFrQjtRQUM1RCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN6QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEdBQVE7UUFDckMsSUFBSSxNQUFNLEdBQW1CLFdBQVcsQ0FBQztRQUN6QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQyxJQUFJLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLE1BQU0sSUFBSSxRQUFRLEtBQUssV0FBVyxJQUFJLFFBQVEsS0FBSyxVQUFVLEVBQUU7WUFDdkcsTUFBTSxHQUFHLFFBQVEsQ0FBQztTQUNuQjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFHRCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQWEsRUFBRSxHQUFHO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNoQixPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2QixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUtELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1QsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNYO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1QsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFVLEVBQUUsU0FBeUIsRUFBRSxNQUFjO1FBQzNFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFCLE9BQU8sS0FBSyxDQUFDLENBQUM7U0FDZjtRQUVELElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNuQixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNoQixPQUFPLEtBQUssQ0FBQyxDQUFDO1NBQ2Y7UUFDRCxRQUFRLFNBQVMsRUFBRTtZQUNqQixLQUFLLFFBQVE7Z0JBQ1gsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFCLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDcEIsTUFBTTtZQUNSLEtBQUssVUFBVTtnQkFDYixNQUFNLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN6QixNQUFNO1lBQ1IsS0FBSyxXQUFXO2dCQUNkLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3JCLE1BQU07WUFDUjtnQkFDRSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7Z0JBQ2hCLE1BQU07U0FDVDtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsa0JBQWtCLENBQUksS0FBcUM7UUFDaEUsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUV6QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDckM7UUFFRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBVSxHQUFRO1FBQ2hDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDO0lBQ2pELENBQUM7SUFRRCxNQUFNLENBQUMscUJBQXFCLENBQUMsS0FBVSxFQUFFLFFBQWtCO1FBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFCLE9BQU87U0FDUjtRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxNQUFNLENBQUMsdUJBQXVCLENBQUMsb0JBQWtEO1FBQy9FLElBQUksY0FBYyxHQUFHLG9CQUFvQixDQUFDLFdBQVcsQ0FBQztRQUN0RCxNQUFNLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxXQUFXLENBQUM7UUFDckQsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsUUFBUSxDQUFDO1FBRS9DLElBQUksV0FBVyxFQUFFO1lBQ2YsY0FBYyxHQUFHLFdBQVcsQ0FBQztTQUM5QjtRQUNELElBQUk7WUFDRixjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBTSxjQUFjLENBQUMsQ0FBQztZQUNuRCxJQUFJLFdBQVcsRUFBRTtnQkFDZixjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQTthQUN0RTtTQUNGO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xCO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBWTtRQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxtRkFBbUYsQ0FBQyxDQUFBO1FBRS9HLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFO1lBQ25DLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDbkQ7UUFDRCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVoRCxDQUFDO0lBTUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFXO1FBQzFCLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLFVBQVUsR0FBRyxFQUFFLEtBQUs7WUFDaEQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtnQkFDL0MsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUMvQixPQUFPO2lCQUNSO2dCQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbkI7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNiLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQTRERCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsT0FBTyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUNsQzthQUFNO1lBQ0wsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsT0FBTyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDNUI7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBR0QsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQVU7UUFDaEMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztTQUN4RDthQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQ3BDLE9BQU8sS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDbEM7YUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUNwQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUM5QztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ2hDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN2QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7U0FDeEQ7YUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUNwQyxPQUFPLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQ2xDO2FBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDcEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDOUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQTBCLEVBQUUsU0FBMEIsRUFBRSxtQkFBMkI7UUFFckcsSUFBSSxNQUFNLEdBQW9CLEVBQUUsQ0FBQztRQUNqQyxJQUFJLE1BQU0sR0FBb0IsRUFBRSxDQUFDO1FBRWpDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM3QixNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDckY7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1NBQ3JGO1FBQ0QsT0FBTyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFJLEdBQVE7UUFDM0IsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN4RCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsTUFBTSxDQUFDLG9CQUFvQixDQUFDLGFBQXFDO1FBQy9ELElBQUksS0FBSyxHQUFHLGFBQWEsQ0FBQztRQUMxQixPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDdkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7U0FDMUI7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBUSxFQUFFLElBQVk7UUFDNUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3pDLElBQUksR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtnQkFDbEMsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDakI7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDOztBQTduQmUscUJBQWdCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUF3ZnpELHdCQUFtQixHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUU7SUFDbkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDMUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLE1BQWMsQ0FBQztRQUNuQixJQUFJLEdBQUcsS0FBSyxrQkFBa0IsRUFBRTtZQUM5QixNQUFNLEdBQUcsWUFBWSxDQUFDO1NBQ3ZCO2FBQU07WUFDTCxNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1NBQ3pEO1FBRUQsSUFBSSxHQUFHLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUMxQyxNQUFNLFNBQVMsR0FBRyxVQUFVLFVBQVUsR0FBRyxDQUFDO2dCQUMxQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUU7b0JBRWxDLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDbEc7cUJBQU07b0JBRUwsT0FBTyxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQ2xGO1lBQ0gsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFZCxPQUFPLElBQUksQ0FBQztTQUNiO1FBR0QsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVUsRUFBRTtZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBRTtZQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0UsQ0FBQyxDQUFDO0FBTWMsWUFBTyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ2pDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVPLGNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUN0QyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgZnJvbSwgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJRGF0YVNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2RhdGEtc2VydmljZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUZvcm1EYXRhQ29tcG9uZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mb3JtLWRhdGEtY29tcG9uZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJUGVybWlzc2lvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wZXJtaXNzaW9ucy1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPQ29uZmlndXJlTWVzc2FnZVNlcnZpY2VBcmdzIH0gZnJvbSAnLi4vdHlwZXMvY29uZmlndXJlLW1lc3NhZ2Utc2VydmljZS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgT0RhdGVWYWx1ZVR5cGUgfSBmcm9tICcuLi90eXBlcy9vLWRhdGUtdmFsdWUudHlwZSc7XG5pbXBvcnQgeyBCYXNlNjQgfSBmcm9tICcuL2Jhc2U2NCc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4vY29kZXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmV4cG9ydCBjbGFzcyBVdGlsIHtcblxuICBzdGF0aWMgcmVhZG9ubHkgY29sdW1uQWdncmVnYXRlcyA9IFsnc3VtJywgJ2NvdW50JywgJ2F2ZycsICdtaW4nLCAnbWF4J107XG5cbiAgc3RhdGljIGlzT2JqZWN0KHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsVHlwZSA9IHR5cGVvZiB2YWw7XG4gICAgcmV0dXJuIHZhbFR5cGUgPT09ICdvYmplY3QnO1xuICB9XG5cbiAgc3RhdGljIGlzQXJyYXkodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsIGluc3RhbmNlb2YgQXJyYXk7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VCb29sZWFuKHZhbHVlOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAoKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpICYmICh2YWx1ZS50b1VwcGVyQ2FzZSgpID09PSAnVFJVRScgfHwgdmFsdWUudG9VcHBlckNhc2UoKSA9PT0gJ1lFUycpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSAmJiAodmFsdWUudG9VcHBlckNhc2UoKSA9PT0gJ0ZBTFNFJyB8fCB2YWx1ZS50b1VwcGVyQ2FzZSgpID09PSAnTk8nKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoVXRpbC5pc0RlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlQXJyYXkodmFsdWU6IHN0cmluZywgZXhjbHVkZVJlcGVhdGVkOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmVzdWx0ID0gdmFsdWUuc3BsaXQoQ29kZXMuQVJSQVlfSU5QVVRfU0VQQVJBVE9SKTtcbiAgICB9XG4gICAgaWYgKGV4Y2x1ZGVSZXBlYXRlZCAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0ID0gQXJyYXkuZnJvbShuZXcgU2V0KHJlc3VsdCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggcGFyZW50IGtleXMgZXF1aXZhbGVuY2VzLlxuICAgKiBAcGFyYW0gIHBLZXlzQXJyYXkgQXJyYXkgb2Ygc3RyaW5ncy4gQWNjZXB0ZWQgZm9ybWF0OiBrZXkgfCBrZXk6YWxpYXNcbiAgICogQHJldHVybnMgT2JqZWN0XG4gICAqL1xuICBzdGF0aWMgcGFyc2VQYXJlbnRLZXlzRXF1aXZhbGVuY2VzKHBLZXlzQXJyYXk6IEFycmF5PHN0cmluZz4sIHNlcGFyYXRvcjogc3RyaW5nID0gJzonKTogb2JqZWN0IHtcbiAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSB7fTtcbiAgICBpZiAocEtleXNBcnJheSAmJiBwS2V5c0FycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgIHBLZXlzQXJyYXkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgYXV4ID0gaXRlbS5zcGxpdChzZXBhcmF0b3IpO1xuICAgICAgICBpZiAoYXV4ICYmIGF1eC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBpZiAoLy4rXFxbLitcXF0vLnRlc3QoYXV4WzFdKSkge1xuICAgICAgICAgICAgY29uc3QgZXF1aXZLZXkgPSBhdXhbMV0uc3Vic3RyaW5nKDAsIGF1eFsxXS5pbmRleE9mKCdbJykpO1xuICAgICAgICAgICAgY29uc3QgZXF1aXZWYWx1ZSA9IGF1eFsxXS5zdWJzdHJpbmcoYXV4WzFdLmluZGV4T2YoJ1snKSArIDEsIGF1eFsxXS5pbmRleE9mKCddJykpO1xuICAgICAgICAgICAgY29uc3QgZXF1aXYgPSB7fTtcbiAgICAgICAgICAgIGVxdWl2W2VxdWl2S2V5XSA9IGVxdWl2VmFsdWU7XG4gICAgICAgICAgICBlcXVpdmFsZW5jZXNbYXV4WzBdXSA9IGVxdWl2O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcXVpdmFsZW5jZXNbYXV4WzBdXSA9IGF1eFsxXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYXV4ICYmIGF1eC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBlcXVpdmFsZW5jZXNbaXRlbV0gPSBpdGVtO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlcztcbiAgfVxuXG4gIHN0YXRpYyBlbmNvZGVQYXJlbnRLZXlzKHBhcmVudEtleXM6IG9iamVjdCk6IHN0cmluZyB7XG4gICAgbGV0IGVuY29kZWQ6IHN0cmluZyA9ICcnO1xuICAgIGlmIChwYXJlbnRLZXlzKSB7XG4gICAgICBlbmNvZGVkID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShwYXJlbnRLZXlzKSk7XG4gICAgfVxuICAgIHJldHVybiBlbmNvZGVkO1xuICB9XG5cbiAgc3RhdGljIGRlY29kZVBhcmVudEtleXMocGFyZW50S2V5czogc3RyaW5nKTogb2JqZWN0IHtcbiAgICBsZXQgZGVjb2RlZCA9IHt9O1xuICAgIGlmIChwYXJlbnRLZXlzICYmIHBhcmVudEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZCA9IEJhc2U2NC5kZWNvZGUocGFyZW50S2V5cyk7XG4gICAgICBkZWNvZGVkID0gSlNPTi5wYXJzZShkKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlY29kZWQ7XG4gIH1cblxuICBzdGF0aWMgaXNBcnJheUVtcHR5KGFycmF5OiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQoYXJyYXkpIHx8IGFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBpc09iamVjdEVtcHR5KG9iajogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3ZXRoZXIgc3BlY2lmaWVkIHNlcnZpY2UgYXMgYXJndW1lbnQgaW1wbGVtZW50cyAnSURhdGFTZXJ2aWNlJyBpbnRlcmZhY2VcbiAgICogQHBhcmFtIGFyZyBUaGUgc2VydmljZSBpbnN0YW5jZSBmb3IgY2hlY2tpbmcuXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICovXG4gIHN0YXRpYyBpc0RhdGFTZXJ2aWNlKGFyZzogYW55KTogYXJnIGlzIElEYXRhU2VydmljZSB7XG4gICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkIHx8IGFyZyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKChhcmcgYXMgSURhdGFTZXJ2aWNlKS5nZXREZWZhdWx0U2VydmljZUNvbmZpZ3VyYXRpb24gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKGFyZyBhcyBJRGF0YVNlcnZpY2UpLmNvbmZpZ3VyZVNlcnZpY2UgIT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdldGhlciBzcGVjaWZpZWQgc2VydmljZSBhcyBhcmd1bWVudCBpbXBsZW1lbnRzICdJRGF0YVNlcnZpY2UnIGludGVyZmFjZVxuICAgKiBAcGFyYW0gYXJnIFRoZSBzZXJ2aWNlIGluc3RhbmNlIGZvciBjaGVja2luZy5cbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgc3RhdGljIGlzUGVybWlzc2lvbnNTZXJ2aWNlKGFyZzogYW55KTogYXJnIGlzIElQZXJtaXNzaW9uc1NlcnZpY2Uge1xuICAgIGlmIChhcmcgPT09IHVuZGVmaW5lZCB8fCBhcmcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICgoYXJnIGFzIElQZXJtaXNzaW9uc1NlcnZpY2UpLmxvYWRQZXJtaXNzaW9ucyAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2V0aGVyIHNwZWNpZmllZCBjb21wb25lbnQgYXMgYXJndW1lbnQgaW1wbGVtZW50cyAnSUZvcm1EYXRhQ29tcG9uZW50JyBpbnRlcmZhY2VcbiAgICogQHBhcmFtIGFyZyBUaGUgY29tcG9uZW50IGluc3RhbmNlIGZvciBjaGVja2luZy5cbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgc3RhdGljIGlzRm9ybURhdGFDb21wb25lbnQoYXJnOiBhbnkpOiBhcmcgaXMgSUZvcm1EYXRhQ29tcG9uZW50IHtcbiAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoKGFyZyBhcyBJRm9ybURhdGFDb21wb25lbnQpLmlzQXV0b21hdGljQmluZGluZyAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIGlzIGVxdWFsIHR3byBvYmplY3RzXG4gICAqIEBwYXJhbSBhIE9iamVjdCAxXG4gICAqIEBwYXJhbSBiIE9iamVjdCAyXG4gICAqXG4gICAqL1xuICBzdGF0aWMgaXNFcXVpdmFsZW50KGEsIGIpIHtcbiAgICAvLyBDcmVhdGUgYXJyYXlzIG9mIHByb3BlcnR5IG5hbWVzXG4gICAgY29uc3QgYVByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSk7XG4gICAgY29uc3QgYlByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYik7XG5cbiAgICAvLyBJZiBudW1iZXIgb2YgcHJvcGVydGllcyBpcyBkaWZmZXJlbnQsIG9iamVjdHMgYXJlIG5vdCBlcXVpdmFsZW50XG4gICAgaWYgKGFQcm9wcy5sZW5ndGggIT09IGJQcm9wcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcHJvcE5hbWUgPSBhUHJvcHNbaV07XG4gICAgICAvLyBJZiB2YWx1ZXMgb2Ygc2FtZSBwcm9wZXJ0eSBhcmUgbm90IGVxdWFsLCBvYmplY3RzIGFyZSBub3QgZXF1aXZhbGVudFxuICAgICAgbGV0IGJWYWx1ZSA9IGJbcHJvcE5hbWVdO1xuICAgICAgaWYgKHR5cGVvZiBhW3Byb3BOYW1lXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgaW50QiA9IHBhcnNlSW50KGJWYWx1ZSwgMTApO1xuICAgICAgICBiVmFsdWUgPSBpc05hTihpbnRCKSA/IGJWYWx1ZSA6IGludEI7XG4gICAgICB9XG4gICAgICBpZiAoYVtwcm9wTmFtZV0gIT09IGJWYWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWFkZSBpdCB0aGlzIGZhciwgb2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0aWMgZXF1YWxzKG8xOiBhbnksIG8yOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAobzEgPT09IG8yKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG8xID09PSBudWxsIHx8IG8yID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChvMSAhPT0gbzEgJiYgbzIgIT09IG8yKSB7XG4gICAgICAvLyBOYU4gPT09IE5hTlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHQxID0gdHlwZW9mIG8xO1xuICAgIGNvbnN0IHQyID0gdHlwZW9mIG8yO1xuICAgIGxldCBsZW5ndGg6IG51bWJlcjtcbiAgICBsZXQga2V5OiBhbnk7XG4gICAgbGV0IGtleVNldDogYW55O1xuICAgIGlmICh0MSA9PT0gdDIgJiYgdDEgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvMSkpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG8yKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZW5ndGggPSBvMS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPT09IG8yLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoa2V5ID0gMDsga2V5IDwgbGVuZ3RoOyBrZXkrKykge1xuICAgICAgICAgICAgaWYgKCFVdGlsLmVxdWFscyhvMVtrZXldLCBvMltrZXldKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvMikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAga2V5U2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZm9yIChrZXkgaW4gbzEpIHtcbiAgICAgICAgICBpZiAoIVV0aWwuZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGtleVNldFtrZXldID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGtleSBpbiBvMikge1xuICAgICAgICAgIGlmICghKGtleSBpbiBrZXlTZXQpICYmIHR5cGVvZiBvMltrZXldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYSByYW5kb20gbnVtYmVyXG4gICovXG4gIHN0YXRpYyByYW5kb21OdW1iZXIoKSB7XG4gICAgY29uc3QgcmFuZG9tQXJyYXkgPSBuZXcgVWludDMyQXJyYXkoMSk7XG4gICAgd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMocmFuZG9tQXJyYXkpO1xuICAgIHJldHVybiByYW5kb21BcnJheVswXTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHByb3ZpZGVkIHN0cmluZyBpbiBsb3dlcmNhc2UgYW5kIHdpdGhvdXQgYWNjZW50IG1hcmtzLlxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHRleHQgdG8gbm9ybWFsaXplXG4gICAqL1xuICBzdGF0aWMgbm9ybWFsaXplU3RyaW5nKHZhbHVlOiBzdHJpbmcsIHRvTG93ZXJDYXNlOiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHZhbHVlLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuICAgICAgICBpZiAodG9Mb3dlckNhc2UpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvdmlkZWQgYXJyYXkgZmxhdHRlbmQuXG4gICAqIEBwYXJhbSBhcnJheSB0aGUgYXJyYXkgdG8gZmxhdFxuICAgKi9cbiAgc3RhdGljIGZsYXR0ZW4oYXJyYXk6IEFycmF5PGFueT4pOiBBcnJheTxhbnk+IHtcbiAgICBsZXQgZmxhdHRlbmVkID0gW107XG4gICAgZm9yIChjb25zdCBjdXJyZW50IG9mIGFycmF5KSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY3VycmVudCkpIHtcbiAgICAgICAgZmxhdHRlbmVkLnB1c2goY3VycmVudCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBjaGlsZEN1cnJlbnQgb2YgY3VycmVudCkge1xuICAgICAgICBmbGF0dGVuZWQucHVzaChjaGlsZEN1cnJlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmbGF0dGVuZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCB3aXRoIGFsbCB0aGUgdmFsdWVzIGZyb20gdGhlIHByb3ZpZGVkIG9iamVjdC5cbiAgICogQHBhcmFtIG9iaiB0aGUgb2JqZWN0XG4gICAqL1xuICBzdGF0aWMgZ2V0VmFsdWVzRnJvbU9iamVjdChvYmo6IG9iamVjdCA9IHt9KTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgYXJyYXk6IEFycmF5PGFueT4gPSBbXTtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGFycmF5LnB1c2goVXRpbC5nZXRWYWx1ZXNGcm9tT2JqZWN0KG9ialtrZXldKSk7XG4gICAgICB9XG4gICAgICBhcnJheS5wdXNoKG9ialtrZXldKTtcbiAgICB9KTtcbiAgICByZXR1cm4gVXRpbC5mbGF0dGVuKGFycmF5KTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZUljb25Qb3NpdGlvbih2YWx1ZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQgPSBkZWZhdWx0VmFsdWUgfHwgQ29kZXMuSUNPTl9QT1NJVElPTl9MRUZUO1xuICAgIGNvbnN0IGF2YWlsYWJsZVBvc2l0aW9ucyA9IFtDb2Rlcy5JQ09OX1BPU0lUSU9OX0xFRlQsIENvZGVzLklDT05fUE9TSVRJT05fUklHSFRdO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIGlmIChhdmFpbGFibGVQb3NpdGlvbnMuaW5kZXhPZihyZXN1bHQpID09PSAtMSkge1xuICAgICAgcmVzdWx0ID0gZGVmYXVsdFZhbHVlIHx8IENvZGVzLklDT05fUE9TSVRJT05fTEVGVDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBjb3B5VG9DbGlwYm9hcmQoZGF0YTogc3RyaW5nKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29weScsIChlOiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgZS5jbGlwYm9hcmREYXRhLnNldERhdGEoJ3RleHQvcGxhaW4nLCBkYXRhKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvcHknLCBudWxsKTtcbiAgICB9KTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICB9XG5cbiAgc3RhdGljIGNoZWNrUGl4ZWxzVmFsdWVTdHJpbmcodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgncHgnKSA6IGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGV4dHJhY3RQaXhlbHNWYWx1ZSh2YWx1ZTogYW55LCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCByZXN1bHQ6IG51bWJlciA9IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoVXRpbC5jaGVja1BpeGVsc1ZhbHVlU3RyaW5nKHZhbHVlKSkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VGbG9hdCh2YWx1ZS5zdWJzdHIoMCwgdmFsdWUubGVuZ3RoIC0gJ3B4Jy5sZW5ndGgpKTtcbiAgICAgIHJlc3VsdCA9IGlzTmFOKHBhcnNlZCkgPyBkZWZhdWx0VmFsdWUgOiBwYXJzZWQ7XG4gICAgfVxuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChyZXN1bHQpID8gcmVzdWx0IDogZGVmYXVsdFZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBBZGRlZCBjbGFzcyAnYWNjZW50JyBpbiA8bWF0LWZvcm0tZmllbGQ+IGFuZCBzZXQgdGhlIGNvbG9yICBhY2NlbnQgaW4gdGhlIGljb25zXG4gICAqIEBwYXJhbSBlbFJlZlxuICAgKiBAcGFyYW0gb0lucHV0c09wdGlvbnNcbiAgICovXG5cbiAgc3RhdGljIHBhcnNlT0lucHV0c09wdGlvbnMoZWxSZWYsIG9JbnB1dHNPcHRpb25zKSB7XG5cbiAgICBpZiAob0lucHV0c09wdGlvbnMuaWNvbkNvbG9yID09PSBDb2Rlcy5PX0lOUFVUU19PUFRJT05TX0NPTE9SX0FDQ0VOVCkge1xuICAgICAgY29uc3QgbWF0Rm9ybUZpZWxkRUwgPSBlbFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtYXQtZm9ybS1maWVsZCcpWzBdO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG1hdEZvcm1GaWVsZEVMKSkge1xuICAgICAgICBtYXRGb3JtRmllbGRFTC5jbGFzc0xpc3QuYWRkKCdhY2NlbnQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiAgUmV0dXJuIHN0cmluZyB3aXRoIGVzY2FwZWQgc3BlY2lhbCBjaGFyYWN0ZXJcbiAgICovXG4gIHN0YXRpYyBlc2NhcGVTcGVjaWFsQ2hhcmFjdGVyKFM6IHN0cmluZyk6IHN0cmluZyB7XG5cbiAgICBjb25zdCBzdHIgPSBTdHJpbmcoUyk7XG5cbiAgICBjb25zdCBjcExpc3QgPSBBcnJheS5mcm9tKHN0cltTeW1ib2wuaXRlcmF0b3JdKCkpO1xuXG4gICAgY29uc3QgY3VMaXN0ID0gW107XG4gICAgZm9yIChjb25zdCBjIG9mIGNwTGlzdCkge1xuICAgICAgLy8gaS4gSWYgYyBpcyBhIFNwZWNpYWxDaGFyYWN0ZXIgdGhlbiBkbzpcbiAgICAgIGlmICgnXiRcXFxcLiorPygpW117fXwnLmluZGV4T2YoYykgIT09IC0xKSB7XG4gICAgICAgIC8vIGEuIEFwcGVuZCBcIlxcXCIgdG8gY3VMaXN0LlxuICAgICAgICBjdUxpc3QucHVzaCgnXFxcXCcpO1xuICAgICAgfVxuICAgICAgLy8gQXBwZW5kIGMgdG8gY3BMaXN0LlxuICAgICAgY3VMaXN0LnB1c2goYyk7XG4gICAgfVxuICAgIGNvbnN0IEwgPSBjdUxpc3Quam9pbignJyk7XG4gICAgcmV0dXJuIEw7XG5cbiAgfVxuXG4gIHN0YXRpYyBpc0FycmF5RXF1YWwoYXJyYXkxOiBBcnJheTxhbnk+LCBhcnJheTI6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gYXJyYXkxLmxlbmd0aCA9PT0gYXJyYXkyLmxlbmd0aCAmJiBhcnJheTEuZXZlcnkoKHYsIGkpID0+IHYgPT09IGFycmF5MltpXSlcbiAgfTtcblxuICBzdGF0aWMgZGlmZmVyZW5jZUFycmF5cyhhcnJheTE6IEFycmF5PGFueT4sIGFycmF5MjogQXJyYXk8YW55Pik6IEFycmF5PGFueT4ge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBhcnJheTEuZmlsdGVyKG9iaiA9PiB7XG4gICAgICByZXR1cm4gIWFycmF5Mi5zb21lKG9iajIgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lcXVhbHMob2JqLCBvYmoyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBkaWZmZXJlbmNlO1xuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUb09EYXRlVmFsdWVUeXBlKHZhbDogYW55KTogT0RhdGVWYWx1ZVR5cGUge1xuICAgIGxldCByZXN1bHQ6IE9EYXRlVmFsdWVUeXBlID0gJ3RpbWVzdGFtcCc7XG4gICAgY29uc3QgbG93ZXJWYWwgPSAodmFsIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlclZhbCA9PT0gJ3N0cmluZycgfHwgbG93ZXJWYWwgPT09ICdkYXRlJyB8fCBsb3dlclZhbCA9PT0gJ3RpbWVzdGFtcCcgfHwgbG93ZXJWYWwgPT09ICdpc28tODYwMScpIHtcbiAgICAgIHJlc3VsdCA9IGxvd2VyVmFsO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cblxuICBzdGF0aWMgdW5pcXVlQnkoYTogQXJyYXk8YW55Piwga2V5KSB7XG4gICAgY29uc3Qgc2VlbiA9IHt9O1xuICAgIHJldHVybiBhLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgayA9IGtleShpdGVtKTtcbiAgICAgIHJldHVybiBzZWVuLmhhc093blByb3BlcnR5KGspID8gZmFsc2UgOiAoc2VlbltrXSA9IHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmVzIHR3byBzdHJpbmdzIGFuZCByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgaWYgZmlyc3QgYXJndW1lbnQgaXMgbGVzcyB0aGFuIHNlY29uZCBhcmd1bWVudCwgemVybyBpZiB0aGV5J3JlIGVxdWFsIGFuZCBhIHBvc2l0aXZlIHZhbHVlIG90aGVyd2lzZS5cbiAgICovXG4gIHN0YXRpYyBjb21wYXJlKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAoYSA8IGIpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKGEgPiBiKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VCeVZhbHVlVHlwZSh2YWx1ZTogYW55LCB2YWx1ZVR5cGU6IE9EYXRlVmFsdWVUeXBlLCBmb3JtYXQ6IHN0cmluZykge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSB2YWx1ZTtcbiAgICBjb25zdCBtID0gbW9tZW50KHZhbHVlKTtcbiAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmVzdWx0ID0gbS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmVzdWx0ID0gbS50b0RhdGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpc28tODYwMSc6XG4gICAgICAgIHJlc3VsdCA9IG0udG9JU09TdHJpbmcoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0aW1lc3RhbXAnOlxuICAgICAgICByZXN1bHQgPSBtLnZhbHVlT2YoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXN1bHQgPSB2b2lkIDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIHdyYXBJbnRvT2JzZXJ2YWJsZTxUPih2YWx1ZTogVCB8IFByb21pc2U8VD4gfCBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoVXRpbC5pc1Byb21pc2UodmFsdWUpKSB7XG4gICAgICAvLyBVc2UgYFByb21pc2UucmVzb2x2ZSgpYCB0byB3cmFwIHByb21pc2UtbGlrZSBpbnN0YW5jZXMuXG4gICAgICByZXR1cm4gZnJvbShQcm9taXNlLnJlc29sdmUodmFsdWUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2YodmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGlzUHJvbWlzZTxUID0gYW55PihvYmo6IGFueSk6IG9iaiBpcyBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gISFvYmogJiYgdHlwZW9mIG9iai50aGVuID09PSAnZnVuY3Rpb24nO1xuICB9XG5cblxuICAvKipcbiAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIHByb3ZpZGVkIHNlcnZpY2UgY2xhc3NcbiAqIEBwYXJhbSBjbGF6eiB0aGUgY2xhc3MgcmVmZXJlbmNlXG4gKiBAcGFyYW0gaW5qZWN0b3IgdGhlIGluamVjdG9yXG4gKi9cbiAgc3RhdGljIGNyZWF0ZVNlcnZpY2VJbnN0YW5jZShjbGF6ejogYW55LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKGNsYXp6KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0luc3RhbmNlID0gbmV3IGNsYXp6KGluamVjdG9yKTtcbiAgICByZXR1cm4gbmV3SW5zdGFuY2U7XG4gIH1cblxuICBzdGF0aWMgY29uZmlndXJlTWVzc2FnZVNlcnZpY2UoY29uZmlndXJlU2VydmljZUFyZ3M6IE9Db25maWd1cmVNZXNzYWdlU2VydmljZUFyZ3MpOiBhbnkge1xuICAgIGxldCBtZXNzYWdlU2VydmljZSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLmJhc2VTZXJ2aWNlO1xuICAgIGNvbnN0IHNlcnZpY2VUeXBlID0gY29uZmlndXJlU2VydmljZUFyZ3Muc2VydmljZVR5cGU7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5pbmplY3RvcjtcblxuICAgIGlmIChzZXJ2aWNlVHlwZSkge1xuICAgICAgbWVzc2FnZVNlcnZpY2UgPSBzZXJ2aWNlVHlwZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIG1lc3NhZ2VTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0PGFueT4obWVzc2FnZVNlcnZpY2UpO1xuICAgICAgaWYgKHNlcnZpY2VUeXBlKSB7XG4gICAgICAgIG1lc3NhZ2VTZXJ2aWNlID0gVXRpbC5jcmVhdGVTZXJ2aWNlSW5zdGFuY2UobWVzc2FnZVNlcnZpY2UsIGluamVjdG9yKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlU2VydmljZTtcbiAgfVxuXG4gIHN0YXRpYyBpc0Jhc2U2NChmaWxlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCgvXihbQS1aYS16MC05K1xcL117NH0pKihbQS1aYS16MC05K1xcL117NH18W0EtWmEtejAtOStcXC9dezN9PXxbQS1aYS16MC05K1xcL117Mn09PSkkL2cpXG5cbiAgICBpZiAoZmlsZS5zdWJzdHJpbmcoMCwgNCkgPT09ICdkYXRhJykge1xuICAgICAgZmlsZSA9IGZpbGUuc3Vic3RyaW5nKGZpbGUuaW5kZXhPZignYmFzZTY0JykgKyA3KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdHRlcm4udGVzdChmaWxlLnJlcGxhY2UoL1xccysvZywgJycpKTtcblxuICB9XG4gIC8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IHRvIGEgSlNPTiBzdHJpbmcsIGF2b2lkaW5nIGNpcmN1bGFyIHJlZmVyZW5jZXMuXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICogQHJldHVybnMgQSBKU09OIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG9iamVjdC5cbiAqL1xuICBzdGF0aWMgc3RyaW5naWZ5KG9iajogb2JqZWN0KSB7XG4gICAgbGV0IGNhY2hlID0gW107XG4gICAgbGV0IHN0ciA9IEpTT04uc3RyaW5naWZ5KG9iaiwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKGNhY2hlLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICAgIHJldHVybjsgLy8gQXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgICAgICB9XG4gICAgICAgIGNhY2hlLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICAgIGNhY2hlID0gbnVsbDtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgc3RhdGljIHJlYWRvbmx5IG9iamVjdFRvUXVlcnlTdHJpbmcgPSAoaW5pdGlhbE9iaikgPT4ge1xuICAgIGNvbnN0IHJlZHVjZXIgPSAob2JqLCBwYXJlbnRQcmVmaXggPSBudWxsKSA9PiAocHJldiwga2V5KSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBvYmpba2V5XTtcbiAgICAgIGtleSA9IGVuY29kZVVSSUNvbXBvbmVudChrZXkpO1xuICAgICAgbGV0IHByZWZpeDogc3RyaW5nO1xuICAgICAgaWYgKGtleSA9PT0gJ2ZpbHRlclBhcmVudEtleXMnKSB7XG4gICAgICAgIHByZWZpeCA9IHBhcmVudFByZWZpeDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZWZpeCA9IHBhcmVudFByZWZpeCA/IGAke3BhcmVudFByZWZpeH1bJHtrZXl9XWAgOiBrZXk7XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgPT09ICdmaWx0ZXInICYmICFVdGlsLmlzT2JqZWN0RW1wdHkob2JqW2tleV0pKSB7XG4gICAgICAgIHByZXYucHVzaChPYmplY3Qua2V5cyh2YWwpLm1hcChpdGVtZmlsdGVyID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJLZXkgPSBgZmlsdGVyWyR7aXRlbWZpbHRlcn1dYDtcbiAgICAgICAgICBpZiAoVXRpbC5pc09iamVjdCh2YWxbaXRlbWZpbHRlcl0pKSB7XG4gICAgICAgICAgICAvKiogSW4gY2FzZSBmaWx0ZXIgYW5kIGJhc2ljIGV4cHJlc2lvbiovXG4gICAgICAgICAgICByZXR1cm4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbHRlcktleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHZhbFtpdGVtZmlsdGVyXSkpfWA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8qKiBJbiBjYXNlIHRoZSBzaW1wbGUgZmlsdGVyIHRvIGVzcGFwZSBxdW90ZXMqL1xuICAgICAgICAgICAgcmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChmaWx0ZXJLZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWxbaXRlbWZpbHRlcl0pfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9KS5qb2luKCcmJykpO1xuXG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfVxuXG5cbiAgICAgIGlmICh2YWwgPT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByZXYucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQocHJlZml4KX09YCk7XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfVxuXG4gICAgICBpZiAoWydudW1iZXInLCAnYm9vbGVhbicsICdzdHJpbmcnXS5pbmNsdWRlcyh0eXBlb2YgdmFsKSkge1xuICAgICAgICBwcmV2LnB1c2goYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHByZWZpeCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbCl9YCk7XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfVxuXG4gICAgICBwcmV2LnB1c2goT2JqZWN0LmtleXModmFsKS5yZWR1Y2UocmVkdWNlcih2YWwsIHByZWZpeCksIFtdKS5qb2luKCcmJykpO1xuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhpbml0aWFsT2JqKS5yZWR1Y2UocmVkdWNlcihpbml0aWFsT2JqKSwgW10pLmpvaW4oJyYnKTtcbiAgfTtcblxuICAvKipcbiAgICogTWFwIGtleXMgb2Ygb2JqZWN0XG4gICAqIEZvciBleGFtcGxlOiBjb252ZXJ0aW5nIHRoZSBrZXlzIG9mIGFuIG9iamVjdCB0byB1cHBlcmNhc2VcbiAgICovXG4gIHN0YXRpYyByZWFkb25seSBtYXBLZXlzID0gKG9iaiwgZm4pID0+XG4gICAgT2JqZWN0LmtleXMob2JqKS5yZWR1Y2UoKGFjYywgaykgPT4ge1xuICAgICAgYWNjW2ZuKG9ialtrXSwgaywgb2JqKV0gPSBvYmpba107XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICBzdGF0aWMgcmVhZG9ubHkgbWFwVmFsdWVzID0gKG9iaiwgZm4pID0+XG4gICAgT2JqZWN0LmtleXMob2JqKS5yZWR1Y2UoKGFjYywgaykgPT4gKHsgLi4uYWNjLCBba106IGZuKG9ialtrXSkgfSksIHt9KTtcblxuXG4gIHN0YXRpYyB0b0xvd2VyQ2FzZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHRvVXBwZXJDYXNlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuXG4gIHN0YXRpYyBwYXJzZVRvTG93ZXJDYXNlKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoVXRpbC5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoeDogc3RyaW5nKSA9PiB4LnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gVXRpbC5tYXBLZXlzKHZhbHVlLCBVdGlsLnRvTG93ZXJDYXNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlVG9VcHBlckNhc2UodmFsdWU6IGFueSkge1xuICAgIGlmIChVdGlsLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUubWFwKCh4OiBzdHJpbmcpID0+IHgudG9Mb2NhbGVVcHBlckNhc2UoKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9Mb2NhbGVVcHBlckNhc2UoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBVdGlsLm1hcEtleXModmFsdWUsIFV0aWwudG9VcHBlckNhc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzdGF0aWMgc29ydEZ1bmN0aW9uKHByb3BlcnR5QTogc3RyaW5nIHwgbnVtYmVyLCBwcm9wZXJ0eUI6IHN0cmluZyB8IG51bWJlciwgYWN0aXZlU29ydERpcmVjdGlvbjogc3RyaW5nKSB7XG5cbiAgICBsZXQgdmFsdWVBOiBzdHJpbmcgfCBudW1iZXIgPSAnJztcbiAgICBsZXQgdmFsdWVCOiBzdHJpbmcgfCBudW1iZXIgPSAnJztcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChwcm9wZXJ0eUEpKSB7XG4gICAgICB2YWx1ZUEgPSBpc05hTigrcHJvcGVydHlBKSA/IHByb3BlcnR5QS50b1N0cmluZygpLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogK3Byb3BlcnR5QTtcbiAgICB9XG5cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocHJvcGVydHlCKSkge1xuICAgICAgdmFsdWVCID0gaXNOYU4oK3Byb3BlcnR5QikgPyBwcm9wZXJ0eUIudG9TdHJpbmcoKS50cmltKCkudG9Mb3dlckNhc2UoKSA6ICtwcm9wZXJ0eUI7XG4gICAgfVxuICAgIHJldHVybiAodmFsdWVBIDw9IHZhbHVlQiA/IC0xIDogMSkgKiAoYWN0aXZlU29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAxIDogLTEpO1xuICB9XG5cbiAgc3RhdGljIGNsb25lQXJyYXk8VD4oYXJyOiBUW10pOiBUW10ge1xuICAgIGNvbnN0IGNsb25lZEFycmF5ID0gYXJyLm1hcCgoeCkgPT4gT2JqZWN0LmFzc2lnbih7fSwgeCkpXG4gICAgcmV0dXJuIGNsb25lZEFycmF5O1xuICB9XG5cbiAgc3RhdGljIGdldExhc3RBY3RpdmF0ZVJvdXRlKHJvdXRlU25hcHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHtcbiAgICBsZXQgY2hpbGQgPSByb3V0ZVNuYXBzaG90O1xuICAgIHdoaWxlIChjaGlsZC5maXJzdENoaWxkKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkLmZpcnN0Q2hpbGQ7XG4gICAgfVxuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRWYWx1ZUZyb21QYXRoKG9iajogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghb2JqIHx8ICFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKGFjYyAmJiB0eXBlb2YgYWNjID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gYWNjW2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sIG9iaik7XG4gIH1cbn1cbiJdfQ==
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -14,4 +14,5 @@ export * from './lib/util/index';
|
|
|
14
14
|
export * from './lib/shared/index';
|
|
15
15
|
export * from './lib/validators/o-validators';
|
|
16
16
|
export * from './lib/types/index';
|
|
17
|
-
|
|
17
|
+
export * from './lib/injection-tokens/index';
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsY0FBYywrQkFBK0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RCxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsb0JBQW9CLENBQUM7QUFFbkMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsOEJBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG9udGltaXplLXdlYi1uZ3hcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9vbnRpbWl6ZS13ZWItbmd4Lm1vZHVsZSc7XG5cbmV4cG9ydCB7IE9OVElNSVpFX01PRFVMRVMsIE9udGltaXplV2ViVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnLi9saWIvY29uZmlnL28tbW9kdWxlcyc7XG5leHBvcnQgeyBPTlRJTUlaRV9QUk9WSURFUlMgfSBmcm9tICcuL2xpYi9jb25maWcvby1wcm92aWRlcnMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25maWcvYXBwLWNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9NYWluTGF1bmNoZXInO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcy9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZWNvcmF0b3JzL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJmYWNlcy9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xheW91dHMvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbC9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmFsaWRhdG9ycy9vLXZhbGlkYXRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHlwZXMvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW5qZWN0aW9uLXRva2Vucy9pbmRleCc7XG4iXX0=
|