mmhglobal-dynamicform 1.3.4 → 1.3.7
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/README.md +13 -0
- package/esm2020/lib/directives/fieldelement.directive.mjs +3 -3
- package/esm2020/lib/directives/scrollbar.theme.directive.mjs +3 -3
- package/esm2020/lib/mmhglobal-dynamicform.module.mjs +4 -4
- package/esm2020/lib/services/main.service.mjs +3 -3
- package/esm2020/lib/services/zcomponent.debug.service.mjs +3 -3
- package/esm2020/lib/services/zcomponent.service.mjs +3 -3
- package/esm2020/lib/uiactionbutton/uiactionbutton.component.mjs +3 -3
- package/esm2020/lib/uiappmenucontent/uiappmenucontent.component.mjs +3 -3
- package/esm2020/lib/uicontent/uicontent.component.mjs +3 -3
- package/esm2020/lib/uiheader/uiheader.component.mjs +3 -3
- package/esm2020/lib/uimenubutton/uimenubutton.component.mjs +3 -3
- package/esm2020/lib/uimenucontent/uimenucontent.component.mjs +3 -3
- package/esm2020/lib/uipage/uipage.component.mjs +3 -3
- package/esm2020/lib/uivalidationmessage/uivalidationmessage.component.mjs +3 -3
- package/esm2020/lib/zbullet/zbullet.component.mjs +3 -3
- package/esm2020/lib/zbuttons/zbuttons.component.mjs +3 -3
- package/esm2020/lib/zcard/zcard.component.mjs +3 -3
- package/esm2020/lib/zchart/zchart.component.mjs +3 -3
- package/esm2020/lib/zcheckbox/zcheckbox.component.mjs +3 -3
- package/esm2020/lib/zchip/zchip.component.mjs +3 -3
- package/esm2020/lib/zcodeeditor/zcodeeditor.component.mjs +3 -3
- package/esm2020/lib/zcodeeditor/zcodeeditor.pipe.mjs +3 -3
- package/esm2020/lib/zdaterange/zdaterange.component.mjs +3 -3
- package/esm2020/lib/zdatetime/dateParser.pipe.mjs +3 -3
- package/esm2020/lib/zdatetime/zdatetime.component.mjs +3 -3
- package/esm2020/lib/zdiv/zdiv.component.mjs +3 -3
- package/esm2020/lib/zdiv/zdiv.pipe.mjs +3 -3
- package/esm2020/lib/zform/zform.component.mjs +3 -3
- package/esm2020/lib/zformcontrol/zformcontrol.component.mjs +3 -3
- package/esm2020/lib/zgauge/zgauge.component.mjs +3 -3
- package/esm2020/lib/zgrid/date-range-cell-filter.component.mjs +3 -3
- package/esm2020/lib/zgrid/zgrid.binding.directive.mjs +20 -4
- package/esm2020/lib/zgrid/zgrid.component.mjs +14 -5
- package/esm2020/lib/zgrid/zgrid.popup.anchor-target.directive.mjs +3 -3
- package/esm2020/lib/zimg/zimg.component.mjs +3 -3
- package/esm2020/lib/zkcard/zkcard.component.mjs +8 -7
- package/esm2020/lib/zlabel/zlabel.component.mjs +24 -6
- package/esm2020/lib/zmfb/zmfb.component.mjs +3 -3
- package/esm2020/lib/zmodal/zmodal-mobile.component.mjs +3 -3
- package/esm2020/lib/zmodal/zmodal.component.mjs +3 -3
- package/esm2020/lib/znumeric/znumeric.component.mjs +3 -3
- package/esm2020/lib/zpostselectinput/zpostselectinput.component.mjs +3 -3
- package/esm2020/lib/zquerybuilder/zquerybuilder.component.mjs +3 -3
- package/esm2020/lib/zreport/zreport.component.mjs +3 -3
- package/esm2020/lib/zreport/zreport.config.mjs +3 -3
- package/esm2020/lib/zscheduler/zscheduler.component.mjs +3 -3
- package/esm2020/lib/zscheduler/zscheduler.toolbar.component.mjs +3 -3
- package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +3 -3
- package/esm2020/lib/zselectmultiple/zselectmultiple.directive.mjs +3 -3
- package/esm2020/lib/ztab/ztab.component.mjs +3 -3
- package/esm2020/lib/ztab/ztab.pipe.mjs +3 -3
- package/esm2020/lib/ztext/ztext.component.mjs +3 -3
- package/esm2020/lib/ztextarea/ztextarea.component.mjs +9 -9
- package/esm2020/lib/ztexteditor/ztexteditor.component.mjs +3 -3
- package/esm2020/lib/ztree/ztree.component.mjs +3 -3
- package/esm2020/lib/ztreelist/ztreelist.component.mjs +5 -5
- package/esm2020/lib/ztrendcard/ztrendcard.component.mjs +3 -3
- package/esm2020/lib/zudf/zudf.component.mjs +3 -3
- package/esm2020/lib/zunknown/zunknown.component.mjs +3 -3
- package/esm2020/lib/zupload/zupload.component.mjs +3 -3
- package/esm2020/lib/zworkflowbuttons/zworkflowbuttons.component.mjs +3 -3
- package/fesm2015/mmhglobal-dynamicform.mjs +239 -196
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +239 -196
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/zgrid/zgrid.binding.directive.d.ts +2 -0
- package/lib/zgrid/zgrid.component.d.ts +3 -1
- package/lib/zlabel/zlabel.component.d.ts +4 -2
- package/lib/ztreelist/ztreelist.component.d.ts +3 -3
- package/package.json +1 -1
|
@@ -202,7 +202,7 @@ export class ZtreelistComponent {
|
|
|
202
202
|
this.options.filterable = true;
|
|
203
203
|
this.options.resizable = true;
|
|
204
204
|
this.options.columnMenu = this.data.DisableGridColumnMenu ? false : true;
|
|
205
|
-
this.options.scrollable =
|
|
205
|
+
this.options.scrollable = this.data['ScrollMode'] ? this.data['ScrollMode'] : 'virtual';
|
|
206
206
|
this.options.idField = this.data["idField"] || this.idField;
|
|
207
207
|
this.options.parentIdField = this.data["parentIdField"] || this.parentIdField;
|
|
208
208
|
this.options.columns = [];
|
|
@@ -529,9 +529,9 @@ export class ZtreelistComponent {
|
|
|
529
529
|
return true;
|
|
530
530
|
}
|
|
531
531
|
}
|
|
532
|
-
ZtreelistComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
533
|
-
ZtreelistComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.6", type: ZtreelistComponent, selector: "app-ztreelist", inputs: { data: "data", group: "group", form: "form" }, ngImport: i0, template: "<div *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\" style=\"margin: 10px 0 6px 0;\">\r\n <div *ngIf=\"data.Title\" class=\"treelistTitle\">{{data.Title}}</div>\r\n <kendo-treelist [kendoTreeListFlatBinding]=\"dataSource\" [ngStyle]=\"getGridStyle()\" [idField]=\"options.idField\" [parentIdField]=\"options.parentIdField\"\r\n (cellClick)=\"cellClickHandler($event)\"\r\n [sortable]=\"options.sortable\"\r\n [resizable]=\"options.resizable\"\r\n [filterable]=\"false\"\r\n [reorderable]=\"false\"\r\n [columnMenu]=\"options.columnMenu\"\r\n [scrollable]=\"options.scrollable\"\r\n [aggregate]=\"options.aggregate\"\r\n [pageable]=\"options.pageAble\"\r\n [pageSize]=\"data.PageSize\"\r\n [initiallyExpanded]=\"data.DefaultCollapse === false\"\r\n (filterChange)=\"onFilterChange($event)\"\r\n kendoTreeListExpandable\r\n treelist>\r\n\r\n <!--\r\n [filterable]=\"options.filterable\"\r\n [reorderable]=\"options.resizable\"\r\n -->\r\n <ng-container *ngFor=\"let col of options.columns; index as i\">\r\n <kendo-treelist-column *ngIf=\"!col.command\"\r\n [class]=\"col.class\"\r\n [expandable]=\"i===0\"\r\n [field]=\"col.field\"\r\n [title]=\"col.title || col.field\"\r\n [width]=\"col.width || 250\"\r\n [filterable]=\"filterable(col.enableFiltering)\"\r\n [sortable]=\"sortable(col.enableSorting)\"\r\n [hidden]=\"!isColumnsVisible(col.visible)\">\r\n <div [ngSwitch]=\"true\">\r\n <div *ngSwitchCase=\"col.fieldType === 'number'\r\n || col.fieldType === 'currency'\r\n || col.fieldType === 'znumeric'\">\r\n <ng-template kendoTreeListFilterCellTemplate let-filter let-column=\"column\">\r\n <kendo-treelist-numeric-filter-cell [column]=\"column\" [filter]=\"filter\" operator=\"eq\">\r\n <kendo-filter-eq-operator></kendo-filter-eq-operator>\r\n <kendo-filter-neq-operator></kendo-filter-neq-operator>\r\n <kendo-filter-lt-operator></kendo-filter-lt-operator>\r\n <kendo-filter-lte-operator></kendo-filter-lte-operator>\r\n <kendo-filter-gt-operator></kendo-filter-gt-operator>\r\n <kendo-filter-gte-operator></kendo-filter-gte-operator>\r\n <kendo-filter-isnull-operator></kendo-filter-isnull-operator>\r\n <kendo-filter-isnotnull-operator></kendo-filter-isnotnull-operator>\r\n </kendo-treelist-numeric-filter-cell>\r\n </ng-template>\r\n </div>\r\n <div *ngSwitchCase=\"col.fieldType == 'zdate'\r\n || col.fieldType === 'zdatetime'\r\n || col.fieldType === 'zuidatetime'\">\r\n <div *ngIf=\"col.filterByDateRange === true\">\r\n <ng-template kendoTreeListFilterCellTemplate let-filter let-column=\"column\" operator=\"lte\">\r\n <date-range-filter-cell class=\"date-range-filter\"\r\n [filter]=\"filter\"\r\n [field]=\"col.field\">\r\n <kendo-treelist-filter-lt-operator></kendo-treelist-filter-lt-operator>\r\n <kendo-treelist-filter-lte-operator></kendo-treelist-filter-lte-operator>\r\n <kendo-treelist-filter-gt-operator></kendo-treelist-filter-gt-operator>\r\n <kendo-treelist-filter-gte-operator></kendo-treelist-filter-gte-operator>\r\n <kendo-treelist-filter-isnull-operator></kendo-treelist-filter-isnull-operator>\r\n <kendo-treelist-filter-isnotnull-operator></kendo-treelist-filter-isnotnull-operator>\r\n </date-range-filter-cell>\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"col.filterByDateRange === false\">\r\n <ng-template kendoTreeListFilterCellTemplate let-filter let-column=\"column\">\r\n <kendo-treelist-date-filter-cell [column]=\"column\" [filter]=\"filter\" operator=\"lte\">\r\n <kendo-treelist-filter-lt-operator></kendo-treelist-filter-lt-operator>\r\n <kendo-treelist-filter-lte-operator></kendo-treelist-filter-lte-operator>\r\n <kendo-treelist-filter-gt-operator></kendo-treelist-filter-gt-operator>\r\n <kendo-treelist-filter-gte-operator></kendo-treelist-filter-gte-operator>\r\n <kendo-treelist-filter-isnull-operator></kendo-treelist-filter-isnull-operator>\r\n <kendo-treelist-filter-isnotnull-operator></kendo-treelist-filter-isnotnull-operator>\r\n </kendo-treelist-date-filter-cell>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div *ngSwitchDefault>\r\n <ng-template kendoTreeListFilterCellTemplate let-filter let-column=\"column\">\r\n <kendo-treelist-string-filter-cell [column]=\"column\" [filter]=\"filter\" operator=\"contains\">\r\n <kendo-treelist-filter-contains-operator></kendo-treelist-filter-contains-operator>\r\n <kendo-treelist-filter-eq-operator></kendo-treelist-filter-eq-operator>\r\n <kendo-treelist-filter-neq-operator></kendo-treelist-filter-neq-operator>\r\n <kendo-treelist-filter-startswith-operator></kendo-treelist-filter-startswith-operator>\r\n <kendo-treelist-filter-endswith-operator></kendo-treelist-filter-endswith-operator>\r\n <kendo-treelist-filter-isnull-operator></kendo-treelist-filter-isnull-operator>\r\n <kendo-treelist-filter-isnotnull-operator></kendo-treelist-filter-isnotnull-operator>\r\n </kendo-treelist-string-filter-cell>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <ng-template kendoTreeListCellTemplate let-dataItem let-rowIndex=\"rowIndex\" let-cellContext=\"cellContext\">\r\n <div style=\"margin: 7px 0;display: inline;\" [style.color]=\"(!!dataItem.Color ? [dataItem.Color] : 'black')\" *ngIf=\"!col.navigateTo && col.isEditableInGrid !== true\" [ngSwitch]=\"col.fieldType\" [ngClass]=\"getColClass(dataItem, col)\">\r\n <span *ngSwitchCase=\"'zdate'\">\r\n {{ dataItem[col.field] | date: 'dd/MM/yyyy' }}\r\n </span>\r\n <span *ngSwitchCase=\"'zshortdate'\">\r\n {{ dataItem[col.field] | date: 'MMM yyyy' }}\r\n </span>\r\n <span *ngSwitchCase=\"'zdatetime'\">\r\n {{ dataItem[col.field] | date: 'dd/MM/yyyy hh:mm:ss aa' }}\r\n </span>\r\n <span *ngSwitchCase=\"'zuidatetime'\">\r\n {{ dataItem[col.field] | date: 'dd/MM/yyyy hh:mm:ss aa' }}\r\n </span>\r\n <span *ngSwitchCase=\"'number'\">\r\n <div style=\"text-align:right;\">{{ dataItem[col.field] | number }} </div>\r\n </span>\r\n <span *ngSwitchCase=\"'currency'\">\r\n <div style=\"text-align:right;\">{{ dataItem[col.field] | number: '1.2-2' }}</div>\r\n </span>\r\n <span *ngSwitchCase=\"'znumeric'\">\r\n <div style=\"text-align:right;\">{{ dataItem[col.field] | number: getFormat(col) }}</div>\r\n </span>\r\n <span *ngSwitchCase=\"'url'\" style=\"color: blue; cursor: pointer; text-decoration:underline;\">\r\n {{ dataItem[col.field] }}\r\n </span>\r\n <span *ngSwitchDefault>\r\n {{ dataItem[col.field]}}\r\n </span>\r\n </div>\r\n <div style=\"margin: 7px 0;display: inline;\" [style.color]=\"(!!dataItem.Color ? [dataItem.Color] : 'black')\" *ngIf=\"!col.navigateTo && col.isEditableInGrid === true && isInlineEditColVisible(dataItem, col)\" [ngSwitch]=\"col.fieldType\" [ngClass]=\"getColClass(dataItem, col)\">\r\n <span *ngSwitchCase=\"'checkbox'\">\r\n <app-zcheckbox style=\"width: 100%;\" [data]=\"getInlineField(col.Value)\" [group]=\"group\" [form]=\"getInlineForm(dataItem)\" (click)=\"buttonClick(col, cellContext)\"></app-zcheckbox>\r\n </span>\r\n <span *ngSwitchCase=\"'zuiselectmultiple'\">\r\n <app-zselectmultiple style=\"width: 100%;\" [data]=\"getInlineField(col.field)\" [group]=\"group\" [form]=\"getInlineForm(dataItem)\"></app-zselectmultiple>\r\n </span>\r\n <span *ngSwitchCase=\"'textarea'\">\r\n <app-ztextarea style=\"width: 100%;\" [data]=\"getInlineField(col.Value)\" [group]=\"group\" [form]=\"getInlineForm(dataItem)\"></app-ztextarea>\r\n </span>\r\n <span *ngSwitchCase=\"['zuidatetime','zdate','zdatetime','zshortdate'].includes(col.fieldType) ? col.fieldType : ''\">\r\n <app-zdatetime style=\"width: 100%;\" [data]=\"getInlineField(col.Value)\" [group]=\"group\" [form]=\"getInlineForm(dataItem)\"></app-zdatetime>\r\n </span>\r\n </div>\r\n <span *ngIf=\"!!col.navigateTo\" (click)=\"onNavigateTo($event, col, dataItem, dataItem[col.field])\">\r\n <ion-button color=\"light\" size=\"small\">\r\n {{ dataItem[col.field] }}\r\n <!-- <ion-icon slot= \"end\" name=\"arrow-forward\"></ion-icon> -->\r\n <fa-icon slot=\"end\" [icon]=\"'arrow-right'\"></fa-icon>\r\n </ion-button>\r\n </span> \r\n </ng-template>\r\n <ng-template *ngIf=\"col.footerTemplate\" kendoTreeListFooterTemplate let-aggregates=\"aggregates\">\r\n <div *ngIf=\"!col.navigateTo\" [ngSwitch]=\"col.fieldType\" [ngClass]=\"{'rightAligned': col.fieldType === 'number' || col.fieldType === 'currency'}\">\r\n <span *ngSwitchCase=\"'number'\">\r\n <b>\r\n {{ col.aggregateTitle | titlecase }} {{ aggregates[col.field][col.aggregateType] | number }}\r\n </b>\r\n </span>\r\n <span *ngSwitchCase=\"'currency'\">\r\n <b>\r\n {{ col.aggregateTitle | titlecase }} {{ aggregates[col.field][col.aggregateType] | number: '1.2-2' }}\r\n </b>\r\n </span>\r\n </div>\r\n </ng-template>\r\n </kendo-treelist-column>\r\n <kendo-treelist-command-column *ngIf=\"!!col.command\" [title]=\"col.title || col.field\" [width]=\"col.width || 250\">\r\n <ng-template kendoTreeListCellTemplate let-cellContext=\"cellContext\">\r\n <div [ngClass]=\"col.class\">\r\n <button *ngFor=\"let col2 of col.command; index as i\" type=\"button\" [kendoTreeListEditCommand]=\"cellContext\"\r\n [title]=\"col2.text\" (click)=\"buttonClick(col2, cellContext)\"\r\n [hidden]=\"isButtonHidden(col2, cellContext)\">\r\n <fa-icon [icon]=\"col2.icon\" [style.color]=\"(!!col2.color ? [col2.color] : 'black')\">\r\n </fa-icon>\r\n <div *ngIf=\"col2.ShowLabel === undefined || col2.ShowLabel\">{{col2.text}}</div>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </kendo-treelist-command-column>\r\n </ng-container>\r\n\r\n <!-- <kendo-treelist-command-column width=\"140\">\r\n <ng-template kendoTreeListCellTemplate let-isNew=\"isNew\" let-cellContext=\"cellContext\">\r\n <button [kendoTreeListAddCommand]=\"cellContext\"\r\n icon=\"filter-add-expression\" title=\"Add Child\">\r\n </button>\r\n <button [kendoTreeListCancelCommand]=\"cellContext\"\r\n icon=\"cancel\" title=\"{{ isNew ? 'Discard changes' : 'Cancel' }}\">\r\n </button>\r\n </ng-template>\r\n </kendo-treelist-command-column> -->\r\n </kendo-treelist>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-treelist .k-grid-content{white-space:nowrap}:host ::ng-deep kendo-treelist .k-toolbar{background-color:#e3ecf8}:host ::ng-deep kendo-treelist .k-grid-header,:host ::ng-deep kendo-treelist .k-grouping-header,:host ::ng-deep kendo-treelist .k-grid-add-row,:host ::ng-deep kendo-treelist .k-grid-footer{background-color:#e3ecf8;font-weight:600}:host ::ng-deep kendo-treelist .k-grid-header{background-color:#e3ecf8;font-weight:600}:host ::ng-deep kendo-treelist .k-button{border-radius:5px;box-shadow:0 2px 2px #0000001a;background-color:#c9daf2}:host ::ng-deep kendo-treelist .k-grid-header .k-grid-filter:hover,:host ::ng-deep kendo-treelist .k-grid-header .k-header-column-menu:hover,:host ::ng-deep kendo-treelist .k-grid-header .k-hierarchy-cell .k-icon:hover{background-color:#c9daf2}:host ::ng-deep kendo-treelist .k-grid .k-grid-filter,:host ::ng-deep kendo-treelist .k-grid .k-header-column-menu,:host ::ng-deep kendo-treelist .k-grid .k-hierarchy-cell .k-icon{color:#132842}:host ::ng-deep kendo-treelist .k-dropdown .k-dropdown-wrap,:host ::ng-deep kendo-treelist .k-dropdowntree .k-dropdown-wrap{border-radius:2px;background-color:#d6e0ef80}:host ::ng-deep kendo-treelist tr.k-alt{background-color:#e8eef680}:host ::ng-deep kendo-treelist tbody tr:hover,:host ::ng-deep kendo-treelist tbody tr.k-state-hover{background-color:#d6e0ef80}:host ::ng-deep kendo-treelist .k-pager-wrap{background-color:#e3ecf8}:host ::ng-deep kendo-treelist .k-pager-numbers .k-link.k-state-selected{color:#ff5e5b;background-color:#ff5e5b66}:host ::ng-deep kendo-treelist .k-pager-numbers .k-link:hover,:host ::ng-deep kendo-treelist .k-pager-numbers .k-link.k-state-hover{color:#ff5e5b;background-color:#ff5e5b26}.cellWrapText .gridCell{white-space:pre-line!important}.treelistTitle{margin:20px 10px 5px;font-size:18px;font-weight:700}.rightAligned{text-align:right;display:table!important;margin:0 0 0 auto!important}.centerAligned{text-align:center;display:table!important;margin:0 auto!important}.k-i-loading{position:absolute;top:100px;left:0;right:0;bottom:0;font-size:45px;background-color:#ffffff4d;color:#0f4800}\n"], components: [{ type: i3.TreeListComponent, selector: "kendo-treelist", inputs: ["pageSize", "scrollable", "trackBy", "virtualColumns", "filterable", "sortable", "pageable", "navigable", "autoSize", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "skip", "data", "sort", "navigatable", "rowClass", "idField", "selectable", "isSelected", "columns", "fetchChildren", "hasChildren", "isExpanded", "aria-label", "height", "rowHeight", "filter"], outputs: ["selectionChange", "filterChange", "pageChange", "sortChange", "dataStateChange", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "scrollBottom", "contentScroll", "expand", "collapse", "expandStateChange"], exportAs: ["kendoTreeList"] }, { type: i3.ColumnComponent, selector: "kendo-treelist-column", inputs: ["sortable", "editor", "filter", "filterable", "editable", "expandable", "field", "format"] }, { type: i3.NumericFilterCellComponent, selector: "kendo-treelist-numeric-filter-cell", inputs: ["filterDelay", "showOperators"] }, { type: i4.EqualFilterOperatorComponent, selector: "kendo-filter-eq-operator" }, { type: i4.NotEqualFilterOperatorComponent, selector: "kendo-filter-neq-operator" }, { type: i4.LessFilterOperatorComponent, selector: "kendo-filter-lt-operator" }, { type: i4.LessOrEqualToFilterOperatorComponent, selector: "kendo-filter-lte-operator" }, { type: i4.GreaterFilterOperatorComponent, selector: "kendo-filter-gt-operator" }, { type: i4.GreaterOrEqualToFilterOperatorComponent, selector: "kendo-filter-gte-operator" }, { type: i4.IsNullFilterOperatorComponent, selector: "kendo-filter-isnull-operator" }, { type: i4.IsNotNullFilterOperatorComponent, selector: "kendo-filter-isnotnull-operator" }, { type: i5.DateRangeFilterCellComponent, selector: "date-range-filter-cell", inputs: ["filter", "field"] }, { type: i3.LessFilterOperatorComponent, selector: "kendo-treelist-filter-lt-operator" }, { type: i3.LessOrEqualToFilterOperatorComponent, selector: "kendo-treelist-filter-lte-operator" }, { type: i3.GreaterFilterOperatorComponent, selector: "kendo-treelist-filter-gt-operator" }, { type: i3.GreaterOrEqualToFilterOperatorComponent, selector: "kendo-treelist-filter-gte-operator" }, { type: i3.IsNullFilterOperatorComponent, selector: "kendo-treelist-filter-isnull-operator" }, { type: i3.IsNotNullFilterOperatorComponent, selector: "kendo-treelist-filter-isnotnull-operator" }, { type: i3.DateFilterCellComponent, selector: "kendo-treelist-date-filter-cell", inputs: ["showOperators"] }, { type: i3.StringFilterCellComponent, selector: "kendo-treelist-string-filter-cell", inputs: ["filterDelay", "showOperators"] }, { type: i3.ContainsFilterOperatorComponent, selector: "kendo-treelist-filter-contains-operator" }, { type: i3.EqualFilterOperatorComponent, selector: "kendo-treelist-filter-eq-operator" }, { type: i3.NotEqualFilterOperatorComponent, selector: "kendo-treelist-filter-neq-operator" }, { type: i3.StartsWithFilterOperatorComponent, selector: "kendo-treelist-filter-startswith-operator" }, { type: i3.EndsWithFilterOperatorComponent, selector: "kendo-treelist-filter-endswith-operator" }, { type: i6.ZcheckboxComponent, selector: "app-zcheckbox", inputs: ["data", "group", "form"] }, { type: i7.ZselectmultipleComponent, selector: "app-zselectmultiple", inputs: ["data", "group", "form", "iconList", "buttonList"] }, { type: i8.ZtextareaComponent, selector: "app-ztextarea", inputs: ["data", "group", "form"] }, { type: i9.ZdatetimeComponent, selector: "app-zdatetime", inputs: ["data", "group", "form"] }, { type: i10.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i11.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i3.CommandColumnComponent, selector: "kendo-treelist-command-column" }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.ExpandableDirective, selector: "[kendoTreeListExpandable]", inputs: ["initiallyExpanded", "expandedKeys", "expandBy"], outputs: ["expandedKeysChange"], exportAs: ["kendoTreeListExpandable"] }, { type: i3.FlatBindingDirective, selector: "[kendoTreeListFlatBinding]", inputs: ["parentIdField", "idField", "kendoTreeListFlatBinding"], exportAs: ["kendoTreeListFlatBinding"] }, { type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i12.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i3.FilterCellTemplateDirective, selector: "[kendoTreeListFilterCellTemplate]" }, { type: i12.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i3.CellTemplateDirective, selector: "[kendoTreeListCellTemplate]" }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.FooterTemplateDirective, selector: "[kendoTreeListFooterTemplate]" }, { type: i3.FocusableDirective, selector: "[kendoTreeListFocusable], [kendoTreeListAddCommand], [kendoTreeListEditCommand], [kendoTreeListRemoveCommand], [kendoTreeListSaveCommand], [kendoTreeListCancelCommand] ", inputs: ["kendoTreeListAddCommand", "kendoTreeListFocusable", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: i3.EditCommandDirective, selector: "[kendoTreeListEditCommand]", inputs: ["kendoTreeListEditCommand"] }], pipes: { "date": i12.DatePipe, "number": i12.DecimalPipe, "titlecase": i12.TitleCasePipe } });
|
|
534
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
532
|
+
ZtreelistComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZtreelistComponent, deps: [{ token: i1.FieldService }, { token: i1.WebApiService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Component });
|
|
533
|
+
ZtreelistComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ZtreelistComponent, selector: "app-ztreelist", inputs: { data: "data", group: "group", form: "form" }, ngImport: i0, template: "<div *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\" style=\"margin: 10px 0 6px 0;\">\r\n <div *ngIf=\"data.Title\" class=\"treelistTitle\">{{data.Title}}</div>\r\n <kendo-treelist [kendoTreeListFlatBinding]=\"dataSource\" [ngStyle]=\"getGridStyle()\" [idField]=\"options.idField\" [parentIdField]=\"options.parentIdField\"\r\n (cellClick)=\"cellClickHandler($event)\"\r\n [sortable]=\"options.sortable\"\r\n [resizable]=\"options.resizable\"\r\n [filterable]=\"false\"\r\n [reorderable]=\"false\"\r\n [columnMenu]=\"options.columnMenu\"\r\n [scrollable]=\"options.scrollable\"\r\n [aggregate]=\"options.aggregate\"\r\n [pageable]=\"options.pageAble\"\r\n [pageSize]=\"data.PageSize\"\r\n [initiallyExpanded]=\"data.DefaultCollapse === false\"\r\n (filterChange)=\"onFilterChange($event)\"\r\n kendoTreeListExpandable\r\n treelist>\r\n\r\n <!--\r\n [filterable]=\"options.filterable\"\r\n [reorderable]=\"options.resizable\"\r\n -->\r\n <ng-container *ngFor=\"let col of options.columns; index as i\">\r\n <kendo-treelist-column *ngIf=\"!col.command\"\r\n [class]=\"col.class\"\r\n [expandable]=\"i===0\"\r\n [field]=\"col.field\"\r\n [title]=\"col.title || col.field\"\r\n [width]=\"col.width || 250\"\r\n [filterable]=\"filterable(col.enableFiltering)\"\r\n [sortable]=\"sortable(col.enableSorting)\"\r\n [hidden]=\"!isColumnsVisible(col.visible)\">\r\n <div [ngSwitch]=\"true\">\r\n <div *ngSwitchCase=\"col.fieldType === 'number'\r\n || col.fieldType === 'currency'\r\n || col.fieldType === 'znumeric'\">\r\n <ng-template kendoTreeListFilterCellTemplate let-filter let-column=\"column\">\r\n <kendo-treelist-numeric-filter-cell [column]=\"column\" [filter]=\"filter\" operator=\"eq\">\r\n <kendo-filter-eq-operator></kendo-filter-eq-operator>\r\n <kendo-filter-neq-operator></kendo-filter-neq-operator>\r\n <kendo-filter-lt-operator></kendo-filter-lt-operator>\r\n <kendo-filter-lte-operator></kendo-filter-lte-operator>\r\n <kendo-filter-gt-operator></kendo-filter-gt-operator>\r\n <kendo-filter-gte-operator></kendo-filter-gte-operator>\r\n <kendo-filter-isnull-operator></kendo-filter-isnull-operator>\r\n <kendo-filter-isnotnull-operator></kendo-filter-isnotnull-operator>\r\n </kendo-treelist-numeric-filter-cell>\r\n </ng-template>\r\n </div>\r\n <div *ngSwitchCase=\"col.fieldType == 'zdate'\r\n || col.fieldType === 'zdatetime'\r\n || col.fieldType === 'zuidatetime'\">\r\n <div *ngIf=\"col.filterByDateRange === true\">\r\n <ng-template kendoTreeListFilterCellTemplate let-filter let-column=\"column\" operator=\"lte\">\r\n <date-range-filter-cell class=\"date-range-filter\"\r\n [filter]=\"filter\"\r\n [field]=\"col.field\">\r\n <kendo-treelist-filter-lt-operator></kendo-treelist-filter-lt-operator>\r\n <kendo-treelist-filter-lte-operator></kendo-treelist-filter-lte-operator>\r\n <kendo-treelist-filter-gt-operator></kendo-treelist-filter-gt-operator>\r\n <kendo-treelist-filter-gte-operator></kendo-treelist-filter-gte-operator>\r\n <kendo-treelist-filter-isnull-operator></kendo-treelist-filter-isnull-operator>\r\n <kendo-treelist-filter-isnotnull-operator></kendo-treelist-filter-isnotnull-operator>\r\n </date-range-filter-cell>\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"col.filterByDateRange === false\">\r\n <ng-template kendoTreeListFilterCellTemplate let-filter let-column=\"column\">\r\n <kendo-treelist-date-filter-cell [column]=\"column\" [filter]=\"filter\" operator=\"lte\">\r\n <kendo-treelist-filter-lt-operator></kendo-treelist-filter-lt-operator>\r\n <kendo-treelist-filter-lte-operator></kendo-treelist-filter-lte-operator>\r\n <kendo-treelist-filter-gt-operator></kendo-treelist-filter-gt-operator>\r\n <kendo-treelist-filter-gte-operator></kendo-treelist-filter-gte-operator>\r\n <kendo-treelist-filter-isnull-operator></kendo-treelist-filter-isnull-operator>\r\n <kendo-treelist-filter-isnotnull-operator></kendo-treelist-filter-isnotnull-operator>\r\n </kendo-treelist-date-filter-cell>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div *ngSwitchDefault>\r\n <ng-template kendoTreeListFilterCellTemplate let-filter let-column=\"column\">\r\n <kendo-treelist-string-filter-cell [column]=\"column\" [filter]=\"filter\" operator=\"contains\">\r\n <kendo-treelist-filter-contains-operator></kendo-treelist-filter-contains-operator>\r\n <kendo-treelist-filter-eq-operator></kendo-treelist-filter-eq-operator>\r\n <kendo-treelist-filter-neq-operator></kendo-treelist-filter-neq-operator>\r\n <kendo-treelist-filter-startswith-operator></kendo-treelist-filter-startswith-operator>\r\n <kendo-treelist-filter-endswith-operator></kendo-treelist-filter-endswith-operator>\r\n <kendo-treelist-filter-isnull-operator></kendo-treelist-filter-isnull-operator>\r\n <kendo-treelist-filter-isnotnull-operator></kendo-treelist-filter-isnotnull-operator>\r\n </kendo-treelist-string-filter-cell>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <ng-template kendoTreeListCellTemplate let-dataItem let-rowIndex=\"rowIndex\" let-cellContext=\"cellContext\">\r\n <div style=\"margin: 7px 0;display: inline;\" [style.color]=\"(!!dataItem.Color ? [dataItem.Color] : 'black')\" *ngIf=\"!col.navigateTo && col.isEditableInGrid !== true\" [ngSwitch]=\"col.fieldType\" [ngClass]=\"getColClass(dataItem, col)\">\r\n <span *ngSwitchCase=\"'zdate'\">\r\n {{ dataItem[col.field] | date: 'dd/MM/yyyy' }}\r\n </span>\r\n <span *ngSwitchCase=\"'zshortdate'\">\r\n {{ dataItem[col.field] | date: 'MMM yyyy' }}\r\n </span>\r\n <span *ngSwitchCase=\"'zdatetime'\">\r\n {{ dataItem[col.field] | date: 'dd/MM/yyyy hh:mm:ss aa' }}\r\n </span>\r\n <span *ngSwitchCase=\"'zuidatetime'\">\r\n {{ dataItem[col.field] | date: 'dd/MM/yyyy hh:mm:ss aa' }}\r\n </span>\r\n <span *ngSwitchCase=\"'number'\">\r\n <div style=\"text-align:right;\">{{ dataItem[col.field] | number }} </div>\r\n </span>\r\n <span *ngSwitchCase=\"'currency'\">\r\n <div style=\"text-align:right;\">{{ dataItem[col.field] | number: '1.2-2' }}</div>\r\n </span>\r\n <span *ngSwitchCase=\"'znumeric'\">\r\n <div style=\"text-align:right;\">{{ dataItem[col.field] | number: getFormat(col) }}</div>\r\n </span>\r\n <span *ngSwitchCase=\"'url'\" style=\"color: blue; cursor: pointer; text-decoration:underline;\">\r\n {{ dataItem[col.field] }}\r\n </span>\r\n <span *ngSwitchDefault>\r\n {{ dataItem[col.field]}}\r\n </span>\r\n </div>\r\n <div style=\"margin: 7px 0;display: inline;\" [style.color]=\"(!!dataItem.Color ? [dataItem.Color] : 'black')\" *ngIf=\"!col.navigateTo && col.isEditableInGrid === true && isInlineEditColVisible(dataItem, col)\" [ngSwitch]=\"col.fieldType\" [ngClass]=\"getColClass(dataItem, col)\">\r\n <span *ngSwitchCase=\"'checkbox'\">\r\n <app-zcheckbox style=\"width: 100%;\" [data]=\"getInlineField(col.Value)\" [group]=\"group\" [form]=\"getInlineForm(dataItem)\" (click)=\"buttonClick(col, cellContext)\"></app-zcheckbox>\r\n </span>\r\n <span *ngSwitchCase=\"'zuiselectmultiple'\">\r\n <app-zselectmultiple style=\"width: 100%;\" [data]=\"getInlineField(col.field)\" [group]=\"group\" [form]=\"getInlineForm(dataItem)\"></app-zselectmultiple>\r\n </span>\r\n <span *ngSwitchCase=\"'textarea'\">\r\n <app-ztextarea style=\"width: 100%;\" [data]=\"getInlineField(col.Value)\" [group]=\"group\" [form]=\"getInlineForm(dataItem)\"></app-ztextarea>\r\n </span>\r\n <span *ngSwitchCase=\"['zuidatetime','zdate','zdatetime','zshortdate'].includes(col.fieldType) ? col.fieldType : ''\">\r\n <app-zdatetime style=\"width: 100%;\" [data]=\"getInlineField(col.Value)\" [group]=\"group\" [form]=\"getInlineForm(dataItem)\"></app-zdatetime>\r\n </span>\r\n </div>\r\n <span *ngIf=\"!!col.navigateTo\" (click)=\"onNavigateTo($event, col, dataItem, dataItem[col.field])\">\r\n <ion-button color=\"light\" size=\"small\">\r\n {{ dataItem[col.field] }}\r\n <!-- <ion-icon slot= \"end\" name=\"arrow-forward\"></ion-icon> -->\r\n <fa-icon slot=\"end\" [icon]=\"'arrow-right'\"></fa-icon>\r\n </ion-button>\r\n </span> \r\n </ng-template>\r\n <ng-template *ngIf=\"col.footerTemplate\" kendoTreeListFooterTemplate let-aggregates=\"aggregates\">\r\n <div *ngIf=\"!col.navigateTo\" [ngSwitch]=\"col.fieldType\" [ngClass]=\"{'rightAligned': col.fieldType === 'number' || col.fieldType === 'currency'}\">\r\n <span *ngSwitchCase=\"'number'\">\r\n <b>\r\n {{ col.aggregateTitle | titlecase }} {{ aggregates[col.field][col.aggregateType] | number }}\r\n </b>\r\n </span>\r\n <span *ngSwitchCase=\"'currency'\">\r\n <b>\r\n {{ col.aggregateTitle | titlecase }} {{ aggregates[col.field][col.aggregateType] | number: '1.2-2' }}\r\n </b>\r\n </span>\r\n </div>\r\n </ng-template>\r\n </kendo-treelist-column>\r\n <kendo-treelist-command-column *ngIf=\"!!col.command\" [title]=\"col.title || col.field\" [width]=\"col.width || 250\">\r\n <ng-template kendoTreeListCellTemplate let-cellContext=\"cellContext\">\r\n <div [ngClass]=\"col.class\">\r\n <button *ngFor=\"let col2 of col.command; index as i\" type=\"button\" [kendoTreeListEditCommand]=\"cellContext\"\r\n [title]=\"col2.text\" (click)=\"buttonClick(col2, cellContext)\"\r\n [hidden]=\"isButtonHidden(col2, cellContext)\">\r\n <fa-icon [icon]=\"col2.icon\" [style.color]=\"(!!col2.color ? [col2.color] : 'black')\">\r\n </fa-icon>\r\n <div *ngIf=\"col2.ShowLabel === undefined || col2.ShowLabel\">{{col2.text}}</div>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </kendo-treelist-command-column>\r\n </ng-container>\r\n\r\n <!-- <kendo-treelist-command-column width=\"140\">\r\n <ng-template kendoTreeListCellTemplate let-isNew=\"isNew\" let-cellContext=\"cellContext\">\r\n <button [kendoTreeListAddCommand]=\"cellContext\"\r\n icon=\"filter-add-expression\" title=\"Add Child\">\r\n </button>\r\n <button [kendoTreeListCancelCommand]=\"cellContext\"\r\n icon=\"cancel\" title=\"{{ isNew ? 'Discard changes' : 'Cancel' }}\">\r\n </button>\r\n </ng-template>\r\n </kendo-treelist-command-column> -->\r\n </kendo-treelist>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-treelist .k-grid-content{white-space:nowrap}:host ::ng-deep kendo-treelist .k-toolbar{background-color:#e3ecf8}:host ::ng-deep kendo-treelist .k-grid-header,:host ::ng-deep kendo-treelist .k-grouping-header,:host ::ng-deep kendo-treelist .k-grid-add-row,:host ::ng-deep kendo-treelist .k-grid-footer{background-color:#e3ecf8;font-weight:600}:host ::ng-deep kendo-treelist .k-grid-header{background-color:#e3ecf8;font-weight:600}:host ::ng-deep kendo-treelist .k-button{border-radius:5px;box-shadow:0 2px 2px #0000001a;background-color:#c9daf2}:host ::ng-deep kendo-treelist .k-grid-header .k-grid-filter:hover,:host ::ng-deep kendo-treelist .k-grid-header .k-header-column-menu:hover,:host ::ng-deep kendo-treelist .k-grid-header .k-hierarchy-cell .k-icon:hover{background-color:#c9daf2}:host ::ng-deep kendo-treelist .k-grid .k-grid-filter,:host ::ng-deep kendo-treelist .k-grid .k-header-column-menu,:host ::ng-deep kendo-treelist .k-grid .k-hierarchy-cell .k-icon{color:#132842}:host ::ng-deep kendo-treelist .k-dropdown .k-dropdown-wrap,:host ::ng-deep kendo-treelist .k-dropdowntree .k-dropdown-wrap{border-radius:2px;background-color:#d6e0ef80}:host ::ng-deep kendo-treelist tr.k-alt{background-color:#e8eef680}:host ::ng-deep kendo-treelist tbody tr:hover,:host ::ng-deep kendo-treelist tbody tr.k-state-hover{background-color:#d6e0ef80}:host ::ng-deep kendo-treelist .k-pager-wrap{background-color:#e3ecf8}:host ::ng-deep kendo-treelist .k-pager-numbers .k-link.k-state-selected{color:#ff5e5b;background-color:#ff5e5b66}:host ::ng-deep kendo-treelist .k-pager-numbers .k-link:hover,:host ::ng-deep kendo-treelist .k-pager-numbers .k-link.k-state-hover{color:#ff5e5b;background-color:#ff5e5b26}.cellWrapText .gridCell{white-space:pre-line!important}.treelistTitle{margin:20px 10px 5px;font-size:18px;font-weight:700}.rightAligned{text-align:right;display:table!important;margin:0 0 0 auto!important}.centerAligned{text-align:center;display:table!important;margin:0 auto!important}.k-i-loading{position:absolute;top:100px;left:0;right:0;bottom:0;font-size:45px;background-color:#ffffff4d;color:#0f4800}\n"], components: [{ type: i3.TreeListComponent, selector: "kendo-treelist", inputs: ["pageSize", "scrollable", "trackBy", "virtualColumns", "filterable", "sortable", "pageable", "navigable", "autoSize", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "skip", "data", "sort", "navigatable", "rowClass", "idField", "selectable", "isSelected", "columns", "fetchChildren", "hasChildren", "isExpanded", "aria-label", "height", "rowHeight", "filter"], outputs: ["selectionChange", "filterChange", "pageChange", "sortChange", "dataStateChange", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "scrollBottom", "contentScroll", "expand", "collapse", "expandStateChange"], exportAs: ["kendoTreeList"] }, { type: i3.ColumnComponent, selector: "kendo-treelist-column", inputs: ["sortable", "editor", "filter", "filterable", "editable", "expandable", "field", "format"] }, { type: i3.NumericFilterCellComponent, selector: "kendo-treelist-numeric-filter-cell", inputs: ["filterDelay", "showOperators"] }, { type: i4.EqualFilterOperatorComponent, selector: "kendo-filter-eq-operator" }, { type: i4.NotEqualFilterOperatorComponent, selector: "kendo-filter-neq-operator" }, { type: i4.LessFilterOperatorComponent, selector: "kendo-filter-lt-operator" }, { type: i4.LessOrEqualToFilterOperatorComponent, selector: "kendo-filter-lte-operator" }, { type: i4.GreaterFilterOperatorComponent, selector: "kendo-filter-gt-operator" }, { type: i4.GreaterOrEqualToFilterOperatorComponent, selector: "kendo-filter-gte-operator" }, { type: i4.IsNullFilterOperatorComponent, selector: "kendo-filter-isnull-operator" }, { type: i4.IsNotNullFilterOperatorComponent, selector: "kendo-filter-isnotnull-operator" }, { type: i5.DateRangeFilterCellComponent, selector: "date-range-filter-cell", inputs: ["filter", "field"] }, { type: i3.LessFilterOperatorComponent, selector: "kendo-treelist-filter-lt-operator" }, { type: i3.LessOrEqualToFilterOperatorComponent, selector: "kendo-treelist-filter-lte-operator" }, { type: i3.GreaterFilterOperatorComponent, selector: "kendo-treelist-filter-gt-operator" }, { type: i3.GreaterOrEqualToFilterOperatorComponent, selector: "kendo-treelist-filter-gte-operator" }, { type: i3.IsNullFilterOperatorComponent, selector: "kendo-treelist-filter-isnull-operator" }, { type: i3.IsNotNullFilterOperatorComponent, selector: "kendo-treelist-filter-isnotnull-operator" }, { type: i3.DateFilterCellComponent, selector: "kendo-treelist-date-filter-cell", inputs: ["showOperators"] }, { type: i3.StringFilterCellComponent, selector: "kendo-treelist-string-filter-cell", inputs: ["filterDelay", "showOperators"] }, { type: i3.ContainsFilterOperatorComponent, selector: "kendo-treelist-filter-contains-operator" }, { type: i3.EqualFilterOperatorComponent, selector: "kendo-treelist-filter-eq-operator" }, { type: i3.NotEqualFilterOperatorComponent, selector: "kendo-treelist-filter-neq-operator" }, { type: i3.StartsWithFilterOperatorComponent, selector: "kendo-treelist-filter-startswith-operator" }, { type: i3.EndsWithFilterOperatorComponent, selector: "kendo-treelist-filter-endswith-operator" }, { type: i6.ZcheckboxComponent, selector: "app-zcheckbox", inputs: ["data", "group", "form"] }, { type: i7.ZselectmultipleComponent, selector: "app-zselectmultiple", inputs: ["data", "group", "form", "iconList", "buttonList"] }, { type: i8.ZtextareaComponent, selector: "app-ztextarea", inputs: ["data", "group", "form"] }, { type: i9.ZdatetimeComponent, selector: "app-zdatetime", inputs: ["data", "group", "form"] }, { type: i10.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i11.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i3.CommandColumnComponent, selector: "kendo-treelist-command-column" }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.ExpandableDirective, selector: "[kendoTreeListExpandable]", inputs: ["initiallyExpanded", "expandedKeys", "expandBy"], outputs: ["expandedKeysChange"], exportAs: ["kendoTreeListExpandable"] }, { type: i3.FlatBindingDirective, selector: "[kendoTreeListFlatBinding]", inputs: ["parentIdField", "idField", "kendoTreeListFlatBinding"], exportAs: ["kendoTreeListFlatBinding"] }, { type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i12.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i3.FilterCellTemplateDirective, selector: "[kendoTreeListFilterCellTemplate]" }, { type: i12.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i3.CellTemplateDirective, selector: "[kendoTreeListCellTemplate]" }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.FooterTemplateDirective, selector: "[kendoTreeListFooterTemplate]" }, { type: i3.FocusableDirective, selector: "[kendoTreeListFocusable], [kendoTreeListAddCommand], [kendoTreeListEditCommand], [kendoTreeListRemoveCommand], [kendoTreeListSaveCommand], [kendoTreeListCancelCommand] ", inputs: ["kendoTreeListAddCommand", "kendoTreeListFocusable", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: i3.EditCommandDirective, selector: "[kendoTreeListEditCommand]", inputs: ["kendoTreeListEditCommand"] }], pipes: { "date": i12.DatePipe, "number": i12.DecimalPipe, "titlecase": i12.TitleCasePipe } });
|
|
534
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZtreelistComponent, decorators: [{
|
|
535
535
|
type: Component,
|
|
536
536
|
args: [{ selector: "app-ztreelist", template: "<div *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\" style=\"margin: 10px 0 6px 0;\">\r\n <div *ngIf=\"data.Title\" class=\"treelistTitle\">{{data.Title}}</div>\r\n <kendo-treelist [kendoTreeListFlatBinding]=\"dataSource\" [ngStyle]=\"getGridStyle()\" [idField]=\"options.idField\" [parentIdField]=\"options.parentIdField\"\r\n (cellClick)=\"cellClickHandler($event)\"\r\n [sortable]=\"options.sortable\"\r\n [resizable]=\"options.resizable\"\r\n [filterable]=\"false\"\r\n [reorderable]=\"false\"\r\n [columnMenu]=\"options.columnMenu\"\r\n [scrollable]=\"options.scrollable\"\r\n [aggregate]=\"options.aggregate\"\r\n [pageable]=\"options.pageAble\"\r\n [pageSize]=\"data.PageSize\"\r\n [initiallyExpanded]=\"data.DefaultCollapse === false\"\r\n (filterChange)=\"onFilterChange($event)\"\r\n kendoTreeListExpandable\r\n treelist>\r\n\r\n <!--\r\n [filterable]=\"options.filterable\"\r\n [reorderable]=\"options.resizable\"\r\n -->\r\n <ng-container *ngFor=\"let col of options.columns; index as i\">\r\n <kendo-treelist-column *ngIf=\"!col.command\"\r\n [class]=\"col.class\"\r\n [expandable]=\"i===0\"\r\n [field]=\"col.field\"\r\n [title]=\"col.title || col.field\"\r\n [width]=\"col.width || 250\"\r\n [filterable]=\"filterable(col.enableFiltering)\"\r\n [sortable]=\"sortable(col.enableSorting)\"\r\n [hidden]=\"!isColumnsVisible(col.visible)\">\r\n <div [ngSwitch]=\"true\">\r\n <div *ngSwitchCase=\"col.fieldType === 'number'\r\n || col.fieldType === 'currency'\r\n || col.fieldType === 'znumeric'\">\r\n <ng-template kendoTreeListFilterCellTemplate let-filter let-column=\"column\">\r\n <kendo-treelist-numeric-filter-cell [column]=\"column\" [filter]=\"filter\" operator=\"eq\">\r\n <kendo-filter-eq-operator></kendo-filter-eq-operator>\r\n <kendo-filter-neq-operator></kendo-filter-neq-operator>\r\n <kendo-filter-lt-operator></kendo-filter-lt-operator>\r\n <kendo-filter-lte-operator></kendo-filter-lte-operator>\r\n <kendo-filter-gt-operator></kendo-filter-gt-operator>\r\n <kendo-filter-gte-operator></kendo-filter-gte-operator>\r\n <kendo-filter-isnull-operator></kendo-filter-isnull-operator>\r\n <kendo-filter-isnotnull-operator></kendo-filter-isnotnull-operator>\r\n </kendo-treelist-numeric-filter-cell>\r\n </ng-template>\r\n </div>\r\n <div *ngSwitchCase=\"col.fieldType == 'zdate'\r\n || col.fieldType === 'zdatetime'\r\n || col.fieldType === 'zuidatetime'\">\r\n <div *ngIf=\"col.filterByDateRange === true\">\r\n <ng-template kendoTreeListFilterCellTemplate let-filter let-column=\"column\" operator=\"lte\">\r\n <date-range-filter-cell class=\"date-range-filter\"\r\n [filter]=\"filter\"\r\n [field]=\"col.field\">\r\n <kendo-treelist-filter-lt-operator></kendo-treelist-filter-lt-operator>\r\n <kendo-treelist-filter-lte-operator></kendo-treelist-filter-lte-operator>\r\n <kendo-treelist-filter-gt-operator></kendo-treelist-filter-gt-operator>\r\n <kendo-treelist-filter-gte-operator></kendo-treelist-filter-gte-operator>\r\n <kendo-treelist-filter-isnull-operator></kendo-treelist-filter-isnull-operator>\r\n <kendo-treelist-filter-isnotnull-operator></kendo-treelist-filter-isnotnull-operator>\r\n </date-range-filter-cell>\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"col.filterByDateRange === false\">\r\n <ng-template kendoTreeListFilterCellTemplate let-filter let-column=\"column\">\r\n <kendo-treelist-date-filter-cell [column]=\"column\" [filter]=\"filter\" operator=\"lte\">\r\n <kendo-treelist-filter-lt-operator></kendo-treelist-filter-lt-operator>\r\n <kendo-treelist-filter-lte-operator></kendo-treelist-filter-lte-operator>\r\n <kendo-treelist-filter-gt-operator></kendo-treelist-filter-gt-operator>\r\n <kendo-treelist-filter-gte-operator></kendo-treelist-filter-gte-operator>\r\n <kendo-treelist-filter-isnull-operator></kendo-treelist-filter-isnull-operator>\r\n <kendo-treelist-filter-isnotnull-operator></kendo-treelist-filter-isnotnull-operator>\r\n </kendo-treelist-date-filter-cell>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div *ngSwitchDefault>\r\n <ng-template kendoTreeListFilterCellTemplate let-filter let-column=\"column\">\r\n <kendo-treelist-string-filter-cell [column]=\"column\" [filter]=\"filter\" operator=\"contains\">\r\n <kendo-treelist-filter-contains-operator></kendo-treelist-filter-contains-operator>\r\n <kendo-treelist-filter-eq-operator></kendo-treelist-filter-eq-operator>\r\n <kendo-treelist-filter-neq-operator></kendo-treelist-filter-neq-operator>\r\n <kendo-treelist-filter-startswith-operator></kendo-treelist-filter-startswith-operator>\r\n <kendo-treelist-filter-endswith-operator></kendo-treelist-filter-endswith-operator>\r\n <kendo-treelist-filter-isnull-operator></kendo-treelist-filter-isnull-operator>\r\n <kendo-treelist-filter-isnotnull-operator></kendo-treelist-filter-isnotnull-operator>\r\n </kendo-treelist-string-filter-cell>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <ng-template kendoTreeListCellTemplate let-dataItem let-rowIndex=\"rowIndex\" let-cellContext=\"cellContext\">\r\n <div style=\"margin: 7px 0;display: inline;\" [style.color]=\"(!!dataItem.Color ? [dataItem.Color] : 'black')\" *ngIf=\"!col.navigateTo && col.isEditableInGrid !== true\" [ngSwitch]=\"col.fieldType\" [ngClass]=\"getColClass(dataItem, col)\">\r\n <span *ngSwitchCase=\"'zdate'\">\r\n {{ dataItem[col.field] | date: 'dd/MM/yyyy' }}\r\n </span>\r\n <span *ngSwitchCase=\"'zshortdate'\">\r\n {{ dataItem[col.field] | date: 'MMM yyyy' }}\r\n </span>\r\n <span *ngSwitchCase=\"'zdatetime'\">\r\n {{ dataItem[col.field] | date: 'dd/MM/yyyy hh:mm:ss aa' }}\r\n </span>\r\n <span *ngSwitchCase=\"'zuidatetime'\">\r\n {{ dataItem[col.field] | date: 'dd/MM/yyyy hh:mm:ss aa' }}\r\n </span>\r\n <span *ngSwitchCase=\"'number'\">\r\n <div style=\"text-align:right;\">{{ dataItem[col.field] | number }} </div>\r\n </span>\r\n <span *ngSwitchCase=\"'currency'\">\r\n <div style=\"text-align:right;\">{{ dataItem[col.field] | number: '1.2-2' }}</div>\r\n </span>\r\n <span *ngSwitchCase=\"'znumeric'\">\r\n <div style=\"text-align:right;\">{{ dataItem[col.field] | number: getFormat(col) }}</div>\r\n </span>\r\n <span *ngSwitchCase=\"'url'\" style=\"color: blue; cursor: pointer; text-decoration:underline;\">\r\n {{ dataItem[col.field] }}\r\n </span>\r\n <span *ngSwitchDefault>\r\n {{ dataItem[col.field]}}\r\n </span>\r\n </div>\r\n <div style=\"margin: 7px 0;display: inline;\" [style.color]=\"(!!dataItem.Color ? [dataItem.Color] : 'black')\" *ngIf=\"!col.navigateTo && col.isEditableInGrid === true && isInlineEditColVisible(dataItem, col)\" [ngSwitch]=\"col.fieldType\" [ngClass]=\"getColClass(dataItem, col)\">\r\n <span *ngSwitchCase=\"'checkbox'\">\r\n <app-zcheckbox style=\"width: 100%;\" [data]=\"getInlineField(col.Value)\" [group]=\"group\" [form]=\"getInlineForm(dataItem)\" (click)=\"buttonClick(col, cellContext)\"></app-zcheckbox>\r\n </span>\r\n <span *ngSwitchCase=\"'zuiselectmultiple'\">\r\n <app-zselectmultiple style=\"width: 100%;\" [data]=\"getInlineField(col.field)\" [group]=\"group\" [form]=\"getInlineForm(dataItem)\"></app-zselectmultiple>\r\n </span>\r\n <span *ngSwitchCase=\"'textarea'\">\r\n <app-ztextarea style=\"width: 100%;\" [data]=\"getInlineField(col.Value)\" [group]=\"group\" [form]=\"getInlineForm(dataItem)\"></app-ztextarea>\r\n </span>\r\n <span *ngSwitchCase=\"['zuidatetime','zdate','zdatetime','zshortdate'].includes(col.fieldType) ? col.fieldType : ''\">\r\n <app-zdatetime style=\"width: 100%;\" [data]=\"getInlineField(col.Value)\" [group]=\"group\" [form]=\"getInlineForm(dataItem)\"></app-zdatetime>\r\n </span>\r\n </div>\r\n <span *ngIf=\"!!col.navigateTo\" (click)=\"onNavigateTo($event, col, dataItem, dataItem[col.field])\">\r\n <ion-button color=\"light\" size=\"small\">\r\n {{ dataItem[col.field] }}\r\n <!-- <ion-icon slot= \"end\" name=\"arrow-forward\"></ion-icon> -->\r\n <fa-icon slot=\"end\" [icon]=\"'arrow-right'\"></fa-icon>\r\n </ion-button>\r\n </span> \r\n </ng-template>\r\n <ng-template *ngIf=\"col.footerTemplate\" kendoTreeListFooterTemplate let-aggregates=\"aggregates\">\r\n <div *ngIf=\"!col.navigateTo\" [ngSwitch]=\"col.fieldType\" [ngClass]=\"{'rightAligned': col.fieldType === 'number' || col.fieldType === 'currency'}\">\r\n <span *ngSwitchCase=\"'number'\">\r\n <b>\r\n {{ col.aggregateTitle | titlecase }} {{ aggregates[col.field][col.aggregateType] | number }}\r\n </b>\r\n </span>\r\n <span *ngSwitchCase=\"'currency'\">\r\n <b>\r\n {{ col.aggregateTitle | titlecase }} {{ aggregates[col.field][col.aggregateType] | number: '1.2-2' }}\r\n </b>\r\n </span>\r\n </div>\r\n </ng-template>\r\n </kendo-treelist-column>\r\n <kendo-treelist-command-column *ngIf=\"!!col.command\" [title]=\"col.title || col.field\" [width]=\"col.width || 250\">\r\n <ng-template kendoTreeListCellTemplate let-cellContext=\"cellContext\">\r\n <div [ngClass]=\"col.class\">\r\n <button *ngFor=\"let col2 of col.command; index as i\" type=\"button\" [kendoTreeListEditCommand]=\"cellContext\"\r\n [title]=\"col2.text\" (click)=\"buttonClick(col2, cellContext)\"\r\n [hidden]=\"isButtonHidden(col2, cellContext)\">\r\n <fa-icon [icon]=\"col2.icon\" [style.color]=\"(!!col2.color ? [col2.color] : 'black')\">\r\n </fa-icon>\r\n <div *ngIf=\"col2.ShowLabel === undefined || col2.ShowLabel\">{{col2.text}}</div>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </kendo-treelist-command-column>\r\n </ng-container>\r\n\r\n <!-- <kendo-treelist-command-column width=\"140\">\r\n <ng-template kendoTreeListCellTemplate let-isNew=\"isNew\" let-cellContext=\"cellContext\">\r\n <button [kendoTreeListAddCommand]=\"cellContext\"\r\n icon=\"filter-add-expression\" title=\"Add Child\">\r\n </button>\r\n <button [kendoTreeListCancelCommand]=\"cellContext\"\r\n icon=\"cancel\" title=\"{{ isNew ? 'Discard changes' : 'Cancel' }}\">\r\n </button>\r\n </ng-template>\r\n </kendo-treelist-command-column> -->\r\n </kendo-treelist>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-treelist .k-grid-content{white-space:nowrap}:host ::ng-deep kendo-treelist .k-toolbar{background-color:#e3ecf8}:host ::ng-deep kendo-treelist .k-grid-header,:host ::ng-deep kendo-treelist .k-grouping-header,:host ::ng-deep kendo-treelist .k-grid-add-row,:host ::ng-deep kendo-treelist .k-grid-footer{background-color:#e3ecf8;font-weight:600}:host ::ng-deep kendo-treelist .k-grid-header{background-color:#e3ecf8;font-weight:600}:host ::ng-deep kendo-treelist .k-button{border-radius:5px;box-shadow:0 2px 2px #0000001a;background-color:#c9daf2}:host ::ng-deep kendo-treelist .k-grid-header .k-grid-filter:hover,:host ::ng-deep kendo-treelist .k-grid-header .k-header-column-menu:hover,:host ::ng-deep kendo-treelist .k-grid-header .k-hierarchy-cell .k-icon:hover{background-color:#c9daf2}:host ::ng-deep kendo-treelist .k-grid .k-grid-filter,:host ::ng-deep kendo-treelist .k-grid .k-header-column-menu,:host ::ng-deep kendo-treelist .k-grid .k-hierarchy-cell .k-icon{color:#132842}:host ::ng-deep kendo-treelist .k-dropdown .k-dropdown-wrap,:host ::ng-deep kendo-treelist .k-dropdowntree .k-dropdown-wrap{border-radius:2px;background-color:#d6e0ef80}:host ::ng-deep kendo-treelist tr.k-alt{background-color:#e8eef680}:host ::ng-deep kendo-treelist tbody tr:hover,:host ::ng-deep kendo-treelist tbody tr.k-state-hover{background-color:#d6e0ef80}:host ::ng-deep kendo-treelist .k-pager-wrap{background-color:#e3ecf8}:host ::ng-deep kendo-treelist .k-pager-numbers .k-link.k-state-selected{color:#ff5e5b;background-color:#ff5e5b66}:host ::ng-deep kendo-treelist .k-pager-numbers .k-link:hover,:host ::ng-deep kendo-treelist .k-pager-numbers .k-link.k-state-hover{color:#ff5e5b;background-color:#ff5e5b26}.cellWrapText .gridCell{white-space:pre-line!important}.treelistTitle{margin:20px 10px 5px;font-size:18px;font-weight:700}.rightAligned{text-align:right;display:table!important;margin:0 0 0 auto!important}.centerAligned{text-align:center;display:table!important;margin:0 auto!important}.k-i-loading{position:absolute;top:100px;left:0;right:0;bottom:0;font-size:45px;background-color:#ffffff4d;color:#0f4800}\n"] }]
|
|
537
537
|
}], ctorParameters: function () { return [{ type: i1.FieldService }, { type: i1.WebApiService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i1.AuthService }]; }, propDecorators: { data: [{
|
|
@@ -541,4 +541,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImpor
|
|
|
541
541
|
}], form: [{
|
|
542
542
|
type: Input
|
|
543
543
|
}] } });
|
|
544
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRyZWVsaXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3p0cmVlbGlzdC96dHJlZWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWVsaXN0L3p0cmVlbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHcEUsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBNEIsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHaEQsMkNBQTJDO0FBQzNDLE9BQU8sRUFDTyxnQkFBZ0IsRUFDWixvQkFBb0IsRUFFckMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFrQnpCLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsWUFDUyxRQUFrQixFQUNsQixTQUFtQixFQUNuQixVQUFvQixFQUNwQixXQUFxQixFQUNyQixVQUFvQixFQUNwQixVQUFvQixFQUNwQixPQUFpQixFQUNqQixRQUFrQixFQUNsQixVQUFtQixFQUNuQixTQUFlLEVBQ2YsT0FBZ0IsRUFDaEIsYUFBc0IsRUFDdEIsT0FBb0IsRUFDcEIsU0FBZSxFQUNmLFFBQWM7UUFkZCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsZUFBVSxHQUFWLFVB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TyxJQUFJLENBQUM7WUFDZCxLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxLQUFLLENBQUM7WUFDZixLQUFLLElBQUk7Z0JBQ1AsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxLQUFLLENBQUM7WUFDZixLQUFLLElBQUk7Z0JBQ1AsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxLQUFLLENBQUM7WUFDZixLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxZQUFZLENBQUM7WUFDdEIsS0FBSyxVQUFVO2dCQUNiLE9BQU8sVUFBVSxDQUFDO1lBQ3BCLEtBQUssUUFBUTtnQkFDWCxPQUFPLFFBQVEsQ0FBQztZQUNsQixLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxXQUFXLENBQUM7WUFDckI7Z0JBQ0UsT0FBTyxJQUFJLENBQUM7WUFDZCxtREFBbUQ7U0FDcEQ7SUFDSCxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQVU7UUFDMUIsSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFO1lBQ25CLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBVTtRQUN4QixJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUU7WUFDbkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7K0dBaGtCVSxrQkFBa0I7bUdBQWxCLGtCQUFrQiw2R0M1RC9CLDRnWUEyTEE7MkZEL0hhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxlQUFlOzJNQUtoQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkRlc3Ryb3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBvZiwgZm9ya0pvaW4sIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ2VsbENsaWNrRXZlbnQgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10cmVlbGlzdCc7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7XHJcbiAgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LFxyXG4gIFpGaWVsZCwgWkdyb3VwLCBaQ29tcG9uZW50UHJvcGVydGllcywgRmllbGRTZXJ2aWNlLFxyXG4gIFdlYkFwaVNlcnZpY2UsIEF1dGhTZXJ2aWNlXHJcbn0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgWlRyZWVMaXN0Q29sdW1uIHtcclxuICBmaWVsZDogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgd2lkdGg6IG51bWJlcjtcclxuICB2aXNpYmxlOiBib29sZWFuIHwgYW55O1xyXG4gIGZpZWxkVHlwZTogc3RyaW5nO1xyXG4gIG5hdmlnYXRlVG86IHN0cmluZztcclxuICBjb21tYW5kOiBhbnk7XHJcbiAgY2xhc3M6IGFueTtcclxuICBmb290ZXJUZW1wbGF0ZTogYm9vbGVhbjtcclxuICBhZ2dyZWdhdGVUeXBlOiBzdHJpbmc7XHJcbiAgYWdncmVnYXRlVGl0bGU6IHN0cmluZztcclxuICBpY29uT25seT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBaVHJlZUxpc3RPcHRpb25zIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBzb3J0YWJsZT86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgcmVzaXphYmxlPzogYm9vbGVhbixcclxuICAgIHB1YmxpYyBmaWx0ZXJhYmxlPzogYm9vbGVhbixcclxuICAgIHB1YmxpYyByZW9yZGVyYWJsZT86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgY29sdW1uTWVudT86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgc2Nyb2xsYWJsZT86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgcmVmcmVzaD86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgYXV0b0JpbmQ/OiBib29sZWFuLFxyXG4gICAgcHVibGljIGRhdGFTb3VyY2U/OiBzdHJpbmcsXHJcbiAgICBwdWJsaWMgZGF0YUJvdW5kPzogYW55LFxyXG4gICAgcHVibGljIGlkRmllbGQ/OiBzdHJpbmcsXHJcbiAgICBwdWJsaWMgcGFyZW50SWRGaWVsZD86IHN0cmluZyxcclxuICAgIHB1YmxpYyBjb2x1bW5zPzogQXJyYXk8YW55PixcclxuICAgIHB1YmxpYyBhZ2dyZWdhdGU/OiBhbnksXHJcbiAgICBwdWJsaWMgcGFnZUFibGU/OiBhbnksXHJcbiAgKSB7IH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXp0cmVlbGlzdFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4venRyZWVsaXN0LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3p0cmVlbGlzdC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFp0cmVlbGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBkYXRhOiBaRmllbGQ7XHJcbiAgQElucHV0KCkgZ3JvdXA6IFpHcm91cDtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgLy8gQFZpZXdDaGlsZChaVHJlZUxpc3RCaW5kaW5nRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UgfSkgenRyZWVsaXN0OiBaVHJlZUxpc3RCaW5kaW5nRGlyZWN0aXZlO1xyXG4gIHp0cmVlbGlzdDogYW55ID0gbnVsbDtcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBkYXRhU291cmNlOiBzdHJpbmc7XHJcbiAgaWRGaWVsZCA9IFwiSWRcIjtcclxuICBwYXJlbnRJZEZpZWxkID0gXCJQYXJlbnRJZFwiO1xyXG4gIG9wdGlvbnM6IFpUcmVlTGlzdE9wdGlvbnMgPSBuZXcgWlRyZWVMaXN0T3B0aW9ucygpO1xyXG4gIGNvbXBvbmVudFByb3BlcnRpZXMgPSBuZXcgWkNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuICBmaWVsZGdyaWRDb2xWaXNpYmxlOiBhbnlbXTtcclxuICBwYWdlU2l6ZSA9IDIwO1xyXG4gIGlubGluZUVkaXRlZEZvcm1Hcm91cHM6IEFycmF5PGFueT4gPSBbXTtcclxuICBpc0xvYWRpbmc6IGJvb2xlYW47XHJcbiAgdHJlZWxpc3RTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgLy8gdHJlZWxpc3RTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgLy8gc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgLy8genRyZWVsaXN0OiBhbnkgPSBudWxsO1xyXG4gIC8vIGNvbHVtbnM6IGFueVtdO1xyXG5cclxuICBwcml2YXRlIHdpZHRoUmVkdWNlOiBudW1iZXI7XHJcblxyXG4gIHByaXZhdGUgaGVpZ2h0UmVkdWNlOiBudW1iZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmaWVsZFNlcnZpY2U6IEZpZWxkU2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViYXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlKSB7IH1cclxuICAvLyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgLy8gICAvLyB0aGlzLnp0cmVlbGlzdC5zZXRPcHRpb25zKHtkYXRhOiB0aGlzLmRhdGEsIGdyb3VwOiB0aGlzLmdyb3VwfSk7XHJcbiAgLy8gfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0Q29tcG9uZW50UHJvcGVydGllcyh0aGlzKTtcclxuICAgIFpDb21wb25lbnRIZWxwZXIucmVnaXN0ZXJDb21wb25lbnQodGhpcyk7XHJcblxyXG4gICAgdGhpcy53aWR0aFJlZHVjZSA9IHRoaXMuZGF0YS5XaWR0aFJlZHVjZSB8fCA2MDtcclxuICAgIHRoaXMuaGVpZ2h0UmVkdWNlID0gdGhpcy5kYXRhLkhlaWdodFJlZHVjZSB8fCA1NjA7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5kYXRhLlBhZ2VTaXplIHx8IDIwO1xyXG4gICAgaWYgKCEhdGhpcy5kYXRhLk9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5zZXRMb2NhbE9wdGlvbnMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRFbGVtZW50T3B0aW9ucygpO1xyXG4gICAgfVxyXG4gICAgIFxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAvLyBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgIC8vICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGdldEdyaWRTdHlsZSgpIHtcclxuICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgXCJoZWlnaHQucHhcIjogdGhpcy5nZXRHcmlkSGVpZ2h0KCksIC8vIHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMuaGVpZ2h0UmVkdWNlLCAvLyA0NTAsXHJcbiAgICAgIFwid2lkdGgucHhcIjogd2luZG93LmlubmVyV2lkdGggLSB0aGlzLndpZHRoUmVkdWNlLFxyXG4gICAgfTsgLy8gXCJ3aWR0aC5weFwiOiB0aGlzLmlubmVyV2lkdGggLSAzNVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRHcmlkSGVpZ2h0KCkge1xyXG4gICAgY29uc3QgaCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMuaGVpZ2h0UmVkdWNlO1xyXG4gICAgcmV0dXJuIGggPCAxODAgPyAxODAgOiBoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEVuYWJsZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IGZjID0gdGhpcy5ncm91cC5mb3JtLmNvbnRyb2xzW3RoaXMuZGF0YS5WYWx1ZV07XHJcbiAgICBzdGF0dXMgPyBmYy5lbmFibGUoKSA6IGZjLmRpc2FibGUoKTtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5ID0gIXN0YXR1cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWaXNpYmxlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSA9IHN0YXR1cztcclxuICAgIHRoaXMuZGF0YS5WaXNpYmxlID0gc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFJlcXVpcmUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZXF1aXJlZCA9IHN0YXR1cztcclxuICAgIFpDb21wb25lbnRIZWxwZXIuY2hhbmdlVmFsaWRhdG9yKHN0YXR1cywgdGhpcy5ncm91cCwgdGhpcy5kYXRhLlZhbHVlLCB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERhdGEgPSAoZ0RhdGE6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5kYXRhU291cmNlID0gZ0RhdGE7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sc0ZvcklubGluZUVkaXQoZ0RhdGEpO1xyXG4gICAgaWYgKGdEYXRhICYmIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyAmJiB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBnRGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZnVmFsID0gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzLmZpbmQoaSA9PiBpW3RoaXMuaWRGaWVsZF0gPT09IGRhdGFbdGhpcy5pZEZpZWxkXSk7XHJcbiAgICAgICAgY29uc3QgZmcgPSBmZ1ZhbC5GZztcclxuICAgICAgICBpZiAoZmdWYWwgJiYgZmcpIHtcclxuICAgICAgICAgIGNvbnN0IGtlID0gT2JqZWN0LmtleXMoZmcuY29udHJvbHMpO1xyXG4gICAgICAgICAgT2JqZWN0LmtleXMoZmcuY29udHJvbHMpLmZvckVhY2goayA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZjID0gZmcuY29udHJvbHNba107XHJcbiAgICAgICAgICAgIGlmIChmYykge1xyXG4gICAgICAgICAgICAgIGZjLnNldFZhbHVlKGRhdGFba10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzQnV0dG9uSGlkZGVuKGNvbDogYW55LCBjZWxsQ29udGFpbjogYW55KSB7XHJcbiAgICBpZiAoY29sLnZpc2libGUpIHtcclxuICAgICAgcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBjb2wudmlzaWJsZSwgY2VsbENvbnRhaW4udmlld0l0ZW0uZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjb2wuaGlkZGVuUGFyYW0gfHwgY29sLmhpZGRlblZhbHVlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNlbGxDb250YWluLnZpZXdJdGVtLmRhdGFbY29sLmhpZGRlblBhcmFtXSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2VsbENvbnRhaW4udmlld0l0ZW0uZGF0YVtjb2wuaGlkZGVuUGFyYW1dID09PSBjb2wuaGlkZGVuVmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2UgeyByZXR1cm4gZmFsc2U7IH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBidXR0b25DbGljayhidXR0b246IGFueSwgY2VsbENvbnRleHQ6IGFueSkge1xyXG4gICAgaWYgKGJ1dHRvbi5lZGl0KSB7XHJcbiAgICAgIGJ1dHRvbi5lZGl0KGNlbGxDb250ZXh0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiBcImJ1dHRvbkNsaWNrXCIsXHJcbiAgICAgICAgdGFyZ2V0OiBidXR0b24uQ2xpY2tFdmVudCxcclxuICAgICAgICBkYXRhOiBjZWxsQ29udGV4dFxyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25OYXZpZ2F0ZVRvKGV2ZW50OiBhbnksIGNvbFNldHRpbmc6IGFueSwgcm93RGF0YTogYW55LCBjZWxsRGF0YTogc3RyaW5nKSB7XHJcbiAgICAvLyBkZWJ1Z2dlcjtcclxuICAgIC8vIGNvbnN0IG4gPSBjb2xTZXR0aW5nLm5hdmlnYXRlVG8ucmVwbGFjZSgnLzppZCcsIGNlbGxEYXRhKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICB0eXBlOiAnemdyaWQtb25OYXZpZ2F0ZVRvJyxcclxuICAgICAgdGFyZ2V0OiBjb2xTZXR0aW5nLm5hdmlnYXRlVG8sXHJcbiAgICAgIGRhdGE6IGNlbGxEYXRhXHJcbiAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNDb2x1bW5zVmlzaWJsZShmaWVsZEV4cHIpIHtcclxuICAgIGlmIChmaWVsZEV4cHIgIT09IGZhbHNlICYmICFmaWVsZEV4cHIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2ID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIGZpZWxkRXhwcik7XHJcbiAgICByZXR1cm4gdjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TG9jYWxPcHRpb25zKCkge1xyXG4gICAgY29uc3Qgb3B0aW9uczogWlRyZWVMaXN0T3B0aW9ucyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShcclxuICAgICAgdGhpcy5kYXRhLk9wdGlvbnMsXHJcbiAgICAgIHRoaXMuZ3JvdXBcclxuICAgICk7XHJcbiAgICBpZiAoIW9wdGlvbnMpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiTm8gaW5pdGlhbGlzZSBmb3IgRmllbGQuT3B0aW9uczogXCIsIHRoaXMuZGF0YS5PcHRpb25zKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcclxuICAgIHRoaXMub3B0aW9ucy5pZEZpZWxkID0gdGhpcy5vcHRpb25zLmlkRmllbGQgfHwgdGhpcy5pZEZpZWxkO1xyXG4gICAgdGhpcy5vcHRpb25zLnBhcmVudElkRmllbGQgPSB0aGlzLm9wdGlvbnMucGFyZW50SWRGaWVsZCB8fCB0aGlzLnBhcmVudElkRmllbGQ7XHJcblxyXG5cclxuICAgIGNvbnN0IF90cmFuc2xhdGlvbkZ1bGxMaXN0ID0gdGhpcy5hdXRoU2VydmljZS5TeXN0ZW1Mb2NhbGVUcmFuc2xhdGlvbjtcclxuICAgIC8vZGVidWdnZXI7XHJcbiAgICAvL2NvbnN0IF90cmFuc2xhdGlvbkZpbHRlcmVkTGlzdCA9IF90cmFuc2xhdGlvbkZ1bGxMaXN0ID8gX3RyYW5zbGF0aW9uRnVsbExpc3QuZmlsdGVyKHggPT4geFsnUHJvamVjdE5hbWUnXSA9PT0gcHJvamVjdE5hbWUgJiYgeFsnRWxlbWVudE5hbWUnXSA9PT0gZmllbGROYW1lKSA6IG51bGw7XHJcblxyXG5cclxuICAgIC8vaWYgKHRoaXMub3B0aW9ucy5jb2x1bW5zICYmIClcclxuICAgIC8vY29uc3QgdHJhbnNsYXRlZFRpdGxlID0gX3RyYW5zbGF0aW9uRmlsdGVyZWRMaXN0LmZpbmQoeCA9PiB4WydQaHJhc2VLZXknXSA9PT0gZmllbGQuTmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIC8vaWYgKHRyYW5zbGF0ZWRUaXRsZSkge1xyXG4gICAgLy8gIGNvbnN0IF9sYWJlbCA9IGZpZWxkLkxhYmVsLnRvU3RyaW5nKCkudHJpbSgpO1xyXG4gICAgLy99XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSAmJlxyXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmRhdGFTb3VyY2UgPT09IFwic3RyaW5nXCJcclxuICAgICkge1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRhdGFTb3VyY2Uuc3RhcnRzV2l0aChcImdyb3VwLlwiKSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSwgdGhpcy5ncm91cCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcih0aGlzLmRhdGEuTmFtZSArIFwiIC0gaGFzIGludmFsaWQgZGF0YVNvdXJjZVwiKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcih0aGlzLmRhdGEuTmFtZSArIFwiIC0gZGF0YVNvdXJjZSBwcm9wZXJ0eSBpcyBub3QgZGVjbGFyZWQuXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGaWVsZEVsZW1lbnRPcHRpb25zKCkge1xyXG4gICAgdGhpcy5vcHRpb25zLnNvcnRhYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMub3B0aW9ucy5yZXNpemFibGUgPSB0cnVlO1xyXG4gICAgdGhpcy5vcHRpb25zLmZpbHRlcmFibGUgPSB0cnVlO1xyXG4gICAgdGhpcy5vcHRpb25zLnJlc2l6YWJsZSA9IHRydWU7XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sdW1uTWVudSA9IHRoaXMuZGF0YS5EaXNhYmxlR3JpZENvbHVtbk1lbnUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICB0aGlzLm9wdGlvbnMuc2Nyb2xsYWJsZSA9IHRydWU7XHJcbiAgICB0aGlzLm9wdGlvbnMuaWRGaWVsZCA9IHRoaXMuZGF0YVtcImlkRmllbGRcIl0gfHwgdGhpcy5pZEZpZWxkO1xyXG4gICAgdGhpcy5vcHRpb25zLnBhcmVudElkRmllbGQgPSB0aGlzLmRhdGFbXCJwYXJlbnRJZEZpZWxkXCJdIHx8IHRoaXMucGFyZW50SWRGaWVsZDtcclxuICAgIHRoaXMub3B0aW9ucy5jb2x1bW5zID0gW107XHJcbiAgICB0aGlzLm9wdGlvbnMuYWdncmVnYXRlID0gW107XHJcbiAgICB0aGlzLm9wdGlvbnMucGFnZUFibGUgPSB0aGlzLmRhdGEuUGFnZVNpemUgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgbGV0IHpmaWVsZHMgPSBbXTtcclxuICAgIHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUodGhpcy5kYXRhW1wiQ29sdW1uRmllbGRDb2RlXCJdLCBcIkZvcm1GaWVsZFwiLCBudWxsLCBudWxsKS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoZmllbGRzID0+IHtcclxuICAgICAgICB6ZmllbGRzID0gZmllbGRzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnNGcm9tWkJ1dHRvbnMoZmllbGRzKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcCgoYnV0dG9ucykgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0VHJlZUxpc3RDb2x1bW5zKHpmaWVsZHMsIGJ1dHRvbnMpO1xyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhQmluZGluZygpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKGRhdGEgPT4ge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzRm9ySW5saW5lRWRpdChkYXRhKTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IGRhdGE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gY29uc3QgemJ1dHRvbkZpZWxkcyA9IFtdIGFzIEFycmF5PFpGaWVsZD47XHJcbiAgLy8gZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gIC8vICAgICBpZiAoZmllbGQuVHlwZSA9PT0gXCJ6YnV0dG9uc1wiKSB7XHJcbiAgLy8gICAgICAgICBsZXQgZmllbGRDb2xWaXNpYmxlID0gZmllbGQuZ3JpZENvbFZpc2libGU7XHJcbiAgLy8gICAgICAgICBpZiAoZmllbGQuZ3JpZENvbFZpc2libGUgJiYgZmllbGQuZ3JpZENvbFZpc2libGUudG9TdHJpbmcoKS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gIC8vICAgICAgICAgICAgIC8vIGZpZWxkLmdyaWRDb2xWaXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGZpZWxkLmdyaWRDb2xWaXNpYmxlLnRvU3RyaW5nKCksIHRoaXMuZ3JvdXApO1xyXG4gIC8vICAgICAgICAgICAgIGZpZWxkQ29sVmlzaWJsZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShmaWVsZC5ncmlkQ29sVmlzaWJsZS50b1N0cmluZygpLCB0aGlzLmdyb3VwKTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgIC8vIGlmIChmaWVsZC5ncmlkQ29sVmlzaWJsZSA9PT0gdHJ1ZSkge1xyXG4gIC8vICAgICAgICAgaWYgKGZpZWxkQ29sVmlzaWJsZSA9PT0gdHJ1ZSkge1xyXG4gIC8vICAgICAgICAgICAgIHpidXR0b25GaWVsZHMucHVzaChmaWVsZCk7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgIH1cclxuICAvLyB9KTtcclxuXHJcbiAgLy8gaWYgKHpidXR0b25GaWVsZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgLy8gICAgIHJldHVybiBvZihbXSk7XHJcbiAgLy8gfVxyXG4gIC8vIHpidXR0b25GaWVsZHMuZm9yRWFjaCh6YnV0dG9uRmllbGQgPT4ge1xyXG4gIC8vICAgICB6YnV0dG9uUmVzdWx0LnB1c2goXHJcbiAgLy8gICAgICAgICB0aGlzLmZpZWxkU2VydmljZS5nZXRGb3JtRmllbGRDb2RlKHpidXR0b25GaWVsZC5WYWx1ZSwgXCJGb3JtRmllbGRcIiwgbnVsbCwgbnVsbCkucGlwZShcclxuICAvLyAgICAgICAgICAgICBzd2l0Y2hNYXAoYnV0dG9ucyA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgICAgIHJldHVybiBvZih7IHpidXR0b25GaWVsZCwgYnV0dG9ucyB9KTtcclxuICAvLyAgICAgICAgICAgICB9KSlcclxuICAvLyAgICAgKTtcclxuICAvLyB9KTtcclxuXHJcbiAgcHJpdmF0ZSBnZXRCdXR0b25zRnJvbVpCdXR0b25zKGZpZWxkczogQXJyYXk8WkZpZWxkPik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBidXR0b25DbWQgPSBbXTtcclxuICAgIGNvbnN0IHpidXR0b25SZXN1bHQgPSBbXTtcclxuICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgaWYgKGZpZWxkLlR5cGUgPT09IFwiemJ1dHRvbnNcIiAmJiBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoZmllbGQuZ3JpZENvbFZpc2libGUgYXMgc3RyaW5nLCB0aGlzLmdyb3VwKSkge1xyXG4gICAgICAgIHpidXR0b25SZXN1bHQucHVzaChcclxuICAgICAgICAgIHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUoZmllbGQuVmFsdWUsIFwiRm9ybUZpZWxkXCIsIG51bGwsIG51bGwpLnBpcGUoXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChidXR0b25zID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gb2YoeyBmaWVsZCwgYnV0dG9ucyB9KTtcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHpidXR0b25SZXN1bHQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvcmtKb2luKHpidXR0b25SZXN1bHQpLnBpcGUoXHJcbiAgICAgIHRhcChyZXNwID0+IHtcclxuICAgICAgICByZXNwLmZvckVhY2goemJ1dHRvbnNBcnJheSA9PlxyXG4gICAgICAgICAgemJ1dHRvbnNBcnJheVtcImJ1dHRvbnNcIl0uZm9yRWFjaCgoYnV0dG9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgYnV0dG9uQ21kLnB1c2goe1xyXG4gICAgICAgICAgICAgIHpidXR0b25zTmFtZTogemJ1dHRvbnNBcnJheVtcImZpZWxkXCJdLlZhbHVlLFxyXG4gICAgICAgICAgICAgIG5hbWU6IGJ1dHRvbi5WYWx1ZSxcclxuICAgICAgICAgICAgICBjbGFzczogYnV0dG9uLkNsYXNzLFxyXG4gICAgICAgICAgICAgIHRleHQ6IGJ1dHRvbi5MYWJlbCxcclxuICAgICAgICAgICAgICBpY29uOiBidXR0b24uSWNvbixcclxuICAgICAgICAgICAgICB2aXNpYmxlOiBidXR0b24uVmlzaWJsZSxcclxuICAgICAgICAgICAgICBoaWRkZW5QYXJhbTogYnV0dG9uW1wiaGlkZGVuUGFyYW1cIl0sXHJcbiAgICAgICAgICAgICAgaGlkZGVuVmFsdWU6IGJ1dHRvbltcImhpZGRlblZhbHVlXCJdLFxyXG4gICAgICAgICAgICAgIGVkaXQ6IGJ1dHRvbi5lZGl0LFxyXG4gICAgICAgICAgICAgIENsaWNrRXZlbnQ6IGJ1dHRvbi5DbGlja0V2ZW50LFxyXG4gICAgICAgICAgICAgIFNob3dMYWJlbDogYnV0dG9uLlNob3dMYWJlbCxcclxuICAgICAgICAgICAgICBjb2xvcjogYnV0dG9uLkNvbG9yXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gb2YoYnV0dG9uQ21kKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFRyZWVMaXN0Q29sdW1ucyhmaWVsZHM6IEFycmF5PFpGaWVsZD4sIGJ1dHRvbnM6IGFueSkge1xyXG4gICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5WYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLnNldFRyZWVMaXN0Q29sdW1ucyhmaWVsZC5WYWx1ZSwgYnV0dG9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShmaWVsZC5ncmlkQ29sVmlzaWJsZSBhcyBzdHJpbmcsIHRoaXMuZ3JvdXApID09PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKGZpZWxkLlR5cGUgPT09IFwiemJ1dHRvbnNcIikge1xyXG4gICAgICAgICAgdGhpcy5pbnNlcnRDb21tYW5kKGZpZWxkLCBidXR0b25zKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGZpZWxkLkFnZ3JlZ2F0ZVR5cGUgJiYgZmllbGQuQWdncmVnYXRlVHlwZSAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBsZXQgYWdncmVnYXRldGl0bGUgPSBcIlwiO1xyXG4gICAgICAgICAgICBpZiAoZmllbGQuQWdncmVnYXRlVHlwZSA9PT0gXCJzdW1cIikge1xyXG4gICAgICAgICAgICAgIGFnZ3JlZ2F0ZXRpdGxlID0gXCJUb3RhbDogXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgYWdncmVnYXRldGl0bGUgPSBmaWVsZC5BZ2dyZWdhdGVUeXBlICsgXCI6IFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0Rm9vdGVyVGVtcGxhdGVGaWVsZChmaWVsZCwgYWdncmVnYXRldGl0bGUpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWdncmVnYXRlLnB1c2goe1xyXG4gICAgICAgICAgICAgIGZpZWxkOiBmaWVsZC5WYWx1ZSxcclxuICAgICAgICAgICAgICBhZ2dyZWdhdGU6IGZpZWxkLkFnZ3JlZ2F0ZVR5cGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmluc2VydEZpZWxkKGZpZWxkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRGaWVsZChmaWVsZDogWkZpZWxkKSB7XHJcbiAgICBsZXQgY29sVGl0bGUgPSBmaWVsZC5OYW1lO1xyXG4gICAgaWYgKGNvbFRpdGxlLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgY29sVGl0bGUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoY29sVGl0bGUudG9TdHJpbmcoKSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sdW1ucy5wdXNoKFxyXG4gICAgICBPYmplY3QuYXNzaWduKGZpZWxkLCB7XHJcbiAgICAgICAgZmllbGQ6IGZpZWxkLlZhbHVlLFxyXG4gICAgICAgIHRpdGxlOiBjb2xUaXRsZSxcclxuICAgICAgICB3aWR0aDogZmllbGQud2lkdGgsXHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBmaWVsZFR5cGU6IGZpZWxkLlR5cGUsXHJcbiAgICAgICAgbmF2aWdhdGVUbzogZmllbGQuTmF2aWdhdGVUbyxcclxuICAgICAgICBjb21tYW5kOiBudWxsLFxyXG4gICAgICAgIGNsYXNzOiBmaWVsZC5EaXZDbGFzcyxcclxuICAgICAgICBmb290ZXJUZW1wbGF0ZTogZmFsc2UsXHJcbiAgICAgICAgYWdncmVnYXRlVHlwZTogXCJcIixcclxuICAgICAgICBhZ2dyZWdhdGVUaXRsZTogXCJcIixcclxuICAgICAgICBpc0VkaXRhYmxlSW5HcmlkOiBmaWVsZC5Jc0VkaXRhYmxlSW5HcmlkXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRDb21tYW5kKGZpZWxkOiBaRmllbGQsIGJ1dHRvbnM6IGFueSkge1xyXG4gICAgbGV0IGNvbFRpdGxlID0gZmllbGQuTmFtZTtcclxuICAgIGlmIChjb2xUaXRsZS50b1N0cmluZygpLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgIGNvbFRpdGxlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGNvbFRpdGxlLnRvU3RyaW5nKCksIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmNvbHVtbnMucHVzaCh7XHJcbiAgICAgIGZpZWxkOiBmaWVsZC5OYW1lLFxyXG4gICAgICB0aXRsZTogY29sVGl0bGUsXHJcbiAgICAgIHdpZHRoOiBmaWVsZC53aWR0aCxcclxuICAgICAgdmlzaWJsZTogZmllbGQuVmlzaWJsZSxcclxuICAgICAgZmllbGRUeXBlOiBmaWVsZC5UeXBlLFxyXG4gICAgICBuYXZpZ2F0ZVRvOiBmaWVsZC5OYXZpZ2F0ZVRvLFxyXG4gICAgICBjb21tYW5kOiBidXR0b25zLmZpbHRlcih4ID0+IHguemJ1dHRvbnNOYW1lID09PSBmaWVsZC5WYWx1ZSksXHJcbiAgICAgIGNsYXNzOiBmaWVsZC5EaXZDbGFzcyxcclxuICAgICAgZm9vdGVyVGVtcGxhdGU6IGZhbHNlLFxyXG4gICAgICBhZ2dyZWdhdGVUeXBlOiBcIlwiLFxyXG4gICAgICBhZ2dyZWdhdGVUaXRsZTogXCJcIixcclxuICAgICAgaXNFZGl0YWJsZUluR3JpZDogZmllbGQuSXNFZGl0YWJsZUluR3JpZFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluc2VydEZvb3RlclRlbXBsYXRlRmllbGQoZmllbGQ6IFpGaWVsZCwgYWdncmVnYXRldGl0bGU6IHN0cmluZykge1xyXG4gICAgbGV0IGNvbFRpdGxlID0gZmllbGQuTmFtZTtcclxuICAgIGlmIChjb2xUaXRsZS50b1N0cmluZygpLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgIGNvbFRpdGxlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGNvbFRpdGxlLnRvU3RyaW5nKCksIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmNvbHVtbnMucHVzaCh7XHJcbiAgICAgIGZpZWxkOiBmaWVsZC5WYWx1ZSxcclxuICAgICAgdGl0bGU6IGNvbFRpdGxlLFxyXG4gICAgICB3aWR0aDogZmllbGQud2lkdGgsXHJcbiAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgIGZpZWxkVHlwZTogZmllbGQuVHlwZSxcclxuICAgICAgbmF2aWdhdGVUbzogZmllbGQuTmF2aWdhdGVUbyxcclxuICAgICAgY29tbWFuZDogbnVsbCxcclxuICAgICAgY2xhc3M6IGZpZWxkLkRpdkNsYXNzLFxyXG4gICAgICBmb290ZXJUZW1wbGF0ZTogdHJ1ZSxcclxuICAgICAgYWdncmVnYXRlVHlwZTogZmllbGQuQWdncmVnYXRlVHlwZSxcclxuICAgICAgYWdncmVnYXRlVGl0bGU6IGFnZ3JlZ2F0ZXRpdGxlLFxyXG4gICAgICBpc0VkaXRhYmxlSW5HcmlkOiBmaWVsZC5Jc0VkaXRhYmxlSW5HcmlkXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YUJpbmRpbmcoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmICh0aGlzLmRhdGEuRGF0YVNvdXJjZSkge1xyXG4gICAgICByZXR1cm4gb2YoWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5EYXRhU291cmNlLCB0aGlzLmdyb3VwKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzb3VyY2VVcmwgPSB0aGlzLmdldFJlc291Y2VVUkwoKTtcclxuICAgIGlmIChyZXNvdXJjZVVybCkge1xyXG4gICAgICByZXR1cm4gdGhpcy53ZWJhcGlTZXJ2aWNlLmdldEFwaShyZXNvdXJjZVVybCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2YoW10pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSZXNvdWNlVVJMKCkge1xyXG4gICAgcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShcclxuICAgICAgdGhpcy5kYXRhLlJlc291cmNlVVJMLFxyXG4gICAgICB0aGlzLmdyb3VwXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2VsbENsaWNrSGFuZGxlcihldmVudDogQ2VsbENsaWNrRXZlbnQpIHtcclxuICAgIGlmICghIXRoaXMuZGF0YS5EaXNhYmxlQ2VsbENsaWNrSGFuZGxlcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJjZWxsQ2xpY2sgZXZlbnQ6IFwiLCBldmVudCk7XHJcbiAgICBpZiAodGhpcy5kYXRhLk9uSXRlbUNsaWNrKSB7XHJcbiAgICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLk9uSXRlbUNsaWNrKTtcclxuICAgICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lZGl0TW9kZWwoZXZlbnQuZGF0YUl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlZGl0TW9kZWwoZGF0YUl0ZW06IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwpIHtcclxuICAgICAgLy8gVE9ETzpcclxuICAgICAgLy8gZGVidWdnZXI7XHJcbiAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmRhdGEuRWRpdENsaWNrVVJMLCBkYXRhSXRlbS5JZF0pO1xyXG4gICAgICBjb25zdCBjb2xGaWVsZHMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLkNvbHVtbkZpZWxkcywgdGhpcy5ncm91cCk7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiBcInpncmlkLWNlbGxDbGlja1wiLFxyXG4gICAgICAgIHRhcmdldDogdGhpcy5kYXRhLkVkaXRDbGlja1VSTCxcclxuICAgICAgICBkYXRhOiBkYXRhSXRlbSxcclxuICAgICAgICBjb2x1bW5GaWVsZHMkOiBjb2xGaWVsZHNcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZ3JvdXAuZWRpdE1vZGVsVVJMLCBkYXRhSXRlbS5JZCwgJ2VkaXQnXSwge1xyXG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGVcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdQYXRoOiAnLCB0aGlzLmFjdGl2YXRlZFJvdXRlWydfcm91dGVyU3RhdGUnXS5zbmFwc2hvdC51cmwpO1xyXG4gICAgICAvLyBjb25zdCBjdXJyZW50UGF0aCA9IHRoaXMuYWN0aXZhdGVkUm91dGVbJ19yb3V0ZXJTdGF0ZSddLnNuYXBzaG90LnVybDtcclxuICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2N1cnJlbnRQYXRoICsgXCIvXCIgKyB0aGlzLmdyb3VwLmVkaXRNb2RlbFVSTCwgZGF0YUl0ZW0uSWRdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUNvbnRyb2xzRm9ySW5saW5lRWRpdChkYXRhOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY29sdW1ucy5maW5kKGMgPT4gYy5pc0VkaXRhYmxlSW5HcmlkKSA9PT0gdW5kZWZpbmVkIHx8ICFkYXRhKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgPSBbXTtcclxuXHJcbiAgICBkYXRhLmZvckVhY2goZCA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW1zID0ge307XHJcbiAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5zLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgaXRlbXNbYy5maWVsZF0gPSBuZXcgRm9ybUNvbnRyb2woZFtjLmZpZWxkXSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGl0ZW1zKTtcclxuICAgICAgdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzLnB1c2goeyBJZDogZFt0aGlzLmlkRmllbGRdLCBGZzogZm9ybUdyb3VwIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5saW5lRmllbGQodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb2x1bW5zLmZpbmQoeCA9PiB4LlZhbHVlID09PSB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5saW5lRm9ybShkYXRhSXRlbTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzLmZpbmQoeCA9PiB4LklkID09PSBkYXRhSXRlbVt0aGlzLmlkRmllbGRdKS5GZztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0lubGluZUVkaXRDb2xWaXNpYmxlKGRhdGFJdGVtOiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICBjb25zdCBpc1Zpc2libGUgPSBkYXRhSXRlbVtgJHtjb2x1bW4uVmFsdWV9X1Zpc2libGVgXTtcclxuICAgIHJldHVybiAhKGlzVmlzaWJsZSA9PT0gZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm1hdChjb2w6IGFueSkge1xyXG4gICAgbGV0IGZvcm1hdCA9IFwiXCI7XHJcbiAgICBjb25zdCBmb3JtYXRBcnIgPSBjb2wuRm9ybWF0T3B0aW9ucy5zcGxpdChcIi5cIilcclxuICAgIGxldCBkcCA9IDA7XHJcblxyXG4gICAgaWYgKGZvcm1hdEFyci5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGRwID0gZm9ybWF0QXJyWzFdLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZHAgIT09IDApIHtcclxuICAgICAgZm9ybWF0ID0gXCIxLlwiICsgZHAgKyBcIi1cIiArIGRwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0SGVhZGVyVGV4dChjb2x1bW5OYW1lOiBzdHJpbmcsIG5ld0hlYWRlclRpdGxlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGdyaWRDb2x1bW5zID0gdGhpcy5vcHRpb25zLmNvbHVtbnM7XHJcbiAgICBncmlkQ29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoY29sLk5hbWUgPT09IGNvbHVtbk5hbWUgfHwgY29sLmZpZWxkID09PSBjb2x1bW5OYW1lKSB7XHJcbiAgICAgICAgY29sLnRpdGxlID0gbmV3SGVhZGVyVGl0bGU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvbENsYXNzKGRhdGFJdGVtOiBhbnksIGNvbDogYW55KSB7XHJcbiAgICBsZXQgbmdDbGFzcyA9IFwiZ3JpZENlbGwgXCI7XHJcbiAgICBpZiAoY29sLmZpZWxkVHlwZSA9PT0gJ251bWJlcicgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ2N1cnJlbmN5JyB8fCBjb2wuZmllbGRUeXBlID09PSAnem51bWVyaWMnKSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gXCJyaWdodEFsaWduZWQgXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGFJdGVtW2NvbC5maWVsZCArICdfQ2xhc3MnXSkge1xyXG4gICAgICBuZ0NsYXNzICs9IGRhdGFJdGVtW2NvbC5maWVsZCArICdfQ2xhc3MnXSArIFwiIFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wuQ2xhc3MpIHtcclxuICAgICAgbmdDbGFzcyArPSBjb2wuQ2xhc3MgKyBcIiBcIjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmdDbGFzcztcclxuICB9XHJcblxyXG4gIHNldEdyaWRJc0xvYWRpbmcodHJpZ2dlcmVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRyaWdnZXJlZDtcclxuICB9XHJcblxyXG4gIG9uRmlsdGVyQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnp0cmVlbGlzdCkge1xyXG4gICAgICAvLyB0byBiZSBpbXBsZW1lbnQuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1hcEZpbHRlck9wZXJhdG9yKG9wZXJhdG9yOiBhbnkpIHtcclxuICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcclxuICAgICAgY2FzZSBcImVxXCI6XHJcbiAgICAgICAgcmV0dXJuIFwiZXFcIjtcclxuICAgICAgY2FzZSBcIm5lcVwiOlxyXG4gICAgICAgIHJldHVybiBcIm5lcVwiO1xyXG4gICAgICBjYXNlIFwibHRcIjpcclxuICAgICAgICByZXR1cm4gXCJsdFwiO1xyXG4gICAgICBjYXNlIFwibHRlXCI6XHJcbiAgICAgICAgcmV0dXJuIFwibHRlXCI7XHJcbiAgICAgIGNhc2UgXCJndFwiOlxyXG4gICAgICAgIHJldHVybiBcImd0XCI7XHJcbiAgICAgIGNhc2UgXCJndGVcIjpcclxuICAgICAgICByZXR1cm4gXCJndGVcIjtcclxuICAgICAgY2FzZSBcInN0YXJ0c3dpdGhcIjpcclxuICAgICAgICByZXR1cm4gXCJzdGFydHN3aXRoXCI7XHJcbiAgICAgIGNhc2UgXCJlbmRzd2l0aFwiOlxyXG4gICAgICAgIHJldHVybiBcImVuZHN3aXRoXCI7XHJcbiAgICAgIGNhc2UgXCJpc251bGxcIjpcclxuICAgICAgICByZXR1cm4gXCJpc251bGxcIjtcclxuICAgICAgY2FzZSBcImlzbm90bnVsbFwiOlxyXG4gICAgICAgIHJldHVybiBcImlzbm90bnVsbFwiO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBcIj09XCI7XHJcbiAgICAgIC8vIGVxLCBuZXEsIGlzbnVsbCwgaXNub3RudWxsLCBlbmRzd2l0aCwgc3RhcnRzd2l0aFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbHRlcmFibGUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzb3J0YWJsZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpXCIgc3R5bGU9XCJtYXJnaW46IDEwcHggMCA2cHggMDtcIj5cclxuICA8ZGl2ICpuZ0lmPVwiZGF0YS5UaXRsZVwiIGNsYXNzPVwidHJlZWxpc3RUaXRsZVwiPnt7ZGF0YS5UaXRsZX19PC9kaXY+XHJcbiAgPGtlbmRvLXRyZWVsaXN0IFtrZW5kb1RyZWVMaXN0RmxhdEJpbmRpbmddPVwiZGF0YVNvdXJjZVwiIFtuZ1N0eWxlXT1cImdldEdyaWRTdHlsZSgpXCIgW2lkRmllbGRdPVwib3B0aW9ucy5pZEZpZWxkXCIgW3BhcmVudElkRmllbGRdPVwib3B0aW9ucy5wYXJlbnRJZEZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgKGNlbGxDbGljayk9XCJjZWxsQ2xpY2tIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwib3B0aW9ucy5zb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtyZXNpemFibGVdPVwib3B0aW9ucy5yZXNpemFibGVcIlxyXG4gICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtyZW9yZGVyYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51XT1cIm9wdGlvbnMuY29sdW1uTWVudVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzY3JvbGxhYmxlXT1cIm9wdGlvbnMuc2Nyb2xsYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFthZ2dyZWdhdGVdPVwib3B0aW9ucy5hZ2dyZWdhdGVcIlxyXG4gICAgICAgICAgICAgICAgICBbcGFnZWFibGVdPVwib3B0aW9ucy5wYWdlQWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJkYXRhLlBhZ2VTaXplXCJcclxuICAgICAgICAgICAgICAgICAgW2luaXRpYWxseUV4cGFuZGVkXT1cImRhdGEuRGVmYXVsdENvbGxhcHNlID09PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIGtlbmRvVHJlZUxpc3RFeHBhbmRhYmxlXHJcbiAgICAgICAgICAgICAgICAgIHRyZWVsaXN0PlxyXG5cclxuICAgIDwhLS1cclxuICAgICAgW2ZpbHRlcmFibGVdPVwib3B0aW9ucy5maWx0ZXJhYmxlXCJcclxuICAgIFtyZW9yZGVyYWJsZV09XCJvcHRpb25zLnJlc2l6YWJsZVwiXHJcbiAgICAgIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIG9wdGlvbnMuY29sdW1uczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICA8a2VuZG8tdHJlZWxpc3QtY29sdW1uICpuZ0lmPVwiIWNvbC5jb21tYW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sLmNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXhwYW5kYWJsZV09XCJpPT09MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImNvbC50aXRsZSB8fCBjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCJjb2wud2lkdGggfHwgMjUwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJmaWx0ZXJhYmxlKGNvbC5lbmFibGVGaWx0ZXJpbmcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwic29ydGFibGUoY29sLmVuYWJsZVNvcnRpbmcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIiFpc0NvbHVtbnNWaXNpYmxlKGNvbC52aXNpYmxlKVwiPlxyXG4gICAgICAgIDxkaXYgW25nU3dpdGNoXT1cInRydWVcIj5cclxuICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeSdcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pudW1lcmljJ1wiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9UcmVlTGlzdEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtbnVtZXJpYy1maWx0ZXItY2VsbCBbY29sdW1uXT1cImNvbHVtblwiIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJlcVwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgIDwva2VuZG8tdHJlZWxpc3QtbnVtZXJpYy1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiY29sLmZpZWxkVHlwZSA9PSAnemRhdGUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6ZGF0ZXRpbWUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5maWx0ZXJCeURhdGVSYW5nZSA9PT0gdHJ1ZVwiPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVMaXN0RmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiIG9wZXJhdG9yPVwibHRlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGF0ZS1yYW5nZS1maWx0ZXItY2VsbCBjbGFzcz1cImRhdGUtcmFuZ2UtZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2wuZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1sdC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1sdC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWd0ZS1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1ndGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPC9kYXRlLXJhbmdlLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLmZpbHRlckJ5RGF0ZVJhbmdlID09PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVMaXN0RmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWRhdGUtZmlsdGVyLWNlbGwgW2NvbHVtbl09XCJjb2x1bW5cIiBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwibHRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItbHRlLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWx0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1ndC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1ndC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tdHJlZWxpc3QtZGF0ZS1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9UcmVlTGlzdEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3Qtc3RyaW5nLWZpbHRlci1jZWxsIFtjb2x1bW5dPVwiY29sdW1uXCIgW2ZpbHRlcl09XCJmaWx0ZXJcIiBvcGVyYXRvcj1cImNvbnRhaW5zXCI+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWNvbnRhaW5zLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWNvbnRhaW5zLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1lcS1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItbmVxLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLW5lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItc3RhcnRzd2l0aC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1zdGFydHN3aXRoLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1lbmRzd2l0aC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1lbmRzd2l0aC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICA8L2tlbmRvLXRyZWVsaXN0LXN0cmluZy1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVMaXN0Q2VsbFRlbXBsYXRlIGxldC1kYXRhSXRlbSBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiIGxldC1jZWxsQ29udGV4dD1cImNlbGxDb250ZXh0XCI+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA3cHggMDtkaXNwbGF5OiBpbmxpbmU7XCIgW3N0eWxlLmNvbG9yXT1cIighIWRhdGFJdGVtLkNvbG9yID8gW2RhdGFJdGVtLkNvbG9yXSA6ICdibGFjaycpXCIgKm5nSWY9XCIhY29sLm5hdmlnYXRlVG8gJiYgY29sLmlzRWRpdGFibGVJbkdyaWQgIT09IHRydWVcIiBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkVHlwZVwiIFtuZ0NsYXNzXT1cImdldENvbENsYXNzKGRhdGFJdGVtLCBjb2wpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGUnXCI+XHJcbiAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6ICdkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenNob3J0ZGF0ZSdcIj5cclxuICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ01NTSB5eXl5JyB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3p1aWRhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpyaWdodDtcIj57eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyIH19IDwvZGl2PlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246cmlnaHQ7XCI+e3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlcjogJzEuMi0yJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInem51bWVyaWMnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246cmlnaHQ7XCI+e3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCkgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3VybCdcIiBzdHlsZT1cImNvbG9yOiBibHVlOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCI+XHJcbiAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXX19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogN3B4IDA7ZGlzcGxheTogaW5saW5lO1wiIFtzdHlsZS5jb2xvcl09XCIoISFkYXRhSXRlbS5Db2xvciA/IFtkYXRhSXRlbS5Db2xvcl0gOiAnYmxhY2snKVwiICpuZ0lmPVwiIWNvbC5uYXZpZ2F0ZVRvICYmIGNvbC5pc0VkaXRhYmxlSW5HcmlkID09PSB0cnVlICYmIGlzSW5saW5lRWRpdENvbFZpc2libGUoZGF0YUl0ZW0sIGNvbClcIiBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkVHlwZVwiIFtuZ0NsYXNzXT1cImdldENvbENsYXNzKGRhdGFJdGVtLCBjb2wpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XHJcbiAgICAgICAgICAgICAgPGFwcC16Y2hlY2tib3ggc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBbZGF0YV09XCJnZXRJbmxpbmVGaWVsZChjb2wuVmFsdWUpXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZ2V0SW5saW5lRm9ybShkYXRhSXRlbSlcIiAoY2xpY2spPVwiYnV0dG9uQ2xpY2soY29sLCBjZWxsQ29udGV4dClcIj48L2FwcC16Y2hlY2tib3g+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dWlzZWxlY3RtdWx0aXBsZSdcIj5cclxuICAgICAgICAgICAgICA8YXBwLXpzZWxlY3RtdWx0aXBsZSBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIFtkYXRhXT1cImdldElubGluZUZpZWxkKGNvbC5maWVsZClcIiBbZ3JvdXBdPVwiZ3JvdXBcIiBbZm9ybV09XCJnZXRJbmxpbmVGb3JtKGRhdGFJdGVtKVwiPjwvYXBwLXpzZWxlY3RtdWx0aXBsZT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRhcmVhJ1wiPlxyXG4gICAgICAgICAgICAgIDxhcHAtenRleHRhcmVhIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgW2RhdGFdPVwiZ2V0SW5saW5lRmllbGQoY29sLlZhbHVlKVwiIFtncm91cF09XCJncm91cFwiIFtmb3JtXT1cImdldElubGluZUZvcm0oZGF0YUl0ZW0pXCI+PC9hcHAtenRleHRhcmVhPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJbJ3p1aWRhdGV0aW1lJywnemRhdGUnLCd6ZGF0ZXRpbWUnLCd6c2hvcnRkYXRlJ10uaW5jbHVkZXMoY29sLmZpZWxkVHlwZSkgPyBjb2wuZmllbGRUeXBlIDogJydcIj5cclxuICAgICAgICAgICAgICA8YXBwLXpkYXRldGltZSBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIFtkYXRhXT1cImdldElubGluZUZpZWxkKGNvbC5WYWx1ZSlcIiBbZ3JvdXBdPVwiZ3JvdXBcIiBbZm9ybV09XCJnZXRJbmxpbmVGb3JtKGRhdGFJdGVtKVwiPjwvYXBwLXpkYXRldGltZT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiEhY29sLm5hdmlnYXRlVG9cIiAoY2xpY2spPVwib25OYXZpZ2F0ZVRvKCRldmVudCwgY29sLCBkYXRhSXRlbSwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgPGlvbi1idXR0b24gY29sb3I9XCJsaWdodFwiIHNpemU9XCJzbWFsbFwiPlxyXG4gICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICA8IS0tIDxpb24taWNvbiBzbG90PSBcImVuZFwiIG5hbWU9XCJhcnJvdy1mb3J3YXJkXCI+PC9pb24taWNvbj4gLS0+XHJcbiAgICAgICAgICAgICAgPGZhLWljb24gc2xvdD1cImVuZFwiIFtpY29uXT1cIidhcnJvdy1yaWdodCdcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgIDwvc3Bhbj4gXHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJjb2wuZm9vdGVyVGVtcGxhdGVcIiBrZW5kb1RyZWVMaXN0Rm9vdGVyVGVtcGxhdGUgbGV0LWFnZ3JlZ2F0ZXM9XCJhZ2dyZWdhdGVzXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvbC5uYXZpZ2F0ZVRvXCIgW25nU3dpdGNoXT1cImNvbC5maWVsZFR5cGVcIiBbbmdDbGFzc109XCJ7J3JpZ2h0QWxpZ25lZCc6IGNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeSd9XCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgIDxiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVRpdGxlIHwgdGl0bGVjYXNlIH19ICB7eyBhZ2dyZWdhdGVzW2NvbC5maWVsZF1bY29sLmFnZ3JlZ2F0ZVR5cGVdIHwgbnVtYmVyIH19XHJcbiAgICAgICAgICAgICAgPC9iPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCI+XHJcbiAgICAgICAgICAgICAgPGI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVGl0bGUgfCB0aXRsZWNhc2UgfX0gIHt7IGFnZ3JlZ2F0ZXNbY29sLmZpZWxkXVtjb2wuYWdncmVnYXRlVHlwZV0gfCBudW1iZXI6ICcxLjItMicgfX1cclxuICAgICAgICAgICAgICA8L2I+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwva2VuZG8tdHJlZWxpc3QtY29sdW1uPlxyXG4gICAgICA8a2VuZG8tdHJlZWxpc3QtY29tbWFuZC1jb2x1bW4gKm5nSWY9XCIhIWNvbC5jb21tYW5kXCIgW3RpdGxlXT1cImNvbC50aXRsZSB8fCBjb2wuZmllbGRcIiBbd2lkdGhdPVwiY29sLndpZHRoIHx8IDI1MFwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVMaXN0Q2VsbFRlbXBsYXRlIGxldC1jZWxsQ29udGV4dD1cImNlbGxDb250ZXh0XCI+XHJcbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImNvbC5jbGFzc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBjb2wyIG9mIGNvbC5jb21tYW5kOyBpbmRleCBhcyBpXCIgdHlwZT1cImJ1dHRvblwiIFtrZW5kb1RyZWVMaXN0RWRpdENvbW1hbmRdPVwiY2VsbENvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2wyLnRleHRcIiAoY2xpY2spPVwiYnV0dG9uQ2xpY2soY29sMiwgY2VsbENvbnRleHQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImlzQnV0dG9uSGlkZGVuKGNvbDIsIGNlbGxDb250ZXh0KVwiPlxyXG4gICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImNvbDIuaWNvblwiIFtzdHlsZS5jb2xvcl09XCIoISFjb2wyLmNvbG9yID8gW2NvbDIuY29sb3JdIDogJ2JsYWNrJylcIj5cclxuICAgICAgICAgICAgICA8L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbDIuU2hvd0xhYmVsID09PSB1bmRlZmluZWQgfHwgY29sMi5TaG93TGFiZWxcIj57e2NvbDIudGV4dH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9rZW5kby10cmVlbGlzdC1jb21tYW5kLWNvbHVtbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwhLS0gPGtlbmRvLXRyZWVsaXN0LWNvbW1hbmQtY29sdW1uIHdpZHRoPVwiMTQwXCI+XHJcbiAgICAgICA8bmctdGVtcGxhdGUga2VuZG9UcmVlTGlzdENlbGxUZW1wbGF0ZSBsZXQtaXNOZXc9XCJpc05ld1wiIGxldC1jZWxsQ29udGV4dD1cImNlbGxDb250ZXh0XCI+XHJcbiAgICAgICAgICAgPGJ1dHRvbiBba2VuZG9UcmVlTGlzdEFkZENvbW1hbmRdPVwiY2VsbENvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgaWNvbj1cImZpbHRlci1hZGQtZXhwcmVzc2lvblwiIHRpdGxlPVwiQWRkIENoaWxkXCI+XHJcbiAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgPGJ1dHRvbiBba2VuZG9UcmVlTGlzdENhbmNlbENvbW1hbmRdPVwiY2VsbENvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgaWNvbj1cImNhbmNlbFwiIHRpdGxlPVwie3sgaXNOZXcgPyAnRGlzY2FyZCBjaGFuZ2VzJyA6ICdDYW5jZWwnIH19XCI+XHJcbiAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICA8L2tlbmRvLXRyZWVsaXN0LWNvbW1hbmQtY29sdW1uPiAtLT5cclxuICA8L2tlbmRvLXRyZWVsaXN0PlxyXG48L2Rpdj5cclxuIl19
|
|
544
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRyZWVsaXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3p0cmVlbGlzdC96dHJlZWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWVsaXN0L3p0cmVlbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHcEUsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBNEIsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHaEQsMkNBQTJDO0FBQzNDLE9BQU8sRUFDTyxnQkFBZ0IsRUFDWixvQkFBb0IsRUFFckMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFrQnpCLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsWUFDUyxRQUFrQixFQUNsQixTQUFtQixFQUNuQixVQUFvQixFQUNwQixXQUFxQixFQUNyQixVQUFvQixFQUNwQixVQUF1QixFQUN2QixPQUFpQixFQUNqQixRQUFrQixFQUNsQixVQUFtQixFQUNuQixTQUFlLEVBQ2YsT0FBZ0IsRUFDaEIsYUFBc0IsRUFDdEIsT0FBb0IsRUFDcEIsU0FBZSxFQUNmLFFBQWM7UUFkZCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsZUFBVSxHQUFWLFVB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clxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkRlc3Ryb3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBvZiwgZm9ya0pvaW4sIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ2VsbENsaWNrRXZlbnQsIFNjcm9sbE1vZGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10cmVlbGlzdCc7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7XHJcbiAgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LFxyXG4gIFpGaWVsZCwgWkdyb3VwLCBaQ29tcG9uZW50UHJvcGVydGllcywgRmllbGRTZXJ2aWNlLFxyXG4gIFdlYkFwaVNlcnZpY2UsIEF1dGhTZXJ2aWNlXHJcbn0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgWlRyZWVMaXN0Q29sdW1uIHtcclxuICBmaWVsZDogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgd2lkdGg6IG51bWJlcjtcclxuICB2aXNpYmxlOiBib29sZWFuIHwgYW55O1xyXG4gIGZpZWxkVHlwZTogc3RyaW5nO1xyXG4gIG5hdmlnYXRlVG86IHN0cmluZztcclxuICBjb21tYW5kOiBhbnk7XHJcbiAgY2xhc3M6IGFueTtcclxuICBmb290ZXJUZW1wbGF0ZTogYm9vbGVhbjtcclxuICBhZ2dyZWdhdGVUeXBlOiBzdHJpbmc7XHJcbiAgYWdncmVnYXRlVGl0bGU6IHN0cmluZztcclxuICBpY29uT25seT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBaVHJlZUxpc3RPcHRpb25zIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBzb3J0YWJsZT86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgcmVzaXphYmxlPzogYm9vbGVhbixcclxuICAgIHB1YmxpYyBmaWx0ZXJhYmxlPzogYm9vbGVhbixcclxuICAgIHB1YmxpYyByZW9yZGVyYWJsZT86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgY29sdW1uTWVudT86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgc2Nyb2xsYWJsZT86IFNjcm9sbE1vZGUsXHJcbiAgICBwdWJsaWMgcmVmcmVzaD86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgYXV0b0JpbmQ/OiBib29sZWFuLFxyXG4gICAgcHVibGljIGRhdGFTb3VyY2U/OiBzdHJpbmcsXHJcbiAgICBwdWJsaWMgZGF0YUJvdW5kPzogYW55LFxyXG4gICAgcHVibGljIGlkRmllbGQ/OiBzdHJpbmcsXHJcbiAgICBwdWJsaWMgcGFyZW50SWRGaWVsZD86IHN0cmluZyxcclxuICAgIHB1YmxpYyBjb2x1bW5zPzogQXJyYXk8YW55PixcclxuICAgIHB1YmxpYyBhZ2dyZWdhdGU/OiBhbnksXHJcbiAgICBwdWJsaWMgcGFnZUFibGU/OiBhbnksXHJcbiAgKSB7IH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXp0cmVlbGlzdFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4venRyZWVsaXN0LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3p0cmVlbGlzdC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFp0cmVlbGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBkYXRhOiBaRmllbGQ7XHJcbiAgQElucHV0KCkgZ3JvdXA6IFpHcm91cDtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgLy8gQFZpZXdDaGlsZChaVHJlZUxpc3RCaW5kaW5nRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UgfSkgenRyZWVsaXN0OiBaVHJlZUxpc3RCaW5kaW5nRGlyZWN0aXZlO1xyXG4gIHp0cmVlbGlzdDogYW55ID0gbnVsbDtcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBkYXRhU291cmNlOiBzdHJpbmc7XHJcbiAgaWRGaWVsZCA9IFwiSWRcIjtcclxuICBwYXJlbnRJZEZpZWxkID0gXCJQYXJlbnRJZFwiO1xyXG4gIG9wdGlvbnM6IFpUcmVlTGlzdE9wdGlvbnMgPSBuZXcgWlRyZWVMaXN0T3B0aW9ucygpO1xyXG4gIGNvbXBvbmVudFByb3BlcnRpZXMgPSBuZXcgWkNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuICBmaWVsZGdyaWRDb2xWaXNpYmxlOiBhbnlbXTtcclxuICBwYWdlU2l6ZSA9IDIwO1xyXG4gIGlubGluZUVkaXRlZEZvcm1Hcm91cHM6IEFycmF5PGFueT4gPSBbXTtcclxuICBpc0xvYWRpbmc6IGJvb2xlYW47XHJcbiAgdHJlZWxpc3RTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gIC8vIHRyZWVsaXN0U3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gIC8vIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIC8vIHp0cmVlbGlzdDogYW55ID0gbnVsbDtcclxuICAvLyBjb2x1bW5zOiBhbnlbXTtcclxuXHJcbiAgcHJpdmF0ZSB3aWR0aFJlZHVjZTogbnVtYmVyO1xyXG5cclxuICBwcml2YXRlIGhlaWdodFJlZHVjZTogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdlYmFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSkgeyB9XHJcbiAgLy8gbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gIC8vICAgLy8gdGhpcy56dHJlZWxpc3Quc2V0T3B0aW9ucyh7ZGF0YTogdGhpcy5kYXRhLCBncm91cDogdGhpcy5ncm91cH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudFByb3BlcnRpZXModGhpcyk7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG5cclxuICAgIHRoaXMud2lkdGhSZWR1Y2UgPSB0aGlzLmRhdGEuV2lkdGhSZWR1Y2UgfHwgNjA7XHJcbiAgICB0aGlzLmhlaWdodFJlZHVjZSA9IHRoaXMuZGF0YS5IZWlnaHRSZWR1Y2UgfHwgNTYwO1xyXG4gICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMuZGF0YS5QYWdlU2l6ZSB8fCAyMDsgXHJcblxyXG4gICAgaWYgKCEhdGhpcy5kYXRhLk9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5zZXRMb2NhbE9wdGlvbnMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0RmllbGRFbGVtZW50T3B0aW9ucygpO1xyXG4gICAgfVxyXG4gICAgIFxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAvLyBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgIC8vICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGdldEdyaWRTdHlsZSgpIHtcclxuICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgXCJoZWlnaHQucHhcIjogdGhpcy5nZXRHcmlkSGVpZ2h0KCksIC8vIHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMuaGVpZ2h0UmVkdWNlLCAvLyA0NTAsXHJcbiAgICAgIFwid2lkdGgucHhcIjogd2luZG93LmlubmVyV2lkdGggLSB0aGlzLndpZHRoUmVkdWNlLFxyXG4gICAgfTsgLy8gXCJ3aWR0aC5weFwiOiB0aGlzLmlubmVyV2lkdGggLSAzNVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRHcmlkSGVpZ2h0KCkge1xyXG4gICAgY29uc3QgaCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMuaGVpZ2h0UmVkdWNlO1xyXG4gICAgcmV0dXJuIGggPCAxODAgPyAxODAgOiBoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEVuYWJsZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IGZjID0gdGhpcy5ncm91cC5mb3JtLmNvbnRyb2xzW3RoaXMuZGF0YS5WYWx1ZV07XHJcbiAgICBzdGF0dXMgPyBmYy5lbmFibGUoKSA6IGZjLmRpc2FibGUoKTtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5ID0gIXN0YXR1cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWaXNpYmxlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSA9IHN0YXR1cztcclxuICAgIHRoaXMuZGF0YS5WaXNpYmxlID0gc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFJlcXVpcmUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZXF1aXJlZCA9IHN0YXR1cztcclxuICAgIFpDb21wb25lbnRIZWxwZXIuY2hhbmdlVmFsaWRhdG9yKHN0YXR1cywgdGhpcy5ncm91cCwgdGhpcy5kYXRhLlZhbHVlLCB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERhdGEgPSAoZ0RhdGE6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5kYXRhU291cmNlID0gZ0RhdGE7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sc0ZvcklubGluZUVkaXQoZ0RhdGEpO1xyXG4gICAgaWYgKGdEYXRhICYmIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyAmJiB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBnRGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZnVmFsID0gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzLmZpbmQoaSA9PiBpW3RoaXMuaWRGaWVsZF0gPT09IGRhdGFbdGhpcy5pZEZpZWxkXSk7XHJcbiAgICAgICAgY29uc3QgZmcgPSBmZ1ZhbC5GZztcclxuICAgICAgICBpZiAoZmdWYWwgJiYgZmcpIHtcclxuICAgICAgICAgIGNvbnN0IGtlID0gT2JqZWN0LmtleXMoZmcuY29udHJvbHMpO1xyXG4gICAgICAgICAgT2JqZWN0LmtleXMoZmcuY29udHJvbHMpLmZvckVhY2goayA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZjID0gZmcuY29udHJvbHNba107XHJcbiAgICAgICAgICAgIGlmIChmYykge1xyXG4gICAgICAgICAgICAgIGZjLnNldFZhbHVlKGRhdGFba10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzQnV0dG9uSGlkZGVuKGNvbDogYW55LCBjZWxsQ29udGFpbjogYW55KSB7XHJcbiAgICBpZiAoY29sLnZpc2libGUpIHtcclxuICAgICAgcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBjb2wudmlzaWJsZSwgY2VsbENvbnRhaW4udmlld0l0ZW0uZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjb2wuaGlkZGVuUGFyYW0gfHwgY29sLmhpZGRlblZhbHVlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNlbGxDb250YWluLnZpZXdJdGVtLmRhdGFbY29sLmhpZGRlblBhcmFtXSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2VsbENvbnRhaW4udmlld0l0ZW0uZGF0YVtjb2wuaGlkZGVuUGFyYW1dID09PSBjb2wuaGlkZGVuVmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2UgeyByZXR1cm4gZmFsc2U7IH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBidXR0b25DbGljayhidXR0b246IGFueSwgY2VsbENvbnRleHQ6IGFueSkge1xyXG4gICAgaWYgKGJ1dHRvbi5lZGl0KSB7XHJcbiAgICAgIGJ1dHRvbi5lZGl0KGNlbGxDb250ZXh0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiBcImJ1dHRvbkNsaWNrXCIsXHJcbiAgICAgICAgdGFyZ2V0OiBidXR0b24uQ2xpY2tFdmVudCxcclxuICAgICAgICBkYXRhOiBjZWxsQ29udGV4dFxyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25OYXZpZ2F0ZVRvKGV2ZW50OiBhbnksIGNvbFNldHRpbmc6IGFueSwgcm93RGF0YTogYW55LCBjZWxsRGF0YTogc3RyaW5nKSB7XHJcbiAgICAvLyBkZWJ1Z2dlcjtcclxuICAgIC8vIGNvbnN0IG4gPSBjb2xTZXR0aW5nLm5hdmlnYXRlVG8ucmVwbGFjZSgnLzppZCcsIGNlbGxEYXRhKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICB0eXBlOiAnemdyaWQtb25OYXZpZ2F0ZVRvJyxcclxuICAgICAgdGFyZ2V0OiBjb2xTZXR0aW5nLm5hdmlnYXRlVG8sXHJcbiAgICAgIGRhdGE6IGNlbGxEYXRhXHJcbiAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNDb2x1bW5zVmlzaWJsZShmaWVsZEV4cHIpIHtcclxuICAgIGlmIChmaWVsZEV4cHIgIT09IGZhbHNlICYmICFmaWVsZEV4cHIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2ID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIGZpZWxkRXhwcik7XHJcbiAgICByZXR1cm4gdjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TG9jYWxPcHRpb25zKCkge1xyXG4gICAgY29uc3Qgb3B0aW9uczogWlRyZWVMaXN0T3B0aW9ucyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShcclxuICAgICAgdGhpcy5kYXRhLk9wdGlvbnMsXHJcbiAgICAgIHRoaXMuZ3JvdXBcclxuICAgICk7XHJcbiAgICBpZiAoIW9wdGlvbnMpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiTm8gaW5pdGlhbGlzZSBmb3IgRmllbGQuT3B0aW9uczogXCIsIHRoaXMuZGF0YS5PcHRpb25zKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcclxuICAgIHRoaXMub3B0aW9ucy5pZEZpZWxkID0gdGhpcy5vcHRpb25zLmlkRmllbGQgfHwgdGhpcy5pZEZpZWxkO1xyXG4gICAgdGhpcy5vcHRpb25zLnBhcmVudElkRmllbGQgPSB0aGlzLm9wdGlvbnMucGFyZW50SWRGaWVsZCB8fCB0aGlzLnBhcmVudElkRmllbGQ7XHJcblxyXG5cclxuICAgIGNvbnN0IF90cmFuc2xhdGlvbkZ1bGxMaXN0ID0gdGhpcy5hdXRoU2VydmljZS5TeXN0ZW1Mb2NhbGVUcmFuc2xhdGlvbjtcclxuICAgIC8vZGVidWdnZXI7XHJcbiAgICAvL2NvbnN0IF90cmFuc2xhdGlvbkZpbHRlcmVkTGlzdCA9IF90cmFuc2xhdGlvbkZ1bGxMaXN0ID8gX3RyYW5zbGF0aW9uRnVsbExpc3QuZmlsdGVyKHggPT4geFsnUHJvamVjdE5hbWUnXSA9PT0gcHJvamVjdE5hbWUgJiYgeFsnRWxlbWVudE5hbWUnXSA9PT0gZmllbGROYW1lKSA6IG51bGw7XHJcblxyXG5cclxuICAgIC8vaWYgKHRoaXMub3B0aW9ucy5jb2x1bW5zICYmIClcclxuICAgIC8vY29uc3QgdHJhbnNsYXRlZFRpdGxlID0gX3RyYW5zbGF0aW9uRmlsdGVyZWRMaXN0LmZpbmQoeCA9PiB4WydQaHJhc2VLZXknXSA9PT0gZmllbGQuTmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIC8vaWYgKHRyYW5zbGF0ZWRUaXRsZSkge1xyXG4gICAgLy8gIGNvbnN0IF9sYWJlbCA9IGZpZWxkLkxhYmVsLnRvU3RyaW5nKCkudHJpbSgpO1xyXG4gICAgLy99XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSAmJlxyXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmRhdGFTb3VyY2UgPT09IFwic3RyaW5nXCJcclxuICAgICkge1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRhdGFTb3VyY2Uuc3RhcnRzV2l0aChcImdyb3VwLlwiKSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLm9wdGlvbnMuZGF0YVNvdXJjZSwgdGhpcy5ncm91cCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcih0aGlzLmRhdGEuTmFtZSArIFwiIC0gaGFzIGludmFsaWQgZGF0YVNvdXJjZVwiKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcih0aGlzLmRhdGEuTmFtZSArIFwiIC0gZGF0YVNvdXJjZSBwcm9wZXJ0eSBpcyBub3QgZGVjbGFyZWQuXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGaWVsZEVsZW1lbnRPcHRpb25zKCkge1xyXG4gICAgdGhpcy5vcHRpb25zLnNvcnRhYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMub3B0aW9ucy5yZXNpemFibGUgPSB0cnVlO1xyXG4gICAgdGhpcy5vcHRpb25zLmZpbHRlcmFibGUgPSB0cnVlO1xyXG4gICAgdGhpcy5vcHRpb25zLnJlc2l6YWJsZSA9IHRydWU7XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sdW1uTWVudSA9IHRoaXMuZGF0YS5EaXNhYmxlR3JpZENvbHVtbk1lbnUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICB0aGlzLm9wdGlvbnMuc2Nyb2xsYWJsZSA9IHRoaXMuZGF0YVsnU2Nyb2xsTW9kZSddID8gdGhpcy5kYXRhWydTY3JvbGxNb2RlJ10gOiAndmlydHVhbCc7XHJcbiAgICB0aGlzLm9wdGlvbnMuaWRGaWVsZCA9IHRoaXMuZGF0YVtcImlkRmllbGRcIl0gfHwgdGhpcy5pZEZpZWxkO1xyXG4gICAgdGhpcy5vcHRpb25zLnBhcmVudElkRmllbGQgPSB0aGlzLmRhdGFbXCJwYXJlbnRJZEZpZWxkXCJdIHx8IHRoaXMucGFyZW50SWRGaWVsZDtcclxuICAgIHRoaXMub3B0aW9ucy5jb2x1bW5zID0gW107XHJcbiAgICB0aGlzLm9wdGlvbnMuYWdncmVnYXRlID0gW107XHJcbiAgICB0aGlzLm9wdGlvbnMucGFnZUFibGUgPSB0aGlzLmRhdGEuUGFnZVNpemUgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgbGV0IHpmaWVsZHMgPSBbXTtcclxuICAgIHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUodGhpcy5kYXRhW1wiQ29sdW1uRmllbGRDb2RlXCJdLCBcIkZvcm1GaWVsZFwiLCBudWxsLCBudWxsKS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoZmllbGRzID0+IHtcclxuICAgICAgICB6ZmllbGRzID0gZmllbGRzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnNGcm9tWkJ1dHRvbnMoZmllbGRzKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcCgoYnV0dG9ucykgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0VHJlZUxpc3RDb2x1bW5zKHpmaWVsZHMsIGJ1dHRvbnMpO1xyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhQmluZGluZygpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKGRhdGEgPT4ge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzRm9ySW5saW5lRWRpdChkYXRhKTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IGRhdGE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gY29uc3QgemJ1dHRvbkZpZWxkcyA9IFtdIGFzIEFycmF5PFpGaWVsZD47XHJcbiAgLy8gZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gIC8vICAgICBpZiAoZmllbGQuVHlwZSA9PT0gXCJ6YnV0dG9uc1wiKSB7XHJcbiAgLy8gICAgICAgICBsZXQgZmllbGRDb2xWaXNpYmxlID0gZmllbGQuZ3JpZENvbFZpc2libGU7XHJcbiAgLy8gICAgICAgICBpZiAoZmllbGQuZ3JpZENvbFZpc2libGUgJiYgZmllbGQuZ3JpZENvbFZpc2libGUudG9TdHJpbmcoKS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gIC8vICAgICAgICAgICAgIC8vIGZpZWxkLmdyaWRDb2xWaXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGZpZWxkLmdyaWRDb2xWaXNpYmxlLnRvU3RyaW5nKCksIHRoaXMuZ3JvdXApO1xyXG4gIC8vICAgICAgICAgICAgIGZpZWxkQ29sVmlzaWJsZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShmaWVsZC5ncmlkQ29sVmlzaWJsZS50b1N0cmluZygpLCB0aGlzLmdyb3VwKTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgIC8vIGlmIChmaWVsZC5ncmlkQ29sVmlzaWJsZSA9PT0gdHJ1ZSkge1xyXG4gIC8vICAgICAgICAgaWYgKGZpZWxkQ29sVmlzaWJsZSA9PT0gdHJ1ZSkge1xyXG4gIC8vICAgICAgICAgICAgIHpidXR0b25GaWVsZHMucHVzaChmaWVsZCk7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgIH1cclxuICAvLyB9KTtcclxuXHJcbiAgLy8gaWYgKHpidXR0b25GaWVsZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgLy8gICAgIHJldHVybiBvZihbXSk7XHJcbiAgLy8gfVxyXG4gIC8vIHpidXR0b25GaWVsZHMuZm9yRWFjaCh6YnV0dG9uRmllbGQgPT4ge1xyXG4gIC8vICAgICB6YnV0dG9uUmVzdWx0LnB1c2goXHJcbiAgLy8gICAgICAgICB0aGlzLmZpZWxkU2VydmljZS5nZXRGb3JtRmllbGRDb2RlKHpidXR0b25GaWVsZC5WYWx1ZSwgXCJGb3JtRmllbGRcIiwgbnVsbCwgbnVsbCkucGlwZShcclxuICAvLyAgICAgICAgICAgICBzd2l0Y2hNYXAoYnV0dG9ucyA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgICAgIHJldHVybiBvZih7IHpidXR0b25GaWVsZCwgYnV0dG9ucyB9KTtcclxuICAvLyAgICAgICAgICAgICB9KSlcclxuICAvLyAgICAgKTtcclxuICAvLyB9KTtcclxuXHJcbiAgcHJpdmF0ZSBnZXRCdXR0b25zRnJvbVpCdXR0b25zKGZpZWxkczogQXJyYXk8WkZpZWxkPik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBidXR0b25DbWQgPSBbXTtcclxuICAgIGNvbnN0IHpidXR0b25SZXN1bHQgPSBbXTtcclxuICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgaWYgKGZpZWxkLlR5cGUgPT09IFwiemJ1dHRvbnNcIiAmJiBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoZmllbGQuZ3JpZENvbFZpc2libGUgYXMgc3RyaW5nLCB0aGlzLmdyb3VwKSkge1xyXG4gICAgICAgIHpidXR0b25SZXN1bHQucHVzaChcclxuICAgICAgICAgIHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUoZmllbGQuVmFsdWUsIFwiRm9ybUZpZWxkXCIsIG51bGwsIG51bGwpLnBpcGUoXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChidXR0b25zID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gb2YoeyBmaWVsZCwgYnV0dG9ucyB9KTtcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHpidXR0b25SZXN1bHQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvcmtKb2luKHpidXR0b25SZXN1bHQpLnBpcGUoXHJcbiAgICAgIHRhcChyZXNwID0+IHtcclxuICAgICAgICByZXNwLmZvckVhY2goemJ1dHRvbnNBcnJheSA9PlxyXG4gICAgICAgICAgemJ1dHRvbnNBcnJheVtcImJ1dHRvbnNcIl0uZm9yRWFjaCgoYnV0dG9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgYnV0dG9uQ21kLnB1c2goe1xyXG4gICAgICAgICAgICAgIHpidXR0b25zTmFtZTogemJ1dHRvbnNBcnJheVtcImZpZWxkXCJdLlZhbHVlLFxyXG4gICAgICAgICAgICAgIG5hbWU6IGJ1dHRvbi5WYWx1ZSxcclxuICAgICAgICAgICAgICBjbGFzczogYnV0dG9uLkNsYXNzLFxyXG4gICAgICAgICAgICAgIHRleHQ6IGJ1dHRvbi5MYWJlbCxcclxuICAgICAgICAgICAgICBpY29uOiBidXR0b24uSWNvbixcclxuICAgICAgICAgICAgICB2aXNpYmxlOiBidXR0b24uVmlzaWJsZSxcclxuICAgICAgICAgICAgICBoaWRkZW5QYXJhbTogYnV0dG9uW1wiaGlkZGVuUGFyYW1cIl0sXHJcbiAgICAgICAgICAgICAgaGlkZGVuVmFsdWU6IGJ1dHRvbltcImhpZGRlblZhbHVlXCJdLFxyXG4gICAgICAgICAgICAgIGVkaXQ6IGJ1dHRvbi5lZGl0LFxyXG4gICAgICAgICAgICAgIENsaWNrRXZlbnQ6IGJ1dHRvbi5DbGlja0V2ZW50LFxyXG4gICAgICAgICAgICAgIFNob3dMYWJlbDogYnV0dG9uLlNob3dMYWJlbCxcclxuICAgICAgICAgICAgICBjb2xvcjogYnV0dG9uLkNvbG9yXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gb2YoYnV0dG9uQ21kKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFRyZWVMaXN0Q29sdW1ucyhmaWVsZHM6IEFycmF5PFpGaWVsZD4sIGJ1dHRvbnM6IGFueSkge1xyXG4gICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5WYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLnNldFRyZWVMaXN0Q29sdW1ucyhmaWVsZC5WYWx1ZSwgYnV0dG9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShmaWVsZC5ncmlkQ29sVmlzaWJsZSBhcyBzdHJpbmcsIHRoaXMuZ3JvdXApID09PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKGZpZWxkLlR5cGUgPT09IFwiemJ1dHRvbnNcIikge1xyXG4gICAgICAgICAgdGhpcy5pbnNlcnRDb21tYW5kKGZpZWxkLCBidXR0b25zKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGZpZWxkLkFnZ3JlZ2F0ZVR5cGUgJiYgZmllbGQuQWdncmVnYXRlVHlwZSAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBsZXQgYWdncmVnYXRldGl0bGUgPSBcIlwiO1xyXG4gICAgICAgICAgICBpZiAoZmllbGQuQWdncmVnYXRlVHlwZSA9PT0gXCJzdW1cIikge1xyXG4gICAgICAgICAgICAgIGFnZ3JlZ2F0ZXRpdGxlID0gXCJUb3RhbDogXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgYWdncmVnYXRldGl0bGUgPSBmaWVsZC5BZ2dyZWdhdGVUeXBlICsgXCI6IFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0Rm9vdGVyVGVtcGxhdGVGaWVsZChmaWVsZCwgYWdncmVnYXRldGl0bGUpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWdncmVnYXRlLnB1c2goe1xyXG4gICAgICAgICAgICAgIGZpZWxkOiBmaWVsZC5WYWx1ZSxcclxuICAgICAgICAgICAgICBhZ2dyZWdhdGU6IGZpZWxkLkFnZ3JlZ2F0ZVR5cGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmluc2VydEZpZWxkKGZpZWxkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRGaWVsZChmaWVsZDogWkZpZWxkKSB7XHJcbiAgICBsZXQgY29sVGl0bGUgPSBmaWVsZC5OYW1lO1xyXG4gICAgaWYgKGNvbFRpdGxlLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgY29sVGl0bGUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoY29sVGl0bGUudG9TdHJpbmcoKSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sdW1ucy5wdXNoKFxyXG4gICAgICBPYmplY3QuYXNzaWduKGZpZWxkLCB7XHJcbiAgICAgICAgZmllbGQ6IGZpZWxkLlZhbHVlLFxyXG4gICAgICAgIHRpdGxlOiBjb2xUaXRsZSxcclxuICAgICAgICB3aWR0aDogZmllbGQud2lkdGgsXHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBmaWVsZFR5cGU6IGZpZWxkLlR5cGUsXHJcbiAgICAgICAgbmF2aWdhdGVUbzogZmllbGQuTmF2aWdhdGVUbyxcclxuICAgICAgICBjb21tYW5kOiBudWxsLFxyXG4gICAgICAgIGNsYXNzOiBmaWVsZC5EaXZDbGFzcyxcclxuICAgICAgICBmb290ZXJUZW1wbGF0ZTogZmFsc2UsXHJcbiAgICAgICAgYWdncmVnYXRlVHlwZTogXCJcIixcclxuICAgICAgICBhZ2dyZWdhdGVUaXRsZTogXCJcIixcclxuICAgICAgICBpc0VkaXRhYmxlSW5HcmlkOiBmaWVsZC5Jc0VkaXRhYmxlSW5HcmlkXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRDb21tYW5kKGZpZWxkOiBaRmllbGQsIGJ1dHRvbnM6IGFueSkge1xyXG4gICAgbGV0IGNvbFRpdGxlID0gZmllbGQuTmFtZTtcclxuICAgIGlmIChjb2xUaXRsZS50b1N0cmluZygpLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgIGNvbFRpdGxlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGNvbFRpdGxlLnRvU3RyaW5nKCksIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmNvbHVtbnMucHVzaCh7XHJcbiAgICAgIGZpZWxkOiBmaWVsZC5OYW1lLFxyXG4gICAgICB0aXRsZTogY29sVGl0bGUsXHJcbiAgICAgIHdpZHRoOiBmaWVsZC53aWR0aCxcclxuICAgICAgdmlzaWJsZTogZmllbGQuVmlzaWJsZSxcclxuICAgICAgZmllbGRUeXBlOiBmaWVsZC5UeXBlLFxyXG4gICAgICBuYXZpZ2F0ZVRvOiBmaWVsZC5OYXZpZ2F0ZVRvLFxyXG4gICAgICBjb21tYW5kOiBidXR0b25zLmZpbHRlcih4ID0+IHguemJ1dHRvbnNOYW1lID09PSBmaWVsZC5WYWx1ZSksXHJcbiAgICAgIGNsYXNzOiBmaWVsZC5EaXZDbGFzcyxcclxuICAgICAgZm9vdGVyVGVtcGxhdGU6IGZhbHNlLFxyXG4gICAgICBhZ2dyZWdhdGVUeXBlOiBcIlwiLFxyXG4gICAgICBhZ2dyZWdhdGVUaXRsZTogXCJcIixcclxuICAgICAgaXNFZGl0YWJsZUluR3JpZDogZmllbGQuSXNFZGl0YWJsZUluR3JpZFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluc2VydEZvb3RlclRlbXBsYXRlRmllbGQoZmllbGQ6IFpGaWVsZCwgYWdncmVnYXRldGl0bGU6IHN0cmluZykge1xyXG4gICAgbGV0IGNvbFRpdGxlID0gZmllbGQuTmFtZTtcclxuICAgIGlmIChjb2xUaXRsZS50b1N0cmluZygpLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgIGNvbFRpdGxlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGNvbFRpdGxlLnRvU3RyaW5nKCksIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmNvbHVtbnMucHVzaCh7XHJcbiAgICAgIGZpZWxkOiBmaWVsZC5WYWx1ZSxcclxuICAgICAgdGl0bGU6IGNvbFRpdGxlLFxyXG4gICAgICB3aWR0aDogZmllbGQud2lkdGgsXHJcbiAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgIGZpZWxkVHlwZTogZmllbGQuVHlwZSxcclxuICAgICAgbmF2aWdhdGVUbzogZmllbGQuTmF2aWdhdGVUbyxcclxuICAgICAgY29tbWFuZDogbnVsbCxcclxuICAgICAgY2xhc3M6IGZpZWxkLkRpdkNsYXNzLFxyXG4gICAgICBmb290ZXJUZW1wbGF0ZTogdHJ1ZSxcclxuICAgICAgYWdncmVnYXRlVHlwZTogZmllbGQuQWdncmVnYXRlVHlwZSxcclxuICAgICAgYWdncmVnYXRlVGl0bGU6IGFnZ3JlZ2F0ZXRpdGxlLFxyXG4gICAgICBpc0VkaXRhYmxlSW5HcmlkOiBmaWVsZC5Jc0VkaXRhYmxlSW5HcmlkXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YUJpbmRpbmcoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmICh0aGlzLmRhdGEuRGF0YVNvdXJjZSkge1xyXG4gICAgICByZXR1cm4gb2YoWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5EYXRhU291cmNlLCB0aGlzLmdyb3VwKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzb3VyY2VVcmwgPSB0aGlzLmdldFJlc291Y2VVUkwoKTtcclxuICAgIGlmIChyZXNvdXJjZVVybCkge1xyXG4gICAgICByZXR1cm4gdGhpcy53ZWJhcGlTZXJ2aWNlLmdldEFwaShyZXNvdXJjZVVybCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2YoW10pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSZXNvdWNlVVJMKCkge1xyXG4gICAgcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShcclxuICAgICAgdGhpcy5kYXRhLlJlc291cmNlVVJMLFxyXG4gICAgICB0aGlzLmdyb3VwXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2VsbENsaWNrSGFuZGxlcihldmVudDogQ2VsbENsaWNrRXZlbnQpIHtcclxuICAgIGlmICghIXRoaXMuZGF0YS5EaXNhYmxlQ2VsbENsaWNrSGFuZGxlcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJjZWxsQ2xpY2sgZXZlbnQ6IFwiLCBldmVudCk7XHJcbiAgICBpZiAodGhpcy5kYXRhLk9uSXRlbUNsaWNrKSB7XHJcbiAgICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLk9uSXRlbUNsaWNrKTtcclxuICAgICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lZGl0TW9kZWwoZXZlbnQuZGF0YUl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlZGl0TW9kZWwoZGF0YUl0ZW06IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwpIHtcclxuICAgICAgLy8gVE9ETzpcclxuICAgICAgLy8gZGVidWdnZXI7XHJcbiAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmRhdGEuRWRpdENsaWNrVVJMLCBkYXRhSXRlbS5JZF0pO1xyXG4gICAgICBjb25zdCBjb2xGaWVsZHMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLkNvbHVtbkZpZWxkcywgdGhpcy5ncm91cCk7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiBcInpncmlkLWNlbGxDbGlja1wiLFxyXG4gICAgICAgIHRhcmdldDogdGhpcy5kYXRhLkVkaXRDbGlja1VSTCxcclxuICAgICAgICBkYXRhOiBkYXRhSXRlbSxcclxuICAgICAgICBjb2x1bW5GaWVsZHMkOiBjb2xGaWVsZHNcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZ3JvdXAuZWRpdE1vZGVsVVJMLCBkYXRhSXRlbS5JZCwgJ2VkaXQnXSwge1xyXG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGVcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdQYXRoOiAnLCB0aGlzLmFjdGl2YXRlZFJvdXRlWydfcm91dGVyU3RhdGUnXS5zbmFwc2hvdC51cmwpO1xyXG4gICAgICAvLyBjb25zdCBjdXJyZW50UGF0aCA9IHRoaXMuYWN0aXZhdGVkUm91dGVbJ19yb3V0ZXJTdGF0ZSddLnNuYXBzaG90LnVybDtcclxuICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2N1cnJlbnRQYXRoICsgXCIvXCIgKyB0aGlzLmdyb3VwLmVkaXRNb2RlbFVSTCwgZGF0YUl0ZW0uSWRdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUNvbnRyb2xzRm9ySW5saW5lRWRpdChkYXRhOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY29sdW1ucy5maW5kKGMgPT4gYy5pc0VkaXRhYmxlSW5HcmlkKSA9PT0gdW5kZWZpbmVkIHx8ICFkYXRhKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgPSBbXTtcclxuXHJcbiAgICBkYXRhLmZvckVhY2goZCA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW1zID0ge307XHJcbiAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5zLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgaXRlbXNbYy5maWVsZF0gPSBuZXcgRm9ybUNvbnRyb2woZFtjLmZpZWxkXSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGl0ZW1zKTtcclxuICAgICAgdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzLnB1c2goeyBJZDogZFt0aGlzLmlkRmllbGRdLCBGZzogZm9ybUdyb3VwIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5saW5lRmllbGQodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb2x1bW5zLmZpbmQoeCA9PiB4LlZhbHVlID09PSB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5saW5lRm9ybShkYXRhSXRlbTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzLmZpbmQoeCA9PiB4LklkID09PSBkYXRhSXRlbVt0aGlzLmlkRmllbGRdKS5GZztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0lubGluZUVkaXRDb2xWaXNpYmxlKGRhdGFJdGVtOiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICBjb25zdCBpc1Zpc2libGUgPSBkYXRhSXRlbVtgJHtjb2x1bW4uVmFsdWV9X1Zpc2libGVgXTtcclxuICAgIHJldHVybiAhKGlzVmlzaWJsZSA9PT0gZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm1hdChjb2w6IGFueSkge1xyXG4gICAgbGV0IGZvcm1hdCA9IFwiXCI7XHJcbiAgICBjb25zdCBmb3JtYXRBcnIgPSBjb2wuRm9ybWF0T3B0aW9ucy5zcGxpdChcIi5cIilcclxuICAgIGxldCBkcCA9IDA7XHJcblxyXG4gICAgaWYgKGZvcm1hdEFyci5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGRwID0gZm9ybWF0QXJyWzFdLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZHAgIT09IDApIHtcclxuICAgICAgZm9ybWF0ID0gXCIxLlwiICsgZHAgKyBcIi1cIiArIGRwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0SGVhZGVyVGV4dChjb2x1bW5OYW1lOiBzdHJpbmcsIG5ld0hlYWRlclRpdGxlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGdyaWRDb2x1bW5zID0gdGhpcy5vcHRpb25zLmNvbHVtbnM7XHJcbiAgICBncmlkQ29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoY29sLk5hbWUgPT09IGNvbHVtbk5hbWUgfHwgY29sLmZpZWxkID09PSBjb2x1bW5OYW1lKSB7XHJcbiAgICAgICAgY29sLnRpdGxlID0gbmV3SGVhZGVyVGl0bGU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvbENsYXNzKGRhdGFJdGVtOiBhbnksIGNvbDogYW55KSB7XHJcbiAgICBsZXQgbmdDbGFzcyA9IFwiZ3JpZENlbGwgXCI7XHJcbiAgICBpZiAoY29sLmZpZWxkVHlwZSA9PT0gJ251bWJlcicgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ2N1cnJlbmN5JyB8fCBjb2wuZmllbGRUeXBlID09PSAnem51bWVyaWMnKSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gXCJyaWdodEFsaWduZWQgXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGFJdGVtW2NvbC5maWVsZCArICdfQ2xhc3MnXSkge1xyXG4gICAgICBuZ0NsYXNzICs9IGRhdGFJdGVtW2NvbC5maWVsZCArICdfQ2xhc3MnXSArIFwiIFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wuQ2xhc3MpIHtcclxuICAgICAgbmdDbGFzcyArPSBjb2wuQ2xhc3MgKyBcIiBcIjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmdDbGFzcztcclxuICB9XHJcblxyXG4gIHNldEdyaWRJc0xvYWRpbmcodHJpZ2dlcmVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRyaWdnZXJlZDtcclxuICB9XHJcblxyXG4gIG9uRmlsdGVyQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnp0cmVlbGlzdCkge1xyXG4gICAgICAvLyB0byBiZSBpbXBsZW1lbnQuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1hcEZpbHRlck9wZXJhdG9yKG9wZXJhdG9yOiBhbnkpIHtcclxuICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcclxuICAgICAgY2FzZSBcImVxXCI6XHJcbiAgICAgICAgcmV0dXJuIFwiZXFcIjtcclxuICAgICAgY2FzZSBcIm5lcVwiOlxyXG4gICAgICAgIHJldHVybiBcIm5lcVwiO1xyXG4gICAgICBjYXNlIFwibHRcIjpcclxuICAgICAgICByZXR1cm4gXCJsdFwiO1xyXG4gICAgICBjYXNlIFwibHRlXCI6XHJcbiAgICAgICAgcmV0dXJuIFwibHRlXCI7XHJcbiAgICAgIGNhc2UgXCJndFwiOlxyXG4gICAgICAgIHJldHVybiBcImd0XCI7XHJcbiAgICAgIGNhc2UgXCJndGVcIjpcclxuICAgICAgICByZXR1cm4gXCJndGVcIjtcclxuICAgICAgY2FzZSBcInN0YXJ0c3dpdGhcIjpcclxuICAgICAgICByZXR1cm4gXCJzdGFydHN3aXRoXCI7XHJcbiAgICAgIGNhc2UgXCJlbmRzd2l0aFwiOlxyXG4gICAgICAgIHJldHVybiBcImVuZHN3aXRoXCI7XHJcbiAgICAgIGNhc2UgXCJpc251bGxcIjpcclxuICAgICAgICByZXR1cm4gXCJpc251bGxcIjtcclxuICAgICAgY2FzZSBcImlzbm90bnVsbFwiOlxyXG4gICAgICAgIHJldHVybiBcImlzbm90bnVsbFwiO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBcIj09XCI7XHJcbiAgICAgIC8vIGVxLCBuZXEsIGlzbnVsbCwgaXNub3RudWxsLCBlbmRzd2l0aCwgc3RhcnRzd2l0aFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbHRlcmFibGUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzb3J0YWJsZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpXCIgc3R5bGU9XCJtYXJnaW46IDEwcHggMCA2cHggMDtcIj5cclxuICA8ZGl2ICpuZ0lmPVwiZGF0YS5UaXRsZVwiIGNsYXNzPVwidHJlZWxpc3RUaXRsZVwiPnt7ZGF0YS5UaXRsZX19PC9kaXY+XHJcbiAgPGtlbmRvLXRyZWVsaXN0IFtrZW5kb1RyZWVMaXN0RmxhdEJpbmRpbmddPVwiZGF0YVNvdXJjZVwiIFtuZ1N0eWxlXT1cImdldEdyaWRTdHlsZSgpXCIgW2lkRmllbGRdPVwib3B0aW9ucy5pZEZpZWxkXCIgW3BhcmVudElkRmllbGRdPVwib3B0aW9ucy5wYXJlbnRJZEZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgKGNlbGxDbGljayk9XCJjZWxsQ2xpY2tIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwib3B0aW9ucy5zb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtyZXNpemFibGVdPVwib3B0aW9ucy5yZXNpemFibGVcIlxyXG4gICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtyZW9yZGVyYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51XT1cIm9wdGlvbnMuY29sdW1uTWVudVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzY3JvbGxhYmxlXT1cIm9wdGlvbnMuc2Nyb2xsYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFthZ2dyZWdhdGVdPVwib3B0aW9ucy5hZ2dyZWdhdGVcIlxyXG4gICAgICAgICAgICAgICAgICBbcGFnZWFibGVdPVwib3B0aW9ucy5wYWdlQWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJkYXRhLlBhZ2VTaXplXCJcclxuICAgICAgICAgICAgICAgICAgW2luaXRpYWxseUV4cGFuZGVkXT1cImRhdGEuRGVmYXVsdENvbGxhcHNlID09PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIGtlbmRvVHJlZUxpc3RFeHBhbmRhYmxlXHJcbiAgICAgICAgICAgICAgICAgIHRyZWVsaXN0PlxyXG5cclxuICAgIDwhLS1cclxuICAgICAgW2ZpbHRlcmFibGVdPVwib3B0aW9ucy5maWx0ZXJhYmxlXCJcclxuICAgIFtyZW9yZGVyYWJsZV09XCJvcHRpb25zLnJlc2l6YWJsZVwiXHJcbiAgICAgIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIG9wdGlvbnMuY29sdW1uczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICA8a2VuZG8tdHJlZWxpc3QtY29sdW1uICpuZ0lmPVwiIWNvbC5jb21tYW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sLmNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXhwYW5kYWJsZV09XCJpPT09MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImNvbC50aXRsZSB8fCBjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCJjb2wud2lkdGggfHwgMjUwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJmaWx0ZXJhYmxlKGNvbC5lbmFibGVGaWx0ZXJpbmcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwic29ydGFibGUoY29sLmVuYWJsZVNvcnRpbmcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIiFpc0NvbHVtbnNWaXNpYmxlKGNvbC52aXNpYmxlKVwiPlxyXG4gICAgICAgIDxkaXYgW25nU3dpdGNoXT1cInRydWVcIj5cclxuICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeSdcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pudW1lcmljJ1wiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9UcmVlTGlzdEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtbnVtZXJpYy1maWx0ZXItY2VsbCBbY29sdW1uXT1cImNvbHVtblwiIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJlcVwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgIDwva2VuZG8tdHJlZWxpc3QtbnVtZXJpYy1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiY29sLmZpZWxkVHlwZSA9PSAnemRhdGUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6ZGF0ZXRpbWUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5maWx0ZXJCeURhdGVSYW5nZSA9PT0gdHJ1ZVwiPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVMaXN0RmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiIG9wZXJhdG9yPVwibHRlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGF0ZS1yYW5nZS1maWx0ZXItY2VsbCBjbGFzcz1cImRhdGUtcmFuZ2UtZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2wuZmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1sdC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1sdC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWd0ZS1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1ndGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPC9kYXRlLXJhbmdlLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLmZpbHRlckJ5RGF0ZVJhbmdlID09PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVMaXN0RmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWRhdGUtZmlsdGVyLWNlbGwgW2NvbHVtbl09XCJjb2x1bW5cIiBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwibHRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItbHRlLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWx0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1ndC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1ndC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tdHJlZWxpc3QtZGF0ZS1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9UcmVlTGlzdEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3Qtc3RyaW5nLWZpbHRlci1jZWxsIFtjb2x1bW5dPVwiY29sdW1uXCIgW2ZpbHRlcl09XCJmaWx0ZXJcIiBvcGVyYXRvcj1cImNvbnRhaW5zXCI+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWNvbnRhaW5zLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWNvbnRhaW5zLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1lcS1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItbmVxLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLW5lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItc3RhcnRzd2l0aC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1zdGFydHN3aXRoLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1lbmRzd2l0aC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1lbmRzd2l0aC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICA8L2tlbmRvLXRyZWVsaXN0LXN0cmluZy1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVMaXN0Q2VsbFRlbXBsYXRlIGxldC1kYXRhSXRlbSBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiIGxldC1jZWxsQ29udGV4dD1cImNlbGxDb250ZXh0XCI+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA3cHggMDtkaXNwbGF5OiBpbmxpbmU7XCIgW3N0eWxlLmNvbG9yXT1cIighIWRhdGFJdGVtLkNvbG9yID8gW2RhdGFJdGVtLkNvbG9yXSA6ICdibGFjaycpXCIgKm5nSWY9XCIhY29sLm5hdmlnYXRlVG8gJiYgY29sLmlzRWRpdGFibGVJbkdyaWQgIT09IHRydWVcIiBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkVHlwZVwiIFtuZ0NsYXNzXT1cImdldENvbENsYXNzKGRhdGFJdGVtLCBjb2wpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGUnXCI+XHJcbiAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6ICdkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenNob3J0ZGF0ZSdcIj5cclxuICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ01NTSB5eXl5JyB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3p1aWRhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpyaWdodDtcIj57eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyIH19IDwvZGl2PlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246cmlnaHQ7XCI+e3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlcjogJzEuMi0yJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInem51bWVyaWMnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246cmlnaHQ7XCI+e3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCkgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3VybCdcIiBzdHlsZT1cImNvbG9yOiBibHVlOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCI+XHJcbiAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXX19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogN3B4IDA7ZGlzcGxheTogaW5saW5lO1wiIFtzdHlsZS5jb2xvcl09XCIoISFkYXRhSXRlbS5Db2xvciA/IFtkYXRhSXRlbS5Db2xvcl0gOiAnYmxhY2snKVwiICpuZ0lmPVwiIWNvbC5uYXZpZ2F0ZVRvICYmIGNvbC5pc0VkaXRhYmxlSW5HcmlkID09PSB0cnVlICYmIGlzSW5saW5lRWRpdENvbFZpc2libGUoZGF0YUl0ZW0sIGNvbClcIiBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkVHlwZVwiIFtuZ0NsYXNzXT1cImdldENvbENsYXNzKGRhdGFJdGVtLCBjb2wpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XHJcbiAgICAgICAgICAgICAgPGFwcC16Y2hlY2tib3ggc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBbZGF0YV09XCJnZXRJbmxpbmVGaWVsZChjb2wuVmFsdWUpXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZ2V0SW5saW5lRm9ybShkYXRhSXRlbSlcIiAoY2xpY2spPVwiYnV0dG9uQ2xpY2soY29sLCBjZWxsQ29udGV4dClcIj48L2FwcC16Y2hlY2tib3g+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dWlzZWxlY3RtdWx0aXBsZSdcIj5cclxuICAgICAgICAgICAgICA8YXBwLXpzZWxlY3RtdWx0aXBsZSBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIFtkYXRhXT1cImdldElubGluZUZpZWxkKGNvbC5maWVsZClcIiBbZ3JvdXBdPVwiZ3JvdXBcIiBbZm9ybV09XCJnZXRJbmxpbmVGb3JtKGRhdGFJdGVtKVwiPjwvYXBwLXpzZWxlY3RtdWx0aXBsZT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRhcmVhJ1wiPlxyXG4gICAgICAgICAgICAgIDxhcHAtenRleHRhcmVhIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgW2RhdGFdPVwiZ2V0SW5saW5lRmllbGQoY29sLlZhbHVlKVwiIFtncm91cF09XCJncm91cFwiIFtmb3JtXT1cImdldElubGluZUZvcm0oZGF0YUl0ZW0pXCI+PC9hcHAtenRleHRhcmVhPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJbJ3p1aWRhdGV0aW1lJywnemRhdGUnLCd6ZGF0ZXRpbWUnLCd6c2hvcnRkYXRlJ10uaW5jbHVkZXMoY29sLmZpZWxkVHlwZSkgPyBjb2wuZmllbGRUeXBlIDogJydcIj5cclxuICAgICAgICAgICAgICA8YXBwLXpkYXRldGltZSBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIFtkYXRhXT1cImdldElubGluZUZpZWxkKGNvbC5WYWx1ZSlcIiBbZ3JvdXBdPVwiZ3JvdXBcIiBbZm9ybV09XCJnZXRJbmxpbmVGb3JtKGRhdGFJdGVtKVwiPjwvYXBwLXpkYXRldGltZT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiEhY29sLm5hdmlnYXRlVG9cIiAoY2xpY2spPVwib25OYXZpZ2F0ZVRvKCRldmVudCwgY29sLCBkYXRhSXRlbSwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgPGlvbi1idXR0b24gY29sb3I9XCJsaWdodFwiIHNpemU9XCJzbWFsbFwiPlxyXG4gICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICA8IS0tIDxpb24taWNvbiBzbG90PSBcImVuZFwiIG5hbWU9XCJhcnJvdy1mb3J3YXJkXCI+PC9pb24taWNvbj4gLS0+XHJcbiAgICAgICAgICAgICAgPGZhLWljb24gc2xvdD1cImVuZFwiIFtpY29uXT1cIidhcnJvdy1yaWdodCdcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgIDwvc3Bhbj4gXHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJjb2wuZm9vdGVyVGVtcGxhdGVcIiBrZW5kb1RyZWVMaXN0Rm9vdGVyVGVtcGxhdGUgbGV0LWFnZ3JlZ2F0ZXM9XCJhZ2dyZWdhdGVzXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvbC5uYXZpZ2F0ZVRvXCIgW25nU3dpdGNoXT1cImNvbC5maWVsZFR5cGVcIiBbbmdDbGFzc109XCJ7J3JpZ2h0QWxpZ25lZCc6IGNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeSd9XCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgIDxiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVRpdGxlIHwgdGl0bGVjYXNlIH19ICB7eyBhZ2dyZWdhdGVzW2NvbC5maWVsZF1bY29sLmFnZ3JlZ2F0ZVR5cGVdIHwgbnVtYmVyIH19XHJcbiAgICAgICAgICAgICAgPC9iPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCI+XHJcbiAgICAgICAgICAgICAgPGI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVGl0bGUgfCB0aXRsZWNhc2UgfX0gIHt7IGFnZ3JlZ2F0ZXNbY29sLmZpZWxkXVtjb2wuYWdncmVnYXRlVHlwZV0gfCBudW1iZXI6ICcxLjItMicgfX1cclxuICAgICAgICAgICAgICA8L2I+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwva2VuZG8tdHJlZWxpc3QtY29sdW1uPlxyXG4gICAgICA8a2VuZG8tdHJlZWxpc3QtY29tbWFuZC1jb2x1bW4gKm5nSWY9XCIhIWNvbC5jb21tYW5kXCIgW3RpdGxlXT1cImNvbC50aXRsZSB8fCBjb2wuZmllbGRcIiBbd2lkdGhdPVwiY29sLndpZHRoIHx8IDI1MFwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVMaXN0Q2VsbFRlbXBsYXRlIGxldC1jZWxsQ29udGV4dD1cImNlbGxDb250ZXh0XCI+XHJcbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImNvbC5jbGFzc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBjb2wyIG9mIGNvbC5jb21tYW5kOyBpbmRleCBhcyBpXCIgdHlwZT1cImJ1dHRvblwiIFtrZW5kb1RyZWVMaXN0RWRpdENvbW1hbmRdPVwiY2VsbENvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2wyLnRleHRcIiAoY2xpY2spPVwiYnV0dG9uQ2xpY2soY29sMiwgY2VsbENvbnRleHQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImlzQnV0dG9uSGlkZGVuKGNvbDIsIGNlbGxDb250ZXh0KVwiPlxyXG4gICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImNvbDIuaWNvblwiIFtzdHlsZS5jb2xvcl09XCIoISFjb2wyLmNvbG9yID8gW2NvbDIuY29sb3JdIDogJ2JsYWNrJylcIj5cclxuICAgICAgICAgICAgICA8L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbDIuU2hvd0xhYmVsID09PSB1bmRlZmluZWQgfHwgY29sMi5TaG93TGFiZWxcIj57e2NvbDIudGV4dH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9rZW5kby10cmVlbGlzdC1jb21tYW5kLWNvbHVtbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwhLS0gPGtlbmRvLXRyZWVsaXN0LWNvbW1hbmQtY29sdW1uIHdpZHRoPVwiMTQwXCI+XHJcbiAgICAgICA8bmctdGVtcGxhdGUga2VuZG9UcmVlTGlzdENlbGxUZW1wbGF0ZSBsZXQtaXNOZXc9XCJpc05ld1wiIGxldC1jZWxsQ29udGV4dD1cImNlbGxDb250ZXh0XCI+XHJcbiAgICAgICAgICAgPGJ1dHRvbiBba2VuZG9UcmVlTGlzdEFkZENvbW1hbmRdPVwiY2VsbENvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgaWNvbj1cImZpbHRlci1hZGQtZXhwcmVzc2lvblwiIHRpdGxlPVwiQWRkIENoaWxkXCI+XHJcbiAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgPGJ1dHRvbiBba2VuZG9UcmVlTGlzdENhbmNlbENvbW1hbmRdPVwiY2VsbENvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgaWNvbj1cImNhbmNlbFwiIHRpdGxlPVwie3sgaXNOZXcgPyAnRGlzY2FyZCBjaGFuZ2VzJyA6ICdDYW5jZWwnIH19XCI+XHJcbiAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICA8L2tlbmRvLXRyZWVsaXN0LWNvbW1hbmQtY29sdW1uPiAtLT5cclxuICA8L2tlbmRvLXRyZWVsaXN0PlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -77,9 +77,9 @@ export class ZtrendcardComponent {
|
|
|
77
77
|
options.value = ZComponentHelper.getGroupEvalValue.call(this, field.Value) || options.value;
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
-
ZtrendcardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
81
|
-
ZtrendcardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
82
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
80
|
+
ZtrendcardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZtrendcardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
81
|
+
ZtrendcardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ZtrendcardComponent, selector: "app-ztrendcard", inputs: { data: "data", group: "group", form: "form" }, ngImport: i0, template: "<div *ngIf=\"!isLoading && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\" style=\"text-align: center;\">\r\n <ion-grid>\r\n <ion-row>\r\n <ion-col>\r\n <!-- <div class=\"trend-btn ion-activatable ripple-parent\" [routerLink]=\"[item.URL]\"> -->\r\n <div class=\"trend-btn ion-activatable ripple-parent\">\r\n <ion-label>\r\n <ion-grid style=\"width: 100%;\">\r\n <ion-row>\r\n <ion-col class=\"trend-btn-icon\" sizeLg=\"4\" sizeXs=\"4\" sizeMd=\"4\" sizeXl=\"4\">\r\n <fa-icon [icon]=\"options.icon\" [style.color]=\"options.color\"></fa-icon>\r\n </ion-col>\r\n <ion-col class=\"trend-btn-value\" sizeLg=\"4\" sizeXs=\"4\" sizeMd=\"4\" sizeXl=\"4\">\r\n <ion-label>{{ options.value }}</ion-label><br/>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-label>\r\n <ion-label class=\"trend-btn-label\">{{ options.title }}</ion-label>\r\n <ion-ripple-effect></ion-ripple-effect>\r\n </div>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n</div>\r\n<div style=\"padding-bottom: 10px;\"></div>\r\n\r\n\r\n\r\n\r\n\r\n", styles: [".trend-btn{display:flex;flex-flow:column;justify-content:center;align-items:stretch;background-color:#fff;padding:8px 0;border:1px solid #ccc;border-radius:5px;min-height:100px;cursor:pointer}.ripple-parent{position:relative;overflow:hidden}.trend-btn-label{text-align:right;font-size:14px;padding-right:20px}.trend-btn-value{text-align:right;zoom:2;vertical-align:middle;padding-top:10px}.trend-btn-icon{text-align:center;zoom:2.5}\n"], components: [{ type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { type: i1.IonRow, selector: "ion-row" }, { type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { type: i2.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i1.IonRippleEffect, selector: "ion-ripple-effect", inputs: ["type"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
82
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZtrendcardComponent, decorators: [{
|
|
83
83
|
type: Component,
|
|
84
84
|
args: [{ selector: 'app-ztrendcard', template: "<div *ngIf=\"!isLoading && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\" style=\"text-align: center;\">\r\n <ion-grid>\r\n <ion-row>\r\n <ion-col>\r\n <!-- <div class=\"trend-btn ion-activatable ripple-parent\" [routerLink]=\"[item.URL]\"> -->\r\n <div class=\"trend-btn ion-activatable ripple-parent\">\r\n <ion-label>\r\n <ion-grid style=\"width: 100%;\">\r\n <ion-row>\r\n <ion-col class=\"trend-btn-icon\" sizeLg=\"4\" sizeXs=\"4\" sizeMd=\"4\" sizeXl=\"4\">\r\n <fa-icon [icon]=\"options.icon\" [style.color]=\"options.color\"></fa-icon>\r\n </ion-col>\r\n <ion-col class=\"trend-btn-value\" sizeLg=\"4\" sizeXs=\"4\" sizeMd=\"4\" sizeXl=\"4\">\r\n <ion-label>{{ options.value }}</ion-label><br/>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-label>\r\n <ion-label class=\"trend-btn-label\">{{ options.title }}</ion-label>\r\n <ion-ripple-effect></ion-ripple-effect>\r\n </div>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n</div>\r\n<div style=\"padding-bottom: 10px;\"></div>\r\n\r\n\r\n\r\n\r\n\r\n", styles: [".trend-btn{display:flex;flex-flow:column;justify-content:center;align-items:stretch;background-color:#fff;padding:8px 0;border:1px solid #ccc;border-radius:5px;min-height:100px;cursor:pointer}.ripple-parent{position:relative;overflow:hidden}.trend-btn-label{text-align:right;font-size:14px;padding-right:20px}.trend-btn-value{text-align:right;zoom:2;vertical-align:middle;padding-top:10px}.trend-btn-icon{text-align:center;zoom:2.5}\n"] }]
|
|
85
85
|
}], ctorParameters: function () { return []; }, propDecorators: { data: [{
|
|
@@ -190,9 +190,9 @@ export class ZudfComponent {
|
|
|
190
190
|
this.formField = [];
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
|
-
ZudfComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
194
|
-
ZudfComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
195
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
193
|
+
ZudfComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZudfComponent, deps: [{ token: i1.AlertService }, { token: i1.AuthService }, { token: i1.FieldService }, { token: i1.ResourceApiService }, { token: i1.ToastService }, { token: i1.WebApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
194
|
+
ZudfComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ZudfComponent, selector: "app-zudf", inputs: { data: "data", group: "group", form: "form" }, ngImport: i0, template: "<div style=\"padding: 15px\" *ngIf=\"data.Title && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\" class=\"ion-row\">\r\n <kendo-card *ngIf=\"data.Title\" width=\"100%\" >\r\n <kendo-card-header >\r\n <div>\r\n <ion-label class=\"card-header-title\">{{data.Title}}</ion-label>\r\n </div>\r\n </kendo-card-header>\r\n <kendo-card-body>\r\n <div class=\"ion-row\">\r\n <app-zformcontrol [ngClass]=\"group[field.isVisibleField] ? field.DivClass : ((field.Visible === true) ? field.DivClass : 'flex-hide')\"\r\n *ngFor=\"let field of formField | divzlayout: data.zlayout\"\r\n [field]=\"field\"\r\n [group]=\"group\"\r\n [form]=\"form\"\r\n id=\"zudf{{data.Name}}-{{field.Type}}-{{field.Name}}\">\r\n </app-zformcontrol>\r\n </div>\r\n </kendo-card-body> \r\n </kendo-card>\r\n</div>\r\n\r\n<div *ngIf=\"!data.Title && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\" class=\"ion-row\">\r\n <app-zformcontrol [ngClass]=\"group[field.isVisibleField] ? field.DivClass : ((field.Visible === true) ? field.DivClass : 'flex-hide')\"\r\n *ngFor=\"let field of formField | divzlayout: data.zlayout\"\r\n [field]=\"field\"\r\n [group]=\"group\"\r\n [form]=\"form\"\r\n id=\"zudf{{data.Name}}-{{field.Type}}-{{field.Name}}\">\r\n </app-zformcontrol>\r\n</div>\r\n", styles: [".card-header-title{color:#fff!important;font-weight:500;font-size:11pt}\n"], components: [{ type: i2.CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { type: i2.CardHeaderComponent, selector: "kendo-card-header" }, { type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { type: i2.CardBodyComponent, selector: "kendo-card-body" }, { type: i4.ZformcontrolComponent, selector: "app-zformcontrol", inputs: ["field", "group", "form"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "divzlayout": i6.DivzLayout } });
|
|
195
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZudfComponent, decorators: [{
|
|
196
196
|
type: Component,
|
|
197
197
|
args: [{ selector: 'app-zudf', template: "<div style=\"padding: 15px\" *ngIf=\"data.Title && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\" class=\"ion-row\">\r\n <kendo-card *ngIf=\"data.Title\" width=\"100%\" >\r\n <kendo-card-header >\r\n <div>\r\n <ion-label class=\"card-header-title\">{{data.Title}}</ion-label>\r\n </div>\r\n </kendo-card-header>\r\n <kendo-card-body>\r\n <div class=\"ion-row\">\r\n <app-zformcontrol [ngClass]=\"group[field.isVisibleField] ? field.DivClass : ((field.Visible === true) ? field.DivClass : 'flex-hide')\"\r\n *ngFor=\"let field of formField | divzlayout: data.zlayout\"\r\n [field]=\"field\"\r\n [group]=\"group\"\r\n [form]=\"form\"\r\n id=\"zudf{{data.Name}}-{{field.Type}}-{{field.Name}}\">\r\n </app-zformcontrol>\r\n </div>\r\n </kendo-card-body> \r\n </kendo-card>\r\n</div>\r\n\r\n<div *ngIf=\"!data.Title && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\" class=\"ion-row\">\r\n <app-zformcontrol [ngClass]=\"group[field.isVisibleField] ? field.DivClass : ((field.Visible === true) ? field.DivClass : 'flex-hide')\"\r\n *ngFor=\"let field of formField | divzlayout: data.zlayout\"\r\n [field]=\"field\"\r\n [group]=\"group\"\r\n [form]=\"form\"\r\n id=\"zudf{{data.Name}}-{{field.Type}}-{{field.Name}}\">\r\n </app-zformcontrol>\r\n</div>\r\n", styles: [".card-header-title{color:#fff!important;font-weight:500;font-size:11pt}\n"] }]
|
|
198
198
|
}], ctorParameters: function () { return [{ type: i1.AlertService }, { type: i1.AuthService }, { type: i1.FieldService }, { type: i1.ResourceApiService }, { type: i1.ToastService }, { type: i1.WebApiService }]; }, propDecorators: { data: [{
|
|
@@ -5,9 +5,9 @@ export class ZunknownComponent {
|
|
|
5
5
|
constructor() { }
|
|
6
6
|
ngOnInit() { }
|
|
7
7
|
}
|
|
8
|
-
ZunknownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
9
|
-
ZunknownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
8
|
+
ZunknownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZunknownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9
|
+
ZunknownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ZunknownComponent, selector: "app-zunknown", inputs: { data: "data", group: "group", form: "form" }, ngImport: i0, template: "<p>\r\n Unknown field Type => {{ data.Type}} >> {{data.Name}}\r\n</p>\r\n", styles: [""] });
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZunknownComponent, decorators: [{
|
|
11
11
|
type: Component,
|
|
12
12
|
args: [{ selector: 'app-zunknown', template: "<p>\r\n Unknown field Type => {{ data.Type}} >> {{data.Name}}\r\n</p>\r\n", styles: [""] }]
|
|
13
13
|
}], ctorParameters: function () { return []; }, propDecorators: { data: [{
|