@valtimo/components 10.7.0 → 10.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/menu/menu-item-text.component.mjs +3 -3
- package/esm2020/lib/components/search-fields/search-fields.component.mjs +3 -3
- package/fesm2015/valtimo-components.mjs +4 -4
- package/fesm2015/valtimo-components.mjs.map +1 -1
- package/fesm2020/valtimo-components.mjs +4 -4
- package/fesm2020/valtimo-components.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -36,10 +36,10 @@ export class MenuItemTextComponent {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
MenuItemTextComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuItemTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
39
|
-
MenuItemTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MenuItemTextComponent, selector: "valtimo-menu-item-text", inputs: { menuItem: "menuItem", accent: "accent", showOverFlowMenu: "showOverFlowMenu" }, outputs: { overflowMenuClosed: "overflowMenuClosed", openInNewTab: "openInNewTab" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{titleTranslation: menuItem | menuItemTranslate | async} as obs\"\n class=\"menu-item-text-container\"\n>\n <span [ngClass]=\"{'cds--link empty-menu-icon-text': accent}\">\n <div class=\"menu-item-icon-container\">\n <i class=\"{{ menuItem.iconClass }}\"></i>\n </div>\n\n {{ obs.titleTranslation + (accent ? ' >' : '') }}\n </span>\n\n <ng-container *ngTemplateOutlet=\"overflowTrigger\"></ng-container>\n\n <cds-overflow-menu\n [customTrigger]=\"overflowTrigger\"\n [open]=\"showOverFlowMenu\"\n [offset]=\"{x: 75, y: 25}\"\n placement=\"bottom\"\n wrapperClass=\"--hide-after --wide\"\n (openChange)=\"onOpenChange($event)\"\n >\n <cds-overflow-menu-option (selected)=\"onSelectOpenInNewTab()\">{{\n 'interface.openInNewTab' | translate\n }}</cds-overflow-menu-option>\n </cds-overflow-menu>\n</div>\n\n<ng-template #overflowTrigger>\n <div></div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.menu-item-text-container .menu-item-icon-container{position:absolute;margin-left:-.75rem;transform:translate(-100%)}.menu-item-text-container .empty-menu-icon-text{font-weight:600!important}.menu-item-text-container .cds--overflow-menu{visibility:hidden;height:0;width:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.OverflowMenu, selector: "cds-overflow-menu, ibm-overflow-menu", inputs: ["buttonLabel", "flip", "placement", "open", "customTrigger", "offset", "wrapperClass", "triggerClass"], outputs: ["openChange"] }, { kind: "component", type: i2.OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: ["divider", "type", "disabled", "href", "target", "innerClass"], outputs: ["selected"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i4.MenuItemTranslationPipe, name: "menuItemTranslate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
39
|
+
MenuItemTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MenuItemTextComponent, selector: "valtimo-menu-item-text", inputs: { menuItem: "menuItem", accent: "accent", showOverFlowMenu: "showOverFlowMenu" }, outputs: { overflowMenuClosed: "overflowMenuClosed", openInNewTab: "openInNewTab" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{titleTranslation: menuItem | menuItemTranslate | async} as obs\"\n class=\"menu-item-text-container\"\n id=\"{{menuItem?.id}}\"\n>\n <span [ngClass]=\"{'cds--link empty-menu-icon-text': accent}\">\n <div class=\"menu-item-icon-container\">\n <i class=\"{{ menuItem.iconClass }}\"></i>\n </div>\n\n {{ obs.titleTranslation + (accent ? ' >' : '') }}\n </span>\n\n <ng-container *ngTemplateOutlet=\"overflowTrigger\"></ng-container>\n\n <cds-overflow-menu\n [customTrigger]=\"overflowTrigger\"\n [open]=\"showOverFlowMenu\"\n [offset]=\"{x: 75, y: 25}\"\n placement=\"bottom\"\n wrapperClass=\"--hide-after --wide\"\n (openChange)=\"onOpenChange($event)\"\n >\n <cds-overflow-menu-option (selected)=\"onSelectOpenInNewTab()\">{{\n 'interface.openInNewTab' | translate\n }}</cds-overflow-menu-option>\n </cds-overflow-menu>\n</div>\n\n<ng-template #overflowTrigger>\n <div></div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.menu-item-text-container .menu-item-icon-container{position:absolute;margin-left:-.75rem;transform:translate(-100%)}.menu-item-text-container .empty-menu-icon-text{font-weight:600!important}.menu-item-text-container .cds--overflow-menu{visibility:hidden;height:0;width:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.OverflowMenu, selector: "cds-overflow-menu, ibm-overflow-menu", inputs: ["buttonLabel", "flip", "placement", "open", "customTrigger", "offset", "wrapperClass", "triggerClass"], outputs: ["openChange"] }, { kind: "component", type: i2.OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: ["divider", "type", "disabled", "href", "target", "innerClass"], outputs: ["selected"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i4.MenuItemTranslationPipe, name: "menuItemTranslate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
40
40
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuItemTextComponent, decorators: [{
|
|
41
41
|
type: Component,
|
|
42
|
-
args: [{ selector: 'valtimo-menu-item-text', encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{titleTranslation: menuItem | menuItemTranslate | async} as obs\"\n class=\"menu-item-text-container\"\n>\n <span [ngClass]=\"{'cds--link empty-menu-icon-text': accent}\">\n <div class=\"menu-item-icon-container\">\n <i class=\"{{ menuItem.iconClass }}\"></i>\n </div>\n\n {{ obs.titleTranslation + (accent ? ' >' : '') }}\n </span>\n\n <ng-container *ngTemplateOutlet=\"overflowTrigger\"></ng-container>\n\n <cds-overflow-menu\n [customTrigger]=\"overflowTrigger\"\n [open]=\"showOverFlowMenu\"\n [offset]=\"{x: 75, y: 25}\"\n placement=\"bottom\"\n wrapperClass=\"--hide-after --wide\"\n (openChange)=\"onOpenChange($event)\"\n >\n <cds-overflow-menu-option (selected)=\"onSelectOpenInNewTab()\">{{\n 'interface.openInNewTab' | translate\n }}</cds-overflow-menu-option>\n </cds-overflow-menu>\n</div>\n\n<ng-template #overflowTrigger>\n <div></div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.menu-item-text-container .menu-item-icon-container{position:absolute;margin-left:-.75rem;transform:translate(-100%)}.menu-item-text-container .empty-menu-icon-text{font-weight:600!important}.menu-item-text-container .cds--overflow-menu{visibility:hidden;height:0;width:0}\n"] }]
|
|
42
|
+
args: [{ selector: 'valtimo-menu-item-text', encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{titleTranslation: menuItem | menuItemTranslate | async} as obs\"\n class=\"menu-item-text-container\"\n id=\"{{menuItem?.id}}\"\n>\n <span [ngClass]=\"{'cds--link empty-menu-icon-text': accent}\">\n <div class=\"menu-item-icon-container\">\n <i class=\"{{ menuItem.iconClass }}\"></i>\n </div>\n\n {{ obs.titleTranslation + (accent ? ' >' : '') }}\n </span>\n\n <ng-container *ngTemplateOutlet=\"overflowTrigger\"></ng-container>\n\n <cds-overflow-menu\n [customTrigger]=\"overflowTrigger\"\n [open]=\"showOverFlowMenu\"\n [offset]=\"{x: 75, y: 25}\"\n placement=\"bottom\"\n wrapperClass=\"--hide-after --wide\"\n (openChange)=\"onOpenChange($event)\"\n >\n <cds-overflow-menu-option (selected)=\"onSelectOpenInNewTab()\">{{\n 'interface.openInNewTab' | translate\n }}</cds-overflow-menu-option>\n </cds-overflow-menu>\n</div>\n\n<ng-template #overflowTrigger>\n <div></div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.menu-item-text-container .menu-item-icon-container{position:absolute;margin-left:-.75rem;transform:translate(-100%)}.menu-item-text-container .empty-menu-icon-text{font-weight:600!important}.menu-item-text-container .cds--overflow-menu{visibility:hidden;height:0;width:0}\n"] }]
|
|
43
43
|
}], propDecorators: { menuItem: [{
|
|
44
44
|
type: Input
|
|
45
45
|
}], accent: [{
|
|
@@ -51,4 +51,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
51
51
|
}], openInNewTab: [{
|
|
52
52
|
type: Output
|
|
53
53
|
}] } });
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLXRleHQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9tZW51L21lbnUtaXRlbS10ZXh0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbWVudS9tZW51LWl0ZW0tdGV4dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7OztBQVN4RixNQUFNLE9BQU8scUJBQXFCO0lBTmxDO1FBUVcsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN4Qix1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzdDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztLQVdsRDtJQVRRLFlBQVksQ0FBQyxJQUFhO1FBQy9CLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRU0sb0JBQW9CO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7a0hBZlUscUJBQXFCO3NHQUFyQixxQkFBcUIsNk9DekJsQyxvbERBZ0RBOzJGRHZCYSxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0Usd0JBQXdCLGlCQUduQixpQkFBaUIsQ0FBQyxJQUFJOzhCQUc1QixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0ksa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01lbnVJdGVtfSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLW1lbnUtaXRlbS10ZXh0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUtaXRlbS10ZXh0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWVudS1pdGVtLXRleHQuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgTWVudUl0ZW1UZXh0Q29tcG9uZW50IHtcbiAgQElucHV0KCkgbWVudUl0ZW06IE1lbnVJdGVtO1xuICBASW5wdXQoKSBhY2NlbnQgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd092ZXJGbG93TWVudSA9IGZhbHNlO1xuICBAT3V0cHV0KCkgb3ZlcmZsb3dNZW51Q2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvcGVuSW5OZXdUYWIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBwdWJsaWMgb25PcGVuQ2hhbmdlKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIW9wZW4pIHtcbiAgICAgIHRoaXMub3ZlcmZsb3dNZW51Q2xvc2VkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25TZWxlY3RPcGVuSW5OZXdUYWIoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuSW5OZXdUYWIuZW1pdCgpO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXZcbiAgKm5nSWY9XCJ7dGl0bGVUcmFuc2xhdGlvbjogbWVudUl0ZW0gfCBtZW51SXRlbVRyYW5zbGF0ZSB8IGFzeW5jfSBhcyBvYnNcIlxuICBjbGFzcz1cIm1lbnUtaXRlbS10ZXh0LWNvbnRhaW5lclwiXG4gIGlkPVwie3ttZW51SXRlbT8uaWR9fVwiXG4+XG4gIDxzcGFuIFtuZ0NsYXNzXT1cInsnY2RzLS1saW5rIGVtcHR5LW1lbnUtaWNvbi10ZXh0JzogYWNjZW50fVwiPlxuICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0taWNvbi1jb250YWluZXJcIj5cbiAgICAgIDxpIGNsYXNzPVwie3sgbWVudUl0ZW0uaWNvbkNsYXNzIH19XCI+PC9pPlxuICAgIDwvZGl2PlxuXG4gICAge3sgb2JzLnRpdGxlVHJhbnNsYXRpb24gKyAoYWNjZW50ID8gJyA+JyA6ICcnKSB9fVxuICA8L3NwYW4+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm92ZXJmbG93VHJpZ2dlclwiPjwvbmctY29udGFpbmVyPlxuXG4gIDxjZHMtb3ZlcmZsb3ctbWVudVxuICAgIFtjdXN0b21UcmlnZ2VyXT1cIm92ZXJmbG93VHJpZ2dlclwiXG4gICAgW29wZW5dPVwic2hvd092ZXJGbG93TWVudVwiXG4gICAgW29mZnNldF09XCJ7eDogNzUsIHk6IDI1fVwiXG4gICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICB3cmFwcGVyQ2xhc3M9XCItLWhpZGUtYWZ0ZXIgLS13aWRlXCJcbiAgICAob3BlbkNoYW5nZSk9XCJvbk9wZW5DaGFuZ2UoJGV2ZW50KVwiXG4gID5cbiAgICA8Y2RzLW92ZXJmbG93LW1lbnUtb3B0aW9uIChzZWxlY3RlZCk9XCJvblNlbGVjdE9wZW5Jbk5ld1RhYigpXCI+e3tcbiAgICAgICdpbnRlcmZhY2Uub3BlbkluTmV3VGFiJyB8IHRyYW5zbGF0ZVxuICAgIH19PC9jZHMtb3ZlcmZsb3ctbWVudS1vcHRpb24+XG4gIDwvY2RzLW92ZXJmbG93LW1lbnU+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNvdmVyZmxvd1RyaWdnZXI+XG4gIDxkaXY+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -193,10 +193,10 @@ export class SearchFieldsComponent {
|
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
195
|
SearchFieldsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SearchFieldsComponent, deps: [{ token: i1.DocumentService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
196
|
-
SearchFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SearchFieldsComponent, selector: "valtimo-search-fields", inputs: { loading: "loading", searchFields: "searchFields", documentDefinitionName: "documentDefinitionName", setValuesSubject$: "setValuesSubject$", defaultValues: "defaultValues" }, outputs: { doSearch: "doSearch" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div\n class=\"row p-3\"\n [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\"\n *ngIf=\"searchFields$ | async as searchFields\"\n >\n <ng-container *ngFor=\"let searchField of searchFields; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container\n *ngTemplateOutlet=\"\n buttonsTemplate;\n context: {noSearchFields: !searchFields || searchFields.length === 0}\n \"\n ></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n values: values$ | async,\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateSingleSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateMultiSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateSingleSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateMultiSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'multi-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [multiple]=\"true\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields\"\n type=\"button\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n <button\n (click)=\"search()\"\n [disabled]=\"loading || noSearchFields || (hasValidValues$ | async) === false\"\n type=\"button\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"w-100 mb-3\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <button\n [disabled]=\"loading\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded ? 'mdi mdi-chevron-right accordion-button--active' : 'mdi mdi-chevron-down'\n \"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#f8f9f9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#f1f1f1}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.SpinnerComponent, selector: "valtimo-spinner", inputs: ["useBootstrapSpinner", "name", "type", "size", "color", "bdColor", "fullScreen", "noMarginTop"] }, { kind: "component", type: i5.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i6.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$"], outputs: ["valueChange"] }, { kind: "component", type: i6.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "component", type: i6.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel", "clear$", "enableTime"], outputs: ["valueChange"] }, { kind: "component", type: i6.InputLabelComponent, selector: "v-input-label", inputs: ["name", "title", "titleTranslationKey", "tooltip", "required", "largeMargin", "small"] }, { kind: "component", type: i6.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic", "loading"] }, { kind: "component", type: i6.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "clearable", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin"], outputs: ["selectedChange", "clear"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
|
|
196
|
+
SearchFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SearchFieldsComponent, selector: "valtimo-search-fields", inputs: { loading: "loading", searchFields: "searchFields", documentDefinitionName: "documentDefinitionName", setValuesSubject$: "setValuesSubject$", defaultValues: "defaultValues" }, outputs: { doSearch: "doSearch" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div\n class=\"row p-3\"\n [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\"\n *ngIf=\"searchFields$ | async as searchFields\"\n >\n <ng-container *ngFor=\"let searchField of searchFields; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container\n *ngTemplateOutlet=\"\n buttonsTemplate;\n context: {noSearchFields: !searchFields || searchFields.length === 0}\n \"\n ></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n values: values$ | async,\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateSingleSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateMultiSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateSingleSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateMultiSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'multi-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [multiple]=\"true\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields\"\n type=\"button\"\n id=\"clear\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n <button\n (click)=\"search()\"\n [disabled]=\"loading || noSearchFields || (hasValidValues$ | async) === false\"\n type=\"button\"\n id=\"search\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"w-100 mb-3\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <button\n [disabled]=\"loading\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded ? 'mdi mdi-chevron-right accordion-button--active' : 'mdi mdi-chevron-down'\n \"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#f8f9f9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#f1f1f1}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.SpinnerComponent, selector: "valtimo-spinner", inputs: ["useBootstrapSpinner", "name", "type", "size", "color", "bdColor", "fullScreen", "noMarginTop"] }, { kind: "component", type: i5.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i6.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$"], outputs: ["valueChange"] }, { kind: "component", type: i6.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "component", type: i6.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel", "clear$", "enableTime"], outputs: ["valueChange"] }, { kind: "component", type: i6.InputLabelComponent, selector: "v-input-label", inputs: ["name", "title", "titleTranslationKey", "tooltip", "required", "largeMargin", "small"] }, { kind: "component", type: i6.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic", "loading"] }, { kind: "component", type: i6.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "clearable", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin"], outputs: ["selectedChange", "clear"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
|
|
197
197
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SearchFieldsComponent, decorators: [{
|
|
198
198
|
type: Component,
|
|
199
|
-
args: [{ selector: 'valtimo-search-fields', template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div\n class=\"row p-3\"\n [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\"\n *ngIf=\"searchFields$ | async as searchFields\"\n >\n <ng-container *ngFor=\"let searchField of searchFields; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container\n *ngTemplateOutlet=\"\n buttonsTemplate;\n context: {noSearchFields: !searchFields || searchFields.length === 0}\n \"\n ></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n values: values$ | async,\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateSingleSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateMultiSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateSingleSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateMultiSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'multi-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [multiple]=\"true\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields\"\n type=\"button\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n <button\n (click)=\"search()\"\n [disabled]=\"loading || noSearchFields || (hasValidValues$ | async) === false\"\n type=\"button\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"w-100 mb-3\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <button\n [disabled]=\"loading\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded ? 'mdi mdi-chevron-right accordion-button--active' : 'mdi mdi-chevron-down'\n \"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#f8f9f9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#f1f1f1}\n"] }]
|
|
199
|
+
args: [{ selector: 'valtimo-search-fields', template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div\n class=\"row p-3\"\n [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\"\n *ngIf=\"searchFields$ | async as searchFields\"\n >\n <ng-container *ngFor=\"let searchField of searchFields; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container\n *ngTemplateOutlet=\"\n buttonsTemplate;\n context: {noSearchFields: !searchFields || searchFields.length === 0}\n \"\n ></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n values: values$ | async,\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateSingleSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateMultiSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateSingleSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateMultiSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'multi-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [multiple]=\"true\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields\"\n type=\"button\"\n id=\"clear\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n <button\n (click)=\"search()\"\n [disabled]=\"loading || noSearchFields || (hasValidValues$ | async) === false\"\n type=\"button\"\n id=\"search\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"w-100 mb-3\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <button\n [disabled]=\"loading\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded ? 'mdi mdi-chevron-right accordion-button--active' : 'mdi mdi-chevron-down'\n \"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#f8f9f9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#f1f1f1}\n"] }]
|
|
200
200
|
}], ctorParameters: function () { return [{ type: i1.DocumentService }, { type: i2.TranslateService }]; }, propDecorators: { loading: [{
|
|
201
201
|
type: Input
|
|
202
202
|
}], searchFields: [{
|
|
@@ -210,4 +210,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
210
210
|
}], doSearch: [{
|
|
211
211
|
type: Output
|
|
212
212
|
}] } });
|
|
213
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXhGLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxPQUFPLEVBQWdCLElBQUksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFVbEcsTUFBTSxPQUFPLHFCQUFxQjtJQXlEaEMsWUFDbUIsZUFBZ0MsRUFDaEMsZ0JBQWtDO1FBRGxDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBN0MzQyxhQUFRLEdBQW9DLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRW5GLDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRTFELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBRTVELFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBb0IsRUFBRSxDQUFDLENBQUM7UUFFckQsb0JBQWUsR0FBd0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQy9ELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNYLE1BQU0sU0FBUyxHQUFHLENB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QUNqQixDQUFDO0lBRU8sUUFBUTtRQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUNFLElBQUksQ0FBQyxhQUFhO1lBQ2xCLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRO1lBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQzFDO1lBQ0EsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNmO0lBQ0gsQ0FBQzs7a0hBNU5VLHFCQUFxQjtzR0FBckIscUJBQXFCLHdSQzVCbEMsaWhrQkFrbUJBOzJGRHRrQmEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLHVCQUF1QjtxSUFLeEIsT0FBTztzQkFBZixLQUFLO2dCQUNPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBR08sc0JBQXNCO3NCQUFsQyxLQUFLO2dCQU9HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1NlYXJjaEZpZWxkLCBTZWFyY2hGaWVsZEJvb2xlYW4sIFNlYXJjaEZpZWxkVmFsdWVzfSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7U2VsZWN0SXRlbX0gZnJvbSAnQHZhbHRpbW8vdXNlci1pbnRlcmZhY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tc2VhcmNoLWZpZWxkcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtZmllbGRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hGaWVsZHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNldCBzZWFyY2hGaWVsZHMoZmllbGRzOiBBcnJheTxTZWFyY2hGaWVsZD4pIHtcbiAgICB0aGlzLnNlYXJjaEZpZWxkcyQubmV4dChmaWVsZHMpO1xuICB9XG4gIEBJbnB1dCgpIHNldCBkb2N1bWVudERlZmluaXRpb25OYW1lKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoY3VycmVudERvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT4ge1xuICAgICAgaWYgKGN1cnJlbnREb2N1bWVudERlZmluaXRpb25OYW1lICE9PSBkb2N1bWVudERlZmluaXRpb25OYW1lKSB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQubmV4dChkb2N1bWVudERlZmluaXRpb25OYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBASW5wdXQoKSBzZXRWYWx1ZXNTdWJqZWN0JDogT2JzZXJ2YWJsZTxTZWFyY2hGaWVsZFZhbHVlcz47XG4gIEBJbnB1dCgpIGRlZmF1bHRWYWx1ZXM6IFNlYXJjaEZpZWxkVmFsdWVzO1xuICBAT3V0cHV0KCkgZG9TZWFyY2g6IEV2ZW50RW1pdHRlcjxTZWFyY2hGaWVsZFZhbHVlcz4gPSBuZXcgRXZlbnRFbWl0dGVyPFNlYXJjaEZpZWxkVmFsdWVzPigpO1xuXG4gIHJlYWRvbmx5IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICByZWFkb25seSBzZWFyY2hGaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxTZWFyY2hGaWVsZD4+KFtdKTtcblxuICByZWFkb25seSB2YWx1ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hGaWVsZFZhbHVlcz4oe30pO1xuXG4gIHJlYWRvbmx5IGhhc1ZhbGlkVmFsdWVzJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMudmFsdWVzJC5waXBlKFxuICAgIG1hcCh2YWx1ZXMgPT4ge1xuICAgICAgY29uc3QgaGFzVmFsdWVzID0gKE9iamVjdC5rZXlzKHZhbHVlcykgfHwgW10pLmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCByYW5nZVZhbHVlcyA9XG4gICAgICAgIChoYXNWYWx1ZXMgJiYgT2JqZWN0LnZhbHVlcyh2YWx1ZXMpPy5maWx0ZXIodmFsdWUgPT4gKHZhbHVlIGFzIGFueSkuc3RhcnQpKSB8fCBbXTtcbiAgICAgIGNvbnN0IHZhbGlkUmFuZ2VWYWx1ZXMgPSByYW5nZVZhbHVlcz8uZmlsdGVyKFxuICAgICAgICB2YWx1ZSA9PiAodmFsdWUgYXMgYW55KS5zdGFydCA8ICh2YWx1ZSBhcyBhbnkpLmVuZFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuICEhKGhhc1ZhbHVlcyAmJiByYW5nZVZhbHVlcy5sZW5ndGggPT09IHZhbGlkUmFuZ2VWYWx1ZXMubGVuZ3RoKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGV4cGFuZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBjbGVhciQgPSBuZXcgU3ViamVjdDxudWxsPigpO1xuXG4gIHByaXZhdGUgZG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBkcm9wZG93blN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB2YWx1ZXNTdWJqZWN0U3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgQk9PTEVBTl9QT1NJVElWRTogU2VhcmNoRmllbGRCb29sZWFuID0gJ2Jvb2xlYW5Qb3NpdGl2ZSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgQk9PTEVBTl9ORUdBVElWRTogU2VhcmNoRmllbGRCb29sZWFuID0gJ2Jvb2xlYW5OZWdhdGl2ZSc7XG5cbiAgcmVhZG9ubHkgQk9PTEVBTlRZUEVTOiBBcnJheTxTZWFyY2hGaWVsZEJvb2xlYW4+ID0gW3RoaXMuQk9PTEVBTl9QT1NJVElWRSwgdGhpcy5CT09MRUFOX05FR0FUSVZFXTtcbiAgcmVhZG9ubHkgYm9vbGVhbkl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKS5waXBlKFxuICAgIG1hcCgoKSA9PlxuICAgICAgdGhpcy5CT09MRUFOVFlQRVMubWFwKHR5cGUgPT4gKHtcbiAgICAgICAgaWQ6IHR5cGUsXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHMuJHt0eXBlfWApLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGRyb3Bkb3duU2VsZWN0SXRlbXNNYXA6IE1hcDxzdHJpbmcsIEFycmF5PFNlbGVjdEl0ZW0+PiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vcGVuRG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMub3BlblZhbHVlc1N1YmplY3RTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLm9wZW5Ecm9wZG93blN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudmFsdWVzU3ViamVjdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRyb3Bkb3duU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgc2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGRLZXk6IHN0cmluZywgdmFsdWU6IGFueSwgaXNEYXRlVGltZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgIGlmICh2YWx1ZSB8fCBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLnZhbHVlcyQubmV4dCh7Li4udmFsdWVzLCBbc2VhcmNoRmllbGRLZXldOiB0aGlzLmdldFNpbmdsZVZhbHVlKHZhbHVlLCBpc0RhdGVUaW1lKX0pO1xuICAgICAgfSBlbHNlIGlmIChPYmplY3Qua2V5cyh2YWx1ZXMpLmluY2x1ZGVzKHNlYXJjaEZpZWxkS2V5KSkge1xuICAgICAgICBjb25zdCB2YWx1ZXNDb3B5ID0gey4uLnZhbHVlc307XG4gICAgICAgIGRlbGV0ZSB2YWx1ZXNDb3B5W3NlYXJjaEZpZWxkS2V5XTtcbiAgICAgICAgdGhpcy52YWx1ZXMkLm5leHQodmFsdWVzQ29weSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkS2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzRGF0ZVRpbWU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICBpZiAodmFsdWUuc3RhcnQgJiYgdmFsdWUuZW5kKSB7XG4gICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHtcbiAgICAgICAgICAuLi52YWx1ZXMsXG4gICAgICAgICAgW3NlYXJjaEZpZWxkS2V5XToge1xuICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2V0U2luZ2xlVmFsdWUodmFsdWUuc3RhcnQsIGlzRGF0ZVRpbWUpLFxuICAgICAgICAgICAgZW5kOiB0aGlzLmdldFNpbmdsZVZhbHVlKHZhbHVlLmVuZCwgaXNEYXRlVGltZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy52YWx1ZXMkLm5leHQoe1xuICAgICAgICAgIC4uLnZhbHVlcyxcbiAgICAgICAgICBbc2VhcmNoRmllbGRLZXldOiB2YWx1ZS5tYXAodiA9PiB0aGlzLmdldFNpbmdsZVZhbHVlKHYsIGlzRGF0ZVRpbWUpKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlc1tzZWFyY2hGaWVsZEtleV0pIHtcbiAgICAgICAgY29uc3QgdmFsdWVzQ29weSA9IHsuLi52YWx1ZXN9O1xuICAgICAgICBkZWxldGUgdmFsdWVzQ29weVtzZWFyY2hGaWVsZEtleV07XG4gICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHZhbHVlc0NvcHkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlRXhwYW5kZWQoKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZXhwYW5kZWQgPT4ge1xuICAgICAgdGhpcy5leHBhbmRlZCQubmV4dCghZXhwYW5kZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgc2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSh2YWx1ZXMgPT4ge1xuICAgICAgdGhpcy5kb1NlYXJjaC5lbWl0KHZhbHVlcyk7XG4gICAgfSk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuZG9TZWFyY2guZW1pdCh7fSk7XG4gIH1cblxuICBnZXREZWZhdWx0Qm9vbGVhblNlbGVjdGlvbklkKHZhbHVlczogU2VhcmNoRmllbGRWYWx1ZXMsIHNlYXJjaEZpZWxkS2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBzZWFyY2hGaWVsZFZhbHVlID0gdmFsdWVzW3NlYXJjaEZpZWxkS2V5XTtcblxuICAgIGlmIChzZWFyY2hGaWVsZFZhbHVlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5CT09MRUFOX1BPU0lUSVZFO1xuICAgIH0gZWxzZSBpZiAoc2VhcmNoRmllbGRWYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLkJPT0xFQU5fTkVHQVRJVkU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaW5nbGVWYWx1ZSh2YWx1ZTogYW55LCBpc0RhdGVUaW1lPzogYm9vbGVhbik6IGFueSB7XG4gICAgaWYgKGlzRGF0ZVRpbWUpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkudG9JU09TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLkJPT0xFQU5fUE9TSVRJVkUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IHRoaXMuQk9PTEVBTl9ORUdBVElWRSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkRvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uID0gdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jb2xsYXBzZSgpO1xuICAgICAgdGhpcy5jbGVhcigpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuVmFsdWVzU3ViamVjdFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZXRWYWx1ZXNTdWJqZWN0JCkge1xuICAgICAgdGhpcy52YWx1ZXNTdWJqZWN0U3Vic2NyaXB0aW9uID0gdGhpcy5zZXRWYWx1ZXNTdWJqZWN0JC5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlcyB8fCB7fSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHZhbHVlcyk7XG4gICAgICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgICAgICB0aGlzLmV4cGFuZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5Ecm9wZG93blN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmRyb3Bkb3duU3Vic2NyaXB0aW9uID0gY29tYmluZUxhdGVzdChbdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJCwgdGhpcy5zZWFyY2hGaWVsZHMkXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKFtkb2N1bWVudERlZmluaXRpb25OYW1lLCBzZWFyY2hGaWVsZHNdKSA9PlxuICAgICAgICAgIHNlYXJjaEZpZWxkc1xuICAgICAgICAgICAgPy5maWx0ZXIoc2VhcmNoRmllbGQgPT4gc2VhcmNoRmllbGQuZHJvcGRvd25EYXRhUHJvdmlkZXIpXG4gICAgICAgICAgICAubWFwKHNlYXJjaEZpZWxkID0+XG4gICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkLmRyb3Bkb3duRGF0YVByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkLmtleVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGRyb3Bkb3duRGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZHJvcGRvd25EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25TZWxlY3RJdGVtc01hcFtzZWFyY2hGaWVsZC5rZXldID0gT2JqZWN0LmtleXMoZHJvcGRvd25EYXRhKS5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25GaWVsZEtleSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGRyb3Bkb3duRmllbGRLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBkcm9wZG93bkRhdGFbZHJvcGRvd25GaWVsZEtleV0sXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25TZWxlY3RJdGVtc01hcFtzZWFyY2hGaWVsZC5rZXldID0gW107XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsYXBzZSgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGVkJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhwYW5kKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5kZWQkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldERlZmF1bHRWYWx1ZXMoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzICYmXG4gICAgICB0eXBlb2YgdGhpcy5kZWZhdWx0VmFsdWVzID09PSAnb2JqZWN0JyAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5kZWZhdWx0VmFsdWVzKS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLnZhbHVlcyQubmV4dCh0aGlzLmRlZmF1bHRWYWx1ZXMpO1xuICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXYgY2xhc3M9XCJzZWFyY2ggZmllbGRzXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkaW5nXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlYXJjaEZpZWxkc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ1RlbXBsYXRlPlxuICA8dmFsdGltby1zcGlubmVyPjwvdmFsdGltby1zcGlubmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzZWFyY2hGaWVsZHNUZW1wbGF0ZT5cbiAgPHZhbHRpbW8td2lkZ2V0PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbkFjY29yZGlvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyb3cgcC0zXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsncm93LS1oaWRkZW4nOiAoZXhwYW5kZWQkIHwgYXN5bmMpID09PSBmYWxzZX1cIlxuICAgICAgKm5nSWY9XCJzZWFyY2hGaWVsZHMkIHwgYXN5bmMgYXMgc2VhcmNoRmllbGRzXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWFyY2hGaWVsZCBvZiBzZWFyY2hGaWVsZHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWFyY2hGaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7c2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwXCIgKm5nSWY9XCIoaSArIDEpICUgMyA9PT0gMFwiPjwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgYnV0dG9uc1RlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDoge25vU2VhcmNoRmllbGRzOiAhc2VhcmNoRmllbGRzIHx8IHNlYXJjaEZpZWxkcy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvdmFsdGltby13aWRnZXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NlYXJjaEZpZWxkVGVtcGxhdGUgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwie1xuICAgICAgdmFsdWVzOiB2YWx1ZXMkIHwgYXN5bmMsXG4gICAgICB0b29sdGlwS2V5OiAnc2VhcmNoRmllbGRzVG9vbHRpcHMuJyArIHNlYXJjaEZpZWxkLmtleSxcbiAgICAgIHRvb2x0aXA6ICdzZWFyY2hGaWVsZHNUb29sdGlwcy4nICsgc2VhcmNoRmllbGQua2V5IHwgdHJhbnNsYXRlLFxuICAgICAgc2VhcmNoRmllbGQsXG4gICAgICB0aXRsZTpcbiAgICAgICAgc2VhcmNoRmllbGQudGl0bGUgfHxcbiAgICAgICAgKCdzZWFyY2hGaWVsZHMuJyArIHNlYXJjaEZpZWxkLmtleSAhPT0gKCdzZWFyY2hGaWVsZHMuJyArIHNlYXJjaEZpZWxkLmtleSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA/ICgnc2VhcmNoRmllbGRzLicgKyBzZWFyY2hGaWVsZC5rZXkgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgOiBzZWFyY2hGaWVsZC5rZXkpXG4gICAgfSBhcyB2YXJzXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVUZXh0O1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlTnVtYmVyO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZUJvb2xlYW47XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVEYXRlVGltZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZU51bWJlclJhbmdlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlVGV4dFJhbmdlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVJhbmdlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVRpbWVSYW5nZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZVNpbmdsZVNlbGVjdERyb3Bkb3duO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlTXVsdGlTZWxlY3REcm9wZG93bjtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlVGV4dFxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDx2LWlucHV0XG4gICAgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ3RleHQnICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3NpbmdsZSdcIlxuICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgKHZhbHVlQ2hhbmdlKT1cInNpbmdsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgW3NtYWxsTGFiZWxdPVwidHJ1ZVwiXG4gICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XVwiXG4gID5cbiAgPC92LWlucHV0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlTnVtYmVyXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPHYtaW5wdXRcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnbnVtYmVyJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGUnXCJcbiAgICBbbmFtZV09XCJzZWFyY2hGaWVsZC5rZXlcIlxuICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAodmFsdWVDaGFuZ2UpPVwic2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICBbaGlkZU51bWJlclNwaW5Cb3hdPVwidHJ1ZVwiXG4gICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICBbc21hbGxMYWJlbF09XCJ0cnVlXCJcbiAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldXCJcbiAgPlxuICA8L3YtaW5wdXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVEYXRlXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPHYtZGF0ZS1waWNrZXJcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnZGF0ZScgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAnc2luZ2xlJ1wiXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgZnVsbFdpZHRoPVwidHJ1ZVwiXG4gICAgKHZhbHVlQ2hhbmdlKT1cInNpbmdsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgW3NtYWxsTGFiZWxdPVwidHJ1ZVwiXG4gICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgW2RlZmF1bHREYXRlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldXCJcbiAgPjwvdi1kYXRlLXBpY2tlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZVRleHRSYW5nZVxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ3RleHQnICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3JhbmdlJ1wiPlxuICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICA+PC92LWlucHV0LWxhYmVsPlxuICAgIDx2LWZvcm1cbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgICBjbGFzc05hbWU9XCJtdWx0aXBsZS1zZWFyY2gtZmllbGRzXCJcbiAgICA+XG4gICAgICA8di1pbnB1dFxuICAgICAgICBuYW1lPVwic3RhcnRcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV0/LnN0YXJ0XCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b1RleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDx2LWlucHV0XG4gICAgICAgIG5hbWU9XCJlbmRcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV0/LmVuZFwiXG4gICAgICA+XG4gICAgICA8L3YtaW5wdXQ+XG4gICAgPC92LWZvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlTnVtYmVyUmFuZ2VcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICdudW1iZXInICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3JhbmdlJ1wiPlxuICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICA+PC92LWlucHV0LWxhYmVsPlxuICAgIDx2LWZvcm1cbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgICBjbGFzc05hbWU9XCJtdWx0aXBsZS1zZWFyY2gtZmllbGRzXCJcbiAgICA+XG4gICAgICA8di1pbnB1dFxuICAgICAgICBuYW1lPVwic3RhcnRcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgW2hpZGVOdW1iZXJTcGluQm94XT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV0/LnN0YXJ0XCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b1RleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDx2LWlucHV0XG4gICAgICAgIG5hbWU9XCJlbmRcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgW2hpZGVOdW1iZXJTcGluQm94XT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV0/LmVuZFwiXG4gICAgICA+XG4gICAgICA8L3YtaW5wdXQ+XG4gICAgPC92LWZvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVJhbmdlXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnZGF0ZScgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAncmFuZ2UnXCI+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtZm9ybVxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIm11bHRpcGxlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICAgIGNsYXNzTmFtZT1cIm11bHRpcGxlLXNlYXJjaC1maWVsZHNcIlxuICAgID5cbiAgICAgIDx2LWRhdGUtcGlja2VyXG4gICAgICAgIG5hbWU9XCJzdGFydFwiXG4gICAgICAgIGZ1bGxXaWR0aD1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0RGF0ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uc3RhcnRcIlxuICAgICAgPjwvdi1kYXRlLXBpY2tlcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b1RleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDx2LWRhdGUtcGlja2VyXG4gICAgICAgIG5hbWU9XCJlbmRcIlxuICAgICAgICBmdWxsV2lkdGg9XCJ0cnVlXCJcbiAgICAgICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgICAgICBbZGVmYXVsdERhdGVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV0/LmVuZFwiXG4gICAgICA+PC92LWRhdGUtcGlja2VyPlxuICAgIDwvdi1mb3JtPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZUJvb2xlYW5cbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICdib29sZWFuJ1wiPlxuICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICA+PC92LWlucHV0LWxhYmVsPlxuICAgIDx2LXNlbGVjdFxuICAgICAgKm5nSWY9XCJib29sZWFuSXRlbXMkIHwgYXN5bmMgYXMgYm9vbGVhbkl0ZW1zXCJcbiAgICAgIFtpdGVtc109XCJib29sZWFuSXRlbXNcIlxuICAgICAgW21hcmdpbl09XCJmYWxzZVwiXG4gICAgICBbcmVxdWlyZWRdPVwiZmFsc2VcIlxuICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICAgIFtjbGVhclNlbGVjdGlvblN1YmplY3QkXT1cImNsZWFyJFwiXG4gICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwic2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICBbZGVmYXVsdFNlbGVjdGlvbklkXT1cImdldERlZmF1bHRCb29sZWFuU2VsZWN0aW9uSWQodmFsdWVzLCBzZWFyY2hGaWVsZC5rZXkpXCJcbiAgICA+PC92LXNlbGVjdD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVEYXRlVGltZVxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDx2LWRhdGUtcGlja2VyXG4gICAgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ2RhdGV0aW1lJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGUnXCJcbiAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICBmdWxsV2lkdGg9XCJ0cnVlXCJcbiAgICAodmFsdWVDaGFuZ2UpPVwic2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQsIHRydWUpXCJcbiAgICBbc21hbGxMYWJlbF09XCJ0cnVlXCJcbiAgICBbZW5hYmxlVGltZV09XCJ0cnVlXCJcbiAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICBbZGVmYXVsdERhdGVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV1cIlxuICA+PC92LWRhdGUtcGlja2VyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVRpbWVSYW5nZVxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ2RhdGV0aW1lJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdyYW5nZSdcIj5cbiAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgICBbc21hbGxdPVwidHJ1ZVwiXG4gICAgPjwvdi1pbnB1dC1sYWJlbD5cbiAgICA8di1mb3JtXG4gICAgICAodmFsdWVDaGFuZ2UpPVwibXVsdGlwbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudCwgdHJ1ZSlcIlxuICAgICAgY2xhc3NOYW1lPVwibXVsdGlwbGUtc2VhcmNoLWZpZWxkc1wiXG4gICAgPlxuICAgICAgPHYtZGF0ZS1waWNrZXJcbiAgICAgICAgbmFtZT1cInN0YXJ0XCJcbiAgICAgICAgZnVsbFdpZHRoPVwidHJ1ZVwiXG4gICAgICAgIFtlbmFibGVUaW1lXT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0RGF0ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uc3RhcnRcIlxuICAgICAgPjwvdi1kYXRlLXBpY2tlcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b1RleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDx2LWRhdGUtcGlja2VyXG4gICAgICAgIG5hbWU9XCJlbmRcIlxuICAgICAgICBmdWxsV2lkdGg9XCJ0cnVlXCJcbiAgICAgICAgW2VuYWJsZVRpbWVdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHREYXRlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldPy5lbmRcIlxuICAgICAgPjwvdi1kYXRlLXBpY2tlcj5cbiAgICA8L3YtZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVTaW5nbGVTZWxlY3REcm9wZG93blxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAndGV4dCcgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAnc2luZ2xlLXNlbGVjdC1kcm9wZG93bidcIlxuICA+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtc2VsZWN0XG4gICAgICAqbmdJZj1cImRyb3Bkb3duU2VsZWN0SXRlbXNNYXBbc2VhcmNoRmllbGQua2V5XSBhcyBzZWFyY2hGaWVsZFNlbGVjdEl0ZW1zXCJcbiAgICAgIFtpdGVtc109XCJzZWFyY2hGaWVsZFNlbGVjdEl0ZW1zXCJcbiAgICAgIFttYXJnaW5dPVwiZmFsc2VcIlxuICAgICAgW3JlcXVpcmVkXT1cImZhbHNlXCJcbiAgICAgIFt3aWR0aEluUHhdPVwiMjAwXCJcbiAgICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgICBbY2xlYXJTZWxlY3Rpb25TdWJqZWN0JF09XCJjbGVhciRcIlxuICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cInNpbmdsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XVwiXG4gICAgPjwvdi1zZWxlY3Q+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlTXVsdGlTZWxlY3REcm9wZG93blxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAndGV4dCcgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAnbXVsdGktc2VsZWN0LWRyb3Bkb3duJ1wiXG4gID5cbiAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgICBbc21hbGxdPVwidHJ1ZVwiXG4gICAgPjwvdi1pbnB1dC1sYWJlbD5cbiAgICA8di1zZWxlY3RcbiAgICAgICpuZ0lmPVwiZHJvcGRvd25TZWxlY3RJdGVtc01hcFtzZWFyY2hGaWVsZC5rZXldIGFzIHNlYXJjaEZpZWxkU2VsZWN0SXRlbXNcIlxuICAgICAgW2l0ZW1zXT1cInNlYXJjaEZpZWxkU2VsZWN0SXRlbXNcIlxuICAgICAgW21hcmdpbl09XCJmYWxzZVwiXG4gICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICBbcmVxdWlyZWRdPVwiZmFsc2VcIlxuICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICAgIFtjbGVhclNlbGVjdGlvblN1YmplY3QkXT1cImNsZWFyJFwiXG4gICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwibXVsdGlwbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgIFtkZWZhdWx0U2VsZWN0aW9uSWRzXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldXCJcbiAgICA+PC92LXNlbGVjdD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RvVGV4dD5cbiAgPGRpdiBjbGFzcz1cInRvLXRleHRcIj5cbiAgICA8di1wYXJhZ3JhcGg+e3sgJ3NlYXJjaEZpZWxkcy50bycgfCB0cmFuc2xhdGUgfX08L3YtcGFyYWdyYXBoPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uc1RlbXBsYXRlIGxldC1ub1NlYXJjaEZpZWxkcz1cIm5vU2VhcmNoRmllbGRzXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm5vU2VhcmNoRmllbGRzVGVtcGxhdGU7IGNvbnRleHQ6IHtub1NlYXJjaEZpZWxkczogbm9TZWFyY2hGaWVsZHN9XCJcbiAgPjwvbmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIiAqbmdJZj1cIntleHBhbmRlZDogZXhwYW5kZWQkIHwgYXN5bmN9IGFzIG9ic1wiPlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodC1idXR0b25zXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJjbGVhcigpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgbm9TZWFyY2hGaWVsZHNcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNwYWNlIGJ0bi1zZWNvbmRhcnlcIlxuICAgICAgICAqbmdJZj1cIm9icy5leHBhbmRlZFwiXG4gICAgICA+XG4gICAgICAgIHt7ICdzZWFyY2hGaWVsZHMuY2xlYXJCdXR0b25UZXh0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nIHx8IG5vU2VhcmNoRmllbGRzIHx8IChoYXNWYWxpZFZhbHVlcyQgfCBhc3luYykgPT09IGZhbHNlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zcGFjZSBidG4tcHJpbWFyeVwiXG4gICAgICAgICpuZ0lmPVwib2JzLmV4cGFuZGVkXCJcbiAgICAgID5cbiAgICAgICAge3sgJ3NlYXJjaEZpZWxkcy5zZWFyY2hCdXR0b25UZXh0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub1NlYXJjaEZpZWxkc1RlbXBsYXRlIGxldC1ub1NlYXJjaEZpZWxkcz1cIm5vU2VhcmNoRmllbGRzXCI+XG4gIDxkaXYgY2xhc3M9XCJ3LTEwMCBtYi0zXCIgKm5nSWY9XCJub1NlYXJjaEZpZWxkc1wiPlxuICAgIDx2LXBhcmFncmFwaCBbZnVsbFdpZHRoXT1cInRydWVcIiBbY2VudGVyXT1cInRydWVcIj57e1xuICAgICAgJ3NlYXJjaEZpZWxkcy5ub25lQ29uZmlndXJlZCcgfCB0cmFuc2xhdGVcbiAgICB9fTwvdi1wYXJhZ3JhcGg+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25BY2NvcmRpb24+XG4gIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiICpuZ0lmPVwie2V4cGFuZGVkOiBleHBhbmRlZCQgfCBhc3luY30gYXMgb2JzXCI+XG4gICAgPGJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImFjY29yZGlvbi1idXR0b25cIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZGVkKClcIlxuICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgIG9icy5leHBhbmRlZCA/ICdtZGkgbWRpLWNoZXZyb24tcmlnaHQgYWNjb3JkaW9uLWJ1dHRvbi0tYWN0aXZlJyA6ICdtZGkgbWRpLWNoZXZyb24tZG93bidcbiAgICAgIFwiXG4gICAgPlxuICAgICAge3sgJ3NlYXJjaEZpZWxkcy5zZWFyY2hCdXR0b25UZXh0JyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXhGLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxPQUFPLEVBQWdCLElBQUksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFVbEcsTUFBTSxPQUFPLHFCQUFxQjtJQXlEaEMsWUFDbUIsZUFBZ0MsRUFDaEMsZ0JBQWtDO1FBRGxDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBN0MzQyxhQUFRLEdBQW9DLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRW5GLDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRTFELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBRTVELFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBb0IsRUFBRSxDQUFDLENBQUM7UUFFckQsb0JBQWUsR0FBd0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQy9ELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNYLE1BQU0sU0FBUyxHQUFHLENB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QUNqQixDQUFDO0lBRU8sUUFBUTtRQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUNFLElBQUksQ0FBQyxhQUFhO1lBQ2xCLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRO1lBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQzFDO1lBQ0EsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNmO0lBQ0gsQ0FBQzs7a0hBNU5VLHFCQUFxQjtzR0FBckIscUJBQXFCLHdSQzVCbEMsOGprQkFvbUJBOzJGRHhrQmEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLHVCQUF1QjtxSUFLeEIsT0FBTztzQkFBZixLQUFLO2dCQUNPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBR08sc0JBQXNCO3NCQUFsQyxLQUFLO2dCQU9HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1NlYXJjaEZpZWxkLCBTZWFyY2hGaWVsZEJvb2xlYW4sIFNlYXJjaEZpZWxkVmFsdWVzfSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7U2VsZWN0SXRlbX0gZnJvbSAnQHZhbHRpbW8vdXNlci1pbnRlcmZhY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tc2VhcmNoLWZpZWxkcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtZmllbGRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hGaWVsZHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNldCBzZWFyY2hGaWVsZHMoZmllbGRzOiBBcnJheTxTZWFyY2hGaWVsZD4pIHtcbiAgICB0aGlzLnNlYXJjaEZpZWxkcyQubmV4dChmaWVsZHMpO1xuICB9XG4gIEBJbnB1dCgpIHNldCBkb2N1bWVudERlZmluaXRpb25OYW1lKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoY3VycmVudERvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT4ge1xuICAgICAgaWYgKGN1cnJlbnREb2N1bWVudERlZmluaXRpb25OYW1lICE9PSBkb2N1bWVudERlZmluaXRpb25OYW1lKSB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQubmV4dChkb2N1bWVudERlZmluaXRpb25OYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBASW5wdXQoKSBzZXRWYWx1ZXNTdWJqZWN0JDogT2JzZXJ2YWJsZTxTZWFyY2hGaWVsZFZhbHVlcz47XG4gIEBJbnB1dCgpIGRlZmF1bHRWYWx1ZXM6IFNlYXJjaEZpZWxkVmFsdWVzO1xuICBAT3V0cHV0KCkgZG9TZWFyY2g6IEV2ZW50RW1pdHRlcjxTZWFyY2hGaWVsZFZhbHVlcz4gPSBuZXcgRXZlbnRFbWl0dGVyPFNlYXJjaEZpZWxkVmFsdWVzPigpO1xuXG4gIHJlYWRvbmx5IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICByZWFkb25seSBzZWFyY2hGaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxTZWFyY2hGaWVsZD4+KFtdKTtcblxuICByZWFkb25seSB2YWx1ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hGaWVsZFZhbHVlcz4oe30pO1xuXG4gIHJlYWRvbmx5IGhhc1ZhbGlkVmFsdWVzJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMudmFsdWVzJC5waXBlKFxuICAgIG1hcCh2YWx1ZXMgPT4ge1xuICAgICAgY29uc3QgaGFzVmFsdWVzID0gKE9iamVjdC5rZXlzKHZhbHVlcykgfHwgW10pLmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCByYW5nZVZhbHVlcyA9XG4gICAgICAgIChoYXNWYWx1ZXMgJiYgT2JqZWN0LnZhbHVlcyh2YWx1ZXMpPy5maWx0ZXIodmFsdWUgPT4gKHZhbHVlIGFzIGFueSkuc3RhcnQpKSB8fCBbXTtcbiAgICAgIGNvbnN0IHZhbGlkUmFuZ2VWYWx1ZXMgPSByYW5nZVZhbHVlcz8uZmlsdGVyKFxuICAgICAgICB2YWx1ZSA9PiAodmFsdWUgYXMgYW55KS5zdGFydCA8ICh2YWx1ZSBhcyBhbnkpLmVuZFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuICEhKGhhc1ZhbHVlcyAmJiByYW5nZVZhbHVlcy5sZW5ndGggPT09IHZhbGlkUmFuZ2VWYWx1ZXMubGVuZ3RoKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGV4cGFuZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBjbGVhciQgPSBuZXcgU3ViamVjdDxudWxsPigpO1xuXG4gIHByaXZhdGUgZG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBkcm9wZG93blN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB2YWx1ZXNTdWJqZWN0U3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgQk9PTEVBTl9QT1NJVElWRTogU2VhcmNoRmllbGRCb29sZWFuID0gJ2Jvb2xlYW5Qb3NpdGl2ZSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgQk9PTEVBTl9ORUdBVElWRTogU2VhcmNoRmllbGRCb29sZWFuID0gJ2Jvb2xlYW5OZWdhdGl2ZSc7XG5cbiAgcmVhZG9ubHkgQk9PTEVBTlRZUEVTOiBBcnJheTxTZWFyY2hGaWVsZEJvb2xlYW4+ID0gW3RoaXMuQk9PTEVBTl9QT1NJVElWRSwgdGhpcy5CT09MRUFOX05FR0FUSVZFXTtcbiAgcmVhZG9ubHkgYm9vbGVhbkl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKS5waXBlKFxuICAgIG1hcCgoKSA9PlxuICAgICAgdGhpcy5CT09MRUFOVFlQRVMubWFwKHR5cGUgPT4gKHtcbiAgICAgICAgaWQ6IHR5cGUsXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHMuJHt0eXBlfWApLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGRyb3Bkb3duU2VsZWN0SXRlbXNNYXA6IE1hcDxzdHJpbmcsIEFycmF5PFNlbGVjdEl0ZW0+PiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vcGVuRG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMub3BlblZhbHVlc1N1YmplY3RTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLm9wZW5Ecm9wZG93blN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudmFsdWVzU3ViamVjdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRyb3Bkb3duU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgc2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGRLZXk6IHN0cmluZywgdmFsdWU6IGFueSwgaXNEYXRlVGltZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgIGlmICh2YWx1ZSB8fCBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLnZhbHVlcyQubmV4dCh7Li4udmFsdWVzLCBbc2VhcmNoRmllbGRLZXldOiB0aGlzLmdldFNpbmdsZVZhbHVlKHZhbHVlLCBpc0RhdGVUaW1lKX0pO1xuICAgICAgfSBlbHNlIGlmIChPYmplY3Qua2V5cyh2YWx1ZXMpLmluY2x1ZGVzKHNlYXJjaEZpZWxkS2V5KSkge1xuICAgICAgICBjb25zdCB2YWx1ZXNDb3B5ID0gey4uLnZhbHVlc307XG4gICAgICAgIGRlbGV0ZSB2YWx1ZXNDb3B5W3NlYXJjaEZpZWxkS2V5XTtcbiAgICAgICAgdGhpcy52YWx1ZXMkLm5leHQodmFsdWVzQ29weSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkS2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzRGF0ZVRpbWU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICBpZiAodmFsdWUuc3RhcnQgJiYgdmFsdWUuZW5kKSB7XG4gICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHtcbiAgICAgICAgICAuLi52YWx1ZXMsXG4gICAgICAgICAgW3NlYXJjaEZpZWxkS2V5XToge1xuICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2V0U2luZ2xlVmFsdWUodmFsdWUuc3RhcnQsIGlzRGF0ZVRpbWUpLFxuICAgICAgICAgICAgZW5kOiB0aGlzLmdldFNpbmdsZVZhbHVlKHZhbHVlLmVuZCwgaXNEYXRlVGltZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy52YWx1ZXMkLm5leHQoe1xuICAgICAgICAgIC4uLnZhbHVlcyxcbiAgICAgICAgICBbc2VhcmNoRmllbGRLZXldOiB2YWx1ZS5tYXAodiA9PiB0aGlzLmdldFNpbmdsZVZhbHVlKHYsIGlzRGF0ZVRpbWUpKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlc1tzZWFyY2hGaWVsZEtleV0pIHtcbiAgICAgICAgY29uc3QgdmFsdWVzQ29weSA9IHsuLi52YWx1ZXN9O1xuICAgICAgICBkZWxldGUgdmFsdWVzQ29weVtzZWFyY2hGaWVsZEtleV07XG4gICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHZhbHVlc0NvcHkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlRXhwYW5kZWQoKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZXhwYW5kZWQgPT4ge1xuICAgICAgdGhpcy5leHBhbmRlZCQubmV4dCghZXhwYW5kZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgc2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSh2YWx1ZXMgPT4ge1xuICAgICAgdGhpcy5kb1NlYXJjaC5lbWl0KHZhbHVlcyk7XG4gICAgfSk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuZG9TZWFyY2guZW1pdCh7fSk7XG4gIH1cblxuICBnZXREZWZhdWx0Qm9vbGVhblNlbGVjdGlvbklkKHZhbHVlczogU2VhcmNoRmllbGRWYWx1ZXMsIHNlYXJjaEZpZWxkS2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBzZWFyY2hGaWVsZFZhbHVlID0gdmFsdWVzW3NlYXJjaEZpZWxkS2V5XTtcblxuICAgIGlmIChzZWFyY2hGaWVsZFZhbHVlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5CT09MRUFOX1BPU0lUSVZFO1xuICAgIH0gZWxzZSBpZiAoc2VhcmNoRmllbGRWYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLkJPT0xFQU5fTkVHQVRJVkU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaW5nbGVWYWx1ZSh2YWx1ZTogYW55LCBpc0RhdGVUaW1lPzogYm9vbGVhbik6IGFueSB7XG4gICAgaWYgKGlzRGF0ZVRpbWUpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkudG9JU09TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLkJPT0xFQU5fUE9TSVRJVkUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IHRoaXMuQk9PTEVBTl9ORUdBVElWRSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkRvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uID0gdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jb2xsYXBzZSgpO1xuICAgICAgdGhpcy5jbGVhcigpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuVmFsdWVzU3ViamVjdFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZXRWYWx1ZXNTdWJqZWN0JCkge1xuICAgICAgdGhpcy52YWx1ZXNTdWJqZWN0U3Vic2NyaXB0aW9uID0gdGhpcy5zZXRWYWx1ZXNTdWJqZWN0JC5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlcyB8fCB7fSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHZhbHVlcyk7XG4gICAgICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgICAgICB0aGlzLmV4cGFuZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5Ecm9wZG93blN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmRyb3Bkb3duU3Vic2NyaXB0aW9uID0gY29tYmluZUxhdGVzdChbdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJCwgdGhpcy5zZWFyY2hGaWVsZHMkXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKFtkb2N1bWVudERlZmluaXRpb25OYW1lLCBzZWFyY2hGaWVsZHNdKSA9PlxuICAgICAgICAgIHNlYXJjaEZpZWxkc1xuICAgICAgICAgICAgPy5maWx0ZXIoc2VhcmNoRmllbGQgPT4gc2VhcmNoRmllbGQuZHJvcGRvd25EYXRhUHJvdmlkZXIpXG4gICAgICAgICAgICAubWFwKHNlYXJjaEZpZWxkID0+XG4gICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkLmRyb3Bkb3duRGF0YVByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkLmtleVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGRyb3Bkb3duRGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZHJvcGRvd25EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25TZWxlY3RJdGVtc01hcFtzZWFyY2hGaWVsZC5rZXldID0gT2JqZWN0LmtleXMoZHJvcGRvd25EYXRhKS5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25GaWVsZEtleSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGRyb3Bkb3duRmllbGRLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBkcm9wZG93bkRhdGFbZHJvcGRvd25GaWVsZEtleV0sXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25TZWxlY3RJdGVtc01hcFtzZWFyY2hGaWVsZC5rZXldID0gW107XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsYXBzZSgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGVkJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhwYW5kKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5kZWQkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldERlZmF1bHRWYWx1ZXMoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzICYmXG4gICAgICB0eXBlb2YgdGhpcy5kZWZhdWx0VmFsdWVzID09PSAnb2JqZWN0JyAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5kZWZhdWx0VmFsdWVzKS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLnZhbHVlcyQubmV4dCh0aGlzLmRlZmF1bHRWYWx1ZXMpO1xuICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXYgY2xhc3M9XCJzZWFyY2ggZmllbGRzXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkaW5nXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlYXJjaEZpZWxkc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ1RlbXBsYXRlPlxuICA8dmFsdGltby1zcGlubmVyPjwvdmFsdGltby1zcGlubmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzZWFyY2hGaWVsZHNUZW1wbGF0ZT5cbiAgPHZhbHRpbW8td2lkZ2V0PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbkFjY29yZGlvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyb3cgcC0zXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsncm93LS1oaWRkZW4nOiAoZXhwYW5kZWQkIHwgYXN5bmMpID09PSBmYWxzZX1cIlxuICAgICAgKm5nSWY9XCJzZWFyY2hGaWVsZHMkIHwgYXN5bmMgYXMgc2VhcmNoRmllbGRzXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWFyY2hGaWVsZCBvZiBzZWFyY2hGaWVsZHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWFyY2hGaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7c2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwXCIgKm5nSWY9XCIoaSArIDEpICUgMyA9PT0gMFwiPjwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgYnV0dG9uc1RlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDoge25vU2VhcmNoRmllbGRzOiAhc2VhcmNoRmllbGRzIHx8IHNlYXJjaEZpZWxkcy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvdmFsdGltby13aWRnZXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NlYXJjaEZpZWxkVGVtcGxhdGUgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwie1xuICAgICAgdmFsdWVzOiB2YWx1ZXMkIHwgYXN5bmMsXG4gICAgICB0b29sdGlwS2V5OiAnc2VhcmNoRmllbGRzVG9vbHRpcHMuJyArIHNlYXJjaEZpZWxkLmtleSxcbiAgICAgIHRvb2x0aXA6ICdzZWFyY2hGaWVsZHNUb29sdGlwcy4nICsgc2VhcmNoRmllbGQua2V5IHwgdHJhbnNsYXRlLFxuICAgICAgc2VhcmNoRmllbGQsXG4gICAgICB0aXRsZTpcbiAgICAgICAgc2VhcmNoRmllbGQudGl0bGUgfHxcbiAgICAgICAgKCdzZWFyY2hGaWVsZHMuJyArIHNlYXJjaEZpZWxkLmtleSAhPT0gKCdzZWFyY2hGaWVsZHMuJyArIHNlYXJjaEZpZWxkLmtleSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA/ICgnc2VhcmNoRmllbGRzLicgKyBzZWFyY2hGaWVsZC5rZXkgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgOiBzZWFyY2hGaWVsZC5rZXkpXG4gICAgfSBhcyB2YXJzXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVUZXh0O1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlTnVtYmVyO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZUJvb2xlYW47XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVEYXRlVGltZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZU51bWJlclJhbmdlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlVGV4dFJhbmdlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVJhbmdlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVRpbWVSYW5nZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZVNpbmdsZVNlbGVjdERyb3Bkb3duO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlTXVsdGlTZWxlY3REcm9wZG93bjtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlVGV4dFxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDx2LWlucHV0XG4gICAgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ3RleHQnICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3NpbmdsZSdcIlxuICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgKHZhbHVlQ2hhbmdlKT1cInNpbmdsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgW3NtYWxsTGFiZWxdPVwidHJ1ZVwiXG4gICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XVwiXG4gID5cbiAgPC92LWlucHV0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlTnVtYmVyXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPHYtaW5wdXRcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnbnVtYmVyJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGUnXCJcbiAgICBbbmFtZV09XCJzZWFyY2hGaWVsZC5rZXlcIlxuICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAodmFsdWVDaGFuZ2UpPVwic2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICBbaGlkZU51bWJlclNwaW5Cb3hdPVwidHJ1ZVwiXG4gICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICBbc21hbGxMYWJlbF09XCJ0cnVlXCJcbiAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldXCJcbiAgPlxuICA8L3YtaW5wdXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVEYXRlXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPHYtZGF0ZS1waWNrZXJcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnZGF0ZScgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAnc2luZ2xlJ1wiXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgZnVsbFdpZHRoPVwidHJ1ZVwiXG4gICAgKHZhbHVlQ2hhbmdlKT1cInNpbmdsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgW3NtYWxsTGFiZWxdPVwidHJ1ZVwiXG4gICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgW2RlZmF1bHREYXRlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldXCJcbiAgPjwvdi1kYXRlLXBpY2tlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZVRleHRSYW5nZVxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ3RleHQnICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3JhbmdlJ1wiPlxuICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICA+PC92LWlucHV0LWxhYmVsPlxuICAgIDx2LWZvcm1cbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgICBjbGFzc05hbWU9XCJtdWx0aXBsZS1zZWFyY2gtZmllbGRzXCJcbiAgICA+XG4gICAgICA8di1pbnB1dFxuICAgICAgICBuYW1lPVwic3RhcnRcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV0/LnN0YXJ0XCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b1RleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDx2LWlucHV0XG4gICAgICAgIG5hbWU9XCJlbmRcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV0/LmVuZFwiXG4gICAgICA+XG4gICAgICA8L3YtaW5wdXQ+XG4gICAgPC92LWZvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlTnVtYmVyUmFuZ2VcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICdudW1iZXInICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3JhbmdlJ1wiPlxuICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICA+PC92LWlucHV0LWxhYmVsPlxuICAgIDx2LWZvcm1cbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgICBjbGFzc05hbWU9XCJtdWx0aXBsZS1zZWFyY2gtZmllbGRzXCJcbiAgICA+XG4gICAgICA8di1pbnB1dFxuICAgICAgICBuYW1lPVwic3RhcnRcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgW2hpZGVOdW1iZXJTcGluQm94XT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV0/LnN0YXJ0XCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b1RleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDx2LWlucHV0XG4gICAgICAgIG5hbWU9XCJlbmRcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgW2hpZGVOdW1iZXJTcGluQm94XT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV0/LmVuZFwiXG4gICAgICA+XG4gICAgICA8L3YtaW5wdXQ+XG4gICAgPC92LWZvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVJhbmdlXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnZGF0ZScgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAncmFuZ2UnXCI+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtZm9ybVxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIm11bHRpcGxlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICAgIGNsYXNzTmFtZT1cIm11bHRpcGxlLXNlYXJjaC1maWVsZHNcIlxuICAgID5cbiAgICAgIDx2LWRhdGUtcGlja2VyXG4gICAgICAgIG5hbWU9XCJzdGFydFwiXG4gICAgICAgIGZ1bGxXaWR0aD1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0RGF0ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uc3RhcnRcIlxuICAgICAgPjwvdi1kYXRlLXBpY2tlcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b1RleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDx2LWRhdGUtcGlja2VyXG4gICAgICAgIG5hbWU9XCJlbmRcIlxuICAgICAgICBmdWxsV2lkdGg9XCJ0cnVlXCJcbiAgICAgICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgICAgICBbZGVmYXVsdERhdGVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV0/LmVuZFwiXG4gICAgICA+PC92LWRhdGUtcGlja2VyPlxuICAgIDwvdi1mb3JtPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZUJvb2xlYW5cbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICdib29sZWFuJ1wiPlxuICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICA+PC92LWlucHV0LWxhYmVsPlxuICAgIDx2LXNlbGVjdFxuICAgICAgKm5nSWY9XCJib29sZWFuSXRlbXMkIHwgYXN5bmMgYXMgYm9vbGVhbkl0ZW1zXCJcbiAgICAgIFtpdGVtc109XCJib29sZWFuSXRlbXNcIlxuICAgICAgW21hcmdpbl09XCJmYWxzZVwiXG4gICAgICBbcmVxdWlyZWRdPVwiZmFsc2VcIlxuICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICAgIFtjbGVhclNlbGVjdGlvblN1YmplY3QkXT1cImNsZWFyJFwiXG4gICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwic2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICBbZGVmYXVsdFNlbGVjdGlvbklkXT1cImdldERlZmF1bHRCb29sZWFuU2VsZWN0aW9uSWQodmFsdWVzLCBzZWFyY2hGaWVsZC5rZXkpXCJcbiAgICA+PC92LXNlbGVjdD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVEYXRlVGltZVxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDx2LWRhdGUtcGlja2VyXG4gICAgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ2RhdGV0aW1lJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGUnXCJcbiAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICBmdWxsV2lkdGg9XCJ0cnVlXCJcbiAgICAodmFsdWVDaGFuZ2UpPVwic2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQsIHRydWUpXCJcbiAgICBbc21hbGxMYWJlbF09XCJ0cnVlXCJcbiAgICBbZW5hYmxlVGltZV09XCJ0cnVlXCJcbiAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICBbZGVmYXVsdERhdGVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV1cIlxuICA+PC92LWRhdGUtcGlja2VyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVRpbWVSYW5nZVxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ2RhdGV0aW1lJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdyYW5nZSdcIj5cbiAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgICBbc21hbGxdPVwidHJ1ZVwiXG4gICAgPjwvdi1pbnB1dC1sYWJlbD5cbiAgICA8di1mb3JtXG4gICAgICAodmFsdWVDaGFuZ2UpPVwibXVsdGlwbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudCwgdHJ1ZSlcIlxuICAgICAgY2xhc3NOYW1lPVwibXVsdGlwbGUtc2VhcmNoLWZpZWxkc1wiXG4gICAgPlxuICAgICAgPHYtZGF0ZS1waWNrZXJcbiAgICAgICAgbmFtZT1cInN0YXJ0XCJcbiAgICAgICAgZnVsbFdpZHRoPVwidHJ1ZVwiXG4gICAgICAgIFtlbmFibGVUaW1lXT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0RGF0ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uc3RhcnRcIlxuICAgICAgPjwvdi1kYXRlLXBpY2tlcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b1RleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDx2LWRhdGUtcGlja2VyXG4gICAgICAgIG5hbWU9XCJlbmRcIlxuICAgICAgICBmdWxsV2lkdGg9XCJ0cnVlXCJcbiAgICAgICAgW2VuYWJsZVRpbWVdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHREYXRlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldPy5lbmRcIlxuICAgICAgPjwvdi1kYXRlLXBpY2tlcj5cbiAgICA8L3YtZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVTaW5nbGVTZWxlY3REcm9wZG93blxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAndGV4dCcgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAnc2luZ2xlLXNlbGVjdC1kcm9wZG93bidcIlxuICA+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtc2VsZWN0XG4gICAgICAqbmdJZj1cImRyb3Bkb3duU2VsZWN0SXRlbXNNYXBbc2VhcmNoRmllbGQua2V5XSBhcyBzZWFyY2hGaWVsZFNlbGVjdEl0ZW1zXCJcbiAgICAgIFtpdGVtc109XCJzZWFyY2hGaWVsZFNlbGVjdEl0ZW1zXCJcbiAgICAgIFttYXJnaW5dPVwiZmFsc2VcIlxuICAgICAgW3JlcXVpcmVkXT1cImZhbHNlXCJcbiAgICAgIFt3aWR0aEluUHhdPVwiMjAwXCJcbiAgICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgICBbY2xlYXJTZWxlY3Rpb25TdWJqZWN0JF09XCJjbGVhciRcIlxuICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cInNpbmdsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XVwiXG4gICAgPjwvdi1zZWxlY3Q+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlTXVsdGlTZWxlY3REcm9wZG93blxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAndGV4dCcgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAnbXVsdGktc2VsZWN0LWRyb3Bkb3duJ1wiXG4gID5cbiAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgICBbc21hbGxdPVwidHJ1ZVwiXG4gICAgPjwvdi1pbnB1dC1sYWJlbD5cbiAgICA8di1zZWxlY3RcbiAgICAgICpuZ0lmPVwiZHJvcGRvd25TZWxlY3RJdGVtc01hcFtzZWFyY2hGaWVsZC5rZXldIGFzIHNlYXJjaEZpZWxkU2VsZWN0SXRlbXNcIlxuICAgICAgW2l0ZW1zXT1cInNlYXJjaEZpZWxkU2VsZWN0SXRlbXNcIlxuICAgICAgW21hcmdpbl09XCJmYWxzZVwiXG4gICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICBbcmVxdWlyZWRdPVwiZmFsc2VcIlxuICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICAgIFtjbGVhclNlbGVjdGlvblN1YmplY3QkXT1cImNsZWFyJFwiXG4gICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwibXVsdGlwbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgIFtkZWZhdWx0U2VsZWN0aW9uSWRzXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldXCJcbiAgICA+PC92LXNlbGVjdD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RvVGV4dD5cbiAgPGRpdiBjbGFzcz1cInRvLXRleHRcIj5cbiAgICA8di1wYXJhZ3JhcGg+e3sgJ3NlYXJjaEZpZWxkcy50bycgfCB0cmFuc2xhdGUgfX08L3YtcGFyYWdyYXBoPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uc1RlbXBsYXRlIGxldC1ub1NlYXJjaEZpZWxkcz1cIm5vU2VhcmNoRmllbGRzXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm5vU2VhcmNoRmllbGRzVGVtcGxhdGU7IGNvbnRleHQ6IHtub1NlYXJjaEZpZWxkczogbm9TZWFyY2hGaWVsZHN9XCJcbiAgPjwvbmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIiAqbmdJZj1cIntleHBhbmRlZDogZXhwYW5kZWQkIHwgYXN5bmN9IGFzIG9ic1wiPlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodC1idXR0b25zXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJjbGVhcigpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgbm9TZWFyY2hGaWVsZHNcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgaWQ9XCJjbGVhclwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zcGFjZSBidG4tc2Vjb25kYXJ5XCJcbiAgICAgICAgKm5nSWY9XCJvYnMuZXhwYW5kZWRcIlxuICAgICAgPlxuICAgICAgICB7eyAnc2VhcmNoRmllbGRzLmNsZWFyQnV0dG9uVGV4dCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2VhcmNoKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCBub1NlYXJjaEZpZWxkcyB8fCAoaGFzVmFsaWRWYWx1ZXMkIHwgYXN5bmMpID09PSBmYWxzZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBpZD1cInNlYXJjaFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zcGFjZSBidG4tcHJpbWFyeVwiXG4gICAgICAgICpuZ0lmPVwib2JzLmV4cGFuZGVkXCJcbiAgICAgID5cbiAgICAgICAge3sgJ3NlYXJjaEZpZWxkcy5zZWFyY2hCdXR0b25UZXh0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub1NlYXJjaEZpZWxkc1RlbXBsYXRlIGxldC1ub1NlYXJjaEZpZWxkcz1cIm5vU2VhcmNoRmllbGRzXCI+XG4gIDxkaXYgY2xhc3M9XCJ3LTEwMCBtYi0zXCIgKm5nSWY9XCJub1NlYXJjaEZpZWxkc1wiPlxuICAgIDx2LXBhcmFncmFwaCBbZnVsbFdpZHRoXT1cInRydWVcIiBbY2VudGVyXT1cInRydWVcIj57e1xuICAgICAgJ3NlYXJjaEZpZWxkcy5ub25lQ29uZmlndXJlZCcgfCB0cmFuc2xhdGVcbiAgICB9fTwvdi1wYXJhZ3JhcGg+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25BY2NvcmRpb24+XG4gIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiICpuZ0lmPVwie2V4cGFuZGVkOiBleHBhbmRlZCQgfCBhc3luY30gYXMgb2JzXCI+XG4gICAgPGJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImFjY29yZGlvbi1idXR0b25cIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZGVkKClcIlxuICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgIG9icy5leHBhbmRlZCA/ICdtZGkgbWRpLWNoZXZyb24tcmlnaHQgYWNjb3JkaW9uLWJ1dHRvbi0tYWN0aXZlJyA6ICdtZGkgbWRpLWNoZXZyb24tZG93bidcbiAgICAgIFwiXG4gICAgPlxuICAgICAge3sgJ3NlYXJjaEZpZWxkcy5zZWFyY2hCdXR0b25UZXh0JyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|