@libs-ui/components-list 0.2.127 → 0.2.129

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.
@@ -5,6 +5,6 @@ import { LibsUiComponentsListRadioComponent } from "../templates/radio/radio.com
5
5
  import { LibsUiComponentsListTagComponent } from "../templates/tag/tag.component";
6
6
  import { LibsUiComponentsListTextComponent } from "../templates/text/text.component";
7
7
  import { IListConfigItem } from './../interfaces/config-item.interface';
8
- export declare const getComponentByType: (typeTemplate: TYPE_TEMPLATE) => typeof LibsUiComponentsListGroupComponent | typeof LibsUiComponentsListCheckboxComponent | typeof LibsUiComponentsListRadioComponent | typeof LibsUiComponentsListTextComponent | typeof LibsUiComponentsListTagComponent;
8
+ export declare const getComponentByType: (typeTemplate: TYPE_TEMPLATE) => typeof LibsUiComponentsListCheckboxComponent | typeof LibsUiComponentsListGroupComponent | typeof LibsUiComponentsListRadioComponent | typeof LibsUiComponentsListTagComponent | typeof LibsUiComponentsListTextComponent;
9
9
  export declare const getFieldKeyByType: (config: IListConfigItem | undefined, fieldKeyDefault: string) => string;
10
10
  export declare const initConfig: (config: IListConfigItem) => void;
@@ -13,7 +13,7 @@ import { getComponentByType, initConfig } from "./defines/list.define";
13
13
  import * as i0 from "@angular/core";
14
14
  import * as i1 from "@ngx-translate/core";
15
15
  export class LibsUiComponentsListComponent {
16
- /* PROPERTY */
16
+ // #region PROPERTY
17
17
  ERROR_MESSAGE_EMPTY_VALID = ERROR_MESSAGE_EMPTY_VALID;
18
18
  disableButtonUnSelectOption = signal(true);
19
19
  isErrorRequired = signal(false);
@@ -40,7 +40,7 @@ export class LibsUiComponentsListComponent {
40
40
  });
41
41
  groupMultiKeySelected = signal([]);
42
42
  functionControlInputSearch = signal(undefined);
43
- /* INPUT */
43
+ // #region INPUT
44
44
  hiddenInputSearch = input(false, { transform: value => value ?? false });
45
45
  dropdownTabKeyActive = input();
46
46
  keySearch = input();
@@ -75,7 +75,7 @@ export class LibsUiComponentsListComponent {
75
75
  templateRefSearchNoData = input(undefined);
76
76
  resetKeyWhenSelectAllKeyDropdown = input();
77
77
  ignoreClassDisableDefaultWhenUseKeysDisableItem = input(); // bỏ chế độ disable item trên html để disable từng phần trong rows
78
- /* OUTPUT */
78
+ // #region OUTPUT
79
79
  outSelectKey = output(); // sử dụng cho type chọn 1
80
80
  outSelectMultiKey = output(); // sử dụng cho type cho phép chọn nhiều.
81
81
  outUnSelectMultiKey = output(); // sử dụng cho type cho phép chọn nhiều.
@@ -89,7 +89,7 @@ export class LibsUiComponentsListComponent {
89
89
  /* VIEW CHILD */
90
90
  listViewElementRef = viewChild('listViewContainer');
91
91
  contentElementRef = viewChild('contentContainer');
92
- /* INJECT */
92
+ // #region INJECT
93
93
  dynamicComponentService = inject(LibsUiDynamicComponentService);
94
94
  constructor() {
95
95
  this.cleanUpEffect = effect(() => {
@@ -256,6 +256,9 @@ export class LibsUiComponentsListComponent {
256
256
  this.componentRef.setInput('keySelected', '');
257
257
  this.componentRef.setInput('multiKeySelected', undefined);
258
258
  this.disableButtonUnSelectOption.set(true);
259
+ if (this.configData()?.type === 'group') {
260
+ this.onUpdateMultiKeySelectedGroup.next();
261
+ }
259
262
  await this.checkIsValid();
260
263
  }
261
264
  handlerClickButtonOther(button) {
@@ -348,4 +351,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
348
351
  LibsUiComponentsButtonsButtonComponent
349
352
  ], template: "<div #listViewContainer\n class=\"flex flex-col\"\n [class.w-full]=\"!maxItemShow\"\n [class.h-full]=\"!maxItemShow\">\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable()\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight || disable()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || loading() || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n\n @if (!showValidateBottom()) {\n <ng-container *ngTemplateOutlet=\"templateValidate\" />\n }\n @if (!hiddenInputSearch()) {\n <libs_ui-components-inputs-search [searchConfig]=\"searchConfig()\"\n [class.px-[12px]]=\"searchPadding()\"\n [class]=\"searchConfig().classCoverInputSearch\"\n [disable]=\" disable() || loading() || false\"\n (outSearch)=\"handlerSearch($event)\"\n (outFunctionsControl)=\"handlerFunctionControlInputSearch($event)\" />\n }\n @if (config()?.configDescriptionGroup?.(); as description) {\n <div [class]=\"description?.classInclude\">\n <libs_ui-components-popover [config]=\"description?.tooltipDescription()\">\n <div [class]=\"description?.classTextDescriptionInclude\">{{ description.textDescription }}</div>\n </libs_ui-components-popover>\n </div>\n }\n @if (!hiddenInputSearch() && hasDivider() && (!config()?.ignoreShowDataWhenNotSearch || keySearchStore())) {\n <div class=\"libs-ui-border-top-general {{ dividerClassInclude() ? dividerClassInclude():'' }}\"\n [class.libs-ui-divider-default]=\"!!searchPadding() && !dividerClassInclude()\">\n </div>\n }\n <div class=\"flex flex-col {{ (config()?.ignoreShowDataWhenNotSearch && keySearchStore() && !config()?.ignoreFixHeightShowDataWhenNotSearch) ? 'h-[353px]' : 'h-full' }}\">\n <div #contentContainer\n class=\"w-full h-full {{ backgroundListCustom() }}\"\n [class.libs-ui-disable]=\"disable() && disableLabel()\"\n [class.pointer-events-none]=\"disable() && disableLabel()\">\n </div>\n\n @for (buttonOther of buttonsOther(); track $index) {\n <div class=\"bg-[#ffffff]\"\n [class.rounded-b-[4px]]=\"$last && !hasButtonUnSelectOption()\">\n <libs_ui-components-buttons-button [type]=\"buttonOther.type || 'button-link-primary'\"\n [label]=\"buttonOther.label || ' '\"\n [classIconLeft]=\"(buttonOther.classIconLeft || '')+' flex mr-[8px] text-[16px]'\"\n classInclude=\"w-full libs-ui-border-top-general text-left rounded-0 {{ buttonOther.classInclude ? buttonOther.classInclude:'' }}\"\n classLabel=\"libs-ui-font-h5r whitespace-normal\"\n [disable]=\"buttonOther.disable || disable() || loading() || false\"\n (outClick)=\"handlerClickButtonOther(buttonOther)\" />\n </div>\n }\n @if (hasButtonUnSelectOption()) {\n <div class=\"bg-[#ffffff] rounded-b-[4px]\">\n <libs_ui-components-buttons-button label=\"i18n_unselect_option\"\n type=\"button-link-danger-high\"\n classIconLeft=\"flex mr-[8px] libs-ui-icon-close\"\n classInclude=\"w-100 libs-ui-border-top-general text-left rounded-0\"\n classLabel=\"libs-ui-font-h5r whitespace-normal\"\n [disable]=\"disableButtonUnSelectOption() || disable() || loading() || false\"\n (outClick)=\"handlerRemoveKeySelected()\" />\n </div>\n }\n </div>\n @if (showValidateBottom()) {\n <ng-container *ngTemplateOutlet=\"templateValidate\" />\n }\n</div>\n\n<ng-template #templateValidate>\n @if (isErrorRequired()) {\n <div [class.mb-[8px]]=\"!showValidateBottom()\"\n [class.mt-[8px]]=\"showValidateBottom()\">\n <span class=\"text-[#ee2d41] libs-ui-font-h7\"\n [innerHtml]=\"(validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID)| translate:validRequired()?.interpolateParams\">\n </span>\n </div>\n }\n</ng-template>\n", styles: [":host{background-color:#fff}:host ::ng-deep .libs-ui-list-view-highlight-text-search{background-color:#ffdb80;border-radius:2px;display:inline-block;overflow:unset}.libs-ui-divider-default{width:calc(100% - 24px);margin:12px auto 0}\n"] }]
350
353
  }], ctorParameters: () => [] });
351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsTUFBTSxFQUF5QixNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFlLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDck0sT0FBTyxFQUFXLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFckcsT0FBTyxFQUFzQixxQ0FBcUMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTlHLE9BQU8sRUFBVSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBYyxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFvQnZFLE1BQU0sT0FBTyw2QkFBNkI7SUFDeEMsY0FBYztJ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OUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBM1dVLDZCQUE2Qjs0RkFBN0IsNkJBQTZCLGcrTENuQzFDLHM1SkFvR0Esb1NEeEVJLGdCQUFnQixtSkFBRSxlQUFlLDRGQUNqQyw4QkFBOEIsNHFCQUM5QixxQ0FBcUMsb1ZBQ3JDLGdDQUFnQyxxZUFDaEMsc0NBQXNDOzs0RkFHN0IsNkJBQTZCO2tCQWZ6QyxTQUFTOytCQUVFLHlCQUF5QixjQUd2QixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsZ0JBQWdCLEVBQUUsZUFBZTt3QkFDakMsOEJBQThCO3dCQUM5QixxQ0FBcUM7d0JBQ3JDLGdDQUFnQzt3QkFDaEMsc0NBQXNDO3FCQUN2QyIsInNvdXJjZXNDb250ZW50IjpbIlxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgZWZmZWN0LCBFZmZlY3RSZWYsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgVGVtcGxhdGVSZWYsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IElCdXR0b24sIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cIjtcbmltcG9ydCB7IElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLWlucHV0XCI7XG5pbXBvcnQgeyBJSW5wdXRTZWFyY2hDb25maWcsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNTZWFyY2hDb21wb25lbnQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtc2VhcmNoXCI7XG5pbXBvcnQgeyBJVmFsaWRSZXF1aXJlZCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWlucHV0cy12YWxpZFwiO1xuaW1wb3J0IHsgSUxhYmVsLCBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1sYWJlbFwiO1xuaW1wb3J0IHsgSUZsYWdNb3VzZSwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyXCI7XG5pbXBvcnQgeyBJUGFnaW5nLCBUWVBFX1RFTVBMQVRFX1JFRiB9IGZyb20gXCJAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzXCI7XG5pbXBvcnQgeyBMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCJAbGlicy11aS9zZXJ2aWNlcy1keW5hbWljLWNvbXBvbmVudFwiO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElELCBpc0VtcHR5LCBpc05pbCB9IGZyb20gXCJAbGlicy11aS91dGlsc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCwgdGltZXIgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgZ2V0Q29tcG9uZW50QnlUeXBlLCBpbml0Q29uZmlnIH0gZnJvbSBcIi4vZGVmaW5lcy9saXN0LmRlZmluZVwiO1xuaW1wb3J0IHsgSURhdGFVcGRhdGVUb1N0b3JlLCBJTGlzdENvbmZpZ0l0ZW0sIElMaXN0RnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBJTGlzdERhdGFFbWl0S2V5LCBJTGlzdERhdGFFbWl0TXVsdGlLZXkgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2RhdGEtZW1pdC5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMaXN0VGVtcGxhdGVzQ29tcG9uZW50QWJzdHJhY3QgfSBmcm9tIFwiLi90ZW1wbGF0ZXMvdGVtcGxhdGVzLmNvbXBvbmVudC5hYnN0cmFjdFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIE5nVGVtcGxhdGVPdXRsZXQsIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c1NlYXJjaENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCA9IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQ7XG4gIHByb3RlY3RlZCBkaXNhYmxlQnV0dG9uVW5TZWxlY3RPcHRpb24gPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByb3RlY3RlZCBpc0Vycm9yUmVxdWlyZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgbG9hZGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBrZXlTZWFyY2hTdG9yZSA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSBvbkRlc3Ryb3k6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIG9uU2VhcmNoOiBTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIG9uUmVmcmVzaDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgb25TZXRIaWRkZW5JdGVtQnlLZXk6IFN1YmplY3Q8QXJyYXk8dW5rbm93bj4+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBvbkl0ZW1DaGFuZ2VVblNlbGVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBvblVwZGF0ZU11bHRpS2V5U2VsZWN0ZWRHcm91cDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgb25SZW1vdmVJdGVtczogU3ViamVjdDxBcnJheTx1bmtub3duPj4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIG9uVXBkYXRlRGF0YTogU3ViamVjdDxJRGF0YVVwZGF0ZVRvU3RvcmU+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBjbGVhblVwRWZmZWN0ITogRWZmZWN0UmVmO1xuXG4gIHByaXZhdGUgY29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPExpYnNVaUNvbXBvbmVudHNMaXN0VGVtcGxhdGVzQ29tcG9uZW50QWJzdHJhY3Q+O1xuICBwcml2YXRlIGNvbmZpZ0RhdGEgPSBzaWduYWw8SUxpc3RDb25maWdJdGVtPih7XG4gICAgdHlwZTogJ3RleHQnLFxuICAgIGNvbmZpZ1RlbXBsYXRlVGV4dDogc2lnbmFsKHtcbiAgICAgIGZpZWxkS2V5OiAnaWQnLFxuICAgICAgZ2V0VmFsdWU6IChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0ubGFiZWwgfHwgaXRlbS5uYW1lO1xuICAgICAgfVxuICAgIH0pXG4gIH0pO1xuICBwcml2YXRlIGdyb3VwTXVsdGlLZXlTZWxlY3RlZCA9IHNpZ25hbDxBcnJheTx1bmtub3duPj4oW10pO1xuICBwcml2YXRlIGZ1bmN0aW9uQ29udHJvbElucHV0U2VhcmNoID0gc2lnbmFsPElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8qIElOUFVUICovXG4gIHJlYWRvbmx5IGhpZGRlbklucHV0U2VhcmNoID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgZHJvcGRvd25UYWJLZXlBY3RpdmUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGtleVNlYXJjaCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaXRlbUNoYW5nZVVuU2VsZWN0ID0gaW5wdXQ8YW55PigpO1xuICByZWFkb25seSBwYWRkaW5nTGVmdEl0ZW0gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBjb25maWcgPSBpbnB1dDxJTGlzdENvbmZpZ0l0ZW0gfCB1bmRlZmluZWQsIElMaXN0Q29uZmlnSXRlbSB8IHVuZGVmaW5lZD4odGhpcy5jb25maWdEYXRhKCksIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IHRoaXMuY29uZmlnRGF0YSgpIH0pO1xuICByZWFkb25seSBhdXRvU2VsZWN0ZWRGaXJzdEl0ZW1DYWxsT3V0c2lkZUJlZm9yZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSBpc1NlYXJjaE9ubGluZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXNhYmxlTGFiZWwgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBsYWJlbENvbmZpZyA9IGlucHV0PElMYWJlbD4oKTtcbiAgcmVhZG9ubHkgc2VhcmNoQ29uZmlnID0gaW5wdXQ8SUlucHV0U2VhcmNoQ29uZmlnLCBJSW5wdXRTZWFyY2hDb25maWcgfCB1bmRlZmluZWQ+KHt9LCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgfHwge30gfSk7XG4gIHJlYWRvbmx5IHNlYXJjaFBhZGRpbmcgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXZpZGVyQ2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBoYXNEaXZpZGVyID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IGJ1dHRvbnNPdGhlciA9IGlucHV0PEFycmF5PElCdXR0b24+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBoYXNCdXR0b25VblNlbGVjdE9wdGlvbiA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNsaWNrRXhhY3RseSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGJhY2tncm91bmRMaXN0Q3VzdG9tID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdiZy1bI2ZmZmZmZl0nLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gJ2JnLVsjZmZmZmZmXScgfSk7XG4gIHJlYWRvbmx5IG1heEl0ZW1TaG93ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBrZXlTZWxlY3RlZCA9IGlucHV0PHVua25vd24+KCk7XG4gIHJlYWRvbmx5IG11bHRpS2V5U2VsZWN0ZWQgPSBpbnB1dDxBcnJheTx1bmtub3duPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTsvLyBsxrB1IMO9IGtoaSBz4butIGThu6VuZyBsaXN0dmlld1xuICByZWFkb25seSBrZXlzRGlzYWJsZUl0ZW0gPSBpbnB1dDxBcnJheTx1bmtub3duPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTsgLy8ga2jDtG5nIGTDuW5nIGdpw6EgdHLhu4sgbsOgeSBr4bq/dCBo4bujcCB24bubaSB0ZW1wbGF0ZSBjaGVja2JveCBjw7MgY29uZmlnIGNo4bupYSBjb25maWdDaGVja2JveENoZWNrQWxsXG4gIHJlYWRvbmx5IGtleXNIaWRkZW5JdGVtID0gaW5wdXQ8QXJyYXk8dW5rbm93bj4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7IC8vIGtow7RuZyBkw7luZyBnacOhIHRy4buLIG7DoHkga+G6v3QgaOG7o3AgduG7m2kgdGVtcGxhdGUgY2hlY2tib3ggY8OzIGNvbmZpZyBjaOG7qWEgY29uZmlnQ2hlY2tib3hDaGVja0FsbFxuICByZWFkb25seSBmb2N1c0lucHV0U2VhcmNoID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgc2tpcEZvY3VzSW5wdXRXaGVuS2V5U2VhcmNoU3RvcmVVbmRlZmluZWQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBmdW5jdGlvbkdldEl0ZW1zQXV0b0FkZExpc3QgPSBpbnB1dDwoKCkgPT4gQXJyYXk8YW55PikgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IHZhbGlkUmVxdWlyZWQgPSBpbnB1dDxJVmFsaWRSZXF1aXJlZCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgc2hvd1ZhbGlkYXRlQm90dG9tID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBsb2FkaW5nSWNvblNpemUgPSBpbnB1dDwnbGFyZ2UnIHwgJ21lZGl1bScgfCAnc21hbGwnIHwgJ3NtYWxsZXInIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSB0ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YSA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgcmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5RHJvcGRvd24gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVDbGFzc0Rpc2FibGVEZWZhdWx0V2hlblVzZUtleXNEaXNhYmxlSXRlbSA9IGlucHV0PGJvb2xlYW4+KCk7IC8vIGLhu48gY2jhur8gxJHhu5kgZGlzYWJsZSBpdGVtIHRyw6puIGh0bWwgxJHhu4MgZGlzYWJsZSB04burbmcgcGjhuqduIHRyb25nIHJvd3NcblxuICAvKiBPVVRQVVQgKi9cbiAgcmVhZG9ubHkgb3V0U2VsZWN0S2V5ID0gb3V0cHV0PElMaXN0RGF0YUVtaXRLZXkgfCB1bmRlZmluZWQ+KCk7IC8vIHPhu60gZOG7pW5nIGNobyB0eXBlIGNo4buNbiAxXG4gIHJlYWRvbmx5IG91dFNlbGVjdE11bHRpS2V5ID0gb3V0cHV0PElMaXN0RGF0YUVtaXRNdWx0aUtleSB8IHVuZGVmaW5lZD4oKTsgLy8gc+G7rSBk4bulbmcgY2hvIHR5cGUgY2hvIHBow6lwIGNo4buNbiBuaGnhu4F1LlxuICByZWFkb25seSBvdXRVblNlbGVjdE11bHRpS2V5ID0gb3V0cHV0PEFycmF5PHVua25vd24+PigpOyAvLyBz4butIGThu6VuZyBjaG8gdHlwZSBjaG8gcGjDqXAgY2jhu41uIG5oaeG7gXUuXG4gIHJlYWRvbmx5IG91dENsaWNrQnV0dG9uT3RoZXIgPSBvdXRwdXQ8SUJ1dHRvbj4oKTtcbiAgcmVhZG9ubHkgb3V0RmllbGRLZXkgPSBvdXRwdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBvdXRDaGFuZ2VWaWV3ID0gb3V0cHV0PEFycmF5PGFueT4+KCk7XG4gIHJlYWRvbmx5IG91dExvYWRpbmcgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJTGlzdEZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuICByZWFkb25seSBvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3ZlciA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuICByZWFkb25seSBvdXRMb2FkSXRlbXNDb21wbGV0ZSA9IG91dHB1dDx7IGl0ZW1zOiBBcnJheTxhbnk+LCBwYWdpbmc/OiBJUGFnaW5nIH0+KCk7XG5cbiAgLyogVklFVyBDSElMRCAqL1xuICBwcm90ZWN0ZWQgbGlzdFZpZXdFbGVtZW50UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdsaXN0Vmlld0NvbnRhaW5lcicpO1xuICBwcm90ZWN0ZWQgY29udGVudEVsZW1lbnRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2NvbnRlbnRDb250YWluZXInKTtcblxuICAvKiBJTkpFQ1QgKi9cbiAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50U2VydmljZSA9IGluamVjdChMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jbGVhblVwRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5rZXlTZWFyY2goKTtcblxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMua2V5U2VhcmNoU3RvcmUoKSA9PT0gdGhpcy5rZXlTZWFyY2goKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmtleVNlYXJjaFN0b3JlLnNldCh2YWx1ZSk7XG4gICAgICAgIHRoaXMub25TZWFyY2gubmV4dCh2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgaXRlbUNoYW5nZVVuU2VsZWN0ID0gdGhpcy5pdGVtQ2hhbmdlVW5TZWxlY3QoKTtcbiAgICAgIGNvbnN0IGtleXNEaXNhYmxlSXRlbSA9IHRoaXMua2V5c0Rpc2FibGVJdGVtKCk7XG4gICAgICBjb25zdCBrZXlzSGlkZGVuSXRlbSA9IHRoaXMua2V5c0hpZGRlbkl0ZW0oKTtcbiAgICAgIGNvbnN0IGRpc2FibGUgPSB0aGlzLmRpc2FibGUoKTtcblxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgY29uc3Qga2V5U2VsZWN0ZWQgPSB0aGlzLmtleVNlbGVjdGVkKCk7XG4gICAgICAgIGNvbnN0IG11bHRpS2V5U2VsZWN0ZWQgPSB0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKTtcbiAgICAgICAgdGhpcy5vbkl0ZW1DaGFuZ2VVblNlbGVjdC5uZXh0KGl0ZW1DaGFuZ2VVblNlbGVjdCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRW1wdHkoa2V5c0Rpc2FibGVJdGVtKSkge1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdrZXlzRGlzYWJsZUl0ZW0nLCBrZXlzRGlzYWJsZUl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFbXB0eShrZXlzSGlkZGVuSXRlbSkpIHtcbiAgICAgICAgICB0aGlzLm9uU2V0SGlkZGVuSXRlbUJ5S2V5Lm5leHQoa2V5c0hpZGRlbkl0ZW0gfHwgW10pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFbXB0eShkaXNhYmxlKSkge1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdkaXNhYmxlJywgZGlzYWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VtcHR5KGtleVNlbGVjdGVkKSkge1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdrZXlTZWxlY3RlZCcsIGtleVNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb25maWdEYXRhKCk/LnR5cGUgPT09ICdncm91cCcgJiYgIWlzRW1wdHkobXVsdGlLZXlTZWxlY3RlZCkpIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnbXVsdGlLZXlTZWxlY3RlZCcsIG11bHRpS2V5U2VsZWN0ZWQpO1xuICAgICAgICAgIHRoaXMub25VcGRhdGVNdWx0aUtleVNlbGVjdGVkR3JvdXAubmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBlZmZlY3QodGhpcy5yZWZyZXNoLmJpbmQodGhpcykpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoe1xuICAgICAgY2hlY2tJc1ZhbGlkOiB0aGlzLmNoZWNrSXNWYWxpZC5iaW5kKHRoaXMpLFxuICAgICAgcmVmcmVzaDogdGhpcy5yZWZyZXNoLmJpbmQodGhpcyksXG4gICAgICByZXNldEtleVNlbGVjdGVkOiB0aGlzLmhhbmRsZXJSZW1vdmVLZXlTZWxlY3RlZC5iaW5kKHRoaXMpLFxuICAgICAgZ2V0UmVjdExpc3RWaWV3OiBhc3luYyAoKSA9PiB0aGlzLmxpc3RWaWV3RWxlbWVudFJlZigpPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgcmVtb3ZlSXRlbXM6IGFzeW5jIChrZXlzKSA9PiB0aGlzLm9uUmVtb3ZlSXRlbXMubmV4dChrZXlzKSxcbiAgICAgIHVwZGF0ZURhdGE6IGFzeW5jIChkYXRhKSA9PiB0aGlzLm9uVXBkYXRlRGF0YS5uZXh0KGRhdGEpXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZygpO1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIHRoaXMuY29uZmlnRGF0YS5zZXQodGhpcy5jbG9uZUNvbmZpZyhjb25maWcpKVxuICAgIH1cbiAgICBpbml0Q29uZmlnKHRoaXMuY29uZmlnRGF0YSgpKTtcbiAgICBjb25zdCBjb21wQ2xhc3MgPSBnZXRDb21wb25lbnRCeVR5cGUodGhpcy5jb25maWdEYXRhKCkudHlwZSk7XG5cbiAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcENsYXNzKTtcblxuICAgIHRpbWVyKDApLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuYWRkVG9FbGVtZW50KHRoaXMuY29tcG9uZW50UmVmLCB0aGlzLmNvbnRlbnRFbGVtZW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdvblNldEhpZGRlbkl0ZW1CeUtleScsIHRoaXMub25TZXRIaWRkZW5JdGVtQnlLZXkpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdjb25maWcnLCB0aGlzLmNvbmZpZ0RhdGEoKSk7XG5cbiAgICBpZiAodGhpcy5zZWFyY2hDb25maWcoKSkge1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ3NlYXJjaENvbmZpZycsIHRoaXMuc2VhcmNoQ29uZmlnKCkpO1xuICAgIH1cbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnb25TZWFyY2gnLCB0aGlzLm9uU2VhcmNoKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnb25SZWZyZXNoJywgdGhpcy5vblJlZnJlc2gpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdvblVwZGF0ZURhdGEnLCB0aGlzLm9uVXBkYXRlRGF0YSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2tleVNlYXJjaCcsIHRoaXMua2V5U2VhcmNoU3RvcmUoKSA/PyAnJyk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2Ryb3Bkb3duVGFiS2V5QWN0aXZlJywgdGhpcy5kcm9wZG93blRhYktleUFjdGl2ZSgpKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnY2xpY2tFeGFjdGx5JywgdGhpcy5jbGlja0V4YWN0bHkoKSB8fCBmYWxzZSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2Rpc2FibGUnLCB0aGlzLmRpc2FibGUoKSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2F1dG9TZWxlY3RlZEZpcnN0SXRlbUNhbGxPdXRzaWRlQmVmb3JlJywgdGhpcy5hdXRvU2VsZWN0ZWRGaXJzdEl0ZW1DYWxsT3V0c2lkZUJlZm9yZSgpKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgncGFkZGluZ0xlZnRJdGVtJywgdGhpcy5wYWRkaW5nTGVmdEl0ZW0oKSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ3Jlc2V0S2V5V2hlblNlbGVjdEFsbEtleURyb3Bkb3duJywgdGhpcy5yZXNldEtleVdoZW5TZWxlY3RBbGxLZXlEcm9wZG93bigpKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnaWdub3JlQ2xhc3NEaXNhYmxlRGVmYXVsdFdoZW5Vc2VLZXlzRGlzYWJsZUl0ZW0nLCB0aGlzLmlnbm9yZUNsYXNzRGlzYWJsZURlZmF1bHRXaGVuVXNlS2V5c0Rpc2FibGVJdGVtKCkpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdmdW5jdGlvbkdldEl0ZW1zQXV0b0FkZExpc3QnLCB0aGlzLmZ1bmN0aW9uR2V0SXRlbXNBdXRvQWRkTGlzdCgpKTtcbiAgICBpZiAodGhpcy5tYXhJdGVtU2hvdygpKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnbWF4SXRlbVNob3cnLCB0aGlzLm1heEl0ZW1TaG93KCkpO1xuICAgIH1cbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgna2V5U2VsZWN0ZWQnLCB0aGlzLmtleVNlbGVjdGVkKCkpO1xuICAgIGlmICh0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ211bHRpS2V5U2VsZWN0ZWQnLCB0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKSk7XG4gICAgfVxuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdrZXlzRGlzYWJsZUl0ZW0nLCB0aGlzLmtleXNEaXNhYmxlSXRlbSgpIHx8IFtdKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgna2V5c0hpZGRlbkl0ZW0nLCB0aGlzLmtleXNIaWRkZW5JdGVtKCkgfHwgW10pO1xuICAgIGlmICghaXNOaWwodGhpcy5rZXlTZWxlY3RlZCgpKSB8fCB0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25VblNlbGVjdE9wdGlvbi5zZXQoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnb25JdGVtQ2hhbmdlVW5TZWxlY3QnLCB0aGlzLm9uSXRlbUNoYW5nZVVuU2VsZWN0KTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnb25VcGRhdGVNdWx0aUtleVNlbGVjdGVkR3JvdXAnLCB0aGlzLm9uVXBkYXRlTXVsdGlLZXlTZWxlY3RlZEdyb3VwKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnb25SZW1vdmVJdGVtcycsIHRoaXMub25SZW1vdmVJdGVtcyk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ3pJbmRleCcsIHRoaXMuekluZGV4KCkpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdpc1NlYXJjaE9ubGluZScsIHRoaXMuaXNTZWFyY2hPbmxpbmUoKSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2Rpc2FibGVMYWJlbCcsIHRoaXMuZGlzYWJsZUxhYmVsKCkgfHwgZmFsc2UpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdsb2FkaW5nSWNvblNpemUnLCB0aGlzLmxvYWRpbmdJY29uU2l6ZSgpKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgndGVtcGxhdGVSZWZTZWFyY2hOb0RhdGEnLCB0aGlzLnRlbXBsYXRlUmVmU2VhcmNoTm9EYXRhKCkpO1xuICAgIGxldCBrZXlTZWFyY2ggPSAnJztcblxuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2U7XG5cbiAgICBpbnN0YW5jZS5vdXRDaGFuZ2VWaWV3LnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIHRoaXMub3V0Q2hhbmdlVmlldy5lbWl0KGRhdGEpO1xuXG4gICAgICBpZiAodGhpcy5za2lwRm9jdXNJbnB1dFdoZW5LZXlTZWFyY2hTdG9yZVVuZGVmaW5lZCgpICYmIGlzTmlsKHRoaXMua2V5U2VhcmNoU3RvcmUoKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZm9jdXNJbnB1dFNlYXJjaCgpICYmIHRoaXMua2V5U2VhcmNoU3RvcmUoKSAhPT0ga2V5U2VhcmNoKSB7XG4gICAgICAgIGtleVNlYXJjaCA9IHRoaXMua2V5U2VhcmNoU3RvcmUoKSB8fCAnJztcbiAgICAgICAgdGhpcy5mdW5jdGlvbkNvbnRyb2xJbnB1dFNlYXJjaCgpPy5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGluc3RhbmNlLm91dFNlbGVjdEtleS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25VblNlbGVjdE9wdGlvbi5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5vdXRTZWxlY3RLZXkuZW1pdChkYXRhKTtcbiAgICAgIHRoaXMuY2hlY2tJc1ZhbGlkKCk7XG4gICAgfSk7XG4gICAgaW5zdGFuY2Uub3V0RmllbGRLZXkuc3Vic2NyaWJlKChmaWVsZEtleT86IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5vdXRGaWVsZEtleS5lbWl0KGZpZWxkS2V5KTtcbiAgICB9KTtcbiAgICBpbnN0YW5jZS5vdXRMb2FkaW5nLnN1YnNjcmliZSgobG9hZGluZzogYm9vbGVhbikgPT4ge1xuICAgICAgdGhpcy5sb2FkaW5nLnNldChsb2FkaW5nKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KGxvYWRpbmcpO1xuICAgIH0pO1xuICAgIGluc3RhbmNlLm91dExvYWRJdGVtc0NvbXBsZXRlLnN1YnNjcmliZSgoZXZlbnQ6IHsgaXRlbXM6IEFycmF5PGFueT4sIHBhZ2luZz86IElQYWdpbmcgfSkgPT4ge1xuICAgICAgdGhpcy5vdXRMb2FkSXRlbXNDb21wbGV0ZS5lbWl0KGV2ZW50KTtcbiAgICB9KTtcbiAgICBpZiAodGhpcy5jb25maWcoKSAmJiB0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZVRleHQgJiYgdGhpcy5jb25maWcoKT8uY29uZmlnVGVtcGxhdGVUZXh0Py4oKT8uYWN0aW9uU29ydCkge1xuICAgICAgaW5zdGFuY2Uub3V0U29ydFNpbmdsZVNlbGVjdC5zdWJzY3JpYmUoaXRlbVNvcnQgPT4ge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZygpO1xuICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5jb25maWdUZW1wbGF0ZVRleHQgJiYgY29uZmlnLmNvbmZpZ1RlbXBsYXRlVGV4dCgpPy5hY3Rpb25Tb3J0KSB7XG4gICAgICAgICAgY29uZmlnLmNvbmZpZ1RlbXBsYXRlVGV4dCgpPy5pdGVtU29ydD8uc2V0KGl0ZW1Tb3J0KTtcbiAgICAgICAgICBjb25maWcuY29uZmlnVGVtcGxhdGVUZXh0KCk/LmFjdGlvblNvcnQ/LihpdGVtU29ydCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpbnN0YW5jZS5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlci5zdWJzY3JpYmUoKGZsYWc6IElGbGFnTW91c2UpID0+IHtcbiAgICAgIHRoaXMub3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIuZW1pdChmbGFnKTtcbiAgICB9KTtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5jb25maWdEYXRhKCk/LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gJ3RleHQnIHx8IHR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW5zdGFuY2Uub3V0U2VsZWN0TXVsdGlLZXkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9uVW5TZWxlY3RPcHRpb24uc2V0KGZhbHNlKTtcbiAgICAgIGlmICh0eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBNdWx0aUtleVNlbGVjdGVkLnNldChkYXRhLmtleXMpO1xuICAgICAgfVxuICAgICAgdGhpcy5vdXRTZWxlY3RNdWx0aUtleS5lbWl0KGRhdGEpO1xuICAgICAgdGhpcy5jaGVja0lzVmFsaWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwcm90ZWN0ZWQgaGFuZGxlclNlYXJjaChrZXlTZWFyY2g6IHN0cmluZykge1xuICAgIHRoaXMua2V5U2VhcmNoU3RvcmUuc2V0KGtleVNlYXJjaCk7XG4gICAgdGhpcy5vblNlYXJjaC5uZXh0KGtleVNlYXJjaCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclJlbW92ZUtleVNlbGVjdGVkKCkge1xuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRTZWxlY3RLZXkuZW1pdCh1bmRlZmluZWQpO1xuICAgIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdCh1bmRlZmluZWQpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdrZXlTZWxlY3RlZCcsICcnKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnbXVsdGlLZXlTZWxlY3RlZCcsIHVuZGVmaW5lZCk7XG4gICAgdGhpcy5kaXNhYmxlQnV0dG9uVW5TZWxlY3RPcHRpb24uc2V0KHRydWUpO1xuICAgIGF3YWl0IHRoaXMuY2hlY2tJc1ZhbGlkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQnV0dG9uT3RoZXIoYnV0dG9uOiBJQnV0dG9uKSB7XG4gICAgdGhpcy5vdXRDbGlja0J1dHRvbk90aGVyLmVtaXQoYnV0dG9uKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRnVuY3Rpb25Db250cm9sSW5wdXRTZWFyY2goZXZlbnQ6IElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5mdW5jdGlvbkNvbnRyb2xJbnB1dFNlYXJjaC5zZXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0lzVmFsaWQoKSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkUmVxdWlyZWQgfHwgIXRoaXMuY29uZmlnKCk/LnR5cGUgfHwgIXRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSkge1xuICAgICAgdGhpcy5pc0Vycm9yUmVxdWlyZWQuc2V0KGZhbHNlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmNvbmZpZygpPy50eXBlO1xuICAgIGxldCBoYXNLZXkgPSAhaXNFbXB0eSh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5tdWx0aUtleVNlbGVjdGVkKTtcblxuICAgIGlmICh0eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICBoYXNLZXkgPSAhaXNFbXB0eSh0aGlzLmdyb3VwTXVsdGlLZXlTZWxlY3RlZCk7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAndGV4dCcgfHwgdHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgaGFzS2V5ID0gIWlzTmlsKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmtleVNlbGVjdGVkKTtcbiAgICB9XG4gICAgdGhpcy5pc0Vycm9yUmVxdWlyZWQuc2V0KCFoYXNLZXkpO1xuXG4gICAgcmV0dXJuIGhhc0tleTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaCgpIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZygpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZHJvcGRvd25UYWJLZXlBY3RpdmUoKTtcblxuICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuc2V0KHRoaXMuY2xvbmVDb25maWcoY29uZmlnKSk7XG4gICAgICB0aGlzLm9uUmVmcmVzaC5uZXh0KCk7XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVDb25maWcoY29uZmlnSW5wdXQ6IElMaXN0Q29uZmlnSXRlbSk6IElMaXN0Q29uZmlnSXRlbSB7XG4gICAgaWYgKCFjb25maWdJbnB1dCkge1xuICAgICAgcmV0dXJuIHt9IGFzIGFueTtcbiAgICB9XG4gICAgY29uc3Qgc2VydmljZU90aGVyID0gY29uZmlnSW5wdXQuaHR0cFJlcXVlc3REYXRhPy4oKT8uc2VydmljZU90aGVyO1xuICAgIGNvbnN0IHNlcnZpY2VPdGhlclJlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3QgPSBjb25maWdJbnB1dC5jb25maWdUZW1wbGF0ZUNoZWNrYm94Py4oKT8uaHR0cFJlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3Q/LigpPy5zZXJ2aWNlT3RoZXI7XG5cbiAgICBpZiAoc2VydmljZU90aGVyKSB7XG4gICAgICBjb25maWdJbnB1dC5odHRwUmVxdWVzdERhdGE/LnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgZGVsZXRlIGN1cnJlbnQuc2VydmljZU90aGVyO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHNlcnZpY2VPdGhlclJlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3QpIHtcbiAgICAgIGNvbmZpZ0lucHV0LmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3g/LigpPy5odHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdD8udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBkZWxldGUgY3VycmVudC5zZXJ2aWNlT3RoZXI7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gY2xvbmVEZWVwKGNvbmZpZ0lucHV0KSBhcyBJTGlzdENvbmZpZ0l0ZW07XG5cbiAgICBpZiAoc2VydmljZU90aGVyICYmIGNvbmZpZy5odHRwUmVxdWVzdERhdGEpIHtcbiAgICAgIGNvbmZpZy5odHRwUmVxdWVzdERhdGEudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnNlcnZpY2VPdGhlciA9IHNlcnZpY2VPdGhlcjtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzZXJ2aWNlT3RoZXJSZXF1ZXN0QWxsSWRTZWxlY3RPclVuU2VsZWN0ICYmIGNvbmZpZy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KSB7XG4gICAgICBjb25maWcuY29uZmlnVGVtcGxhdGVDaGVja2JveD8uKCk/Lmh0dHBSZXF1ZXN0QWxsSWRTZWxlY3RPclVuU2VsZWN0Py51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQuc2VydmljZU90aGVyID0gc2VydmljZU90aGVyO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2xlYW5VcEVmZmVjdC5kZXN0cm95KCk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQoZmFsc2UpO1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMuY29tcG9uZW50UmVmKTtcbiAgICB0aGlzLm9uUmVmcmVzaC5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25TZWFyY2guY29tcGxldGUoKTtcbiAgICB0aGlzLm9uU2V0SGlkZGVuSXRlbUJ5S2V5LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblVwZGF0ZU11bHRpS2V5U2VsZWN0ZWRHcm91cC5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG59IiwiPGRpdiAjbGlzdFZpZXdDb250YWluZXJcbiAgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCJcbiAgW2NsYXNzLnctZnVsbF09XCIhbWF4SXRlbVNob3dcIlxuICBbY2xhc3MuaC1mdWxsXT1cIiFtYXhJdGVtU2hvd1wiPlxuICBAaWYgKGxhYmVsQ29uZmlnKCk7IGFzIGxhYmVsQ29uZmlnKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1sYWJlbCBbY2xhc3NJbmNsdWRlXT1cImxhYmVsQ29uZmlnLmNsYXNzSW5jbHVkZVwiXG4gICAgICBbbGFiZWxMZWZ0XT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdFwiXG4gICAgICBbbGFiZWxMZWZ0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgW3JlcXVpcmVkXT1cImxhYmVsQ29uZmlnLnJlcXVpcmVkIFwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25cIlxuICAgICAgW2Rlc2NyaXB0aW9uQ2xhc3NdPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25DbGFzc1wiXG4gICAgICBbbGFiZWxSaWdodF09XCJsYWJlbENvbmZpZy5sYWJlbFJpZ2h0XCJcbiAgICAgIFtsYWJlbFJpZ2h0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxSaWdodENsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2J1dHRvbnNMZWZ0XT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNMZWZ0XCJcbiAgICAgIFtidXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuYnV0dG9uc1JpZ2h0XCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0xlZnRdPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNMZWZ0IHx8IGRpc2FibGUoKVwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNSaWdodF09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc1JpZ2h0IHx8IGRpc2FibGUoKVwiXG4gICAgICBbaGFzVG9nZ2xlXT1cImxhYmVsQ29uZmlnLmhhc1RvZ2dsZVwiXG4gICAgICBbdG9nZ2xlQWN0aXZlXT1cImxhYmVsQ29uZmlnLnRvZ2dsZUFjdGl2ZVwiXG4gICAgICBbdG9nZ2xlRGlzYWJsZV09XCJsYWJlbENvbmZpZy50b2dnbGVEaXNhYmxlIHx8IGxvYWRpbmcoKSB8fCBkaXNhYmxlKClcIlxuICAgICAgW3BvcG92ZXJdPVwibGFiZWxDb25maWcucG9wb3ZlclwiXG4gICAgICBbaWNvblBvcG92ZXJDbGFzc109XCJsYWJlbENvbmZpZy5pY29uUG9wb3ZlckNsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2xpbWl0TGVuZ3RoXT1cImxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb24gfHwgZGlzYWJsZSgpXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc109XCJsYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc1wiXG4gICAgICBbY291bnRdPVwibGFiZWxDb25maWcuY291bnRcIiAvPlxuICB9XG5cbiAgQGlmICghc2hvd1ZhbGlkYXRlQm90dG9tKCkpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVWYWxpZGF0ZVwiIC8+XG4gIH1cbiAgQGlmICghaGlkZGVuSW5wdXRTZWFyY2goKSkge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXNlYXJjaCBbc2VhcmNoQ29uZmlnXT1cInNlYXJjaENvbmZpZygpXCJcbiAgICAgIFtjbGFzcy5weC1bMTJweF1dPVwic2VhcmNoUGFkZGluZygpXCJcbiAgICAgIFtjbGFzc109XCJzZWFyY2hDb25maWcoKS5jbGFzc0NvdmVySW5wdXRTZWFyY2hcIlxuICAgICAgW2Rpc2FibGVdPVwiIGRpc2FibGUoKSB8fCBsb2FkaW5nKCkgfHwgZmFsc2VcIlxuICAgICAgKG91dFNlYXJjaCk9XCJoYW5kbGVyU2VhcmNoKCRldmVudClcIlxuICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbElucHV0U2VhcmNoKCRldmVudClcIiAvPlxuICB9XG4gIEBpZiAoY29uZmlnKCk/LmNvbmZpZ0Rlc2NyaXB0aW9uR3JvdXA/LigpOyBhcyBkZXNjcmlwdGlvbikge1xuICAgIDxkaXYgW2NsYXNzXT1cImRlc2NyaXB0aW9uPy5jbGFzc0luY2x1ZGVcIj5cbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY29uZmlnXT1cImRlc2NyaXB0aW9uPy50b29sdGlwRGVzY3JpcHRpb24oKVwiPlxuICAgICAgICA8ZGl2IFtjbGFzc109XCJkZXNjcmlwdGlvbj8uY2xhc3NUZXh0RGVzY3JpcHRpb25JbmNsdWRlXCI+e3sgZGVzY3JpcHRpb24udGV4dERlc2NyaXB0aW9uIH19PC9kaXY+XG4gICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAoIWhpZGRlbklucHV0U2VhcmNoKCkgJiYgaGFzRGl2aWRlcigpICYmICghY29uZmlnKCk/Lmlnbm9yZVNob3dEYXRhV2hlbk5vdFNlYXJjaCB8fCBrZXlTZWFyY2hTdG9yZSgpKSkge1xuICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWJvcmRlci10b3AtZ2VuZXJhbCB7eyBkaXZpZGVyQ2xhc3NJbmNsdWRlKCkgPyBkaXZpZGVyQ2xhc3NJbmNsdWRlKCk6JycgfX1cIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGl2aWRlci1kZWZhdWx0XT1cIiEhc2VhcmNoUGFkZGluZygpICYmICFkaXZpZGVyQ2xhc3NJbmNsdWRlKClcIj5cbiAgICA8L2Rpdj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB7eyAoY29uZmlnKCk/Lmlnbm9yZVNob3dEYXRhV2hlbk5vdFNlYXJjaCAmJiBrZXlTZWFyY2hTdG9yZSgpICYmICFjb25maWcoKT8uaWdub3JlRml4SGVpZ2h0U2hvd0RhdGFXaGVuTm90U2VhcmNoKSA/ICdoLVszNTNweF0nIDogJ2gtZnVsbCcgfX1cIj5cbiAgICA8ZGl2ICNjb250ZW50Q29udGFpbmVyXG4gICAgICBjbGFzcz1cInctZnVsbCBoLWZ1bGwge3sgYmFja2dyb3VuZExpc3RDdXN0b20oKSB9fVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKSAmJiBkaXNhYmxlTGFiZWwoKVwiXG4gICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJkaXNhYmxlKCkgJiYgZGlzYWJsZUxhYmVsKClcIj5cbiAgICA8L2Rpdj5cblxuICAgIEBmb3IgKGJ1dHRvbk90aGVyIG9mIGJ1dHRvbnNPdGhlcigpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJiZy1bI2ZmZmZmZl1cIlxuICAgICAgICBbY2xhc3Mucm91bmRlZC1iLVs0cHhdXT1cIiRsYXN0ICYmICFoYXNCdXR0b25VblNlbGVjdE9wdGlvbigpXCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiYnV0dG9uT3RoZXIudHlwZSB8fCAnYnV0dG9uLWxpbmstcHJpbWFyeSdcIlxuICAgICAgICAgIFtsYWJlbF09XCJidXR0b25PdGhlci5sYWJlbCB8fCAnICdcIlxuICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIihidXR0b25PdGhlci5jbGFzc0ljb25MZWZ0IHx8ICcnKSsnIGZsZXggbXItWzhweF0gdGV4dC1bMTZweF0nXCJcbiAgICAgICAgICBjbGFzc0luY2x1ZGU9XCJ3LWZ1bGwgbGlicy11aS1ib3JkZXItdG9wLWdlbmVyYWwgdGV4dC1sZWZ0IHJvdW5kZWQtMCB7eyBidXR0b25PdGhlci5jbGFzc0luY2x1ZGUgPyBidXR0b25PdGhlci5jbGFzc0luY2x1ZGU6JycgfX1cIlxuICAgICAgICAgIGNsYXNzTGFiZWw9XCJsaWJzLXVpLWZvbnQtaDVyIHdoaXRlc3BhY2Utbm9ybWFsXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJidXR0b25PdGhlci5kaXNhYmxlIHx8IGRpc2FibGUoKSB8fCBsb2FkaW5nKCkgfHwgZmFsc2VcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ2xpY2tCdXR0b25PdGhlcihidXR0b25PdGhlcilcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoaGFzQnV0dG9uVW5TZWxlY3RPcHRpb24oKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImJnLVsjZmZmZmZmXSByb3VuZGVkLWItWzRweF1cIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBsYWJlbD1cImkxOG5fdW5zZWxlY3Rfb3B0aW9uXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uLWxpbmstZGFuZ2VyLWhpZ2hcIlxuICAgICAgICAgIGNsYXNzSWNvbkxlZnQ9XCJmbGV4IG1yLVs4cHhdIGxpYnMtdWktaWNvbi1jbG9zZVwiXG4gICAgICAgICAgY2xhc3NJbmNsdWRlPVwidy0xMDAgbGlicy11aS1ib3JkZXItdG9wLWdlbmVyYWwgdGV4dC1sZWZ0IHJvdW5kZWQtMFwiXG4gICAgICAgICAgY2xhc3NMYWJlbD1cImxpYnMtdWktZm9udC1oNXIgd2hpdGVzcGFjZS1ub3JtYWxcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGVCdXR0b25VblNlbGVjdE9wdGlvbigpIHx8IGRpc2FibGUoKSB8fCBsb2FkaW5nKCkgfHwgZmFsc2VcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyUmVtb3ZlS2V5U2VsZWN0ZWQoKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuICBAaWYgKHNob3dWYWxpZGF0ZUJvdHRvbSgpKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlVmFsaWRhdGVcIiAvPlxuICB9XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVZhbGlkYXRlPlxuICBAaWYgKGlzRXJyb3JSZXF1aXJlZCgpKSB7XG4gICAgPGRpdiBbY2xhc3MubWItWzhweF1dPVwiIXNob3dWYWxpZGF0ZUJvdHRvbSgpXCJcbiAgICAgIFtjbGFzcy5tdC1bOHB4XV09XCJzaG93VmFsaWRhdGVCb3R0b20oKVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LVsjZWUyZDQxXSBsaWJzLXVpLWZvbnQtaDdcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cIih2YWxpZFJlcXVpcmVkKCk/Lm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCl8IHRyYW5zbGF0ZTp2YWxpZFJlcXVpcmVkKCk/LmludGVycG9sYXRlUGFyYW1zXCI+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsTUFBTSxFQUF5QixNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFlLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDck0sT0FBTyxFQUFXLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFckcsT0FBTyxFQUFzQixxQ0FBcUMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTlHLE9BQU8sRUFBVSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBYyxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFvQnZFLE1BQU0sT0FBTyw2QkFBNkI7SUFDeEMsbUJBQW1C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QUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0EvV1UsNkJBQTZCOzRGQUE3Qiw2QkFBNkIsZytMQ25DMUMsczVKQW9HQSxvU0R4RUksZ0JBQWdCLG1KQUFFLGVBQWUsNEZBQ2pDLDhCQUE4Qiw0cUJBQzlCLHFDQUFxQyxvVkFDckMsZ0NBQWdDLHFlQUNoQyxzQ0FBc0M7OzRGQUc3Qiw2QkFBNkI7a0JBZnpDLFNBQVM7K0JBRUUseUJBQXlCLGNBR3ZCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxnQkFBZ0IsRUFBRSxlQUFlO3dCQUNqQyw4QkFBOEI7d0JBQzlCLHFDQUFxQzt3QkFDckMsZ0NBQWdDO3dCQUNoQyxzQ0FBc0M7cUJBQ3ZDIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBlZmZlY3QsIEVmZmVjdFJlZiwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCBUZW1wbGF0ZVJlZiwgdW50cmFja2VkLCB2aWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSUJ1dHRvbiwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblwiO1xuaW1wb3J0IHsgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtaW5wdXRcIjtcbmltcG9ydCB7IElJbnB1dFNlYXJjaENvbmZpZywgTGlic1VpQ29tcG9uZW50c0lucHV0c1NlYXJjaENvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWlucHV0cy1zZWFyY2hcIjtcbmltcG9ydCB7IElWYWxpZFJlcXVpcmVkIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXZhbGlkXCI7XG5pbXBvcnQgeyBJTGFiZWwsIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWxhYmVsXCI7XG5pbXBvcnQgeyBJRmxhZ01vdXNlLCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXJcIjtcbmltcG9ydCB7IElQYWdpbmcsIFRZUEVfVEVNUExBVEVfUkVGIH0gZnJvbSBcIkBsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXNcIjtcbmltcG9ydCB7IExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIkBsaWJzLXVpL3NlcnZpY2VzLWR5bmFtaWMtY29tcG9uZW50XCI7XG5pbXBvcnQgeyBjbG9uZURlZXAsIEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQsIGlzRW1wdHksIGlzTmlsIH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsLCB0aW1lciB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBnZXRDb21wb25lbnRCeVR5cGUsIGluaXRDb25maWcgfSBmcm9tIFwiLi9kZWZpbmVzL2xpc3QuZGVmaW5lXCI7XG5pbXBvcnQgeyBJRGF0YVVwZGF0ZVRvU3RvcmUsIElMaXN0Q29uZmlnSXRlbSwgSUxpc3RGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gXCIuL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IElMaXN0RGF0YUVtaXRLZXksIElMaXN0RGF0YUVtaXRNdWx0aUtleSB9IGZyb20gXCIuL2ludGVyZmFjZXMvZGF0YS1lbWl0LmludGVyZmFjZVwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpc3RUZW1wbGF0ZXNDb21wb25lbnRBYnN0cmFjdCB9IGZyb20gXCIuL3RlbXBsYXRlcy90ZW1wbGF0ZXMuY29tcG9uZW50LmFic3RyYWN0XCI7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgTmdUZW1wbGF0ZU91dGxldCwgVHJhbnNsYXRlTW9kdWxlLFxuICAgIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzSW5wdXRzU2VhcmNoQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQgPSBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEO1xuICBwcm90ZWN0ZWQgZGlzYWJsZUJ1dHRvblVuU2VsZWN0T3B0aW9uID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICBwcm90ZWN0ZWQgaXNFcnJvclJlcXVpcmVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGxvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQga2V5U2VhcmNoU3RvcmUgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgb25EZXN0cm95OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBvblNlYXJjaDogU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBvblJlZnJlc2g6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIG9uU2V0SGlkZGVuSXRlbUJ5S2V5OiBTdWJqZWN0PEFycmF5PHVua25vd24+PiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgb25JdGVtQ2hhbmdlVW5TZWxlY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgb25VcGRhdGVNdWx0aUtleVNlbGVjdGVkR3JvdXA6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIG9uUmVtb3ZlSXRlbXM6IFN1YmplY3Q8QXJyYXk8dW5rbm93bj4+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBvblVwZGF0ZURhdGE6IFN1YmplY3Q8SURhdGFVcGRhdGVUb1N0b3JlPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgY2xlYW5VcEVmZmVjdCE6IEVmZmVjdFJlZjtcblxuICBwcml2YXRlIGNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxMaWJzVWlDb21wb25lbnRzTGlzdFRlbXBsYXRlc0NvbXBvbmVudEFic3RyYWN0PjtcbiAgcHJpdmF0ZSBjb25maWdEYXRhID0gc2lnbmFsPElMaXN0Q29uZmlnSXRlbT4oe1xuICAgIHR5cGU6ICd0ZXh0JyxcbiAgICBjb25maWdUZW1wbGF0ZVRleHQ6IHNpZ25hbCh7XG4gICAgICBmaWVsZEtleTogJ2lkJyxcbiAgICAgIGdldFZhbHVlOiAoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLmxhYmVsIHx8IGl0ZW0ubmFtZTtcbiAgICAgIH1cbiAgICB9KVxuICB9KTtcbiAgcHJpdmF0ZSBncm91cE11bHRpS2V5U2VsZWN0ZWQgPSBzaWduYWw8QXJyYXk8dW5rbm93bj4+KFtdKTtcbiAgcHJpdmF0ZSBmdW5jdGlvbkNvbnRyb2xJbnB1dFNlYXJjaCA9IHNpZ25hbDxJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGhpZGRlbklucHV0U2VhcmNoID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgZHJvcGRvd25UYWJLZXlBY3RpdmUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGtleVNlYXJjaCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaXRlbUNoYW5nZVVuU2VsZWN0ID0gaW5wdXQ8YW55PigpO1xuICByZWFkb25seSBwYWRkaW5nTGVmdEl0ZW0gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBjb25maWcgPSBpbnB1dDxJTGlzdENvbmZpZ0l0ZW0gfCB1bmRlZmluZWQsIElMaXN0Q29uZmlnSXRlbSB8IHVuZGVmaW5lZD4odGhpcy5jb25maWdEYXRhKCksIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IHRoaXMuY29uZmlnRGF0YSgpIH0pO1xuICByZWFkb25seSBhdXRvU2VsZWN0ZWRGaXJzdEl0ZW1DYWxsT3V0c2lkZUJlZm9yZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSBpc1NlYXJjaE9ubGluZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXNhYmxlTGFiZWwgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBsYWJlbENvbmZpZyA9IGlucHV0PElMYWJlbD4oKTtcbiAgcmVhZG9ubHkgc2VhcmNoQ29uZmlnID0gaW5wdXQ8SUlucHV0U2VhcmNoQ29uZmlnLCBJSW5wdXRTZWFyY2hDb25maWcgfCB1bmRlZmluZWQ+KHt9LCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgfHwge30gfSk7XG4gIHJlYWRvbmx5IHNlYXJjaFBhZGRpbmcgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXZpZGVyQ2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBoYXNEaXZpZGVyID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IGJ1dHRvbnNPdGhlciA9IGlucHV0PEFycmF5PElCdXR0b24+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBoYXNCdXR0b25VblNlbGVjdE9wdGlvbiA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNsaWNrRXhhY3RseSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGJhY2tncm91bmRMaXN0Q3VzdG9tID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdiZy1bI2ZmZmZmZl0nLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gJ2JnLVsjZmZmZmZmXScgfSk7XG4gIHJlYWRvbmx5IG1heEl0ZW1TaG93ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBrZXlTZWxlY3RlZCA9IGlucHV0PHVua25vd24+KCk7XG4gIHJlYWRvbmx5IG11bHRpS2V5U2VsZWN0ZWQgPSBpbnB1dDxBcnJheTx1bmtub3duPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTsvLyBsxrB1IMO9IGtoaSBz4butIGThu6VuZyBsaXN0dmlld1xuICByZWFkb25seSBrZXlzRGlzYWJsZUl0ZW0gPSBpbnB1dDxBcnJheTx1bmtub3duPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTsgLy8ga2jDtG5nIGTDuW5nIGdpw6EgdHLhu4sgbsOgeSBr4bq/dCBo4bujcCB24bubaSB0ZW1wbGF0ZSBjaGVja2JveCBjw7MgY29uZmlnIGNo4bupYSBjb25maWdDaGVja2JveENoZWNrQWxsXG4gIHJlYWRvbmx5IGtleXNIaWRkZW5JdGVtID0gaW5wdXQ8QXJyYXk8dW5rbm93bj4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7IC8vIGtow7RuZyBkw7luZyBnacOhIHRy4buLIG7DoHkga+G6v3QgaOG7o3AgduG7m2kgdGVtcGxhdGUgY2hlY2tib3ggY8OzIGNvbmZpZyBjaOG7qWEgY29uZmlnQ2hlY2tib3hDaGVja0FsbFxuICByZWFkb25seSBmb2N1c0lucHV0U2VhcmNoID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgc2tpcEZvY3VzSW5wdXRXaGVuS2V5U2VhcmNoU3RvcmVVbmRlZmluZWQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBmdW5jdGlvbkdldEl0ZW1zQXV0b0FkZExpc3QgPSBpbnB1dDwoKCkgPT4gQXJyYXk8YW55PikgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IHZhbGlkUmVxdWlyZWQgPSBpbnB1dDxJVmFsaWRSZXF1aXJlZCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgc2hvd1ZhbGlkYXRlQm90dG9tID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBsb2FkaW5nSWNvblNpemUgPSBpbnB1dDwnbGFyZ2UnIHwgJ21lZGl1bScgfCAnc21hbGwnIHwgJ3NtYWxsZXInIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSB0ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YSA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgcmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5RHJvcGRvd24gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVDbGFzc0Rpc2FibGVEZWZhdWx0V2hlblVzZUtleXNEaXNhYmxlSXRlbSA9IGlucHV0PGJvb2xlYW4+KCk7IC8vIGLhu48gY2jhur8gxJHhu5kgZGlzYWJsZSBpdGVtIHRyw6puIGh0bWwgxJHhu4MgZGlzYWJsZSB04burbmcgcGjhuqduIHRyb25nIHJvd3NcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRTZWxlY3RLZXkgPSBvdXRwdXQ8SUxpc3REYXRhRW1pdEtleSB8IHVuZGVmaW5lZD4oKTsgLy8gc+G7rSBk4bulbmcgY2hvIHR5cGUgY2jhu41uIDFcbiAgcmVhZG9ubHkgb3V0U2VsZWN0TXVsdGlLZXkgPSBvdXRwdXQ8SUxpc3REYXRhRW1pdE11bHRpS2V5IHwgdW5kZWZpbmVkPigpOyAvLyBz4butIGThu6VuZyBjaG8gdHlwZSBjaG8gcGjDqXAgY2jhu41uIG5oaeG7gXUuXG4gIHJlYWRvbmx5IG91dFVuU2VsZWN0TXVsdGlLZXkgPSBvdXRwdXQ8QXJyYXk8dW5rbm93bj4+KCk7IC8vIHPhu60gZOG7pW5nIGNobyB0eXBlIGNobyBwaMOpcCBjaOG7jW4gbmhp4buBdS5cbiAgcmVhZG9ubHkgb3V0Q2xpY2tCdXR0b25PdGhlciA9IG91dHB1dDxJQnV0dG9uPigpO1xuICByZWFkb25seSBvdXRGaWVsZEtleSA9IG91dHB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZVZpZXcgPSBvdXRwdXQ8QXJyYXk8YW55Pj4oKTtcbiAgcmVhZG9ubHkgb3V0TG9hZGluZyA9IG91dHB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElMaXN0RnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyID0gb3V0cHV0PElGbGFnTW91c2U+KCk7XG4gIHJlYWRvbmx5IG91dExvYWRJdGVtc0NvbXBsZXRlID0gb3V0cHV0PHsgaXRlbXM6IEFycmF5PGFueT4sIHBhZ2luZz86IElQYWdpbmcgfT4oKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHByb3RlY3RlZCBsaXN0Vmlld0VsZW1lbnRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2xpc3RWaWV3Q29udGFpbmVyJyk7XG4gIHByb3RlY3RlZCBjb250ZW50RWxlbWVudFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignY29udGVudENvbnRhaW5lcicpO1xuXG4gIC8vICNyZWdpb24gSU5KRUNUXG4gIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudFNlcnZpY2UgPSBpbmplY3QoTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2xlYW5VcEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMua2V5U2VhcmNoKCk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmtleVNlYXJjaFN0b3JlKCkgPT09IHRoaXMua2V5U2VhcmNoKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5rZXlTZWFyY2hTdG9yZS5zZXQodmFsdWUpO1xuICAgICAgICB0aGlzLm9uU2VhcmNoLm5leHQodmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1DaGFuZ2VVblNlbGVjdCA9IHRoaXMuaXRlbUNoYW5nZVVuU2VsZWN0KCk7XG4gICAgICBjb25zdCBrZXlzRGlzYWJsZUl0ZW0gPSB0aGlzLmtleXNEaXNhYmxlSXRlbSgpO1xuICAgICAgY29uc3Qga2V5c0hpZGRlbkl0ZW0gPSB0aGlzLmtleXNIaWRkZW5JdGVtKCk7XG4gICAgICBjb25zdCBkaXNhYmxlID0gdGhpcy5kaXNhYmxlKCk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleVNlbGVjdGVkID0gdGhpcy5rZXlTZWxlY3RlZCgpO1xuICAgICAgICBjb25zdCBtdWx0aUtleVNlbGVjdGVkID0gdGhpcy5tdWx0aUtleVNlbGVjdGVkKCk7XG4gICAgICAgIHRoaXMub25JdGVtQ2hhbmdlVW5TZWxlY3QubmV4dChpdGVtQ2hhbmdlVW5TZWxlY3QpO1xuXG4gICAgICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VtcHR5KGtleXNEaXNhYmxlSXRlbSkpIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgna2V5c0Rpc2FibGVJdGVtJywga2V5c0Rpc2FibGVJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRW1wdHkoa2V5c0hpZGRlbkl0ZW0pKSB7XG4gICAgICAgICAgdGhpcy5vblNldEhpZGRlbkl0ZW1CeUtleS5uZXh0KGtleXNIaWRkZW5JdGVtIHx8IFtdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRW1wdHkoZGlzYWJsZSkpIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZGlzYWJsZScsIGRpc2FibGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFbXB0eShrZXlTZWxlY3RlZCkpIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgna2V5U2VsZWN0ZWQnLCBrZXlTZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnRGF0YSgpPy50eXBlID09PSAnZ3JvdXAnICYmICFpc0VtcHR5KG11bHRpS2V5U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ211bHRpS2V5U2VsZWN0ZWQnLCBtdWx0aUtleVNlbGVjdGVkKTtcbiAgICAgICAgICB0aGlzLm9uVXBkYXRlTXVsdGlLZXlTZWxlY3RlZEdyb3VwLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZWZmZWN0KHRoaXMucmVmcmVzaC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHtcbiAgICAgIGNoZWNrSXNWYWxpZDogdGhpcy5jaGVja0lzVmFsaWQuYmluZCh0aGlzKSxcbiAgICAgIHJlZnJlc2g6IHRoaXMucmVmcmVzaC5iaW5kKHRoaXMpLFxuICAgICAgcmVzZXRLZXlTZWxlY3RlZDogdGhpcy5oYW5kbGVyUmVtb3ZlS2V5U2VsZWN0ZWQuYmluZCh0aGlzKSxcbiAgICAgIGdldFJlY3RMaXN0VmlldzogYXN5bmMgKCkgPT4gdGhpcy5saXN0Vmlld0VsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIHJlbW92ZUl0ZW1zOiBhc3luYyAoa2V5cykgPT4gdGhpcy5vblJlbW92ZUl0ZW1zLm5leHQoa2V5cyksXG4gICAgICB1cGRhdGVEYXRhOiBhc3luYyAoZGF0YSkgPT4gdGhpcy5vblVwZGF0ZURhdGEubmV4dChkYXRhKVxuICAgIH0pO1xuXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuc2V0KHRoaXMuY2xvbmVDb25maWcoY29uZmlnKSlcbiAgICB9XG4gICAgaW5pdENvbmZpZyh0aGlzLmNvbmZpZ0RhdGEoKSk7XG4gICAgY29uc3QgY29tcENsYXNzID0gZ2V0Q29tcG9uZW50QnlUeXBlKHRoaXMuY29uZmlnRGF0YSgpLnR5cGUpO1xuXG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBDbGFzcyk7XG5cbiAgICB0aW1lcigwKS5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmFkZFRvRWxlbWVudCh0aGlzLmNvbXBvbmVudFJlZiwgdGhpcy5jb250ZW50RWxlbWVudFJlZigpPy5uYXRpdmVFbGVtZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnb25TZXRIaWRkZW5JdGVtQnlLZXknLCB0aGlzLm9uU2V0SGlkZGVuSXRlbUJ5S2V5KTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnY29uZmlnJywgdGhpcy5jb25maWdEYXRhKCkpO1xuXG4gICAgaWYgKHRoaXMuc2VhcmNoQ29uZmlnKCkpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdzZWFyY2hDb25maWcnLCB0aGlzLnNlYXJjaENvbmZpZygpKTtcbiAgICB9XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ29uU2VhcmNoJywgdGhpcy5vblNlYXJjaCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ29uUmVmcmVzaCcsIHRoaXMub25SZWZyZXNoKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnb25VcGRhdGVEYXRhJywgdGhpcy5vblVwZGF0ZURhdGEpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdrZXlTZWFyY2gnLCB0aGlzLmtleVNlYXJjaFN0b3JlKCkgPz8gJycpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdkcm9wZG93blRhYktleUFjdGl2ZScsIHRoaXMuZHJvcGRvd25UYWJLZXlBY3RpdmUoKSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2NsaWNrRXhhY3RseScsIHRoaXMuY2xpY2tFeGFjdGx5KCkgfHwgZmFsc2UpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdkaXNhYmxlJywgdGhpcy5kaXNhYmxlKCkpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdhdXRvU2VsZWN0ZWRGaXJzdEl0ZW1DYWxsT3V0c2lkZUJlZm9yZScsIHRoaXMuYXV0b1NlbGVjdGVkRmlyc3RJdGVtQ2FsbE91dHNpZGVCZWZvcmUoKSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ3BhZGRpbmdMZWZ0SXRlbScsIHRoaXMucGFkZGluZ0xlZnRJdGVtKCkpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdyZXNldEtleVdoZW5TZWxlY3RBbGxLZXlEcm9wZG93bicsIHRoaXMucmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5RHJvcGRvd24oKSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2lnbm9yZUNsYXNzRGlzYWJsZURlZmF1bHRXaGVuVXNlS2V5c0Rpc2FibGVJdGVtJywgdGhpcy5pZ25vcmVDbGFzc0Rpc2FibGVEZWZhdWx0V2hlblVzZUtleXNEaXNhYmxlSXRlbSgpKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZnVuY3Rpb25HZXRJdGVtc0F1dG9BZGRMaXN0JywgdGhpcy5mdW5jdGlvbkdldEl0ZW1zQXV0b0FkZExpc3QoKSk7XG4gICAgaWYgKHRoaXMubWF4SXRlbVNob3coKSkge1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ21heEl0ZW1TaG93JywgdGhpcy5tYXhJdGVtU2hvdygpKTtcbiAgICB9XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2tleVNlbGVjdGVkJywgdGhpcy5rZXlTZWxlY3RlZCgpKTtcbiAgICBpZiAodGhpcy5tdWx0aUtleVNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdtdWx0aUtleVNlbGVjdGVkJywgdGhpcy5tdWx0aUtleVNlbGVjdGVkKCkpO1xuICAgIH1cbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgna2V5c0Rpc2FibGVJdGVtJywgdGhpcy5rZXlzRGlzYWJsZUl0ZW0oKSB8fCBbXSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2tleXNIaWRkZW5JdGVtJywgdGhpcy5rZXlzSGlkZGVuSXRlbSgpIHx8IFtdKTtcbiAgICBpZiAoIWlzTmlsKHRoaXMua2V5U2VsZWN0ZWQoKSkgfHwgdGhpcy5tdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9uVW5TZWxlY3RPcHRpb24uc2V0KGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ29uSXRlbUNoYW5nZVVuU2VsZWN0JywgdGhpcy5vbkl0ZW1DaGFuZ2VVblNlbGVjdCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ29uVXBkYXRlTXVsdGlLZXlTZWxlY3RlZEdyb3VwJywgdGhpcy5vblVwZGF0ZU11bHRpS2V5U2VsZWN0ZWRHcm91cCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ29uUmVtb3ZlSXRlbXMnLCB0aGlzLm9uUmVtb3ZlSXRlbXMpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCd6SW5kZXgnLCB0aGlzLnpJbmRleCgpKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnaXNTZWFyY2hPbmxpbmUnLCB0aGlzLmlzU2VhcmNoT25saW5lKCkpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdkaXNhYmxlTGFiZWwnLCB0aGlzLmRpc2FibGVMYWJlbCgpIHx8IGZhbHNlKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgnbG9hZGluZ0ljb25TaXplJywgdGhpcy5sb2FkaW5nSWNvblNpemUoKSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ3RlbXBsYXRlUmVmU2VhcmNoTm9EYXRhJywgdGhpcy50ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YSgpKTtcbiAgICBsZXQga2V5U2VhcmNoID0gJyc7XG5cbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlO1xuXG4gICAgaW5zdGFuY2Uub3V0Q2hhbmdlVmlldy5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICB0aGlzLm91dENoYW5nZVZpZXcuZW1pdChkYXRhKTtcblxuICAgICAgaWYgKHRoaXMuc2tpcEZvY3VzSW5wdXRXaGVuS2V5U2VhcmNoU3RvcmVVbmRlZmluZWQoKSAmJiBpc05pbCh0aGlzLmtleVNlYXJjaFN0b3JlKCkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZvY3VzSW5wdXRTZWFyY2goKSAmJiB0aGlzLmtleVNlYXJjaFN0b3JlKCkgIT09IGtleVNlYXJjaCkge1xuICAgICAgICBrZXlTZWFyY2ggPSB0aGlzLmtleVNlYXJjaFN0b3JlKCkgfHwgJyc7XG4gICAgICAgIHRoaXMuZnVuY3Rpb25Db250cm9sSW5wdXRTZWFyY2goKT8uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpbnN0YW5jZS5vdXRTZWxlY3RLZXkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9uVW5TZWxlY3RPcHRpb24uc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMub3V0U2VsZWN0S2V5LmVtaXQoZGF0YSk7XG4gICAgICB0aGlzLmNoZWNrSXNWYWxpZCgpO1xuICAgIH0pO1xuICAgIGluc3RhbmNlLm91dEZpZWxkS2V5LnN1YnNjcmliZSgoZmllbGRLZXk/OiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMub3V0RmllbGRLZXkuZW1pdChmaWVsZEtleSk7XG4gICAgfSk7XG4gICAgaW5zdGFuY2Uub3V0TG9hZGluZy5zdWJzY3JpYmUoKGxvYWRpbmc6IGJvb2xlYW4pID0+IHtcbiAgICAgIHRoaXMubG9hZGluZy5zZXQobG9hZGluZyk7XG4gICAgICB0aGlzLm91dExvYWRpbmcuZW1pdChsb2FkaW5nKTtcbiAgICB9KTtcbiAgICBpbnN0YW5jZS5vdXRMb2FkSXRlbXNDb21wbGV0ZS5zdWJzY3JpYmUoKGV2ZW50OiB7IGl0ZW1zOiBBcnJheTxhbnk+LCBwYWdpbmc/OiBJUGFnaW5nIH0pID0+IHtcbiAgICAgIHRoaXMub3V0TG9hZEl0ZW1zQ29tcGxldGUuZW1pdChldmVudCk7XG4gICAgfSk7XG4gICAgaWYgKHRoaXMuY29uZmlnKCkgJiYgdGhpcy5jb25maWcoKT8uY29uZmlnVGVtcGxhdGVUZXh0ICYmIHRoaXMuY29uZmlnKCk/LmNvbmZpZ1RlbXBsYXRlVGV4dD8uKCk/LmFjdGlvblNvcnQpIHtcbiAgICAgIGluc3RhbmNlLm91dFNvcnRTaW5nbGVTZWxlY3Quc3Vic2NyaWJlKGl0ZW1Tb3J0ID0+IHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuY29uZmlnVGVtcGxhdGVUZXh0ICYmIGNvbmZpZy5jb25maWdUZW1wbGF0ZVRleHQoKT8uYWN0aW9uU29ydCkge1xuICAgICAgICAgIGNvbmZpZy5jb25maWdUZW1wbGF0ZVRleHQoKT8uaXRlbVNvcnQ/LnNldChpdGVtU29ydCk7XG4gICAgICAgICAgY29uZmlnLmNvbmZpZ1RlbXBsYXRlVGV4dCgpPy5hY3Rpb25Tb3J0Py4oaXRlbVNvcnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaW5zdGFuY2Uub3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIuc3Vic2NyaWJlKChmbGFnOiBJRmxhZ01vdXNlKSA9PiB7XG4gICAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyLmVtaXQoZmxhZyk7XG4gICAgfSk7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuY29uZmlnRGF0YSgpPy50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09ICd0ZXh0JyB8fCB0eXBlID09PSAncmFkaW8nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGluc3RhbmNlLm91dFNlbGVjdE11bHRpS2V5LnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvblVuU2VsZWN0T3B0aW9uLnNldChmYWxzZSk7XG4gICAgICBpZiAodHlwZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICB0aGlzLmdyb3VwTXVsdGlLZXlTZWxlY3RlZC5zZXQoZGF0YS5rZXlzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdChkYXRhKTtcbiAgICAgIHRoaXMuY2hlY2tJc1ZhbGlkKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWFyY2goa2V5U2VhcmNoOiBzdHJpbmcpIHtcbiAgICB0aGlzLmtleVNlYXJjaFN0b3JlLnNldChrZXlTZWFyY2gpO1xuICAgIHRoaXMub25TZWFyY2gubmV4dChrZXlTZWFyY2gpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJSZW1vdmVLZXlTZWxlY3RlZCgpIHtcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3V0U2VsZWN0S2V5LmVtaXQodW5kZWZpbmVkKTtcbiAgICB0aGlzLm91dFNlbGVjdE11bHRpS2V5LmVtaXQodW5kZWZpbmVkKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5zZXRJbnB1dCgna2V5U2VsZWN0ZWQnLCAnJyk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ211bHRpS2V5U2VsZWN0ZWQnLCB1bmRlZmluZWQpO1xuICAgIHRoaXMuZGlzYWJsZUJ1dHRvblVuU2VsZWN0T3B0aW9uLnNldCh0cnVlKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZ0RhdGEoKT8udHlwZSA9PT0gJ2dyb3VwJykge1xuICAgICAgdGhpcy5vblVwZGF0ZU11bHRpS2V5U2VsZWN0ZWRHcm91cC5uZXh0KCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuY2hlY2tJc1ZhbGlkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQnV0dG9uT3RoZXIoYnV0dG9uOiBJQnV0dG9uKSB7XG4gICAgdGhpcy5vdXRDbGlja0J1dHRvbk90aGVyLmVtaXQoYnV0dG9uKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRnVuY3Rpb25Db250cm9sSW5wdXRTZWFyY2goZXZlbnQ6IElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5mdW5jdGlvbkNvbnRyb2xJbnB1dFNlYXJjaC5zZXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0lzVmFsaWQoKSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkUmVxdWlyZWQgfHwgIXRoaXMuY29uZmlnKCk/LnR5cGUgfHwgIXRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSkge1xuICAgICAgdGhpcy5pc0Vycm9yUmVxdWlyZWQuc2V0KGZhbHNlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmNvbmZpZygpPy50eXBlO1xuICAgIGxldCBoYXNLZXkgPSAhaXNFbXB0eSh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5tdWx0aUtleVNlbGVjdGVkKTtcblxuICAgIGlmICh0eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICBoYXNLZXkgPSAhaXNFbXB0eSh0aGlzLmdyb3VwTXVsdGlLZXlTZWxlY3RlZCk7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAndGV4dCcgfHwgdHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgaGFzS2V5ID0gIWlzTmlsKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmtleVNlbGVjdGVkKTtcbiAgICB9XG4gICAgdGhpcy5pc0Vycm9yUmVxdWlyZWQuc2V0KCFoYXNLZXkpO1xuXG4gICAgcmV0dXJuIGhhc0tleTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaCgpIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZygpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZHJvcGRvd25UYWJLZXlBY3RpdmUoKTtcblxuICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuc2V0KHRoaXMuY2xvbmVDb25maWcoY29uZmlnKSk7XG4gICAgICB0aGlzLm9uUmVmcmVzaC5uZXh0KCk7XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVDb25maWcoY29uZmlnSW5wdXQ6IElMaXN0Q29uZmlnSXRlbSk6IElMaXN0Q29uZmlnSXRlbSB7XG4gICAgaWYgKCFjb25maWdJbnB1dCkge1xuICAgICAgcmV0dXJuIHt9IGFzIGFueTtcbiAgICB9XG4gICAgY29uc3Qgc2VydmljZU90aGVyID0gY29uZmlnSW5wdXQuaHR0cFJlcXVlc3REYXRhPy4oKT8uc2VydmljZU90aGVyO1xuICAgIGNvbnN0IHNlcnZpY2VPdGhlclJlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3QgPSBjb25maWdJbnB1dC5jb25maWdUZW1wbGF0ZUNoZWNrYm94Py4oKT8uaHR0cFJlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3Q/LigpPy5zZXJ2aWNlT3RoZXI7XG5cbiAgICBpZiAoc2VydmljZU90aGVyKSB7XG4gICAgICBjb25maWdJbnB1dC5odHRwUmVxdWVzdERhdGE/LnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgZGVsZXRlIGN1cnJlbnQuc2VydmljZU90aGVyO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHNlcnZpY2VPdGhlclJlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3QpIHtcbiAgICAgIGNvbmZpZ0lucHV0LmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3g/LigpPy5odHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdD8udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBkZWxldGUgY3VycmVudC5zZXJ2aWNlT3RoZXI7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gY2xvbmVEZWVwKGNvbmZpZ0lucHV0KSBhcyBJTGlzdENvbmZpZ0l0ZW07XG5cbiAgICBpZiAoc2VydmljZU90aGVyICYmIGNvbmZpZy5odHRwUmVxdWVzdERhdGEpIHtcbiAgICAgIGNvbmZpZy5odHRwUmVxdWVzdERhdGEudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnNlcnZpY2VPdGhlciA9IHNlcnZpY2VPdGhlcjtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzZXJ2aWNlT3RoZXJSZXF1ZXN0QWxsSWRTZWxlY3RPclVuU2VsZWN0ICYmIGNvbmZpZy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KSB7XG4gICAgICBjb25maWcuY29uZmlnVGVtcGxhdGVDaGVja2JveD8uKCk/Lmh0dHBSZXF1ZXN0QWxsSWRTZWxlY3RPclVuU2VsZWN0Py51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQuc2VydmljZU90aGVyID0gc2VydmljZU90aGVyO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2xlYW5VcEVmZmVjdC5kZXN0cm95KCk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQoZmFsc2UpO1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMuY29tcG9uZW50UmVmKTtcbiAgICB0aGlzLm9uUmVmcmVzaC5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25TZWFyY2guY29tcGxldGUoKTtcbiAgICB0aGlzLm9uU2V0SGlkZGVuSXRlbUJ5S2V5LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblVwZGF0ZU11bHRpS2V5U2VsZWN0ZWRHcm91cC5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG59IiwiPGRpdiAjbGlzdFZpZXdDb250YWluZXJcbiAgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCJcbiAgW2NsYXNzLnctZnVsbF09XCIhbWF4SXRlbVNob3dcIlxuICBbY2xhc3MuaC1mdWxsXT1cIiFtYXhJdGVtU2hvd1wiPlxuICBAaWYgKGxhYmVsQ29uZmlnKCk7IGFzIGxhYmVsQ29uZmlnKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1sYWJlbCBbY2xhc3NJbmNsdWRlXT1cImxhYmVsQ29uZmlnLmNsYXNzSW5jbHVkZVwiXG4gICAgICBbbGFiZWxMZWZ0XT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdFwiXG4gICAgICBbbGFiZWxMZWZ0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgW3JlcXVpcmVkXT1cImxhYmVsQ29uZmlnLnJlcXVpcmVkIFwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25cIlxuICAgICAgW2Rlc2NyaXB0aW9uQ2xhc3NdPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25DbGFzc1wiXG4gICAgICBbbGFiZWxSaWdodF09XCJsYWJlbENvbmZpZy5sYWJlbFJpZ2h0XCJcbiAgICAgIFtsYWJlbFJpZ2h0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxSaWdodENsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2J1dHRvbnNMZWZ0XT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNMZWZ0XCJcbiAgICAgIFtidXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuYnV0dG9uc1JpZ2h0XCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0xlZnRdPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNMZWZ0IHx8IGRpc2FibGUoKVwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNSaWdodF09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc1JpZ2h0IHx8IGRpc2FibGUoKVwiXG4gICAgICBbaGFzVG9nZ2xlXT1cImxhYmVsQ29uZmlnLmhhc1RvZ2dsZVwiXG4gICAgICBbdG9nZ2xlQWN0aXZlXT1cImxhYmVsQ29uZmlnLnRvZ2dsZUFjdGl2ZVwiXG4gICAgICBbdG9nZ2xlRGlzYWJsZV09XCJsYWJlbENvbmZpZy50b2dnbGVEaXNhYmxlIHx8IGxvYWRpbmcoKSB8fCBkaXNhYmxlKClcIlxuICAgICAgW3BvcG92ZXJdPVwibGFiZWxDb25maWcucG9wb3ZlclwiXG4gICAgICBbaWNvblBvcG92ZXJDbGFzc109XCJsYWJlbENvbmZpZy5pY29uUG9wb3ZlckNsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2xpbWl0TGVuZ3RoXT1cImxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb24gfHwgZGlzYWJsZSgpXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc109XCJsYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc1wiXG4gICAgICBbY291bnRdPVwibGFiZWxDb25maWcuY291bnRcIiAvPlxuICB9XG5cbiAgQGlmICghc2hvd1ZhbGlkYXRlQm90dG9tKCkpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVWYWxpZGF0ZVwiIC8+XG4gIH1cbiAgQGlmICghaGlkZGVuSW5wdXRTZWFyY2goKSkge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXNlYXJjaCBbc2VhcmNoQ29uZmlnXT1cInNlYXJjaENvbmZpZygpXCJcbiAgICAgIFtjbGFzcy5weC1bMTJweF1dPVwic2VhcmNoUGFkZGluZygpXCJcbiAgICAgIFtjbGFzc109XCJzZWFyY2hDb25maWcoKS5jbGFzc0NvdmVySW5wdXRTZWFyY2hcIlxuICAgICAgW2Rpc2FibGVdPVwiIGRpc2FibGUoKSB8fCBsb2FkaW5nKCkgfHwgZmFsc2VcIlxuICAgICAgKG91dFNlYXJjaCk9XCJoYW5kbGVyU2VhcmNoKCRldmVudClcIlxuICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbElucHV0U2VhcmNoKCRldmVudClcIiAvPlxuICB9XG4gIEBpZiAoY29uZmlnKCk/LmNvbmZpZ0Rlc2NyaXB0aW9uR3JvdXA/LigpOyBhcyBkZXNjcmlwdGlvbikge1xuICAgIDxkaXYgW2NsYXNzXT1cImRlc2NyaXB0aW9uPy5jbGFzc0luY2x1ZGVcIj5cbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY29uZmlnXT1cImRlc2NyaXB0aW9uPy50b29sdGlwRGVzY3JpcHRpb24oKVwiPlxuICAgICAgICA8ZGl2IFtjbGFzc109XCJkZXNjcmlwdGlvbj8uY2xhc3NUZXh0RGVzY3JpcHRpb25JbmNsdWRlXCI+e3sgZGVzY3JpcHRpb24udGV4dERlc2NyaXB0aW9uIH19PC9kaXY+XG4gICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAoIWhpZGRlbklucHV0U2VhcmNoKCkgJiYgaGFzRGl2aWRlcigpICYmICghY29uZmlnKCk/Lmlnbm9yZVNob3dEYXRhV2hlbk5vdFNlYXJjaCB8fCBrZXlTZWFyY2hTdG9yZSgpKSkge1xuICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWJvcmRlci10b3AtZ2VuZXJhbCB7eyBkaXZpZGVyQ2xhc3NJbmNsdWRlKCkgPyBkaXZpZGVyQ2xhc3NJbmNsdWRlKCk6JycgfX1cIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGl2aWRlci1kZWZhdWx0XT1cIiEhc2VhcmNoUGFkZGluZygpICYmICFkaXZpZGVyQ2xhc3NJbmNsdWRlKClcIj5cbiAgICA8L2Rpdj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB7eyAoY29uZmlnKCk/Lmlnbm9yZVNob3dEYXRhV2hlbk5vdFNlYXJjaCAmJiBrZXlTZWFyY2hTdG9yZSgpICYmICFjb25maWcoKT8uaWdub3JlRml4SGVpZ2h0U2hvd0RhdGFXaGVuTm90U2VhcmNoKSA/ICdoLVszNTNweF0nIDogJ2gtZnVsbCcgfX1cIj5cbiAgICA8ZGl2ICNjb250ZW50Q29udGFpbmVyXG4gICAgICBjbGFzcz1cInctZnVsbCBoLWZ1bGwge3sgYmFja2dyb3VuZExpc3RDdXN0b20oKSB9fVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKSAmJiBkaXNhYmxlTGFiZWwoKVwiXG4gICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJkaXNhYmxlKCkgJiYgZGlzYWJsZUxhYmVsKClcIj5cbiAgICA8L2Rpdj5cblxuICAgIEBmb3IgKGJ1dHRvbk90aGVyIG9mIGJ1dHRvbnNPdGhlcigpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJiZy1bI2ZmZmZmZl1cIlxuICAgICAgICBbY2xhc3Mucm91bmRlZC1iLVs0cHhdXT1cIiRsYXN0ICYmICFoYXNCdXR0b25VblNlbGVjdE9wdGlvbigpXCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiYnV0dG9uT3RoZXIudHlwZSB8fCAnYnV0dG9uLWxpbmstcHJpbWFyeSdcIlxuICAgICAgICAgIFtsYWJlbF09XCJidXR0b25PdGhlci5sYWJlbCB8fCAnICdcIlxuICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIihidXR0b25PdGhlci5jbGFzc0ljb25MZWZ0IHx8ICcnKSsnIGZsZXggbXItWzhweF0gdGV4dC1bMTZweF0nXCJcbiAgICAgICAgICBjbGFzc0luY2x1ZGU9XCJ3LWZ1bGwgbGlicy11aS1ib3JkZXItdG9wLWdlbmVyYWwgdGV4dC1sZWZ0IHJvdW5kZWQtMCB7eyBidXR0b25PdGhlci5jbGFzc0luY2x1ZGUgPyBidXR0b25PdGhlci5jbGFzc0luY2x1ZGU6JycgfX1cIlxuICAgICAgICAgIGNsYXNzTGFiZWw9XCJsaWJzLXVpLWZvbnQtaDVyIHdoaXRlc3BhY2Utbm9ybWFsXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJidXR0b25PdGhlci5kaXNhYmxlIHx8IGRpc2FibGUoKSB8fCBsb2FkaW5nKCkgfHwgZmFsc2VcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ2xpY2tCdXR0b25PdGhlcihidXR0b25PdGhlcilcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoaGFzQnV0dG9uVW5TZWxlY3RPcHRpb24oKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImJnLVsjZmZmZmZmXSByb3VuZGVkLWItWzRweF1cIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBsYWJlbD1cImkxOG5fdW5zZWxlY3Rfb3B0aW9uXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uLWxpbmstZGFuZ2VyLWhpZ2hcIlxuICAgICAgICAgIGNsYXNzSWNvbkxlZnQ9XCJmbGV4IG1yLVs4cHhdIGxpYnMtdWktaWNvbi1jbG9zZVwiXG4gICAgICAgICAgY2xhc3NJbmNsdWRlPVwidy0xMDAgbGlicy11aS1ib3JkZXItdG9wLWdlbmVyYWwgdGV4dC1sZWZ0IHJvdW5kZWQtMFwiXG4gICAgICAgICAgY2xhc3NMYWJlbD1cImxpYnMtdWktZm9udC1oNXIgd2hpdGVzcGFjZS1ub3JtYWxcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGVCdXR0b25VblNlbGVjdE9wdGlvbigpIHx8IGRpc2FibGUoKSB8fCBsb2FkaW5nKCkgfHwgZmFsc2VcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyUmVtb3ZlS2V5U2VsZWN0ZWQoKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuICBAaWYgKHNob3dWYWxpZGF0ZUJvdHRvbSgpKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlVmFsaWRhdGVcIiAvPlxuICB9XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVZhbGlkYXRlPlxuICBAaWYgKGlzRXJyb3JSZXF1aXJlZCgpKSB7XG4gICAgPGRpdiBbY2xhc3MubWItWzhweF1dPVwiIXNob3dWYWxpZGF0ZUJvdHRvbSgpXCJcbiAgICAgIFtjbGFzcy5tdC1bOHB4XV09XCJzaG93VmFsaWRhdGVCb3R0b20oKVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LVsjZWUyZDQxXSBsaWJzLXVpLWZvbnQtaDdcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cIih2YWxpZFJlcXVpcmVkKCk/Lm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCl8IHRyYW5zbGF0ZTp2YWxpZFJlcXVpcmVkKCk/LmludGVycG9sYXRlUGFyYW1zXCI+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -18,7 +18,7 @@ import * as i0 from "@angular/core";
18
18
  import * as i1 from "@iharbeck/ngx-virtual-scroller";
19
19
  import * as i2 from "@ngx-translate/core";
20
20
  export class LibsUiComponentsListCheckboxComponent extends LibsUiComponentsListTemplatesComponentAbstract {
21
- /* PROPERTY */
21
+ // #region PROPERTY
22
22
  configTemplateCheckbox = signal(undefined);
23
23
  ngOnInit() {
24
24
  if (isEmpty(this.config()?.configTemplateCheckbox?.())) {
@@ -285,4 +285,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
285
285
  LibsUiPipesCallFunctionInTemplatePipe
286
286
  ], template: "@if (configTemplateCheckbox(); as configTemplateCheckbox) {\n <div class=\"flex flex-col w-full h-full\">\n @if (items().length && configTemplateCheckbox.configButtonSelectAndUndSelectItem?.(); as configButtonSelectItem) {\n <div [class]=\"'flex items-center bg-[#ffffff] '+(configButtonSelectItem.classInclude ?? 'libs-ui-border-bottom-general')\">\n <libs_ui-components-buttons-button [type]=\"configButtonSelectItem.buttonCheckAll?.type ?? 'button-link-primary'\"\n [label]=\"configButtonSelectItem.buttonCheckAll?.label ?? 'i18n_select_all_searched_results'\"\n [classInclude]=\"configButtonSelectItem.buttonCheckAll?.classInclude || 'pr-[8px]'\"\n [classLabel]=\"configButtonSelectItem.buttonCheckAll?.classLabel || 'libs-ui-font-h6r'\"\n [disable]=\"loading() || disable() || false\"\n (outClick)=\"handlerSelect(true)\" />\n <div class=\"text-[#e6e7ea]\">|</div>\n <libs_ui-components-buttons-button [type]=\"configButtonSelectItem.buttonUncheckAll?.type ?? 'button-link-primary'\"\n [label]=\"configButtonSelectItem.buttonUncheckAll?.label ?? 'i18n_unselect_all_searched_results'\"\n [classInclude]=\"configButtonSelectItem.buttonUncheckAll?.classInclude || 'pl-[8px]'\"\n [classLabel]=\"configButtonSelectItem.buttonUncheckAll?.classLabel || 'libs-ui-font-h6r'\"\n [disable]=\"loading() || disable() || false\"\n (outClick)=\"handlerSelect(false)\" />\n </div>\n }\n @if (items().length && configTemplateCheckbox.configCheckboxCheckAll?.(); as configCheckBox) {\n <div [class]=\"'flex libs-ui-border-bottom-general bg-[#ffffff] pl-[12px] '+(configTemplateCheckbox.classIncludeHasConfigCheckBoxAll ?? 'py-[6px] libs-ui-border-bottom-general')\">\n <libs_ui-components-checkbox-single [label]=\"configCheckBox.label ?? 'i18n_all'\"\n [classLabelInclude]=\"configCheckBox.classLabelInclude || ''\"\n [checked]=\"(multiKeySelected()?.length && (multiKeySelected()?.length ||0) >= (store().length || -1)) || false\"\n [stillOtherOptions]=\"!!multiKeySelected()?.length && (multiKeySelected()?.length ||0) < (store().length || -1)\"\n [disable]=\"loading() || disable() || false\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerSelect($event.checked)\" />\n </div>\n }\n <div [class]=\"'relative h-full w-full ' +((!items() || !items().length) ? 'bg-[#ffffff]': configTemplateCheckbox.classListInclude || '')\">\n @if (items() && items().length) {\n <div #elementScroll\n LibsUiComponentsScrollOverlayDirective\n class=\"w-full\"\n [style.height]=\"heightViewPort() && !config()?.ignoreShowDataWhenNotSearch ? heightViewPort()+'px':'100%'\"\n (outScrollBottom)=\"handlerScrollBottom()\">\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n @for (item of scroll.viewPortItems; track item()[fieldKey()]; let last = $last) {\n <div [class]=\"last ? (configTemplateCheckbox.classIncludeLastViewItem || '') : ''\">\n <div #itemRef\n LibsUiComponentsListHighlightKeySearchDirective\n [isHighlight]=\"config()?.highlightTextSearchInResult\"\n [keySearch]=\"keySearch()\"\n [attr.clickExactly]=\"clickExactly\"\n [class]=\"'libs-ui-list-template-checkbox-item flex ' + (configTemplateCheckbox.classItemInclude || '')\"\n [class.w-full]=\"!configTemplateCheckbox.ignoreItemWidth100\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly()\"\n [class.libs-ui-bg-list-hover-active]=\"!clickExactly()\"\n [class.!pl-[12px]]=\"paddingLeftItem()\"\n [class.!py-[6px]]=\"clickExactly()\"\n [class.!pr-[4px]]=\"hasScroll() && configTemplateCheckbox.rows\"\n [class.!pr-[12px]]=\"!hasScroll() && configTemplateCheckbox.rows\"\n (click)=\"handlerChange($event,item())\">\n <div class=\"flex flex-col w-full\">\n @if (item().fieldLabel) {\n <libs_ui-components-checkbox-single [label]=\"item().fieldLabel\"\n [avatarConfig]=\"item().avatarConfig\"\n [linkImage]=\"configTemplateCheckbox.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:configTemplateCheckbox.getImage:item()) | async) : item()[configTemplateCheckbox.fieldGetImage || '']\"\n [linkImageError]=\"configTemplateCheckbox.getImageError ? (('avatar_error' | LibsUiPipesCallFunctionInTemplatePipe:configTemplateCheckbox.getImageError:item()) | async) : item()[configTemplateCheckbox.fieldGetLinkImageError || '']\"\n [classLabelInclude]=\"item().classLabelInclude || configTemplateCheckbox.classLabelInclude || 'libs-ui-font-h5r'\"\n [zIndexLabel]=\"configTemplateCheckbox.zIndexPopover ?? 1200\"\n [checked]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length\"\n [key]=\"item()[fieldKey()]\"\n [imgTypeIcon]=\"configTemplateCheckbox.hasAvatarGroupSocial\"\n [classInclude]=\"configTemplateCheckbox.classInclude || ''\"\n [classImageInclude]=\"configTemplateCheckbox.classIncludeImage || ''\"\n [bullet]=\"item().bullet?.()\"\n [disable]=\"loading() || disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length)\"\n [popover]=\"item().dataPopover\"\n [clickExactly]=\"clickExactly()\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerChange('checkbox',item())\" />\n }\n @if (configTemplateCheckbox?.rows) {\n <libs_ui-components-list-templates_rows class=\"{{ !configTemplateCheckbox.ignoreItemWidth100 ? 'w-full' : '' }} {{ configTemplateCheckbox.classRowsWrapper || configTemplateCheckbox.classRows ?? '' }}\"\n [item]=\"item()\"\n [zIndex]=\"zIndex()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"(item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length) ? item()[fieldKey()] : undefined\"\n [configTemplate]=\"configTemplateCheckbox\"\n (outEvent)=\"handlerChange('checkbox',$event.item)\" />\n }\n </div>\n </div>\n </div>\n }\n </virtual-scroller>\n </div>\n }\n @if ((!items() || !items().length) && (!config()?.ignoreShowDataWhenNotSearch || keySearch())) {\n <div [class]=\"'libs-ui-font-h5r text-[#9ca2ad] '+ (config()?.textNoDataClassInclude ?? 'py-[4px] px-[12px]')\">\n @if (config()?.hasIconNoData && !loading()) {\n <div class=\"mb-[16px]\">\n <div *ngComponentOutlet=\"(keySearch() ? 'no-result' : 'no-data') | LibsUiIconsGetIconComponentPipe | async\">\n </div>\n </div>\n }\n @if (!keySearch() && !loading()) {\n <span>{{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}</span>\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n <span>{{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}</span>\n }\n @if (loading()) {\n <span>&nbsp;</span>\n }\n\n </div>\n }\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n </div>\n}\n", styles: [".libs-ui-list-template-checkbox-item{padding:6px 0 6px 16px;margin-right:8px;font-size:12px;line-height:18px;position:relative}\n"] }]
287
287
  }] });
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2xpc3Qvc3JjL3RlbXBsYXRlcy9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0csT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSwrQ0FBK0Ms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QztJQUMxRCxDQUFDO0lBRVMsYUFBYTtRQUNyQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDN0IsQ0FBQzt3R0E1U1UscUNBQXFDOzRGQUFyQyxxQ0FBcUMsNkhDdkNsRCw4cFFBMEhBLDBMRC9GSSxxQkFBcUIsdXRCQUFFLGlCQUFpQiwrT0FBRSxTQUFTLDZDQUFFLGVBQWUsNEZBQUUsZ0JBQWdCLG9KQUN0RixzQ0FBc0MsaWhCQUN0Qyx1Q0FBdUMsZ25CQUN2QyxnQ0FBZ0MsaUdBQ2hDLHNDQUFzQyx5UUFDdEMsNEJBQTRCLGdFQUM1QiwrQkFBK0Isd0VBQy9CLCtDQUErQyxzSkFDL0MsaUNBQWlDLCtNQUNqQyxxQ0FBcUM7OzRGQUc1QixxQ0FBcUM7a0JBcEJqRCxTQUFTOytCQUVFLDRDQUE0QyxjQUcxQyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0I7d0JBQ3RGLHNDQUFzQzt3QkFDdEMsdUNBQXVDO3dCQUN2QyxnQ0FBZ0M7d0JBQ2hDLHNDQUFzQzt3QkFDdEMsNEJBQTRCO3dCQUM1QiwrQkFBK0I7d0JBQy9CLCtDQUErQzt3QkFDL0MsaUNBQWlDO3dCQUNqQyxxQ0FBcUM7cUJBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NvbXBvbmVudE91dGxldCwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZpcnR1YWxTY3JvbGxlck1vZHVsZSB9IGZyb20gJ0BpaGFyYmVjay9uZ3gtdmlydHVhbC1zY3JvbGxlcic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0NoZWNrYm94U2luZ2xlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNjcm9sbC1vdmVybGF5JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTcGlubmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zcGlubmVyJztcbmltcG9ydCB7IExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUgfSBmcm9tICdAbGlicy11aS9pY29ucyc7XG5pbXBvcnQgeyBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlIH0gZnJvbSAnQGxpYnMtdWkvcGlwZXMtY2FsbC1mdW5jdGlvbi1pbi10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGNvbnZlcnRTaWduYWxUb09iamVjdCwgZGVsZXRlVW5pY29kZSwgZXNjYXBlSHRtbCwgaXNFbXB0eSwgaXNOaWwgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMaXN0SGlnaGxpZ2h0S2V5U2VhcmNoRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vaGlnaGxpZ2h0LWtleS1zZWFyY2gvaGlnaGxpZ2h0LWtleS1zZWFyY2guZGlyZWN0aXZlJztcbmltcG9ydCB7IElMaXN0RGF0YUVtaXRLZXkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2RhdGEtZW1pdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2NoZWNrLXNlbGVjdGVkLWJ5LWtleS5waXBlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMaXN0Um93c0NvbXBvbmVudCB9IGZyb20gJy4uL3Jvd3Mvcm93cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpc3RUZW1wbGF0ZXNDb21wb25lbnRBYnN0cmFjdCB9IGZyb20gJy4uL3RlbXBsYXRlcy5jb21wb25lbnQuYWJzdHJhY3QnO1xuaW1wb3J0IHsgSUxpc3RDb25maWdJdGVtQ2hlY2tib3ggfSBmcm9tICcuLy4uLy4uL2ludGVyZmFjZXMvY29uZmlnLWl0ZW0uaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWxpc3QtdGVtcGxhdGVzX2NoZWNrYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hlY2tib3guY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBWaXJ0dWFsU2Nyb2xsZXJNb2R1bGUsIE5nQ29tcG9uZW50T3V0bGV0LCBBc3luY1BpcGUsIFRyYW5zbGF0ZU1vZHVsZSwgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQ2hlY2tib3hTaW5nbGVDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1NwaW5uZXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUsXG4gICAgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZSxcbiAgICBMaWJzVWlJY29uc0dldEljb25Db21wb25lbnRQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNMaXN0SGlnaGxpZ2h0S2V5U2VhcmNoRGlyZWN0aXZlLFxuICAgIExpYnNVaUNvbXBvbmVudHNMaXN0Um93c0NvbXBvbmVudCxcbiAgICBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0xpc3RDaGVja2JveENvbXBvbmVudCBleHRlbmRzIExpYnNVaUNvbXBvbmVudHNMaXN0VGVtcGxhdGVzQ29tcG9uZW50QWJzdHJhY3QgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgY29uZmlnVGVtcGxhdGVDaGVja2JveCA9IHNpZ25hbDxJTGlzdENvbmZpZ0l0ZW1DaGVja2JveCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoaXNFbXB0eSh0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZUNoZWNrYm94Py4oKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guc2V0KHRoaXMuY29uZmlnKCk/LmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3g/LigpKTtcbiAgICB0aGlzLmZpZWxkS2V5LnNldCh0aGlzLmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3goKT8uZmllbGRLZXkgPz8gdGhpcy5maWVsZEtleURlZmF1bHQoKSk7XG4gICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKCk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJTZWxlY3QoaXNTZWxlY3RBbGw6IGJvb2xlYW4pIHtcbiAgICBpZiAoaXNTZWxlY3RBbGwgJiYgdGhpcy5yZXNldEtleVdoZW5TZWxlY3RBbGxLZXlEcm9wZG93bigpKSB7XG4gICAgICB0aGlzLm11bHRpS2V5U2VsZWN0ZWQuc2V0KFtdKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5tdWx0aUtleVNlbGVjdGVkLnNldChbXSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxvYWRpbmcoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0SWRzQnlTZXJ2aWNlKCk7XG5cbiAgICB0aGlzLnByb2Nlc3NIYW5kbGVyU2VsZWN0RGF0YShpc1NlbGVjdEFsbCwgcmVzdWx0LmRhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzSGFuZGxlclNlbGVjdERhdGEoaXNTZWxlY3RBbGw6IGJvb2xlYW4sIGlkczogQXJyYXk8c3RyaW5nPikge1xuICAgIGNvbnN0IGtleXNEaXNhYmxlID0gdGhpcy5rZXlzRGlzYWJsZUl0ZW0oKSB8fCBbXTtcbiAgICBjb25zdCBrZXlzID0gbmV3IFNldCh0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKSk7XG5cbiAgICB0aGlzLm11bHRpS2V5U2VsZWN0ZWQuc2V0KFtdKTtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG4gICAgaWYgKGlzU2VsZWN0QWxsKSB7XG4gICAgICBpZiAoaWRzLmxlbmd0aCkge1xuICAgICAgICBpZHMuZm9yRWFjaChpZCA9PiAha2V5c0Rpc2FibGUuc29tZShrZXkgPT4ga2V5ID09PSBpZCkgJiYga2V5cy5hZGQoaWQpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpZHMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuaXRlbXMoKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldO1xuXG4gICAgICAgICAgaWYgKCFrZXlzRGlzYWJsZS5zb21lKGtleURpc2FibGUgPT4ga2V5RGlzYWJsZSA9PT0ga2V5KSkge1xuICAgICAgICAgICAga2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5tdWx0aUtleVNlbGVjdGVkLnVwZGF0ZShpdGVtcyA9PiBbLi4uKGl0ZW1zIHx8IFtdKSwgLi4ua2V5c10pO1xuICAgICAgdGhpcy5lbWl0U2VsZWN0TXVsdGlLZXkodGhpcy5tdWx0aUtleVNlbGVjdGVkKCkgfHwgW10pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleVVuU2VsZWN0ZWQgPSBuZXcgU2V0PHVua25vd24+KCk7XG5cbiAgICBpZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICBpZiAoIWtleXNEaXNhYmxlLnNvbWUoa2V5ID0+IGtleSA9PT0gaWQpKSB7XG4gICAgICAgIGtleXMuZGVsZXRlKGlkKTtcbiAgICAgICAga2V5VW5TZWxlY3RlZC5hZGQoaWQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghaWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5pdGVtcygpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldO1xuXG4gICAgICAgIGlmICgha2V5c0Rpc2FibGUuc29tZShrZXkgPT4ga2V5ID09PSBrZXkpKSB7XG4gICAgICAgICAga2V5cy5kZWxldGUoa2V5KTtcbiAgICAgICAgICBrZXlVblNlbGVjdGVkLmFkZChrZXkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5tdWx0aUtleVNlbGVjdGVkLnVwZGF0ZShpdGVtcyA9PiBbLi4uKGl0ZW1zIHx8IFtdKSwgLi4ua2V5c10pO1xuICAgIHRoaXMub3V0VW5TZWxlY3RNdWx0aUtleS5lbWl0KEFycmF5LmZyb20oa2V5VW5TZWxlY3RlZCkpO1xuICAgIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdCh7IGtleXM6IHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpIHx8IFtdLCBtYXBLZXlzOiBbXSwgaXNDbGlja01hbnVhbDogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0SWRzQnlTZXJ2aWNlKCkge1xuICAgIGlmICghdGhpcy5zZWFyY2hDb25maWcoKSB8fCAhdGhpcy5pc1NlYXJjaE9ubGluZSgpKSB7XG4gICAgICByZXR1cm4geyBjb2RlOiAyMDAsIGRhdGE6IHRoaXMuaXRlbXMoKS5tYXAoaXRlbSA9PiBpdGVtKClbdGhpcy5maWVsZEtleSgpXSkgfTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/Lmh0dHBSZXF1ZXN0QWxsSWRTZWxlY3RPclVuU2VsZWN0Py4oKSkge1xuICAgICAgICByZXR1cm4geyBkYXRhOiBbXSB9O1xuICAgICAgfVxuICAgICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0QWxsSWRTZWxlY3RPclVuU2VsZWN0ID0gdGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/Lmh0dHBSZXF1ZXN0QWxsSWRTZWxlY3RPclVuU2VsZWN0Py4oKTtcblxuICAgICAgaWYgKCFodHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdCkge1xuICAgICAgICByZXR1cm4geyBkYXRhOiBbXSB9O1xuICAgICAgfVxuICAgICAgY29uc3QgeyBhcmd1bWVudHNWYWx1ZSwgZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUgfSA9IGh0dHBSZXF1ZXN0QWxsSWRTZWxlY3RPclVuU2VsZWN0O1xuXG4gICAgICB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS51cGRhdGVBcmd1bWVudHMoYXJndW1lbnRzVmFsdWUsIHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLmZha2VSZXNwb25zZVBhZ2luZ0FwaSgpLCB7fSwgdGhpcy5rZXlTZWFyY2goKSwgdGhpcy5pc1NlYXJjaE9ubGluZSgpLCBmYWxzZSwgZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS5jYWxsQXBpKGh0dHBSZXF1ZXN0QWxsSWRTZWxlY3RPclVuU2VsZWN0KTtcblxuICAgICAgaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5kYXRhIHx8ICFyZXN1bHQuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogW10gfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuXG4gICAgICByZXR1cm4geyBkYXRhOiBbXSB9O1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2Nyb2xsQm90dG9tKCkge1xuICAgIGlmICh0aGlzLmxvYWRlZExhc3RJdGVtKCkpIHtcbiAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxvYWRpbmcoKSB8fCB0aGlzLmxvYWRlZExhc3RJdGVtKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG4gICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzU2VhcmNoKCkge1xuICAgIGlmICghdGhpcy5pc1NlYXJjaE9ubGluZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NLZXlDaGFuZ2VVblNlbGVjdChpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoaXNOaWwoaXRlbVt0aGlzLmZpZWxkS2V5KCldKSB8fCBpdGVtW3RoaXMuZmllbGRLZXkoKV0gPT09ICcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2hlY2tBbmRFbWl0TXVsdGlLZXlTZWxlY3RlZChpdGVtKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlKGV2ZW50OiBhbnksIGl0ZW06IGFueSwgaWdub3JlRGlzYWJsZSA9IGZhbHNlLCBpc0NsaWNrTWFudWFsID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3goKT8uaWdub3JlQ2xpY2tJdGVtVW5DaGVja2VkKSB7XG4gICAgICBjb25zdCBrZXkgPSBpdGVtW3RoaXMuZmllbGRLZXkoKV07XG5cbiAgICAgIGlmICh0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKT8uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5tdWx0aUtleVNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC5zZXQoW10pO1xuICAgIH1cbiAgICBpZiAoIWlnbm9yZURpc2FibGUgJiYgKHRoaXMuZGlzYWJsZSgpIHx8IHRoaXMua2V5c0Rpc2FibGVJdGVtKCk/LnNvbWUoa2V5ID0+IGtleSA9PT0gaXRlbVt0aGlzLmZpZWxkS2V5KCldKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgRXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLmNsaWNrRXhhY3RseSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hlY2tBbmRFbWl0TXVsdGlLZXlTZWxlY3RlZChpdGVtLCBpc0NsaWNrTWFudWFsKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrQW5kRW1pdE11bHRpS2V5U2VsZWN0ZWQoaXRlbSwgaXNDbGlja01hbnVhbCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQW5kRW1pdE11bHRpS2V5U2VsZWN0ZWQoaXRlbTogYW55LCBpc0NsaWNrTWFudWFsID0gdHJ1ZSkge1xuICAgIGNvbnN0IGtleSA9IGl0ZW1bdGhpcy5maWVsZEtleSgpXTtcbiAgICBjb25zdCBpbmRleE9mS2V5ID0gdGhpcy5tdWx0aUtleVNlbGVjdGVkKCk/LmluZGV4T2Yoa2V5KSA/PyAtMTtcblxuICAgIGlmIChpbmRleE9mS2V5IDwgMCkge1xuICAgICAgdGhpcy5tdWx0aUtleVNlbGVjdGVkLnVwZGF0ZShpdGVtcyA9PiBbLi4uKGl0ZW1zIHx8IFtdKSwga2V5XSk7XG4gICAgICB0aGlzLmVtaXRTZWxlY3RNdWx0aUtleSh0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKSB8fCBbXSwgaXNDbGlja01hbnVhbCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5tdWx0aUtleVNlbGVjdGVkKCk/LnNwbGljZShpbmRleE9mS2V5LCAxKTtcbiAgICB0aGlzLm91dFVuU2VsZWN0TXVsdGlLZXkuZW1pdChba2V5XSk7XG4gICAgdGhpcy5lbWl0U2VsZWN0TXVsdGlLZXkodGhpcy5tdWx0aUtleVNlbGVjdGVkKCkgfHwgW10sIGlzQ2xpY2tNYW51YWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlbWl0U2VsZWN0TXVsdGlLZXkobXVsdGlLZXlTZWxlY3RlZDogQXJyYXk8dW5rbm93bj4sIGlzQ2xpY2tNYW51YWwgPSB0cnVlKSB7XG4gICAgY29uc3QgbWFwS2V5cyA9IG5ldyBBcnJheTxJTGlzdERhdGFFbWl0S2V5PigpO1xuXG4gICAgaWYgKCFtdWx0aUtleVNlbGVjdGVkIHx8ICFtdWx0aUtleVNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdCh7IGtleXM6IFtdLCBtYXBLZXlzLCBpc0NsaWNrTWFudWFsIH0pO1xuICAgIH1cblxuICAgIG11bHRpS2V5U2VsZWN0ZWQuZm9yRWFjaCgoa2V5OiB1bmtub3duKSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5zdG9yZSgpLmZpbmQoaXRlbSA9PiBpdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0ga2V5KTtcblxuICAgICAgbWFwS2V5cy5wdXNoKHsga2V5LCBpdGVtOiBjb252ZXJ0U2lnbmFsVG9PYmplY3QoaXRlbSksIGlzQ2xpY2tNYW51YWwgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm91dFNlbGVjdE11bHRpS2V5LmVtaXQoeyBrZXlzOiB0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKSB8fCBbXSwgbWFwS2V5cywgaXNDbGlja01hbnVhbCB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzRGF0YShyZXBsYWNlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1CeUtleVNlYXJjaDogQXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4gPSBbXTtcbiAgICBjb25zdCBrZXlzSGlkZGVuID0gdGhpcy5rZXlzSGlkZGVuSXRlbSgpIHx8IFtdO1xuICAgIGNvbnN0IGl0ZW1zQWRkTmV3OiBBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+PiA9IFtdO1xuXG4gICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgIHRoaXMuaXRlbXMuc2V0KFtdKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JlKCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgaXRlbVR5cGVBZGROZXcgPSBpdGVtKCkuaXNBZGROZXc7XG5cbiAgICAgIGl0ZW0udXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBkZWxldGUgY3VycmVudC5pc0FkZE5ldztcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pXG4gICAgICBjb25zdCBkYXRhU3RvcmU6IFdyaXRhYmxlU2lnbmFsPGFueT4gPSBjbG9uZURlZXAoaXRlbSk7XG5cbiAgICAgIGRhdGFTdG9yZS51cGRhdGUoY3VycmVudFN0b3JlID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uY3VycmVudFN0b3JlLCByZWY6IGl0ZW0oKSB9O1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3goKT8uZ2V0UG9wb3Zlcikge1xuICAgICAgICBkYXRhU3RvcmUudXBkYXRlKGN1cnJlbnRTdG9yZSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uY3VycmVudFN0b3JlLCBkYXRhVG9vbHRpcDogdGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/LmdldFBvcG92ZXI/LihkYXRhU3RvcmUoKSkgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBrZXkgPSBrZXlzSGlkZGVuLmZpbmQoa2V5ID0+IGRhdGFTdG9yZSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGtleSk7XG5cbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gZGVsZXRlVW5pY29kZSh0aGlzLmJ1aWxkVmFsdWVCeUNvbmZpZyhkYXRhU3RvcmUsIHRoaXMuY29uZmlnVGVtcGxhdGVDaGVja2JveCgpKSkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGV4dEVzY2FwZSA9IGVzY2FwZUh0bWwodGV4dCk7XG4gICAgICAgIGNvbnN0IGtleVNlYXJjaCA9IGRlbGV0ZVVuaWNvZGUoZXNjYXBlSHRtbCh0aGlzLmtleVNlYXJjaCgpLnRvTG9jYWxlTG93ZXJDYXNlKCkpKTtcblxuICAgICAgICBpZiAoKCh0aGlzLmlzU2VhcmNoT25saW5lKCkgJiYgdGhpcy5jb25maWcoKT8uaHR0cFJlcXVlc3REYXRhPy4oKT8uc2VydmljZU5hbWUgJiYgIXRoaXMuY29uZmlnKCk/Lmh0dHBSZXF1ZXN0RGF0YT8uKCk/LnNlcnZpY2VPdGhlcikgfHxcbiAgICAgICAgICAodGV4dCAmJiAodGV4dC5pbmNsdWRlcyhrZXlTZWFyY2gpIHx8IHRleHRFc2NhcGUuaW5jbHVkZXMoa2V5U2VhcmNoKSkpKSAmJiAocmVwbGFjZSB8fCAoIXJlcGxhY2UgJiYgIXRoaXMuaXRlbXMoKS5maW5kKGRhdGFJdGVtID0+IGRhdGFJdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0gZGF0YVN0b3JlKClbdGhpcy5maWVsZEtleSgpXSkpKSAmJiAhaXRlbUJ5S2V5U2VhcmNoLmZpbmQoZGF0YUl0ZW0gPT4gZGF0YUl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSBkYXRhU3RvcmUoKVt0aGlzLmZpZWxkS2V5KCldKSkge1xuXG4gICAgICAgICAgZGF0YVN0b3JlLnVwZGF0ZShjdXJyZW50U3RvcmUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY3VycmVudFN0b3JlLFxuICAgICAgICAgICAgICBjbGFzc0xhYmVsSW5jbHVkZTogdGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/LmdldENsYXNzSXRlbT8uKGRhdGFTdG9yZSgpKSxcbiAgICAgICAgICAgICAgYXZhdGFyQ29uZmlnOiB0aGlzLmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3goKT8uZ2V0QXZhdGFyQ29uZmlnPy4oZGF0YVN0b3JlKCkpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKGl0ZW1UeXBlQWRkTmV3KSB7XG4gICAgICAgICAgICBpdGVtc0FkZE5ldy51bnNoaWZ0KGRhdGFTdG9yZSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaXRlbUJ5S2V5U2VhcmNoLnB1c2goZGF0YVN0b3JlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluZGV4SXRlbVJlbW92ZSA9IHRoaXMuaXRlbXMoKS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0ga2V5KTtcblxuICAgICAgaWYgKGluZGV4SXRlbVJlbW92ZSA+IC0xKSB7XG4gICAgICAgIHRoaXMuaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgICAgICBpdGVtcy5zcGxpY2UoaW5kZXhJdGVtUmVtb3ZlLCAxKTtcblxuICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgY2hlY2tMb2FkSXRlbSA9IChwcmVTdGF0ZUhhc1Njcm9sbDogYm9vbGVhbiwgY3VycmVudEhhc1Njcm9sbDogYm9vbGVhbikgPT4ge1xuICAgICAgaWYgKHRoaXMua2V5c0hpZGRlbkl0ZW0oKT8ubGVuZ3RoICYmIHByZVN0YXRlSGFzU2Nyb2xsICYmICFjdXJyZW50SGFzU2Nyb2xsICYmICh0aGlzLmlzU2VhcmNoT25saW5lKCkpKSB7XG4gICAgICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZShmYWxzZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChyZXBsYWNlKSB7XG4gICAgICB0aGlzLml0ZW1zLnNldChpdGVtQnlLZXlTZWFyY2gpO1xuICAgICAgdGhpcy5jb25maWcoKT8uc29ydD8uKHRoaXMuaXRlbXMoKSk7XG4gICAgICB0aGlzLmF1dG9TZWxlY3RGaXJzdEl0ZW0odGhpcy5pdGVtcygpKTtcbiAgICAgIHRoaXMuc2V0SGVpZ2h0Vmlld1BvcnQoKTtcbiAgICAgIHRoaXMuY2hlY2tWaWV3UG9ydFNjcm9sbChjaGVja0xvYWRJdGVtKTtcbiAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgICAgdGhpcy5vdXRMb2FkSXRlbXNDb21wbGV0ZS5lbWl0KHsgaXRlbXM6IHRoaXMuaXRlbXMoKSB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLml0ZW1zLnVwZGF0ZShpdGVtcyA9PiBbLi4uaXRlbXNBZGROZXcsIC4uLihpdGVtcyB8fCBbXSksIC4uLml0ZW1CeUtleVNlYXJjaF0pXG4gICAgdGhpcy5jb25maWcoKT8uc29ydD8uKHRoaXMuaXRlbXMoKSk7XG4gICAgdGhpcy5zZXRIZWlnaHRWaWV3UG9ydCgpO1xuICAgIHRoaXMuY2hlY2tWaWV3UG9ydFNjcm9sbChjaGVja0xvYWRJdGVtKTtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG4gICAgdGhpcy5vdXRMb2FkSXRlbXNDb21wbGV0ZS5lbWl0KHsgaXRlbXM6IHRoaXMuaXRlbXMoKSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhdXRvU2VsZWN0Rmlyc3RJdGVtKGl0ZW1zOiBBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pikge1xuICAgIGlmICh0aGlzLmF1dG9TZWxlY3RlZEZpcnN0SXRlbUNhbGxPdXRzaWRlQmVmb3JlKCkgfHwgdGhpcy5tdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCB8fCAhdGhpcy5jb25maWcoKT8uYXV0b1NlbGVjdEZpcnN0SXRlbSB8fCAhaXRlbXMgfHwgIWl0ZW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZXJDaGFuZ2UoJ2NoZWNrYm94JywgaXRlbXNbMF0oKSwgdHJ1ZSwgZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldExlbmd0aEl0ZW0oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcygpLmxlbmd0aDtcbiAgfVxufVxuIiwiQGlmIChjb25maWdUZW1wbGF0ZUNoZWNrYm94KCk7IGFzIGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3gpIHtcbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiPlxuICAgIEBpZiAoaXRlbXMoKS5sZW5ndGggJiYgY29uZmlnVGVtcGxhdGVDaGVja2JveC5jb25maWdCdXR0b25TZWxlY3RBbmRVbmRTZWxlY3RJdGVtPy4oKTsgYXMgY29uZmlnQnV0dG9uU2VsZWN0SXRlbSkge1xuICAgICAgPGRpdiBbY2xhc3NdPVwiJ2ZsZXggaXRlbXMtY2VudGVyIGJnLVsjZmZmZmZmXSAnKyhjb25maWdCdXR0b25TZWxlY3RJdGVtLmNsYXNzSW5jbHVkZSA/PyAnbGlicy11aS1ib3JkZXItYm90dG9tLWdlbmVyYWwnKVwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cImNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0uYnV0dG9uQ2hlY2tBbGw/LnR5cGUgPz8gJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25DaGVja0FsbD8ubGFiZWwgPz8gJ2kxOG5fc2VsZWN0X2FsbF9zZWFyY2hlZF9yZXN1bHRzJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJjb25maWdCdXR0b25TZWxlY3RJdGVtLmJ1dHRvbkNoZWNrQWxsPy5jbGFzc0luY2x1ZGUgfHwgJ3ByLVs4cHhdJ1wiXG4gICAgICAgICAgW2NsYXNzTGFiZWxdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25DaGVja0FsbD8uY2xhc3NMYWJlbCB8fCAnbGlicy11aS1mb250LWg2cidcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBkaXNhYmxlKCkgfHwgZmFsc2VcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyU2VsZWN0KHRydWUpXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtWyNlNmU3ZWFdXCI+fDwvZGl2PlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cImNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0uYnV0dG9uVW5jaGVja0FsbD8udHlwZSA/PyAnYnV0dG9uLWxpbmstcHJpbWFyeSdcIlxuICAgICAgICAgIFtsYWJlbF09XCJjb25maWdCdXR0b25TZWxlY3RJdGVtLmJ1dHRvblVuY2hlY2tBbGw/LmxhYmVsID8/ICdpMThuX3Vuc2VsZWN0X2FsbF9zZWFyY2hlZF9yZXN1bHRzJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJjb25maWdCdXR0b25TZWxlY3RJdGVtLmJ1dHRvblVuY2hlY2tBbGw/LmNsYXNzSW5jbHVkZSB8fCAncGwtWzhweF0nXCJcbiAgICAgICAgICBbY2xhc3NMYWJlbF09XCJjb25maWdCdXR0b25TZWxlY3RJdGVtLmJ1dHRvblVuY2hlY2tBbGw/LmNsYXNzTGFiZWwgfHwgJ2xpYnMtdWktZm9udC1oNnInXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgZGlzYWJsZSgpIHx8IGZhbHNlXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclNlbGVjdChmYWxzZSlcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoaXRlbXMoKS5sZW5ndGggJiYgY29uZmlnVGVtcGxhdGVDaGVja2JveC5jb25maWdDaGVja2JveENoZWNrQWxsPy4oKTsgYXMgY29uZmlnQ2hlY2tCb3gpIHtcbiAgICAgIDxkaXYgW2NsYXNzXT1cIidmbGV4IGxpYnMtdWktYm9yZGVyLWJvdHRvbS1nZW5lcmFsIGJnLVsjZmZmZmZmXSBwbC1bMTJweF0gJysoY29uZmlnVGVtcGxhdGVDaGVja2JveC5jbGFzc0luY2x1ZGVIYXNDb25maWdDaGVja0JveEFsbCA/PyAncHktWzZweF0gbGlicy11aS1ib3JkZXItYm90dG9tLWdlbmVyYWwnKVwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZSBbbGFiZWxdPVwiY29uZmlnQ2hlY2tCb3gubGFiZWwgPz8gJ2kxOG5fYWxsJ1wiXG4gICAgICAgICAgW2NsYXNzTGFiZWxJbmNsdWRlXT1cImNvbmZpZ0NoZWNrQm94LmNsYXNzTGFiZWxJbmNsdWRlIHx8ICcnXCJcbiAgICAgICAgICBbY2hlY2tlZF09XCIobXVsdGlLZXlTZWxlY3RlZCgpPy5sZW5ndGggJiYgKG11bHRpS2V5U2VsZWN0ZWQoKT8ubGVuZ3RoIHx8MCkgPj0gKHN0b3JlKCkubGVuZ3RoIHx8IC0xKSkgfHwgZmFsc2VcIlxuICAgICAgICAgIFtzdGlsbE90aGVyT3B0aW9uc109XCIhIW11bHRpS2V5U2VsZWN0ZWQoKT8ubGVuZ3RoICYmIChtdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCB8fDApIDwgKHN0b3JlKCkubGVuZ3RoIHx8IC0xKVwiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGRpc2FibGUoKSB8fCBmYWxzZVwiXG4gICAgICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyKT0naGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoJGV2ZW50KSdcbiAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJTZWxlY3QoJGV2ZW50LmNoZWNrZWQpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IFtjbGFzc109XCIncmVsYXRpdmUgaC1mdWxsIHctZnVsbCAnICsoKCFpdGVtcygpIHx8ICFpdGVtcygpLmxlbmd0aCkgPyAnYmctWyNmZmZmZmZdJzogY29uZmlnVGVtcGxhdGVDaGVja2JveC5jbGFzc0xpc3RJbmNsdWRlIHx8ICcnKVwiPlxuICAgICAgQGlmIChpdGVtcygpICYmIGl0ZW1zKCkubGVuZ3RoKSB7XG4gICAgICAgIDxkaXYgI2VsZW1lbnRTY3JvbGxcbiAgICAgICAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFZpZXdQb3J0KCkgJiYgIWNvbmZpZygpPy5pZ25vcmVTaG93RGF0YVdoZW5Ob3RTZWFyY2ggPyBoZWlnaHRWaWV3UG9ydCgpKydweCc6JzEwMCUnXCJcbiAgICAgICAgICAob3V0U2Nyb2xsQm90dG9tKT1cImhhbmRsZXJTY3JvbGxCb3R0b20oKVwiPlxuICAgICAgICAgIDx2aXJ0dWFsLXNjcm9sbGVyICNzY3JvbGxcbiAgICAgICAgICAgIFtwYXJlbnRTY3JvbGxdPVwiZWxlbWVudFNjcm9sbFwiXG4gICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXMoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImgtZnVsbFwiPlxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBzY3JvbGwudmlld1BvcnRJdGVtczsgdHJhY2sgaXRlbSgpW2ZpZWxkS2V5KCldOyBsZXQgbGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImxhc3QgPyAoY29uZmlnVGVtcGxhdGVDaGVja2JveC5jbGFzc0luY2x1ZGVMYXN0Vmlld0l0ZW0gfHwgJycpIDogJydcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICNpdGVtUmVmXG4gICAgICAgICAgICAgICAgICBMaWJzVWlDb21wb25lbnRzTGlzdEhpZ2hsaWdodEtleVNlYXJjaERpcmVjdGl2ZVxuICAgICAgICAgICAgICAgICAgW2lzSGlnaGxpZ2h0XT1cImNvbmZpZygpPy5oaWdobGlnaHRUZXh0U2VhcmNoSW5SZXN1bHRcIlxuICAgICAgICAgICAgICAgICAgW2tleVNlYXJjaF09XCJrZXlTZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5jbGlja0V4YWN0bHldPVwiY2xpY2tFeGFjdGx5XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCInbGlicy11aS1saXN0LXRlbXBsYXRlLWNoZWNrYm94LWl0ZW0gZmxleCAnICsgKGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NJdGVtSW5jbHVkZSB8fCAnJylcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnctZnVsbF09XCIhY29uZmlnVGVtcGxhdGVDaGVja2JveC5pZ25vcmVJdGVtV2lkdGgxMDBcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktYmctbGlzdC1ob3Zlcl09XCIhY2xpY2tFeGFjdGx5KClcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktYmctbGlzdC1ob3Zlci1hY3RpdmVdPVwiIWNsaWNrRXhhY3RseSgpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy4hcGwtWzEycHhdXT1cInBhZGRpbmdMZWZ0SXRlbSgpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy4hcHktWzZweF1dPVwiY2xpY2tFeGFjdGx5KClcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLiFwci1bNHB4XV09XCJoYXNTY3JvbGwoKSAmJiBjb25maWdUZW1wbGF0ZUNoZWNrYm94LnJvd3NcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLiFwci1bMTJweF1dPVwiIWhhc1Njcm9sbCgpICYmIGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3gucm93c1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckNoYW5nZSgkZXZlbnQsaXRlbSgpKVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbSgpLmZpZWxkTGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZSBbbGFiZWxdPVwiaXRlbSgpLmZpZWxkTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F2YXRhckNvbmZpZ109XCJpdGVtKCkuYXZhdGFyQ29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5rSW1hZ2VdPVwiY29uZmlnVGVtcGxhdGVDaGVja2JveC5nZXRJbWFnZSA/ICgoJ2F2YXRhcicgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guZ2V0SW1hZ2U6aXRlbSgpKSB8IGFzeW5jKSA6IGl0ZW0oKVtjb25maWdUZW1wbGF0ZUNoZWNrYm94LmZpZWxkR2V0SW1hZ2UgfHwgJyddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5rSW1hZ2VFcnJvcl09XCJjb25maWdUZW1wbGF0ZUNoZWNrYm94LmdldEltYWdlRXJyb3IgPyAoKCdhdmF0YXJfZXJyb3InIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTpjb25maWdUZW1wbGF0ZUNoZWNrYm94LmdldEltYWdlRXJyb3I6aXRlbSgpKSB8IGFzeW5jKSA6IGl0ZW0oKVtjb25maWdUZW1wbGF0ZUNoZWNrYm94LmZpZWxkR2V0TGlua0ltYWdlRXJyb3IgfHwgJyddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0xhYmVsSW5jbHVkZV09XCJpdGVtKCkuY2xhc3NMYWJlbEluY2x1ZGUgfHwgY29uZmlnVGVtcGxhdGVDaGVja2JveC5jbGFzc0xhYmVsSW5jbHVkZSB8fCAnbGlicy11aS1mb250LWg1cidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3pJbmRleExhYmVsXT1cImNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guekluZGV4UG9wb3ZlciA/PyAxMjAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIml0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6bXVsdGlLZXlTZWxlY3RlZCgpOm11bHRpS2V5U2VsZWN0ZWQoKT8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtrZXldPVwiaXRlbSgpW2ZpZWxkS2V5KCldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbWdUeXBlSWNvbl09XCJjb25maWdUZW1wbGF0ZUNoZWNrYm94Lmhhc0F2YXRhckdyb3VwU29jaWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY29uZmlnVGVtcGxhdGVDaGVja2JveC5jbGFzc0luY2x1ZGUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzSW1hZ2VJbmNsdWRlXT1cImNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NJbmNsdWRlSW1hZ2UgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2J1bGxldF09XCJpdGVtKCkuYnVsbGV0Py4oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgZGlzYWJsZSgpIHx8IChpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOmtleXNEaXNhYmxlSXRlbSgpOmtleXNEaXNhYmxlSXRlbSgpPy5sZW5ndGgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwb3BvdmVyXT1cIml0ZW0oKS5kYXRhUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xpY2tFeGFjdGx5XT1cImNsaWNrRXhhY3RseSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlcik9J2hhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudCknXG4gICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2UoJ2NoZWNrYm94JyxpdGVtKCkpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3g/LnJvd3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWxpc3QtdGVtcGxhdGVzX3Jvd3MgY2xhc3M9XCJ7eyAhY29uZmlnVGVtcGxhdGVDaGVja2JveC5pZ25vcmVJdGVtV2lkdGgxMDAgPyAndy1mdWxsJyA6ICcnIH19IHt7IGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NSb3dzV3JhcHBlciB8fCBjb25maWdUZW1wbGF0ZUNoZWNrYm94LmNsYXNzUm93cyA/PyAnJyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRLZXldPVwiZmllbGRLZXkoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBba2V5U2VsZWN0ZWRdPVwiKGl0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6bXVsdGlLZXlTZWxlY3RlZCgpOm11bHRpS2V5U2VsZWN0ZWQoKT8ubGVuZ3RoKSA/IGl0ZW0oKVtmaWVsZEtleSgpXSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnVGVtcGxhdGVdPVwiY29uZmlnVGVtcGxhdGVDaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob3V0RXZlbnQpPVwiaGFuZGxlckNoYW5nZSgnY2hlY2tib3gnLCRldmVudC5pdGVtKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3ZpcnR1YWwtc2Nyb2xsZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmICgoIWl0ZW1zKCkgfHwgIWl0ZW1zKCkubGVuZ3RoKSAmJiAoIWNvbmZpZygpPy5pZ25vcmVTaG93RGF0YVdoZW5Ob3RTZWFyY2ggfHwga2V5U2VhcmNoKCkpKSB7XG4gICAgICAgIDxkaXYgW2NsYXNzXT1cIidsaWJzLXVpLWZvbnQtaDVyIHRleHQtWyM5Y2EyYWRdICcrIChjb25maWcoKT8udGV4dE5vRGF0YUNsYXNzSW5jbHVkZSA/PyAncHktWzRweF0gcHgtWzEycHhdJylcIj5cbiAgICAgICAgICBAaWYgKGNvbmZpZygpPy5oYXNJY29uTm9EYXRhICYmICFsb2FkaW5nKCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi1bMTZweF1cIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdDb21wb25lbnRPdXRsZXQ9XCIoa2V5U2VhcmNoKCkgID8gJ25vLXJlc3VsdCcgOiAnbm8tZGF0YScpIHwgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoIWtleVNlYXJjaCgpICYmICFsb2FkaW5nKCkpIHtcbiAgICAgICAgICAgIDxzcGFuPnt7IChjb25maWcoKT8udGV4dE5vRGF0YSA/PyAnaTE4bl9oYXZlX25vX3NlbGVjdGlvbicpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHRlbXBsYXRlUmVmU2VhcmNoTm9EYXRhKCkgJiYga2V5U2VhcmNoKCkgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlUmVmU2VhcmNoTm9EYXRhKCkgfHwgbnVsbDtjb250ZXh0OntrZXlTZWFyY2g6a2V5U2VhcmNoKCl9XCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICghdGVtcGxhdGVSZWZTZWFyY2hOb0RhdGEoKSAmJiBrZXlTZWFyY2goKSAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgICA8c3Bhbj57eyAoY29uZmlnKCk/LnRleHRTZWFyY2hOb0RhdGEgPz8gJ2kxOG5fbm9fcmVzdWx0JykgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgICAgICA8c3Bhbj4mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgfVxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChsb2FkaW5nKCkpIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1zcGlubmVyIFtzaXplXT1cIidtZWRpdW0nXCIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG59XG4iXX0=
288
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2xpc3Qvc3JjL3RlbXBsYXRlcy9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0csT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSwrQ0FBK0Ms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QUFDO0lBQzFELENBQUM7SUFFUyxhQUFhO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUM3QixDQUFDO3dHQTVTVSxxQ0FBcUM7NEZBQXJDLHFDQUFxQyw2SEN2Q2xELDhwUUEwSEEsMExEL0ZJLHFCQUFxQix1dEJBQUUsaUJBQWlCLCtPQUFFLFNBQVMsNkNBQUUsZUFBZSw0RkFBRSxnQkFBZ0Isb0pBQ3RGLHNDQUFzQyxpaEJBQ3RDLHVDQUF1QyxnbkJBQ3ZDLGdDQUFnQyxpR0FDaEMsc0NBQXNDLHlRQUN0Qyw0QkFBNEIsZ0VBQzVCLCtCQUErQix3RUFDL0IsK0NBQStDLHNKQUMvQyxpQ0FBaUMsK01BQ2pDLHFDQUFxQzs7NEZBRzVCLHFDQUFxQztrQkFwQmpELFNBQVM7K0JBRUUsNENBQTRDLGNBRzFDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGdCQUFnQjt3QkFDdEYsc0NBQXNDO3dCQUN0Qyx1Q0FBdUM7d0JBQ3ZDLGdDQUFnQzt3QkFDaEMsc0NBQXNDO3dCQUN0Qyw0QkFBNEI7d0JBQzVCLCtCQUErQjt3QkFDL0IsK0NBQStDO3dCQUMvQyxpQ0FBaUM7d0JBQ2pDLHFDQUFxQztxQkFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ29tcG9uZW50T3V0bGV0LCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCwgc2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmlydHVhbFNjcm9sbGVyTW9kdWxlIH0gZnJvbSAnQGloYXJiZWNrL25neC12aXJ0dWFsLXNjcm9sbGVyJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQ2hlY2tib3hTaW5nbGVDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc2Nyb2xsLW92ZXJsYXknO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1NwaW5uZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNwaW5uZXInO1xuaW1wb3J0IHsgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSB9IGZyb20gJ0BsaWJzLXVpL2ljb25zJztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgY29udmVydFNpZ25hbFRvT2JqZWN0LCBkZWxldGVVbmljb2RlLCBlc2NhcGVIdG1sLCBpc0VtcHR5LCBpc05pbCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpc3RIaWdobGlnaHRLZXlTZWFyY2hEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9oaWdobGlnaHQta2V5LXNlYXJjaC9oaWdobGlnaHQta2V5LXNlYXJjaC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSUxpc3REYXRhRW1pdEtleSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGF0YS1lbWl0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvY2hlY2stc2VsZWN0ZWQtYnkta2V5LnBpcGUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpc3RSb3dzQ29tcG9uZW50IH0gZnJvbSAnLi4vcm93cy9yb3dzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzTGlzdFRlbXBsYXRlc0NvbXBvbmVudEFic3RyYWN0IH0gZnJvbSAnLi4vdGVtcGxhdGVzLmNvbXBvbmVudC5hYnN0cmFjdCc7XG5pbXBvcnQgeyBJTGlzdENvbmZpZ0l0ZW1DaGVja2JveCB9IGZyb20gJy4vLi4vLi4vaW50ZXJmYWNlcy9jb25maWctaXRlbS5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtbGlzdC10ZW1wbGF0ZXNfY2hlY2tib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGVja2JveC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFZpcnR1YWxTY3JvbGxlck1vZHVsZSwgTmdDb21wb25lbnRPdXRsZXQsIEFzeW5jUGlwZSwgVHJhbnNsYXRlTW9kdWxlLCBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNDaGVja2JveFNpbmdsZUNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZSxcbiAgICBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlLFxuICAgIExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RIaWdobGlnaHRLZXlTZWFyY2hEaXJlY3RpdmUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RSb3dzQ29tcG9uZW50LFxuICAgIExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzTGlzdENoZWNrYm94Q29tcG9uZW50IGV4dGVuZHMgTGlic1VpQ29tcG9uZW50c0xpc3RUZW1wbGF0ZXNDb21wb25lbnRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJvdGVjdGVkIGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3ggPSBzaWduYWw8SUxpc3RDb25maWdJdGVtQ2hlY2tib3ggfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKGlzRW1wdHkodGhpcy5jb25maWcoKT8uY29uZmlnVGVtcGxhdGVDaGVja2JveD8uKCkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94LnNldCh0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZUNoZWNrYm94Py4oKSk7XG4gICAgdGhpcy5maWVsZEtleS5zZXQodGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/LmZpZWxkS2V5ID8/IHRoaXMuZmllbGRLZXlEZWZhdWx0KCkpO1xuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZSgpO1xuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2VsZWN0KGlzU2VsZWN0QWxsOiBib29sZWFuKSB7XG4gICAgaWYgKGlzU2VsZWN0QWxsICYmIHRoaXMucmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5RHJvcGRvd24oKSkge1xuICAgICAgdGhpcy5tdWx0aUtleVNlbGVjdGVkLnNldChbXSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5tdWx0aUtleVNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC5zZXQoW10pO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2FkaW5nKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldElkc0J5U2VydmljZSgpO1xuXG4gICAgdGhpcy5wcm9jZXNzSGFuZGxlclNlbGVjdERhdGEoaXNTZWxlY3RBbGwsIHJlc3VsdC5kYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0hhbmRsZXJTZWxlY3REYXRhKGlzU2VsZWN0QWxsOiBib29sZWFuLCBpZHM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBjb25zdCBrZXlzRGlzYWJsZSA9IHRoaXMua2V5c0Rpc2FibGVJdGVtKCkgfHwgW107XG4gICAgY29uc3Qga2V5cyA9IG5ldyBTZXQodGhpcy5tdWx0aUtleVNlbGVjdGVkKCkpO1xuXG4gICAgdGhpcy5tdWx0aUtleVNlbGVjdGVkLnNldChbXSk7XG4gICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgIGlmIChpc1NlbGVjdEFsbCkge1xuICAgICAgaWYgKGlkcy5sZW5ndGgpIHtcbiAgICAgICAgaWRzLmZvckVhY2goaWQgPT4gIWtleXNEaXNhYmxlLnNvbWUoa2V5ID0+IGtleSA9PT0gaWQpICYmIGtleXMuYWRkKGlkKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaWRzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLml0ZW1zKCkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBpdGVtKClbdGhpcy5maWVsZEtleSgpXTtcblxuICAgICAgICAgIGlmICgha2V5c0Rpc2FibGUuc29tZShrZXlEaXNhYmxlID0+IGtleURpc2FibGUgPT09IGtleSkpIHtcbiAgICAgICAgICAgIGtleXMuYWRkKGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC51cGRhdGUoaXRlbXMgPT4gWy4uLihpdGVtcyB8fCBbXSksIC4uLmtleXNdKTtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdE11bHRpS2V5KHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpIHx8IFtdKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBrZXlVblNlbGVjdGVkID0gbmV3IFNldDx1bmtub3duPigpO1xuXG4gICAgaWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgaWYgKCFrZXlzRGlzYWJsZS5zb21lKGtleSA9PiBrZXkgPT09IGlkKSkge1xuICAgICAgICBrZXlzLmRlbGV0ZShpZCk7XG4gICAgICAgIGtleVVuU2VsZWN0ZWQuYWRkKGlkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWlkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaXRlbXMoKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBpdGVtKClbdGhpcy5maWVsZEtleSgpXTtcblxuICAgICAgICBpZiAoIWtleXNEaXNhYmxlLnNvbWUoa2V5ID0+IGtleSA9PT0ga2V5KSkge1xuICAgICAgICAgIGtleXMuZGVsZXRlKGtleSk7XG4gICAgICAgICAga2V5VW5TZWxlY3RlZC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC51cGRhdGUoaXRlbXMgPT4gWy4uLihpdGVtcyB8fCBbXSksIC4uLmtleXNdKTtcbiAgICB0aGlzLm91dFVuU2VsZWN0TXVsdGlLZXkuZW1pdChBcnJheS5mcm9tKGtleVVuU2VsZWN0ZWQpKTtcbiAgICB0aGlzLm91dFNlbGVjdE11bHRpS2V5LmVtaXQoeyBrZXlzOiB0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKSB8fCBbXSwgbWFwS2V5czogW10sIGlzQ2xpY2tNYW51YWw6IHRydWUgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldElkc0J5U2VydmljZSgpIHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoQ29uZmlnKCkgfHwgIXRoaXMuaXNTZWFyY2hPbmxpbmUoKSkge1xuICAgICAgcmV0dXJuIHsgY29kZTogMjAwLCBkYXRhOiB0aGlzLml0ZW1zKCkubWFwKGl0ZW0gPT4gaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0pIH07XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnVGVtcGxhdGVDaGVja2JveCgpPy5odHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdD8uKCkpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogW10gfTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG4gICAgICBjb25zdCBodHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdCA9IHRoaXMuY29uZmlnVGVtcGxhdGVDaGVja2JveCgpPy5odHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdD8uKCk7XG5cbiAgICAgIGlmICghaHR0cFJlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3QpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogW10gfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYXJndW1lbnRzVmFsdWUsIGd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlIH0gPSBodHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdDtcblxuICAgICAgdGhpcy5odHRwUmVxdWVzdFNlcnZpY2UudXBkYXRlQXJndW1lbnRzKGFyZ3VtZW50c1ZhbHVlLCB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS5mYWtlUmVzcG9uc2VQYWdpbmdBcGkoKSwge30sIHRoaXMua2V5U2VhcmNoKCksIHRoaXMuaXNTZWFyY2hPbmxpbmUoKSwgZmFsc2UsIGd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwUmVxdWVzdFNlcnZpY2UuY2FsbEFwaShodHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdCk7XG5cbiAgICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQuZGF0YSB8fCAhcmVzdWx0LmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7IGRhdGE6IFtdIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcblxuICAgICAgcmV0dXJuIHsgZGF0YTogW10gfTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNjcm9sbEJvdHRvbSgpIHtcbiAgICBpZiAodGhpcy5sb2FkZWRMYXN0SXRlbSgpKSB7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2FkaW5nKCkgfHwgdGhpcy5sb2FkZWRMYXN0SXRlbSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZShmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc1NlYXJjaCgpIHtcbiAgICBpZiAoIXRoaXMuaXNTZWFyY2hPbmxpbmUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZSh0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzS2V5Q2hhbmdlVW5TZWxlY3QoaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKGlzTmlsKGl0ZW1bdGhpcy5maWVsZEtleSgpXSkgfHwgaXRlbVt0aGlzLmZpZWxkS2V5KCldID09PSAnJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrQW5kRW1pdE11bHRpS2V5U2VsZWN0ZWQoaXRlbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZShldmVudDogYW55LCBpdGVtOiBhbnksIGlnbm9yZURpc2FibGUgPSBmYWxzZSwgaXNDbGlja01hbnVhbCA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/Lmlnbm9yZUNsaWNrSXRlbVVuQ2hlY2tlZCkge1xuICAgICAgY29uc3Qga2V5ID0gaXRlbVt0aGlzLmZpZWxkS2V5KCldO1xuXG4gICAgICBpZiAodGhpcy5tdWx0aUtleVNlbGVjdGVkKCk/LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMubXVsdGlLZXlTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLm11bHRpS2V5U2VsZWN0ZWQuc2V0KFtdKTtcbiAgICB9XG4gICAgaWYgKCFpZ25vcmVEaXNhYmxlICYmICh0aGlzLmRpc2FibGUoKSB8fCB0aGlzLmtleXNEaXNhYmxlSXRlbSgpPy5zb21lKGtleSA9PiBrZXkgPT09IGl0ZW1bdGhpcy5maWVsZEtleSgpXSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5jbGlja0V4YWN0bHkoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmNoZWNrQW5kRW1pdE11bHRpS2V5U2VsZWN0ZWQoaXRlbSwgaXNDbGlja01hbnVhbCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jaGVja0FuZEVtaXRNdWx0aUtleVNlbGVjdGVkKGl0ZW0sIGlzQ2xpY2tNYW51YWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FuZEVtaXRNdWx0aUtleVNlbGVjdGVkKGl0ZW06IGFueSwgaXNDbGlja01hbnVhbCA9IHRydWUpIHtcbiAgICBjb25zdCBrZXkgPSBpdGVtW3RoaXMuZmllbGRLZXkoKV07XG4gICAgY29uc3QgaW5kZXhPZktleSA9IHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5pbmRleE9mKGtleSkgPz8gLTE7XG5cbiAgICBpZiAoaW5kZXhPZktleSA8IDApIHtcbiAgICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC51cGRhdGUoaXRlbXMgPT4gWy4uLihpdGVtcyB8fCBbXSksIGtleV0pO1xuICAgICAgdGhpcy5lbWl0U2VsZWN0TXVsdGlLZXkodGhpcy5tdWx0aUtleVNlbGVjdGVkKCkgfHwgW10sIGlzQ2xpY2tNYW51YWwpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5zcGxpY2UoaW5kZXhPZktleSwgMSk7XG4gICAgdGhpcy5vdXRVblNlbGVjdE11bHRpS2V5LmVtaXQoW2tleV0pO1xuICAgIHRoaXMuZW1pdFNlbGVjdE11bHRpS2V5KHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpIHx8IFtdLCBpc0NsaWNrTWFudWFsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW1pdFNlbGVjdE11bHRpS2V5KG11bHRpS2V5U2VsZWN0ZWQ6IEFycmF5PHVua25vd24+LCBpc0NsaWNrTWFudWFsID0gdHJ1ZSkge1xuICAgIGNvbnN0IG1hcEtleXMgPSBuZXcgQXJyYXk8SUxpc3REYXRhRW1pdEtleT4oKTtcblxuICAgIGlmICghbXVsdGlLZXlTZWxlY3RlZCB8fCAhbXVsdGlLZXlTZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLm91dFNlbGVjdE11bHRpS2V5LmVtaXQoeyBrZXlzOiBbXSwgbWFwS2V5cywgaXNDbGlja01hbnVhbCB9KTtcbiAgICB9XG5cbiAgICBtdWx0aUtleVNlbGVjdGVkLmZvckVhY2goKGtleTogdW5rbm93bikgPT4ge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuc3RvcmUoKS5maW5kKGl0ZW0gPT4gaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGtleSk7XG5cbiAgICAgIG1hcEtleXMucHVzaCh7IGtleSwgaXRlbTogY29udmVydFNpZ25hbFRvT2JqZWN0KGl0ZW0pLCBpc0NsaWNrTWFudWFsIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vdXRTZWxlY3RNdWx0aUtleS5lbWl0KHsga2V5czogdGhpcy5tdWx0aUtleVNlbGVjdGVkKCkgfHwgW10sIG1hcEtleXMsIGlzQ2xpY2tNYW51YWwgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc0RhdGEocmVwbGFjZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQnlLZXlTZWFyY2g6IEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+ID0gW107XG4gICAgY29uc3Qga2V5c0hpZGRlbiA9IHRoaXMua2V5c0hpZGRlbkl0ZW0oKSB8fCBbXTtcbiAgICBjb25zdCBpdGVtc0FkZE5ldzogQXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4gPSBbXTtcblxuICAgIGlmIChyZXBsYWNlKSB7XG4gICAgICB0aGlzLml0ZW1zLnNldChbXSk7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yZSgpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1UeXBlQWRkTmV3ID0gaXRlbSgpLmlzQWRkTmV3O1xuXG4gICAgICBpdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgZGVsZXRlIGN1cnJlbnQuaXNBZGROZXc7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KVxuICAgICAgY29uc3QgZGF0YVN0b3JlOiBXcml0YWJsZVNpZ25hbDxhbnk+ID0gY2xvbmVEZWVwKGl0ZW0pO1xuXG4gICAgICBkYXRhU3RvcmUudXBkYXRlKGN1cnJlbnRTdG9yZSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLmN1cnJlbnRTdG9yZSwgcmVmOiBpdGVtKCkgfTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/LmdldFBvcG92ZXIpIHtcbiAgICAgICAgZGF0YVN0b3JlLnVwZGF0ZShjdXJyZW50U3RvcmUgPT4ge1xuICAgICAgICAgIHJldHVybiB7IC4uLmN1cnJlbnRTdG9yZSwgZGF0YVRvb2x0aXA6IHRoaXMuY29uZmlnVGVtcGxhdGVDaGVja2JveCgpPy5nZXRQb3BvdmVyPy4oZGF0YVN0b3JlKCkpIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qga2V5ID0ga2V5c0hpZGRlbi5maW5kKGtleSA9PiBkYXRhU3RvcmUoKVt0aGlzLmZpZWxkS2V5KCldID09PSBrZXkpO1xuXG4gICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGRlbGV0ZVVuaWNvZGUodGhpcy5idWlsZFZhbHVlQnlDb25maWcoZGF0YVN0b3JlLCB0aGlzLmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3goKSkpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRleHRFc2NhcGUgPSBlc2NhcGVIdG1sKHRleHQpO1xuICAgICAgICBjb25zdCBrZXlTZWFyY2ggPSBkZWxldGVVbmljb2RlKGVzY2FwZUh0bWwodGhpcy5rZXlTZWFyY2goKS50b0xvY2FsZUxvd2VyQ2FzZSgpKSk7XG5cbiAgICAgICAgaWYgKCgodGhpcy5pc1NlYXJjaE9ubGluZSgpICYmIHRoaXMuY29uZmlnKCk/Lmh0dHBSZXF1ZXN0RGF0YT8uKCk/LnNlcnZpY2VOYW1lICYmICF0aGlzLmNvbmZpZygpPy5odHRwUmVxdWVzdERhdGE/LigpPy5zZXJ2aWNlT3RoZXIpIHx8XG4gICAgICAgICAgKHRleHQgJiYgKHRleHQuaW5jbHVkZXMoa2V5U2VhcmNoKSB8fCB0ZXh0RXNjYXBlLmluY2x1ZGVzKGtleVNlYXJjaCkpKSkgJiYgKHJlcGxhY2UgfHwgKCFyZXBsYWNlICYmICF0aGlzLml0ZW1zKCkuZmluZChkYXRhSXRlbSA9PiBkYXRhSXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGRhdGFTdG9yZSgpW3RoaXMuZmllbGRLZXkoKV0pKSkgJiYgIWl0ZW1CeUtleVNlYXJjaC5maW5kKGRhdGFJdGVtID0+IGRhdGFJdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0gZGF0YVN0b3JlKClbdGhpcy5maWVsZEtleSgpXSkpIHtcblxuICAgICAgICAgIGRhdGFTdG9yZS51cGRhdGUoY3VycmVudFN0b3JlID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmN1cnJlbnRTdG9yZSxcbiAgICAgICAgICAgICAgY2xhc3NMYWJlbEluY2x1ZGU6IHRoaXMuY29uZmlnVGVtcGxhdGVDaGVja2JveCgpPy5nZXRDbGFzc0l0ZW0/LihkYXRhU3RvcmUoKSksXG4gICAgICAgICAgICAgIGF2YXRhckNvbmZpZzogdGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/LmdldEF2YXRhckNvbmZpZz8uKGRhdGFTdG9yZSgpKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChpdGVtVHlwZUFkZE5ldykge1xuICAgICAgICAgICAgaXRlbXNBZGROZXcudW5zaGlmdChkYXRhU3RvcmUpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGl0ZW1CeUtleVNlYXJjaC5wdXNoKGRhdGFTdG9yZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpbmRleEl0ZW1SZW1vdmUgPSB0aGlzLml0ZW1zKCkuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGtleSk7XG5cbiAgICAgIGlmIChpbmRleEl0ZW1SZW1vdmUgPiAtMSkge1xuICAgICAgICB0aGlzLml0ZW1zLnVwZGF0ZShpdGVtcyA9PiB7XG4gICAgICAgICAgaXRlbXMuc3BsaWNlKGluZGV4SXRlbVJlbW92ZSwgMSk7XG5cbiAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNoZWNrTG9hZEl0ZW0gPSAocHJlU3RhdGVIYXNTY3JvbGw6IGJvb2xlYW4sIGN1cnJlbnRIYXNTY3JvbGw6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmICh0aGlzLmtleXNIaWRkZW5JdGVtKCk/Lmxlbmd0aCAmJiBwcmVTdGF0ZUhhc1Njcm9sbCAmJiAhY3VycmVudEhhc1Njcm9sbCAmJiAodGhpcy5pc1NlYXJjaE9ubGluZSgpKSkge1xuICAgICAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UoZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAocmVwbGFjZSkge1xuICAgICAgdGhpcy5pdGVtcy5zZXQoaXRlbUJ5S2V5U2VhcmNoKTtcbiAgICAgIHRoaXMuY29uZmlnKCk/LnNvcnQ/Lih0aGlzLml0ZW1zKCkpO1xuICAgICAgdGhpcy5hdXRvU2VsZWN0Rmlyc3RJdGVtKHRoaXMuaXRlbXMoKSk7XG4gICAgICB0aGlzLnNldEhlaWdodFZpZXdQb3J0KCk7XG4gICAgICB0aGlzLmNoZWNrVmlld1BvcnRTY3JvbGwoY2hlY2tMb2FkSXRlbSk7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgICAgIHRoaXMub3V0TG9hZEl0ZW1zQ29tcGxldGUuZW1pdCh7IGl0ZW1zOiB0aGlzLml0ZW1zKCkgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pdGVtcy51cGRhdGUoaXRlbXMgPT4gWy4uLml0ZW1zQWRkTmV3LCAuLi4oaXRlbXMgfHwgW10pLCAuLi5pdGVtQnlLZXlTZWFyY2hdKVxuICAgIHRoaXMuY29uZmlnKCk/LnNvcnQ/Lih0aGlzLml0ZW1zKCkpO1xuICAgIHRoaXMuc2V0SGVpZ2h0Vmlld1BvcnQoKTtcbiAgICB0aGlzLmNoZWNrVmlld1BvcnRTY3JvbGwoY2hlY2tMb2FkSXRlbSk7XG4gICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgIHRoaXMub3V0TG9hZEl0ZW1zQ29tcGxldGUuZW1pdCh7IGl0ZW1zOiB0aGlzLml0ZW1zKCkgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXV0b1NlbGVjdEZpcnN0SXRlbShpdGVtczogQXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4pIHtcbiAgICBpZiAodGhpcy5hdXRvU2VsZWN0ZWRGaXJzdEl0ZW1DYWxsT3V0c2lkZUJlZm9yZSgpIHx8IHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5sZW5ndGggfHwgIXRoaXMuY29uZmlnKCk/LmF1dG9TZWxlY3RGaXJzdEl0ZW0gfHwgIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVyQ2hhbmdlKCdjaGVja2JveCcsIGl0ZW1zWzBdKCksIHRydWUsIGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRMZW5ndGhJdGVtKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMoKS5sZW5ndGg7XG4gIH1cbn1cbiIsIkBpZiAoY29uZmlnVGVtcGxhdGVDaGVja2JveCgpOyBhcyBjb25maWdUZW1wbGF0ZUNoZWNrYm94KSB7XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGxcIj5cbiAgICBAaWYgKGl0ZW1zKCkubGVuZ3RoICYmIGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY29uZmlnQnV0dG9uU2VsZWN0QW5kVW5kU2VsZWN0SXRlbT8uKCk7IGFzIGNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0pIHtcbiAgICAgIDxkaXYgW2NsYXNzXT1cIidmbGV4IGl0ZW1zLWNlbnRlciBiZy1bI2ZmZmZmZl0gJysoY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5jbGFzc0luY2x1ZGUgPz8gJ2xpYnMtdWktYm9yZGVyLWJvdHRvbS1nZW5lcmFsJylcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCJjb25maWdCdXR0b25TZWxlY3RJdGVtLmJ1dHRvbkNoZWNrQWxsPy50eXBlID8/ICdidXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgICAgW2xhYmVsXT1cImNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0uYnV0dG9uQ2hlY2tBbGw/LmxhYmVsID8/ICdpMThuX3NlbGVjdF9hbGxfc2VhcmNoZWRfcmVzdWx0cydcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25DaGVja0FsbD8uY2xhc3NJbmNsdWRlIHx8ICdwci1bOHB4XSdcIlxuICAgICAgICAgIFtjbGFzc0xhYmVsXT1cImNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0uYnV0dG9uQ2hlY2tBbGw/LmNsYXNzTGFiZWwgfHwgJ2xpYnMtdWktZm9udC1oNnInXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgZGlzYWJsZSgpIHx8IGZhbHNlXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclNlbGVjdCh0cnVlKVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LVsjZTZlN2VhXVwiPnw8L2Rpdj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCJjb25maWdCdXR0b25TZWxlY3RJdGVtLmJ1dHRvblVuY2hlY2tBbGw/LnR5cGUgPz8gJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25VbmNoZWNrQWxsPy5sYWJlbCA/PyAnaTE4bl91bnNlbGVjdF9hbGxfc2VhcmNoZWRfcmVzdWx0cydcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25VbmNoZWNrQWxsPy5jbGFzc0luY2x1ZGUgfHwgJ3BsLVs4cHhdJ1wiXG4gICAgICAgICAgW2NsYXNzTGFiZWxdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25VbmNoZWNrQWxsPy5jbGFzc0xhYmVsIHx8ICdsaWJzLXVpLWZvbnQtaDZyJ1wiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGRpc2FibGUoKSB8fCBmYWxzZVwiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJTZWxlY3QoZmFsc2UpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGl0ZW1zKCkubGVuZ3RoICYmIGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY29uZmlnQ2hlY2tib3hDaGVja0FsbD8uKCk7IGFzIGNvbmZpZ0NoZWNrQm94KSB7XG4gICAgICA8ZGl2IFtjbGFzc109XCInZmxleCBsaWJzLXVpLWJvcmRlci1ib3R0b20tZ2VuZXJhbCBiZy1bI2ZmZmZmZl0gcGwtWzEycHhdICcrKGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NJbmNsdWRlSGFzQ29uZmlnQ2hlY2tCb3hBbGwgPz8gJ3B5LVs2cHhdIGxpYnMtdWktYm9yZGVyLWJvdHRvbS1nZW5lcmFsJylcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUgW2xhYmVsXT1cImNvbmZpZ0NoZWNrQm94LmxhYmVsID8/ICdpMThuX2FsbCdcIlxuICAgICAgICAgIFtjbGFzc0xhYmVsSW5jbHVkZV09XCJjb25maWdDaGVja0JveC5jbGFzc0xhYmVsSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgICAgW2NoZWNrZWRdPVwiKG11bHRpS2V5U2VsZWN0ZWQoKT8ubGVuZ3RoICYmIChtdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCB8fDApID49IChzdG9yZSgpLmxlbmd0aCB8fCAtMSkpIHx8IGZhbHNlXCJcbiAgICAgICAgICBbc3RpbGxPdGhlck9wdGlvbnNdPVwiISFtdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCAmJiAobXVsdGlLZXlTZWxlY3RlZCgpPy5sZW5ndGggfHwwKSA8IChzdG9yZSgpLmxlbmd0aCB8fCAtMSlcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBkaXNhYmxlKCkgfHwgZmFsc2VcIlxuICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlcik9J2hhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudCknXG4gICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyU2VsZWN0KCRldmVudC5jaGVja2VkKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBbY2xhc3NdPVwiJ3JlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgJyArKCghaXRlbXMoKSB8fCAhaXRlbXMoKS5sZW5ndGgpID8gJ2JnLVsjZmZmZmZmXSc6IGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NMaXN0SW5jbHVkZSB8fCAnJylcIj5cbiAgICAgIEBpZiAoaXRlbXMoKSAmJiBpdGVtcygpLmxlbmd0aCkge1xuICAgICAgICA8ZGl2ICNlbGVtZW50U2Nyb2xsXG4gICAgICAgICAgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVcbiAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRWaWV3UG9ydCgpICYmICFjb25maWcoKT8uaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoID8gaGVpZ2h0Vmlld1BvcnQoKSsncHgnOicxMDAlJ1wiXG4gICAgICAgICAgKG91dFNjcm9sbEJvdHRvbSk9XCJoYW5kbGVyU2Nyb2xsQm90dG9tKClcIj5cbiAgICAgICAgICA8dmlydHVhbC1zY3JvbGxlciAjc2Nyb2xsXG4gICAgICAgICAgICBbcGFyZW50U2Nyb2xsXT1cImVsZW1lbnRTY3JvbGxcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cIml0ZW1zKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJoLWZ1bGxcIj5cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc2Nyb2xsLnZpZXdQb3J0SXRlbXM7IHRyYWNrIGl0ZW0oKVtmaWVsZEtleSgpXTsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJsYXN0ID8gKGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NJbmNsdWRlTGFzdFZpZXdJdGVtIHx8ICcnKSA6ICcnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAjaXRlbVJlZlxuICAgICAgICAgICAgICAgICAgTGlic1VpQ29tcG9uZW50c0xpc3RIaWdobGlnaHRLZXlTZWFyY2hEaXJlY3RpdmVcbiAgICAgICAgICAgICAgICAgIFtpc0hpZ2hsaWdodF09XCJjb25maWcoKT8uaGlnaGxpZ2h0VGV4dFNlYXJjaEluUmVzdWx0XCJcbiAgICAgICAgICAgICAgICAgIFtrZXlTZWFyY2hdPVwia2V5U2VhcmNoKClcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuY2xpY2tFeGFjdGx5XT1cImNsaWNrRXhhY3RseVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiJ2xpYnMtdWktbGlzdC10ZW1wbGF0ZS1jaGVja2JveC1pdGVtIGZsZXggJyArIChjb25maWdUZW1wbGF0ZUNoZWNrYm94LmNsYXNzSXRlbUluY2x1ZGUgfHwgJycpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy53LWZ1bGxdPVwiIWNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guaWdub3JlSXRlbVdpZHRoMTAwXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWJnLWxpc3QtaG92ZXJdPVwiIWNsaWNrRXhhY3RseSgpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWJnLWxpc3QtaG92ZXItYWN0aXZlXT1cIiFjbGlja0V4YWN0bHkoKVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuIXBsLVsxMnB4XV09XCJwYWRkaW5nTGVmdEl0ZW0oKVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuIXB5LVs2cHhdXT1cImNsaWNrRXhhY3RseSgpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy4hcHItWzRweF1dPVwiaGFzU2Nyb2xsKCkgJiYgY29uZmlnVGVtcGxhdGVDaGVja2JveC5yb3dzXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy4hcHItWzEycHhdXT1cIiFoYXNTY3JvbGwoKSAmJiBjb25maWdUZW1wbGF0ZUNoZWNrYm94LnJvd3NcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDaGFuZ2UoJGV2ZW50LGl0ZW0oKSlcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0oKS5maWVsZExhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUgW2xhYmVsXT1cIml0ZW0oKS5maWVsZExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdmF0YXJDb25maWddPVwiaXRlbSgpLmF2YXRhckNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGlua0ltYWdlXT1cImNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guZ2V0SW1hZ2UgPyAoKCdhdmF0YXInIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTpjb25maWdUZW1wbGF0ZUNoZWNrYm94LmdldEltYWdlOml0ZW0oKSkgfCBhc3luYykgOiBpdGVtKClbY29uZmlnVGVtcGxhdGVDaGVja2JveC5maWVsZEdldEltYWdlIHx8ICcnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGlua0ltYWdlRXJyb3JdPVwiY29uZmlnVGVtcGxhdGVDaGVja2JveC5nZXRJbWFnZUVycm9yID8gKCgnYXZhdGFyX2Vycm9yJyB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6Y29uZmlnVGVtcGxhdGVDaGVja2JveC5nZXRJbWFnZUVycm9yOml0ZW0oKSkgfCBhc3luYykgOiBpdGVtKClbY29uZmlnVGVtcGxhdGVDaGVja2JveC5maWVsZEdldExpbmtJbWFnZUVycm9yIHx8ICcnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NMYWJlbEluY2x1ZGVdPVwiaXRlbSgpLmNsYXNzTGFiZWxJbmNsdWRlIHx8IGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NMYWJlbEluY2x1ZGUgfHwgJ2xpYnMtdWktZm9udC1oNXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhMYWJlbF09XCJjb25maWdUZW1wbGF0ZUNoZWNrYm94LnpJbmRleFBvcG92ZXIgPz8gMTIwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOm11bHRpS2V5U2VsZWN0ZWQoKTptdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBba2V5XT1cIml0ZW0oKVtmaWVsZEtleSgpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW1nVHlwZUljb25dPVwiY29uZmlnVGVtcGxhdGVDaGVja2JveC5oYXNBdmF0YXJHcm91cFNvY2lhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NJbmNsdWRlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0ltYWdlSW5jbHVkZV09XCJjb25maWdUZW1wbGF0ZUNoZWNrYm94LmNsYXNzSW5jbHVkZUltYWdlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtidWxsZXRdPVwiaXRlbSgpLmJ1bGxldD8uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGRpc2FibGUoKSB8fCAoaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZTprZXlzRGlzYWJsZUl0ZW0oKTprZXlzRGlzYWJsZUl0ZW0oKT8ubGVuZ3RoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJpdGVtKCkuZGF0YVBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsaWNrRXhhY3RseV09XCJjbGlja0V4YWN0bHkoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIpPSdoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyQ2hhbmdlKCdjaGVja2JveCcsaXRlbSgpKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChjb25maWdUZW1wbGF0ZUNoZWNrYm94Py5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1saXN0LXRlbXBsYXRlc19yb3dzIGNsYXNzPVwie3sgIWNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guaWdub3JlSXRlbVdpZHRoMTAwID8gJ3ctZnVsbCcgOiAnJyB9fSB7eyBjb25maWdUZW1wbGF0ZUNoZWNrYm94LmNsYXNzUm93c1dyYXBwZXIgfHwgY29uZmlnVGVtcGxhdGVDaGVja2JveC5jbGFzc1Jvd3MgPz8gJycgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkS2V5XT1cImZpZWxkS2V5KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2tleVNlbGVjdGVkXT1cIihpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOm11bHRpS2V5U2VsZWN0ZWQoKTptdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCkgPyBpdGVtKClbZmllbGRLZXkoKV0gOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ1RlbXBsYXRlXT1cImNvbmZpZ1RlbXBsYXRlQ2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG91dEV2ZW50KT1cImhhbmRsZXJDaGFuZ2UoJ2NoZWNrYm94JywkZXZlbnQuaXRlbSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC92aXJ0dWFsLXNjcm9sbGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAoKCFpdGVtcygpIHx8ICFpdGVtcygpLmxlbmd0aCkgJiYgKCFjb25maWcoKT8uaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoIHx8IGtleVNlYXJjaCgpKSkge1xuICAgICAgICA8ZGl2IFtjbGFzc109XCInbGlicy11aS1mb250LWg1ciB0ZXh0LVsjOWNhMmFkXSAnKyAoY29uZmlnKCk/LnRleHROb0RhdGFDbGFzc0luY2x1ZGUgPz8gJ3B5LVs0cHhdIHB4LVsxMnB4XScpXCI+XG4gICAgICAgICAgQGlmIChjb25maWcoKT8uaGFzSWNvbk5vRGF0YSAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItWzE2cHhdXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nQ29tcG9uZW50T3V0bGV0PVwiKGtleVNlYXJjaCgpICA/ICduby1yZXN1bHQnIDogJ25vLWRhdGEnKSB8IExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUgfCBhc3luY1wiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKCFrZXlTZWFyY2goKSAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgICA8c3Bhbj57eyAoY29uZmlnKCk/LnRleHROb0RhdGEgPz8gJ2kxOG5faGF2ZV9ub19zZWxlY3Rpb24nKSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICh0ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YSgpICYmIGtleVNlYXJjaCgpICYmICFsb2FkaW5nKCkpIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YSgpIHx8IG51bGw7Y29udGV4dDp7a2V5U2VhcmNoOmtleVNlYXJjaCgpfVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoIXRlbXBsYXRlUmVmU2VhcmNoTm9EYXRhKCkgJiYga2V5U2VhcmNoKCkgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPHNwYW4+e3sgKGNvbmZpZygpPy50ZXh0U2VhcmNoTm9EYXRhID8/ICdpMThuX25vX3Jlc3VsdCcpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPHNwYW4+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgIH1cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc3Bpbm5lciBbc2l6ZV09XCInbWVkaXVtJ1wiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufVxuIl19