@libs-ui/components-list 0.2.97 → 0.2.98
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/defines/list.define.d.ts +1 -1
- package/esm2022/interfaces/function-control-event.interface.mjs +1 -1
- package/esm2022/templates/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/templates/radio/radio.component.mjs +3 -3
- package/esm2022/templates/tag/tag.component.mjs +3 -3
- package/esm2022/templates/templates.component.abstract.mjs +3 -3
- package/esm2022/templates/text/text.component.mjs +3 -3
- package/fesm2022/libs-ui-components-list.mjs +10 -10
- package/fesm2022/libs-ui-components-list.mjs.map +1 -1
- package/interfaces/function-control-event.interface.d.ts +2 -2
- package/list.component.d.ts +1 -1
- package/package.json +1 -1
- package/templates/templates.component.abstract.d.ts +1 -1
|
@@ -137,7 +137,7 @@ export class LibsUiComponentsListTagComponent extends LibsUiComponentsListTempla
|
|
|
137
137
|
this.outSelectKey.emit(undefined);
|
|
138
138
|
}
|
|
139
139
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsListTagComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
140
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsListTagComponent, isStandalone: true, selector: "libs_ui-components-list-templates_tag", usesInheritance: true, ngImport: i0, template: "@if (configTemplateTag(); as configTemplateTag) {\n <div class=\"w-full h-full relative\"\n LibsUiComponentsScrollOverlayDirective\n (outScrollBottom)=\"handlerScrollBottom()\">\n <div class=\"relative max-h-[150px] h-full {{ configTemplateTag.classIncludeContainer }}\"\n [ngClass]=\"{'flex flex-wrap': !configTemplateTag.ignoreItemFlexWrap}\"\n [class.min-h-[45px]]=\"!loading() && (!items() || !items().length)\"\n [class.min-h-[104px]]=\"loading() && items()\">\n @for (item of items(); track item()[fieldKey()]) {\n <div [class.libs-ui-disable]=\"loading() || disable()\"\n [class.pointer-events-none]=\"loading() || disable()\"\n [class]=\"item().classContainerItem\">\n @if (
|
|
140
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsListTagComponent, isStandalone: true, selector: "libs_ui-components-list-templates_tag", usesInheritance: true, ngImport: i0, template: "@if (configTemplateTag(); as configTemplateTag) {\n <div class=\"w-full h-full relative\"\n LibsUiComponentsScrollOverlayDirective\n (outScrollBottom)=\"handlerScrollBottom()\">\n <div class=\"relative max-h-[150px] h-full {{ configTemplateTag.classIncludeContainer }}\"\n [ngClass]=\"{'flex flex-wrap': !configTemplateTag.ignoreItemFlexWrap}\"\n [class.min-h-[45px]]=\"!loading() && (!items() || !items().length)\"\n [class.min-h-[104px]]=\"loading() && items()\">\n @for (item of items(); track item()[fieldKey()]) {\n <div [class.libs-ui-disable]=\"loading() || disable()\"\n [class.pointer-events-none]=\"loading() || disable()\"\n [class]=\"item().classContainerItem\">\n @if (item().bullet; as bullet) {\n <div [class]=\"item().classItem || 'rounded-[10px] px-[8px] py-[1px] mb-[8px] mr-[8px]'\"\n [class.w-max]=\"configTemplateTag?.ignoreItemFlexWrap\"\n [style.background-color]=\"bullet().backgroundColor\"\n [style.color]=\"bullet().color\"\n (click)=\"handlerSelectItem($event,item())\">\n <span [innerHTML]=\"item().fieldLabel\"></span>\n </div>\n } @else {\n <div (click)=\"handlerSelectItem($event, item())\"\n [class]=\"item().classItem || 'rounded-[20px] mb-[8px] mr-[8px] py-[4px] px-[8px] flex items-center cursor-pointer'\"\n [class.bg-[#e9f1fe]]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length\"\n [class.libs-ui-color-global]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length\">\n @if (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length) {\n <div class=\"mr-[8px] text-[12px] libs-ui-icon-check libs-ui-color-global\"></div>\n }\n <span class=\"libs-ui-font-h6r\"\n [innerHTML]=\"item().fieldLabel\"></span>\n </div>\n }\n </div>\n }\n @if (!items() || !items().length) {\n <div [class]=\"'libs-ui-font-h4r text-[#9ca2ad] '+ (config()?.textNoDataClassInclude ?? 'py-[4px]')\">\n @if (!keySearch() && !loading()) {\n <ng-container>{{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}</ng-container>\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container>{{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}</ng-container>\n }\n @if (loading()) {\n <ng-container> </ng-container>\n }\n </div>\n }\n </div>\n @if (loading()) {\n <div class=\"w-full h-full absolute top-0\">\n <libs_ui-components-spinner [size]=\"'medium'\" />\n </div>\n }\n </div>\n}\n", dependencies: [{ kind: "ngmodule", type: VirtualScrollerModule }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }, { kind: "pipe", type: LibsUiCheckSelectedByKeyPipe, name: "LibsUiCheckSelectedByKeyPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
141
141
|
}
|
|
142
142
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsListTagComponent, decorators: [{
|
|
143
143
|
type: Component,
|
|
@@ -146,6 +146,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
146
146
|
LibsUiComponentsSpinnerComponent,
|
|
147
147
|
LibsUiComponentsScrollOverlayDirective,
|
|
148
148
|
LibsUiCheckSelectedByKeyPipe
|
|
149
|
-
], template: "@if (configTemplateTag(); as configTemplateTag) {\n <div class=\"w-full h-full relative\"\n LibsUiComponentsScrollOverlayDirective\n (outScrollBottom)=\"handlerScrollBottom()\">\n <div class=\"relative max-h-[150px] h-full {{ configTemplateTag.classIncludeContainer }}\"\n [ngClass]=\"{'flex flex-wrap': !configTemplateTag.ignoreItemFlexWrap}\"\n [class.min-h-[45px]]=\"!loading() && (!items() || !items().length)\"\n [class.min-h-[104px]]=\"loading() && items()\">\n @for (item of items(); track item()[fieldKey()]) {\n <div [class.libs-ui-disable]=\"loading() || disable()\"\n [class.pointer-events-none]=\"loading() || disable()\"\n [class]=\"item().classContainerItem\">\n @if (
|
|
149
|
+
], template: "@if (configTemplateTag(); as configTemplateTag) {\n <div class=\"w-full h-full relative\"\n LibsUiComponentsScrollOverlayDirective\n (outScrollBottom)=\"handlerScrollBottom()\">\n <div class=\"relative max-h-[150px] h-full {{ configTemplateTag.classIncludeContainer }}\"\n [ngClass]=\"{'flex flex-wrap': !configTemplateTag.ignoreItemFlexWrap}\"\n [class.min-h-[45px]]=\"!loading() && (!items() || !items().length)\"\n [class.min-h-[104px]]=\"loading() && items()\">\n @for (item of items(); track item()[fieldKey()]) {\n <div [class.libs-ui-disable]=\"loading() || disable()\"\n [class.pointer-events-none]=\"loading() || disable()\"\n [class]=\"item().classContainerItem\">\n @if (item().bullet; as bullet) {\n <div [class]=\"item().classItem || 'rounded-[10px] px-[8px] py-[1px] mb-[8px] mr-[8px]'\"\n [class.w-max]=\"configTemplateTag?.ignoreItemFlexWrap\"\n [style.background-color]=\"bullet().backgroundColor\"\n [style.color]=\"bullet().color\"\n (click)=\"handlerSelectItem($event,item())\">\n <span [innerHTML]=\"item().fieldLabel\"></span>\n </div>\n } @else {\n <div (click)=\"handlerSelectItem($event, item())\"\n [class]=\"item().classItem || 'rounded-[20px] mb-[8px] mr-[8px] py-[4px] px-[8px] flex items-center cursor-pointer'\"\n [class.bg-[#e9f1fe]]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length\"\n [class.libs-ui-color-global]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length\">\n @if (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length) {\n <div class=\"mr-[8px] text-[12px] libs-ui-icon-check libs-ui-color-global\"></div>\n }\n <span class=\"libs-ui-font-h6r\"\n [innerHTML]=\"item().fieldLabel\"></span>\n </div>\n }\n </div>\n }\n @if (!items() || !items().length) {\n <div [class]=\"'libs-ui-font-h4r text-[#9ca2ad] '+ (config()?.textNoDataClassInclude ?? 'py-[4px]')\">\n @if (!keySearch() && !loading()) {\n <ng-container>{{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}</ng-container>\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container>{{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}</ng-container>\n }\n @if (loading()) {\n <ng-container> </ng-container>\n }\n </div>\n }\n </div>\n @if (loading()) {\n <div class=\"w-full h-full absolute top-0\">\n <libs_ui-components-spinner [size]=\"'medium'\" />\n </div>\n }\n </div>\n}\n" }]
|
|
150
150
|
}] });
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9saXN0L3NyYy90ZW1wbGF0ZXMvdGFnL3RhZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL3RhZy90YWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3RELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSw4Q0FBOEMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7QUFnQmpHLE1BQU0sT0FBTyxnQ0FBaUMsU0FBUSw4Q0FBOEM7SUFDbEcsY0FBYztJQUNKLGlCQUFpQixHQUFHLE1BQU0sQ0FBaUMsU0FBUyxDQUFDLENBQUM7SUFFdkUsUUFBUTtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDMUMsT0FBTztR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QyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQzt3R0FwSlUsZ0NBQWdDOzRGQUFoQyxnQ0FBZ0Msd0hDM0I3QywybEdBMkRBLDJDRHZDSSxxQkFBcUIsK0JBQUUsZ0JBQWdCLG1KQUFFLGVBQWUsNEZBQUUsT0FBTyxvRkFDakUsZ0NBQWdDLGlHQUNoQyxzQ0FBc0MseVFBQ3RDLDRCQUE0Qjs7NEZBSW5CLGdDQUFnQztrQkFkNUMsU0FBUzsrQkFFRSx1Q0FBdUMsY0FFckMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxPQUFPO3dCQUNqRSxnQ0FBZ0M7d0JBQ2hDLHNDQUFzQzt3QkFDdEMsNEJBQTRCO3FCQUM3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0LCBzaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWaXJ0dWFsU2Nyb2xsZXJNb2R1bGUgfSBmcm9tICdAaWhhcmJlY2svbmd4LXZpcnR1YWwtc2Nyb2xsZXInO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNjcm9sbC1vdmVybGF5JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTcGlubmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zcGlubmVyJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZGVsZXRlVW5pY29kZSwgaXNOaWwgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IElMaXN0Q29uZmlnSXRlbVRhZyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY29uZmlnLWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IElMaXN0RGF0YUVtaXRLZXkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2RhdGEtZW1pdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2NoZWNrLXNlbGVjdGVkLWJ5LWtleS5waXBlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMaXN0VGVtcGxhdGVzQ29tcG9uZW50QWJzdHJhY3QgfSBmcm9tICcuLi90ZW1wbGF0ZXMuY29tcG9uZW50LmFic3RyYWN0JztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWxpc3QtdGVtcGxhdGVzX3RhZycsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFZpcnR1YWxTY3JvbGxlck1vZHVsZSwgTmdUZW1wbGF0ZU91dGxldCwgVHJhbnNsYXRlTW9kdWxlLCBOZ0NsYXNzLFxuICAgIExpYnNVaUNvbXBvbmVudHNTcGlubmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlLFxuICAgIExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGVcbiAgXVxufSlcblxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNMaXN0VGFnQ29tcG9uZW50IGV4dGVuZHMgTGlic1VpQ29tcG9uZW50c0xpc3RUZW1wbGF0ZXNDb21wb25lbnRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qIFBST1BFUlRZICovXG4gIHByb3RlY3RlZCBjb25maWdUZW1wbGF0ZVRhZyA9IHNpZ25hbDxJTGlzdENvbmZpZ0l0ZW1UYWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZVRhZz8uKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLmNvbmZpZ1RlbXBsYXRlVGFnLnNldCh0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZVRhZz8uKCkpO1xuICAgIHRoaXMuZmllbGRLZXkuc2V0KHRoaXMuY29uZmlnVGVtcGxhdGVUYWcoKT8uZmllbGRLZXkgPz8gdGhpcy5maWVsZEtleURlZmF1bHQoKSk7XG4gICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKCk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RJdGVtKGU6IEV2ZW50LCBpdGVtOiBhbnkpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEV2ZW50KSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoIWl0ZW0gfHwgKHRoaXMua2V5c0Rpc2FibGVJdGVtKCkgJiYgdGhpcy5rZXlzRGlzYWJsZUl0ZW0oKT8uc29tZShrZXkgPT4ga2V5ID09PSBpdGVtW3RoaXMuZmllbGRLZXkoKV0pKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBpdGVtW3RoaXMuZmllbGRLZXkoKV07XG4gICAgY29uc3QgaW5kZXhPZktleSA9IHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5pbmRleE9mKGtleSkgPz8gLTE7XG5cbiAgICBpZiAoaW5kZXhPZktleSA8IDApIHtcbiAgICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC51cGRhdGUoaXRlbXMgPT4gWy4uLihpdGVtcyB8fCBbXSksIGtleV0pO1xuICAgICAgdGhpcy5lbWl0TW9TZWxlY3RNdWx0aUtleSh0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKSB8fCBbXSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5tdWx0aUtleVNlbGVjdGVkLnVwZGF0ZShpdGVtcyA9PiB7XG4gICAgICBpdGVtcz8uc3BsaWNlKGluZGV4T2ZLZXksIDEpO1xuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSk7XG4gICAgdGhpcy5vdXRVblNlbGVjdE11bHRpS2V5LmVtaXQoW2tleV0pO1xuICAgIHRoaXMuZW1pdE1vU2VsZWN0TXVsdGlLZXkodGhpcy5tdWx0aUtleVNlbGVjdGVkKCkgfHwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlbWl0TW9TZWxlY3RNdWx0aUtleShtdWx0aUtleVNlbGVjdGVkOiBBcnJheTx1bmtub3duPiwgaXNDbGlja01hbnVhbCA9IHRydWUpIHtcbiAgICBjb25zdCBtYXBLZXlzID0gbmV3IEFycmF5PElMaXN0RGF0YUVtaXRLZXk+KCk7XG4gICAgaWYgKCFtdWx0aUtleVNlbGVjdGVkIHx8ICFtdWx0aUtleVNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdCh7IGtleXM6IFtdLCBtYXBLZXlzLCBpc0NsaWNrTWFudWFsIH0pO1xuICAgIH1cblxuICAgIG11bHRpS2V5U2VsZWN0ZWQuZm9yRWFjaCgoa2V5OiB1bmtub3duKSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5zdG9yZSgpLmZpbmQoaXRlbSA9PiBpdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0ga2V5KTtcblxuICAgICAgbWFwS2V5cy5wdXNoKHsga2V5LCBpdGVtLCBpc0NsaWNrTWFudWFsIH0pO1xuICAgIH0pO1xuICAgIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdCh7IGtleXM6IHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpIHx8IFtdLCBtYXBLZXlzLCBpc0NsaWNrTWFudWFsIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTY3JvbGxCb3R0b20oKSB7XG4gICAgaWYgKHRoaXMubG9hZGVkTGFzdEl0ZW0oKSkge1xuICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubG9hZGluZygpIHx8IHRoaXMubG9hZGVkTGFzdEl0ZW0oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UoZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NTZWFyY2goKSB7XG4gICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NEYXRhKHJlcGxhY2U/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbUJ5S2V5U2VhcmNoOiBBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+PiA9IFtdO1xuICAgIGNvbnN0IGtleXNIaWRkZW4gPSB0aGlzLmtleXNIaWRkZW5JdGVtKCkgfHwgW107XG5cbiAgICBpZiAocmVwbGFjZSkge1xuICAgICAgdGhpcy5pdGVtcy5zZXQoW10pO1xuICAgIH1cbiAgICB0aGlzLnN0b3JlKCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgZGF0YVN0b3JlOiBXcml0YWJsZVNpZ25hbDxhbnk+ID0gY2xvbmVEZWVwKGl0ZW0pO1xuXG4gICAgICBkYXRhU3RvcmUudXBkYXRlKGN1cnJlbnRTdG9yZSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLmN1cnJlbnRTdG9yZSwgcmVmOiBpdGVtKCkgfTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qga2V5ID0ga2V5c0hpZGRlbi5maW5kKGtleSA9PiBkYXRhU3RvcmUoKVt0aGlzLmZpZWxkS2V5KCldID09PSBrZXkpO1xuXG4gICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMuYnVpbGRWYWx1ZUJ5Q29uZmlnKGRhdGFTdG9yZSwgdGhpcy5jb25maWdUZW1wbGF0ZVRhZygpKTtcblxuICAgICAgICBpZiAodGV4dCAmJiBkZWxldGVVbmljb2RlKHRleHQudG9Mb2NhbGVMb3dlckNhc2UoKSkuaW5jbHVkZXMoZGVsZXRlVW5pY29kZSh0aGlzLmtleVNlYXJjaCgpLnRvTG9jYWxlTG93ZXJDYXNlKCkpKSAmJiAhdGhpcy5pdGVtcygpLmZpbmQoZGF0YUl0ZW0gPT4gZGF0YUl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSBkYXRhU3RvcmUoKVt0aGlzLmZpZWxkS2V5KCldKSkge1xuICAgICAgICAgIGl0ZW1CeUtleVNlYXJjaC5wdXNoKGRhdGFTdG9yZSk7XG4gICAgICAgICAgZGF0YVN0b3JlLnVwZGF0ZShjdXJyZW50U3RvcmUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY3VycmVudFN0b3JlLFxuICAgICAgICAgICAgICBjbGFzc0l0ZW06IGl0ZW0oKS5jbGFzc0l0ZW0gfHwgdGhpcy5jb25maWdUZW1wbGF0ZVRhZygpPy5nZXRDbGFzc0l0ZW0/LihkYXRhU3RvcmUoKSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpbmRleEl0ZW1SZW1vdmUgPSB0aGlzLml0ZW1zKCkuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGtleSk7XG5cbiAgICAgIGlmIChpbmRleEl0ZW1SZW1vdmUgPiAtMSkge1xuICAgICAgICB0aGlzLml0ZW1zLnVwZGF0ZShpdGVtcyA9PiB7XG4gICAgICAgICAgaXRlbXMuc3BsaWNlKGluZGV4SXRlbVJlbW92ZSwgMSk7XG5cbiAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNoZWNrTG9hZEl0ZW0gPSAocHJlU3RhdGVIYXNTY3JvbGw6IGJvb2xlYW4sIGN1cnJlbnRIYXNTY3JvbGw6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmICh0aGlzLmtleXNIaWRkZW5JdGVtKCk/Lmxlbmd0aCAmJiBwcmVTdGF0ZUhhc1Njcm9sbCAmJiAhY3VycmVudEhhc1Njcm9sbCAmJiAodGhpcy5pc1NlYXJjaE9ubGluZSgpKSkge1xuICAgICAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UoZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAocmVwbGFjZSkge1xuICAgICAgdGhpcy5pdGVtcy5zZXQoaXRlbUJ5S2V5U2VhcmNoKTtcbiAgICAgIHRoaXMuY29uZmlnKCk/LnNvcnQ/Lih0aGlzLml0ZW1zKCkpO1xuICAgICAgdGhpcy5zZXRIZWlnaHRWaWV3UG9ydCgpO1xuICAgICAgdGhpcy5jaGVja1ZpZXdQb3J0U2Nyb2xsKGNoZWNrTG9hZEl0ZW0pO1xuICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pdGVtcy51cGRhdGUoaXRlbXMgPT4gWy4uLihpdGVtcyB8fCBbXSksIC4uLml0ZW1CeUtleVNlYXJjaF0pXG4gICAgdGhpcy5jb25maWcoKT8uc29ydD8uKHRoaXMuaXRlbXMoKSk7XG4gICAgdGhpcy5zZXRIZWlnaHRWaWV3UG9ydCgpO1xuICAgIHRoaXMuY2hlY2tWaWV3UG9ydFNjcm9sbChjaGVja0xvYWRJdGVtKTtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TGVuZ3RoSXRlbSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLml0ZW1zKCkubGVuZ3RoO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NLZXlDaGFuZ2VVblNlbGVjdChpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoaXNOaWwoaXRlbVt0aGlzLmZpZWxkS2V5KCldKSB8fCBpdGVtW3RoaXMuZmllbGRLZXkoKV0gPT09ICcnIHx8IHRoaXMua2V5U2VsZWN0ZWQoKSAhPT0gaXRlbVt0aGlzLmZpZWxkS2V5KCldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMua2V5U2VsZWN0ZWQuc2V0KCcnKTtcbiAgICB0aGlzLm91dFNlbGVjdEtleS5lbWl0KHVuZGVmaW5lZCk7XG4gIH1cbn0iLCJAaWYgKGNvbmZpZ1RlbXBsYXRlVGFnKCk7IGFzIGNvbmZpZ1RlbXBsYXRlVGFnKSB7XG4gIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsIHJlbGF0aXZlXCJcbiAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgIChvdXRTY3JvbGxCb3R0b20pPVwiaGFuZGxlclNjcm9sbEJvdHRvbSgpXCI+XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIG1heC1oLVsxNTBweF0gaC1mdWxsIHt7IGNvbmZpZ1RlbXBsYXRlVGFnLmNsYXNzSW5jbHVkZUNvbnRhaW5lciB9fVwiXG4gICAgICBbbmdDbGFzc109XCJ7J2ZsZXggZmxleC13cmFwJzogIWNvbmZpZ1RlbXBsYXRlVGFnLmlnbm9yZUl0ZW1GbGV4V3JhcH1cIlxuICAgICAgW2NsYXNzLm1pbi1oLVs0NXB4XV09XCIhbG9hZGluZygpICYmICghaXRlbXMoKSB8fCAhaXRlbXMoKS5sZW5ndGgpXCJcbiAgICAgIFtjbGFzcy5taW4taC1bMTA0cHhdXT1cImxvYWRpbmcoKSAmJiBpdGVtcygpXCI+XG4gICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zKCk7IHRyYWNrIGl0ZW0oKVtmaWVsZEtleSgpXSkge1xuICAgICAgICA8ZGl2IFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwibG9hZGluZygpIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwibG9hZGluZygpIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgW2NsYXNzXT1cIml0ZW0oKS5jbGFzc0NvbnRhaW5lckl0ZW1cIj5cbiAgICAgICAgICBAaWYgKCFpdGVtKCkuYnVsbGV0KSB7XG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJoYW5kbGVyU2VsZWN0SXRlbSgkZXZlbnQsIGl0ZW0oKSlcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiaXRlbSgpLmNsYXNzSXRlbSB8fCAncm91bmRlZC1bMjBweF0gbWItWzhweF0gbXItWzhweF0gcHktWzRweF0gcHgtWzhweF0gZmxleCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXInXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJnLVsjZTlmMWZlXV09XCJpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOm11bHRpS2V5U2VsZWN0ZWQoKTptdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWNvbG9yLWdsb2JhbF09XCJpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOm11bHRpS2V5U2VsZWN0ZWQoKTptdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICBAaWYgKGl0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6bXVsdGlLZXlTZWxlY3RlZCgpOm11bHRpS2V5U2VsZWN0ZWQoKT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLVs4cHhdIHRleHQtWzEycHhdIGxpYnMtdWktaWNvbi1jaGVjayBsaWJzLXVpLWNvbG9yLWdsb2JhbFwiPjwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1mb250LWg2clwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJpdGVtKCkuZmllbGRMYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGl0ZW0oKS5idWxsZXQpIHtcbiAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIml0ZW0oKS5jbGFzc0l0ZW0gfHwgJ3JvdW5kZWQtWzEwcHhdIHB4LVs4cHhdIHB5LVsxcHhdIG1iLVs4cHhdIG1yLVs4cHhdJ1wiXG4gICAgICAgICAgICAgIFtjbGFzcy53LW1heF09XCJjb25maWdUZW1wbGF0ZVRhZz8uaWdub3JlSXRlbUZsZXhXcmFwXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXRlbSgpLmJ1bGxldD8uYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIml0ZW0oKS5idWxsZXQ/LmNvbG9yXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJTZWxlY3RJdGVtKCRldmVudCxpdGVtKCkpXCI+XG4gICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiaXRlbSgpLmZpZWxkTGFiZWxcIj48L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmICghaXRlbXMoKSB8fCAhaXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ2xpYnMtdWktZm9udC1oNHIgdGV4dC1bIzljYTJhZF0gJysgKGNvbmZpZygpPy50ZXh0Tm9EYXRhQ2xhc3NJbmNsdWRlID8/ICdweS1bNHB4XScpXCI+XG4gICAgICAgICAgQGlmICgha2V5U2VhcmNoKCkgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj57eyAoY29uZmlnKCk/LnRleHROb0RhdGEgPz8gJ2kxOG5faGF2ZV9ub19zZWxlY3Rpb24nKSB8IHRyYW5zbGF0ZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHRlbXBsYXRlUmVmU2VhcmNoTm9EYXRhKCkgJiYga2V5U2VhcmNoKCkgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlUmVmU2VhcmNoTm9EYXRhKCkgfHwgbnVsbDtjb250ZXh0OntrZXlTZWFyY2g6a2V5U2VhcmNoKCl9XCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICghdGVtcGxhdGVSZWZTZWFyY2hOb0RhdGEoKSAmJiBrZXlTZWFyY2goKSAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgICA8bmctY29udGFpbmVyPnt7IChjb25maWcoKT8udGV4dFNlYXJjaE5vRGF0YSA/PyAnaTE4bl9ub19yZXN1bHQnKSB8IHRyYW5zbGF0ZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj4mbmJzcDs8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGgtZnVsbCBhYnNvbHV0ZSB0b3AtMFwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXNwaW5uZXIgW3NpemVdPVwiJ21lZGl1bSdcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbn1cbiJdfQ==
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9saXN0L3NyYy90ZW1wbGF0ZXMvdGFnL3RhZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL3RhZy90YWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3RELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSw4Q0FBOEMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7QUFnQmpHLE1BQU0sT0FBTyxnQ0FBaUMsU0FBUSw4Q0FBOEM7SUFDbEcsY0FBYztJQUNKLGlCQUFpQixHQUFHLE1BQU0sQ0FBaUMsU0FBUyxDQUFDLENBQUM7SUFFdkUsUUFBUTtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDMUMsT0FBTztR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QyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQzt3R0FwSlUsZ0NBQWdDOzRGQUFoQyxnQ0FBZ0Msd0hDM0I3Qyxna0dBMERBLDJDRHRDSSxxQkFBcUIsK0JBQUUsZ0JBQWdCLG1KQUFFLGVBQWUsNEZBQUUsT0FBTyxvRkFDakUsZ0NBQWdDLGlHQUNoQyxzQ0FBc0MseVFBQ3RDLDRCQUE0Qjs7NEZBSW5CLGdDQUFnQztrQkFkNUMsU0FBUzsrQkFFRSx1Q0FBdUMsY0FFckMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxPQUFPO3dCQUNqRSxnQ0FBZ0M7d0JBQ2hDLHNDQUFzQzt3QkFDdEMsNEJBQTRCO3FCQUM3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0LCBzaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWaXJ0dWFsU2Nyb2xsZXJNb2R1bGUgfSBmcm9tICdAaWhhcmJlY2svbmd4LXZpcnR1YWwtc2Nyb2xsZXInO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNjcm9sbC1vdmVybGF5JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTcGlubmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zcGlubmVyJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZGVsZXRlVW5pY29kZSwgaXNOaWwgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IElMaXN0Q29uZmlnSXRlbVRhZyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY29uZmlnLWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IElMaXN0RGF0YUVtaXRLZXkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2RhdGEtZW1pdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2NoZWNrLXNlbGVjdGVkLWJ5LWtleS5waXBlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMaXN0VGVtcGxhdGVzQ29tcG9uZW50QWJzdHJhY3QgfSBmcm9tICcuLi90ZW1wbGF0ZXMuY29tcG9uZW50LmFic3RyYWN0JztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWxpc3QtdGVtcGxhdGVzX3RhZycsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFZpcnR1YWxTY3JvbGxlck1vZHVsZSwgTmdUZW1wbGF0ZU91dGxldCwgVHJhbnNsYXRlTW9kdWxlLCBOZ0NsYXNzLFxuICAgIExpYnNVaUNvbXBvbmVudHNTcGlubmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlLFxuICAgIExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGVcbiAgXVxufSlcblxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNMaXN0VGFnQ29tcG9uZW50IGV4dGVuZHMgTGlic1VpQ29tcG9uZW50c0xpc3RUZW1wbGF0ZXNDb21wb25lbnRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qIFBST1BFUlRZICovXG4gIHByb3RlY3RlZCBjb25maWdUZW1wbGF0ZVRhZyA9IHNpZ25hbDxJTGlzdENvbmZpZ0l0ZW1UYWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZVRhZz8uKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLmNvbmZpZ1RlbXBsYXRlVGFnLnNldCh0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZVRhZz8uKCkpO1xuICAgIHRoaXMuZmllbGRLZXkuc2V0KHRoaXMuY29uZmlnVGVtcGxhdGVUYWcoKT8uZmllbGRLZXkgPz8gdGhpcy5maWVsZEtleURlZmF1bHQoKSk7XG4gICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKCk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RJdGVtKGU6IEV2ZW50LCBpdGVtOiBhbnkpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEV2ZW50KSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoIWl0ZW0gfHwgKHRoaXMua2V5c0Rpc2FibGVJdGVtKCkgJiYgdGhpcy5rZXlzRGlzYWJsZUl0ZW0oKT8uc29tZShrZXkgPT4ga2V5ID09PSBpdGVtW3RoaXMuZmllbGRLZXkoKV0pKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBpdGVtW3RoaXMuZmllbGRLZXkoKV07XG4gICAgY29uc3QgaW5kZXhPZktleSA9IHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5pbmRleE9mKGtleSkgPz8gLTE7XG5cbiAgICBpZiAoaW5kZXhPZktleSA8IDApIHtcbiAgICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC51cGRhdGUoaXRlbXMgPT4gWy4uLihpdGVtcyB8fCBbXSksIGtleV0pO1xuICAgICAgdGhpcy5lbWl0TW9TZWxlY3RNdWx0aUtleSh0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKSB8fCBbXSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5tdWx0aUtleVNlbGVjdGVkLnVwZGF0ZShpdGVtcyA9PiB7XG4gICAgICBpdGVtcz8uc3BsaWNlKGluZGV4T2ZLZXksIDEpO1xuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSk7XG4gICAgdGhpcy5vdXRVblNlbGVjdE11bHRpS2V5LmVtaXQoW2tleV0pO1xuICAgIHRoaXMuZW1pdE1vU2VsZWN0TXVsdGlLZXkodGhpcy5tdWx0aUtleVNlbGVjdGVkKCkgfHwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlbWl0TW9TZWxlY3RNdWx0aUtleShtdWx0aUtleVNlbGVjdGVkOiBBcnJheTx1bmtub3duPiwgaXNDbGlja01hbnVhbCA9IHRydWUpIHtcbiAgICBjb25zdCBtYXBLZXlzID0gbmV3IEFycmF5PElMaXN0RGF0YUVtaXRLZXk+KCk7XG4gICAgaWYgKCFtdWx0aUtleVNlbGVjdGVkIHx8ICFtdWx0aUtleVNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdCh7IGtleXM6IFtdLCBtYXBLZXlzLCBpc0NsaWNrTWFudWFsIH0pO1xuICAgIH1cblxuICAgIG11bHRpS2V5U2VsZWN0ZWQuZm9yRWFjaCgoa2V5OiB1bmtub3duKSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5zdG9yZSgpLmZpbmQoaXRlbSA9PiBpdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0ga2V5KTtcblxuICAgICAgbWFwS2V5cy5wdXNoKHsga2V5LCBpdGVtLCBpc0NsaWNrTWFudWFsIH0pO1xuICAgIH0pO1xuICAgIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdCh7IGtleXM6IHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpIHx8IFtdLCBtYXBLZXlzLCBpc0NsaWNrTWFudWFsIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTY3JvbGxCb3R0b20oKSB7XG4gICAgaWYgKHRoaXMubG9hZGVkTGFzdEl0ZW0oKSkge1xuICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubG9hZGluZygpIHx8IHRoaXMubG9hZGVkTGFzdEl0ZW0oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UoZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NTZWFyY2goKSB7XG4gICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NEYXRhKHJlcGxhY2U/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbUJ5S2V5U2VhcmNoOiBBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+PiA9IFtdO1xuICAgIGNvbnN0IGtleXNIaWRkZW4gPSB0aGlzLmtleXNIaWRkZW5JdGVtKCkgfHwgW107XG5cbiAgICBpZiAocmVwbGFjZSkge1xuICAgICAgdGhpcy5pdGVtcy5zZXQoW10pO1xuICAgIH1cbiAgICB0aGlzLnN0b3JlKCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgZGF0YVN0b3JlOiBXcml0YWJsZVNpZ25hbDxhbnk+ID0gY2xvbmVEZWVwKGl0ZW0pO1xuXG4gICAgICBkYXRhU3RvcmUudXBkYXRlKGN1cnJlbnRTdG9yZSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLmN1cnJlbnRTdG9yZSwgcmVmOiBpdGVtKCkgfTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qga2V5ID0ga2V5c0hpZGRlbi5maW5kKGtleSA9PiBkYXRhU3RvcmUoKVt0aGlzLmZpZWxkS2V5KCldID09PSBrZXkpO1xuXG4gICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMuYnVpbGRWYWx1ZUJ5Q29uZmlnKGRhdGFTdG9yZSwgdGhpcy5jb25maWdUZW1wbGF0ZVRhZygpKTtcblxuICAgICAgICBpZiAodGV4dCAmJiBkZWxldGVVbmljb2RlKHRleHQudG9Mb2NhbGVMb3dlckNhc2UoKSkuaW5jbHVkZXMoZGVsZXRlVW5pY29kZSh0aGlzLmtleVNlYXJjaCgpLnRvTG9jYWxlTG93ZXJDYXNlKCkpKSAmJiAhdGhpcy5pdGVtcygpLmZpbmQoZGF0YUl0ZW0gPT4gZGF0YUl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSBkYXRhU3RvcmUoKVt0aGlzLmZpZWxkS2V5KCldKSkge1xuICAgICAgICAgIGl0ZW1CeUtleVNlYXJjaC5wdXNoKGRhdGFTdG9yZSk7XG4gICAgICAgICAgZGF0YVN0b3JlLnVwZGF0ZShjdXJyZW50U3RvcmUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY3VycmVudFN0b3JlLFxuICAgICAgICAgICAgICBjbGFzc0l0ZW06IGl0ZW0oKS5jbGFzc0l0ZW0gfHwgdGhpcy5jb25maWdUZW1wbGF0ZVRhZygpPy5nZXRDbGFzc0l0ZW0/LihkYXRhU3RvcmUoKSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpbmRleEl0ZW1SZW1vdmUgPSB0aGlzLml0ZW1zKCkuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGtleSk7XG5cbiAgICAgIGlmIChpbmRleEl0ZW1SZW1vdmUgPiAtMSkge1xuICAgICAgICB0aGlzLml0ZW1zLnVwZGF0ZShpdGVtcyA9PiB7XG4gICAgICAgICAgaXRlbXMuc3BsaWNlKGluZGV4SXRlbVJlbW92ZSwgMSk7XG5cbiAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNoZWNrTG9hZEl0ZW0gPSAocHJlU3RhdGVIYXNTY3JvbGw6IGJvb2xlYW4sIGN1cnJlbnRIYXNTY3JvbGw6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmICh0aGlzLmtleXNIaWRkZW5JdGVtKCk/Lmxlbmd0aCAmJiBwcmVTdGF0ZUhhc1Njcm9sbCAmJiAhY3VycmVudEhhc1Njcm9sbCAmJiAodGhpcy5pc1NlYXJjaE9ubGluZSgpKSkge1xuICAgICAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UoZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAocmVwbGFjZSkge1xuICAgICAgdGhpcy5pdGVtcy5zZXQoaXRlbUJ5S2V5U2VhcmNoKTtcbiAgICAgIHRoaXMuY29uZmlnKCk/LnNvcnQ/Lih0aGlzLml0ZW1zKCkpO1xuICAgICAgdGhpcy5zZXRIZWlnaHRWaWV3UG9ydCgpO1xuICAgICAgdGhpcy5jaGVja1ZpZXdQb3J0U2Nyb2xsKGNoZWNrTG9hZEl0ZW0pO1xuICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pdGVtcy51cGRhdGUoaXRlbXMgPT4gWy4uLihpdGVtcyB8fCBbXSksIC4uLml0ZW1CeUtleVNlYXJjaF0pXG4gICAgdGhpcy5jb25maWcoKT8uc29ydD8uKHRoaXMuaXRlbXMoKSk7XG4gICAgdGhpcy5zZXRIZWlnaHRWaWV3UG9ydCgpO1xuICAgIHRoaXMuY2hlY2tWaWV3UG9ydFNjcm9sbChjaGVja0xvYWRJdGVtKTtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TGVuZ3RoSXRlbSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLml0ZW1zKCkubGVuZ3RoO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NLZXlDaGFuZ2VVblNlbGVjdChpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoaXNOaWwoaXRlbVt0aGlzLmZpZWxkS2V5KCldKSB8fCBpdGVtW3RoaXMuZmllbGRLZXkoKV0gPT09ICcnIHx8IHRoaXMua2V5U2VsZWN0ZWQoKSAhPT0gaXRlbVt0aGlzLmZpZWxkS2V5KCldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMua2V5U2VsZWN0ZWQuc2V0KCcnKTtcbiAgICB0aGlzLm91dFNlbGVjdEtleS5lbWl0KHVuZGVmaW5lZCk7XG4gIH1cbn0iLCJAaWYgKGNvbmZpZ1RlbXBsYXRlVGFnKCk7IGFzIGNvbmZpZ1RlbXBsYXRlVGFnKSB7XG4gIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsIHJlbGF0aXZlXCJcbiAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgIChvdXRTY3JvbGxCb3R0b20pPVwiaGFuZGxlclNjcm9sbEJvdHRvbSgpXCI+XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIG1heC1oLVsxNTBweF0gaC1mdWxsIHt7IGNvbmZpZ1RlbXBsYXRlVGFnLmNsYXNzSW5jbHVkZUNvbnRhaW5lciB9fVwiXG4gICAgICBbbmdDbGFzc109XCJ7J2ZsZXggZmxleC13cmFwJzogIWNvbmZpZ1RlbXBsYXRlVGFnLmlnbm9yZUl0ZW1GbGV4V3JhcH1cIlxuICAgICAgW2NsYXNzLm1pbi1oLVs0NXB4XV09XCIhbG9hZGluZygpICYmICghaXRlbXMoKSB8fCAhaXRlbXMoKS5sZW5ndGgpXCJcbiAgICAgIFtjbGFzcy5taW4taC1bMTA0cHhdXT1cImxvYWRpbmcoKSAmJiBpdGVtcygpXCI+XG4gICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zKCk7IHRyYWNrIGl0ZW0oKVtmaWVsZEtleSgpXSkge1xuICAgICAgICA8ZGl2IFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwibG9hZGluZygpIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwibG9hZGluZygpIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgW2NsYXNzXT1cIml0ZW0oKS5jbGFzc0NvbnRhaW5lckl0ZW1cIj5cbiAgICAgICAgICBAaWYgKGl0ZW0oKS5idWxsZXQ7IGFzIGJ1bGxldCkge1xuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiaXRlbSgpLmNsYXNzSXRlbSB8fCAncm91bmRlZC1bMTBweF0gcHgtWzhweF0gcHktWzFweF0gbWItWzhweF0gbXItWzhweF0nXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnctbWF4XT1cImNvbmZpZ1RlbXBsYXRlVGFnPy5pZ25vcmVJdGVtRmxleFdyYXBcIlxuICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJidWxsZXQoKS5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiYnVsbGV0KCkuY29sb3JcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclNlbGVjdEl0ZW0oJGV2ZW50LGl0ZW0oKSlcIj5cbiAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJpdGVtKCkuZmllbGRMYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiaGFuZGxlclNlbGVjdEl0ZW0oJGV2ZW50LCBpdGVtKCkpXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cIml0ZW0oKS5jbGFzc0l0ZW0gfHwgJ3JvdW5kZWQtWzIwcHhdIG1iLVs4cHhdIG1yLVs4cHhdIHB5LVs0cHhdIHB4LVs4cHhdIGZsZXggaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyJ1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5iZy1bI2U5ZjFmZV1dPVwiaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZTptdWx0aUtleVNlbGVjdGVkKCk6bXVsdGlLZXlTZWxlY3RlZCgpPy5sZW5ndGhcIlxuICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1jb2xvci1nbG9iYWxdPVwiaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZTptdWx0aUtleVNlbGVjdGVkKCk6bXVsdGlLZXlTZWxlY3RlZCgpPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgQGlmIChpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOm11bHRpS2V5U2VsZWN0ZWQoKTptdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1bOHB4XSB0ZXh0LVsxMnB4XSBsaWJzLXVpLWljb24tY2hlY2sgbGlicy11aS1jb2xvci1nbG9iYWxcIj48L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktZm9udC1oNnJcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaXRlbSgpLmZpZWxkTGFiZWxcIj48L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmICghaXRlbXMoKSB8fCAhaXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ2xpYnMtdWktZm9udC1oNHIgdGV4dC1bIzljYTJhZF0gJysgKGNvbmZpZygpPy50ZXh0Tm9EYXRhQ2xhc3NJbmNsdWRlID8/ICdweS1bNHB4XScpXCI+XG4gICAgICAgICAgQGlmICgha2V5U2VhcmNoKCkgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj57eyAoY29uZmlnKCk/LnRleHROb0RhdGEgPz8gJ2kxOG5faGF2ZV9ub19zZWxlY3Rpb24nKSB8IHRyYW5zbGF0ZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHRlbXBsYXRlUmVmU2VhcmNoTm9EYXRhKCkgJiYga2V5U2VhcmNoKCkgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlUmVmU2VhcmNoTm9EYXRhKCkgfHwgbnVsbDtjb250ZXh0OntrZXlTZWFyY2g6a2V5U2VhcmNoKCl9XCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICghdGVtcGxhdGVSZWZTZWFyY2hOb0RhdGEoKSAmJiBrZXlTZWFyY2goKSAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgICA8bmctY29udGFpbmVyPnt7IChjb25maWcoKT8udGV4dFNlYXJjaE5vRGF0YSA/PyAnaTE4bl9ub19yZXN1bHQnKSB8IHRyYW5zbGF0ZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj4mbmJzcDs8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGgtZnVsbCBhYnNvbHV0ZSB0b3AtMFwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXNwaW5uZXIgW3NpemVdPVwiJ21lZGl1bSdcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbn1cbiJdfQ==
|
|
@@ -103,11 +103,11 @@ export class LibsUiComponentsListTemplatesComponentAbstract {
|
|
|
103
103
|
return;
|
|
104
104
|
}
|
|
105
105
|
const { newData, functionCustomAddDataToStore } = data;
|
|
106
|
-
if (!newData || !newData.length) {
|
|
106
|
+
if (!newData() || !newData().length) {
|
|
107
107
|
return;
|
|
108
108
|
}
|
|
109
109
|
if (this.config()?.type === 'checkbox') {
|
|
110
|
-
newData.forEach(item =>
|
|
110
|
+
newData().forEach(item => item.update(value => ({ ...value, isAddNew: true })));
|
|
111
111
|
}
|
|
112
112
|
functionCustomAddDataToStore(newData, this.store);
|
|
113
113
|
this.processData();
|
|
@@ -337,4 +337,4 @@ export class LibsUiComponentsListTemplatesComponentAbstract {
|
|
|
337
337
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsListTemplatesComponentAbstract, decorators: [{
|
|
338
338
|
type: Directive
|
|
339
339
|
}], ctorParameters: () => [] });
|
|
340
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmNvbXBvbmVudC5hYnN0cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9saXN0L3NyYy90ZW1wbGF0ZXMvdGVtcGxhdGVzLmNvbXBvbmVudC5hYnN0cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsNERBQTREO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLE1BQU0sRUFBZSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBSy9JLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBSzNELE1BQU0sT0FBZ0IsOENBQThDO0lBQ2xFLGNBQWM7SUFDSixPQUFPLEdBQUcsTUFBTSxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQ2hDLGNBQWMsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsS0FBSyxHQUFHLE1BQU0sQ0FBNkIsRUFBRSxDQUFDLENBQUM7SUFDL0MsS0FBSyxHQUFHLE1BQU0sQ0FBNkIsRUFBRSxDQUFDLENBQUM7SUFDL0MsY0FBYyxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN4QyxTQUFTLEdBQUcsTUFB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QWMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQzFHLE9BQU8sQ0FBQyx1QkFBdUIsUUFBUSxHQUFHLFFBQVEsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLGVBQWUsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUV4RyxVQUFVLEdBQUcsSUFBSSxVQUFVLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO2dCQUNoRSxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNCLFVBQVUsR0FBRyxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxJQUFJLEdBQUcsQ0FBQztJQUMzQixDQUFDO0lBRVMsMEJBQTBCLENBQUMsSUFBZ0I7UUFDbkQsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBS1MscUJBQXFCO1FBQzdCLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUdELFdBQVc7UUFDVCxZQUFZLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0FqWW1CLDhDQUE4Qzs0RkFBOUMsOENBQThDOzs0RkFBOUMsOENBQThDO2tCQURuRSxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L3VzZS1saWZlY3ljbGUtaW50ZXJmYWNlICovXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIG91dHB1dCwgc2lnbmFsLCBUZW1wbGF0ZVJlZiwgdmlld0NoaWxkLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJU29ydCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtc29ydFwiO1xuaW1wb3J0IHsgSUlucHV0U2VhcmNoQ29uZmlnIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXNlYXJjaFwiO1xuaW1wb3J0IHsgSUZsYWdNb3VzZSB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXJcIjtcbmltcG9ydCB7IElQYWdpbmcsIFRZUEVfVEVNUExBVEVfUkVGIH0gZnJvbSBcIkBsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXNcIjtcbmltcG9ydCB7IExpYnNVaUh0dHBSZXF1ZXN0U2VydmljZSB9IGZyb20gXCJAbGlicy11aS9zZXJ2aWNlcy1odHRwLXJlcXVlc3RcIjtcbmltcG9ydCB7IGNsb25lRGVlcCwgY29udmVydE9iamVjdFRvU2lnbmFsLCBjb252ZXJ0U2lnbmFsVG9PYmplY3QgfSBmcm9tIFwiQGxpYnMtdWkvdXRpbHNcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGludGVydmFsLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNraXBXaGlsZSwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZ2V0RmllbGRLZXlCeVR5cGUgfSBmcm9tIFwiLi4vZGVmaW5lcy9saXN0LmRlZmluZVwiO1xuaW1wb3J0IHsgSURhdGFVcGRhdGVUb1N0b3JlLCBJTGlzdERhdGFFbWl0S2V5LCBJTGlzdERhdGFFbWl0TXVsdGlLZXkgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgSUxpc3RDb25maWdJdGVtLCBJTGlzdENvbmZpZ0l0ZW1DaGVja2JveCwgSUxpc3RDb25maWdJdGVtUmFkaW8sIElMaXN0Q29uZmlnSXRlbVRleHQsIElMaXN0Q29uZmlnSXRlbVRleHRDb2wgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9jb25maWctaXRlbS5pbnRlcmZhY2VcIjtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGlic1VpQ29tcG9uZW50c0xpc3RUZW1wbGF0ZXNDb21wb25lbnRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qIFBST1BFUlRZICovXG4gIHByb3RlY3RlZCBsb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICBwcm90ZWN0ZWQgaGVpZ2h0Vmlld1BvcnQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIHN0b3JlID0gc2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+PihbXSk7XG4gIHByb3RlY3RlZCBpdGVtcyA9IHNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj4oW10pO1xuICBwcm90ZWN0ZWQgbG9hZGVkTGFzdEl0ZW0gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgaGFzU2Nyb2xsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGZpZWxkS2V5RGVmYXVsdCA9IHNpZ25hbDxzdHJpbmc+KCdpZCcpO1xuICBwcm90ZWN0ZWQgZmllbGRLZXkgPSBzaWduYWw8c3RyaW5nPignaWQnKTtcbiAgcHJvdGVjdGVkIHRpbWVBdXRvU2Nyb2xsSXRlbVNlbGVjdGVkID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBwYWdpbmdTdG9yZSA9IHNpZ25hbDxJUGFnaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgaGVpZ2h0SXRlbSA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgdGltZUludGVydmFsSW50ZXJ2YWxTZXRIZWlnaHRWaWV3UG9ydCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgdGltZUludGVydmFsQ2hlY2tTY3JvbGwgPSBzaWduYWw8bnVtYmVyPigyNTApO1xuXG4gIHByb3RlY3RlZCBvbkRlc3Ryb3k6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcm90ZWN0ZWQgaW50ZXJ2YWxTZXRIZWlnaHRWaWV3UG9ydFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIGludGVydmFsQ2hlY2tTY3JvbGxTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgLyogSU5QVVQgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25HZXRJdGVtc0F1dG9BZGRMaXN0ID0gaW5wdXQ8KCgpID0+IEFycmF5PGFueT4pIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBwYWRkaW5nTGVmdEl0ZW0gPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBtYXhJdGVtU2hvdyA9IGlucHV0PG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IHNlYXJjaENvbmZpZyA9IGlucHV0PElJbnB1dFNlYXJjaENvbmZpZz4oKTtcbiAgcmVhZG9ubHkgY29uZmlnID0gaW5wdXQ8SUxpc3RDb25maWdJdGVtPigpO1xuICByZWFkb25seSBrZXlTZWFyY2ggPSBtb2RlbDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgZHJvcGRvd25UYWJLZXlBY3RpdmUgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGlzU2VhcmNoT25saW5lID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHJlYWRvbmx5IG9uU2VhcmNoID0gaW5wdXQ8U3ViamVjdDxzdHJpbmc+PigpO1xuICByZWFkb25seSBvblJlZnJlc2ggPSBpbnB1dDxTdWJqZWN0PHZvaWQ+PigpO1xuICByZWFkb25seSBvblNldEhpZGRlbkl0ZW1CeUtleSA9IGlucHV0PFN1YmplY3Q8QXJyYXk8dW5rbm93bj4+PigpO1xuICByZWFkb25seSBvblJlbW92ZUl0ZW1zID0gaW5wdXQ8U3ViamVjdDxBcnJheTx1bmtub3duPj4+KCk7XG4gIHJlYWRvbmx5IG9uU2V0RGF0YVN0b3JlID0gaW5wdXQ8U3ViamVjdDxBcnJheTxhbnk+Pj4oKTtcbiAgcmVhZG9ubHkgb25VcGRhdGVNdWx0aUtleVNlbGVjdGVkR3JvdXAgPSBpbnB1dDxTdWJqZWN0PHZvaWQ+PigpO1xuICByZWFkb25seSBvbkl0ZW1DaGFuZ2VVblNlbGVjdCA9IGlucHV0PFN1YmplY3Q8YW55Pj4oKTtcbiAgcmVhZG9ubHkgb25VcGRhdGVEYXRhID0gaW5wdXQ8U3ViamVjdDxJRGF0YVVwZGF0ZVRvU3RvcmU+PigpO1xuICByZWFkb25seSBjbGlja0V4YWN0bHkgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBrZXlTZWxlY3RlZCA9IG1vZGVsPHVua25vd24+KCk7IC8vIHPhu60gZOG7pW5nIGNobyB0eXBlIHJhZGlvLHRleHQuXG4gIHJlYWRvbmx5IG11bHRpS2V5U2VsZWN0ZWQgPSBtb2RlbDxBcnJheTx1bmtub3duPiB8IHVuZGVmaW5lZD4oW10pOyAvLyBz4butIGThu6VuZyBjaG8gdHlwZSBjaG8gcGjDqXAgY2jhu41uIG5oaeG7gXUuXG4gIHJlYWRvbmx5IGtleXNEaXNhYmxlSXRlbSA9IGlucHV0PEFycmF5PHVua25vd24+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBrZXlzSGlkZGVuSXRlbSA9IG1vZGVsPEFycmF5PHVua25vd24+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZUxhYmVsID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigxMjAwKTtcbiAgcmVhZG9ubHkgbG9hZGluZ0ljb25TaXplID0gaW5wdXQ8J2xhcmdlJyB8ICdtZWRpdW0nIHwgJ3NtYWxsJyB8ICdzbWFsbGVyJyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgcmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5RHJvcGRvd24gPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBpZ25vcmVDbGFzc0Rpc2FibGVEZWZhdWx0V2hlblVzZUtleXNEaXNhYmxlSXRlbSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KCk7IC8vIGLhu48gY2jhur8gxJHhu5kgZGlzYWJsZSBpdGVtIHRyw6puIGh0bWwgxJHhu4MgZGlzYWJsZSB04burbmcgcGjhuqduIHRyb25nIHJvd3NcbiAgcmVhZG9ubHkgdGVtcGxhdGVSZWZTZWFyY2hOb0RhdGEgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGF1dG9TZWxlY3RlZEZpcnN0SXRlbUNhbGxPdXRzaWRlQmVmb3JlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8qIE9VVFBVVCAqL1xuICByZWFkb25seSBvdXRTb3J0U2luZ2xlU2VsZWN0ID0gb3V0cHV0PElTb3J0PigpO1xuICByZWFkb25seSBvdXRTZWxlY3RLZXkgPSBvdXRwdXQ8SUxpc3REYXRhRW1pdEtleSB8IHVuZGVmaW5lZD4oKTsgLy8gc+G7rSBk4bulbmcgY2hvIHR5cGUgcmFkaW8sdGV4dC5cbiAgcmVhZG9ubHkgb3V0U2VsZWN0TXVsdGlLZXkgPSBvdXRwdXQ8SUxpc3REYXRhRW1pdE11bHRpS2V5PigpOyAvLyBz4butIGThu6VuZyBjaG8gdHlwZSBjaG8gcGjDqXAgY2jhu41uIG5oaeG7gXUuXG4gIHJlYWRvbmx5IG91dFVuU2VsZWN0TXVsdGlLZXkgPSBvdXRwdXQ8QXJyYXk8dW5rbm93bj4+KCk7IC8vIHPhu60gZOG7pW5nIGNobyB0eXBlIGNobyBwaMOpcCBjaOG7jW4gbmhp4buBdS5cbiAgcmVhZG9ubHkgb3V0RmllbGRLZXkgPSBvdXRwdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBvdXRDaGFuZ2VWaWV3ID0gb3V0cHV0PEFycmF5PGFueT4+KCk7XG4gIHJlYWRvbmx5IG91dExvYWRpbmcgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIgPSBvdXRwdXQ8SUZsYWdNb3VzZT4oKTtcbiAgcmVhZG9ubHkgb3V0TG9hZEl0ZW1zQ29tcGxldGUgPSBvdXRwdXQ8eyBpdGVtczogQXJyYXk8YW55PiwgcGFnaW5nPzogSVBhZ2luZyB9PigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcHJvdGVjdGVkIGl0ZW1SZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2l0ZW1SZWYnKTtcblxuICAvKiBJTkpFQ1QgKi9cbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gIHByb3RlY3RlZCBodHRwUmVxdWVzdFNlcnZpY2UgPSBpbmplY3QoTGlic1VpSHR0cFJlcXVlc3RTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm9uU2VhcmNoKCk/LnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKChrZXlTZWFyY2g6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5rZXlTZWFyY2guc2V0KGtleVNlYXJjaCA/PyAnJyk7XG4gICAgICB0aGlzLnByb2Nlc3NTZWFyY2goKTtcbiAgICB9KTtcbiAgICB0aGlzLm9uUmVmcmVzaCgpPy5waXBlKHNraXBXaGlsZSgoKSA9PiB0aGlzLmxvYWRpbmcoKSksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5kcm9wZG93blRhYktleUFjdGl2ZSgpKSB7XG4gICAgICAgIHRoaXMuaXRlbXMuc2V0KFtdKTtcbiAgICAgICAgdGhpcy5zdG9yZS5zZXQoW10pO1xuICAgICAgfVxuICAgICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKHRydWUpO1xuICAgIH0pO1xuICAgIHRoaXMub25JdGVtQ2hhbmdlVW5TZWxlY3QoKT8ucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvY2Vzc0tleUNoYW5nZVVuU2VsZWN0KGl0ZW0pO1xuICAgIH0pO1xuICAgIHRoaXMub25TZXRIaWRkZW5JdGVtQnlLZXkoKT8ucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUodGhpcy5zZXRIaWRkZW5JdGVtQnlLZXkuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5vdXRGaWVsZEtleS5lbWl0KGdldEZpZWxkS2V5QnlUeXBlKHRoaXMuY29uZmlnKCksIHRoaXMuZmllbGRLZXlEZWZhdWx0KCkpKTtcbiAgICB0aGlzLm9uUmVtb3ZlSXRlbXMoKT8ucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUodGhpcy5yZW1vdmVJdGVtcy5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLm9uVXBkYXRlRGF0YSgpPy5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSh0aGlzLnVwZGF0ZURhdGEuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJpdmF0ZSB1cGRhdGVEYXRhKGRhdGE6IElEYXRhVXBkYXRlVG9TdG9yZSkge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IG5ld0RhdGEsIGZ1bmN0aW9uQ3VzdG9tQWRkRGF0YVRvU3RvcmUgfSA9IGRhdGE7XG4gICAgaWYgKCFuZXdEYXRhIHx8ICFuZXdEYXRhLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcoKT8udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgbmV3RGF0YS5mb3JFYWNoKGl0ZW0gPT4gKGl0ZW0uaXNBZGROZXcgPSB0cnVlKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uQ3VzdG9tQWRkRGF0YVRvU3RvcmUobmV3RGF0YSwgdGhpcy5zdG9yZSk7XG4gICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWVsZEtleSgpIHtcbiAgICBsZXQgZmllbGRLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuICdpZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjb25maWcudHlwZSkge1xuICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICBmaWVsZEtleSA9IGNvbmZpZy5jb25maWdUZW1wbGF0ZUdyb3VwPy4oKT8uZmllbGRLZXk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd0YWcnOlxuICAgICAgICBmaWVsZEtleSA9IGNvbmZpZy5jb25maWdUZW1wbGF0ZVRhZz8uKCk/LmZpZWxkS2V5O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIGZpZWxkS2V5ID0gY29uZmlnLmNvbmZpZ1RlbXBsYXRlVGV4dD8uKCk/LmZpZWxkS2V5O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICBmaWVsZEtleSA9IGNvbmZpZy5jb25maWdUZW1wbGF0ZUNoZWNrYm94Py4oKT8uZmllbGRLZXk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyYWRpbyc6XG4gICAgICAgIGZpZWxkS2V5ID0gY29uZmlnLmNvbmZpZ1RlbXBsYXRlUmFkaW8/LigpPy5maWVsZEtleTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkS2V5IHx8ICdpZCc7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUl0ZW1zKGtleXM6IEFycmF5PHVua25vd24+KSB7XG4gICAgY29uc3QgZmllbGRLZXkgPSB0aGlzLmdldEZpZWxkS2V5KCk7XG5cbiAgICBbdGhpcy5zdG9yZSgpLCB0aGlzLml0ZW1zKCldLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICBpZiAodGhpcy5jb25maWcoKT8udHlwZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICBlbGVtZW50LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0oKVt0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZUdyb3VwPy4oKT8uZmllbGRHZXRJdGVtcyB8fCAnaXRlbXMnXSgpLCBrZXlzLCBmaWVsZEtleSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVtb3ZlSXRlbShlbGVtZW50LCBrZXlzLCBmaWVsZEtleSk7XG4gICAgfSk7XG4gICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVJdGVtKGRhdGE6IEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+LCBrZXlzOiBBcnJheTx1bmtub3duPiwgZmllbGRLZXk6IHN0cmluZykge1xuICAgIGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IGRhdGEuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSgpW2ZpZWxkS2V5XSA9PT0ga2V5KTtcblxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgZGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEhlaWdodFZpZXdQb3J0KGNhbGxCYWNrQ2FsY3VsYXRvckhlaWdodFN1Y2Nlc3M/OiAoKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgbGVuZ3RoSXRlbXMgPSB0aGlzLmdldExlbmd0aEl0ZW0oKTtcblxuICAgIGlmICghbGVuZ3RoSXRlbXMpIHtcbiAgICAgIHRoaXMub3V0Q2hhbmdlVmlldy5lbWl0KFsuLi50aGlzLml0ZW1zKCldKTtcbiAgICAgIGlmICh0aGlzLmhlaWdodEl0ZW0oKSkge1xuICAgICAgICB0aGlzLmhlaWdodFZpZXdQb3J0LnNldCh0aGlzLmhlaWdodEl0ZW0oKSk7XG4gICAgICB9XG4gICAgICBjYWxsQmFja0NhbGN1bGF0b3JIZWlnaHRTdWNjZXNzPy4oKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoZWlnaHRWaWV3UG9ydCA9IHRoaXMuZ2V0SGVpZ2h0R3JvdXBIYXNMaW5lKCkgKyAobGVuZ3RoSXRlbXMgPCB0aGlzLm1heEl0ZW1TaG93KCkgPyBsZW5ndGhJdGVtcyAqIHRoaXMuaGVpZ2h0SXRlbSgpIDogdGhpcy5tYXhJdGVtU2hvdygpICogdGhpcy5oZWlnaHRJdGVtKCkpICsgKHRoaXMuY29uZmlnKCk/LmNvbmZpZ1RlbXBsYXRlR3JvdXA/LigpPy5jb25maWdDaGVja2JveENoZWNrQWxsID8gMjcgOiAwKSArICh0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZUdyb3VwPy4oKT8uY29uZmlnQnV0dG9uU2VsZWN0QW5kVW5kU2VsZWN0SXRlbSA/IDI3IDogMCk7XG5cbiAgICBpZiAoIXRoaXMubWF4SXRlbVNob3coKSkge1xuICAgICAgdGhpcy5oZWlnaHRWaWV3UG9ydC5zZXQoMCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhlaWdodEl0ZW0oKSA+IDEzKSB7XG4gICAgICBpZiAoaGVpZ2h0Vmlld1BvcnQgJiYgaGVpZ2h0Vmlld1BvcnQgIT09IHRoaXMuaGVpZ2h0Vmlld1BvcnQoKSkge1xuICAgICAgICB0aGlzLmhlaWdodFZpZXdQb3J0LnNldChoZWlnaHRWaWV3UG9ydCk7XG4gICAgICB9XG4gICAgICB0aGlzLm91dENoYW5nZVZpZXcuZW1pdChbLi4udGhpcy5pdGVtcygpXSk7XG4gICAgICBjYWxsQmFja0NhbGN1bGF0b3JIZWlnaHRTdWNjZXNzPy4oKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmludGVydmFsU2V0SGVpZ2h0Vmlld1BvcnRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbnRlcnZhbFNldEhlaWdodFZpZXdQb3J0U3Vic2NyaXB0aW9uID0gaW50ZXJ2YWwodGhpcy50aW1lSW50ZXJ2YWxJbnRlcnZhbFNldEhlaWdodFZpZXdQb3J0KCkpLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pdGVtUmVmKCkgfHwgIXRoaXMuaXRlbVJlZigpPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGVpZ2h0SXRlbS5zZXQodGhpcy5pdGVtUmVmKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtcblxuICAgICAgaWYgKHRoaXMuaGVpZ2h0SXRlbSgpIDwgMTMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnRlcnZhbFNldEhlaWdodFZpZXdQb3J0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5zZXRIZWlnaHRWaWV3UG9ydChjYWxsQmFja0NhbGN1bGF0b3JIZWlnaHRTdWNjZXNzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRIaWRkZW5JdGVtQnlLZXkoa2V5czogQXJyYXk8dW5rbm93bj4pIHtcbiAgICB0aGlzLmtleXNIaWRkZW5JdGVtLnNldChrZXlzKTtcbiAgICBpZiAodGhpcy5zdG9yZSgpICYmIHRoaXMuc3RvcmUoKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMucHJvY2Vzc0RhdGEoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjaGVja1ZpZXdQb3J0U2Nyb2xsKGNhbGxCYWNrPzogKHByZTogYm9vbGVhbiwgY3VycmVudDogYm9vbGVhbikgPT4gdm9pZCkge1xuICAgIGNvbnN0IHByZSA9IHRoaXMuaGFzU2Nyb2xsKCk7XG5cbiAgICB0aGlzLmludGVydmFsQ2hlY2tTY3JvbGxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbnRlcnZhbENoZWNrU2Nyb2xsU3Vic2NyaXB0aW9uID0gaW50ZXJ2YWwodGhpcy50aW1lSW50ZXJ2YWxDaGVja1Njcm9sbCgpKS5waXBlKHRha2UoNSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmhhc1Njcm9sbC5zZXQoZmFsc2UpO1xuICAgICAgaWYgKHRoaXMuaXRlbXMoKSAmJiAhdGhpcy5pdGVtcygpLmxlbmd0aCAmJiBwcmUgJiYgIXRoaXMuaGFzU2Nyb2xsKCkpIHtcbiAgICAgICAgY2FsbEJhY2s/LihwcmUsIHRoaXMuaGFzU2Nyb2xsKCkpO1xuICAgICAgICB0aGlzLmludGVydmFsQ2hlY2tTY3JvbGxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICBjYWxsQmFjaz8uKHByZSwgdGhpcy5oYXNTY3JvbGwoKSk7XG4gICAgICB0aGlzLmludGVydmFsQ2hlY2tTY3JvbGxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY2FsbEFwaUJ5U2VydmljZShmaXJzdENhbGwgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGh0dHBSZXF1ZXN0RGF0YSwgaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoIH0gPSBjb25maWc7XG5cbiAgICAgIGlmICghaHR0cFJlcXVlc3REYXRhPy4oKSB8fCAoaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoICYmICF0aGlzLmtleVNlYXJjaCgpKSkge1xuICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgICAgICB0aGlzLmxvYWRlZExhc3RJdGVtLnNldCh0cnVlKTtcbiAgICAgICAgaWYgKGlnbm9yZVNob3dEYXRhV2hlbk5vdFNlYXJjaCAmJiAhdGhpcy5rZXlTZWFyY2goKSkge1xuICAgICAgICAgIHRoaXMuaXRlbXMuc2V0KFtdKTtcbiAgICAgICAgICB0aGlzLnN0b3JlLnNldChbXSk7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzRGF0YSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG4gICAgICBjb25zdCB7IGFyZ3VtZW50c1ZhbHVlLCBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSB9ID0gaHR0cFJlcXVlc3REYXRhKCk7XG5cbiAgICAgIGlmIChmaXJzdENhbGwpIHtcbiAgICAgICAgY29uc3QgbG9hZGVkTGFzdEl0ZW0gPSB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS51cGRhdGVBcmd1bWVudHMoYXJndW1lbnRzVmFsdWUsIHsgLi4udGhpcy5mYWtlUmVzcG9uc2VBcGkoKSwgZHJvcGRvd25UYWJLZXlBY3RpdmU6IHRoaXMuZHJvcGRvd25UYWJLZXlBY3RpdmUoKSB9LCB0aGlzLnBhZ2luZ1N0b3JlKCkgfHwge30sIHRoaXMua2V5U2VhcmNoKCksIHRoaXMuaXNTZWFyY2hPbmxpbmUoKSwgdGhpcy5sb2FkZWRMYXN0SXRlbSgpLCBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSk7XG4gICAgICAgIHRoaXMubG9hZGVkTGFzdEl0ZW0uc2V0KGxvYWRlZExhc3RJdGVtKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLmNhbGxBcGkoaHR0cFJlcXVlc3REYXRhKCkpO1xuXG4gICAgICB0aGlzLnBhZ2luZ1N0b3JlLnNldChyZXN1bHQucGFnaW5nKTtcbiAgICAgIGlmICghdGhpcy5wYWdpbmdTdG9yZSkge1xuICAgICAgICB0aGlzLmxvYWRlZExhc3RJdGVtLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxvYWRlZExhc3RJdGVtID0gdGhpcy5odHRwUmVxdWVzdFNlcnZpY2UudXBkYXRlQXJndW1lbnRzKGFyZ3VtZW50c1ZhbHVlLCB7IC4uLnJlc3VsdCwgZHJvcGRvd25UYWJLZXlBY3RpdmU6IHRoaXMuZHJvcGRvd25UYWJLZXlBY3RpdmUoKSB9LCB0aGlzLnBhZ2luZ1N0b3JlKCkgfHwge30sIHRoaXMua2V5U2VhcmNoKCksIHRoaXMuaXNTZWFyY2hPbmxpbmUoKSwgdGhpcy5sb2FkZWRMYXN0SXRlbSgpLCBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSk7XG5cbiAgICAgIHRoaXMubG9hZGVkTGFzdEl0ZW0uc2V0KGxvYWRlZExhc3RJdGVtKTtcblxuICAgICAgaWYgKGZpcnN0Q2FsbCkge1xuICAgICAgICB0aGlzLnN0b3JlLnNldChjb252ZXJ0T2JqZWN0VG9TaWduYWw8V3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4+PihyZXN1bHQuZGF0YSB8fCBbXSkoKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZnVuY3Rpb25HZXRJdGVtc0F1dG9BZGRMaXN0KCkpIHtcbiAgICAgICAgICBjb25zdCBuZXdJdGVtcyA9IGNvbnZlcnRPYmplY3RUb1NpZ25hbDxXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj4+KHRoaXMuZnVuY3Rpb25HZXRJdGVtc0F1dG9BZGRMaXN0KCk/LigpIHx8IFtdKTtcblxuICAgICAgICAgIHRoaXMuc3RvcmUudXBkYXRlKGl0ZW1zID0+IFsuLi5uZXdJdGVtcygpLCAuLi5pdGVtc10pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc0RhdGEodHJ1ZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zdG9yZS51cGRhdGUoaXRlbXMgPT4gWy4uLml0ZW1zLCAuLi5jb252ZXJ0T2JqZWN0VG9TaWduYWw8V3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4+PihyZXN1bHQuZGF0YSB8fCBbXSkoKV0pO1xuICAgICAgdGhpcy5wcm9jZXNzRGF0YShmYWxzZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBmYWtlUmVzcG9uc2VBcGkoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgdGhpcy5sb2FkZWRMYXN0SXRlbS5zZXQoZmFsc2UpO1xuICAgIHRoaXMucGFnaW5nU3RvcmUuc2V0KHt9KTtcblxuICAgIHJldHVybiB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS5mYWtlUmVzcG9uc2VQYWdpbmdBcGkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZFZhbHVlQnlDb25maWcoaXRlbTogV3JpdGFibGVTaWduYWw8YW55PiwgY29uZmlnVGVtcGxhdGU/OiBJTGlzdENvbmZpZ0l0ZW1UZXh0IHwgSUxpc3RDb25maWdJdGVtUmFkaW8gfCBJTGlzdENvbmZpZ0l0ZW1DaGVja2JveCk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVmID0gaXRlbSgpLnJlZiB8fCB7fTtcbiAgICBjb25zdCBsYWJlbDogdW5rbm93biA9IHJlZi5sYWJlbCB8fCByZWYudGl0bGUgfHwgcmVmLnZhbHVlIHx8IHJlZi5uYW1lIHx8ICcgJztcblxuICAgIGlmICh0eXBlb2YgbGFiZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpdGVtLnVwZGF0ZShjdXJyZW50SXRlbSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLmN1cnJlbnRJdGVtLCBmaWVsZExhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChyZWYubGFiZWwgfHwgcmVmLnRpdGxlIHx8IHJlZi52YWx1ZSB8fCByZWYubmFtZSB8fCAnICcpIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnVGVtcGxhdGU/LmdldFZhbHVlKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1RlbXBsYXRlLmdldFZhbHVlKHJlZik7XG5cbiAgICAgIGl0ZW0udXBkYXRlKGN1cnJlbnRJdGVtID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uY3VycmVudEl0ZW0sIGZpZWxkTGFiZWw6IHZhbHVlID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYCR7dmFsdWV9YCkgOiAnJyB9O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjb25maWdUZW1wbGF0ZT8uZ2V0UG9wb3Zlcikge1xuICAgICAgaXRlbS51cGRhdGUoY3VycmVudEl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4geyAuLi5jdXJyZW50SXRlbSwgcG9wb3ZlckxhYmVsOiBjb25maWdUZW1wbGF0ZT8uZ2V0UG9wb3Zlcj8uKGl0ZW0oKSkgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnVGVtcGxhdGU/LnJvd3M/LigpKSB7XG4gICAgICByZXR1cm4gaXRlbSgpLmZpZWxkTGFiZWw7XG4gICAgfVxuICAgIGxldCB0ZXh0U2VhcmNoID0gaXRlbSgpLmZpZWxkTGFiZWwgfHwgJyc7XG5cbiAgICBjb25zdCByb3dzID0gY29udmVydFNpZ25hbFRvT2JqZWN0KGNvbmZpZ1RlbXBsYXRlLnJvd3MoKSkgYXMgQXJyYXk8YW55PjtcblxuICAgIHJvd3MuZm9yRWFjaCgocm93LCBpbmRleFJvdykgPT4ge1xuICAgICAgY29uc3QgZmllbGROYW1lUm93ID0gYGZpZWxkTGFiZWxSb3cke2luZGV4Um93fWA7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gY2xvbmVEZWVwKGl0ZW0oKSk7XG4gICAgICBjb25zdCBuZXdJdGVtID0geyAuLi5jdXJyZW50SXRlbSB9O1xuICAgICAgbmV3SXRlbVtmaWVsZE5hbWVSb3ddID0gcm93LmdldFZhbHVlICYmIHJvdy5nZXRWYWx1ZShyZWYpO1xuICAgICAgbmV3SXRlbVtgZmllbGRSb3dTdHlsZXNEeW5hbWljQ29scyR7aW5kZXhSb3d9YF0gPSByb3cuZ2V0Um93U3R5bGVzRHluYW1pY0NvbHMgJiYgcm93LmdldFJvd1N0eWxlc0R5bmFtaWNDb2xzKHJlZik7XG4gICAgICBuZXdJdGVtW2BmaWVsZFJvd0F2YXRhckNvbmZpZyR7aW5kZXhSb3d9YF0gPSByb3cuZ2V0QXZhdGFyQ29uZmlnICYmIHJvdy5nZXRBdmF0YXJDb25maWcocmVmKTtcbiAgICAgIGlmIChyb3cuY29scyAmJiByb3cuY29scy5sZW5ndGgpIHtcbiAgICAgICAgcm93LmNvbHMuZm9yRWFjaChhc3luYyAoY29sOiBJTGlzdENvbmZpZ0l0ZW1UZXh0Q29sLCBpbmRleENvbDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmllbGROYW1lQ29sID0gYGZpZWxkTGFiZWxDb2wke2luZGV4Um93fSR7aW5kZXhDb2x9YDtcblxuICAgICAgICAgIG5ld0l0ZW1bZmllbGROYW1lQ29sXSA9IGNvbC5nZXRWYWx1ZTtcbiAgICAgICAgICBuZXdJdGVtW2BmaWVsZENvbENsYXNzJHtpbmRleFJvd30ke2luZGV4Q29sfWBdID0gY29sLmdldENsYXNzQ29sICYmIGNvbC5nZXRDbGFzc0NvbChyZWYsIGluZGV4Q29sKTtcbiAgICAgICAgICBuZXdJdGVtW2BmaWVsZENvbFBvcG92ZXIke2luZGV4Um93fSR7aW5kZXhDb2x9YF0gPSBjb2wuZ2V0UG9wb3ZlciAmJiBjb2wuZ2V0UG9wb3ZlcihyZWYsIGluZGV4Q29sKTtcbiAgICAgICAgICBuZXdJdGVtW2BmaWVsZEJhZGdlJHtpbmRleFJvd30ke2luZGV4Q29sfWBdID0gY29sLmdldENvbmZpZ0JhZGdlICYmIGNvbC5nZXRDb25maWdCYWRnZShyZWYsIGluZGV4Q29sKTtcbiAgICAgICAgICBuZXdJdGVtW2BmaWVsZENvbFN0eWxlc0R5bmFtaWMke2luZGV4Um93fSR7aW5kZXhDb2x9YF0gPSBjb2wuZ2V0U3R5bGVzRHluYW1pY0NvbDtcbiAgICAgICAgICBuZXdJdGVtW2BmaWVsZENvbEJ1dHRvbiR7aW5kZXhSb3d9JHtpbmRleENvbH1gXSA9IGNvbC5nZXRCdXR0b24gJiYgY29sLmdldEJ1dHRvbihyZWYsIGluZGV4Q29sKTtcbiAgICAgICAgICBuZXdJdGVtW2BmaWVsZENvbFN3aXRjaCR7aW5kZXhSb3d9JHtpbmRleENvbH1gXSA9IGNvbC5nZXRMYWJlbFN3aXRjaCAmJiBjb2wuZ2V0TGFiZWxTd2l0Y2gocmVmLCBpbmRleENvbCk7XG4gICAgICAgICAgbmV3SXRlbVtgZmllbGRDb2xBdmF0YXJDb25maWcke2luZGV4Um93fSR7aW5kZXhDb2x9YF0gPSBjb2wuZ2V0QXZhdGFyQ29uZmlnICYmIGNvbC5nZXRBdmF0YXJDb25maWcocmVmKTtcblxuICAgICAgICAgIHRleHRTZWFyY2ggPSBgICR7dGV4dFNlYXJjaH0gJHtuZXdJdGVtW2ZpZWxkTmFtZUNvbF0gfHwgJyd9IGA7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpdGVtLnVwZGF0ZSgoKSA9PiBuZXdJdGVtKTtcbiAgICAgIHRleHRTZWFyY2ggPSBgICR7dGV4dFNlYXJjaH0gJHtpdGVtKClbZmllbGROYW1lUm93XSB8fCAnJ30gYDtcbiAgICB9KTtcblxuICAgIHJldHVybiB0ZXh0U2VhcmNoIHx8ICcgJztcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZShmbGFnOiBJRmxhZ01vdXNlKSB7XG4gICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlci5lbWl0KGZsYWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHByb2Nlc3NEYXRhKGlzUmVwbGFjZT86IGJvb2xlYW4pOiBhbnk7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwcm9jZXNzU2VhcmNoKCk6IGFueTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldExlbmd0aEl0ZW0oKTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZ2V0SGVpZ2h0R3JvdXBIYXNMaW5lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHByb2Nlc3NLZXlDaGFuZ2VVblNlbGVjdChpdGVtOiBhbnkpOiB2b2lkO1xuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVBdXRvU2Nyb2xsSXRlbVNlbGVjdGVkKCkpO1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG59Il19
|
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmNvbXBvbmVudC5hYnN0cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9saXN0L3NyYy90ZW1wbGF0ZXMvdGVtcGxhdGVzLmNvbXBvbmVudC5hYnN0cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsNERBQTREO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLE1BQU0sRUFBZSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBSy9JLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBSzNELE1BQU0sT0FBZ0IsOENBQThDO0lBQ2xFLGNBQWM7SUFDSixPQUFPLEdBQUcsTUFBTSxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQ2hDLGNBQWMsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsS0FBSyxHQUFHLE1BQU0sQ0FBNkIsRUFBRSxDQUFDLENBQUM7SUFDL0MsS0FBSyxHQUFHLE1BQU0sQ0FBNkIsRUFBRSxDQUFDLENBQUM7SUFDL0MsY0FBYyxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN4QyxTQUFTLEdBQUcsTUFB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ZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L3VzZS1saWZlY3ljbGUtaW50ZXJmYWNlICovXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIG91dHB1dCwgc2lnbmFsLCBUZW1wbGF0ZVJlZiwgdmlld0NoaWxkLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJU29ydCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtc29ydFwiO1xuaW1wb3J0IHsgSUlucHV0U2VhcmNoQ29uZmlnIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXNlYXJjaFwiO1xuaW1wb3J0IHsgSUZsYWdNb3VzZSB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXJcIjtcbmltcG9ydCB7IElQYWdpbmcsIFRZUEVfVEVNUExBVEVfUkVGIH0gZnJvbSBcIkBsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXNcIjtcbmltcG9ydCB7IExpYnNVaUh0dHBSZXF1ZXN0U2VydmljZSB9IGZyb20gXCJAbGlicy11aS9zZXJ2aWNlcy1odHRwLXJlcXVlc3RcIjtcbmltcG9ydCB7IGNsb25lRGVlcCwgY29udmVydE9iamVjdFRvU2lnbmFsLCBjb252ZXJ0U2lnbmFsVG9PYmplY3QgfSBmcm9tIFwiQGxpYnMtdWkvdXRpbHNcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGludGVydmFsLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNraXBXaGlsZSwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZ2V0RmllbGRLZXlCeVR5cGUgfSBmcm9tIFwiLi4vZGVmaW5lcy9saXN0LmRlZmluZVwiO1xuaW1wb3J0IHsgSURhdGFVcGRhdGVUb1N0b3JlLCBJTGlzdERhdGFFbWl0S2V5LCBJTGlzdERhdGFFbWl0TXVsdGlLZXkgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgSUxpc3RDb25maWdJdGVtLCBJTGlzdENvbmZpZ0l0ZW1DaGVja2JveCwgSUxpc3RDb25maWdJdGVtUmFkaW8sIElMaXN0Q29uZmlnSXRlbVRleHQsIElMaXN0Q29uZmlnSXRlbVRleHRDb2wgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9jb25maWctaXRlbS5pbnRlcmZhY2VcIjtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGlic1VpQ29tcG9uZW50c0xpc3RUZW1wbGF0ZXNDb21wb25lbnRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qIFBST1BFUlRZICovXG4gIHByb3RlY3RlZCBsb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICBwcm90ZWN0ZWQgaGVpZ2h0Vmlld1BvcnQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIHN0b3JlID0gc2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+PihbXSk7XG4gIHByb3RlY3RlZCBpdGVtcyA9IHNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj4oW10pO1xuICBwcm90ZWN0ZWQgbG9hZGVkTGFzdEl0ZW0gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgaGFzU2Nyb2xsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGZpZWxkS2V5RGVmYXVsdCA9IHNpZ25hbDxzdHJpbmc+KCdpZCcpO1xuICBwcm90ZWN0ZWQgZmllbGRLZXkgPSBzaWduYWw8c3RyaW5nPignaWQnKTtcbiAgcHJvdGVjdGVkIHRpbWVBdXRvU2Nyb2xsSXRlbVNlbGVjdGVkID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBwYWdpbmdTdG9yZSA9IHNpZ25hbDxJUGFnaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgaGVpZ2h0SXRlbSA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgdGltZUludGVydmFsSW50ZXJ2YWxTZXRIZWlnaHRWaWV3UG9ydCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgdGltZUludGVydmFsQ2hlY2tTY3JvbGwgPSBzaWduYWw8bnVtYmVyPigyNTApO1xuXG4gIHByb3RlY3RlZCBvbkRlc3Ryb3k6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcm90ZWN0ZWQgaW50ZXJ2YWxTZXRIZWlnaHRWaWV3UG9ydFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIGludGVydmFsQ2hlY2tTY3JvbGxTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgLyogSU5QVVQgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25HZXRJdGVtc0F1dG9BZGRMaXN0ID0gaW5wdXQ8KCgpID0+IEFycmF5PGFueT4pIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBwYWRkaW5nTGVmdEl0ZW0gPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBtYXhJdGVtU2hvdyA9IGlucHV0PG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IHNlYXJjaENvbmZpZyA9IGlucHV0PElJbnB1dFNlYXJjaENvbmZpZz4oKTtcbiAgcmVhZG9ubHkgY29uZmlnID0gaW5wdXQ8SUxpc3RDb25maWdJdGVtPigpO1xuICByZWFkb25seSBrZXlTZWFyY2ggPSBtb2RlbDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgZHJvcGRvd25UYWJLZXlBY3RpdmUgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGlzU2VhcmNoT25saW5lID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHJlYWRvbmx5IG9uU2VhcmNoID0gaW5wdXQ8U3ViamVjdDxzdHJpbmc+PigpO1xuICByZWFkb25seSBvblJlZnJlc2ggPSBpbnB1dDxTdWJqZWN0PHZvaWQ+PigpO1xuICByZWFkb25seSBvblNldEhpZGRlbkl0ZW1CeUtleSA9IGlucHV0PFN1YmplY3Q8QXJyYXk8dW5rbm93bj4+PigpO1xuICByZWFkb25seSBvblJlbW92ZUl0ZW1zID0gaW5wdXQ8U3ViamVjdDxBcnJheTx1bmtub3duPj4+KCk7XG4gIHJlYWRvbmx5IG9uU2V0RGF0YVN0b3JlID0gaW5wdXQ8U3ViamVjdDxBcnJheTxhbnk+Pj4oKTtcbiAgcmVhZG9ubHkgb25VcGRhdGVNdWx0aUtleVNlbGVjdGVkR3JvdXAgPSBpbnB1dDxTdWJqZWN0PHZvaWQ+PigpO1xuICByZWFkb25seSBvbkl0ZW1DaGFuZ2VVblNlbGVjdCA9IGlucHV0PFN1YmplY3Q8YW55Pj4oKTtcbiAgcmVhZG9ubHkgb25VcGRhdGVEYXRhID0gaW5wdXQ8U3ViamVjdDxJRGF0YVVwZGF0ZVRvU3RvcmU+PigpO1xuICByZWFkb25seSBjbGlja0V4YWN0bHkgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBrZXlTZWxlY3RlZCA9IG1vZGVsPHVua25vd24+KCk7IC8vIHPhu60gZOG7pW5nIGNobyB0eXBlIHJhZGlvLHRleHQuXG4gIHJlYWRvbmx5IG11bHRpS2V5U2VsZWN0ZWQgPSBtb2RlbDxBcnJheTx1bmtub3duPiB8IHVuZGVmaW5lZD4oW10pOyAvLyBz4butIGThu6VuZyBjaG8gdHlwZSBjaG8gcGjDqXAgY2jhu41uIG5oaeG7gXUuXG4gIHJlYWRvbmx5IGtleXNEaXNhYmxlSXRlbSA9IGlucHV0PEFycmF5PHVua25vd24+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBrZXlzSGlkZGVuSXRlbSA9IG1vZGVsPEFycmF5PHVua25vd24+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZUxhYmVsID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigxMjAwKTtcbiAgcmVhZG9ubHkgbG9hZGluZ0ljb25TaXplID0gaW5wdXQ8J2xhcmdlJyB8ICdtZWRpdW0nIHwgJ3NtYWxsJyB8ICdzbWFsbGVyJyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgcmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5RHJvcGRvd24gPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBpZ25vcmVDbGFzc0Rpc2FibGVEZWZhdWx0V2hlblVzZUtleXNEaXNhYmxlSXRlbSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KCk7IC8vIGLhu48gY2jhur8gxJHhu5kgZGlzYWJsZSBpdGVtIHRyw6puIGh0bWwgxJHhu4MgZGlzYWJsZSB04burbmcgcGjhuqduIHRyb25nIHJvd3NcbiAgcmVhZG9ubHkgdGVtcGxhdGVSZWZTZWFyY2hOb0RhdGEgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGF1dG9TZWxlY3RlZEZpcnN0SXRlbUNhbGxPdXRzaWRlQmVmb3JlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8qIE9VVFBVVCAqL1xuICByZWFkb25seSBvdXRTb3J0U2luZ2xlU2VsZWN0ID0gb3V0cHV0PElTb3J0PigpO1xuICByZWFkb25seSBvdXRTZWxlY3RLZXkgPSBvdXRwdXQ8SUxpc3REYXRhRW1pdEtleSB8IHVuZGVmaW5lZD4oKTsgLy8gc+G7rSBk4bulbmcgY2hvIHR5cGUgcmFkaW8sdGV4dC5cbiAgcmVhZG9ubHkgb3V0U2VsZWN0TXVsdGlLZXkgPSBvdXRwdXQ8SUxpc3REYXRhRW1pdE11bHRpS2V5PigpOyAvLyBz4butIGThu6VuZyBjaG8gdHlwZSBjaG8gcGjDqXAgY2jhu41uIG5oaeG7gXUuXG4gIHJlYWRvbmx5IG91dFVuU2VsZWN0TXVsdGlLZXkgPSBvdXRwdXQ8QXJyYXk8dW5rbm93bj4+KCk7IC8vIHPhu60gZOG7pW5nIGNobyB0eXBlIGNobyBwaMOpcCBjaOG7jW4gbmhp4buBdS5cbiAgcmVhZG9ubHkgb3V0RmllbGRLZXkgPSBvdXRwdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBvdXRDaGFuZ2VWaWV3ID0gb3V0cHV0PEFycmF5PGFueT4+KCk7XG4gIHJlYWRvbmx5IG91dExvYWRpbmcgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIgPSBvdXRwdXQ8SUZsYWdNb3VzZT4oKTtcbiAgcmVhZG9ubHkgb3V0TG9hZEl0ZW1zQ29tcGxldGUgPSBvdXRwdXQ8eyBpdGVtczogQXJyYXk8YW55PiwgcGFnaW5nPzogSVBhZ2luZyB9PigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcHJvdGVjdGVkIGl0ZW1SZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2l0ZW1SZWYnKTtcblxuICAvKiBJTkpFQ1QgKi9cbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gIHByb3RlY3RlZCBodHRwUmVxdWVzdFNlcnZpY2UgPSBpbmplY3QoTGlic1VpSHR0cFJlcXVlc3RTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm9uU2VhcmNoKCk/LnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKChrZXlTZWFyY2g6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5rZXlTZWFyY2guc2V0KGtleVNlYXJjaCA/PyAnJyk7XG4gICAgICB0aGlzLnByb2Nlc3NTZWFyY2goKTtcbiAgICB9KTtcbiAgICB0aGlzLm9uUmVmcmVzaCgpPy5waXBlKHNraXBXaGlsZSgoKSA9PiB0aGlzLmxvYWRpbmcoKSksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5kcm9wZG93blRhYktleUFjdGl2ZSgpKSB7XG4gICAgICAgIHRoaXMuaXRlbXMuc2V0KFtdKTtcbiAgICAgICAgdGhpcy5zdG9yZS5zZXQoW10pO1xuICAgICAgfVxuICAgICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKHRydWUpO1xuICAgIH0pO1xuICAgIHRoaXMub25JdGVtQ2hhbmdlVW5TZWxlY3QoKT8ucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvY2Vzc0tleUNoYW5nZVVuU2VsZWN0KGl0ZW0pO1xuICAgIH0pO1xuICAgIHRoaXMub25TZXRIaWRkZW5JdGVtQnlLZXkoKT8ucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUodGhpcy5zZXRIaWRkZW5JdGVtQnlLZXkuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5vdXRGaWVsZEtleS5lbWl0KGdldEZpZWxkS2V5QnlUeXBlKHRoaXMuY29uZmlnKCksIHRoaXMuZmllbGRLZXlEZWZhdWx0KCkpKTtcbiAgICB0aGlzLm9uUmVtb3ZlSXRlbXMoKT8ucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUodGhpcy5yZW1vdmVJdGVtcy5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLm9uVXBkYXRlRGF0YSgpPy5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSh0aGlzLnVwZGF0ZURhdGEuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJpdmF0ZSB1cGRhdGVEYXRhKGRhdGE6IElEYXRhVXBkYXRlVG9TdG9yZSkge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IG5ld0RhdGEsIGZ1bmN0aW9uQ3VzdG9tQWRkRGF0YVRvU3RvcmUgfSA9IGRhdGE7XG4gICAgaWYgKCFuZXdEYXRhKCkgfHwgIW5ld0RhdGEoKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnKCk/LnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgIG5ld0RhdGEoKS5mb3JFYWNoKGl0ZW0gPT4gaXRlbS51cGRhdGUodmFsdWUgPT4gKHsgLi4udmFsdWUsIGlzQWRkTmV3OiB0cnVlIH0pKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uQ3VzdG9tQWRkRGF0YVRvU3RvcmUobmV3RGF0YSwgdGhpcy5zdG9yZSk7XG4gICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWVsZEtleSgpIHtcbiAgICBsZXQgZmllbGRLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuICdpZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjb25maWcudHlwZSkge1xuICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICBmaWVsZEtleSA9IGNvbmZpZy5jb25maWdUZW1wbGF0ZUdyb3VwPy4oKT8uZmllbGRLZXk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd0YWcnOlxuICAgICAgICBmaWVsZEtleSA9IGNvbmZpZy5jb25maWdUZW1wbGF0ZVRhZz8uKCk/LmZpZWxkS2V5O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIGZpZWxkS2V5ID0gY29uZmlnLmNvbmZpZ1RlbXBsYXRlVGV4dD8uKCk/LmZpZWxkS2V5O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICBmaWVsZEtleSA9IGNvbmZpZy5jb25maWdUZW1wbGF0ZUNoZWNrYm94Py4oKT8uZmllbGRLZXk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyYWRpbyc6XG4gICAgICAgIGZpZWxkS2V5ID0gY29uZmlnLmNvbmZpZ1RlbXBsYXRlUmFkaW8/LigpPy5maWVsZEtleTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkS2V5IHx8ICdpZCc7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUl0ZW1zKGtleXM6IEFycmF5PHVua25vd24+KSB7XG4gICAgY29uc3QgZmllbGRLZXkgPSB0aGlzLmdldEZpZWxkS2V5KCk7XG5cbiAgICBbdGhpcy5zdG9yZSgpLCB0aGlzLml0ZW1zKCldLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICBpZiAodGhpcy5jb25maWcoKT8udHlwZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICBlbGVtZW50LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0oKVt0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZUdyb3VwPy4oKT8uZmllbGRHZXRJdGVtcyB8fCAnaXRlbXMnXSgpLCBrZXlzLCBmaWVsZEtleSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVtb3ZlSXRlbShlbGVtZW50LCBrZXlzLCBmaWVsZEtleSk7XG4gICAgfSk7XG4gICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVJdGVtKGRhdGE6IEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+LCBrZXlzOiBBcnJheTx1bmtub3duPiwgZmllbGRLZXk6IHN0cmluZykge1xuICAgIGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IGRhdGEuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSgpW2ZpZWxkS2V5XSA9PT0ga2V5KTtcblxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgZGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEhlaWdodFZpZXdQb3J0KGNhbGxCYWNrQ2FsY3VsYXRvckhlaWdodFN1Y2Nlc3M/OiAoKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgbGVuZ3RoSXRlbXMgPSB0aGlzLmdldExlbmd0aEl0ZW0oKTtcblxuICAgIGlmICghbGVuZ3RoSXRlbXMpIHtcbiAgICAgIHRoaXMub3V0Q2hhbmdlVmlldy5lbWl0KFsuLi50aGlzLml0ZW1zKCldKTtcbiAgICAgIGlmICh0aGlzLmhlaWdodEl0ZW0oKSkge1xuICAgICAgICB0aGlzLmhlaWdodFZpZXdQb3J0LnNldCh0aGlzLmhlaWdodEl0ZW0oKSk7XG4gICAgICB9XG4gICAgICBjYWxsQmFja0NhbGN1bGF0b3JIZWlnaHRTdWNjZXNzPy4oKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoZWlnaHRWaWV3UG9ydCA9IHRoaXMuZ2V0SGVpZ2h0R3JvdXBIYXNMaW5lKCkgKyAobGVuZ3RoSXRlbXMgPCB0aGlzLm1heEl0ZW1TaG93KCkgPyBsZW5ndGhJdGVtcyAqIHRoaXMuaGVpZ2h0SXRlbSgpIDogdGhpcy5tYXhJdGVtU2hvdygpICogdGhpcy5oZWlnaHRJdGVtKCkpICsgKHRoaXMuY29uZmlnKCk/LmNvbmZpZ1RlbXBsYXRlR3JvdXA/LigpPy5jb25maWdDaGVja2JveENoZWNrQWxsID8gMjcgOiAwKSArICh0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZUdyb3VwPy4oKT8uY29uZmlnQnV0dG9uU2VsZWN0QW5kVW5kU2VsZWN0SXRlbSA/IDI3IDogMCk7XG5cbiAgICBpZiAoIXRoaXMubWF4SXRlbVNob3coKSkge1xuICAgICAgdGhpcy5oZWlnaHRWaWV3UG9ydC5zZXQoMCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhlaWdodEl0ZW0oKSA+IDEzKSB7XG4gICAgICBpZiAoaGVpZ2h0Vmlld1BvcnQgJiYgaGVpZ2h0Vmlld1BvcnQgIT09IHRoaXMuaGVpZ2h0Vmlld1BvcnQoKSkge1xuICAgICAgICB0aGlzLmhlaWdodFZpZXdQb3J0LnNldChoZWlnaHRWaWV3UG9ydCk7XG4gICAgICB9XG4gICAgICB0aGlzLm91dENoYW5nZVZpZXcuZW1pdChbLi4udGhpcy5pdGVtcygpXSk7XG4gICAgICBjYWxsQmFja0NhbGN1bGF0b3JIZWlnaHRTdWNjZXNzPy4oKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmludGVydmFsU2V0SGVpZ2h0Vmlld1BvcnRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbnRlcnZhbFNldEhlaWdodFZpZXdQb3J0U3Vic2NyaXB0aW9uID0gaW50ZXJ2YWwodGhpcy50aW1lSW50ZXJ2YWxJbnRlcnZhbFNldEhlaWdodFZpZXdQb3J0KCkpLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pdGVtUmVmKCkgfHwgIXRoaXMuaXRlbVJlZigpPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGVpZ2h0SXRlbS5zZXQodGhpcy5pdGVtUmVmKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtcblxuICAgICAgaWYgKHRoaXMuaGVpZ2h0SXRlbSgpIDwgMTMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnRlcnZhbFNldEhlaWdodFZpZXdQb3J0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5zZXRIZWlnaHRWaWV3UG9ydChjYWxsQmFja0NhbGN1bGF0b3JIZWlnaHRTdWNjZXNzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRIaWRkZW5JdGVtQnlLZXkoa2V5czogQXJyYXk8dW5rbm93bj4pIHtcbiAgICB0aGlzLmtleXNIaWRkZW5JdGVtLnNldChrZXlzKTtcbiAgICBpZiAodGhpcy5zdG9yZSgpICYmIHRoaXMuc3RvcmUoKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMucHJvY2Vzc0RhdGEoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjaGVja1ZpZXdQb3J0U2Nyb2xsKGNhbGxCYWNrPzogKHByZTogYm9vbGVhbiwgY3VycmVudDogYm9vbGVhbikgPT4gdm9pZCkge1xuICAgIGNvbnN0IHByZSA9IHRoaXMuaGFzU2Nyb2xsKCk7XG5cbiAgICB0aGlzLmludGVydmFsQ2hlY2tTY3JvbGxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbnRlcnZhbENoZWNrU2Nyb2xsU3Vic2NyaXB0aW9uID0gaW50ZXJ2YWwodGhpcy50aW1lSW50ZXJ2YWxDaGVja1Njcm9sbCgpKS5waXBlKHRha2UoNSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmhhc1Njcm9sbC5zZXQoZmFsc2UpO1xuICAgICAgaWYgKHRoaXMuaXRlbXMoKSAmJiAhdGhpcy5pdGVtcygpLmxlbmd0aCAmJiBwcmUgJiYgIXRoaXMuaGFzU2Nyb2xsKCkpIHtcbiAgICAgICAgY2FsbEJhY2s/LihwcmUsIHRoaXMuaGFzU2Nyb2xsKCkpO1xuICAgICAgICB0aGlzLmludGVydmFsQ2hlY2tTY3JvbGxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICBjYWxsQmFjaz8uKHByZSwgdGhpcy5oYXNTY3JvbGwoKSk7XG4gICAgICB0aGlzLmludGVydmFsQ2hlY2tTY3JvbGxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY2FsbEFwaUJ5U2VydmljZShmaXJzdENhbGwgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGh0dHBSZXF1ZXN0RGF0YSwgaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoIH0gPSBjb25maWc7XG5cbiAgICAgIGlmICghaHR0cFJlcXVlc3REYXRhPy4oKSB8fCAoaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoICYmICF0aGlzLmtleVNlYXJjaCgpKSkge1xuICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgICAgICB0aGlzLmxvYWRlZExhc3RJdGVtLnNldCh0cnVlKTtcbiAgICAgICAgaWYgKGlnbm9yZVNob3dEYXRhV2hlbk5vdFNlYXJjaCAmJiAhdGhpcy5rZXlTZWFyY2goKSkge1xuICAgICAgICAgIHRoaXMuaXRlbXMuc2V0KFtdKTtcbiAgICAgICAgICB0aGlzLnN0b3JlLnNldChbXSk7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzRGF0YSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG4gICAgICBjb25zdCB7IGFyZ3VtZW50c1ZhbHVlLCBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSB9ID0gaHR0cFJlcXVlc3REYXRhKCk7XG5cbiAgICAgIGlmIChmaXJzdENhbGwpIHtcbiAgICAgICAgY29uc3QgbG9hZGVkTGFzdEl0ZW0gPSB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS51cGRhdGVBcmd1bWVudHMoYXJndW1lbnRzVmFsdWUsIHsgLi4udGhpcy5mYWtlUmVzcG9uc2VBcGkoKSwgZHJvcGRvd25UYWJLZXlBY3RpdmU6IHRoaXMuZHJvcGRvd25UYWJLZXlBY3RpdmUoKSB9LCB0aGlzLnBhZ2luZ1N0b3JlKCkgfHwge30sIHRoaXMua2V5U2VhcmNoKCksIHRoaXMuaXNTZWFyY2hPbmxpbmUoKSwgdGhpcy5sb2FkZWRMYXN0SXRlbSgpLCBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSk7XG4gICAgICAgIHRoaXMubG9hZGVkTGFzdEl0ZW0uc2V0KGxvYWRlZExhc3RJdGVtKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLmNhbGxBcGkoaHR0cFJlcXVlc3REYXRhKCkpO1xuXG4gICAgICB0aGlzLnBhZ2luZ1N0b3JlLnNldChyZXN1bHQucGFnaW5nKTtcbiAgICAgIGlmICghdGhpcy5wYWdpbmdTdG9yZSkge1xuICAgICAgICB0aGlzLmxvYWRlZExhc3RJdGVtLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxvYWRlZExhc3RJdGVtID0gdGhpcy5odHRwUmVxdWVzdFNlcnZpY2UudXBkYXRlQXJndW1lbnRzKGFyZ3VtZW50c1ZhbHVlLCB7IC4uLnJlc3VsdCwgZHJvcGRvd25UYWJLZXlBY3RpdmU6IHRoaXMuZHJvcGRvd25UYWJLZXlBY3RpdmUoKSB9LCB0aGlzLnBhZ2luZ1N0b3JlKCkgfHwge30sIHRoaXMua2V5U2VhcmNoKCksIHRoaXMuaXNTZWFyY2hPbmxpbmUoKSwgdGhpcy5sb2FkZWRMYXN0SXRlbSgpLCBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSk7XG5cbiAgICAgIHRoaXMubG9hZGVkTGFzdEl0ZW0uc2V0KGxvYWRlZExhc3RJdGVtKTtcblxuICAgICAgaWYgKGZpcnN0Q2FsbCkge1xuICAgICAgICB0aGlzLnN0b3JlLnNldChjb252ZXJ0T2JqZWN0VG9TaWduYWw8V3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4+PihyZXN1bHQuZGF0YSB8fCBbXSkoKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZnVuY3Rpb25HZXRJdGVtc0F1dG9BZGRMaXN0KCkpIHtcbiAgICAgICAgICBjb25zdCBuZXdJdGVtcyA9IGNvbnZlcnRPYmplY3RUb1NpZ25hbDxXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pj4+KHRoaXMuZnVuY3Rpb25HZXRJdGVtc0F1dG9BZGRMaXN0KCk/LigpIHx8IFtdKTtcblxuICAgICAgICAgIHRoaXMuc3RvcmUudXBkYXRlKGl0ZW1zID0+IFsuLi5uZXdJdGVtcygpLCAuLi5pdGVtc10pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc0RhdGEodHJ1ZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zdG9yZS51cGRhdGUoaXRlbXMgPT4gWy4uLml0ZW1zLCAuLi5jb252ZXJ0T2JqZWN0VG9TaWduYWw8V3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4+PihyZXN1bHQuZGF0YSB8fCBbXSkoKV0pO1xuICAgICAgdGhpcy5wcm9jZXNzRGF0YShmYWxzZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBmYWtlUmVzcG9uc2VBcGkoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgdGhpcy5sb2FkZWRMYXN0SXRlbS5zZXQoZmFsc2UpO1xuICAgIHRoaXMucGFnaW5nU3RvcmUuc2V0KHt9KTtcblxuICAgIHJldHVybiB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS5mYWtlUmVzcG9uc2VQYWdpbmdBcGkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZFZhbHVlQnlDb25maWcoaXRlbTogV3JpdGFibGVTaWduYWw8YW55PiwgY29uZmlnVGVtcGxhdGU/OiBJTGlzdENvbmZpZ0l0ZW1UZXh0IHwgSUxpc3RDb25maWdJdGVtUmFkaW8gfCBJTGlzdENvbmZpZ0l0ZW1DaGVja2JveCk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVmID0gaXRlbSgpLnJlZiB8fCB7fTtcbiAgICBjb25zdCBsYWJlbDogdW5rbm93biA9IHJlZi5sYWJlbCB8fCByZWYudGl0bGUgfHwgcmVmLnZhbHVlIHx8IHJlZi5uYW1lIHx8ICcgJztcblxuICAgIGlmICh0eXBlb2YgbGFiZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpdGVtLnVwZGF0ZShjdXJyZW50SXRlbSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLmN1cnJlbnRJdGVtLCBmaWVsZExhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChyZWYubGFiZWwgfHwgcmVmLnRpdGxlIHx8IHJlZi52YWx1ZSB8fCByZWYubmFtZSB8fCAnICcpIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnVGVtcGxhdGU/LmdldFZhbHVlKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1RlbXBsYXRlLmdldFZhbHVlKHJlZik7XG5cbiAgICAgIGl0ZW0udXBkYXRlKGN1cnJlbnRJdGVtID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uY3VycmVudEl0ZW0sIGZpZWxkTGFiZWw6IHZhbHVlID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYCR7dmFsdWV9YCkgOiAnJyB9O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjb25maWdUZW1wbGF0ZT8uZ2V0UG9wb3Zlcikge1xuICAgICAgaXRlbS51cGRhdGUoY3VycmVudEl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4geyAuLi5jdXJyZW50SXRlbSwgcG9wb3ZlckxhYmVsOiBjb25maWdUZW1wbGF0ZT8uZ2V0UG9wb3Zlcj8uKGl0ZW0oKSkgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnVGVtcGxhdGU/LnJvd3M/LigpKSB7XG4gICAgICByZXR1cm4gaXRlbSgpLmZpZWxkTGFiZWw7XG4gICAgfVxuICAgIGxldCB0ZXh0U2VhcmNoID0gaXRlbSgpLmZpZWxkTGFiZWwgfHwgJyc7XG5cbiAgICBjb25zdCByb3dzID0gY29udmVydFNpZ25hbFRvT2JqZWN0KGNvbmZpZ1RlbXBsYXRlLnJvd3MoKSkgYXMgQXJyYXk8YW55PjtcblxuICAgIHJvd3MuZm9yRWFjaCgocm93LCBpbmRleFJvdykgPT4ge1xuICAgICAgY29uc3QgZmllbGROYW1lUm93ID0gYGZpZWxkTGFiZWxSb3cke2luZGV4Um93fWA7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gY2xvbmVEZWVwKGl0ZW0oKSk7XG4gICAgICBjb25zdCBuZXdJdGVtID0geyAuLi5jdXJyZW50SXRlbSB9O1xuICAgICAgbmV3SXRlbVtmaWVsZE5hbWVSb3ddID0gcm93LmdldFZhbHVlICYmIHJvdy5nZXRWYWx1ZShyZWYpO1xuICAgICAgbmV3SXRlbVtgZmllbGRSb3dTdHlsZXNEeW5hbWljQ29scyR7aW5kZXhSb3d9YF0gPSByb3cuZ2V0Um93U3R5bGVzRHluYW1pY0NvbHMgJiYgcm93LmdldFJvd1N0eWxlc0R5bmFtaWNDb2xzKHJlZik7XG4gICAgICBuZXdJdGVtW2BmaWVsZFJvd0F2YXRhckNvbmZpZyR7aW5kZXhSb3d9YF0gPSByb3cuZ2V0QXZhdGFyQ29uZmlnICYmIHJvdy5nZXRBdmF0YXJDb25maWcocmVmKTtcbiAgICAgIGlmIChyb3cuY29scyAmJiByb3cuY29scy5sZW5ndGgpIHtcbiAgICAgICAgcm93LmNvbHMuZm9yRWFjaChhc3luYyAoY29sOiBJTGlzdENvbmZpZ0l0ZW1UZXh0Q29sLCBpbmRleENvbDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmllbGROYW1lQ29sID0gYGZpZWxkTGFiZWxDb2wke2luZGV4Um93fSR7aW5kZXhDb2x9YDtcblxuICAgICAgICAgIG5ld0l0ZW1bZmllbGROYW1lQ29sXSA9IGNvbC5nZXRWYWx1ZTtcbiAgICAgICAgICBuZXdJdGVtW2BmaWVsZENvbENsYXNzJHtpbmRleFJvd30ke2luZGV4Q29sfWBdID0gY29sLmdldENsYXNzQ29sICYmIGNvbC5nZXRDbGFzc0NvbChyZWYsIGluZGV4Q29sKTtcbiAgICAgICAgICBuZXdJdGVtW2BmaWVsZENvbFBvcG92ZXIke2luZGV4Um93fSR7aW5kZXhDb2x9YF0gPSBjb2wuZ2V0UG9wb3ZlciAmJiBjb2wuZ2V0UG9wb3ZlcihyZWYsIGluZGV4Q29sKTtcbiAgICAgICAgICBuZXdJdGVtW2BmaWVsZEJhZGdlJHtpbmRleFJvd30ke2luZGV4Q29sfWBdID0gY29sLmdldENvbmZpZ0JhZGdlICYmIGNvbC5nZXRDb25maWdCYWRnZShyZWYsIGluZGV4Q29sKTtcbiAgICAgICAgICBuZXdJdGVtW2BmaWVsZENvbFN0eWxlc0R5bmFtaWMke2luZGV4Um93fSR7aW5kZXhDb2x9YF0gPSBjb2wuZ2V0U3R5bGVzRHluYW1pY0NvbDtcbiAgICAgICAgICBuZXdJdGVtW2BmaWVsZENvbEJ1dHRvbiR7aW5kZXhSb3d9JHtpbmRleENvbH1gXSA9IGNvbC5nZXRCdXR0b24gJiYgY29sLmdldEJ1dHRvbihyZWYsIGluZGV4Q29sKTtcbiAgICAgICAgICBuZXdJdGVtW2BmaWVsZENvbFN3aXRjaCR7aW5kZXhSb3d9JHtpbmRleENvbH1gXSA9IGNvbC5nZXRMYWJlbFN3aXRjaCAmJiBjb2wuZ2V0TGFiZWxTd2l0Y2gocmVmLCBpbmRleENvbCk7XG4gICAgICAgICAgbmV3SXRlbVtgZmllbGRDb2xBdmF0YXJDb25maWcke2luZGV4Um93fSR7aW5kZXhDb2x9YF0gPSBjb2wuZ2V0QXZhdGFyQ29uZmlnICYmIGNvbC5nZXRBdmF0YXJDb25maWcocmVmKTtcblxuICAgICAgICAgIHRleHRTZWFyY2ggPSBgICR7dGV4dFNlYXJjaH0gJHtuZXdJdGVtW2ZpZWxkTmFtZUNvbF0gfHwgJyd9IGA7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpdGVtLnVwZGF0ZSgoKSA9PiBuZXdJdGVtKTtcbiAgICAgIHRleHRTZWFyY2ggPSBgICR7dGV4dFNlYXJjaH0gJHtpdGVtKClbZmllbGROYW1lUm93XSB8fCAnJ30gYDtcbiAgICB9KTtcblxuICAgIHJldHVybiB0ZXh0U2VhcmNoIHx8ICcgJztcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZShmbGFnOiBJRmxhZ01vdXNlKSB7XG4gICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlci5lbWl0KGZsYWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHByb2Nlc3NEYXRhKGlzUmVwbGFjZT86IGJvb2xlYW4pOiBhbnk7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwcm9jZXNzU2VhcmNoKCk6IGFueTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldExlbmd0aEl0ZW0oKTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZ2V0SGVpZ2h0R3JvdXBIYXNMaW5lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHByb2Nlc3NLZXlDaGFuZ2VVblNlbGVjdChpdGVtOiBhbnkpOiB2b2lkO1xuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVBdXRvU2Nyb2xsSXRlbVNlbGVjdGVkKCkpO1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG59Il19
|