@versatiledatakit/data-pipelines
Version:
Data Pipelines help Data Engineers develop, deploy, run, and manage data processing workloads (called 'Data Job')
254 lines • 32.2 kB
JavaScript
/*
* Copyright 2023-2025 Broadcom
* SPDX-License-Identifier: Apache-2.0
*/
import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
import { CollectionsUtil } from '@versatiledatakit/shared';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "../../quick-filters/quick-filters.component";
import * as i3 from "@versatiledatakit/shared";
function GridActionComponent_div_3_button_1_Template(rf, ctx) { if (rf & 1) {
const _r6 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "button", 10);
i0.ɵɵlistener("click", function GridActionComponent_div_3_button_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r5 = i0.ɵɵnextContext(2); return ctx_r5.add.next(true); });
i0.ɵɵelementStart(1, "span");
i0.ɵɵtext(2);
i0.ɵɵelementEnd()();
} if (rf & 2) {
const ctx_r3 = i0.ɵɵnextContext(2);
i0.ɵɵproperty("disabled", ctx_r3.addDisabled || ctx_r3.disableActionableElements);
i0.ɵɵattribute("id", ctx_r3.addId);
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(ctx_r3.addLabel);
} }
function GridActionComponent_div_3_span_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "span", 11);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r4 = i0.ɵɵnextContext(2);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate(ctx_r4.addTooltip);
} }
function GridActionComponent_div_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 7);
i0.ɵɵtemplate(1, GridActionComponent_div_3_button_1_Template, 3, 3, "button", 8);
i0.ɵɵtemplate(2, GridActionComponent_div_3_span_2_Template, 2, 1, "span", 9);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r0.addLabel);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r0.addTooltip);
} }
function GridActionComponent_div_4_button_1_Template(rf, ctx) { if (rf & 1) {
const _r10 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "button", 13);
i0.ɵɵlistener("click", function GridActionComponent_div_4_button_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(2); return ctx_r9.edit.next(ctx_r9.selectedValue); });
i0.ɵɵelementStart(1, "span");
i0.ɵɵtext(2);
i0.ɵɵelementEnd()();
} if (rf & 2) {
const ctx_r7 = i0.ɵɵnextContext(2);
i0.ɵɵproperty("disabled", ctx_r7.editDisabled || ctx_r7.disableActionableElements);
i0.ɵɵattribute("id", ctx_r7.editId);
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(ctx_r7.editLabel);
} }
function GridActionComponent_div_4_span_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "span", 11);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r8 = i0.ɵɵnextContext(2);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate(ctx_r8.editTooltip);
} }
function GridActionComponent_div_4_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 7);
i0.ɵɵtemplate(1, GridActionComponent_div_4_button_1_Template, 3, 3, "button", 12);
i0.ɵɵtemplate(2, GridActionComponent_div_4_span_2_Template, 2, 1, "span", 9);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r1.editLabel);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r1.editTooltip);
} }
function GridActionComponent_div_5_button_1_Template(rf, ctx) { if (rf & 1) {
const _r14 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "button", 15);
i0.ɵɵlistener("click", function GridActionComponent_div_5_button_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(2); return ctx_r13.remove.next(ctx_r13.selectedValue); });
i0.ɵɵelementStart(1, "span");
i0.ɵɵtext(2);
i0.ɵɵelementEnd()();
} if (rf & 2) {
const ctx_r11 = i0.ɵɵnextContext(2);
i0.ɵɵproperty("disabled", ctx_r11.removeDisabled || ctx_r11.disableActionableElements);
i0.ɵɵattribute("id", ctx_r11.removeId);
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(ctx_r11.removeLabel);
} }
function GridActionComponent_div_5_span_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "span", 11);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r12 = i0.ɵɵnextContext(2);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate(ctx_r12.removeTooltip);
} }
function GridActionComponent_div_5_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 7);
i0.ɵɵtemplate(1, GridActionComponent_div_5_button_1_Template, 3, 3, "button", 14);
i0.ɵɵtemplate(2, GridActionComponent_div_5_span_2_Template, 2, 1, "span", 9);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r2 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r2.removeLabel);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r2.removeTooltip);
} }
const _c0 = [[["", 8, "custom-buttons-left"]], [["", 8, "custom-buttons"]], [["", 8, "custom-filters"]], [["", 8, "custom-buttons-search"]]];
const _c1 = [".custom-buttons-left", ".custom-buttons", ".custom-filters", ".custom-buttons-search"];
export class GridActionComponent {
constructor() {
this.id = 'lib-ga-search-id';
this.addId = 'lib-ga-add-id';
this.editId = 'lib-ga-edit-id';
this.removeId = 'lib-ga-remove-id';
this.searchQueryValue = '';
/**
* ** Flag that indicates actionable elements should be disabled.
*/
this.disableActionableElements = false;
/**
* ** Proxy emitter from QuickFilters component.
*/
this.quickFilterChange = new EventEmitter();
this.search = new EventEmitter();
this.add = new EventEmitter();
/* eslint-disable @typescript-eslint/no-explicit-any */
this.edit = new EventEmitter();
this.remove = new EventEmitter();
}
ngAfterViewInit() {
this.setQueryValue();
}
ngOnChanges(changes) {
if (changes['searchQueryValue']) {
this.setQueryValue();
}
}
get editDisabled() {
return (CollectionsUtil.isNil(this.selectedValue) ||
(CollectionsUtil.isString(this.selectedValue) && this.selectedValue.length === 0) ||
this.disableEdit);
}
get addDisabled() {
return this.disableAdd;
}
get removeDisabled() {
return (CollectionsUtil.isNil(this.selectedValue) ||
(CollectionsUtil.isString(this.selectedValue) && this.selectedValue.length === 0) ||
this.disableRemove);
}
/**
* vdk-search is being broken for one-way binding related to an input [searchQueryValue]
* this fix is a workaround (adding a delay of 1 millisecond to set queryValue, looks like
* needs to run in a separate thread)
*/
setQueryValue() {
setTimeout(() => {
this.queryValue = this.searchQueryValue;
}, 1);
}
}
GridActionComponent.ɵfac = function GridActionComponent_Factory(t) { return new (t || GridActionComponent)(); };
GridActionComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: GridActionComponent, selectors: [["lib-grid-action"]], inputs: { id: "id", addId: "addId", editId: "editId", removeId: "removeId", addLabel: "addLabel", editLabel: "editLabel", removeLabel: "removeLabel", addTooltip: "addTooltip", editTooltip: "editTooltip", removeTooltip: "removeTooltip", selectedValue: "selectedValue", searchQueryValue: "searchQueryValue", disableAdd: "disableAdd", disableEdit: "disableEdit", disableRemove: "disableRemove", quickFilters: "quickFilters", suppressQuickFilterChangeEvent: "suppressQuickFilterChangeEvent", disableActionableElements: "disableActionableElements" }, outputs: { quickFilterChange: "quickFilterChange", search: "search", add: "add", edit: "edit", remove: "remove" }, features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c1, decls: 13, vars: 9, consts: [[1, "grid-actions-container"], [1, "btn-actions-container", "btn-group"], ["class", "tooltip tooltip-sm tooltip-bottom-right", "role", "tooltip", "aria-haspopup", "true", 4, "ngIf"], [1, "btn-filters-container"], [3, "quickFilters", "suppressQuickFilterChangeEvent", "disableActionableElements", "quickFilterChange"], [1, "btn-search-container"], [3, "disabled", "searchQueryValue", "search"], ["role", "tooltip", "aria-haspopup", "true", 1, "tooltip", "tooltip-sm", "tooltip-bottom-right"], ["class", "btn btn-link btn-sm", "aria-label", "add", 3, "disabled", "click", 4, "ngIf"], ["class", "tooltip-content", 4, "ngIf"], ["aria-label", "add", 1, "btn", "btn-link", "btn-sm", 3, "disabled", "click"], [1, "tooltip-content"], ["class", "btn btn-link btn-sm", "aria-label", "edit", 3, "disabled", "click", 4, "ngIf"], ["aria-label", "edit", 1, "btn", "btn-link", "btn-sm", 3, "disabled", "click"], ["class", "btn btn-link btn-sm btn-link-red", "aria-label", "remove", 3, "disabled", "click", 4, "ngIf"], ["aria-label", "remove", 1, "btn", "btn-link", "btn-sm", "btn-link-red", 3, "disabled", "click"]], template: function GridActionComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵprojectionDef(_c0);
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
i0.ɵɵprojection(2);
i0.ɵɵtemplate(3, GridActionComponent_div_3_Template, 3, 2, "div", 2);
i0.ɵɵtemplate(4, GridActionComponent_div_4_Template, 3, 2, "div", 2);
i0.ɵɵtemplate(5, GridActionComponent_div_5_Template, 3, 2, "div", 2);
i0.ɵɵprojection(6, 1);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(7, "div", 3)(8, "lib-quick-filters", 4);
i0.ɵɵlistener("quickFilterChange", function GridActionComponent_Template_lib_quick_filters_quickFilterChange_8_listener($event) { return ctx.quickFilterChange.emit($event); });
i0.ɵɵelementEnd();
i0.ɵɵprojection(9, 2);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(10, "div", 5)(11, "vdk-search", 6);
i0.ɵɵlistener("search", function GridActionComponent_Template_vdk_search_search_11_listener($event) { return ctx.search.next($event); });
i0.ɵɵelementEnd();
i0.ɵɵprojection(12, 3);
i0.ɵɵelementEnd()();
} if (rf & 2) {
i0.ɵɵadvance(3);
i0.ɵɵproperty("ngIf", ctx.addLabel || ctx.addTooltip);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.editLabel || ctx.editTooltip);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.removeLabel || ctx.removeTooltip);
i0.ɵɵadvance(3);
i0.ɵɵproperty("quickFilters", ctx.quickFilters)("suppressQuickFilterChangeEvent", ctx.suppressQuickFilterChangeEvent)("disableActionableElements", ctx.disableActionableElements);
i0.ɵɵadvance(3);
i0.ɵɵproperty("disabled", ctx.disableActionableElements)("searchQueryValue", ctx.queryValue);
i0.ɵɵattribute("id", ctx.id);
} }, directives: [i1.NgIf, i2.QuickFiltersComponent, i3.VdkSearchComponent], styles: ["/*!\n * Copyright 2023-2025 Broadcom\n * SPDX-License-Identifier: Apache-2.0\n */.grid-actions-container{display:flex;justify-content:space-between;align-content:center;flex-direction:row;margin-top:20px;min-height:1.5rem}.grid-actions-container .btn-actions-container .btn{margin:.25rem 0;padding:0 .5rem}.grid-actions-container>.btn-actions-container button:first-child{padding-left:0}.grid-actions-container .btn-filters-container{display:flex;flex-grow:1;justify-content:flex-end}.grid-actions-container .btn-search-container{display:inline-flex}.grid-actions-container .btn-search-container .search-container{display:inline-flex;margin:0!important;transform:translateY(.15rem)}.grid-actions-container .btn-search-container .search-container input.clr-input{padding-top:2px}.grid-actions-container .tooltip-content{text-transform:initial;font-size:11px!important}.grid-actions-container>*{margin-right:1rem}.grid-actions-container>*:last-child{margin-right:0}.custom-buttons .btn:not(.custom-btn){margin:initial!important;padding:initial!important}.btn.btn-link.btn-link-red{color:#e62700}.btn.btn-link.btn-link-red:hover{color:#a32100}.btn.btn-link.btn-link-red:disabled{color:#565656}\n"], encapsulation: 2 });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(GridActionComponent, [{
type: Component,
args: [{ selector: 'lib-grid-action', encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2023-2025 Broadcom\n ~ SPDX-License-Identifier: Apache-2.0\n -->\n\n<div class=\"grid-actions-container\">\n <div class=\"btn-actions-container btn-group\">\n <ng-content select=\".custom-buttons-left\"></ng-content>\n\n <div\n *ngIf=\"addLabel || addTooltip\"\n class=\"tooltip tooltip-sm tooltip-bottom-right\"\n role=\"tooltip\"\n aria-haspopup=\"true\"\n >\n <button\n *ngIf=\"addLabel\"\n class=\"btn btn-link btn-sm\"\n aria-label=\"add\"\n [attr.id]=\"addId\"\n [disabled]=\"addDisabled || disableActionableElements\"\n (click)=\"add.next(true)\"\n >\n <span>{{ addLabel }}</span>\n </button>\n\n <span *ngIf=\"addTooltip\" class=\"tooltip-content\"\n >{{ addTooltip }}</span\n >\n </div>\n\n <div\n *ngIf=\"editLabel || editTooltip\"\n class=\"tooltip tooltip-sm tooltip-bottom-right\"\n role=\"tooltip\"\n aria-haspopup=\"true\"\n >\n <button\n *ngIf=\"editLabel\"\n class=\"btn btn-link btn-sm\"\n aria-label=\"edit\"\n [attr.id]=\"editId\"\n [disabled]=\"editDisabled || disableActionableElements\"\n (click)=\"edit.next(selectedValue)\"\n >\n <span>{{ editLabel }}</span>\n </button>\n\n <span *ngIf=\"editTooltip\" class=\"tooltip-content\"\n >{{ editTooltip }}</span\n >\n </div>\n\n <div\n *ngIf=\"removeLabel || removeTooltip\"\n class=\"tooltip tooltip-sm tooltip-bottom-right\"\n role=\"tooltip\"\n aria-haspopup=\"true\"\n >\n <button\n *ngIf=\"removeLabel\"\n class=\"btn btn-link btn-sm btn-link-red\"\n aria-label=\"remove\"\n [attr.id]=\"removeId\"\n [disabled]=\"removeDisabled || disableActionableElements\"\n (click)=\"remove.next(selectedValue)\"\n >\n <span>{{ removeLabel }}</span>\n </button>\n\n <span *ngIf=\"removeTooltip\" class=\"tooltip-content\"\n >{{ removeTooltip }}</span\n >\n </div>\n\n <ng-content select=\".custom-buttons\"></ng-content>\n </div>\n\n <div class=\"btn-filters-container\">\n <lib-quick-filters\n [quickFilters]=\"quickFilters\"\n [suppressQuickFilterChangeEvent]=\"suppressQuickFilterChangeEvent\"\n [disableActionableElements]=\"disableActionableElements\"\n (quickFilterChange)=\"quickFilterChange.emit($event)\"\n ></lib-quick-filters>\n\n <ng-content select=\".custom-filters\"></ng-content>\n </div>\n\n <div class=\"btn-search-container\">\n <vdk-search\n [attr.id]=\"id\"\n [disabled]=\"disableActionableElements\"\n [searchQueryValue]=\"queryValue\"\n (search)=\"search.next($event)\"\n ></vdk-search>\n\n <ng-content select=\".custom-buttons-search\"></ng-content>\n </div>\n</div>\n", styles: ["/*!\n * Copyright 2023-2025 Broadcom\n * SPDX-License-Identifier: Apache-2.0\n */.grid-actions-container{display:flex;justify-content:space-between;align-content:center;flex-direction:row;margin-top:20px;min-height:1.5rem}.grid-actions-container .btn-actions-container .btn{margin:.25rem 0;padding:0 .5rem}.grid-actions-container>.btn-actions-container button:first-child{padding-left:0}.grid-actions-container .btn-filters-container{display:flex;flex-grow:1;justify-content:flex-end}.grid-actions-container .btn-search-container{display:inline-flex}.grid-actions-container .btn-search-container .search-container{display:inline-flex;margin:0!important;transform:translateY(.15rem)}.grid-actions-container .btn-search-container .search-container input.clr-input{padding-top:2px}.grid-actions-container .tooltip-content{text-transform:initial;font-size:11px!important}.grid-actions-container>*{margin-right:1rem}.grid-actions-container>*:last-child{margin-right:0}.custom-buttons .btn:not(.custom-btn){margin:initial!important;padding:initial!important}.btn.btn-link.btn-link-red{color:#e62700}.btn.btn-link.btn-link-red:hover{color:#a32100}.btn.btn-link.btn-link-red:disabled{color:#565656}\n"] }]
}], null, { id: [{
type: Input
}], addId: [{
type: Input
}], editId: [{
type: Input
}], removeId: [{
type: Input
}], addLabel: [{
type: Input
}], editLabel: [{
type: Input
}], removeLabel: [{
type: Input
}], addTooltip: [{
type: Input
}], editTooltip: [{
type: Input
}], removeTooltip: [{
type: Input
}], selectedValue: [{
type: Input
}], searchQueryValue: [{
type: Input
}], disableAdd: [{
type: Input
}], disableEdit: [{
type: Input
}], disableRemove: [{
type: Input
}], quickFilters: [{
type: Input
}], suppressQuickFilterChangeEvent: [{
type: Input
}], disableActionableElements: [{
type: Input
}], quickFilterChange: [{
type: Output
}], search: [{
type: Output
}], add: [{
type: Output
}], edit: [{
type: Output
}], remove: [{
type: Output
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1hY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1waXBlbGluZXMvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9kYXRhLWdyaWQvZ3JpZC1hY3Rpb24vZ3JpZC1hY3Rpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1waXBlbGluZXMvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9kYXRhLWdyaWQvZ3JpZC1hY3Rpb24vZ3JpZC1hY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7OztJQ1EvQyxrQ0FPQztJQURHLDBLQUFTLGdCQUFTLElBQUksQ0FBQyxJQUFDO0lBRXhCLDRCQUFNO0lBQUEsWUFBYztJQUFBLGlCQUFPLEVBQUE7OztJQUgzQixpRkFBcUQ7SUFEckQsa0NBQWlCO0lBSVgsZUFBYztJQUFkLHFDQUFjOzs7SUFHeEIsZ0NBQ0s7SUFBQSxZQUFnQjtJQUFBLGlCQUNwQjs7O0lBREksZUFBZ0I7SUFBaEIsdUNBQWdCOzs7SUFsQnpCLDhCQUtDO0lBQ0csZ0ZBU1M7SUFFVCw0RUFFQztJQUNMLGlCQUFNOzs7SUFiRyxlQUFjO0lBQWQsc0NBQWM7SUFVWixlQUFnQjtJQUFoQix3Q0FBZ0I7Ozs7SUFXdkIsa0NBT0M7SUFERywyS0FBUyxzQ0FBd0IsSUFBQztJQUVsQyw0QkFBTTtJQUFBLFlBQWU7SUFBQSxpQkFBTyxFQUFBOzs7SUFINUIsa0ZBQXNEO0lBRHRELG1DQUFrQjtJQUlaLGVBQWU7SUFBZixz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MjAyMy0yMDI1IEJyb2FkY29tXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbGxlY3Rpb25zVXRpbCB9IGZyb20gJ0B2ZXJzYXRpbGVkYXRha2l0L3NoYXJlZCc7XG5cbmltcG9ydCB7IFF1aWNrRmlsdGVyQ2hhbmdlRXZlbnQsIFF1aWNrRmlsdGVycyB9IGZyb20gJy4uLy4uL3F1aWNrLWZpbHRlcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1ncmlkLWFjdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtYWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9ncmlkLWFjdGlvbi5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgR3JpZEFjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgaWQgPSAnbGliLWdhLXNlYXJjaC1pZCc7XG4gICAgQElucHV0KCkgYWRkSWQgPSAnbGliLWdhLWFkZC1pZCc7XG4gICAgQElucHV0KCkgZWRpdElkID0gJ2xpYi1nYS1lZGl0LWlkJztcbiAgICBASW5wdXQoKSByZW1vdmVJZCA9ICdsaWItZ2EtcmVtb3ZlLWlkJztcblxuICAgIEBJbnB1dCgpIGFkZExhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZWRpdExhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcmVtb3ZlTGFiZWw6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGFkZFRvb2x0aXA6IHN0cmluZztcbiAgICBASW5wdXQoKSBlZGl0VG9vbHRpcDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHJlbW92ZVRvb2x0aXA6IHN0cmluZztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgQElucHV0KCkgc2VsZWN0ZWRWYWx1ZTogYW55IHwgYW55W107XG4gICAgQElucHV0KCkgc2VhcmNoUXVlcnlWYWx1ZSA9ICcnO1xuXG4gICAgQElucHV0KCkgZGlzYWJsZUFkZDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkaXNhYmxlRWRpdDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkaXNhYmxlUmVtb3ZlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogKiogUHJveHkgY29uZmlnIGZvciBRdWlja0ZpbHRlcnMgY29tcG9uZW50LlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHF1aWNrRmlsdGVyczogUXVpY2tGaWx0ZXJzO1xuICAgIEBJbnB1dCgpIHN1cHByZXNzUXVpY2tGaWx0ZXJDaGFuZ2VFdmVudDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqICoqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgYWN0aW9uYWJsZSBlbGVtZW50cyBzaG91bGQgYmUgZGlzYWJsZWQuXG4gICAgICovXG4gICAgQElucHV0KCkgZGlzYWJsZUFjdGlvbmFibGVFbGVtZW50cyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogKiogUHJveHkgZW1pdHRlciBmcm9tIFF1aWNrRmlsdGVycyBjb21wb25lbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHF1aWNrRmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxRdWlja0ZpbHRlckNoYW5nZUV2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIHNlYXJjaDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgICBAT3V0cHV0KCkgYWRkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuICAgIEBPdXRwdXQoKSBlZGl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSByZW1vdmU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5cbiAgICBxdWVyeVZhbHVlOiBzdHJpbmc7XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0UXVlcnlWYWx1ZSgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3NlYXJjaFF1ZXJ5VmFsdWUnXSkge1xuICAgICAgICAgICAgdGhpcy5zZXRRdWVyeVZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZWRpdERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgQ29sbGVjdGlvbnNVdGlsLmlzTmlsKHRoaXMuc2VsZWN0ZWRWYWx1ZSkgfHxcbiAgICAgICAgICAgIChDb2xsZWN0aW9uc1V0aWwuaXNTdHJpbmcodGhpcy5zZWxlY3RlZFZhbHVlKSAmJiB0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlRWRpdFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBhZGREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZUFkZDtcbiAgICB9XG5cbiAgICBnZXQgcmVtb3ZlRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBDb2xsZWN0aW9uc1V0aWwuaXNOaWwodGhpcy5zZWxlY3RlZFZhbHVlKSB8fFxuICAgICAgICAgICAgKENvbGxlY3Rpb25zVXRpbC5pc1N0cmluZyh0aGlzLnNlbGVjdGVkVmFsdWUpICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPT09IDApIHx8XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVSZW1vdmVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB2ZGstc2VhcmNoIGlzIGJlaW5nIGJyb2tlbiBmb3Igb25lLXdheSBiaW5kaW5nIHJlbGF0ZWQgdG8gYW4gaW5wdXQgW3NlYXJjaFF1ZXJ5VmFsdWVdXG4gICAgICogdGhpcyBmaXggaXMgYSB3b3JrYXJvdW5kIChhZGRpbmcgYSBkZWxheSBvZiAxIG1pbGxpc2Vjb25kIHRvIHNldCBxdWVyeVZhbHVlLCBsb29rcyBsaWtlXG4gICAgICogbmVlZHMgdG8gcnVuIGluIGEgc2VwYXJhdGUgdGhyZWFkKVxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0UXVlcnlWYWx1ZSgpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5VmFsdWUgPSB0aGlzLnNlYXJjaFF1ZXJ5VmFsdWU7XG4gICAgICAgIH0sIDEpO1xuICAgIH1cbn1cbiIsIjwhLS1cbiAgIH4gQ29weXJpZ2h0IDIwMjMtMjAyNSBCcm9hZGNvbVxuICAgfiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICAtLT5cblxuPGRpdiBjbGFzcz1cImdyaWQtYWN0aW9ucy1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYnRuLWFjdGlvbnMtY29udGFpbmVyIGJ0bi1ncm91cFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIuY3VzdG9tLWJ1dHRvbnMtbGVmdFwiPjwvbmctY29udGVudD5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImFkZExhYmVsIHx8IGFkZFRvb2x0aXBcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0b29sdGlwIHRvb2x0aXAtc20gdG9vbHRpcC1ib3R0b20tcmlnaHRcIlxuICAgICAgICAgICAgcm9sZT1cInRvb2x0aXBcIlxuICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhZGRMYWJlbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiYWRkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJhZGRJZFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFkZERpc2FibGVkIHx8IGRpc2FibGVBY3Rpb25hYmxlRWxlbWVudHNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGQubmV4dCh0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgYWRkTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJhZGRUb29sdGlwXCIgY2xhc3M9XCJ0b29sdGlwLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgID57eyBhZGRUb29sdGlwIH19PC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiZWRpdExhYmVsIHx8IGVkaXRUb29sdGlwXCJcbiAgICAgICAgICAgIGNsYXNzPVwidG9vbHRpcCB0b29sdGlwLXNtIHRvb2x0aXAtYm90dG9tLXJpZ2h0XCJcbiAgICAgICAgICAgIHJvbGU9XCJ0b29sdGlwXCJcbiAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZWRpdExhYmVsXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc21cIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJlZGl0XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJlZGl0SWRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJlZGl0RGlzYWJsZWQgfHwgZGlzYWJsZUFjdGlvbmFibGVFbGVtZW50c1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXQubmV4dChzZWxlY3RlZFZhbHVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZWRpdExhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZWRpdFRvb2x0aXBcIiBjbGFzcz1cInRvb2x0aXAtY29udGVudFwiXG4gICAgICAgICAgICAgICAgPnt7IGVkaXRUb29sdGlwIH19PC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicmVtb3ZlTGFiZWwgfHwgcmVtb3ZlVG9vbHRpcFwiXG4gICAgICAgICAgICBjbGFzcz1cInRvb2x0aXAgdG9vbHRpcC1zbSB0b29sdGlwLWJvdHRvbS1yaWdodFwiXG4gICAgICAgICAgICByb2xlPVwidG9vbHRpcFwiXG4gICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cInJlbW92ZUxhYmVsXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc20gYnRuLWxpbmstcmVkXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwicmVtb3ZlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJyZW1vdmVJZFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlbW92ZURpc2FibGVkIHx8IGRpc2FibGVBY3Rpb25hYmxlRWxlbWVudHNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUubmV4dChzZWxlY3RlZFZhbHVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgcmVtb3ZlTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyZW1vdmVUb29sdGlwXCIgY2xhc3M9XCJ0b29sdGlwLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgID57eyByZW1vdmVUb29sdGlwIH19PC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIi5jdXN0b20tYnV0dG9uc1wiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJidG4tZmlsdGVycy1jb250YWluZXJcIj5cbiAgICAgICAgPGxpYi1xdWljay1maWx0ZXJzXG4gICAgICAgICAgICBbcXVpY2tGaWx0ZXJzXT1cInF1aWNrRmlsdGVyc1wiXG4gICAgICAgICAgICBbc3VwcHJlc3NRdWlja0ZpbHRlckNoYW5nZUV2ZW50XT1cInN1cHByZXNzUXVpY2tGaWx0ZXJDaGFuZ2VFdmVudFwiXG4gICAgICAgICAgICBbZGlzYWJsZUFjdGlvbmFibGVFbGVtZW50c109XCJkaXNhYmxlQWN0aW9uYWJsZUVsZW1lbnRzXCJcbiAgICAgICAgICAgIChxdWlja0ZpbHRlckNoYW5nZSk9XCJxdWlja0ZpbHRlckNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICA+PC9saWItcXVpY2stZmlsdGVycz5cblxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIuY3VzdG9tLWZpbHRlcnNcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYnRuLXNlYXJjaC1jb250YWluZXJcIj5cbiAgICAgICAgPHZkay1zZWFyY2hcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImlkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlQWN0aW9uYWJsZUVsZW1lbnRzXCJcbiAgICAgICAgICAgIFtzZWFyY2hRdWVyeVZhbHVlXT1cInF1ZXJ5VmFsdWVcIlxuICAgICAgICAgICAgKHNlYXJjaCk9XCJzZWFyY2gubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgPjwvdmRrLXNlYXJjaD5cblxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIuY3VzdG9tLWJ1dHRvbnMtc2VhcmNoXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=