@mediusinc/mng-commons 5.3.0-rc.2 → 5.3.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/form/components/dropdown/dropdown.component.mjs +3 -3
- package/esm2022/table/api/descriptors/table.descriptor.mjs +12 -2
- package/esm2022/table/api/index.mjs +2 -1
- package/esm2022/table/api/models/row-expandable-component.model.mjs +2 -0
- package/esm2022/table/components/column-value/column-value.component.mjs +3 -3
- package/esm2022/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.mjs +3 -3
- package/esm2022/table/components/table/table.component.mjs +3 -3
- package/esm2022/tableview/action/components/action/action.component.mjs +3 -3
- package/esm2022/tableview/action/components/table/action-table.component.mjs +3 -3
- package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +1 -3
- package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +14 -1
- package/esm2022/tableview/api/editor/models/field-image-preview.model.mjs +2 -0
- package/esm2022/tableview/api/index.mjs +2 -1
- package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +9 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +3 -3
- package/fesm2022/mediusinc-mng-commons-form.mjs +2 -2
- package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table-api.mjs +11 -1
- package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table.mjs +6 -6
- package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +13 -2
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview.mjs +23 -18
- package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
- package/package.json +7 -7
- package/table/api/descriptors/table.descriptor.d.ts +8 -1
- package/table/api/index.d.ts +1 -0
- package/table/api/models/row-expandable-component.model.d.ts +4 -0
- package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +4 -4
- package/tableview/api/editor/descriptors/field.descriptor.d.ts +10 -0
- package/tableview/api/editor/models/field-image-preview.model.d.ts +4 -0
- package/tableview/api/index.d.ts +1 -0
- package/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.d.ts +1 -0
- package/version-info.json +5 -5
|
@@ -246,10 +246,10 @@ export class DropdownComponent {
|
|
|
246
246
|
this.valueChange.emit(value);
|
|
247
247
|
}
|
|
248
248
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
249
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.5", type: DropdownComponent, isStandalone: true, selector: "mng-dropdown", inputs: { dataProvider: { classPropertyName: "dataProvider", publicName: "dataProvider", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, optionsTrackProperty: { classPropertyName: "optionsTrackProperty", publicName: "optionsTrackProperty", isSignal: true, isRequired: false, transformFunction: null }, optionsLabelPropertyInit: { classPropertyName: "optionsLabelPropertyInit", publicName: "optionsLabelProperty", isSignal: true, isRequired: false, transformFunction: null }, optionsLabelTranslate: { classPropertyName: "optionsLabelTranslate", publicName: "optionsLabelTranslate", isSignal: true, isRequired: false, transformFunction: null }, optionsValuePropertyInput: { classPropertyName: "optionsValuePropertyInput", publicName: "optionsValueProperty", isSignal: true, isRequired: false, transformFunction: null }, optionsDisabledProperty: { classPropertyName: "optionsDisabledProperty", publicName: "optionsDisabledProperty", isSignal: true, isRequired: false, transformFunction: null }, multiselect: { classPropertyName: "multiselect", publicName: "multiselect", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, showClear: { classPropertyName: "showClear", publicName: "showClear", isSignal: true, isRequired: false, transformFunction: null }, selectFirstItemInput: { classPropertyName: "selectFirstItemInput", publicName: "selectFirstItem", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, dropdownClassName: { classPropertyName: "dropdownClassName", publicName: "dropdownClassName", isSignal: true, isRequired: false, transformFunction: null }, changeValueOnBlur: { classPropertyName: "changeValueOnBlur", publicName: "changeValueOnBlur", isSignal: true, isRequired: false, transformFunction: null }, loadingInput: { classPropertyName: "loadingInput", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, appendTo: { classPropertyName: "appendTo", publicName: "appendTo", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", blur: "blur" }, providers: [DROPDOWN_VALUE_ACCESSOR], viewQueries: [{ propertyName: "primeDropdown", first: true, predicate: Dropdown, descendants: true, isSignal: true }, { propertyName: "primeMultiselect", first: true, predicate: MultiSelect, descendants: true, isSignal: true }], ngImport: i0, template: "@if (!multiselect()) {\n <p-dropdown\n [ngModel]=\"ngModelValue()\"\n [placeholder]=\"placeholder()\"\n [dataKey]=\"optionsTrackProperty()\"\n [optionLabel]=\"optionsLabelProperty()\"\n [optionValue]=\"optionsValueProperty()\"\n [optionDisabled]=\"optionsDisabledProperty()\"\n [options]=\"items()\"\n [showClear]=\"showClear()\"\n [styleClass]=\"className()\"\n [panelStyleClass]=\"dropdownClassName()\"\n [disabled]=\"disabled()\"\n (onBlur)=\"onDropdownBlur($event)\"\n (onChange)=\"onDropdownChange($event)\"\n (onShow)=\"onDropdownPanelShow()\"\n (onHide)=\"onDropdownPanelHide()\"\n [dropdownIcon]=\"loading() ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\n [appendTo]=\"appendTo()\"
|
|
249
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.5", type: DropdownComponent, isStandalone: true, selector: "mng-dropdown", inputs: { dataProvider: { classPropertyName: "dataProvider", publicName: "dataProvider", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, optionsTrackProperty: { classPropertyName: "optionsTrackProperty", publicName: "optionsTrackProperty", isSignal: true, isRequired: false, transformFunction: null }, optionsLabelPropertyInit: { classPropertyName: "optionsLabelPropertyInit", publicName: "optionsLabelProperty", isSignal: true, isRequired: false, transformFunction: null }, optionsLabelTranslate: { classPropertyName: "optionsLabelTranslate", publicName: "optionsLabelTranslate", isSignal: true, isRequired: false, transformFunction: null }, optionsValuePropertyInput: { classPropertyName: "optionsValuePropertyInput", publicName: "optionsValueProperty", isSignal: true, isRequired: false, transformFunction: null }, optionsDisabledProperty: { classPropertyName: "optionsDisabledProperty", publicName: "optionsDisabledProperty", isSignal: true, isRequired: false, transformFunction: null }, multiselect: { classPropertyName: "multiselect", publicName: "multiselect", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, showClear: { classPropertyName: "showClear", publicName: "showClear", isSignal: true, isRequired: false, transformFunction: null }, selectFirstItemInput: { classPropertyName: "selectFirstItemInput", publicName: "selectFirstItem", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, dropdownClassName: { classPropertyName: "dropdownClassName", publicName: "dropdownClassName", isSignal: true, isRequired: false, transformFunction: null }, changeValueOnBlur: { classPropertyName: "changeValueOnBlur", publicName: "changeValueOnBlur", isSignal: true, isRequired: false, transformFunction: null }, loadingInput: { classPropertyName: "loadingInput", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, appendTo: { classPropertyName: "appendTo", publicName: "appendTo", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", blur: "blur" }, providers: [DROPDOWN_VALUE_ACCESSOR], viewQueries: [{ propertyName: "primeDropdown", first: true, predicate: Dropdown, descendants: true, isSignal: true }, { propertyName: "primeMultiselect", first: true, predicate: MultiSelect, descendants: true, isSignal: true }], ngImport: i0, template: "@if (!multiselect()) {\n <p-dropdown\n [ngModel]=\"ngModelValue()\"\n [placeholder]=\"placeholder()\"\n [dataKey]=\"optionsTrackProperty()\"\n [optionLabel]=\"optionsLabelProperty()\"\n [optionValue]=\"optionsValueProperty()\"\n [optionDisabled]=\"optionsDisabledProperty()\"\n [options]=\"items()\"\n [showClear]=\"showClear()\"\n [styleClass]=\"className()\"\n [panelStyleClass]=\"dropdownClassName()\"\n [disabled]=\"disabled()\"\n (onBlur)=\"onDropdownBlur($event)\"\n (onChange)=\"onDropdownChange($event)\"\n (onShow)=\"onDropdownPanelShow()\"\n (onHide)=\"onDropdownPanelHide()\"\n [dropdownIcon]=\"loading() ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\n [appendTo]=\"appendTo()\">\n </p-dropdown>\n} @else {\n <p-multiSelect\n [ngModel]=\"ngModelValue()\"\n [maxSelectedLabels]=\"1\"\n [selectedItemsLabel]=\"'mngDropdown.multiselectOverMaxDisplayLimit' | translate\"\n [placeholder]=\"placeholder()\"\n [dataKey]=\"optionsTrackProperty()\"\n [optionLabel]=\"optionsLabelProperty()\"\n [optionValue]=\"optionsValueProperty()\"\n [optionDisabled]=\"optionsDisabledProperty()\"\n [options]=\"items()\"\n [styleClass]=\"className()\"\n [panelStyleClass]=\"dropdownClassName()\"\n [filter]=\"true\"\n [showToggleAll]=\"false\"\n [disabled]=\"disabled()\"\n (onChange)=\"onMultiselectChange($event)\"\n (onPanelHide)=\"onMultiselectPanelHide()\"\n (onBlur)=\"onMultiselectBlur($event)\"\n appendTo=\"body\">\n </p-multiSelect>\n}\n", dependencies: [{ kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i1.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i2.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
250
250
|
}
|
|
251
251
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DropdownComponent, decorators: [{
|
|
252
252
|
type: Component,
|
|
253
|
-
args: [{ standalone: true, selector: 'mng-dropdown', providers: [DROPDOWN_VALUE_ACCESSOR], imports: [DropdownModule, MultiSelectModule, TranslateModule, FormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!multiselect()) {\n <p-dropdown\n [ngModel]=\"ngModelValue()\"\n [placeholder]=\"placeholder()\"\n [dataKey]=\"optionsTrackProperty()\"\n [optionLabel]=\"optionsLabelProperty()\"\n [optionValue]=\"optionsValueProperty()\"\n [optionDisabled]=\"optionsDisabledProperty()\"\n [options]=\"items()\"\n [showClear]=\"showClear()\"\n [styleClass]=\"className()\"\n [panelStyleClass]=\"dropdownClassName()\"\n [disabled]=\"disabled()\"\n (onBlur)=\"onDropdownBlur($event)\"\n (onChange)=\"onDropdownChange($event)\"\n (onShow)=\"onDropdownPanelShow()\"\n (onHide)=\"onDropdownPanelHide()\"\n [dropdownIcon]=\"loading() ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\n [appendTo]=\"appendTo()\"
|
|
253
|
+
args: [{ standalone: true, selector: 'mng-dropdown', providers: [DROPDOWN_VALUE_ACCESSOR], imports: [DropdownModule, MultiSelectModule, TranslateModule, FormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!multiselect()) {\n <p-dropdown\n [ngModel]=\"ngModelValue()\"\n [placeholder]=\"placeholder()\"\n [dataKey]=\"optionsTrackProperty()\"\n [optionLabel]=\"optionsLabelProperty()\"\n [optionValue]=\"optionsValueProperty()\"\n [optionDisabled]=\"optionsDisabledProperty()\"\n [options]=\"items()\"\n [showClear]=\"showClear()\"\n [styleClass]=\"className()\"\n [panelStyleClass]=\"dropdownClassName()\"\n [disabled]=\"disabled()\"\n (onBlur)=\"onDropdownBlur($event)\"\n (onChange)=\"onDropdownChange($event)\"\n (onShow)=\"onDropdownPanelShow()\"\n (onHide)=\"onDropdownPanelHide()\"\n [dropdownIcon]=\"loading() ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\n [appendTo]=\"appendTo()\">\n </p-dropdown>\n} @else {\n <p-multiSelect\n [ngModel]=\"ngModelValue()\"\n [maxSelectedLabels]=\"1\"\n [selectedItemsLabel]=\"'mngDropdown.multiselectOverMaxDisplayLimit' | translate\"\n [placeholder]=\"placeholder()\"\n [dataKey]=\"optionsTrackProperty()\"\n [optionLabel]=\"optionsLabelProperty()\"\n [optionValue]=\"optionsValueProperty()\"\n [optionDisabled]=\"optionsDisabledProperty()\"\n [options]=\"items()\"\n [styleClass]=\"className()\"\n [panelStyleClass]=\"dropdownClassName()\"\n [filter]=\"true\"\n [showToggleAll]=\"false\"\n [disabled]=\"disabled()\"\n (onChange)=\"onMultiselectChange($event)\"\n (onPanelHide)=\"onMultiselectPanelHide()\"\n (onBlur)=\"onMultiselectBlur($event)\"\n appendTo=\"body\">\n </p-multiSelect>\n}\n" }]
|
|
254
254
|
}], ctorParameters: () => [] });
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZm9ybS9zcmMvY29tcG9uZW50cy9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9mb3JtL3NyYy9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFFVixRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFFLFlBQVksRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFBdUIsV0FBVyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEYsT0FBTyxFQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxRQUFRLEVBQXVCLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQy9FLE9BQU8sRUFBQyxXQUFXLEVBQWdELGlCQUFpQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDakgsT0FBTyxFQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFNUQsT0FBTyxFQUFDLG9CQUFvQixFQUF1QixhQUFhLEVBQUUsWUFBWSxJQUFJLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7Ozs7OztBQUVoTCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBcUI7SUFD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RyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7b0JBQ3hELE9BQU87Z0JBQ1gsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNsQixxQ0FBcUM7WUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsS0FBVTtRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7OEdBMVFRLGlCQUFpQjtrR0FBakIsaUJBQWlCLHdtRkFKZixDQUFDLHVCQUF1QixDQUFDLHlFQWdDSCxRQUFRLG1HQUNMLFdBQVcsZ0VDckVuRCw4cURBMkNBLDJDRE5jLGNBQWMsMnFDQUFFLGlCQUFpQixvMUNBQUUsZUFBZSwyRkFBRSxXQUFXOzsyRkFHaEUsaUJBQWlCO2tCQVI3QixTQUFTO2lDQUNNLElBQUksWUFDTixjQUFjLGFBRWIsQ0FBQyx1QkFBdUIsQ0FBQyxXQUMzQixDQUFDLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsV0FBVyxDQUFDLG1CQUN6RCx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFeGlzdGluZ1Byb3ZpZGVyLFxuICAgIEluamVjdG9yLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIGZvcndhcmRSZWYsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIG91dHB1dCxcbiAgICBzaWduYWwsXG4gICAgdmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7RHJvcGRvd24sIERyb3Bkb3duQ2hhbmdlRXZlbnQsIERyb3Bkb3duTW9kdWxlfSBmcm9tICdwcmltZW5nL2Ryb3Bkb3duJztcbmltcG9ydCB7TXVsdGlTZWxlY3QsIE11bHRpU2VsZWN0Qmx1ckV2ZW50LCBNdWx0aVNlbGVjdENoYW5nZUV2ZW50LCBNdWx0aVNlbGVjdE1vZHVsZX0gZnJvbSAncHJpbWVuZy9tdWx0aXNlbGVjdCc7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtDb21tb25zSW50ZXJuYWxFcnJvciwgSUxvb2t1cERhdGFQcm92aWRlciwgTG9nZ2VyU2VydmljZSwgdG9PYnNlcnZhYmxlIGFzIGNvbW1vbnNUb09ic2VydmFibGUsIGZyb21TdWJzY3JpYmVFcnJvciwgZ2V0RXJyb3JMb2dMZXZlbH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcblxuZXhwb3J0IGNvbnN0IERST1BET1dOX1ZBTFVFX0FDQ0VTU09SOiBFeGlzdGluZ1Byb3ZpZGVyID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERyb3Bkb3duQ29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxufTtcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ21uZy1kcm9wZG93bicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtEUk9QRE9XTl9WQUxVRV9BQ0NFU1NPUl0sXG4gICAgaW1wb3J0czogW0Ryb3Bkb3duTW9kdWxlLCBNdWx0aVNlbGVjdE1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBpbmplY3QoTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdEcm9wZG93bkNvbXBvbmVudCcpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gICAgcHVibGljIGRhdGFQcm92aWRlciA9IGlucHV0PElMb29rdXBEYXRhUHJvdmlkZXI8YW55LCBhbnk+PigpO1xuICAgIHB1YmxpYyBvcHRpb25zID0gaW5wdXQ8QXJyYXk8YW55Pj4oW10pO1xuICAgIHB1YmxpYyBvcHRpb25zVHJhY2tQcm9wZXJ0eSA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgb3B0aW9uc0xhYmVsUHJvcGVydHlJbml0ID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHthbGlhczogJ29wdGlvbnNMYWJlbFByb3BlcnR5J30pO1xuICAgIHB1YmxpYyBvcHRpb25zTGFiZWxUcmFuc2xhdGUgPSBpbnB1dChmYWxzZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyBvcHRpb25zVmFsdWVQcm9wZXJ0eUlucHV0ID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHthbGlhczogJ29wdGlvbnNWYWx1ZVByb3BlcnR5J30pO1xuICAgIHB1YmxpYyBvcHRpb25zRGlzYWJsZWRQcm9wZXJ0eSA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgbXVsdGlzZWxlY3QgPSBpbnB1dChmYWxzZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgc2hvd0NsZWFyID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgc2VsZWN0Rmlyc3RJdGVtSW5wdXQgPSBpbnB1dChmYWxzZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSwgYWxpYXM6ICdzZWxlY3RGaXJzdEl0ZW0nfSk7XG4gICAgcHVibGljIGNsYXNzTmFtZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgZHJvcGRvd25DbGFzc05hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gICAgcHVibGljIGNoYW5nZVZhbHVlT25CbHVyID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgbG9hZGluZ0lucHV0ID0gaW5wdXQoZmFsc2UsIHthbGlhczogJ2xvYWRpbmcnLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgZGlzYWJsZWRJbnB1dCA9IGlucHV0KGZhbHNlLCB7YWxpYXM6ICdkaXNhYmxlZCcsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyBhcHBlbmRUbyA9IGlucHV0PHN0cmluZyB8IG51bGw+KCdib2R5Jyk7XG5cbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICAgIHB1YmxpYyBibHVyID0gb3V0cHV0PEV2ZW50PigpO1xuXG4gICAgcHVibGljIHByaW1lRHJvcGRvd24gPSB2aWV3Q2hpbGQoRHJvcGRvd24pO1xuICAgIHB1YmxpYyBwcmltZU11bHRpc2VsZWN0ID0gdmlld0NoaWxkKE11bHRpU2VsZWN0KTtcblxuICAgIHByaXZhdGUgX3ZhbHVlPzogYW55IHwgbnVsbDtcbiAgICBwdWJsaWMgbmdNb2RlbFZhbHVlID0gc2lnbmFsPHVuZGVmaW5lZCB8IG51bGwgfCBhbnk+KHVuZGVmaW5lZCk7XG5cbiAgICBwcml2YXRlIF9sb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcml2YXRlIF9kaXNhYmxlZCA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHVibGljIGxvYWRpbmcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmxvYWRpbmdJbnB1dCgpIHx8IHRoaXMuX2xvYWRpbmcoKSk7XG4gICAgcHVibGljIGRpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kaXNhYmxlZElucHV0KCkgfHwgdGhpcy5fZGlzYWJsZWQoKSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgcHJpdmF0ZSBvbkNoYW5nZUZuOiBhbnkgPSAoKSA9PiB7fTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgcHJpdmF0ZSBvblRvdWNoZWRGbjogYW55ID0gKCkgPT4ge307XG5cbiAgICBwcml2YXRlIGRhdGFQcm92aWRlclNlcnZpY2U6IGFueSA9IG51bGw7XG4gICAgcHVibGljIGl0ZW1zID0gc2lnbmFsPEFycmF5PGFueT4+KFtdKTtcbiAgICBwcml2YXRlIGZpcnN0VGltZVNldHRpbmdJdGVtcyA9IHRydWU7XG5cbiAgICBwcml2YXRlIGlzRHJvcGRvd25QYW5lbFNob3duID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgb3B0aW9uc0xhYmVsUHJvcGVydHkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnNMYWJlbFRyYW5zbGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBzZXR1cCB0cmFuc2xhdGlvbiBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpfV9pMThuYDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9uc0xhYmVsUHJvcGVydHlJbml0KCkgJiYgIXRoaXMub3B0aW9uc1ZhbHVlUHJvcGVydHlJbnB1dCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0aXRsZV9pMThuJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBJbnZhbGlkIHVzZSB3aXRoIHZhbHVlICgke3RoaXMub3B0aW9uc1ZhbHVlUHJvcGVydHlJbnB1dCgpfSkgYW5kIGxhYmVsICgke3RoaXMub3B0aW9uc0xhYmVsUHJvcGVydHlJbml0KCl9KSBwcm9wZXJ0eSBzZXR1cC5gLCB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdEcm9wZG93bkNvbXBvbmVudEVycm9yJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc0xhYmVsUHJvcGVydHlJbml0KCk7XG4gICAgfSk7XG4gICAgcHVibGljIG9wdGlvbnNWYWx1ZVByb3BlcnR5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zTGFiZWxUcmFuc2xhdGUoKSkge1xuICAgICAgICAgICAgLy8gc2V0dXAgdHJhbnNsYXRpb24gcHJvcGVydGllc1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpICYmICF0aGlzLm9wdGlvbnNWYWx1ZVByb3BlcnR5SW5wdXQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAndmFsdWUnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgSW52YWxpZCB1c2Ugd2l0aCB2YWx1ZSAoJHt0aGlzLm9wdGlvbnNWYWx1ZVByb3BlcnR5SW5wdXQoKX0pIGFuZCBsYWJlbCAoJHt0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpfSkgcHJvcGVydHkgc2V0dXAuYCwge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRHJvcGRvd25Db21wb25lbnRFcnJvcidcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNWYWx1ZVByb3BlcnR5SW5wdXQoKTtcbiAgICB9KTtcblxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5uZ01vZGVsVmFsdWUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29tYmluZUxhdGVzdChbdG9PYnNlcnZhYmxlKHRoaXMuZGF0YVByb3ZpZGVyKSwgdG9PYnNlcnZhYmxlKHRoaXMub3B0aW9ucyldKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuX2xvYWRpbmcuc2V0KHRydWUpKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKFtkYXRhUHJvdmlkZXIsIG9wdGlvbnNdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyU2VydmljZSA9IGRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSA/IHRoaXMuaW5qZWN0b3IuZ2V0PGFueT4oZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tbW9uc1RvT2JzZXJ2YWJsZShkYXRhUHJvdmlkZXIubG9va3VwKHtsaW1pdDogNTB9LCB0aGlzLmRhdGFQcm92aWRlclNlcnZpY2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihvcHRpb25zID8/IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChpdGVtcyA9PiB0aGlzLnRyYW5zZm9ybUl0ZW1zKGl0ZW1zKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuc2V0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RGaXJzdEl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZU9uSXRlbXNWYWx1ZVByb3BlcnR5VHlwZU1pc21hdGNoKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5zZXQoW10pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gZnJvbVN1YnNjcmliZUVycm9yKGVyciwgJ0Ryb3Bkb3duQ29tcG9uZW50RXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKGVycm9yLCBnZXRFcnJvckxvZ0xldmVsKGVycm9yKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VGbiA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWRGbiA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX2Rpc2FibGVkLnNldChpc0Rpc2FibGVkKSk7XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIHRoaXMgY2hlY2sgaXMgcmVxdWlyZWQgYmVjYXVzZSBhbmd1bGFyIGluIHNvbWUgY2FzZXMgd3JpdGVzIG51bGwgdmFsdWVcbiAgICAgICAgLy8gYmVmb3JlIHZhbHVlIGFjY2Vzc29yIGlzIGluaXRpYWxpemVkXG4gICAgICAgIC8vIGlmIGZvcm0gY29udHJvbCB2YWx1ZSBpcyBvZiBwcmltaXRpdmUgdHlwZSAoZXg6IGVudW1zKSB0aGVuIHdyaXRlIHZhbHVlIGlzIG5vdCBjYWxsZWQgKHdlIHRoaW5rKVxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCAmJiB0aGlzLl92YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gd3JpdGUgdmFsdWUgaW1tZWRpYXRlbHkgLSBpdCBpcyBpbXBvcnRhbnQgc28gdGhhdCBmaXJzdCBzZWxlY3QgaXMgbm90IHRyaWdnZXJlZCFcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZU9uSXRlbXNWYWx1ZVByb3BlcnR5VHlwZU1pc21hdGNoKHRydWUpO1xuICAgIH1cblxuICAgIG9uRHJvcGRvd25CbHVyKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duUGFuZWxTaG93bikge1xuICAgICAgICAgICAgLy8gaWdub3JlIHRoaXMgYmx1ciBldmVudFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByaW1lRHJvcGRvd24gPSB0aGlzLnByaW1lRHJvcGRvd24oKTtcbiAgICAgICAgaWYgKHRoaXMuY2hhbmdlVmFsdWVPbkJsdXIoKSAmJiBwcmltZURyb3Bkb3duKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZVZhbHVlQ2hhbmdlKHByaW1lRHJvcGRvd24udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICAgICAgdGhpcy5ibHVyLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uRHJvcGRvd25DaGFuZ2UoZXZlbnQ6IERyb3Bkb3duQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYW5nZVZhbHVlT25CbHVyKCkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlVmFsdWVDaGFuZ2UoZXZlbnQudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ecm9wZG93blBhbmVsU2hvdygpIHtcbiAgICAgICAgdGhpcy5pc0Ryb3Bkb3duUGFuZWxTaG93biA9IHRydWU7XG4gICAgfVxuXG4gICAgb25Ecm9wZG93blBhbmVsSGlkZSgpIHtcbiAgICAgICAgdGhpcy5pc0Ryb3Bkb3duUGFuZWxTaG93biA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uTXVsdGlzZWxlY3RDaGFuZ2UoZXZlbnQ6IE11bHRpU2VsZWN0Q2hhbmdlRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYW5nZVZhbHVlT25CbHVyKCkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlVmFsdWVDaGFuZ2UoZXZlbnQudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25NdWx0aXNlbGVjdEJsdXIoZXZlbnQ6IE11bHRpU2VsZWN0Qmx1ckV2ZW50KSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICAgICAgdGhpcy5ibHVyLmVtaXQoZXZlbnQub3JpZ2luYWxFdmVudCk7XG4gICAgfVxuXG4gICAgb25NdWx0aXNlbGVjdFBhbmVsSGlkZSgpIHtcbiAgICAgICAgY29uc3QgcHJpbWVNdWx0aXNlbGVjdCA9IHRoaXMucHJpbWVNdWx0aXNlbGVjdCgpO1xuICAgICAgICBpZiAodGhpcy5jaGFuZ2VWYWx1ZU9uQmx1cigpICYmIHByaW1lTXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlVmFsdWVDaGFuZ2UocHJpbWVNdWx0aXNlbGVjdC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdEZpcnN0SXRlbSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlyc3RUaW1lU2V0dGluZ0l0ZW1zICYmIHRoaXMuaXRlbXMoKS5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0Rmlyc3RJdGVtSW5wdXQoKSAmJiAhdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnNWYWx1ZVByb3BlcnR5ID0gdGhpcy5vcHRpb25zVmFsdWVQcm9wZXJ0eSgpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zVmFsdWVQcm9wZXJ0eSA/IHRoaXMuaXRlbXMoKVswXVtvcHRpb25zVmFsdWVQcm9wZXJ0eV0gOiB0aGlzLml0ZW1zKClbMF07XG4gICAgICAgICAgICB0aGlzLm5nTW9kZWxWYWx1ZS5zZXQodmFsdWUpOyAvLyBzZXQgdG8gd3JpdGUgZm9yIGlucHV0XG4gICAgICAgICAgICB0aGlzLmZpcnN0VGltZVNldHRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVWYWx1ZUNoYW5nZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRyYW5zZm9ybUl0ZW1zKGl0ZW1zOiBhbnlbXSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zTGFiZWxUcmFuc2xhdGUoKSkge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25LZXlzOiBzdHJpbmdbXSA9IGl0ZW1zLm1hcChcbiAgICAgICAgICAgICAgICBpdGVtID0+ICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgdGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQoKSA/IChpdGVtW3RoaXMub3B0aW9uc0xhYmVsUHJvcGVydHlJbml0KCkgYXMga2V5b2Ygb2JqZWN0XSBhcyBzdHJpbmcpIDogaXRlbSkgYXMgc3RyaW5nXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAodHJhbnNsYXRpb25LZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5zdHJlYW0odHJhbnNsYXRpb25LZXlzKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCh0cmFuc2xhdGlvbnMgPT5cbiAgICAgICAgICAgICAgICAgICAgaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiB0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtW3RoaXMub3B0aW9uc0xhYmVsUHJvcGVydHlJbml0KCkgYXMga2V5b2Ygb2JqZWN0XSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRyYW5zbGF0aW9uc1tsYWJlbF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Li4uaXRlbSwgW3RoaXMub3B0aW9uc0xhYmVsUHJvcGVydHkoKSFdOiB0cmFuc2xhdGlvbn07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Li4uaXRlbX07XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25zW2l0ZW1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5KCkhXTogdHJhbnNsYXRpb24gPz8gaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXMub3B0aW9uc1ZhbHVlUHJvcGVydHkoKSFdOiBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9mKGl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRqdXN0VmFsdWVPbkl0ZW1zVmFsdWVQcm9wZXJ0eVR5cGVNaXNtYXRjaChzZXROZ01vZGVsVmFsdWUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBvcHRpb25zVmFsdWVQcm9wID0gdGhpcy5vcHRpb25zVmFsdWVQcm9wZXJ0eSgpO1xuICAgICAgICBpZiAob3B0aW9uc1ZhbHVlUHJvcCAmJiB0aGlzLl92YWx1ZSAhPSBudWxsICYmIHRoaXMuaXRlbXMoKS5sZW5ndGggPiAwICYmIHRoaXMuaXRlbXMoKVswXVtvcHRpb25zVmFsdWVQcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLl92YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUubGVuZ3RoID4gMCAmJiB0eXBlb2YgdGhpcy5pdGVtcygpWzBdW29wdGlvbnNWYWx1ZVByb3BdICE9PSB0eXBlb2YgdGhpcy5fdmFsdWVbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nVmFsdWVzID0gdGhpcy5fdmFsdWUubWFwKHYgPT4gdi50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zID0gdGhpcy5pdGVtcygpLmZpbHRlcihpID0+IGlbb3B0aW9uc1ZhbHVlUHJvcF0gIT0gbnVsbCAmJiBzdHJpbmdWYWx1ZXMuaW5jbHVkZXMoaVtvcHRpb25zVmFsdWVQcm9wXS50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsVmFsdWUuc2V0KHNlbGVjdGVkT3B0aW9ucy5tYXAoaSA9PiBpW29wdGlvbnNWYWx1ZVByb3BdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLml0ZW1zKClbMF1bb3B0aW9uc1ZhbHVlUHJvcF0gIT09IHR5cGVvZiB0aGlzLl92YWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIHR5cGVzIGRvbnQgbWF0Y2gsIHNlYXJjaCBhbmQgY29tcGFyZSBieSBzdHJpbmdcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHRoaXMuaXRlbXMoKS5maW5kKGkgPT4gaVtvcHRpb25zVmFsdWVQcm9wXSAhPSBudWxsICYmIGlbb3B0aW9uc1ZhbHVlUHJvcF0udG9TdHJpbmcoKSA9PT0gdGhpcy5fdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbFZhbHVlLnNldChzZWxlY3RlZE9wdGlvbltvcHRpb25zVmFsdWVQcm9wXSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2V0TmdNb2RlbFZhbHVlKSB7XG4gICAgICAgICAgICAvLyBmb3JjZSB3cml0ZSB0byBuZ01vZGVsVmFsdWUgYW55d2F5XG4gICAgICAgICAgICB0aGlzLm5nTW9kZWxWYWx1ZS5zZXQodGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9wYWdhdGVWYWx1ZUNoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25DaGFuZ2VGbih2YWx1ZSk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxufVxuIiwiQGlmICghbXVsdGlzZWxlY3QoKSkge1xuICAgIDxwLWRyb3Bkb3duXG4gICAgICAgIFtuZ01vZGVsXT1cIm5nTW9kZWxWYWx1ZSgpXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKClcIlxuICAgICAgICBbZGF0YUtleV09XCJvcHRpb25zVHJhY2tQcm9wZXJ0eSgpXCJcbiAgICAgICAgW29wdGlvbkxhYmVsXT1cIm9wdGlvbnNMYWJlbFByb3BlcnR5KClcIlxuICAgICAgICBbb3B0aW9uVmFsdWVdPVwib3B0aW9uc1ZhbHVlUHJvcGVydHkoKVwiXG4gICAgICAgIFtvcHRpb25EaXNhYmxlZF09XCJvcHRpb25zRGlzYWJsZWRQcm9wZXJ0eSgpXCJcbiAgICAgICAgW29wdGlvbnNdPVwiaXRlbXMoKVwiXG4gICAgICAgIFtzaG93Q2xlYXJdPVwic2hvd0NsZWFyKClcIlxuICAgICAgICBbc3R5bGVDbGFzc109XCJjbGFzc05hbWUoKVwiXG4gICAgICAgIFtwYW5lbFN0eWxlQ2xhc3NdPVwiZHJvcGRvd25DbGFzc05hbWUoKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgICAgICAgKG9uQmx1cik9XCJvbkRyb3Bkb3duQmx1cigkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2hhbmdlKT1cIm9uRHJvcGRvd25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChvblNob3cpPVwib25Ecm9wZG93blBhbmVsU2hvdygpXCJcbiAgICAgICAgKG9uSGlkZSk9XCJvbkRyb3Bkb3duUGFuZWxIaWRlKClcIlxuICAgICAgICBbZHJvcGRvd25JY29uXT1cImxvYWRpbmcoKSA/ICdwaSBwaS1zcGlubmVyIHBpLXNwaW4nIDogJ3BpIHBpLWNoZXZyb24tZG93bidcIlxuICAgICAgICBbYXBwZW5kVG9dPVwiYXBwZW5kVG8oKVwiXG4gICAgICAgID5cbiAgICA8L3AtZHJvcGRvd24+XG59IEBlbHNlIHtcbiAgICA8cC1tdWx0aVNlbGVjdFxuICAgICAgICBbbmdNb2RlbF09XCJuZ01vZGVsVmFsdWUoKVwiXG4gICAgICAgIFttYXhTZWxlY3RlZExhYmVsc109XCIxXCJcbiAgICAgICAgW3NlbGVjdGVkSXRlbXNMYWJlbF09XCInbW5nRHJvcGRvd24ubXVsdGlzZWxlY3RPdmVyTWF4RGlzcGxheUxpbWl0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpXCJcbiAgICAgICAgW2RhdGFLZXldPVwib3B0aW9uc1RyYWNrUHJvcGVydHkoKVwiXG4gICAgICAgIFtvcHRpb25MYWJlbF09XCJvcHRpb25zTGFiZWxQcm9wZXJ0eSgpXCJcbiAgICAgICAgW29wdGlvblZhbHVlXT1cIm9wdGlvbnNWYWx1ZVByb3BlcnR5KClcIlxuICAgICAgICBbb3B0aW9uRGlzYWJsZWRdPVwib3B0aW9uc0Rpc2FibGVkUHJvcGVydHkoKVwiXG4gICAgICAgIFtvcHRpb25zXT1cIml0ZW1zKClcIlxuICAgICAgICBbc3R5bGVDbGFzc109XCJjbGFzc05hbWUoKVwiXG4gICAgICAgIFtwYW5lbFN0eWxlQ2xhc3NdPVwiZHJvcGRvd25DbGFzc05hbWUoKVwiXG4gICAgICAgIFtmaWx0ZXJdPVwidHJ1ZVwiXG4gICAgICAgIFtzaG93VG9nZ2xlQWxsXT1cImZhbHNlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxuICAgICAgICAob25DaGFuZ2UpPVwib25NdWx0aXNlbGVjdENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKG9uUGFuZWxIaWRlKT1cIm9uTXVsdGlzZWxlY3RQYW5lbEhpZGUoKVwiXG4gICAgICAgIChvbkJsdXIpPVwib25NdWx0aXNlbGVjdEJsdXIoJGV2ZW50KVwiXG4gICAgICAgIGFwcGVuZFRvPVwiYm9keVwiPlxuICAgIDwvcC1tdWx0aVNlbGVjdD5cbn1cbiJdfQ==
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZm9ybS9zcmMvY29tcG9uZW50cy9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9mb3JtL3NyYy9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFFVixRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFFLFlBQVksRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFBdUIsV0FBVyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEYsT0FBTyxFQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxRQUFRLEVBQXVCLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQy9FLE9BQU8sRUFBQyxXQUFXLEVBQWdELGlCQUFpQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDakgsT0FBTyxFQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFNUQsT0FBTyxFQUFDLG9CQUFvQixFQUF1QixhQUFhLEVBQUUsWUFBWSxJQUFJLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7Ozs7OztBQUVoTCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBcUI7SUFD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RyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7b0JBQ3hELE9BQU87Z0JBQ1gsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNsQixxQ0FBcUM7WUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsS0FBVTtRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7OEdBMVFRLGlCQUFpQjtrR0FBakIsaUJBQWlCLHdtRkFKZixDQUFDLHVCQUF1QixDQUFDLHlFQWdDSCxRQUFRLG1HQUNMLFdBQVcsZ0VDckVuRCxvcURBMENBLDJDRExjLGNBQWMsMnFDQUFFLGlCQUFpQixvMUNBQUUsZUFBZSwyRkFBRSxXQUFXOzsyRkFHaEUsaUJBQWlCO2tCQVI3QixTQUFTO2lDQUNNLElBQUksWUFDTixjQUFjLGFBRWIsQ0FBQyx1QkFBdUIsQ0FBQyxXQUMzQixDQUFDLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsV0FBVyxDQUFDLG1CQUN6RCx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFeGlzdGluZ1Byb3ZpZGVyLFxuICAgIEluamVjdG9yLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIGZvcndhcmRSZWYsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIG91dHB1dCxcbiAgICBzaWduYWwsXG4gICAgdmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7RHJvcGRvd24sIERyb3Bkb3duQ2hhbmdlRXZlbnQsIERyb3Bkb3duTW9kdWxlfSBmcm9tICdwcmltZW5nL2Ryb3Bkb3duJztcbmltcG9ydCB7TXVsdGlTZWxlY3QsIE11bHRpU2VsZWN0Qmx1ckV2ZW50LCBNdWx0aVNlbGVjdENoYW5nZUV2ZW50LCBNdWx0aVNlbGVjdE1vZHVsZX0gZnJvbSAncHJpbWVuZy9tdWx0aXNlbGVjdCc7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtDb21tb25zSW50ZXJuYWxFcnJvciwgSUxvb2t1cERhdGFQcm92aWRlciwgTG9nZ2VyU2VydmljZSwgdG9PYnNlcnZhYmxlIGFzIGNvbW1vbnNUb09ic2VydmFibGUsIGZyb21TdWJzY3JpYmVFcnJvciwgZ2V0RXJyb3JMb2dMZXZlbH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcblxuZXhwb3J0IGNvbnN0IERST1BET1dOX1ZBTFVFX0FDQ0VTU09SOiBFeGlzdGluZ1Byb3ZpZGVyID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERyb3Bkb3duQ29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxufTtcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ21uZy1kcm9wZG93bicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtEUk9QRE9XTl9WQUxVRV9BQ0NFU1NPUl0sXG4gICAgaW1wb3J0czogW0Ryb3Bkb3duTW9kdWxlLCBNdWx0aVNlbGVjdE1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBpbmplY3QoTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdEcm9wZG93bkNvbXBvbmVudCcpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gICAgcHVibGljIGRhdGFQcm92aWRlciA9IGlucHV0PElMb29rdXBEYXRhUHJvdmlkZXI8YW55LCBhbnk+PigpO1xuICAgIHB1YmxpYyBvcHRpb25zID0gaW5wdXQ8QXJyYXk8YW55Pj4oW10pO1xuICAgIHB1YmxpYyBvcHRpb25zVHJhY2tQcm9wZXJ0eSA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgb3B0aW9uc0xhYmVsUHJvcGVydHlJbml0ID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHthbGlhczogJ29wdGlvbnNMYWJlbFByb3BlcnR5J30pO1xuICAgIHB1YmxpYyBvcHRpb25zTGFiZWxUcmFuc2xhdGUgPSBpbnB1dChmYWxzZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyBvcHRpb25zVmFsdWVQcm9wZXJ0eUlucHV0ID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHthbGlhczogJ29wdGlvbnNWYWx1ZVByb3BlcnR5J30pO1xuICAgIHB1YmxpYyBvcHRpb25zRGlzYWJsZWRQcm9wZXJ0eSA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgbXVsdGlzZWxlY3QgPSBpbnB1dChmYWxzZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgc2hvd0NsZWFyID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgc2VsZWN0Rmlyc3RJdGVtSW5wdXQgPSBpbnB1dChmYWxzZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSwgYWxpYXM6ICdzZWxlY3RGaXJzdEl0ZW0nfSk7XG4gICAgcHVibGljIGNsYXNzTmFtZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgZHJvcGRvd25DbGFzc05hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gICAgcHVibGljIGNoYW5nZVZhbHVlT25CbHVyID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgbG9hZGluZ0lucHV0ID0gaW5wdXQoZmFsc2UsIHthbGlhczogJ2xvYWRpbmcnLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgZGlzYWJsZWRJbnB1dCA9IGlucHV0KGZhbHNlLCB7YWxpYXM6ICdkaXNhYmxlZCcsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyBhcHBlbmRUbyA9IGlucHV0PHN0cmluZyB8IG51bGw+KCdib2R5Jyk7XG5cbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICAgIHB1YmxpYyBibHVyID0gb3V0cHV0PEV2ZW50PigpO1xuXG4gICAgcHVibGljIHByaW1lRHJvcGRvd24gPSB2aWV3Q2hpbGQoRHJvcGRvd24pO1xuICAgIHB1YmxpYyBwcmltZU11bHRpc2VsZWN0ID0gdmlld0NoaWxkKE11bHRpU2VsZWN0KTtcblxuICAgIHByaXZhdGUgX3ZhbHVlPzogYW55IHwgbnVsbDtcbiAgICBwdWJsaWMgbmdNb2RlbFZhbHVlID0gc2lnbmFsPHVuZGVmaW5lZCB8IG51bGwgfCBhbnk+KHVuZGVmaW5lZCk7XG5cbiAgICBwcml2YXRlIF9sb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcml2YXRlIF9kaXNhYmxlZCA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHVibGljIGxvYWRpbmcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmxvYWRpbmdJbnB1dCgpIHx8IHRoaXMuX2xvYWRpbmcoKSk7XG4gICAgcHVibGljIGRpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kaXNhYmxlZElucHV0KCkgfHwgdGhpcy5fZGlzYWJsZWQoKSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgcHJpdmF0ZSBvbkNoYW5nZUZuOiBhbnkgPSAoKSA9PiB7fTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgcHJpdmF0ZSBvblRvdWNoZWRGbjogYW55ID0gKCkgPT4ge307XG5cbiAgICBwcml2YXRlIGRhdGFQcm92aWRlclNlcnZpY2U6IGFueSA9IG51bGw7XG4gICAgcHVibGljIGl0ZW1zID0gc2lnbmFsPEFycmF5PGFueT4+KFtdKTtcbiAgICBwcml2YXRlIGZpcnN0VGltZVNldHRpbmdJdGVtcyA9IHRydWU7XG5cbiAgICBwcml2YXRlIGlzRHJvcGRvd25QYW5lbFNob3duID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgb3B0aW9uc0xhYmVsUHJvcGVydHkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnNMYWJlbFRyYW5zbGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBzZXR1cCB0cmFuc2xhdGlvbiBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpfV9pMThuYDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9uc0xhYmVsUHJvcGVydHlJbml0KCkgJiYgIXRoaXMub3B0aW9uc1ZhbHVlUHJvcGVydHlJbnB1dCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0aXRsZV9pMThuJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBJbnZhbGlkIHVzZSB3aXRoIHZhbHVlICgke3RoaXMub3B0aW9uc1ZhbHVlUHJvcGVydHlJbnB1dCgpfSkgYW5kIGxhYmVsICgke3RoaXMub3B0aW9uc0xhYmVsUHJvcGVydHlJbml0KCl9KSBwcm9wZXJ0eSBzZXR1cC5gLCB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdEcm9wZG93bkNvbXBvbmVudEVycm9yJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc0xhYmVsUHJvcGVydHlJbml0KCk7XG4gICAgfSk7XG4gICAgcHVibGljIG9wdGlvbnNWYWx1ZVByb3BlcnR5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zTGFiZWxUcmFuc2xhdGUoKSkge1xuICAgICAgICAgICAgLy8gc2V0dXAgdHJhbnNsYXRpb24gcHJvcGVydGllc1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpICYmICF0aGlzLm9wdGlvbnNWYWx1ZVByb3BlcnR5SW5wdXQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAndmFsdWUnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgSW52YWxpZCB1c2Ugd2l0aCB2YWx1ZSAoJHt0aGlzLm9wdGlvbnNWYWx1ZVByb3BlcnR5SW5wdXQoKX0pIGFuZCBsYWJlbCAoJHt0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpfSkgcHJvcGVydHkgc2V0dXAuYCwge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRHJvcGRvd25Db21wb25lbnRFcnJvcidcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNWYWx1ZVByb3BlcnR5SW5wdXQoKTtcbiAgICB9KTtcblxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5uZ01vZGVsVmFsdWUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29tYmluZUxhdGVzdChbdG9PYnNlcnZhYmxlKHRoaXMuZGF0YVByb3ZpZGVyKSwgdG9PYnNlcnZhYmxlKHRoaXMub3B0aW9ucyldKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuX2xvYWRpbmcuc2V0KHRydWUpKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKFtkYXRhUHJvdmlkZXIsIG9wdGlvbnNdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyU2VydmljZSA9IGRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSA/IHRoaXMuaW5qZWN0b3IuZ2V0PGFueT4oZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tbW9uc1RvT2JzZXJ2YWJsZShkYXRhUHJvdmlkZXIubG9va3VwKHtsaW1pdDogNTB9LCB0aGlzLmRhdGFQcm92aWRlclNlcnZpY2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihvcHRpb25zID8/IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChpdGVtcyA9PiB0aGlzLnRyYW5zZm9ybUl0ZW1zKGl0ZW1zKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuc2V0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RGaXJzdEl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZU9uSXRlbXNWYWx1ZVByb3BlcnR5VHlwZU1pc21hdGNoKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5zZXQoW10pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gZnJvbVN1YnNjcmliZUVycm9yKGVyciwgJ0Ryb3Bkb3duQ29tcG9uZW50RXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKGVycm9yLCBnZXRFcnJvckxvZ0xldmVsKGVycm9yKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VGbiA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWRGbiA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX2Rpc2FibGVkLnNldChpc0Rpc2FibGVkKSk7XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIHRoaXMgY2hlY2sgaXMgcmVxdWlyZWQgYmVjYXVzZSBhbmd1bGFyIGluIHNvbWUgY2FzZXMgd3JpdGVzIG51bGwgdmFsdWVcbiAgICAgICAgLy8gYmVmb3JlIHZhbHVlIGFjY2Vzc29yIGlzIGluaXRpYWxpemVkXG4gICAgICAgIC8vIGlmIGZvcm0gY29udHJvbCB2YWx1ZSBpcyBvZiBwcmltaXRpdmUgdHlwZSAoZXg6IGVudW1zKSB0aGVuIHdyaXRlIHZhbHVlIGlzIG5vdCBjYWxsZWQgKHdlIHRoaW5rKVxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCAmJiB0aGlzLl92YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gd3JpdGUgdmFsdWUgaW1tZWRpYXRlbHkgLSBpdCBpcyBpbXBvcnRhbnQgc28gdGhhdCBmaXJzdCBzZWxlY3QgaXMgbm90IHRyaWdnZXJlZCFcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZU9uSXRlbXNWYWx1ZVByb3BlcnR5VHlwZU1pc21hdGNoKHRydWUpO1xuICAgIH1cblxuICAgIG9uRHJvcGRvd25CbHVyKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duUGFuZWxTaG93bikge1xuICAgICAgICAgICAgLy8gaWdub3JlIHRoaXMgYmx1ciBldmVudFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByaW1lRHJvcGRvd24gPSB0aGlzLnByaW1lRHJvcGRvd24oKTtcbiAgICAgICAgaWYgKHRoaXMuY2hhbmdlVmFsdWVPbkJsdXIoKSAmJiBwcmltZURyb3Bkb3duKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZVZhbHVlQ2hhbmdlKHByaW1lRHJvcGRvd24udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICAgICAgdGhpcy5ibHVyLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uRHJvcGRvd25DaGFuZ2UoZXZlbnQ6IERyb3Bkb3duQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYW5nZVZhbHVlT25CbHVyKCkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlVmFsdWVDaGFuZ2UoZXZlbnQudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ecm9wZG93blBhbmVsU2hvdygpIHtcbiAgICAgICAgdGhpcy5pc0Ryb3Bkb3duUGFuZWxTaG93biA9IHRydWU7XG4gICAgfVxuXG4gICAgb25Ecm9wZG93blBhbmVsSGlkZSgpIHtcbiAgICAgICAgdGhpcy5pc0Ryb3Bkb3duUGFuZWxTaG93biA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uTXVsdGlzZWxlY3RDaGFuZ2UoZXZlbnQ6IE11bHRpU2VsZWN0Q2hhbmdlRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYW5nZVZhbHVlT25CbHVyKCkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlVmFsdWVDaGFuZ2UoZXZlbnQudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25NdWx0aXNlbGVjdEJsdXIoZXZlbnQ6IE11bHRpU2VsZWN0Qmx1ckV2ZW50KSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICAgICAgdGhpcy5ibHVyLmVtaXQoZXZlbnQub3JpZ2luYWxFdmVudCk7XG4gICAgfVxuXG4gICAgb25NdWx0aXNlbGVjdFBhbmVsSGlkZSgpIHtcbiAgICAgICAgY29uc3QgcHJpbWVNdWx0aXNlbGVjdCA9IHRoaXMucHJpbWVNdWx0aXNlbGVjdCgpO1xuICAgICAgICBpZiAodGhpcy5jaGFuZ2VWYWx1ZU9uQmx1cigpICYmIHByaW1lTXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlVmFsdWVDaGFuZ2UocHJpbWVNdWx0aXNlbGVjdC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdEZpcnN0SXRlbSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlyc3RUaW1lU2V0dGluZ0l0ZW1zICYmIHRoaXMuaXRlbXMoKS5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0Rmlyc3RJdGVtSW5wdXQoKSAmJiAhdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnNWYWx1ZVByb3BlcnR5ID0gdGhpcy5vcHRpb25zVmFsdWVQcm9wZXJ0eSgpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zVmFsdWVQcm9wZXJ0eSA/IHRoaXMuaXRlbXMoKVswXVtvcHRpb25zVmFsdWVQcm9wZXJ0eV0gOiB0aGlzLml0ZW1zKClbMF07XG4gICAgICAgICAgICB0aGlzLm5nTW9kZWxWYWx1ZS5zZXQodmFsdWUpOyAvLyBzZXQgdG8gd3JpdGUgZm9yIGlucHV0XG4gICAgICAgICAgICB0aGlzLmZpcnN0VGltZVNldHRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVWYWx1ZUNoYW5nZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRyYW5zZm9ybUl0ZW1zKGl0ZW1zOiBhbnlbXSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zTGFiZWxUcmFuc2xhdGUoKSkge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25LZXlzOiBzdHJpbmdbXSA9IGl0ZW1zLm1hcChcbiAgICAgICAgICAgICAgICBpdGVtID0+ICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgdGhpcy5vcHRpb25zTGFiZWxQcm9wZXJ0eUluaXQoKSA/IChpdGVtW3RoaXMub3B0aW9uc0xhYmVsUHJvcGVydHlJbml0KCkgYXMga2V5b2Ygb2JqZWN0XSBhcyBzdHJpbmcpIDogaXRlbSkgYXMgc3RyaW5nXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAodHJhbnNsYXRpb25LZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5zdHJlYW0odHJhbnNsYXRpb25LZXlzKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCh0cmFuc2xhdGlvbnMgPT5cbiAgICAgICAgICAgICAgICAgICAgaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiB0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5SW5pdCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtW3RoaXMub3B0aW9uc0xhYmVsUHJvcGVydHlJbml0KCkgYXMga2V5b2Ygb2JqZWN0XSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRyYW5zbGF0aW9uc1tsYWJlbF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Li4uaXRlbSwgW3RoaXMub3B0aW9uc0xhYmVsUHJvcGVydHkoKSFdOiB0cmFuc2xhdGlvbn07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Li4uaXRlbX07XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25zW2l0ZW1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGlzLm9wdGlvbnNMYWJlbFByb3BlcnR5KCkhXTogdHJhbnNsYXRpb24gPz8gaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXMub3B0aW9uc1ZhbHVlUHJvcGVydHkoKSFdOiBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9mKGl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRqdXN0VmFsdWVPbkl0ZW1zVmFsdWVQcm9wZXJ0eVR5cGVNaXNtYXRjaChzZXROZ01vZGVsVmFsdWUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBvcHRpb25zVmFsdWVQcm9wID0gdGhpcy5vcHRpb25zVmFsdWVQcm9wZXJ0eSgpO1xuICAgICAgICBpZiAob3B0aW9uc1ZhbHVlUHJvcCAmJiB0aGlzLl92YWx1ZSAhPSBudWxsICYmIHRoaXMuaXRlbXMoKS5sZW5ndGggPiAwICYmIHRoaXMuaXRlbXMoKVswXVtvcHRpb25zVmFsdWVQcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLl92YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUubGVuZ3RoID4gMCAmJiB0eXBlb2YgdGhpcy5pdGVtcygpWzBdW29wdGlvbnNWYWx1ZVByb3BdICE9PSB0eXBlb2YgdGhpcy5fdmFsdWVbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nVmFsdWVzID0gdGhpcy5fdmFsdWUubWFwKHYgPT4gdi50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zID0gdGhpcy5pdGVtcygpLmZpbHRlcihpID0+IGlbb3B0aW9uc1ZhbHVlUHJvcF0gIT0gbnVsbCAmJiBzdHJpbmdWYWx1ZXMuaW5jbHVkZXMoaVtvcHRpb25zVmFsdWVQcm9wXS50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsVmFsdWUuc2V0KHNlbGVjdGVkT3B0aW9ucy5tYXAoaSA9PiBpW29wdGlvbnNWYWx1ZVByb3BdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLml0ZW1zKClbMF1bb3B0aW9uc1ZhbHVlUHJvcF0gIT09IHR5cGVvZiB0aGlzLl92YWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIHR5cGVzIGRvbnQgbWF0Y2gsIHNlYXJjaCBhbmQgY29tcGFyZSBieSBzdHJpbmdcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHRoaXMuaXRlbXMoKS5maW5kKGkgPT4gaVtvcHRpb25zVmFsdWVQcm9wXSAhPSBudWxsICYmIGlbb3B0aW9uc1ZhbHVlUHJvcF0udG9TdHJpbmcoKSA9PT0gdGhpcy5fdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbFZhbHVlLnNldChzZWxlY3RlZE9wdGlvbltvcHRpb25zVmFsdWVQcm9wXSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2V0TmdNb2RlbFZhbHVlKSB7XG4gICAgICAgICAgICAvLyBmb3JjZSB3cml0ZSB0byBuZ01vZGVsVmFsdWUgYW55d2F5XG4gICAgICAgICAgICB0aGlzLm5nTW9kZWxWYWx1ZS5zZXQodGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9wYWdhdGVWYWx1ZUNoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25DaGFuZ2VGbih2YWx1ZSk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxufVxuIiwiQGlmICghbXVsdGlzZWxlY3QoKSkge1xuICAgIDxwLWRyb3Bkb3duXG4gICAgICAgIFtuZ01vZGVsXT1cIm5nTW9kZWxWYWx1ZSgpXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKClcIlxuICAgICAgICBbZGF0YUtleV09XCJvcHRpb25zVHJhY2tQcm9wZXJ0eSgpXCJcbiAgICAgICAgW29wdGlvbkxhYmVsXT1cIm9wdGlvbnNMYWJlbFByb3BlcnR5KClcIlxuICAgICAgICBbb3B0aW9uVmFsdWVdPVwib3B0aW9uc1ZhbHVlUHJvcGVydHkoKVwiXG4gICAgICAgIFtvcHRpb25EaXNhYmxlZF09XCJvcHRpb25zRGlzYWJsZWRQcm9wZXJ0eSgpXCJcbiAgICAgICAgW29wdGlvbnNdPVwiaXRlbXMoKVwiXG4gICAgICAgIFtzaG93Q2xlYXJdPVwic2hvd0NsZWFyKClcIlxuICAgICAgICBbc3R5bGVDbGFzc109XCJjbGFzc05hbWUoKVwiXG4gICAgICAgIFtwYW5lbFN0eWxlQ2xhc3NdPVwiZHJvcGRvd25DbGFzc05hbWUoKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgICAgICAgKG9uQmx1cik9XCJvbkRyb3Bkb3duQmx1cigkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2hhbmdlKT1cIm9uRHJvcGRvd25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChvblNob3cpPVwib25Ecm9wZG93blBhbmVsU2hvdygpXCJcbiAgICAgICAgKG9uSGlkZSk9XCJvbkRyb3Bkb3duUGFuZWxIaWRlKClcIlxuICAgICAgICBbZHJvcGRvd25JY29uXT1cImxvYWRpbmcoKSA/ICdwaSBwaS1zcGlubmVyIHBpLXNwaW4nIDogJ3BpIHBpLWNoZXZyb24tZG93bidcIlxuICAgICAgICBbYXBwZW5kVG9dPVwiYXBwZW5kVG8oKVwiPlxuICAgIDwvcC1kcm9wZG93bj5cbn0gQGVsc2Uge1xuICAgIDxwLW11bHRpU2VsZWN0XG4gICAgICAgIFtuZ01vZGVsXT1cIm5nTW9kZWxWYWx1ZSgpXCJcbiAgICAgICAgW21heFNlbGVjdGVkTGFiZWxzXT1cIjFcIlxuICAgICAgICBbc2VsZWN0ZWRJdGVtc0xhYmVsXT1cIidtbmdEcm9wZG93bi5tdWx0aXNlbGVjdE92ZXJNYXhEaXNwbGF5TGltaXQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKClcIlxuICAgICAgICBbZGF0YUtleV09XCJvcHRpb25zVHJhY2tQcm9wZXJ0eSgpXCJcbiAgICAgICAgW29wdGlvbkxhYmVsXT1cIm9wdGlvbnNMYWJlbFByb3BlcnR5KClcIlxuICAgICAgICBbb3B0aW9uVmFsdWVdPVwib3B0aW9uc1ZhbHVlUHJvcGVydHkoKVwiXG4gICAgICAgIFtvcHRpb25EaXNhYmxlZF09XCJvcHRpb25zRGlzYWJsZWRQcm9wZXJ0eSgpXCJcbiAgICAgICAgW29wdGlvbnNdPVwiaXRlbXMoKVwiXG4gICAgICAgIFtzdHlsZUNsYXNzXT1cImNsYXNzTmFtZSgpXCJcbiAgICAgICAgW3BhbmVsU3R5bGVDbGFzc109XCJkcm9wZG93bkNsYXNzTmFtZSgpXCJcbiAgICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcbiAgICAgICAgW3Nob3dUb2dnbGVBbGxdPVwiZmFsc2VcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgICAgIChvbkNoYW5nZSk9XCJvbk11bHRpc2VsZWN0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAob25QYW5lbEhpZGUpPVwib25NdWx0aXNlbGVjdFBhbmVsSGlkZSgpXCJcbiAgICAgICAgKG9uQmx1cik9XCJvbk11bHRpc2VsZWN0Qmx1cigkZXZlbnQpXCJcbiAgICAgICAgYXBwZW5kVG89XCJib2R5XCI+XG4gICAgPC9wLW11bHRpU2VsZWN0PlxufVxuIl19
|
|
@@ -130,6 +130,12 @@ export class TableDescriptorInst {
|
|
|
130
130
|
get rowExpandableProperty() {
|
|
131
131
|
return this._rowExpandableProperty;
|
|
132
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* This property is used to define the type of the custom component that will be used to render the expanded row.
|
|
135
|
+
*/
|
|
136
|
+
get rowExpandableComponentType() {
|
|
137
|
+
return this._rowExpandableComponentType;
|
|
138
|
+
}
|
|
133
139
|
/**
|
|
134
140
|
* Track property is used for the purpose of combined saving user preferences in localstorage if 2 tables have the same track properties they will share the same localstorage entry.
|
|
135
141
|
* Similarly, this property can also be used to differentiate two tables of the same model on the same url (so that they have separate entries in localstorage).
|
|
@@ -453,7 +459,7 @@ export class TableDescriptorInst {
|
|
|
453
459
|
this._localizationLocaleProperty = localizationLocaleProperty;
|
|
454
460
|
return this;
|
|
455
461
|
}
|
|
456
|
-
withRowExpandable(property, colSpan) {
|
|
462
|
+
withRowExpandable(property, colSpan, componentType) {
|
|
457
463
|
this._rowExpandable = true;
|
|
458
464
|
if (property) {
|
|
459
465
|
this._rowExpandableProperty = property;
|
|
@@ -461,6 +467,9 @@ export class TableDescriptorInst {
|
|
|
461
467
|
if (colSpan) {
|
|
462
468
|
this._rowExpandableColSpan = colSpan;
|
|
463
469
|
}
|
|
470
|
+
if (componentType) {
|
|
471
|
+
this._rowExpandableComponentType = componentType;
|
|
472
|
+
}
|
|
464
473
|
return this;
|
|
465
474
|
}
|
|
466
475
|
withRowReorderable(reordable = true) {
|
|
@@ -490,6 +499,7 @@ export class TableDescriptorInst {
|
|
|
490
499
|
obj._rowExpandable = this._rowExpandable;
|
|
491
500
|
obj._rowExpandableColSpan = this._rowExpandableColSpan;
|
|
492
501
|
obj._rowExpandableProperty = this._rowExpandableProperty;
|
|
502
|
+
obj._rowExpandableComponentType = this._rowExpandableComponentType;
|
|
493
503
|
obj._rowReorderable = this._rowReorderable;
|
|
494
504
|
}
|
|
495
505
|
copy() {
|
|
@@ -645,4 +655,4 @@ export class TableDynamicDescriptorInst extends TableDescriptorInst {
|
|
|
645
655
|
return descriptor;
|
|
646
656
|
}
|
|
647
657
|
}
|
|
648
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxlL2FwaS9zcmMvZGVzY3JpcHRvcnMvdGFibGUuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsb0JBQW9CLEVBQTJFLGlCQUFpQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDN0osT0FBTyxFQUFDLGdCQUFnQixFQUF5QixzQkFBc0IsRUFBRSwwQkFBMEIsRUFBRSxjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUcxSixPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRixPQUFPLEVBQXdCLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRTdFLE9BQU8sRUFBQywyQkFBMkIsRUFBMkIsYUFBYSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDMUcsT0FBTyxFQUFDLGdCQUFnQixFQUFFLHVCQUF1QixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDOUUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE1BQU0sT0FBTyxtQkFBbUI7SUFvRDVCLFlBQW1CLEtBQWtDLEVBQUUsYUFBYSxHQUFHLEtBQUs7UUF6Q2xFLGFBQVEsR0FBNkMsRUFBRSxDQUFDO1FBRTFELGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXBCLGlCQUFZLEdBQWtCLGVBQWUsQ0FBQztRQUV0RCxRQUFRO1FBQ0EsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0Qix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFPckMsVUFBVTtRQUNGLFVBQUssR0FBa0IsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUMzQyxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBT3hCLGdCQUFnQjtRQUNSLGFBQVEsR0FBd0MsRUFBRSxDQUFDO1FBQ25ELFdBQU0sR0FBaUMsRUFBRSxDQUFDO1FBRWxELGVBQWU7UUFDUCxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUc3QixhQUFhO1FBQ0wsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsMEJBQXFCLEdBQUcsR0FBRyxDQUFDO1FBR3BDLGNBQWM7UUFDTixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUc1QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQzdDLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDckIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNsQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFXLHFCQUFxQjtRQUM1QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLG1CQUFtQjtRQUMxQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBVyxnQkFBZ0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsaUJBQWlCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFXLHFCQUFxQjtRQUM1QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBVyxrQkFBa0I7UUFDekIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN0QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVywwQkFBMEI7UUFDakMsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQVcsY0FBYztRQUNyQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVcsYUFBYTtRQUNwQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsb0JBQW9CO1FBQzNCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcscUJBQXFCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksY0FBYyxDQUFDLFVBQWtCO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxRQUEyQjtRQUNoRCxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFrQixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVNLHVCQUF1QixDQUFDLFFBQWlCO1FBQzVDLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxTQUFTLENBQUMsUUFBMEI7UUFDdkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQWtCLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sZUFBZSxDQUFDLFFBQWdCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUN4RSxDQUFDO0lBRU0sWUFBWSxDQUFDLFFBQTBCO1FBQzFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFrQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLGtCQUFrQixDQUFDLFFBQWdCO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVNLFVBQVUsQ0FBeUMsTUFBOEQ7UUFDcEgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFNBQVMsQ0FBdUMsUUFBcUI7UUFDeEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBNEUsUUFBa0IsQ0FBQyxDQUFDO1FBQ25JLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxhQUFhLENBQTBGLFFBQXFCLEVBQUUsUUFBOEI7UUFDL0osTUFBTSxNQUFNLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBNEMsUUFBa0IsQ0FBQyxDQUFDO1FBQ25HLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVNLGVBQWUsQ0FBd0IsUUFBZ0I7UUFDMUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBMEIsUUFBUSxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVNLFdBQVcsQ0FBQyxHQUFHLFVBQWdDO1FBQ2xELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLHFCQUFxQixDQUFDLEdBQUcsV0FBZ0Q7UUFDNUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sa0JBQWtCLENBQUMsY0FBdUM7UUFDN0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLGVBQWUsQ0FBQyxJQUFZLEVBQUUsT0FBdUI7UUFDeEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sU0FBUyxDQUFDLEtBQXlCO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBRXBCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxjQUFjLENBQUMsVUFBVSxHQUFHLElBQUk7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFdBQVcsQ0FBQyxJQUFhLEVBQUUsSUFBb0I7UUFDbEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNoRSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksNkJBQTZCLENBQUMsa0JBQWtCLEdBQUcsSUFBSTtRQUMxRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM3QixHQUFHLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSSw0QkFBNEIsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJO1FBQ3hELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdCLEdBQUcsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLE9BQU8sQ0FBQyxRQUFlO1FBQzFCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFrQixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLGFBQWEsQ0FBQyxRQUFnQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDbEUsQ0FBQztJQUVNLFVBQVUsQ0FBQyxRQUFlO1FBQzdCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQWtCLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsUUFBZ0I7UUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU0sT0FBTyxDQUFDLFFBQWUsRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUFFLFNBQW1CO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFrQixFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU0sYUFBYSxDQUFDLFFBQWdCLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxTQUFtQjtRQUN6RSxNQUFNLElBQUksR0FBRyxJQUFJLGNBQWMsQ0FBYSxRQUFRLENBQUMsQ0FBQztRQUN0RCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ1osTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU07aUJBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDL0IsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sUUFBUSxDQUFDLFFBQWUsRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUFFLFNBQW1CO1FBQ25FLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFrQixFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU0sY0FBYyxDQUFDLFFBQWdCLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxTQUFtQjtRQUMxRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLGVBQWUsQ0FBQyxRQUFlLEVBQUUsU0FBbUIsRUFBRSxLQUFjLEVBQUUsT0FBaUI7UUFDMUYsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBa0IsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxRQUFnQixFQUFFLFNBQW1CLEVBQUUsS0FBYyxFQUFFLE9BQWlCO1FBQ2pHLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDUixJQUFJLEdBQUcsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFNBQVMsQ0FBQyxHQUFHLFVBQW1CO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFJLFVBQXVCLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU0sZUFBZSxDQUFDLEdBQUcsVUFBb0I7UUFDMUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFNBQVMsQ0FBQyxRQUFpQjtRQUM5QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBa0IsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxlQUFlLENBQUMsUUFBZ0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ3BFLENBQUM7SUFFTSxZQUFZLENBQUMsUUFBaUI7UUFDakMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBa0IsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxRQUFnQjtRQUN0QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxTQUFTLENBQStFLFFBQWlCO1FBQzVHLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBYyxRQUFrQixDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVNLGVBQWUsQ0FBYyxRQUFnQjtRQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFJLGdCQUFnQixDQUEwQixRQUFRLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU0sZUFBZSxDQUNsQixRQUFpQixFQUNqQixRQUFvRCxFQUNwRCxvQkFBd0M7UUFFeEMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBa0IsRUFBRSxRQUFRLEVBQUUsb0JBQThCLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRU0scUJBQXFCLENBQW1DLFFBQWdCLEVBQUUsUUFBb0QsRUFBRSxvQkFBNkI7UUFDaEssTUFBTSxNQUFNLEdBQUcsSUFBSSxzQkFBc0IsQ0FBbUMsUUFBUSxFQUFFO1lBQ2xGLFlBQVksRUFBRSxRQUFRO1lBQ3RCLG9CQUFvQixFQUFFLG9CQUFvQjtTQUM3QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU0sbUJBQW1CLENBQU8sUUFBaUIsRUFBRSxRQUE4QixFQUFFLE9BQXFCO1FBQ3JHLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFPLFFBQWtCLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFTSx5QkFBeUIsQ0FBMEIsUUFBZ0IsRUFBRSxRQUE4QixFQUFFLE9BQXFCO1FBQzdILE1BQU0sTUFBTSxHQUFHLElBQUksMEJBQTBCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU0sbUJBQW1CLENBQUMsUUFBNEMsRUFBRSxXQUFtQyxFQUFFLFdBQVcsR0FBRyxLQUFLO1FBQzdILE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQWtCLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxHQUFHLFVBQWdEO1FBQzdFLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLEdBQUksVUFBdUIsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTSw0QkFBNEIsQ0FBQyxHQUFHLFVBQW9CO1FBQ3ZELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLHlCQUF5QixDQUFDLFFBQWdCLEVBQUUsV0FBbUMsRUFBRSxXQUFXLEdBQUcsS0FBSztRQUN2RyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyx3Q0FBd0MsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM3RSxJQUFJLFdBQVcsSUFBSSxJQUFJO1lBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3RCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU0sbUNBQW1DLENBQ3RDLE1BQThELEVBQzlELFdBQVcsR0FBRyxLQUFLO1FBRW5CLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBa0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlFLElBQUksVUFBMEIsQ0FBQztRQUUvQixRQUFRLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QixLQUFLLGNBQWMsQ0FBQyxNQUFNO2dCQUN0QixVQUFVLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztnQkFDbkMsTUFBTTtZQUNWLEtBQUssY0FBYyxDQUFDLE9BQU87Z0JBQ3ZCLFVBQVUsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDO2dCQUNwQyxNQUFNO1lBQ1YsS0FBSyxjQUFjLENBQUMsSUFBSTtnQkFDcEIsVUFBVSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLE1BQU07WUFDVixLQUFLLGNBQWMsQ0FBQyxJQUFJO2dCQUNwQixJQUFJLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDOUIsZ0JBQWdCLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDaEYsVUFBVSxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUM7Z0JBQzNDLENBQUM7cUJBQU0sQ0FBQztvQkFDSixVQUFVLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztnQkFDdkMsQ0FBQztnQkFDRCxNQUFNO1lBQ1YsS0FBSyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQzNCLEtBQUssY0FBYyxDQUFDLE1BQU0sQ0FBQztZQUMzQjtnQkFDSSxVQUFVLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztnQkFDbkMsTUFBTTtRQUNkLENBQUM7UUFFRCxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxjQUFjLENBQUMsTUFBTSxJQUFJLFVBQVUsS0FBSyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFckMsT0FBTyxnQkFBZ0IsQ0FBQztJQUM1QixDQUFDO0lBRU0sVUFBVSxDQUFjLFFBQWlCLEVBQUUsTUFBaUQ7UUFDL0YsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxvQkFBb0IsUUFBUSxxQ0FBcUMsTUFBTSxDQUFDLFFBQVEsaUJBQWlCLENBQUMsQ0FBQztRQUN0SSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQWMsTUFBTSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVNLGdCQUFnQixDQUFjLE1BQWlEO1FBQ2xGLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxhQUFhLENBQUMsU0FBaUI7UUFDbEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxPQUFzQixhQUFhLENBQUMsTUFBTTtRQUN0RCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0seUJBQXlCLENBQUMscUJBQTZCO1FBQzFELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxxQkFBcUIsQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sYUFBYSxDQUFDLFNBQWlCO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxTQUFTLENBQUMsS0FBYztRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sYUFBYSxDQUFDLFNBQWtCO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksb0JBQW9CLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxFQUFFLG1CQUFxQyxLQUFLO1FBQzNGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUM3QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0IsQ0FBQyxxQkFBK0IsRUFBRSxrQkFBNEI7UUFDakYsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixDQUFDO1FBQ3BELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQztRQUM5QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsWUFBcUIsRUFBRSxjQUFrRTtRQUM3RyxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztRQUNsQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsY0FBYyxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxlQUF1QjtRQUM5QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxhQUFhO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSw4QkFBOEIsQ0FBQywwQkFBa0M7UUFDcEUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLDJCQUEyQixHQUFHLDBCQUEwQixDQUFDO1FBQzlELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxRQUEyQixFQUFFLE9BQWdCO1FBQ2xFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksUUFBUSxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsUUFBa0IsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUM7UUFDekMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxTQUFTLEdBQUcsSUFBSTtRQUMvQixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRVMsWUFBWSxDQUFDLEdBQXVDO1FBQzFELEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QixHQUFHLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbkMsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRCxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN2QixHQUFHLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1FBQ3pELEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDL0IsR0FBRyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3ZDLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDckQsR0FBRyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUMvQyxHQUFHLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ25ELEdBQUcsQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDekQsR0FBRyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3JDLEdBQUcsQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUM7UUFDbkUsR0FBRyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzNDLEdBQUcsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDbkQsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDdkQsR0FBRyxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztRQUN6RCxHQUFHLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDL0MsQ0FBQztJQUVNLElBQUk7UUFDUCxNQUFNLFVBQVUsR0FBRyxJQUFJLG1CQUFtQixDQUE2QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEQsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLDBCQUEyQixTQUFRLG1CQUF3QjtJQVNwRSxZQUFtQixLQUEyQjtRQUMxQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFUVCxxQkFBZ0IsR0FBa0IsRUFBRSxDQUFDO1FBQ3JDLG1CQUFjLEdBQWtCLEVBQUUsQ0FBQztRQUNuQyxpQkFBWSxHQUFrQixFQUFFLENBQUM7UUFDakMsb0JBQWUsR0FBRywyQkFBMkIsQ0FBQyxPQUFPLENBQUM7UUFDdEQsc0JBQWlCLEdBQUcsMkJBQTJCLENBQUMsT0FBTyxDQUFDO1FBRTdDLGFBQVEsR0FBOEIsRUFBRSxDQUFDO1FBS3hELElBQUksT0FBTyxLQUFLLENBQUMsYUFBYSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBb0IsT0FBTztRQUN2QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLG1CQUFtQixDQUFDLGNBQXdCO1FBQy9DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxjQUFjLENBQUM7UUFDdkMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxlQUFlLENBQUMsYUFBdUIsRUFBRSxjQUFjLEdBQUcsMkJBQTJCLENBQUMsWUFBWTtRQUNyRyxJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLGFBQWEsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGlCQUFpQixDQUFDLGNBQXdCLEVBQUUsZ0JBQWdCLEdBQUcsMkJBQTJCLENBQUMsWUFBWTtRQUMxRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7UUFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsSUFBb0IsRUFBRSxXQUFtQyxFQUFFLEdBQUcsSUFBVztRQUNuSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEgsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNULE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGVBQWUsQ0FBQyxRQUFnQixFQUFFLEtBQWE7UUFDbEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHlCQUF5QixDQUFDLElBQW9CO1FBQ2pELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRWpELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0MsT0FBTyxlQUFlLENBQUM7UUFDM0IsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxDQUFDO2FBQ3pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN2RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMseUJBQXlCO1FBRTVFLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDbkUsSUFBSSxNQUFrQyxDQUFDO1lBQ3ZDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDekIsU0FBUztnQkFDYixDQUFDO2dCQUNELE1BQU0sR0FBRyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDekMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RCwyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0MsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM3RCxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlHLENBQUM7WUFFRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6RSxJQUNJLENBQUMsSUFBSSxDQUFDLGVBQWUsS0FBSywyQkFBMkIsQ0FBQyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztnQkFDdkYsQ0FBQyxJQUFJLENBQUMsZUFBZSxLQUFLLDJCQUEyQixDQUFDLFlBQVksSUFBSSxvQkFBb0IsQ0FBQyxFQUM3RixDQUFDO2dCQUNDLGVBQWUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFFRCxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3RSxJQUNJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEtBQUssMkJBQTJCLENBQUMsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7b0JBQ3hGLENBQUMsSUFBSSxDQUFDLGlCQUFpQixLQUFLLDJCQUEyQixDQUFDLFlBQVksSUFBSSxzQkFBc0IsQ0FBQyxDQUFDLEVBQ3RHLENBQUM7Z0JBQ0MsZUFBZSxDQUFDLG1DQUFtQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RSxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDYSxTQUFTLENBQUMsUUFBbUI7UUFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxRQUFrQixDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVlLFlBQVksQ0FBQyxRQUFtQjtRQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvRixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNhLElBQUk7UUFDaEIsTUFBTSxVQUFVLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEQsVUFBVSxDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RCxVQUFVLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckQsVUFBVSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pELFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDdEQsVUFBVSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ2xELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxpQkFBaUI7UUFDcEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxtQkFBbUIsQ0FBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yLCBEYXRhTGlzdFJlc3VsdCwgRW51bUNvbnN0YW50VHlwZSwgSUxvb2t1cERhdGFQcm92aWRlciwgSVRhYmxlRGVzY3JpcHRvciwgZmxhdHRlbk9iamVjdEtleXN9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0ZpbHRlckRlc2NyaXB0b3IsIEZpbHRlckRpc3BsYXlUeXBlRW51bSwgRmlsdGVyTG9va3VwRGVzY3JpcHRvciwgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3IsIEZpbHRlclR5cGVFbnVtfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2ZpbHRlcic7XG5pbXBvcnQge0VudW1EZXNjcmlwdG9yLCBNb2RlbERlc2NyaXB0b3J9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuXG5pbXBvcnQge2NvbHVtblRvRGF0ZU51bWJlck9yQm9vbGVhbn0gZnJvbSAnLi4vaGVscGVycy9jbGFzcy1hdHRyaWJ1dGUtY29udmVydGVyJztcbmltcG9ydCB7Q29sdW1uRGlzcGxheVR5cGVFbnVtLCBDb2x1bW5UeXBlRW51bX0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbi5tb2RlbCc7XG5pbXBvcnQge0lDb2x1bW5zTWFuYWdlSW50ZXJmYWNlfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtY29sdW1ucy5tb2RlbCc7XG5pbXBvcnQge1RhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bSwgVGFibGVQYWdpbmF0aW9uTW9kZUVudW0sIFRhYmxlU2l6ZUVudW19IGZyb20gJy4uL21vZGVscy90YWJsZS5tb2RlbCc7XG5pbXBvcnQge0NvbHVtbkRlc2NyaXB0b3IsIENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yfSBmcm9tICcuL2NvbHVtbi5kZXNjcmlwdG9yJztcbmltcG9ydCB7U29ydERlc2NyaXB0b3J9IGZyb20gJy4vc29ydC5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGNsYXNzIFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGVNb2RlbCwgU29ydHMgPSBrZXlvZiBUYWJsZU1vZGVsLCBGaWx0ZXJzID0ga2V5b2YgVGFibGVNb2RlbD5cbiAgICBpbXBsZW1lbnRzIElUYWJsZURlc2NyaXB0b3I8VGFibGVNb2RlbCwgU29ydHMsIEZpbHRlcnM+LCBJQ29sdW1uc01hbmFnZUludGVyZmFjZTxUYWJsZU1vZGVsLCBTb3J0cywgRmlsdGVycz5cbntcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tb2RlbDogTW9kZWxEZXNjcmlwdG9yPFRhYmxlTW9kZWw+O1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfYXV0b0dlbmVyYXRlZDtcblxuICAgIHByaXZhdGUgX2lkZW50aWZpZXI/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfdHJhY2tQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcml2YXRlIF9wYWdpbmF0aW9uTW9kZT86IFRhYmxlUGFnaW5hdGlvbk1vZGVFbnVtO1xuICAgIHByaXZhdGUgX3Jvd3NQZXJQYWdlT3B0aW9ucz86IG51bWJlcltdO1xuICAgIHByaXZhdGUgX2RlZmF1bHROdW1Sb3dzPzogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBfY29sdW1uczogQXJyYXk8Q29sdW1uRGVzY3JpcHRvcjxhbnksIFRhYmxlTW9kZWw+PiA9IFtdO1xuICAgIHByaXZhdGUgX3RpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2hpZGVIZWFkZXIgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9sb2FkaW5nVGV4dD86IHN0cmluZztcbiAgICBwcml2YXRlIF9sb2FkaW5nSWNvbjogc3RyaW5nIHwgbnVsbCA9ICdwaSBwaS1zcGlubmVyJztcblxuICAgIC8vIGV4dHJhXG4gICAgcHJpdmF0ZSBfaGFzSG92ZXIgPSB0cnVlO1xuICAgIHByaXZhdGUgX2hhc0dyaWRsaW5lcyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2hhc1Jlc2l6YWJsZUNvbHVtbnMgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9jb2x1bW5SZXNpemVNb2RlPzogJ2ZpdCcgfCAnZXhwYW5kJztcblxuICAgIC8vIHNwZWNpYWwgY29sdW1uc1xuICAgIHByaXZhdGUgX3NlbGVjdGlvbkNvbHVtbkZyb3plbj86IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfYWN0aW9uQ29sdW1uRnJvemVuPzogYm9vbGVhbjtcblxuICAgIC8vIHN0eWxpbmdcbiAgICBwcml2YXRlIF9zaXplOiBUYWJsZVNpemVFbnVtID0gVGFibGVTaXplRW51bS5MYXJnZTtcbiAgICBwcml2YXRlIF9jbGFzc05hbWUgPSAnJztcbiAgICBwcml2YXRlIF9oZWFkZXJDbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfcm93Q2xhc3NOYW1lPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3Jvd0NsYXNzTmFtZU1hcEZuPzogKGNsYXNzTmFtZT86IHN0cmluZywgaXRlbT86IFRhYmxlTW9kZWwpID0+IHN0cmluZztcbiAgICBwcml2YXRlIF90YWJsZUZ1bGxIZWlnaHRPZmZzZXQ/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfcm93SGVpZ2h0PzogbnVtYmVyO1xuXG4gICAgLy8gZmlsdGVycyZzb3J0c1xuICAgIHByaXZhdGUgX2ZpbHRlcnM6IEZpbHRlckRlc2NyaXB0b3I8YW55LCBUYWJsZU1vZGVsPltdID0gW107XG4gICAgcHJpdmF0ZSBfc29ydHM6IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+W10gPSBbXTtcblxuICAgIC8vIGxvY2FsaXphdGlvblxuICAgIHByaXZhdGUgX2lzTG9jYWxpemVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk/OiBzdHJpbmc7XG5cbiAgICAvLyByb3cgZXhwYW5kXG4gICAgcHJpdmF0ZSBfcm93RXhwYW5kYWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3Jvd0V4cGFuZGFibGVDb2xTcGFuID0gMTAwO1xuICAgIHByaXZhdGUgX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eT86IHN0cmluZztcblxuICAgIC8vIHJvdyByZW9yZGVyXG4gICAgcHJpdmF0ZSBfcm93UmVvcmRlcmFibGUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPFRhYmxlTW9kZWw+LCBhdXRvR2VuZXJhdGVkID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgICAgICAgdGhpcy5fdHJhY2tQcm9wZXJ0eSA9IHRoaXMuX21vZGVsLmlkUHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2F1dG9HZW5lcmF0ZWQgPSBhdXRvR2VuZXJhdGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaWRlbnRpZmllcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkZW50aWZpZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0cmFja1Byb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhY2tQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhZ2luYXRpb25Nb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbk1vZGU7XG4gICAgfVxuXG4gICAgZ2V0IHJvd3NQZXJQYWdlT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd3NQZXJQYWdlT3B0aW9ucztcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdE51bVJvd3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0TnVtUm93cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhpZGVIZWFkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlSGVhZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9hZGluZ1RleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkaW5nVGV4dDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmdJY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZ0ljb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWx0ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNvcnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc29ydHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJsZUZ1bGxIZWlnaHRPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dIZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNIb3ZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0hvdmVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzR3JpZGxpbmVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzR3JpZGxpbmVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzUmVzaXphYmxlQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1Jlc2l6YWJsZUNvbHVtbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5SZXNpemVNb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uUmVzaXplTW9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0NsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0NsYXNzTmFtZU1hcEZuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93Q2xhc3NOYW1lTWFwRm47XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWxlY3Rpb25Db2x1bW5Gcm96ZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Db2x1bW5Gcm96ZW47XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3Rpb25Db2x1bW5Gcm96ZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3Rpb25Db2x1bW5Gcm96ZW47XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoZWFkZXJDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0xvY2FsaXplZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTG9jYWxpemVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd1Jlb3JkZXJhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93UmVvcmRlcmFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dFeHBhbmRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93RXhwYW5kYWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0V4cGFuZGFibGVDb2xTcGFuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93RXhwYW5kYWJsZUNvbFNwYW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyB0YWJsZSBtb2RlbCBwcm9wZXJ0eSB0ZWxscyB1cyBpZiB0aGUgc3BlY2lmaWMgcm93IHNob3VsZCBiZSBleHBhbmRhYmxlIG9yIG5vdCBiYXNlZCBvbiByb3cgaXRlbSB2YWx1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcm93RXhwYW5kYWJsZVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93RXhwYW5kYWJsZVByb3BlcnR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYWNrIHByb3BlcnR5IGlzIHVzZWQgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbWJpbmVkIHNhdmluZyB1c2VyIHByZWZlcmVuY2VzIGluIGxvY2Fsc3RvcmFnZSBpZiAyIHRhYmxlcyBoYXZlIHRoZSBzYW1lIHRyYWNrIHByb3BlcnRpZXMgdGhleSB3aWxsIHNoYXJlIHRoZSBzYW1lIGxvY2Fsc3RvcmFnZSBlbnRyeS5cbiAgICAgKiBTaW1pbGFybHksIHRoaXMgcHJvcGVydHkgY2FuIGFsc28gYmUgdXNlZCB0byBkaWZmZXJlbnRpYXRlIHR3byB0YWJsZXMgb2YgdGhlIHNhbWUgbW9kZWwgb24gdGhlIHNhbWUgdXJsIChzbyB0aGF0IHRoZXkgaGF2ZSBzZXBhcmF0ZSBlbnRyaWVzIGluIGxvY2Fsc3RvcmFnZSkuXG4gICAgICogQHBhcmFtIGlkZW50aWZpZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aElkZW50aWZpZXIoaWRlbnRpZmllcjogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRyYWNrUHJvcGVydHkocHJvcGVydHk/OiBrZXlvZiBUYWJsZU1vZGVsKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhUcmFja1Byb3BlcnR5VW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUcmFja1Byb3BlcnR5VW5zYWZlKHByb3BlcnR5Pzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RyYWNrUHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbHVtbihwcm9wZXJ0eToga2V5b2YgVGFibGVNb2RlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb2x1bW5VbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29sdW1uVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlQ29sdW1uKHByb3BlcnR5OiBrZXlvZiBUYWJsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ29sdW1uVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUNvbHVtblVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbklkeCA9IHRoaXMuX2NvbHVtbnMuZmluZEluZGV4KGMgPT4gYy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnNwbGljZShjb2x1bW5JZHgsIDEpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ29sdW1uPENvbHVtbk1vZGVsLCBDb2x1bW5WYWx1ZSA9IENvbHVtbk1vZGVsPihjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWwsIENvbHVtblZhbHVlPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbjxQcm9wZXJ0eUtleSBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWw+KHByb3BlcnR5OiBQcm9wZXJ0eUtleSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxOb25OdWxsYWJsZTxUYWJsZU1vZGVsW1Byb3BlcnR5S2V5XT4sIFRhYmxlTW9kZWwsIFRhYmxlTW9kZWxbUHJvcGVydHlLZXldPihwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ29sdW1uRW51bTxQcm9wZXJ0eUtleSBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwsIEVudW0gZXh0ZW5kcyBOb25OdWxsYWJsZTxUYWJsZU1vZGVsW1Byb3BlcnR5S2V5XT4+KHByb3BlcnR5OiBQcm9wZXJ0eUtleSwgZW51bURlc2M6IEVudW1EZXNjcmlwdG9yPEVudW0+KSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yPEVudW0sIFRhYmxlTW9kZWwsIFRhYmxlTW9kZWxbUHJvcGVydHlLZXldPihwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgICAgICBjb2x1bW4uYXNFbnVtVW5zYWZlKGVudW1EZXNjKTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtblVuc2FmZTxDb2x1bW5Nb2RlbCA9IHVua25vd24+KHByb3BlcnR5OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsPihwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ29sdW1ucyguLi5wcm9wZXJ0aWVzOiAoa2V5b2YgVGFibGVNb2RlbClbXSk6IHRoaXMge1xuICAgICAgICBwcm9wZXJ0aWVzLmZvckVhY2gocCA9PiB0aGlzLmFkZENvbHVtbihwKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ29sdW1uRGVzY3JpcHRvcnMoLi4uZGVzY3JpcHRvcnM6IENvbHVtbkRlc2NyaXB0b3I8YW55LCBUYWJsZU1vZGVsPltdKTogdGhpcyB7XG4gICAgICAgIGRlc2NyaXB0b3JzLmZvckVhY2goZCA9PiB0aGlzLndpdGhDb2x1bW4oZCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBhZ2luYXRpb25Nb2RlKHBhZ2luYXRpb25Nb2RlOiBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uTW9kZSA9IHBhZ2luYXRpb25Nb2RlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJvd3NQZXJQYWdlKHJvd3M6IG51bWJlciwgb3B0aW9ucz86IEFycmF5PG51bWJlcj4pIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdE51bVJvd3MgPSByb3dzO1xuICAgICAgICB0aGlzLl9yb3dzUGVyUGFnZU9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGl0bGUgPSB0aXRsZTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEhpZGVIZWFkZXIoaGlkZUhlYWRlciA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5faGlkZUhlYWRlciA9IGhpZGVIZWFkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9hZGluZyh0ZXh0Pzogc3RyaW5nLCBpY29uPzogc3RyaW5nIHwgbnVsbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9sb2FkaW5nVGV4dCA9IHRleHQ7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdJY29uID0gaWNvbiA9PT0gdW5kZWZpbmVkID8gJ3BpIHBpLXNwaW5uZXInIDogaWNvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIG1ldGhvZCB0aGF0IGVuYWJsZXMvZGlzYWJsZXMgcmVvcmRlcmFibGUgcHJvcGVydHkgb24gYWxsIGNvbHVtbnMgY3VycmVudGx5IGluIHRoZSBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBjb2x1bW5zUmVvcmRlcmFibGVcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEN1cnJlbnRDb2x1bW5zUmVvcmRlcmFibGUoY29sdW1uc1Jlb3JkZXJhYmxlID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbC53aXRoUmVvcmRlcmFibGUoY29sdW1uc1Jlb3JkZXJhYmxlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgbWV0aG9kIHRoYXQgZW5hYmxlcy9kaXNhYmxlcyB0b2dnbGVhYmxlIHByb3BlcnR5IG9uIGFsbCBjb2x1bW5zIGN1cnJlbnRseSBpbiB0aGUgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gY29sdW1uc1RvZ2dsZWFibGVcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEN1cnJlbnRDb2x1bW5zVG9nZ2xlYWJsZShjb2x1bW5zVG9nZ2xlYWJsZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBjb2wud2l0aFRvZ2dsZWFibGUoY29sdW1uc1RvZ2dsZWFibGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTb3J0KHByb3BlcnR5OiBTb3J0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTb3J0VW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNvcnRVbnNhZmUocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fc29ydHMuZmluZChzID0+IHMucHJvcGVydHkgPT09IHByb3BlcnR5KSA/PyBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVTb3J0KHByb3BlcnR5OiBTb3J0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVTb3J0VW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVNvcnRVbnNhZmUocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzb3J0SWR4ID0gdGhpcy5fc29ydHMuZmluZEluZGV4KGMgPT4gYy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9zb3J0cy5zcGxpY2Uoc29ydElkeCwgMSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFNvcnQocHJvcGVydHk6IFNvcnRzLCBpc0RlZmF1bHQgPSBmYWxzZSwgYXNjZW5kaW5nPzogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRTb3J0VW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgaXNEZWZhdWx0LCBhc2NlbmRpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGlzRGVmYXVsdCA9IGZhbHNlLCBhc2NlbmRpbmc/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBuZXcgU29ydERlc2NyaXB0b3I8VGFibGVNb2RlbD4ocHJvcGVydHkpO1xuICAgICAgICBpZiAoaXNEZWZhdWx0KSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0T3JkZXJNYXggPSB0aGlzLl9zb3J0c1xuICAgICAgICAgICAgICAgIC5maWx0ZXIocyA9PiBzLmRlZmF1bHRJc0VuYWJsZWQpXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBzKSA9PiAocy5kZWZhdWx0T3JkZXIgIT09IHVuZGVmaW5lZCAmJiBzLmRlZmF1bHRPcmRlciA+IGFjYyA/IHMuZGVmYXVsdE9yZGVyIDogYWNjKSwgLTEpO1xuICAgICAgICAgICAgc29ydC53aXRoRGVmYXVsdFNvcnQodHJ1ZSwgYXNjZW5kaW5nLCBkZWZhdWx0T3JkZXJNYXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zb3J0cy5wdXNoKHNvcnQpO1xuICAgICAgICByZXR1cm4gc29ydDtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNvcnQocHJvcGVydHk6IFNvcnRzLCBpc0RlZmF1bHQgPSBmYWxzZSwgYXNjZW5kaW5nPzogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoU29ydFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGlzRGVmYXVsdCwgYXNjZW5kaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNvcnRVbnNhZmUocHJvcGVydHk6IHN0cmluZywgaXNEZWZhdWx0ID0gZmFsc2UsIGFzY2VuZGluZz86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5hZGRTb3J0VW5zYWZlKHByb3BlcnR5LCBpc0RlZmF1bHQsIGFzY2VuZGluZyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFNvcnQocHJvcGVydHk6IFNvcnRzLCBhc2NlbmRpbmc/OiBib29sZWFuLCBvcmRlcj86IG51bWJlciwgZW5hYmxlZD86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aERlZmF1bHRTb3J0VW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgYXNjZW5kaW5nLCBvcmRlciwgZW5hYmxlZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEZWZhdWx0U29ydFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBhc2NlbmRpbmc/OiBib29sZWFuLCBvcmRlcj86IG51bWJlciwgZW5hYmxlZD86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgbGV0IHNvcnQgPSB0aGlzLl9zb3J0cy5maW5kKHMgPT4gcy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICBpZiAoIXNvcnQpIHtcbiAgICAgICAgICAgIHNvcnQgPSBuZXcgU29ydERlc2NyaXB0b3IocHJvcGVydHkpO1xuICAgICAgICAgICAgdGhpcy5fc29ydHMucHVzaChzb3J0KTtcbiAgICAgICAgfVxuICAgICAgICBzb3J0LndpdGhEZWZhdWx0U29ydChlbmFibGVkID8/IHRydWUsIGFzY2VuZGluZywgb3JkZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNvcnRzKC4uLnByb3BlcnRpZXM6IFNvcnRzW10pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNvcnRzVW5zYWZlKC4uLihwcm9wZXJ0aWVzIGFzIHN0cmluZ1tdKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTb3J0c1Vuc2FmZSguLi5wcm9wZXJ0aWVzOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgICAgICBwcm9wZXJ0aWVzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zb3J0cy5wdXNoKG5ldyBTb3J0RGVzY3JpcHRvcihwKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmlsdGVyKHByb3BlcnR5OiBGaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpbHRlclVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWx0ZXJVbnNhZmUocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycy5maW5kKHMgPT4gcy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZpbHRlcihwcm9wZXJ0eTogRmlsdGVycykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVGaWx0ZXJVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlRmlsdGVyVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmlsdGVySWR4ID0gdGhpcy5fZmlsdGVycy5maW5kSW5kZXgoYyA9PiBjLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2ZpbHRlcnMuc3BsaWNlKGZpbHRlcklkeCwgMSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlcjxGaWx0ZXJNb2RlbCA9IEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsID8gVGFibGVNb2RlbFtGaWx0ZXJzXSA6IG5ldmVyPihwcm9wZXJ0eTogRmlsdGVycykge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlclVuc2FmZTxGaWx0ZXJNb2RlbD4ocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4ocHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyTG9va3VwPEZpbHRlck1vZGVsID0gRmlsdGVycyBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwgPyBOb25OdWxsYWJsZTxUYWJsZU1vZGVsW0ZpbHRlcnNdPiA6IG5ldmVyLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihcbiAgICAgICAgcHJvcGVydHk6IEZpbHRlcnMsXG4gICAgICAgIHByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxGaWx0ZXJNb2RlbCwgU2VydmljZT4sXG4gICAgICAgIG9wdGlvbnNWYWx1ZVByb3BlcnR5Pzoga2V5b2YgRmlsdGVyTW9kZWxcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmlsdGVyTG9va3VwVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgcHJvdmlkZXIsIG9wdGlvbnNWYWx1ZVByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cFVuc2FmZTxGaWx0ZXJNb2RlbCwgU2VydmljZSA9IHVuZGVmaW5lZD4ocHJvcGVydHk6IHN0cmluZywgcHJvdmlkZXI/OiBJTG9va3VwRGF0YVByb3ZpZGVyPEZpbHRlck1vZGVsLCBTZXJ2aWNlPiwgb3B0aW9uc1ZhbHVlUHJvcGVydHk/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gbmV3IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWwsIFNlcnZpY2U+KHByb3BlcnR5LCB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXI6IHByb3ZpZGVyLFxuICAgICAgICAgICAgb3B0aW9uc1ZhbHVlUHJvcGVydHk6IG9wdGlvbnNWYWx1ZVByb3BlcnR5XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyTG9va3VwRW51bTxFbnVtPihwcm9wZXJ0eTogRmlsdGVycywgZW51bURlc2M6IEVudW1EZXNjcmlwdG9yPEVudW0+LCBvcHRpb25zPzogQXJyYXk8RW51bT4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmlsdGVyTG9va3VwRW51bVVuc2FmZTxFbnVtPihwcm9wZXJ0eSBhcyBzdHJpbmcsIGVudW1EZXNjLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyTG9va3VwRW51bVVuc2FmZTxFbnVtID0gRW51bUNvbnN0YW50VHlwZT4ocHJvcGVydHk6IHN0cmluZywgZW51bURlc2M6IEVudW1EZXNjcmlwdG9yPEVudW0+LCBvcHRpb25zPzogQXJyYXk8RW51bT4pIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gbmV3IEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yKHByb3BlcnR5LCBlbnVtRGVzYywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX2ZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWx0ZXJGcm9tQ29sdW1uKHByb3BlcnR5OiBFeHRyYWN0PEZpbHRlcnMsIGtleW9mIFRhYmxlTW9kZWw+LCBkaXNwbGF5VHlwZT86IEZpbHRlckRpc3BsYXlUeXBlRW51bSwgZm9yY2VTaW1wbGUgPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWx0ZXJGcm9tQ29sdW1uVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgZGlzcGxheVR5cGUsIGZvcmNlU2ltcGxlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlcnNGcm9tQ29sdW1ucyguLi5wcm9wZXJ0aWVzOiBFeHRyYWN0PEZpbHRlcnMsIGtleW9mIFRhYmxlTW9kZWw+W10pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aEZpbHRlcnNGcm9tQ29sdW1uc1Vuc2FmZSguLi4ocHJvcGVydGllcyBhcyBzdHJpbmdbXSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmlsdGVyc0Zyb21Db2x1bW5zVW5zYWZlKC4uLnByb3BlcnRpZXM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgICAgIHByb3BlcnRpZXMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsdGVyRnJvbUNvbHVtblVuc2FmZShwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWx0ZXJGcm9tQ29sdW1uVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGRpc3BsYXlUeXBlPzogRmlsdGVyRGlzcGxheVR5cGVFbnVtLCBmb3JjZVNpbXBsZSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uVW5zYWZlKHByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgTm8gY29sdW1uIGZvdW5kIGZvciBmaWx0ZXIgcHJvcGVydHkgXCIke3Byb3BlcnR5fVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5hZGRGaWx0ZXJGcm9tQ29sdW1uRGVzY3JpcHRvclVuc2FmZShjb2x1bW4sIGZvcmNlU2ltcGxlKTtcbiAgICAgICAgaWYgKGRpc3BsYXlUeXBlICE9IG51bGwpIGZpbHRlci53aXRoRGlzcGxheVR5cGUoZGlzcGxheVR5cGUpO1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWx0ZXJGcm9tQ29sdW1uRGVzY3JpcHRvclVuc2FmZTxDb2x1bW5Nb2RlbCwgQ29sdW1uVmFsdWU+KFxuICAgICAgICBjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWwsIENvbHVtblZhbHVlPixcbiAgICAgICAgZm9yY2VTaW1wbGUgPSBmYWxzZVxuICAgICk6IEZpbHRlckRlc2NyaXB0b3I8YW55LCBUYWJsZU1vZGVsPiB7XG4gICAgICAgIGxldCBmaWx0ZXJEZXNjcmlwdG9yID0gbmV3IEZpbHRlckRlc2NyaXB0b3I8YW55LCBUYWJsZU1vZGVsPihjb2x1bW4ucHJvcGVydHkpO1xuICAgICAgICBsZXQgZmlsdGVyVHlwZTogRmlsdGVyVHlwZUVudW07XG5cbiAgICAgICAgc3dpdGNoIChjb2x1bW4uY29sdW1uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uQm9vbGVhbjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uQm9vbGVhbjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRGF0ZTpcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uRGF0ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRW51bTpcbiAgICAgICAgICAgICAgICBpZiAoIWZvcmNlU2ltcGxlICYmIGNvbHVtbi5lbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3IgPSBuZXcgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3IoY29sdW1uLnByb3BlcnR5LCBjb2x1bW4uZW51bSk7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5Mb29rdXBFbnVtO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5TdHJpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5TdHJpbmc6XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLlN0cmluZztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlckRlc2NyaXB0b3IuYXNGaWx0ZXJUeXBlKGZpbHRlclR5cGUpO1xuICAgICAgICBpZiAoKGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLk51bWJlciB8fCBmaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5EYXRlKSAmJiBjb2x1bW4uZGlzcGxheUZvcm1hdCkge1xuICAgICAgICAgICAgZmlsdGVyRGVzY3JpcHRvci53aXRoRGlzcGxheUZvcm1hdChjb2x1bW4uZGlzcGxheUZvcm1hdCwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyRGVzY3JpcHRvcik7XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlckRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXI8RmlsdGVyTW9kZWw+KHByb3BlcnR5OiBGaWx0ZXJzLCBmaWx0ZXI6IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIGlmIChmaWx0ZXIucHJvcGVydHkgIT09IHByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciBwcm9wZXJ0eSBcIiR7cHJvcGVydHl9XCIgYW5kIEZpbHRlciBkZXNjcmlwdG9yIHByb3BlcnR5IFwiJHtmaWx0ZXIucHJvcGVydHl9XCIgZG8gbm90IG1hdGNoLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KGZpbHRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KGZpbHRlcjogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTaXplKHNpemU6IFRhYmxlU2l6ZUVudW0gPSBUYWJsZVNpemVFbnVtLk5vcm1hbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zaXplID0gc2l6ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUYWJsZUZ1bGxIZWlnaHRPZmZzZXQodGFibGVGdWxsSGVpZ2h0T2Zmc2V0OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGVGdWxsSGVpZ2h0T2Zmc2V0ID0gdGFibGVGdWxsSGVpZ2h0T2Zmc2V0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJvd0hlaWdodChyb3dIZWlnaHQ6IG51bWJlcik6IHRoaXMge1xuICAgICAgICB0aGlzLl9yb3dIZWlnaHQgPSByb3dIZWlnaHQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSG92ZXIoaG92ZXI6IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzSG92ZXIgPSBob3ZlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhHcmlkbGluZXMoZ3JpZGxpbmVzOiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0dyaWRsaW5lcyA9IGdyaWRsaW5lcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgZW5hYmxlcy9kaXNhYmxlZCBjb2x1bW4gcmVzaXplIGZlYXR1cmUgd2l0aCBjb2x1bW5SZXNpemVNb2RlIG9uIGFsbCBjb2x1bW5zLlxuICAgICAqIEBwYXJhbSByZXNpemFibGVDb2x1bW5zIFRydWUgaWYgZW5hYmxlZFxuICAgICAqIEBwYXJhbSBjb2x1bW5SZXNpemVNb2RlICdmaXQnIG9yICdleHBhbmQnIG1vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNSZXNpemFibGUocmVzaXphYmxlQ29sdW1ucyA9IHRydWUsIGNvbHVtblJlc2l6ZU1vZGU6ICdmaXQnIHwgJ2V4cGFuZCcgPSAnZml0Jyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zID0gcmVzaXphYmxlQ29sdW1ucztcbiAgICAgICAgdGhpcy5fY29sdW1uUmVzaXplTW9kZSA9IGNvbHVtblJlc2l6ZU1vZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgY29sdW1uIHRvICh1bilmcm96ZW4uXG4gICAgICogQHBhcmFtIHNlbGVjdGlvbkNvbHVtbkZyb3plbiBUcnVlIHRvIGZyZWV6ZSBzZWxlY3Rpb24gY29sdW1uLCBmYWxzZSB0byB1bmZyZWV6ZSBpdC5cbiAgICAgKiBAcGFyYW0gYWN0aW9uQ29sdW1uRnJvemVuIFRydWUgdG8gZnJlZXplIGFjdGlvbiBjb2x1bW4sIGZhbHNlIHRvIHVuZnJlZXplIGl0LlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uRnJvemVuKHNlbGVjdGlvbkNvbHVtbkZyb3plbj86IGJvb2xlYW4sIGFjdGlvbkNvbHVtbkZyb3plbj86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uQ29sdW1uRnJvemVuID0gc2VsZWN0aW9uQ29sdW1uRnJvemVuO1xuICAgICAgICB0aGlzLl9hY3Rpb25Db2x1bW5Gcm96ZW4gPSBhY3Rpb25Db2x1bW5Gcm96ZW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUm93Q2xhc3NOYW1lKHJvd0NsYXNzTmFtZT86IHN0cmluZywgY2xhc3NOYW1lTWFwRm4/OiAoY2xhc3NOYW1lPzogc3RyaW5nLCBpdGVtPzogVGFibGVNb2RlbCkgPT4gc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3Jvd0NsYXNzTmFtZSA9IHJvd0NsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5fcm93Q2xhc3NOYW1lTWFwRm4gPSBjbGFzc05hbWVNYXBGbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIZWFkZXJDbGFzc05hbWUoaGVhZGVyQ2xhc3NOYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGVhZGVyQ2xhc3NOYW1lID0gaGVhZGVyQ2xhc3NOYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvY2FsaXplZCgpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNMb2NhbGl6ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5KGxvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNMb2NhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSA9IGxvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJvd0V4cGFuZGFibGUocHJvcGVydHk/OiBrZXlvZiBUYWJsZU1vZGVsLCBjb2xTcGFuPzogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3Jvd0V4cGFuZGFibGUgPSB0cnVlO1xuICAgICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eSA9IHByb3BlcnR5IGFzIHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sU3Bhbikge1xuICAgICAgICAgICAgdGhpcy5fcm93RXhwYW5kYWJsZUNvbFNwYW4gPSBjb2xTcGFuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhSb3dSZW9yZGVyYWJsZShyZW9yZGFibGUgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX3Jvd1Jlb3JkZXJhYmxlID0gcmVvcmRhYmxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29weUZpZWxkc1RvKG9iajogVGFibGVEZXNjcmlwdG9ySW5zdDxhbnksIGFueSwgYW55Pikge1xuICAgICAgICBvYmouX3RpdGxlID0gdGhpcy5fdGl0bGU7XG4gICAgICAgIG9iai5faGlkZUhlYWRlciA9IHRoaXMuX2hpZGVIZWFkZXI7XG4gICAgICAgIG9iai5fdHJhY2tQcm9wZXJ0eSA9IHRoaXMuX3RyYWNrUHJvcGVydHk7XG4gICAgICAgIG9iai5fZmlsdGVycyA9IHRoaXMuX2ZpbHRlcnMubWFwKGYgPT4gZi5jb3B5KCkpO1xuICAgICAgICBvYmouX3NvcnRzID0gdGhpcy5fc29ydHMubWFwKHMgPT4gcy5jb3B5KCkpO1xuICAgICAgICBvYmouX2NsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcbiAgICAgICAgb2JqLl9zaXplID0gdGhpcy5fc2l6ZTtcbiAgICAgICAgb2JqLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQgPSB0aGlzLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQ7XG4gICAgICAgIG9iai5fcm93SGVpZ2h0ID0gdGhpcy5fcm93SGVpZ2h0O1xuICAgICAgICBvYmouX2hhc0hvdmVyID0gdGhpcy5faGFzSG92ZXI7XG4gICAgICAgIG9iai5faGFzR3JpZGxpbmVzID0gdGhpcy5faGFzR3JpZGxpbmVzO1xuICAgICAgICBvYmouX2hhc1Jlc2l6YWJsZUNvbHVtbnMgPSB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zO1xuICAgICAgICBvYmouX2NvbHVtblJlc2l6ZU1vZGUgPSB0aGlzLl9jb2x1bW5SZXNpemVNb2RlO1xuICAgICAgICBvYmouX2FjdGlvbkNvbHVtbkZyb3plbiA9IHRoaXMuX2FjdGlvbkNvbHVtbkZyb3plbjtcbiAgICAgICAgb2JqLl9zZWxlY3Rpb25Db2x1bW5Gcm96ZW4gPSB0aGlzLl9zZWxlY3Rpb25Db2x1bW5Gcm96ZW47XG4gICAgICAgIG9iai5faXNMb2NhbGl6ZWQgPSB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICAgICAgb2JqLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSA9IHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5O1xuICAgICAgICBvYmouX3BhZ2luYXRpb25Nb2RlID0gdGhpcy5fcGFnaW5hdGlvbk1vZGU7XG4gICAgICAgIG9iai5fcm93c1BlclBhZ2VPcHRpb25zID0gdGhpcy5fcm93c1BlclBhZ2VPcHRpb25zO1xuICAgICAgICBvYmouX3Jvd0V4cGFuZGFibGUgPSB0aGlzLl9yb3dFeHBhbmRhYmxlO1xuICAgICAgICBvYmouX3Jvd0V4cGFuZGFibGVDb2xTcGFuID0gdGhpcy5fcm93RXhwYW5kYWJsZUNvbFNwYW47XG4gICAgICAgIG9iai5fcm93RXhwYW5kYWJsZVByb3BlcnR5ID0gdGhpcy5fcm93RXhwYW5kYWJsZVByb3BlcnR5O1xuICAgICAgICBvYmouX3Jvd1Jlb3JkZXJhYmxlID0gdGhpcy5fcm93UmVvcmRlcmFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogVGFibGVEZXNjcmlwdG9ySW5zdDxUYWJsZU1vZGVsLCBTb3J0cywgRmlsdGVycz4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGVNb2RlbCwgU29ydHMsIEZpbHRlcnM+KHRoaXMubW9kZWwuY29weSgpKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZGVzY3JpcHRvcik7XG4gICAgICAgIGRlc2NyaXB0b3IuX2NvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGMgPT4gYy5jb3B5KCkpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdCBleHRlbmRzIFRhYmxlRGVzY3JpcHRvckluc3Q8YW55PiB7XG4gICAgcHJpdmF0ZSBfZXhjbHVkZWRDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgcHJpdmF0ZSBfZmlsdGVyQ29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHByaXZhdGUgX3NvcnRDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgcHJpdmF0ZSBfc29ydENvbHVtbk1vZGUgPSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uRVhDTFVERTtcbiAgICBwcml2YXRlIF9maWx0ZXJDb2x1bW5Nb2RlID0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLkVYQ0xVREU7XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX2NvbHVtbnM6IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yW10gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPGFueT4pIHtcbiAgICAgICAgc3VwZXIobW9kZWwpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwudGl0bGVQcm9wZXJ0eSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMud2l0aFRpdGxlKG1vZGVsLnRpdGxlUHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBjb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWZpbmVzIGV4Y2x1ZGVkIGNvbHVtbnMgd2hlbiBnZW5lcmF0aW5nIGRlc2NyaXB0b3JcbiAgICAgKiBAcGFyYW0gZXhjbHVkZWRDb2x1bW4gbmFtZXMgb2YgZXhjbHVkZWQgY29sdW1uc1xuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uc0V4Y2x1ZGVkKGV4Y2x1ZGVkQ29sdW1uOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9leGNsdWRlZENvbHVtbnMgPSBleGNsdWRlZENvbHVtbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVmaW5lcyBjb2x1bW4gcHJvcGVydGllcyBvbiB3aGljaCBzb3J0IGlzIGRlZmluZWQgb3Igbm90IGRlcGVuZGluZyBvbiBzb3J0Q29sdW1uTW9kZVxuICAgICAqIEBwYXJhbSBzb3J0T25Db2x1bW5zIGNvbHVtbiBuYW1lc1xuICAgICAqIEBwYXJhbSBzb3J0Q29sdW1uTW9kZSBJTkNMVURFX09OTFkgKGRlZmF1bHQpIG9ubHkgZ2l2ZW4gY29sdW1ucyB3aWxsIGhhdmUgc29ydCwgRVhDTFVERSBnaXZlbiBjb2x1bW5zIHdpbGwgTk9UIGhhdmUgc29ydFxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uc1NvcnQoc29ydE9uQ29sdW1uczogc3RyaW5nW10sIHNvcnRDb2x1bW5Nb2RlID0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLklOQ0xVREVfT05MWSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zb3J0Q29sdW1uTW9kZSA9IHNvcnRDb2x1bW5Nb2RlO1xuICAgICAgICB0aGlzLl9zb3J0Q29sdW1ucyA9IHNvcnRPbkNvbHVtbnM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgY29sdW1uIHByb3BlcnRpZXMgb24gd2hpY2ggZmlsdGVyIGlzIGRlZmluZWQgb3Igbm90IGRlcGVuZGluZyBvbiBmaWx0ZXJDb2x1bW5Nb2RlXG4gICAgICogQHBhcmFtIGZpbHRlck9uQ29sdW1uIGNvbHVtbiBuYW1lc1xuICAgICAqIEBwYXJhbSBmaWx0ZXJDb2x1bW5Nb2RlIElOQ0xVREVfT05MWSAoZGVmYXVsdCkgb25seSBnaXZlbiBjb2x1bW5zIHdpbGwgaGF2ZSBmaWx0ZXIsIEVYQ0xVREUgZ2l2ZW4gY29sdW1ucyB3aWxsIE5PVCBoYXZlIGZpbHRlclxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uc0ZpbHRlcihmaWx0ZXJPbkNvbHVtbjogc3RyaW5nW10sIGZpbHRlckNvbHVtbk1vZGUgPSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uSU5DTFVERV9PTkxZKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpbHRlckNvbHVtbk1vZGUgPSBmaWx0ZXJDb2x1bW5Nb2RlO1xuICAgICAgICB0aGlzLl9maWx0ZXJDb2x1bW5zID0gZmlsdGVyT25Db2x1bW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgZ2l2ZW4gdHlwZSB0byBjb2x1bW4gd2l0aCBnaXZlbiBwcm9wZXJ0eSBhbmQgcmV0dXJucyB0aGlzIHRhYmxlXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbidzIHByb3BlcnR5XG4gICAgICogQHBhcmFtIHR5cGUgY3VzdG9tIHR5cGUgZm9yIGNvbHVtblxuICAgICAqIEBwYXJhbSBkaXNwbGF5VHlwZSBjdXN0b20gY29sdW1uIHZhbHVlIGRpc3BsYXkgdHlwZVxuICAgICAqIEBwYXJhbSBhcmdzIGFkZGl0aW9uIGFyZ3VtZW50cyBmb3IgY29sdW1uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5QcmVzZXRUeXBlKHByb3BlcnR5OiBzdHJpbmcsIHR5cGU6IENvbHVtblR5cGVFbnVtLCBkaXNwbGF5VHlwZT86IENvbHVtbkRpc3BsYXlUeXBlRW51bSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5fY29sdW1ucy5maW5kKGNvbCA9PiBwcm9wZXJ0eSA9PT0gY29sLnByb3BlcnR5KSA/PyB0aGlzLmFkZENvbHVtbihwcm9wZXJ0eSkud2l0aFRpdGxlKHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29sdW1uLmFzVHlwZSh0eXBlLCBkaXNwbGF5VHlwZSwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0cyB0aXRsZSB0byBjb2x1bW4gd2l0aCBnaXZlbiBwcm9wZXJ0eSBhbmQgcmV0dXJucyB0aGlzIHRhYmxlXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbidzIHByb3BlcnR5XG4gICAgICogQHBhcmFtIHRpdGxlIGNvbHVtbidzIHRpdGxlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5UaXRsZShwcm9wZXJ0eTogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gcHJvcGVydHkgPT09IGNvbC5wcm9wZXJ0eSkgPz8gdGhpcy5hZGRDb2x1bW4ocHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4ud2l0aFRpdGxlKHRpdGxlLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVzIGNvbHVtbnMgZGVmaW5lZCBvbiB0YWJsZSBiYXNlZCBvbiBkYXRhIGZldGNoZWQgZnJvbSBhcGlcbiAgICAgKiBAcGFyYW0gZGF0YSBkYXRhIGZyb20gYXBpXG4gICAgICovXG4gICAgcHVibGljIHRvVGFibGVEZXNjcmlwdG9yRnJvbURhdGEoZGF0YTogRGF0YUxpc3RSZXN1bHQpOiBUYWJsZURlc2NyaXB0b3JJbnN0PGFueT4ge1xuICAgICAgICBjb25zdCB0YWJsZURlc2NyaXB0b3IgPSB0aGlzLnRvVGFibGVEZXNjcmlwdG9yKCk7XG5cbiAgICAgICAgaWYgKGRhdGEuZGF0YSA9PSBudWxsIHx8IGRhdGEuZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYmxlRGVzY3JpcHRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9iamVjdE1vZGVsID0gZGF0YS5kYXRhWzBdO1xuICAgICAgICBjb25zdCBlbnRyaWVzID0gZmxhdHRlbk9iamVjdEtleXMob2JqZWN0TW9kZWwpXG4gICAgICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4gIXRoaXMuX2V4Y2x1ZGVkQ29sdW1ucy5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpOyAvL2V4Y2x1ZGUgYXJyYXlzIGFuZCBzZXRzXG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZW50cmllcykge1xuICAgICAgICAgICAgY29uc3QgbWV0YUNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBrZXkpO1xuICAgICAgICAgICAgbGV0IGNvbHVtbjogQ29sdW1uRGVzY3JpcHRvcjxhbnksIGFueT47XG4gICAgICAgICAgICBpZiAobWV0YUNvbHVtbikge1xuICAgICAgICAgICAgICAgIGlmICghbWV0YUNvbHVtbi52aXNpYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBtZXRhQ29sdW1uLnRvQ29sdW1uRGVzY3JpcHRvcigpO1xuICAgICAgICAgICAgICAgIHRhYmxlRGVzY3JpcHRvci53aXRoQ29sdW1uKGNvbHVtbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IHRhYmxlRGVzY3JpcHRvci5hZGRDb2x1bW4oa2V5KS53aXRoVGl0bGUoa2V5KTtcbiAgICAgICAgICAgICAgICBjb2x1bW5Ub0RhdGVOdW1iZXJPckJvb2xlYW4oY29sdW1uLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmkxOG5CYXNlS2V5ICYmICFjb2x1bW4ucHJvcGVydHkuaW5jbHVkZXMoJ3JldicpKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uLndpdGhUaXRsZShbdGhpcy5tb2RlbC5pMThuQmFzZUtleSwgJ3Byb3BlcnRpZXMnLCBjb2x1bW4ucHJvcGVydHldLmpvaW4oJy4nKS5yZXBsYWNlKCdzdGF0ZS4nLCAnJykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50T2ZTb3J0Q29sdW1ucyA9IHRoaXMuX3NvcnRDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5wcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKHRoaXMuX3NvcnRDb2x1bW5Nb2RlID09PSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uRVhDTFVERSAmJiAhZWxlbWVudE9mU29ydENvbHVtbnMpIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuX3NvcnRDb2x1bW5Nb2RlID09PSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uSU5DTFVERV9PTkxZICYmIGVsZW1lbnRPZlNvcnRDb2x1bW5zKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGFibGVEZXNjcmlwdG9yLndpdGhTb3J0VW5zYWZlKGNvbHVtbi5wcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRPZkZpbHRlckNvbHVtbnMgPSB0aGlzLl9maWx0ZXJDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5wcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyQ29sdW1ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgKCh0aGlzLl9maWx0ZXJDb2x1bW5Nb2RlID09PSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uRVhDTFVERSAmJiAhZWxlbWVudE9mRmlsdGVyQ29sdW1ucykgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuX2ZpbHRlckNvbHVtbk1vZGUgPT09IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5JTkNMVURFX09OTFkgJiYgZWxlbWVudE9mRmlsdGVyQ29sdW1ucykpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0YWJsZURlc2NyaXB0b3IuYWRkRmlsdGVyRnJvbUNvbHVtbkRlc2NyaXB0b3JVbnNhZmUoY29sdW1uLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFibGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFkZHMgQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3IgdG8gdGhpcyB0YWJsZVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4ncyBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBhZGRDb2x1bW4ocHJvcGVydHk6IGtleW9mIGFueSk6IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSByZW1vdmVDb2x1bW4ocHJvcGVydHk6IGtleW9mIGFueSk6IHRoaXMge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkgPz8gdGhpcy5hZGRDb2x1bW4ocHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4ud2l0aFZpc2liaWxpdHkoZmFsc2UpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGRlZXAgY29weSBvZiB0YWJsZSBkeW5hbWljIGRlc2NyaXB0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29weSgpOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdCB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3QodGhpcy5tb2RlbC5jb3B5KCkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgZGVzY3JpcHRvci5fY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoYyA9PiBjLmNvcHkoKSk7XG4gICAgICAgIGRlc2NyaXB0b3IuX2V4Y2x1ZGVkQ29sdW1ucyA9IFsuLi50aGlzLl9leGNsdWRlZENvbHVtbnNdO1xuICAgICAgICBkZXNjcmlwdG9yLl9maWx0ZXJDb2x1bW5zID0gWy4uLnRoaXMuX2ZpbHRlckNvbHVtbnNdO1xuICAgICAgICBkZXNjcmlwdG9yLl9zb3J0Q29sdW1ucyA9IFsuLi50aGlzLl9zb3J0Q29sdW1uc107XG4gICAgICAgIGRlc2NyaXB0b3IuX2ZpbHRlckNvbHVtbk1vZGUgPSB0aGlzLl9maWx0ZXJDb2x1bW5Nb2RlO1xuICAgICAgICBkZXNjcmlwdG9yLl9zb3J0Q29sdW1uTW9kZSA9IHRoaXMuX3NvcnRDb2x1bW5Nb2RlO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9UYWJsZURlc2NyaXB0b3IoKTogVGFibGVEZXNjcmlwdG9ySW5zdDxhbnk+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBUYWJsZURlc2NyaXB0b3JJbnN0PGFueT4odGhpcy5tb2RlbCk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG4iXX0=
|
|
658
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxlL2FwaS9zcmMvZGVzY3JpcHRvcnMvdGFibGUuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsb0JBQW9CLEVBQTJFLGlCQUFpQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDN0osT0FBTyxFQUFDLGdCQUFnQixFQUF5QixzQkFBc0IsRUFBRSwwQkFBMEIsRUFBRSxjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUcxSixPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRixPQUFPLEVBQXdCLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRzdFLE9BQU8sRUFBQywyQkFBMkIsRUFBMkIsYUFBYSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDMUcsT0FBTyxFQUFDLGdCQUFnQixFQUFFLHVCQUF1QixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDOUUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE1BQU0sT0FBTyxtQkFBbUI7SUFxRDVCLFlBQW1CLEtBQWtDLEVBQUUsYUFBYSxHQUFHLEtBQUs7UUExQ2xFLGFBQVEsR0FBNkMsRUFBRSxDQUFDO1FBRTFELGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXBCLGlCQUFZLEdBQWtCLGVBQWUsQ0FBQztRQUV0RCxRQUFRO1FBQ0EsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0Qix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFPckMsVUFBVTtRQUNGLFVBQUssR0FBa0IsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUMzQyxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBT3hCLGdCQUFnQjtRQUNSLGFBQVEsR0FBd0MsRUFBRSxDQUFDO1FBQ25ELFdBQU0sR0FB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QVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvRixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNhLElBQUk7UUFDaEIsTUFBTSxVQUFVLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEQsVUFBVSxDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RCxVQUFVLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckQsVUFBVSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pELFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDdEQsVUFBVSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ2xELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxpQkFBaUI7UUFDcEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxtQkFBbUIsQ0FBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yLCBEYXRhTGlzdFJlc3VsdCwgRW51bUNvbnN0YW50VHlwZSwgSUxvb2t1cERhdGFQcm92aWRlciwgSVRhYmxlRGVzY3JpcHRvciwgZmxhdHRlbk9iamVjdEtleXN9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0ZpbHRlckRlc2NyaXB0b3IsIEZpbHRlckRpc3BsYXlUeXBlRW51bSwgRmlsdGVyTG9va3VwRGVzY3JpcHRvciwgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3IsIEZpbHRlclR5cGVFbnVtfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2ZpbHRlcic7XG5pbXBvcnQge0VudW1EZXNjcmlwdG9yLCBNb2RlbERlc2NyaXB0b3J9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuXG5pbXBvcnQge2NvbHVtblRvRGF0ZU51bWJlck9yQm9vbGVhbn0gZnJvbSAnLi4vaGVscGVycy9jbGFzcy1hdHRyaWJ1dGUtY29udmVydGVyJztcbmltcG9ydCB7Q29sdW1uRGlzcGxheVR5cGVFbnVtLCBDb2x1bW5UeXBlRW51bX0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbi5tb2RlbCc7XG5pbXBvcnQge0lSb3dFeHBhbmRhYmxlQ29tcG9uZW50fSBmcm9tICcuLi9tb2RlbHMvcm93LWV4cGFuZGFibGUtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7SUNvbHVtbnNNYW5hZ2VJbnRlcmZhY2V9IGZyb20gJy4uL21vZGVscy90YWJsZS1jb2x1bW5zLm1vZGVsJztcbmltcG9ydCB7VGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLCBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bSwgVGFibGVTaXplRW51bX0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7Q29sdW1uRGVzY3JpcHRvciwgQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3J9IGZyb20gJy4vY29sdW1uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtTb3J0RGVzY3JpcHRvcn0gZnJvbSAnLi9zb3J0LmRlc2NyaXB0b3InO1xuXG5leHBvcnQgY2xhc3MgVGFibGVEZXNjcmlwdG9ySW5zdDxUYWJsZU1vZGVsLCBTb3J0cyA9IGtleW9mIFRhYmxlTW9kZWwsIEZpbHRlcnMgPSBrZXlvZiBUYWJsZU1vZGVsPlxuICAgIGltcGxlbWVudHMgSVRhYmxlRGVzY3JpcHRvcjxUYWJsZU1vZGVsLCBTb3J0cywgRmlsdGVycz4sIElDb2x1bW5zTWFuYWdlSW50ZXJmYWNlPFRhYmxlTW9kZWwsIFNvcnRzLCBGaWx0ZXJzPlxue1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21vZGVsOiBNb2RlbERlc2NyaXB0b3I8VGFibGVNb2RlbD47XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9hdXRvR2VuZXJhdGVkO1xuXG4gICAgcHJpdmF0ZSBfaWRlbnRpZmllcj86IHN0cmluZztcbiAgICBwcml2YXRlIF90cmFja1Byb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3BhZ2luYXRpb25Nb2RlPzogVGFibGVQYWdpbmF0aW9uTW9kZUVudW07XG4gICAgcHJpdmF0ZSBfcm93c1BlclBhZ2VPcHRpb25zPzogbnVtYmVyW107XG4gICAgcHJpdmF0ZSBfZGVmYXVsdE51bVJvd3M/OiBudW1iZXI7XG4gICAgcHJvdGVjdGVkIF9jb2x1bW5zOiBBcnJheTxDb2x1bW5EZXNjcmlwdG9yPGFueSwgVGFibGVNb2RlbD4+ID0gW107XG4gICAgcHJpdmF0ZSBfdGl0bGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfaGlkZUhlYWRlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2xvYWRpbmdUZXh0Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2xvYWRpbmdJY29uOiBzdHJpbmcgfCBudWxsID0gJ3BpIHBpLXNwaW5uZXInO1xuXG4gICAgLy8gZXh0cmFcbiAgICBwcml2YXRlIF9oYXNIb3ZlciA9IHRydWU7XG4gICAgcHJpdmF0ZSBfaGFzR3JpZGxpbmVzID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaGFzUmVzaXphYmxlQ29sdW1ucyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2NvbHVtblJlc2l6ZU1vZGU/OiAnZml0JyB8ICdleHBhbmQnO1xuXG4gICAgLy8gc3BlY2lhbCBjb2x1bW5zXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uQ29sdW1uRnJvemVuPzogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9hY3Rpb25Db2x1bW5Gcm96ZW4/OiBib29sZWFuO1xuXG4gICAgLy8gc3R5bGluZ1xuICAgIHByaXZhdGUgX3NpemU6IFRhYmxlU2l6ZUVudW0gPSBUYWJsZVNpemVFbnVtLkxhcmdlO1xuICAgIHByaXZhdGUgX2NsYXNzTmFtZSA9ICcnO1xuICAgIHByaXZhdGUgX2hlYWRlckNsYXNzTmFtZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9yb3dDbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfcm93Q2xhc3NOYW1lTWFwRm4/OiAoY2xhc3NOYW1lPzogc3RyaW5nLCBpdGVtPzogVGFibGVNb2RlbCkgPT4gc3RyaW5nO1xuICAgIHByaXZhdGUgX3RhYmxlRnVsbEhlaWdodE9mZnNldD86IG51bWJlcjtcbiAgICBwcml2YXRlIF9yb3dIZWlnaHQ/OiBudW1iZXI7XG5cbiAgICAvLyBmaWx0ZXJzJnNvcnRzXG4gICAgcHJpdmF0ZSBfZmlsdGVyczogRmlsdGVyRGVzY3JpcHRvcjxhbnksIFRhYmxlTW9kZWw+W10gPSBbXTtcbiAgICBwcml2YXRlIF9zb3J0czogU29ydERlc2NyaXB0b3I8VGFibGVNb2RlbD5bXSA9IFtdO1xuXG4gICAgLy8gbG9jYWxpemF0aW9uXG4gICAgcHJpdmF0ZSBfaXNMb2NhbGl6ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eT86IHN0cmluZztcblxuICAgIC8vIHJvdyBleHBhbmRcbiAgICBwcml2YXRlIF9yb3dFeHBhbmRhYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfcm93RXhwYW5kYWJsZUNvbFNwYW4gPSAxMDA7XG4gICAgcHJpdmF0ZSBfcm93RXhwYW5kYWJsZVByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3Jvd0V4cGFuZGFibGVDb21wb25lbnRUeXBlPzogVHlwZTxJUm93RXhwYW5kYWJsZUNvbXBvbmVudDxUYWJsZU1vZGVsPj47XG5cbiAgICAvLyByb3cgcmVvcmRlclxuICAgIHByaXZhdGUgX3Jvd1Jlb3JkZXJhYmxlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUYWJsZU1vZGVsPiwgYXV0b0dlbmVyYXRlZCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMuX3RyYWNrUHJvcGVydHkgPSB0aGlzLl9tb2RlbC5pZFByb3BlcnR5O1xuICAgICAgICB0aGlzLl9hdXRvR2VuZXJhdGVkID0gYXV0b0dlbmVyYXRlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlkZW50aWZpZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pZGVudGlmaWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdHJhY2tQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYWNrUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYWdpbmF0aW9uTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRpb25Nb2RlO1xuICAgIH1cblxuICAgIGdldCByb3dzUGVyUGFnZU9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dzUGVyUGFnZU9wdGlvbnM7XG4gICAgfVxuXG4gICAgZ2V0IGRlZmF1bHROdW1Sb3dzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdE51bVJvd3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRlSGVhZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZUhlYWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmdUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZ1RleHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2FkaW5nSWNvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRpbmdJY29uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvcnRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFibGVGdWxsSGVpZ2h0T2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVGdWxsSGVpZ2h0T2Zmc2V0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93SGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93SGVpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzSG92ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNIb3ZlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0dyaWRsaW5lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0dyaWRsaW5lcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1Jlc2l6YWJsZUNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uUmVzaXplTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtblJlc2l6ZU1vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dDbGFzc05hbWVNYXBGbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0NsYXNzTmFtZU1hcEZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2VsZWN0aW9uQ29sdW1uRnJvemVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQ29sdW1uRnJvemVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aW9uQ29sdW1uRnJvemVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aW9uQ29sdW1uRnJvemVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGVhZGVyQ2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVhZGVyQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNMb2NhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dSZW9yZGVyYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd1Jlb3JkZXJhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93RXhwYW5kYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dFeHBhbmRhYmxlQ29sU3BhbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGVDb2xTcGFuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGFibGUgbW9kZWwgcHJvcGVydHkgdGVsbHMgdXMgaWYgdGhlIHNwZWNpZmljIHJvdyBzaG91bGQgYmUgZXhwYW5kYWJsZSBvciBub3QgYmFzZWQgb24gcm93IGl0ZW0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJvd0V4cGFuZGFibGVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gZGVmaW5lIHRoZSB0eXBlIG9mIHRoZSBjdXN0b20gY29tcG9uZW50IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgZXhwYW5kZWQgcm93LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcm93RXhwYW5kYWJsZUNvbXBvbmVudFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dFeHBhbmRhYmxlQ29tcG9uZW50VHlwZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFjayBwcm9wZXJ0eSBpcyB1c2VkIGZvciB0aGUgcHVycG9zZSBvZiBjb21iaW5lZCBzYXZpbmcgdXNlciBwcmVmZXJlbmNlcyBpbiBsb2NhbHN0b3JhZ2UgaWYgMiB0YWJsZXMgaGF2ZSB0aGUgc2FtZSB0cmFjayBwcm9wZXJ0aWVzIHRoZXkgd2lsbCBzaGFyZSB0aGUgc2FtZSBsb2NhbHN0b3JhZ2UgZW50cnkuXG4gICAgICogU2ltaWxhcmx5LCB0aGlzIHByb3BlcnR5IGNhbiBhbHNvIGJlIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSB0d28gdGFibGVzIG9mIHRoZSBzYW1lIG1vZGVsIG9uIHRoZSBzYW1lIHVybCAoc28gdGhhdCB0aGV5IGhhdmUgc2VwYXJhdGUgZW50cmllcyBpbiBsb2NhbHN0b3JhZ2UpLlxuICAgICAqIEBwYXJhbSBpZGVudGlmaWVyXG4gICAgICovXG4gICAgcHVibGljIHdpdGhJZGVudGlmaWVyKGlkZW50aWZpZXI6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pZGVudGlmaWVyID0gaWRlbnRpZmllcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUcmFja1Byb3BlcnR5KHByb3BlcnR5Pzoga2V5b2YgVGFibGVNb2RlbCk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoVHJhY2tQcm9wZXJ0eVVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVHJhY2tQcm9wZXJ0eVVuc2FmZShwcm9wZXJ0eT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90cmFja1Byb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW4ocHJvcGVydHk6IGtleW9mIFRhYmxlTW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29sdW1uVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbHVtblVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUNvbHVtbihwcm9wZXJ0eToga2V5b2YgVGFibGVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZUNvbHVtblVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVDb2x1bW5VbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW5JZHggPSB0aGlzLl9jb2x1bW5zLmZpbmRJbmRleChjID0+IGMucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5zcGxpY2UoY29sdW1uSWR4LCAxKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbHVtbjxDb2x1bW5Nb2RlbCwgQ29sdW1uVmFsdWUgPSBDb2x1bW5Nb2RlbD4oY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsLCBDb2x1bW5WYWx1ZT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW48UHJvcGVydHlLZXkgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsPihwcm9wZXJ0eTogUHJvcGVydHlLZXkpIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8Tm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eUtleV0+LCBUYWJsZU1vZGVsLCBUYWJsZU1vZGVsW1Byb3BlcnR5S2V5XT4ocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbkVudW08UHJvcGVydHlLZXkgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsLCBFbnVtIGV4dGVuZHMgTm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eUtleV0+Pihwcm9wZXJ0eTogUHJvcGVydHlLZXksIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPikge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxFbnVtLCBUYWJsZU1vZGVsLCBUYWJsZU1vZGVsW1Byb3BlcnR5S2V5XT4ocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICAgICAgY29sdW1uLmFzRW51bVVuc2FmZShlbnVtRGVzYyk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5VbnNhZmU8Q29sdW1uTW9kZWwgPSB1bmtub3duPihwcm9wZXJ0eTogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbD4ocHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbHVtbnMoLi4ucHJvcGVydGllczogKGtleW9mIFRhYmxlTW9kZWwpW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4gdGhpcy5hZGRDb2x1bW4ocCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbHVtbkRlc2NyaXB0b3JzKC4uLmRlc2NyaXB0b3JzOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgVGFibGVNb2RlbD5bXSk6IHRoaXMge1xuICAgICAgICBkZXNjcmlwdG9ycy5mb3JFYWNoKGQgPT4gdGhpcy53aXRoQ29sdW1uKGQpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhQYWdpbmF0aW9uTW9kZShwYWdpbmF0aW9uTW9kZTogVGFibGVQYWdpbmF0aW9uTW9kZUVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbk1vZGUgPSBwYWdpbmF0aW9uTW9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSb3dzUGVyUGFnZShyb3dzOiBudW1iZXIsIG9wdGlvbnM/OiBBcnJheTxudW1iZXI+KSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHROdW1Sb3dzID0gcm93cztcbiAgICAgICAgdGhpcy5fcm93c1BlclBhZ2VPcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIaWRlSGVhZGVyKGhpZGVIZWFkZXIgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX2hpZGVIZWFkZXIgPSBoaWRlSGVhZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvYWRpbmcodGV4dD86IHN0cmluZywgaWNvbj86IHN0cmluZyB8IG51bGwpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbG9hZGluZ1RleHQgPSB0ZXh0O1xuICAgICAgICB0aGlzLl9sb2FkaW5nSWNvbiA9IGljb24gPT09IHVuZGVmaW5lZCA/ICdwaSBwaS1zcGlubmVyJyA6IGljb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBtZXRob2QgdGhhdCBlbmFibGVzL2Rpc2FibGVzIHJlb3JkZXJhYmxlIHByb3BlcnR5IG9uIGFsbCBjb2x1bW5zIGN1cnJlbnRseSBpbiB0aGUgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gY29sdW1uc1Jlb3JkZXJhYmxlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDdXJyZW50Q29sdW1uc1Jlb3JkZXJhYmxlKGNvbHVtbnNSZW9yZGVyYWJsZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBjb2wud2l0aFJlb3JkZXJhYmxlKGNvbHVtbnNSZW9yZGVyYWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIG1ldGhvZCB0aGF0IGVuYWJsZXMvZGlzYWJsZXMgdG9nZ2xlYWJsZSBwcm9wZXJ0eSBvbiBhbGwgY29sdW1ucyBjdXJyZW50bHkgaW4gdGhlIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGNvbHVtbnNUb2dnbGVhYmxlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDdXJyZW50Q29sdW1uc1RvZ2dsZWFibGUoY29sdW1uc1RvZ2dsZWFibGUgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgY29sLndpdGhUb2dnbGVhYmxlKGNvbHVtbnNUb2dnbGVhYmxlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U29ydChwcm9wZXJ0eTogU29ydHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U29ydFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvcnRzLmZpbmQocyA9PiBzLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlU29ydChwcm9wZXJ0eTogU29ydHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlU29ydFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc29ydElkeCA9IHRoaXMuX3NvcnRzLmZpbmRJbmRleChjID0+IGMucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fc29ydHMuc3BsaWNlKHNvcnRJZHgsIDEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRTb3J0KHByb3BlcnR5OiBTb3J0cywgaXNEZWZhdWx0ID0gZmFsc2UsIGFzY2VuZGluZz86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkU29ydFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGlzRGVmYXVsdCwgYXNjZW5kaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU29ydFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBpc0RlZmF1bHQgPSBmYWxzZSwgYXNjZW5kaW5nPzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBzb3J0ID0gbmV3IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+KHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGlzRGVmYXVsdCkge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdE9yZGVyTWF4ID0gdGhpcy5fc29ydHNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHMgPT4gcy5kZWZhdWx0SXNFbmFibGVkKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgcykgPT4gKHMuZGVmYXVsdE9yZGVyICE9PSB1bmRlZmluZWQgJiYgcy5kZWZhdWx0T3JkZXIgPiBhY2MgPyBzLmRlZmF1bHRPcmRlciA6IGFjYyksIC0xKTtcbiAgICAgICAgICAgIHNvcnQud2l0aERlZmF1bHRTb3J0KHRydWUsIGFzY2VuZGluZywgZGVmYXVsdE9yZGVyTWF4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc29ydHMucHVzaChzb3J0KTtcbiAgICAgICAgcmV0dXJuIHNvcnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTb3J0KHByb3BlcnR5OiBTb3J0cywgaXNEZWZhdWx0ID0gZmFsc2UsIGFzY2VuZGluZz86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNvcnRVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCBpc0RlZmF1bHQsIGFzY2VuZGluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGlzRGVmYXVsdCA9IGZhbHNlLCBhc2NlbmRpbmc/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuYWRkU29ydFVuc2FmZShwcm9wZXJ0eSwgaXNEZWZhdWx0LCBhc2NlbmRpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRTb3J0KHByb3BlcnR5OiBTb3J0cywgYXNjZW5kaW5nPzogYm9vbGVhbiwgb3JkZXI/OiBudW1iZXIsIGVuYWJsZWQ/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhEZWZhdWx0U29ydFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGFzY2VuZGluZywgb3JkZXIsIGVuYWJsZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFNvcnRVbnNhZmUocHJvcGVydHk6IHN0cmluZywgYXNjZW5kaW5nPzogYm9vbGVhbiwgb3JkZXI/OiBudW1iZXIsIGVuYWJsZWQ/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIGxldCBzb3J0ID0gdGhpcy5fc29ydHMuZmluZChzID0+IHMucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFzb3J0KSB7XG4gICAgICAgICAgICBzb3J0ID0gbmV3IFNvcnREZXNjcmlwdG9yKHByb3BlcnR5KTtcbiAgICAgICAgICAgIHRoaXMuX3NvcnRzLnB1c2goc29ydCk7XG4gICAgICAgIH1cbiAgICAgICAgc29ydC53aXRoRGVmYXVsdFNvcnQoZW5hYmxlZCA/PyB0cnVlLCBhc2NlbmRpbmcsIG9yZGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTb3J0cyguLi5wcm9wZXJ0aWVzOiBTb3J0c1tdKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTb3J0c1Vuc2FmZSguLi4ocHJvcGVydGllcyBhcyBzdHJpbmdbXSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU29ydHNVbnNhZmUoLi4ucHJvcGVydGllczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc29ydHMucHVzaChuZXcgU29ydERlc2NyaXB0b3IocCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpbHRlcihwcm9wZXJ0eTogRmlsdGVycykge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmlsdGVyVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMuZmluZChzID0+IHMucHJvcGVydHkgPT09IHByb3BlcnR5KSA/PyBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVGaWx0ZXIocHJvcGVydHk6IEZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlRmlsdGVyVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZpbHRlclVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcklkeCA9IHRoaXMuX2ZpbHRlcnMuZmluZEluZGV4KGMgPT4gYy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9maWx0ZXJzLnNwbGljZShmaWx0ZXJJZHgsIDEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWx0ZXI8RmlsdGVyTW9kZWwgPSBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgVGFibGVNb2RlbCA/IFRhYmxlTW9kZWxbRmlsdGVyc10gOiBuZXZlcj4ocHJvcGVydHk6IEZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsPihwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gbmV3IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+KHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cDxGaWx0ZXJNb2RlbCA9IEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsID8gTm9uTnVsbGFibGU8VGFibGVNb2RlbFtGaWx0ZXJzXT4gOiBuZXZlciwgU2VydmljZSA9IHVuZGVmaW5lZD4oXG4gICAgICAgIHByb3BlcnR5OiBGaWx0ZXJzLFxuICAgICAgICBwcm92aWRlcj86IElMb29rdXBEYXRhUHJvdmlkZXI8RmlsdGVyTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICBvcHRpb25zVmFsdWVQcm9wZXJ0eT86IGtleW9mIEZpbHRlck1vZGVsXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpbHRlckxvb2t1cFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIHByb3ZpZGVyLCBvcHRpb25zVmFsdWVQcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWx0ZXJMb29rdXBVbnNhZmU8RmlsdGVyTW9kZWwsIFNlcnZpY2UgPSB1bmRlZmluZWQ+KHByb3BlcnR5OiBzdHJpbmcsIHByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxGaWx0ZXJNb2RlbCwgU2VydmljZT4sIG9wdGlvbnNWYWx1ZVByb3BlcnR5Pzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsLCBTZXJ2aWNlPihwcm9wZXJ0eSwge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiBwcm92aWRlcixcbiAgICAgICAgICAgIG9wdGlvbnNWYWx1ZVByb3BlcnR5OiBvcHRpb25zVmFsdWVQcm9wZXJ0eVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cEVudW08RW51bT4ocHJvcGVydHk6IEZpbHRlcnMsIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPiwgb3B0aW9ucz86IEFycmF5PEVudW0+KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpbHRlckxvb2t1cEVudW1VbnNhZmU8RW51bT4ocHJvcGVydHkgYXMgc3RyaW5nLCBlbnVtRGVzYywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cEVudW1VbnNhZmU8RW51bSA9IEVudW1Db25zdGFudFR5cGU+KHByb3BlcnR5OiBzdHJpbmcsIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPiwgb3B0aW9ucz86IEFycmF5PEVudW0+KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcihwcm9wZXJ0eSwgZW51bURlc2MsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyRnJvbUNvbHVtbihwcm9wZXJ0eTogRXh0cmFjdDxGaWx0ZXJzLCBrZXlvZiBUYWJsZU1vZGVsPiwgZGlzcGxheVR5cGU/OiBGaWx0ZXJEaXNwbGF5VHlwZUVudW0sIGZvcmNlU2ltcGxlID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmlsdGVyRnJvbUNvbHVtblVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGRpc3BsYXlUeXBlLCBmb3JjZVNpbXBsZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJzRnJvbUNvbHVtbnMoLi4ucHJvcGVydGllczogRXh0cmFjdDxGaWx0ZXJzLCBrZXlvZiBUYWJsZU1vZGVsPltdKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhGaWx0ZXJzRnJvbUNvbHVtbnNVbnNhZmUoLi4uKHByb3BlcnRpZXMgYXMgc3RyaW5nW10pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlcnNGcm9tQ29sdW1uc1Vuc2FmZSguLi5wcm9wZXJ0aWVzOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgICAgICBwcm9wZXJ0aWVzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZEZpbHRlckZyb21Db2x1bW5VbnNhZmUocCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyRnJvbUNvbHVtblVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBkaXNwbGF5VHlwZT86IEZpbHRlckRpc3BsYXlUeXBlRW51bSwgZm9yY2VTaW1wbGUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtblVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgIGlmICghY29sdW1uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYE5vIGNvbHVtbiBmb3VuZCBmb3IgZmlsdGVyIHByb3BlcnR5IFwiJHtwcm9wZXJ0eX1cImApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuYWRkRmlsdGVyRnJvbUNvbHVtbkRlc2NyaXB0b3JVbnNhZmUoY29sdW1uLCBmb3JjZVNpbXBsZSk7XG4gICAgICAgIGlmIChkaXNwbGF5VHlwZSAhPSBudWxsKSBmaWx0ZXIud2l0aERpc3BsYXlUeXBlKGRpc3BsYXlUeXBlKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyRnJvbUNvbHVtbkRlc2NyaXB0b3JVbnNhZmU8Q29sdW1uTW9kZWwsIENvbHVtblZhbHVlPihcbiAgICAgICAgY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsLCBDb2x1bW5WYWx1ZT4sXG4gICAgICAgIGZvcmNlU2ltcGxlID0gZmFsc2VcbiAgICApOiBGaWx0ZXJEZXNjcmlwdG9yPGFueSwgVGFibGVNb2RlbD4ge1xuICAgICAgICBsZXQgZmlsdGVyRGVzY3JpcHRvciA9IG5ldyBGaWx0ZXJEZXNjcmlwdG9yPGFueSwgVGFibGVNb2RlbD4oY29sdW1uLnByb3BlcnR5KTtcbiAgICAgICAgbGV0IGZpbHRlclR5cGU6IEZpbHRlclR5cGVFbnVtO1xuXG4gICAgICAgIHN3aXRjaCAoY29sdW1uLmNvbHVtblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uTnVtYmVyOlxuICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5OdW1iZXI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLkJvb2xlYW47XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkRhdGU6XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLkRhdGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkVudW06XG4gICAgICAgICAgICAgICAgaWYgKCFmb3JjZVNpbXBsZSAmJiBjb2x1bW4uZW51bSkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEZXNjcmlwdG9yID0gbmV3IEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yKGNvbHVtbi5wcm9wZXJ0eSwgY29sdW1uLmVudW0pO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uTG9va3VwRW51bTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uU3RyaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uU3RyaW5nOlxuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5DdXN0b206XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5TdHJpbmc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJEZXNjcmlwdG9yLmFzRmlsdGVyVHlwZShmaWx0ZXJUeXBlKTtcbiAgICAgICAgaWYgKChmaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5OdW1iZXIgfHwgZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uRGF0ZSkgJiYgY29sdW1uLmRpc3BsYXlGb3JtYXQpIHtcbiAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3Iud2l0aERpc3BsYXlGb3JtYXQoY29sdW1uLmRpc3BsYXlGb3JtYXQsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZmlsdGVycy5wdXNoKGZpbHRlckRlc2NyaXB0b3IpO1xuXG4gICAgICAgIHJldHVybiBmaWx0ZXJEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmlsdGVyPEZpbHRlck1vZGVsPihwcm9wZXJ0eTogRmlsdGVycywgZmlsdGVyOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPik6IHRoaXMge1xuICAgICAgICBpZiAoZmlsdGVyLnByb3BlcnR5ICE9PSBwcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBGaWx0ZXIgcHJvcGVydHkgXCIke3Byb3BlcnR5fVwiIGFuZCBGaWx0ZXIgZGVzY3JpcHRvciBwcm9wZXJ0eSBcIiR7ZmlsdGVyLnByb3BlcnR5fVwiIGRvIG5vdCBtYXRjaC5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy53aXRoRmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsPihmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsPihmaWx0ZXI6IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2l6ZShzaXplOiBUYWJsZVNpemVFbnVtID0gVGFibGVTaXplRW51bS5Ob3JtYWwpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IHNpemU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGFibGVGdWxsSGVpZ2h0T2Zmc2V0KHRhYmxlRnVsbEhlaWdodE9mZnNldDogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlRnVsbEhlaWdodE9mZnNldCA9IHRhYmxlRnVsbEhlaWdodE9mZnNldDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSb3dIZWlnaHQocm93SGVpZ2h0OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcm93SGVpZ2h0ID0gcm93SGVpZ2h0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEhvdmVyKGhvdmVyOiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0hvdmVyID0gaG92ZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoR3JpZGxpbmVzKGdyaWRsaW5lczogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNHcmlkbGluZXMgPSBncmlkbGluZXM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0aGF0IGVuYWJsZXMvZGlzYWJsZWQgY29sdW1uIHJlc2l6ZSBmZWF0dXJlIHdpdGggY29sdW1uUmVzaXplTW9kZSBvbiBhbGwgY29sdW1ucy5cbiAgICAgKiBAcGFyYW0gcmVzaXphYmxlQ29sdW1ucyBUcnVlIGlmIGVuYWJsZWRcbiAgICAgKiBAcGFyYW0gY29sdW1uUmVzaXplTW9kZSAnZml0JyBvciAnZXhwYW5kJyBtb2RlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5zUmVzaXphYmxlKHJlc2l6YWJsZUNvbHVtbnMgPSB0cnVlLCBjb2x1bW5SZXNpemVNb2RlOiAnZml0JyB8ICdleHBhbmQnID0gJ2ZpdCcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzUmVzaXphYmxlQ29sdW1ucyA9IHJlc2l6YWJsZUNvbHVtbnM7XG4gICAgICAgIHRoaXMuX2NvbHVtblJlc2l6ZU1vZGUgPSBjb2x1bW5SZXNpemVNb2RlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGNvbHVtbiB0byAodW4pZnJvemVuLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rpb25Db2x1bW5Gcm96ZW4gVHJ1ZSB0byBmcmVlemUgc2VsZWN0aW9uIGNvbHVtbiwgZmFsc2UgdG8gdW5mcmVlemUgaXQuXG4gICAgICogQHBhcmFtIGFjdGlvbkNvbHVtbkZyb3plbiBUcnVlIHRvIGZyZWV6ZSBhY3Rpb24gY29sdW1uLCBmYWxzZSB0byB1bmZyZWV6ZSBpdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbkZyb3plbihzZWxlY3Rpb25Db2x1bW5Gcm96ZW4/OiBib29sZWFuLCBhY3Rpb25Db2x1bW5Gcm96ZW4/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkNvbHVtbkZyb3plbiA9IHNlbGVjdGlvbkNvbHVtbkZyb3plbjtcbiAgICAgICAgdGhpcy5fYWN0aW9uQ29sdW1uRnJvemVuID0gYWN0aW9uQ29sdW1uRnJvemVuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJvd0NsYXNzTmFtZShyb3dDbGFzc05hbWU/OiBzdHJpbmcsIGNsYXNzTmFtZU1hcEZuPzogKGNsYXNzTmFtZT86IHN0cmluZywgaXRlbT86IFRhYmxlTW9kZWwpID0+IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9yb3dDbGFzc05hbWUgPSByb3dDbGFzc05hbWU7XG4gICAgICAgIHRoaXMuX3Jvd0NsYXNzTmFtZU1hcEZuID0gY2xhc3NOYW1lTWFwRm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSGVhZGVyQ2xhc3NOYW1lKGhlYWRlckNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hlYWRlckNsYXNzTmFtZSA9IGhlYWRlckNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb2NhbGl6ZWQoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzTG9jYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eShsb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzTG9jYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkgPSBsb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSb3dFeHBhbmRhYmxlKHByb3BlcnR5Pzoga2V5b2YgVGFibGVNb2RlbCwgY29sU3Bhbj86IG51bWJlciwgY29tcG9uZW50VHlwZT86IFR5cGU8SVJvd0V4cGFuZGFibGVDb21wb25lbnQ8VGFibGVNb2RlbD4+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3Jvd0V4cGFuZGFibGUgPSB0cnVlO1xuICAgICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eSA9IHByb3BlcnR5IGFzIHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sU3Bhbikge1xuICAgICAgICAgICAgdGhpcy5fcm93RXhwYW5kYWJsZUNvbFNwYW4gPSBjb2xTcGFuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnRUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dFeHBhbmRhYmxlQ29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aFJvd1Jlb3JkZXJhYmxlKHJlb3JkYWJsZSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5fcm93UmVvcmRlcmFibGUgPSByZW9yZGFibGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb3B5RmllbGRzVG8ob2JqOiBUYWJsZURlc2NyaXB0b3JJbnN0PGFueSwgYW55LCBhbnk+KSB7XG4gICAgICAgIG9iai5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgb2JqLl9oaWRlSGVhZGVyID0gdGhpcy5faGlkZUhlYWRlcjtcbiAgICAgICAgb2JqLl90cmFja1Byb3BlcnR5ID0gdGhpcy5fdHJhY2tQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9maWx0ZXJzID0gdGhpcy5fZmlsdGVycy5tYXAoZiA9PiBmLmNvcHkoKSk7XG4gICAgICAgIG9iai5fc29ydHMgPSB0aGlzLl9zb3J0cy5tYXAocyA9PiBzLmNvcHkoKSk7XG4gICAgICAgIG9iai5fY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lO1xuICAgICAgICBvYmouX3NpemUgPSB0aGlzLl9zaXplO1xuICAgICAgICBvYmouX3RhYmxlRnVsbEhlaWdodE9mZnNldCA9IHRoaXMuX3RhYmxlRnVsbEhlaWdodE9mZnNldDtcbiAgICAgICAgb2JqLl9yb3dIZWlnaHQgPSB0aGlzLl9yb3dIZWlnaHQ7XG4gICAgICAgIG9iai5faGFzSG92ZXIgPSB0aGlzLl9oYXNIb3ZlcjtcbiAgICAgICAgb2JqLl9oYXNHcmlkbGluZXMgPSB0aGlzLl9oYXNHcmlkbGluZXM7XG4gICAgICAgIG9iai5faGFzUmVzaXphYmxlQ29sdW1ucyA9IHRoaXMuX2hhc1Jlc2l6YWJsZUNvbHVtbnM7XG4gICAgICAgIG9iai5fY29sdW1uUmVzaXplTW9kZSA9IHRoaXMuX2NvbHVtblJlc2l6ZU1vZGU7XG4gICAgICAgIG9iai5fYWN0aW9uQ29sdW1uRnJvemVuID0gdGhpcy5fYWN0aW9uQ29sdW1uRnJvemVuO1xuICAgICAgICBvYmouX3NlbGVjdGlvbkNvbHVtbkZyb3plbiA9IHRoaXMuX3NlbGVjdGlvbkNvbHVtbkZyb3plbjtcbiAgICAgICAgb2JqLl9pc0xvY2FsaXplZCA9IHRoaXMuX2lzTG9jYWxpemVkO1xuICAgICAgICBvYmouX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5ID0gdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk7XG4gICAgICAgIG9iai5fcGFnaW5hdGlvbk1vZGUgPSB0aGlzLl9wYWdpbmF0aW9uTW9kZTtcbiAgICAgICAgb2JqLl9yb3dzUGVyUGFnZU9wdGlvbnMgPSB0aGlzLl9yb3dzUGVyUGFnZU9wdGlvbnM7XG4gICAgICAgIG9iai5fcm93RXhwYW5kYWJsZSA9IHRoaXMuX3Jvd0V4cGFuZGFibGU7XG4gICAgICAgIG9iai5fcm93RXhwYW5kYWJsZUNvbFNwYW4gPSB0aGlzLl9yb3dFeHBhbmRhYmxlQ29sU3BhbjtcbiAgICAgICAgb2JqLl9yb3dFeHBhbmRhYmxlUHJvcGVydHkgPSB0aGlzLl9yb3dFeHBhbmRhYmxlUHJvcGVydHk7XG4gICAgICAgIG9iai5fcm93RXhwYW5kYWJsZUNvbXBvbmVudFR5cGUgPSB0aGlzLl9yb3dFeHBhbmRhYmxlQ29tcG9uZW50VHlwZTtcbiAgICAgICAgb2JqLl9yb3dSZW9yZGVyYWJsZSA9IHRoaXMuX3Jvd1Jlb3JkZXJhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGVNb2RlbCwgU29ydHMsIEZpbHRlcnM+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBUYWJsZURlc2NyaXB0b3JJbnN0PFRhYmxlTW9kZWwsIFNvcnRzLCBGaWx0ZXJzPih0aGlzLm1vZGVsLmNvcHkoKSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICBkZXNjcmlwdG9yLl9jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjID0+IGMuY29weSgpKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3QgZXh0ZW5kcyBUYWJsZURlc2NyaXB0b3JJbnN0PGFueT4ge1xuICAgIHByaXZhdGUgX2V4Y2x1ZGVkQ29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHByaXZhdGUgX2ZpbHRlckNvbHVtbnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBwcml2YXRlIF9zb3J0Q29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHByaXZhdGUgX3NvcnRDb2x1bW5Nb2RlID0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLkVYQ0xVREU7XG4gICAgcHJpdmF0ZSBfZmlsdGVyQ29sdW1uTW9kZSA9IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5FWENMVURFO1xuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIF9jb2x1bW5zOiBDb2x1bW5EeW5hbWljRGVzY3JpcHRvcltdID0gW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxhbnk+KSB7XG4gICAgICAgIHN1cGVyKG1vZGVsKTtcblxuICAgICAgICBpZiAodHlwZW9mIG1vZGVsLnRpdGxlUHJvcGVydHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhUaXRsZShtb2RlbC50aXRsZVByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgY29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVmaW5lcyBleGNsdWRlZCBjb2x1bW5zIHdoZW4gZ2VuZXJhdGluZyBkZXNjcmlwdG9yXG4gICAgICogQHBhcmFtIGV4Y2x1ZGVkQ29sdW1uIG5hbWVzIG9mIGV4Y2x1ZGVkIGNvbHVtbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNFeGNsdWRlZChleGNsdWRlZENvbHVtbjogc3RyaW5nW10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZXhjbHVkZWRDb2x1bW5zID0gZXhjbHVkZWRDb2x1bW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgY29sdW1uIHByb3BlcnRpZXMgb24gd2hpY2ggc29ydCBpcyBkZWZpbmVkIG9yIG5vdCBkZXBlbmRpbmcgb24gc29ydENvbHVtbk1vZGVcbiAgICAgKiBAcGFyYW0gc29ydE9uQ29sdW1ucyBjb2x1bW4gbmFtZXNcbiAgICAgKiBAcGFyYW0gc29ydENvbHVtbk1vZGUgSU5DTFVERV9PTkxZIChkZWZhdWx0KSBvbmx5IGdpdmVuIGNvbHVtbnMgd2lsbCBoYXZlIHNvcnQsIEVYQ0xVREUgZ2l2ZW4gY29sdW1ucyB3aWxsIE5PVCBoYXZlIHNvcnRcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNTb3J0KHNvcnRPbkNvbHVtbnM6IHN0cmluZ1tdLCBzb3J0Q29sdW1uTW9kZSA9IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5JTkNMVURFX09OTFkpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc29ydENvbHVtbk1vZGUgPSBzb3J0Q29sdW1uTW9kZTtcbiAgICAgICAgdGhpcy5fc29ydENvbHVtbnMgPSBzb3J0T25Db2x1bW5zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWZpbmVzIGNvbHVtbiBwcm9wZXJ0aWVzIG9uIHdoaWNoIGZpbHRlciBpcyBkZWZpbmVkIG9yIG5vdCBkZXBlbmRpbmcgb24gZmlsdGVyQ29sdW1uTW9kZVxuICAgICAqIEBwYXJhbSBmaWx0ZXJPbkNvbHVtbiBjb2x1bW4gbmFtZXNcbiAgICAgKiBAcGFyYW0gZmlsdGVyQ29sdW1uTW9kZSBJTkNMVURFX09OTFkgKGRlZmF1bHQpIG9ubHkgZ2l2ZW4gY29sdW1ucyB3aWxsIGhhdmUgZmlsdGVyLCBFWENMVURFIGdpdmVuIGNvbHVtbnMgd2lsbCBOT1QgaGF2ZSBmaWx0ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNGaWx0ZXIoZmlsdGVyT25Db2x1bW46IHN0cmluZ1tdLCBmaWx0ZXJDb2x1bW5Nb2RlID0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLklOQ0xVREVfT05MWSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWx0ZXJDb2x1bW5Nb2RlID0gZmlsdGVyQ29sdW1uTW9kZTtcbiAgICAgICAgdGhpcy5fZmlsdGVyQ29sdW1ucyA9IGZpbHRlck9uQ29sdW1uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIGdpdmVuIHR5cGUgdG8gY29sdW1uIHdpdGggZ2l2ZW4gcHJvcGVydHkgYW5kIHJldHVybnMgdGhpcyB0YWJsZVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4ncyBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0eXBlIGN1c3RvbSB0eXBlIGZvciBjb2x1bW5cbiAgICAgKiBAcGFyYW0gZGlzcGxheVR5cGUgY3VzdG9tIGNvbHVtbiB2YWx1ZSBkaXNwbGF5IHR5cGVcbiAgICAgKiBAcGFyYW0gYXJncyBhZGRpdGlvbiBhcmd1bWVudHMgZm9yIGNvbHVtblxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uUHJlc2V0VHlwZShwcm9wZXJ0eTogc3RyaW5nLCB0eXBlOiBDb2x1bW5UeXBlRW51bSwgZGlzcGxheVR5cGU/OiBDb2x1bW5EaXNwbGF5VHlwZUVudW0sIC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gcHJvcGVydHkgPT09IGNvbC5wcm9wZXJ0eSkgPz8gdGhpcy5hZGRDb2x1bW4ocHJvcGVydHkpLndpdGhUaXRsZShwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIGNvbHVtbi5hc1R5cGUodHlwZSwgZGlzcGxheVR5cGUsIC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgdGl0bGUgdG8gY29sdW1uIHdpdGggZ2l2ZW4gcHJvcGVydHkgYW5kIHJldHVybnMgdGhpcyB0YWJsZVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4ncyBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0aXRsZSBjb2x1bW4ncyB0aXRsZVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uVGl0bGUocHJvcGVydHk6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLl9jb2x1bW5zLmZpbmQoY29sID0+IHByb3BlcnR5ID09PSBjb2wucHJvcGVydHkpID8/IHRoaXMuYWRkQ29sdW1uKHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLndpdGhUaXRsZSh0aXRsZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlcyBjb2x1bW5zIGRlZmluZWQgb24gdGFibGUgYmFzZWQgb24gZGF0YSBmZXRjaGVkIGZyb20gYXBpXG4gICAgICogQHBhcmFtIGRhdGEgZGF0YSBmcm9tIGFwaVxuICAgICAqL1xuICAgIHB1YmxpYyB0b1RhYmxlRGVzY3JpcHRvckZyb21EYXRhKGRhdGE6IERhdGFMaXN0UmVzdWx0KTogVGFibGVEZXNjcmlwdG9ySW5zdDxhbnk+IHtcbiAgICAgICAgY29uc3QgdGFibGVEZXNjcmlwdG9yID0gdGhpcy50b1RhYmxlRGVzY3JpcHRvcigpO1xuXG4gICAgICAgIGlmIChkYXRhLmRhdGEgPT0gbnVsbCB8fCBkYXRhLmRhdGEubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0YWJsZURlc2NyaXB0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvYmplY3RNb2RlbCA9IGRhdGEuZGF0YVswXTtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IGZsYXR0ZW5PYmplY3RLZXlzKG9iamVjdE1vZGVsKVxuICAgICAgICAgICAgLmZpbHRlcigoW2tleV0pID0+ICF0aGlzLl9leGNsdWRlZENvbHVtbnMuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gIUFycmF5LmlzQXJyYXkodmFsdWUpKTsgLy9leGNsdWRlIGFycmF5cyBhbmQgc2V0c1xuXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGFDb2x1bW4gPSB0aGlzLl9jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5wcm9wZXJ0eSA9PT0ga2V5KTtcbiAgICAgICAgICAgIGxldCBjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8YW55LCBhbnk+O1xuICAgICAgICAgICAgaWYgKG1ldGFDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1ldGFDb2x1bW4udmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29sdW1uID0gbWV0YUNvbHVtbi50b0NvbHVtbkRlc2NyaXB0b3IoKTtcbiAgICAgICAgICAgICAgICB0YWJsZURlc2NyaXB0b3Iud2l0aENvbHVtbihjb2x1bW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSB0YWJsZURlc2NyaXB0b3IuYWRkQ29sdW1uKGtleSkud2l0aFRpdGxlKGtleSk7XG4gICAgICAgICAgICAgICAgY29sdW1uVG9EYXRlTnVtYmVyT3JCb29sZWFuKGNvbHVtbiwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5pMThuQmFzZUtleSAmJiAhY29sdW1uLnByb3BlcnR5LmluY2x1ZGVzKCdyZXYnKSkge1xuICAgICAgICAgICAgICAgIGNvbHVtbi53aXRoVGl0bGUoW3RoaXMubW9kZWwuaTE4bkJhc2VLZXksICdwcm9wZXJ0aWVzJywgY29sdW1uLnByb3BlcnR5XS5qb2luKCcuJykucmVwbGFjZSgnc3RhdGUuJywgJycpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudE9mU29ydENvbHVtbnMgPSB0aGlzLl9zb3J0Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW4ucHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICh0aGlzLl9zb3J0Q29sdW1uTW9kZSA9PT0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLkVYQ0xVREUgJiYgIWVsZW1lbnRPZlNvcnRDb2x1bW5zKSB8fFxuICAgICAgICAgICAgICAgICh0aGlzLl9zb3J0Q29sdW1uTW9kZSA9PT0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLklOQ0xVREVfT05MWSAmJiBlbGVtZW50T2ZTb3J0Q29sdW1ucylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRhYmxlRGVzY3JpcHRvci53aXRoU29ydFVuc2FmZShjb2x1bW4ucHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50T2ZGaWx0ZXJDb2x1bW5zID0gdGhpcy5fZmlsdGVyQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4ucHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckNvbHVtbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICgodGhpcy5fZmlsdGVyQ29sdW1uTW9kZSA9PT0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLkVYQ0xVREUgJiYgIWVsZW1lbnRPZkZpbHRlckNvbHVtbnMpIHx8XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLl9maWx0ZXJDb2x1bW5Nb2RlID09PSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uSU5DTFVERV9PTkxZICYmIGVsZW1lbnRPZkZpbHRlckNvbHVtbnMpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGFibGVEZXNjcmlwdG9yLmFkZEZpbHRlckZyb21Db2x1bW5EZXNjcmlwdG9yVW5zYWZlKGNvbHVtbiwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhYmxlRGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhZGRzIENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yIHRvIHRoaXMgdGFibGVcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgY29sdW1uJ3MgcHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWRkQ29sdW1uKHByb3BlcnR5OiBrZXlvZiBhbnkpOiBDb2x1bW5EeW5hbWljRGVzY3JpcHRvciB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBDb2x1bW5EeW5hbWljRGVzY3JpcHRvcihwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQ29sdW1uKHByb3BlcnR5OiBrZXlvZiBhbnkpOiB0aGlzIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpID8/IHRoaXMuYWRkQ29sdW1uKHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLndpdGhWaXNpYmlsaXR5KGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBkZWVwIGNvcHkgb2YgdGFibGUgZHluYW1pYyBkZXNjcmlwdG9yXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNvcHkoKTogVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3Qge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFRhYmxlRHluYW1pY0Rlc2NyaXB0b3JJbnN0KHRoaXMubW9kZWwuY29weSgpKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZGVzY3JpcHRvcik7XG4gICAgICAgIGRlc2NyaXB0b3IuX2NvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGMgPT4gYy5jb3B5KCkpO1xuICAgICAgICBkZXNjcmlwdG9yLl9leGNsdWRlZENvbHVtbnMgPSBbLi4udGhpcy5fZXhjbHVkZWRDb2x1bW5zXTtcbiAgICAgICAgZGVzY3JpcHRvci5fZmlsdGVyQ29sdW1ucyA9IFsuLi50aGlzLl9maWx0ZXJDb2x1bW5zXTtcbiAgICAgICAgZGVzY3JpcHRvci5fc29ydENvbHVtbnMgPSBbLi4udGhpcy5fc29ydENvbHVtbnNdO1xuICAgICAgICBkZXNjcmlwdG9yLl9maWx0ZXJDb2x1bW5Nb2RlID0gdGhpcy5fZmlsdGVyQ29sdW1uTW9kZTtcbiAgICAgICAgZGVzY3JpcHRvci5fc29ydENvbHVtbk1vZGUgPSB0aGlzLl9zb3J0Q29sdW1uTW9kZTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHRvVGFibGVEZXNjcmlwdG9yKCk6IFRhYmxlRGVzY3JpcHRvckluc3Q8YW55PiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGVEZXNjcmlwdG9ySW5zdDxhbnk+KHRoaXMubW9kZWwpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuIl19
|
|
@@ -16,4 +16,5 @@ export * from './models/column-value.model';
|
|
|
16
16
|
export * from './models/table.model';
|
|
17
17
|
export * from './models/table-columns.model';
|
|
18
18
|
export * from './models/table-event.model';
|
|
19
|
-
|
|
19
|
+
export * from './models/row-expandable-component.model';
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9hcGkvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQjtBQUNqQixjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsOENBQThDLENBQUM7QUFFN0QsY0FBYztBQUNkLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsd0NBQXdDLENBQUM7QUFFdkQsVUFBVTtBQUNWLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxvQ0FBb0MsQ0FBQztBQUVuRCxTQUFTO0FBQ1QsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx5Q0FBeUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGRhdGEgcHJvdmlkZXJzXG5leHBvcnQgKiBmcm9tICcuL2RhdGEtcHJvdmlkZXJzL3RhYmxlLmRhdGEtcHJvdmlkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhLXByb3ZpZGVycy90YWJsZS1kYXRhLXByb3ZpZGVyLmZhY3RvcnknO1xuXG4vLyBkZXNjcmlwdG9yc1xuZXhwb3J0ICogZnJvbSAnLi9kZXNjcmlwdG9ycy9jb2x1bW4uZGVzY3JpcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL2Rlc2NyaXB0b3JzL3NvcnQuZGVzY3JpcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL2Rlc2NyaXB0b3JzL3RhYmxlLmRlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZXNjcmlwdG9ycy90YWJsZS1kZXNjcmlwdG9yLmZhY3RvcnknO1xuXG4vLyBoZWxwZXJzXG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMvY2xhc3MtYXR0cmlidXRlLWNvbnZlcnRlcic7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMvdGFibGUtZGVzY3JpcHRvci1oZWxwZXJzJztcblxuLy8gbW9kZWxzXG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9jbGFzcy10YWJsZS1hdHRyaWJ1dGUubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvY29sdW1uLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL2NvbHVtbi12YWx1ZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy90YWJsZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy90YWJsZS1jb2x1bW5zLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL3RhYmxlLWV2ZW50Lm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL3Jvdy1leHBhbmRhYmxlLWNvbXBvbmVudC5tb2RlbCc7XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWV4cGFuZGFibGUtY29tcG9uZW50Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGUvYXBpL3NyYy9tb2RlbHMvcm93LWV4cGFuZGFibGUtY29tcG9uZW50Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lucHV0U2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBJUm93RXhwYW5kYWJsZUNvbXBvbmVudDxJdGVtID0gdW5rbm93bj4ge1xuICAgIGl0ZW06IElucHV0U2lnbmFsPEl0ZW0+O1xufVxuIl19
|