@dignite-ng/expand.dynamic-form 3.1.0 → 3.1.1
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.
|
@@ -494,11 +494,11 @@ export class TreeConfigComponent {
|
|
|
494
494
|
});
|
|
495
495
|
}
|
|
496
496
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: TreeConfigComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ToPinyinService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
497
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: TreeConfigComponent, selector: "df-tree-config", inputs: { type: "type", selected: "selected", Entity: "Entity" }, viewQueries: [{ propertyName: "submitclick", first: true, predicate: ["submitclick"], descendants: true, static: true }, { propertyName: "nodeModalSubmit", first: true, predicate: ["nodeModalSubmit"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"formEntity\">\r\n <div formGroupName=\"formConfiguration\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{'AbpDynamicForm::Nodes' | abpLocalization}}</label>\r\n <button class=\"btn btn-sm btn-dark soft ms-2 float-end\" type=\"button\"\r\n (click.stop)=\"addNodeBtn()\">{{'AbpDynamicForm::AddNode' |\r\n abpLocalization}}</button>\r\n <abp-tree [nodes]=\"nodes\" [checkable]=\"false\" (dropOver)=\"dropOver($event)\"\r\n (nzExpandChange)=\"nzExpandChange($event)\" [expandedKeys]=\"anExpandedNode\" [draggable]=\"true\">\r\n <ng-template #menu let-node>\r\n <button ngbDropdownItem (click.stop)=\"editItemBtn(node)\"><i\r\n class=\" me-1 fa fa-pencil\"></i>{{'AbpU::Edit' |\r\n abpLocalization}}</button>\r\n <button ngbDropdownItem (click.stop)=\"createChildItemBtn(node)\"><i\r\n class=\" me-1 fa fa-plus\"></i>{{'AbpDynamicForm::AddSubMenuItem' |\r\n abpLocalization}}</button>\r\n <button ngbDropdownItem (click.stop)=\"deleteMenuItemBtn(node)\"><i\r\n class=\" me-1 fa fa-remove\"></i>{{'AbpU::Delete' |\r\n abpLocalization}}</button>\r\n </ng-template>\r\n <ng-template abpTreeNodeTemplate let-node>\r\n <div (click)=\"toggleNodeChecked($event, node)\">\r\n <input type=\"checkbox\" [checked]=\"node.origin?.isChecked\"\r\n [attr.data-indeterminate]=\"hasChildrenChecked(node)\" class=\"form-check-input me-2\">\r\n {{node.title}}\r\n </div>\r\n </ng-template>\r\n <ng-template abpTreeExpandedIconTemplate let-node let-origin=\"origin\">\r\n <i aria-hidden=\"true\" *ngIf=\"node.children.length>0\">\r\n <ng-container *ngTemplateOutlet=\"node.isExpanded ? minusIcon : plusIcon\"></ng-container></i>\r\n </ng-template>\r\n\r\n <ng-template #minusIcon>\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"\r\n fill-rule=\"evenodd\" clip-rule=\"evenodd\">\r\n <path\r\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm-6.5 10h13v1h-13v-1z\" />\r\n </svg>\r\n </ng-template>\r\n\r\n <ng-template #plusIcon>\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"\r\n fill-rule=\"evenodd\" clip-rule=\"evenodd\">\r\n <path\r\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm.5 10h6v1h-6v6h-1v-6h-6v-1h6v-6h1v6z\" />\r\n </svg>\r\n </ng-template>\r\n </abp-tree>\r\n <div *ngIf=\"nodes.length === 0\" class=\"text-muted mt-2\">{{'AbpDynamicForm::PleaseAddNode' |\r\n abpLocalization}}</div>\r\n <div *ngIf=\"TreeOptions?.errors?.required\" class=\"invalid-feedback \">\r\n {{'AbpValidation::ThisFieldIsRequired.' | abpLocalization: 'Nodes'}}\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <div class=\"form-check form-check-inline\">\r\n <input class=\"form-check-input\" type=\"checkbox\" (change)=\"toggleMultiple($event)\"\r\n formControlName=\"TreeView.Multiple\" id=\"Multiple\">\r\n <label class=\"form-check-label\" for=\"Multiple\">\r\n {{'AbpDynamicForm::Multiple' | abpLocalization}}\r\n </label>\r\n </div>\r\n </div>\r\n <button type=\"submit\" (abpInit)=\"submitclick?.nativeElement?.click()\" style=\"display: none;\"\r\n #submitclick></button>\r\n </div>\r\n</form>\r\n\r\n\r\n<!-- [options]=\"{ size: CurrentSelectionTableControlName==='Matrix'?'xl':'' ,scrollable:false }\" (visibleChange)=\"tableSelectVisibleChange($event)\"-->\r\n<abp-modal [(visible)]=\"isVisible\" [busy]=\"modalBusy\">\r\n <ng-template #abpHeader>\r\n <h3>{{isCreateChild ? ('AbpDynamicForm::AddSubMenuItem' | abpLocalization) : (selectTree ? ('AbpUi::Edit' |\r\n abpLocalization) : ('Cms::New' | abpLocalization))}}</h3>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <ng-template #loaderRef>\r\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\r\n </ng-template>\r\n <ng-container *ngIf=\"nodeForm; else loaderRef\">\r\n <form class=\"sites-modal-form\" #myForm=\"ngForm\" [formGroup]=\"nodeForm\" (submit)=\"createOrEditSave()\">\r\n <button type=\"submit\" #nodeModalSubmit style=\"display: none\"></button>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{ 'AbpDynamicForm::SelectListItemText' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" [placeholder]=\"\"\r\n (blur)=\"disPlayNameInputBlur($event)\" />\r\n </div>\r\n <!-- <div class=\"mb-3\">\r\n <label class=\"form-label\">{{ 'AbpDynamicForm::SelectListItemValue' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"key\" [placeholder]=\"\" />\r\n </div> -->\r\n <div class=\"mb-3\">\r\n <div class=\"form-check form-check-inline\">\r\n <input class=\"form-check-input\" type=\"checkbox\" formControlName=\"isChecked\" id=\"isSelected\">\r\n <label class=\"form-check-label\" for=\"isSelected\">\r\n {{'AbpDynamicForm::Selected' | abpLocalization}}\r\n </label>\r\n </div>\r\n </div>\r\n </form>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\r\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!nodeForm.valid\"\r\n (abpClick)=\"nodeModalSubmit.nativeElement.click()\">{{'AbpUi::Save' |\r\n abpLocalization}}</abp-button>\r\n </ng-template>\r\n</abp-modal>", styles: ["input[type=checkbox]:indeterminate{opacity:.5}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i4.InitDirective, selector: "[abpInit]", outputs: ["abpInit"] }, { kind: "directive", type: i4.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "directive", type: i5.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i5.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i6.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i6.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i6.ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: i7.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i7.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { kind: "directive", type: i8.TreeNodeTemplateDirective, selector: "[abpTreeNodeTemplate],[abp-tree-node-template]" }, { kind: "directive", type: i8.ExpandedIconTemplateDirective, selector: "[abpTreeExpandedIconTemplate],[abp-tree-expanded-icon-template]" }, { kind: "component", type: i8.TreeComponent, selector: "abp-tree", inputs: ["noAnimation", "draggable", "checkable", "checkStrictly", "checkedKeys", "nodes", "expandedKeys", "selectedNode", "changeCheckboxWithNode", "isNodeSelected", "beforeDrop"], outputs: ["checkedKeysChange", "expandedKeysChange", "selectedNodeChange", "dropOver", "nzExpandChange"] }, { kind: "pipe", type: i4.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
497
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: TreeConfigComponent, selector: "df-tree-config", inputs: { type: "type", selected: "selected", Entity: "Entity" }, viewQueries: [{ propertyName: "submitclick", first: true, predicate: ["submitclick"], descendants: true, static: true }, { propertyName: "nodeModalSubmit", first: true, predicate: ["nodeModalSubmit"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"formEntity\">\r\n <div formGroupName=\"formConfiguration\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{'AbpDynamicForm::Nodes' | abpLocalization}}</label>\r\n <button class=\"btn btn-sm btn-dark soft ms-2 float-end\" type=\"button\"\r\n (click.stop)=\"addNodeBtn()\">{{'AbpDynamicForm::AddNode' |\r\n abpLocalization}}</button>\r\n <abp-tree [nodes]=\"nodes\" [checkable]=\"false\" (dropOver)=\"dropOver($event)\"\r\n (nzExpandChange)=\"nzExpandChange($event)\" [expandedKeys]=\"anExpandedNode\" [draggable]=\"true\">\r\n <ng-template #menu let-node>\r\n <button ngbDropdownItem (click.stop)=\"editItemBtn(node)\"><i\r\n class=\" me-1 fa fa-pencil\"></i>{{'AbpUi::Edit' |\r\n abpLocalization}}</button>\r\n <button ngbDropdownItem (click.stop)=\"createChildItemBtn(node)\"><i\r\n class=\" me-1 fa fa-plus\"></i>{{'AbpDynamicForm::AddSubNode' |\r\n abpLocalization}}</button>\r\n <button ngbDropdownItem (click.stop)=\"deleteMenuItemBtn(node)\"><i\r\n class=\" me-1 fa fa-remove\"></i>{{'AbpUi::Delete' |\r\n abpLocalization}}</button>\r\n </ng-template>\r\n <ng-template abpTreeNodeTemplate let-node>\r\n <div (click)=\"toggleNodeChecked($event, node)\">\r\n <input type=\"checkbox\" [checked]=\"node.origin?.isChecked\"\r\n [attr.data-indeterminate]=\"hasChildrenChecked(node)\" class=\"form-check-input me-2\">\r\n {{node.title}}\r\n </div>\r\n </ng-template>\r\n <ng-template abpTreeExpandedIconTemplate let-node let-origin=\"origin\">\r\n <i aria-hidden=\"true\" *ngIf=\"node.children.length>0\">\r\n <ng-container *ngTemplateOutlet=\"node.isExpanded ? minusIcon : plusIcon\"></ng-container></i>\r\n </ng-template>\r\n\r\n <ng-template #minusIcon>\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"\r\n fill-rule=\"evenodd\" clip-rule=\"evenodd\">\r\n <path\r\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm-6.5 10h13v1h-13v-1z\" />\r\n </svg>\r\n </ng-template>\r\n\r\n <ng-template #plusIcon>\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"\r\n fill-rule=\"evenodd\" clip-rule=\"evenodd\">\r\n <path\r\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm.5 10h6v1h-6v6h-1v-6h-6v-1h6v-6h1v6z\" />\r\n </svg>\r\n </ng-template>\r\n </abp-tree>\r\n <div *ngIf=\"nodes.length === 0\" class=\"text-muted mt-2\">{{'AbpDynamicForm::PleaseAddNode' |\r\n abpLocalization}}</div>\r\n <div *ngIf=\"TreeOptions?.errors?.required\" class=\"invalid-feedback \">\r\n {{'AbpValidation::ThisFieldIsRequired.' | abpLocalization: 'Nodes'}}\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <div class=\"form-check form-check-inline\">\r\n <input class=\"form-check-input\" type=\"checkbox\" (change)=\"toggleMultiple($event)\"\r\n formControlName=\"TreeView.Multiple\" id=\"Multiple\">\r\n <label class=\"form-check-label\" for=\"Multiple\">\r\n {{'AbpDynamicForm::Multiple' | abpLocalization}}\r\n </label>\r\n </div>\r\n </div>\r\n <button type=\"submit\" (abpInit)=\"submitclick?.nativeElement?.click()\" style=\"display: none;\"\r\n #submitclick></button>\r\n </div>\r\n</form>\r\n\r\n\r\n<!-- [options]=\"{ size: CurrentSelectionTableControlName==='Matrix'?'xl':'' ,scrollable:false }\" (visibleChange)=\"tableSelectVisibleChange($event)\"-->\r\n<abp-modal [(visible)]=\"isVisible\" [busy]=\"modalBusy\">\r\n <ng-template #abpHeader>\r\n <h3>{{isCreateChild ? ('AbpDynamicForm::AddSubNode' | abpLocalization) : (selectTree ? ('AbpUi::Edit' |\r\n abpLocalization) : ('Cms::New' | abpLocalization))}}</h3>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <ng-template #loaderRef>\r\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\r\n </ng-template>\r\n <ng-container *ngIf=\"nodeForm; else loaderRef\">\r\n <form class=\"sites-modal-form\" #myForm=\"ngForm\" [formGroup]=\"nodeForm\" (submit)=\"createOrEditSave()\">\r\n <button type=\"submit\" #nodeModalSubmit style=\"display: none\"></button>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{ 'AbpDynamicForm::NodeItemText' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" [placeholder]=\"\"\r\n (blur)=\"disPlayNameInputBlur($event)\" />\r\n </div>\r\n <!-- <div class=\"mb-3\">\r\n <label class=\"form-label\">{{ 'AbpDynamicForm::SelectListItemValue' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"key\" [placeholder]=\"\" />\r\n </div> -->\r\n <div class=\"mb-3\">\r\n <div class=\"form-check form-check-inline\">\r\n <input class=\"form-check-input\" type=\"checkbox\" formControlName=\"isChecked\" id=\"isSelected\">\r\n <label class=\"form-check-label\" for=\"isSelected\">\r\n {{'AbpDynamicForm::Selected' | abpLocalization}}\r\n </label>\r\n </div>\r\n </div>\r\n </form>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\r\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!nodeForm.valid\"\r\n (abpClick)=\"nodeModalSubmit.nativeElement.click()\">{{'AbpUi::Save' |\r\n abpLocalization}}</abp-button>\r\n </ng-template>\r\n</abp-modal>", styles: ["input[type=checkbox]:indeterminate{opacity:.5}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i4.InitDirective, selector: "[abpInit]", outputs: ["abpInit"] }, { kind: "directive", type: i4.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "directive", type: i5.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i5.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i6.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i6.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i6.ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: i7.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i7.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { kind: "directive", type: i8.TreeNodeTemplateDirective, selector: "[abpTreeNodeTemplate],[abp-tree-node-template]" }, { kind: "directive", type: i8.ExpandedIconTemplateDirective, selector: "[abpTreeExpandedIconTemplate],[abp-tree-expanded-icon-template]" }, { kind: "component", type: i8.TreeComponent, selector: "abp-tree", inputs: ["noAnimation", "draggable", "checkable", "checkStrictly", "checkedKeys", "nodes", "expandedKeys", "selectedNode", "changeCheckboxWithNode", "isNodeSelected", "beforeDrop"], outputs: ["checkedKeysChange", "expandedKeysChange", "selectedNodeChange", "dropOver", "nzExpandChange"] }, { kind: "pipe", type: i4.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
498
498
|
}
|
|
499
499
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: TreeConfigComponent, decorators: [{
|
|
500
500
|
type: Component,
|
|
501
|
-
args: [{ selector: 'df-tree-config', template: "<form [formGroup]=\"formEntity\">\r\n <div formGroupName=\"formConfiguration\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{'AbpDynamicForm::Nodes' | abpLocalization}}</label>\r\n <button class=\"btn btn-sm btn-dark soft ms-2 float-end\" type=\"button\"\r\n (click.stop)=\"addNodeBtn()\">{{'AbpDynamicForm::AddNode' |\r\n abpLocalization}}</button>\r\n <abp-tree [nodes]=\"nodes\" [checkable]=\"false\" (dropOver)=\"dropOver($event)\"\r\n (nzExpandChange)=\"nzExpandChange($event)\" [expandedKeys]=\"anExpandedNode\" [draggable]=\"true\">\r\n <ng-template #menu let-node>\r\n <button ngbDropdownItem (click.stop)=\"editItemBtn(node)\"><i\r\n class=\" me-1 fa fa-pencil\"></i>{{'
|
|
501
|
+
args: [{ selector: 'df-tree-config', template: "<form [formGroup]=\"formEntity\">\r\n <div formGroupName=\"formConfiguration\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{'AbpDynamicForm::Nodes' | abpLocalization}}</label>\r\n <button class=\"btn btn-sm btn-dark soft ms-2 float-end\" type=\"button\"\r\n (click.stop)=\"addNodeBtn()\">{{'AbpDynamicForm::AddNode' |\r\n abpLocalization}}</button>\r\n <abp-tree [nodes]=\"nodes\" [checkable]=\"false\" (dropOver)=\"dropOver($event)\"\r\n (nzExpandChange)=\"nzExpandChange($event)\" [expandedKeys]=\"anExpandedNode\" [draggable]=\"true\">\r\n <ng-template #menu let-node>\r\n <button ngbDropdownItem (click.stop)=\"editItemBtn(node)\"><i\r\n class=\" me-1 fa fa-pencil\"></i>{{'AbpUi::Edit' |\r\n abpLocalization}}</button>\r\n <button ngbDropdownItem (click.stop)=\"createChildItemBtn(node)\"><i\r\n class=\" me-1 fa fa-plus\"></i>{{'AbpDynamicForm::AddSubNode' |\r\n abpLocalization}}</button>\r\n <button ngbDropdownItem (click.stop)=\"deleteMenuItemBtn(node)\"><i\r\n class=\" me-1 fa fa-remove\"></i>{{'AbpUi::Delete' |\r\n abpLocalization}}</button>\r\n </ng-template>\r\n <ng-template abpTreeNodeTemplate let-node>\r\n <div (click)=\"toggleNodeChecked($event, node)\">\r\n <input type=\"checkbox\" [checked]=\"node.origin?.isChecked\"\r\n [attr.data-indeterminate]=\"hasChildrenChecked(node)\" class=\"form-check-input me-2\">\r\n {{node.title}}\r\n </div>\r\n </ng-template>\r\n <ng-template abpTreeExpandedIconTemplate let-node let-origin=\"origin\">\r\n <i aria-hidden=\"true\" *ngIf=\"node.children.length>0\">\r\n <ng-container *ngTemplateOutlet=\"node.isExpanded ? minusIcon : plusIcon\"></ng-container></i>\r\n </ng-template>\r\n\r\n <ng-template #minusIcon>\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"\r\n fill-rule=\"evenodd\" clip-rule=\"evenodd\">\r\n <path\r\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm-6.5 10h13v1h-13v-1z\" />\r\n </svg>\r\n </ng-template>\r\n\r\n <ng-template #plusIcon>\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"\r\n fill-rule=\"evenodd\" clip-rule=\"evenodd\">\r\n <path\r\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm.5 10h6v1h-6v6h-1v-6h-6v-1h6v-6h1v6z\" />\r\n </svg>\r\n </ng-template>\r\n </abp-tree>\r\n <div *ngIf=\"nodes.length === 0\" class=\"text-muted mt-2\">{{'AbpDynamicForm::PleaseAddNode' |\r\n abpLocalization}}</div>\r\n <div *ngIf=\"TreeOptions?.errors?.required\" class=\"invalid-feedback \">\r\n {{'AbpValidation::ThisFieldIsRequired.' | abpLocalization: 'Nodes'}}\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <div class=\"form-check form-check-inline\">\r\n <input class=\"form-check-input\" type=\"checkbox\" (change)=\"toggleMultiple($event)\"\r\n formControlName=\"TreeView.Multiple\" id=\"Multiple\">\r\n <label class=\"form-check-label\" for=\"Multiple\">\r\n {{'AbpDynamicForm::Multiple' | abpLocalization}}\r\n </label>\r\n </div>\r\n </div>\r\n <button type=\"submit\" (abpInit)=\"submitclick?.nativeElement?.click()\" style=\"display: none;\"\r\n #submitclick></button>\r\n </div>\r\n</form>\r\n\r\n\r\n<!-- [options]=\"{ size: CurrentSelectionTableControlName==='Matrix'?'xl':'' ,scrollable:false }\" (visibleChange)=\"tableSelectVisibleChange($event)\"-->\r\n<abp-modal [(visible)]=\"isVisible\" [busy]=\"modalBusy\">\r\n <ng-template #abpHeader>\r\n <h3>{{isCreateChild ? ('AbpDynamicForm::AddSubNode' | abpLocalization) : (selectTree ? ('AbpUi::Edit' |\r\n abpLocalization) : ('Cms::New' | abpLocalization))}}</h3>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <ng-template #loaderRef>\r\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\r\n </ng-template>\r\n <ng-container *ngIf=\"nodeForm; else loaderRef\">\r\n <form class=\"sites-modal-form\" #myForm=\"ngForm\" [formGroup]=\"nodeForm\" (submit)=\"createOrEditSave()\">\r\n <button type=\"submit\" #nodeModalSubmit style=\"display: none\"></button>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{ 'AbpDynamicForm::NodeItemText' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" [placeholder]=\"\"\r\n (blur)=\"disPlayNameInputBlur($event)\" />\r\n </div>\r\n <!-- <div class=\"mb-3\">\r\n <label class=\"form-label\">{{ 'AbpDynamicForm::SelectListItemValue' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"key\" [placeholder]=\"\" />\r\n </div> -->\r\n <div class=\"mb-3\">\r\n <div class=\"form-check form-check-inline\">\r\n <input class=\"form-check-input\" type=\"checkbox\" formControlName=\"isChecked\" id=\"isSelected\">\r\n <label class=\"form-check-label\" for=\"isSelected\">\r\n {{'AbpDynamicForm::Selected' | abpLocalization}}\r\n </label>\r\n </div>\r\n </div>\r\n </form>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\r\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!nodeForm.valid\"\r\n (abpClick)=\"nodeModalSubmit.nativeElement.click()\">{{'AbpUi::Save' |\r\n abpLocalization}}</abp-button>\r\n </ng-template>\r\n</abp-modal>", styles: ["input[type=checkbox]:indeterminate{opacity:.5}\n"] }]
|
|
502
502
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ToPinyinService }], propDecorators: { type: [{
|
|
503
503
|
type: Input
|
|
504
504
|
}], selected: [{
|
|
@@ -512,4 +512,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
|
|
|
512
512
|
type: ViewChild,
|
|
513
513
|
args: ['nodeModalSubmit', { static: false }]
|
|
514
514
|
}] } });
|
|
515
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHluYW1pYy1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3RyZWUvdHJlZS1jb25maWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHluYW1pYy1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3RyZWUvdHJlZS1jb25maWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBZSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7QUFPeEQsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixZQUFvQixFQUFlLEVBQVMsZUFBK0I7UUFBdkQsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUFTLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQTZCbkUsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBOEV4QyxZQUFZO1FBQ1oscUJBQXFCO1FBQ3JCLHlGQUF5RjtRQUN6RiwrQ0FBK0M7UUFDL0MsSUFBSTtRQUVKLFlBQVk7UUFDWixVQUFLLEdBQVUsRUFBRSxDQUFDO1FBRWxCLFlBQVk7UUFDWixtQkFBYyxHQUFVLEVBQUUsQ0FBQztRQWtCM0IsYUFBYTtRQUNiLGtCQUFhLEdBQWtCLEtBQUssQ0FBQztRQUNy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USxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLE1BQU0sQ0FBQztZQUM3RSxRQUFRLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBamhCVSxtQkFBbUI7a0dBQW5CLG1CQUFtQix1VkNYaEMsdzROQTRHWTs7MkZEakdDLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxnQkFBZ0I7OEdBU2YsSUFBSTtzQkFEZCxLQUFLO2dCQVFLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBUUssTUFBTTtzQkFEaEIsS0FBSztnQkFXc0MsV0FBVztzQkFBdEQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXdITyxlQUFlO3NCQUEvRCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgVmlld0NoaWxkLCBBZnRlclZpZXdDaGVja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyZWVDb25maWcgfSBmcm9tICcuL3RyZWUtY29uZmlnJztcclxuaW1wb3J0IHtUb1BpbnlpblNlcnZpY2V9IGZyb20gJ0BkaWduaXRlLW5nL2V4cGFuZC5jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGYtdHJlZS1jb25maWcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLWNvbmZpZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RyZWUtY29uZmlnLmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyZWVDb25maWdDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixwcml2YXRlIHRvUGlueWluU2VydmljZTpUb1BpbnlpblNlcnZpY2UpIHt9XHJcbiAgLyoq6KGo5Y2V5o6n5Lu257G75Z6LICovXHJcbiAgX3R5cGU6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgdHlwZSh2OiBhbnkpIHtcclxuICAgIHRoaXMuX3R5cGUgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoq6YCJ5oup55qE6KGo5Y2V5L+h5oGvICovXHJcbiAgX3NlbGVjdGVkOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkKHY6IGFueSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWQgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoq6KGo5Y2V5a6e5L2TICovXHJcbiAgZm9ybUVudGl0eTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBFbnRpdHkodjogRm9ybUdyb3VwKSB7XHJcbiAgICB0aGlzLmZvcm1FbnRpdHkgPSB2O1xyXG4gICAgdGhpcy5kYXRhTG9hZGVkKCk7XHJcbiAgfVxyXG4gIGdldCBmb3JtQ29uZmlndXJhdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1FbnRpdHk/LmdldCgnZm9ybUNvbmZpZ3VyYXRpb24nKSBhcyBGb3JtR3JvdXA7XHJcbiAgfVxyXG4gIGdldCBUcmVlT3B0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Db25maWd1cmF0aW9uLmNvbnRyb2xzWydUcmVlVmlldy5Ob2RlcyddIGFzIEZvcm1BcnJheTtcclxuICB9XHJcbiAgQFZpZXdDaGlsZCgnc3VibWl0Y2xpY2snLCB7IHN0YXRpYzogdHJ1ZSB9KSBzdWJtaXRjbGljazogRWxlbWVudFJlZjtcclxuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgYXN5bmMgZGF0YUxvYWRlZCgpIHtcclxuICAgIGlmICh0aGlzLmZvcm1FbnRpdHkgJiYgdGhpcy5fdHlwZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLkFmdGVySW5pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKirlop7liqDpgInpobkgKi9cclxuICAvLyBhZGRUcmVlT3B0aW9ucygpIHtcclxuICAvLyAgIHRoaXMuVHJlZU9wdGlvbnMucHVzaChcclxuICAvLyAgICAgbmV3IEZvcm1Hcm91cCh7XHJcbiAgLy8gICAgICAgVGV4dDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAvLyAgICAgICBWYWx1ZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAvLyAgICAgICBTZWxlY3RlZDogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcclxuICAvLyAgICAgICBDaGlsZHJlbjogbmV3IEZvcm1BcnJheShbXSksXHJcbiAgLy8gICAgIH0pLFxyXG4gIC8vICAgKTtcclxuICAvLyB9XHJcbiAgLy8gLyoq5Yig6Zmk5p+Q5Liq6YCJ6aG5ICovXHJcbiAgLy8gZGVsZXRlVHJlZU9wdGlvbnMoaW5kZXgpIHtcclxuICAvLyAgIHRoaXMuVHJlZU9wdGlvbnMucmVtb3ZlQXQoaW5kZXgpO1xyXG4gIC8vIH1cclxuXHJcbiAgQWZ0ZXJJbml0KCkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICB0aGlzLmZvcm1FbnRpdHk/LnNldENvbnRyb2woJ2Zvcm1Db25maWd1cmF0aW9uJywgdGhpcy5mYi5ncm91cChuZXcgVHJlZUNvbmZpZygpKSk7XHJcbiAgICAgIHRoaXMuVHJlZU9wdGlvbnM/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpXSk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTsgLy8g5omL5Yqo6Kem5Y+R5Y+Y5pu05qOA5rWLXHJcbiAgICAgIHRoaXMuc3VibWl0Y2xpY2s/Lm5hdGl2ZUVsZW1lbnQ/LmNsaWNrKCk7XHJcblxyXG4gICBcclxuICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkICYmIHRoaXMuX3NlbGVjdGVkLmZvcm1Db250cm9sTmFtZSA9PSB0aGlzLl90eXBlKSB7XHJcbiAgICAgICAgY29uc3QgdHJlZU5vZGVzID0gdGhpcy5fc2VsZWN0ZWQuZm9ybUNvbmZpZ3VyYXRpb25bJ1RyZWVWaWV3Lk5vZGVzJ107XHJcbiAgICAgICAgaWYgKHRyZWVOb2Rlcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLm5vZGVzID0gdGhpcy5jb252ZXJ0VHJlZU9wdGlvbnNUb05vZGVzKHRyZWVOb2Rlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN5bmNUcmVlT3B0aW9uc0Zyb21Ob2RlcygpO1xyXG4gICAgICAgIC8vIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLl9zZWxlY3RlZC5mb3JtQ29uZmlndXJhdGlvblsnVHJlZVZpZXcuTm9kZXMnXSkge1xyXG4gICAgICAgIC8vICAgZm9yIChjb25zdCBrZXkgaW4gZWxlbWVudCkge1xyXG4gICAgICAgIC8vICAgICBjb25zdCBpdGVtID0gZWxlbWVudFtrZXldO1xyXG4gICAgICAgIC8vICAgICBjb25zdCBjYXBpdGFsaXplZEtleSA9IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTtcclxuICAgICAgICAvLyAgICAgZWxlbWVudFtjYXBpdGFsaXplZEtleV0gPSBpdGVtO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgdGhpcy5hZGRUcmVlT3B0aW9ucygpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICB0aGlzLmZvcm1Db25maWd1cmF0aW9uLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgLi4udGhpcy5fc2VsZWN0ZWQuZm9ybUNvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gdGhpcy5hZGRUcmVlT3B0aW9ucygpO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOW9k+mAieaLqemhueeahOaWh+acrOWPkeeUn+WPmOWMluaXtu+8jOabtOaWsOWvueW6lOeahOWAvFxyXG4gICAqIEBwYXJhbSBldmVudCDovpPlhaXkuovku7blr7nosaFcclxuICAgKiBAcGFyYW0gaW5kZXgg6YCJ5oup6aG555qE57Si5byV5L2N572uXHJcbiAgICogQGRlc2NyaXB0aW9uIOWmguaenOmAieaLqemhueW3suaciVZhbHVl5YC85YiZ5LiN5aSE55CG77yM5ZCm5YiZ5bCG5Lit5paH5paH5pys6L2s5o2i5Li65ou86Z+z5L2c5Li6VmFsdWXlgLxcclxuICAgKi9cclxuICAvLyB0ZXh0Q2hhbmdlKGV2ZW50LCBpbmRleCkge1xyXG4gIC8vICAgY29uc3QgVHJlZU9wdGlvbnNJdGVtID0gdGhpcy5UcmVlT3B0aW9ucy5hdChpbmRleCk7XHJcbiAgLy8gICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAvLyAgIGlmIChUcmVlT3B0aW9uc0l0ZW0uZ2V0KCdWYWx1ZScpPy52YWx1ZSkgcmV0dXJuO1xyXG4gIC8vICAgVHJlZU9wdGlvbnNJdGVtLnBhdGNoVmFsdWUoe1xyXG4gIC8vICAgICBWYWx1ZTogc3RydWN0dXJlZENsb25lKHZhbHVlKSxcclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuICAgLyoq5a2X5q615qCH562+aW5wdXTlpLHljrvmoIfngrnnlJ/miJDlrZfmrrXlkI3lrZcgKi9cclxuICBkaXNQbGF5TmFtZUlucHV0Qmx1cihldmVudCkge1xyXG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICBjb25zdCBwaW55aW4gPSB0aGlzLnRvUGlueWluU2VydmljZS5nZXQodmFsdWUpO1xyXG4gICAgY29uc3QgbmFtZUlucHV0ID0gdGhpcy5ub2RlRm9ybS5nZXQoJ2tleScpO1xyXG4gICAgaWYgKG5hbWVJbnB1dC52YWx1ZSkgcmV0dXJuO1xyXG4gICAgbmFtZUlucHV0LnBhdGNoVmFsdWUocGlueWluKTtcclxuICB9XHJcblxyXG4gIC8qKuiwg+aVtOihqOagvOS9jee9riAqL1xyXG4gIC8vIGRyb3AoZXZlbnQ6IGFueSkge1xyXG4gIC8vICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuVHJlZU9wdGlvbnMuY29udHJvbHMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XHJcbiAgLy8gICB0aGlzLlRyZWVPcHRpb25zLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAvLyB9XHJcblxyXG4gIC8qKnRyZWXmlbDmja4gKi9cclxuICBub2RlczogYW55W10gPSBbXTtcclxuXHJcbiAgLyoq5bey5bGV5byA55qE6IqC54K5ICovXHJcbiAgYW5FeHBhbmRlZE5vZGU6IGFueVtdID0gW107XHJcblxyXG4gIC8qKueCueWHu+WxleW8gOagkeiKgueCueWbvuagh+inpuWPkSAqL1xyXG4gIG56RXhwYW5kQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCBhbkV4cGFuZGVkTm9kZSA9IHRoaXMuYW5FeHBhbmRlZE5vZGU7XHJcbiAgICBpZiAoYW5FeHBhbmRlZE5vZGUuaW5jbHVkZXMoZXZlbnQubm9kZS5rZXkpKSB7XHJcbiAgICAgIGFuRXhwYW5kZWROb2RlID0gYW5FeHBhbmRlZE5vZGUuZmlsdGVyKGtleSA9PiBrZXkgIT09IGV2ZW50Lm5vZGUua2V5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFuRXhwYW5kZWROb2RlLnB1c2goZXZlbnQubm9kZS5rZXkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hbkV4cGFuZGVkTm9kZSA9IGFuRXhwYW5kZWROb2RlO1xyXG4gIH1cclxuICBsb2codikge1xyXG4gICAgY29uc29sZS5sb2codiwgJzExMTExMTExMScpO1xyXG4gIH1cclxuXHJcbiAgLyoq5q2j5Zyo5pON5L2c55qE6IqC54K56aG5ICovXHJcbiAgc2VsZWN0VHJlZTogYW55O1xyXG4gIC8qKuaYr+WQpuWIm+W7uuWtkOiKgueCuSAqL1xyXG4gIGlzQ3JlYXRlQ2hpbGQ6IGJvb2xlYW4gfCBhbnkgPSBmYWxzZTtcclxuICAvKirmqKHmgIHmoYbnirbmgIEgKi9cclxuICBpc1Zpc2libGU6IGJvb2xlYW4gfCBhbnkgPSBmYWxzZTtcclxuXHJcbiAgLyoq55So5LqO56Gu5a6a5qih5oCB55qE57mB5b+Z54q25oCB5piv5ZCm5Li655yfICovXHJcbiAgbW9kYWxCdXN5OiBib29sZWFuIHwgYW55ID0gZmFsc2U7XHJcbiAgLyoq5Yib5bu66KGo5Y2VICovXHJcbiAgbm9kZUZvcm06IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcclxuICAvKirooajmoLzlt7LpgInmi6nmlbDmja4gKi9cclxuICBfdGFibGVTZWxlY3RlZDogYW55O1xyXG5cclxuICAvKirooajljZXmjqfku7bmqKHmnb8t5Yqo5oCB6LWL5YC86KGo5Y2V5o6n5Lu2ICovXHJcbiAgQFZpZXdDaGlsZCgnbm9kZU1vZGFsU3VibWl0JywgeyBzdGF0aWM6IGZhbHNlIH0pIG5vZGVNb2RhbFN1Ym1pdDogRWxlbWVudFJlZjtcclxuXHJcbiAgLyoq55Sf5oiQR1VJRCAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVHdWlkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKVxyXG4gIH1cclxuXHJcbiAgLyoq5Yib5bu66IqC54K5ICovXHJcbiAgYWRkTm9kZUJ0bigpIHtcclxuICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDcmVhdGVDaGlsZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RUcmVlID0gbnVsbDtcclxuICAgIHRoaXMubm9kZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgdGl0bGU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGtleTogW3RoaXMuZ2VuZXJhdGVHdWlkKCksIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBpc0NoZWNrZWQ6IFtmYWxzZV0sXHJcbiAgICAgIGNoaWxkcmVuOiBuZXcgRm9ybUFycmF5KFtdKSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvKirnvJbovpHoioLngrkgKi9cclxuICBlZGl0SXRlbUJ0bihub2RlOiBhbnkpIHtcclxuICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDcmVhdGVDaGlsZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RUcmVlID0gbm9kZTtcclxuICAgIHRoaXMubm9kZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgdGl0bGU6IFtub2RlLnRpdGxlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAga2V5OiBbbm9kZS5rZXksIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBpc0NoZWNrZWQ6IFtub2RlLm9yaWdpbj8uaXNDaGVja2VkID8/IGZhbHNlXSxcclxuICAgICAgY2hpbGRyZW46IG5ldyBGb3JtQXJyYXkoW10pLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKuWIm+W7uuWtkOiKgueCuSAqL1xyXG4gIGNyZWF0ZUNoaWxkSXRlbUJ0bihub2RlOiBhbnkpIHtcclxuICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDcmVhdGVDaGlsZCA9IHRydWU7XHJcbiAgICB0aGlzLnNlbGVjdFRyZWUgPSBub2RlO1xyXG4gICAgdGhpcy5ub2RlRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICB0aXRsZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAga2V5OiBbdGhpcy5nZW5lcmF0ZUd1aWQoKSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGlzQ2hlY2tlZDogW2ZhbHNlXSxcclxuICAgICAgY2hpbGRyZW46IG5ldyBGb3JtQXJyYXkoW10pLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKumHjee9ruaooeaAgeahhiAqL1xyXG4gIHJlc2V0TW9kYWwoKSB7XHJcbiAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NyZWF0ZUNoaWxkID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdFRyZWUgPSBudWxsO1xyXG4gIH1cclxuICAvKirliJvlu7rnvJbovpHkv53lrZggKi9cclxuICBjcmVhdGVPckVkaXRTYXZlKCkge1xyXG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5ub2RlRm9ybTtcclxuICAgIGNvbnN0IHsgc2VsZWN0VHJlZSwgaXNDcmVhdGVDaGlsZCwgbm9kZXMsIGFuRXhwYW5kZWROb2RlIH0gPSB0aGlzO1xyXG5cclxuICAgIGlmIChzZWxlY3RUcmVlKSB7XHJcbiAgICAgIGlmIChpc0NyZWF0ZUNoaWxkKSB7XHJcbiAgICAgICAgLy8g5Yib5bu65a2Q6IqC54K5XHJcbiAgICAgICAgdGhpcy5hZGRDaGlsZE5vZGUobm9kZXMsIHNlbGVjdFRyZWUua2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgLy8g6Ieq5Yqo5bGV5byA54i26IqC54K5XHJcbiAgICAgICAgaWYgKCFhbkV4cGFuZGVkTm9kZS5pbmNsdWRlcyhzZWxlY3RUcmVlLmtleSkpIHtcclxuICAgICAgICAgIHRoaXMuYW5FeHBhbmRlZE5vZGUgPSBbLi4uYW5FeHBhbmRlZE5vZGUsIHNlbGVjdFRyZWUua2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8g57yW6L6R6IqC54K5XHJcbiAgICAgICAgdGhpcy51cGRhdGVOb2RlKG5vZGVzLCBzZWxlY3RUcmVlLmtleSwgdmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyDliJvlu7rmoLnoioLngrlcclxuICAgICAgbm9kZXMucHVzaCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ub2RlcyA9IFsuLi5ub2Rlc107XHJcbiAgICB0aGlzLnN5bmNUcmVlT3B0aW9uc0Zyb21Ob2RlcygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5yZXNldE1vZGFsKCk7XHJcbiAgfVxyXG5cclxuICAvKirpgJLlvZLmt7vliqDlrZDoioLngrkgKi9cclxuICBwcml2YXRlIGFkZENoaWxkTm9kZShub2RlczogYW55W10sIHBhcmVudEtleTogc3RyaW5nLCBuZXdOb2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHBhcmVudEtleSkge1xyXG4gICAgICAgIGlmICghbm9kZS5jaGlsZHJlbikgbm9kZS5jaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgIG5vZGUuY2hpbGRyZW4ucHVzaChuZXdOb2RlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoICYmIHRoaXMuYWRkQ2hpbGROb2RlKG5vZGUuY2hpbGRyZW4sIHBhcmVudEtleSwgbmV3Tm9kZSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoq6YCS5b2S5pu05paw6IqC54K5ICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVOb2RlKG5vZGVzOiBhbnlbXSwgdGFyZ2V0S2V5OiBzdHJpbmcsIHVwZGF0ZWREYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIG5vZGUudGl0bGUgPSB1cGRhdGVkRGF0YS50aXRsZTtcclxuICAgICAgICBub2RlLmtleSA9IHVwZGF0ZWREYXRhLmtleTtcclxuICAgICAgICBub2RlLmlzQ2hlY2tlZCA9IHVwZGF0ZWREYXRhLmlzQ2hlY2tlZDtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoICYmIHRoaXMudXBkYXRlTm9kZShub2RlLmNoaWxkcmVuLCB0YXJnZXRLZXksIHVwZGF0ZWREYXRhKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKirliKDpmaToioLngrkgKi9cclxuICBkZWxldGVNZW51SXRlbUJ0bihub2RlOiBhbnkpIHtcclxuICAgIHRoaXMuZGVsZXRlTm9kZSh0aGlzLm5vZGVzLCBub2RlLmtleSk7XHJcbiAgICB0aGlzLm5vZGVzID0gWy4uLnRoaXMubm9kZXNdO1xyXG4gICAgdGhpcy5zeW5jVHJlZU9wdGlvbnNGcm9tTm9kZXMoKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKumAkuW9kuWIoOmZpOiKgueCuSAqL1xyXG4gIHByaXZhdGUgZGVsZXRlTm9kZShub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChub2Rlc1tpXS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZXNbaV0uY2hpbGRyZW4/Lmxlbmd0aCAmJiB0aGlzLmRlbGV0ZU5vZGUobm9kZXNbaV0uY2hpbGRyZW4sIHRhcmdldEtleSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoq5ZCM5q2lIG5vZGVzIOWIsCBUcmVlT3B0aW9ucyAqL1xyXG4gIHByaXZhdGUgc3luY1RyZWVPcHRpb25zRnJvbU5vZGVzKCkge1xyXG4gICAgdGhpcy5UcmVlT3B0aW9ucy5jbGVhcigpO1xyXG4gICAgY29uc3QgY2xlYW5lZE5vZGVzID0gdGhpcy5ub2Rlcy5tYXAobm9kZSA9PiB0aGlzLmNsZWFuTm9kZShub2RlKSk7XHJcbiAgICBjbGVhbmVkTm9kZXMuZm9yRWFjaChub2RlID0+IHtcclxuICAgICAgdGhpcy5UcmVlT3B0aW9ucy5wdXNoKHRoaXMuY3JlYXRlVHJlZUZvcm1Hcm91cChub2RlKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKumAkuW9kuWIm+W7uuagkeihqOWNlee7hCAqL1xyXG4gIHByaXZhdGUgY3JlYXRlVHJlZUZvcm1Hcm91cChub2RlOiBhbnkpOiBGb3JtR3JvdXAge1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBuZXcgRm9ybUFycmF5KFtdKTtcclxuICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGgpIHtcclxuICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKHRoaXMuY3JlYXRlVHJlZUZvcm1Hcm91cChjaGlsZCkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgVGV4dDogW25vZGUudGl0bGUgfHwgJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBWYWx1ZTogW25vZGUua2V5IHx8ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgU2VsZWN0ZWQ6IFtub2RlLmlzQ2hlY2tlZCA/PyBmYWxzZV0sXHJcbiAgICAgIENoaWxkcmVuOiBjaGlsZHJlbixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoq5riF55CG6IqC54K55Lit55qEIG5nLXpvcnJvIOWGhemDqOWtl+autSAqL1xyXG4gIHByaXZhdGUgY2xlYW5Ob2RlKG5vZGU6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCB7IHRpdGxlLCBrZXksIGlzQ2hlY2tlZCwgY2hpbGRyZW4gfSA9IG5vZGU7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0aXRsZSxcclxuICAgICAga2V5LFxyXG4gICAgICBpc0NoZWNrZWQsXHJcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbj8ubGVuZ3RoID8gY2hpbGRyZW4ubWFwKGNoaWxkID0+IHRoaXMuY2xlYW5Ob2RlKGNoaWxkKSkgOiBbXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKirlsIYgVHJlZU9wdGlvbnMg5pWw5o2u57uT5p6E6L2s5o2i5Li6IG5vZGVzIOaVsOaNrue7k+aehCAqL1xyXG4gIHByaXZhdGUgY29udmVydFRyZWVPcHRpb25zVG9Ob2Rlcyh0cmVlT3B0aW9uczogYW55W10pOiBhbnlbXSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHRyZWVPcHRpb25zKSB7XHJcbiAgICAgIHJlc3VsdC5wdXNoKHtcclxuICAgICAgICB0aXRsZTogb3B0aW9uLlRleHQsXHJcbiAgICAgICAga2V5OiBvcHRpb24uVmFsdWUsXHJcbiAgICAgICAgaXNDaGVja2VkOiBvcHRpb24uU2VsZWN0ZWQgPz8gZmFsc2UsXHJcbiAgICAgICAgY2hpbGRyZW46IG9wdGlvbi5DaGlsZHJlbj8ubGVuZ3RoID8gdGhpcy5jb252ZXJ0VHJlZU9wdGlvbnNUb05vZGVzKG9wdGlvbi5DaGlsZHJlbikgOiBbXSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoq6K6+572uICovXHJcbiAgdG9nZ2xlTXVsdGlwbGUoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IHRoaXMuZm9ybUNvbmZpZ3VyYXRpb24uY29udHJvbHNbJ1RyZWVWaWV3Lk11bHRpcGxlJ10gYXMgRm9ybUNvbnRyb2w7XHJcbiAgICBpZighaXNNdWx0aXBsZS52YWx1ZSl7XHJcbiAgICAgICB0aGlzLmNsZWFyQWxsQ2hlY2tlZCh0aGlzLm5vZGVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKuWIh+aNouiKgueCuemAieS4reeKtuaAgSAqL1xyXG4gIHRvZ2dsZU5vZGVDaGVja2VkKGV2ZW50OiBhbnksIG5vZGU6IGFueSkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBjb25zdCBpc011bHRpcGxlID0gdGhpcy5mb3JtQ29uZmlndXJhdGlvbi5jb250cm9sc1snVHJlZVZpZXcuTXVsdGlwbGUnXSBhcyBGb3JtQ29udHJvbDtcclxuICAgIGNvbnN0IG5ld0NoZWNrZWQgPSAhbm9kZS5vcmlnaW4/LmlzQ2hlY2tlZDtcclxuICAgIFxyXG4gICAgaWYgKCFpc011bHRpcGxlLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJBbGxDaGVja2VkKHRoaXMubm9kZXMpO1xyXG4gICAgICBpZiAobmV3Q2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuc2V0Tm9kZUNoZWNrZWRPbmx5KHRoaXMubm9kZXMsIG5vZGUua2V5LCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXROb2RlQ2hlY2tlZCh0aGlzLm5vZGVzLCBub2RlLmtleSwgbmV3Q2hlY2tlZCk7XHJcbiAgICAgIGlmIChuZXdDaGVja2VkKSB7XHJcbiAgICAgICAgdGhpcy5zZXRQYXJlbnROb2Rlc0NoZWNrZWQodGhpcy5ub2Rlcywgbm9kZS5rZXkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMubm9kZXMgPSBbLi4udGhpcy5ub2Rlc107XHJcbiAgICB0aGlzLnN5bmNUcmVlT3B0aW9uc0Zyb21Ob2RlcygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoq5riF6Zmk5omA5pyJ6IqC54K555qE6YCJ5Lit54q25oCBICovXHJcbiAgcHJpdmF0ZSBjbGVhckFsbENoZWNrZWQobm9kZXM6IGFueVtdKSB7XHJcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgbm9kZS5pc0NoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJBbGxDaGVja2VkKG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKirorr7nva7mjIflrproioLngrnnmoTpgInkuK3nirbmgIEgKi9cclxuICBwcml2YXRlIHNldE5vZGVDaGVja2VkKG5vZGVzOiBhbnlbXSwgdGFyZ2V0S2V5OiBzdHJpbmcsIGNoZWNrZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIG5vZGUuaXNDaGVja2VkID0gY2hlY2tlZDtcclxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnNldENoaWxkcmVuQ2hlY2tlZChub2RlLmNoaWxkcmVuLCBjaGVja2VkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCAmJiB0aGlzLnNldE5vZGVDaGVja2VkKG5vZGUuY2hpbGRyZW4sIHRhcmdldEtleSwgY2hlY2tlZCkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoq6YCS5b2S6K6+572u5omA5pyJ5a2Q6IqC54K555qE6YCJ5Lit54q25oCBICovXHJcbiAgcHJpdmF0ZSBzZXRDaGlsZHJlbkNoZWNrZWQoY2hpbGRyZW46IGFueVtdLCBjaGVja2VkOiBib29sZWFuKSB7XHJcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XHJcbiAgICAgIGNoaWxkLmlzQ2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICAgIGlmIChjaGlsZC5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDaGlsZHJlbkNoZWNrZWQoY2hpbGQuY2hpbGRyZW4sIGNoZWNrZWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKirpgInkuK3miYDmnInniLboioLngrkgKi9cclxuICBwcml2YXRlIHNldFBhcmVudE5vZGVzQ2hlY2tlZChub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBwYXJlbnQ6IGFueSA9IG51bGwpOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgIHBhcmVudC5pc0NoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZXRQYXJlbnROb2Rlc0NoZWNrZWQodGhpcy5ub2RlcywgcGFyZW50LmtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGggJiYgdGhpcy5zZXRQYXJlbnROb2Rlc0NoZWNrZWQobm9kZS5jaGlsZHJlbiwgdGFyZ2V0S2V5LCBub2RlKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKirku4Xorr7nva7mjIflrproioLngrnnmoTpgInkuK3nirbmgIHvvIzkuI3lvbHlk43lrZDoioLngrnlkozniLboioLngrkgKi9cclxuICBwcml2YXRlIHNldE5vZGVDaGVja2VkT25seShub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBjaGVja2VkOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgaWYgKG5vZGUua2V5ID09PSB0YXJnZXRLZXkpIHtcclxuICAgICAgICBub2RlLmlzQ2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCAmJiB0aGlzLnNldE5vZGVDaGVja2VkT25seShub2RlLmNoaWxkcmVuLCB0YXJnZXRLZXksIGNoZWNrZWQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gICAgLyoq5ouW5ou9ICovXHJcbiAgZHJvcE92ZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZHJhZ05vZGUgPSBldmVudC5kcmFnTm9kZTtcclxuICAgIGNvbnN0IHRhcmdldE5vZGUgPSBldmVudC5ub2RlO1xyXG4gICAgY29uc3QgcG9zID0gZXZlbnQucG9zO1xyXG5cclxuICAgIC8vIOenu+mZpOiiq+aLluaLveeahOiKgueCuVxyXG4gICAgY29uc3QgZHJhZ2dlZERhdGEgPSB0aGlzLnJlbW92ZU5vZGVCeUtleSh0aGlzLm5vZGVzLCBkcmFnTm9kZS5rZXkpO1xyXG4gICAgaWYgKCFkcmFnZ2VkRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIC8vIHBvczogMD3lhoXpg6gsIC0xPeS4iuaWuSwgMT3kuIvmlrlcclxuICAgIGlmIChwb3MgPT09IDApIHtcclxuICAgICAgLy8g5pS+5YWl55uu5qCH6IqC54K55YaF6YOo5L2c5Li65a2Q6IqC54K5XHJcbiAgICAgIHRoaXMuYWRkQ2hpbGROb2RlKHRoaXMubm9kZXMsIHRhcmdldE5vZGUua2V5LCBkcmFnZ2VkRGF0YSk7XHJcbiAgICAgIGlmICghdGhpcy5hbkV4cGFuZGVkTm9kZS5pbmNsdWRlcyh0YXJnZXROb2RlLmtleSkpIHtcclxuICAgICAgICB0aGlzLmFuRXhwYW5kZWROb2RlID0gWy4uLnRoaXMuYW5FeHBhbmRlZE5vZGUsIHRhcmdldE5vZGUua2V5XTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g5pS+5Zyo55uu5qCH6IqC54K55YmN5ZCOXHJcbiAgICAgIHRoaXMuaW5zZXJ0Tm9kZUJlc2lkZSh0aGlzLm5vZGVzLCB0YXJnZXROb2RlLmtleSwgZHJhZ2dlZERhdGEsIHBvcyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ub2RlcyA9IFsuLi50aGlzLm5vZGVzXTtcclxuICAgIHRoaXMuc3luY1RyZWVPcHRpb25zRnJvbU5vZGVzKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKirnp7vpmaTlubbov5Tlm57oioLngrkgKi9cclxuICBwcml2YXRlIHJlbW92ZU5vZGVCeUtleShub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBwYXJlbnQ6IGFueVtdID0gbnVsbCwgaW5kZXg6IG51bWJlciA9IC0xKTogYW55IHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKG5vZGVzW2ldLmtleSA9PT0gdGFyZ2V0S2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGVzLnNwbGljZShpLCAxKVswXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZXNbaV0uY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5yZW1vdmVOb2RlQnlLZXkobm9kZXNbaV0uY2hpbGRyZW4sIHRhcmdldEtleSwgbm9kZXNbaV0uY2hpbGRyZW4sIGkpO1xyXG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKuWcqOebruagh+iKgueCueaXgei+ueaPkuWFpeiKgueCuSAqL1xyXG4gIHByaXZhdGUgaW5zZXJ0Tm9kZUJlc2lkZShub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBuZXdOb2RlOiBhbnksIHBvc2l0aW9uOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKG5vZGVzW2ldLmtleSA9PT0gdGFyZ2V0S2V5KSB7XHJcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBwb3NpdGlvbiA9PT0gLTEgPyBpIDogaSArIDE7XHJcbiAgICAgICAgbm9kZXMuc3BsaWNlKGluc2VydEluZGV4LCAwLCBuZXdOb2RlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZXNbaV0uY2hpbGRyZW4/Lmxlbmd0aCAmJiB0aGlzLmluc2VydE5vZGVCZXNpZGUobm9kZXNbaV0uY2hpbGRyZW4sIHRhcmdldEtleSwgbmV3Tm9kZSwgcG9zaXRpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKuWIpOaWreiKgueCueeahOWtkOiKgueCueaYr+WQpuacieiiq+mAieS4reeahCAqL1xyXG4gIGhhc0NoaWxkcmVuQ2hlY2tlZChub2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChub2RlLm9yaWdpbj8uaXNDaGVja2VkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9yaWdpbk5vZGUgPSB0aGlzLmZpbmROb2RlQnlLZXkodGhpcy5ub2Rlcywgbm9kZS5rZXkpO1xyXG4gICAgaWYgKCFvcmlnaW5Ob2RlPy5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmhhc0FueUNoaWxkQ2hlY2tlZChvcmlnaW5Ob2RlLmNoaWxkcmVuKTtcclxuICB9XHJcblxyXG4gIC8qKumAkuW9kuajgOafpeWtkOiKgueCueaYr+WQpuacieiiq+mAieS4reeahCAqL1xyXG4gIHByaXZhdGUgaGFzQW55Q2hpbGRDaGVja2VkKGNoaWxkcmVuOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xyXG4gICAgICBpZiAoY2hpbGQuaXNDaGVja2VkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuPy5sZW5ndGggJiYgdGhpcy5oYXNBbnlDaGlsZENoZWNrZWQoY2hpbGQuY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKuagueaNriBrZXkg5p+l5om+6IqC54K5ICovXHJcbiAgcHJpdmF0ZSBmaW5kTm9kZUJ5S2V5KG5vZGVzOiBhbnlbXSwga2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XHJcbiAgICAgIGlmIChub2RlLmtleSA9PT0ga2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kTm9kZUJ5S2V5KG5vZGUuY2hpbGRyZW4sIGtleSk7XHJcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgY29uc3QgY2hlY2tib3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXVtkYXRhLWluZGV0ZXJtaW5hdGVdJyk7XHJcbiAgICBjaGVja2JveGVzLmZvckVhY2goKGNoZWNrYm94OiBIVE1MSW5wdXRFbGVtZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IGluZGV0ZXJtaW5hdGUgPSBjaGVja2JveC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXRlcm1pbmF0ZScpID09PSAndHJ1ZSc7XHJcbiAgICAgIGNoZWNrYm94LmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUVudGl0eVwiPlxyXG4gICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwiZm9ybUNvbmZpZ3VyYXRpb25cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snQWJwRHluYW1pY0Zvcm06Ok5vZGVzJyB8IGFicExvY2FsaXphdGlvbn19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRhcmsgc29mdCBtcy0yIGZsb2F0LWVuZFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrLnN0b3ApPVwiYWRkTm9kZUJ0bigpXCI+e3snQWJwRHluYW1pY0Zvcm06OkFkZE5vZGUnIHxcclxuICAgICAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxhYnAtdHJlZSBbbm9kZXNdPVwibm9kZXNcIiBbY2hlY2thYmxlXT1cImZhbHNlXCIgKGRyb3BPdmVyKT1cImRyb3BPdmVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKG56RXhwYW5kQ2hhbmdlKT1cIm56RXhwYW5kQ2hhbmdlKCRldmVudClcIiBbZXhwYW5kZWRLZXlzXT1cImFuRXhwYW5kZWROb2RlXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI21lbnUgbGV0LW5vZGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiZWRpdEl0ZW1CdG4obm9kZSlcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1wZW5jaWxcIj48L2k+e3snQWJwVTo6RWRpdCcgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhYnBMb2NhbGl6YXRpb259fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIChjbGljay5zdG9wKT1cImNyZWF0ZUNoaWxkSXRlbUJ0bihub2RlKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiBtZS0xIGZhIGZhLXBsdXNcIj48L2k+e3snQWJwRHluYW1pY0Zvcm06OkFkZFN1Yk1lbnVJdGVtJyB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiZGVsZXRlTWVudUl0ZW1CdG4obm9kZSlcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1yZW1vdmVcIj48L2k+e3snQWJwVTo6RGVsZXRlJyB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGFicFRyZWVOb2RlVGVtcGxhdGUgbGV0LW5vZGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwidG9nZ2xlTm9kZUNoZWNrZWQoJGV2ZW50LCBub2RlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwibm9kZS5vcmlnaW4/LmlzQ2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWluZGV0ZXJtaW5hdGVdPVwiaGFzQ2hpbGRyZW5DaGVja2VkKG5vZGUpXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tub2RlLnRpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgYWJwVHJlZUV4cGFuZGVkSWNvblRlbXBsYXRlIGxldC1ub2RlIGxldC1vcmlnaW49XCJvcmlnaW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cIm5vZGUuY2hpbGRyZW4ubGVuZ3RoPjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vZGUuaXNFeHBhbmRlZCA/IG1pbnVzSWNvbiA6IHBsdXNJY29uXCI+PC9uZy1jb250YWluZXI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI21pbnVzSWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuNSAwYzYuMzQ3IDAgMTEuNSA1LjE1MyAxMS41IDExLjVzLTUuMTUzIDExLjUtMTEuNSAxMS41LTExLjUtNS4xNTMtMTEuNS0xMS41IDUuMTUzLTExLjUgMTEuNS0xMS41em0wIDFjNS43OTUgMCAxMC41IDQuNzA1IDEwLjUgMTAuNXMtNC43MDUgMTAuNS0xMC41IDEwLjUtMTAuNS00LjcwNS0xMC41LTEwLjUgNC43MDUtMTAuNSAxMC41LTEwLjV6bS02LjUgMTBoMTN2MWgtMTN2LTF6XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwbHVzSWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuNSAwYzYuMzQ3IDAgMTEuNSA1LjE1MyAxMS41IDExLjVzLTUuMTUzIDExLjUtMTEuNSAxMS41LTExLjUtNS4xNTMtMTEuNS0xMS41IDUuMTUzLTExLjUgMTEuNS0xMS41em0wIDFjNS43OTUgMCAxMC41IDQuNzA1IDEwLjUgMTAuNXMtNC43MDUgMTAuNS0xMC41IDEwLjUtMTAuNS00LjcwNS0xMC41LTEwLjUgNC43MDUtMTAuNSAxMC41LTEwLjV6bS41IDEwaDZ2MWgtNnY2aC0xdi02aC02di0xaDZ2LTZoMXY2elwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2FicC10cmVlPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibm9kZXMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJ0ZXh0LW11dGVkIG10LTJcIj57eydBYnBEeW5hbWljRm9ybTo6UGxlYXNlQWRkTm9kZScgfFxyXG4gICAgICAgICAgICAgICAgYWJwTG9jYWxpemF0aW9ufX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIlRyZWVPcHRpb25zPy5lcnJvcnM/LnJlcXVpcmVkXCIgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrIFwiPlxyXG4gICAgICAgICAgICAgICAge3snQWJwVmFsaWRhdGlvbjo6VGhpc0ZpZWxkSXNSZXF1aXJlZC4nIHwgYWJwTG9jYWxpemF0aW9uOiAnTm9kZXMnfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiAoY2hhbmdlKT1cInRvZ2dsZU11bHRpcGxlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIlRyZWVWaWV3Lk11bHRpcGxlXCIgaWQ9XCJNdWx0aXBsZVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cIk11bHRpcGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3snQWJwRHluYW1pY0Zvcm06Ok11bHRpcGxlJyB8IGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAoYWJwSW5pdCk9XCJzdWJtaXRjbGljaz8ubmF0aXZlRWxlbWVudD8uY2xpY2soKVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIlxyXG4gICAgICAgICAgICAjc3VibWl0Y2xpY2s+PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9mb3JtPlxyXG5cclxuXHJcbjwhLS0gW29wdGlvbnNdPVwieyBzaXplOiBDdXJyZW50U2VsZWN0aW9uVGFibGVDb250cm9sTmFtZT09PSdNYXRyaXgnPyd4bCc6JycgLHNjcm9sbGFibGU6ZmFsc2UgfVwiICh2aXNpYmxlQ2hhbmdlKT1cInRhYmxlU2VsZWN0VmlzaWJsZUNoYW5nZSgkZXZlbnQpXCItLT5cclxuPGFicC1tb2RhbCBbKHZpc2libGUpXT1cImlzVmlzaWJsZVwiIFtidXN5XT1cIm1vZGFsQnVzeVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICAgICAgPGgzPnt7aXNDcmVhdGVDaGlsZCA/ICgnQWJwRHluYW1pY0Zvcm06OkFkZFN1Yk1lbnVJdGVtJyB8IGFicExvY2FsaXphdGlvbikgOiAoc2VsZWN0VHJlZSA/ICgnQWJwVWk6OkVkaXQnIHxcclxuICAgICAgICAgICAgYWJwTG9jYWxpemF0aW9uKSA6ICgnQ21zOjpOZXcnIHwgYWJwTG9jYWxpemF0aW9uKSl9fTwvaDM+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGVyUmVmPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj48aSBjbGFzcz1cImZhIGZhLXB1bHNlIGZhLXNwaW5uZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZUZvcm07IGVsc2UgbG9hZGVyUmVmXCI+XHJcbiAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwic2l0ZXMtbW9kYWwtZm9ybVwiICNteUZvcm09XCJuZ0Zvcm1cIiBbZm9ybUdyb3VwXT1cIm5vZGVGb3JtXCIgKHN1Ym1pdCk9XCJjcmVhdGVPckVkaXRTYXZlKClcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiICNub2RlTW9kYWxTdWJtaXQgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eyAnQWJwRHluYW1pY0Zvcm06OlNlbGVjdExpc3RJdGVtVGV4dCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiBbcGxhY2Vob2xkZXJdPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiZGlzUGxheU5hbWVJbnB1dEJsdXIoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0FicER5bmFtaWNGb3JtOjpTZWxlY3RMaXN0SXRlbVZhbHVlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJrZXlcIiBbcGxhY2Vob2xkZXJdPVwiXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIGZvcm1Db250cm9sTmFtZT1cImlzQ2hlY2tlZFwiIGlkPVwiaXNTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiaXNTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQWJwRHluYW1pY0Zvcm06OlNlbGVjdGVkJyB8IGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT57eydBYnBVaTo6Q2xvc2UnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cclxuICAgICAgICA8YWJwLWJ1dHRvbiBpY29uQ2xhc3M9XCJmYSBmYS1jaGVja1wiIFtkaXNhYmxlZF09XCIhbm9kZUZvcm0udmFsaWRcIlxyXG4gICAgICAgICAgICAoYWJwQ2xpY2spPVwibm9kZU1vZGFsU3VibWl0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKVwiPnt7J0FicFVpOjpTYXZlJyB8XHJcbiAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9hYnAtYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9hYnAtbW9kYWw+Il19
|
|
515
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHluYW1pYy1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3RyZWUvdHJlZS1jb25maWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHluYW1pYy1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3RyZWUvdHJlZS1jb25maWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBZSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7QUFPeEQsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixZQUFvQixFQUFlLEVBQVMsZUFBK0I7UUFBdkQsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUFTLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQTZCbkUsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBOEV4QyxZQUFZO1FBQ1oscUJBQXFCO1FBQ3JCLHlGQUF5RjtRQUN6RiwrQ0FBK0M7UUFDL0MsSUFBSTtRQUVKLFlBQVk7UUFDWixVQUFLLEdBQVUsRUFBRSxDQUFDO1FBRWxCLFlBQVk7UUFDWixtQkFBYyxHQUFVLEVBQUUsQ0FBQztRQWtCM0IsYUFBYTtRQUNiLGtCQUFhLEdBQWtCLEtBQUssQ0FBQztRQUNy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USxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLE1BQU0sQ0FBQztZQUM3RSxRQUFRLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBamhCVSxtQkFBbUI7a0dBQW5CLG1CQUFtQix1VkNYaEMsNDNOQTRHWTs7MkZEakdDLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxnQkFBZ0I7OEdBU2YsSUFBSTtzQkFEZCxLQUFLO2dCQVFLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBUUssTUFBTTtzQkFEaEIsS0FBSztnQkFXc0MsV0FBVztzQkFBdEQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXdITyxlQUFlO3NCQUEvRCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgVmlld0NoaWxkLCBBZnRlclZpZXdDaGVja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyZWVDb25maWcgfSBmcm9tICcuL3RyZWUtY29uZmlnJztcclxuaW1wb3J0IHtUb1BpbnlpblNlcnZpY2V9IGZyb20gJ0BkaWduaXRlLW5nL2V4cGFuZC5jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGYtdHJlZS1jb25maWcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLWNvbmZpZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RyZWUtY29uZmlnLmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyZWVDb25maWdDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixwcml2YXRlIHRvUGlueWluU2VydmljZTpUb1BpbnlpblNlcnZpY2UpIHt9XHJcbiAgLyoq6KGo5Y2V5o6n5Lu257G75Z6LICovXHJcbiAgX3R5cGU6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgdHlwZSh2OiBhbnkpIHtcclxuICAgIHRoaXMuX3R5cGUgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoq6YCJ5oup55qE6KGo5Y2V5L+h5oGvICovXHJcbiAgX3NlbGVjdGVkOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkKHY6IGFueSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWQgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoq6KGo5Y2V5a6e5L2TICovXHJcbiAgZm9ybUVudGl0eTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBFbnRpdHkodjogRm9ybUdyb3VwKSB7XHJcbiAgICB0aGlzLmZvcm1FbnRpdHkgPSB2O1xyXG4gICAgdGhpcy5kYXRhTG9hZGVkKCk7XHJcbiAgfVxyXG4gIGdldCBmb3JtQ29uZmlndXJhdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1FbnRpdHk/LmdldCgnZm9ybUNvbmZpZ3VyYXRpb24nKSBhcyBGb3JtR3JvdXA7XHJcbiAgfVxyXG4gIGdldCBUcmVlT3B0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Db25maWd1cmF0aW9uLmNvbnRyb2xzWydUcmVlVmlldy5Ob2RlcyddIGFzIEZvcm1BcnJheTtcclxuICB9XHJcbiAgQFZpZXdDaGlsZCgnc3VibWl0Y2xpY2snLCB7IHN0YXRpYzogdHJ1ZSB9KSBzdWJtaXRjbGljazogRWxlbWVudFJlZjtcclxuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgYXN5bmMgZGF0YUxvYWRlZCgpIHtcclxuICAgIGlmICh0aGlzLmZvcm1FbnRpdHkgJiYgdGhpcy5fdHlwZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLkFmdGVySW5pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKirlop7liqDpgInpobkgKi9cclxuICAvLyBhZGRUcmVlT3B0aW9ucygpIHtcclxuICAvLyAgIHRoaXMuVHJlZU9wdGlvbnMucHVzaChcclxuICAvLyAgICAgbmV3IEZvcm1Hcm91cCh7XHJcbiAgLy8gICAgICAgVGV4dDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAvLyAgICAgICBWYWx1ZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAvLyAgICAgICBTZWxlY3RlZDogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcclxuICAvLyAgICAgICBDaGlsZHJlbjogbmV3IEZvcm1BcnJheShbXSksXHJcbiAgLy8gICAgIH0pLFxyXG4gIC8vICAgKTtcclxuICAvLyB9XHJcbiAgLy8gLyoq5Yig6Zmk5p+Q5Liq6YCJ6aG5ICovXHJcbiAgLy8gZGVsZXRlVHJlZU9wdGlvbnMoaW5kZXgpIHtcclxuICAvLyAgIHRoaXMuVHJlZU9wdGlvbnMucmVtb3ZlQXQoaW5kZXgpO1xyXG4gIC8vIH1cclxuXHJcbiAgQWZ0ZXJJbml0KCkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICB0aGlzLmZvcm1FbnRpdHk/LnNldENvbnRyb2woJ2Zvcm1Db25maWd1cmF0aW9uJywgdGhpcy5mYi5ncm91cChuZXcgVHJlZUNvbmZpZygpKSk7XHJcbiAgICAgIHRoaXMuVHJlZU9wdGlvbnM/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpXSk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTsgLy8g5omL5Yqo6Kem5Y+R5Y+Y5pu05qOA5rWLXHJcbiAgICAgIHRoaXMuc3VibWl0Y2xpY2s/Lm5hdGl2ZUVsZW1lbnQ/LmNsaWNrKCk7XHJcblxyXG4gICBcclxuICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkICYmIHRoaXMuX3NlbGVjdGVkLmZvcm1Db250cm9sTmFtZSA9PSB0aGlzLl90eXBlKSB7XHJcbiAgICAgICAgY29uc3QgdHJlZU5vZGVzID0gdGhpcy5fc2VsZWN0ZWQuZm9ybUNvbmZpZ3VyYXRpb25bJ1RyZWVWaWV3Lk5vZGVzJ107XHJcbiAgICAgICAgaWYgKHRyZWVOb2Rlcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLm5vZGVzID0gdGhpcy5jb252ZXJ0VHJlZU9wdGlvbnNUb05vZGVzKHRyZWVOb2Rlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN5bmNUcmVlT3B0aW9uc0Zyb21Ob2RlcygpO1xyXG4gICAgICAgIC8vIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLl9zZWxlY3RlZC5mb3JtQ29uZmlndXJhdGlvblsnVHJlZVZpZXcuTm9kZXMnXSkge1xyXG4gICAgICAgIC8vICAgZm9yIChjb25zdCBrZXkgaW4gZWxlbWVudCkge1xyXG4gICAgICAgIC8vICAgICBjb25zdCBpdGVtID0gZWxlbWVudFtrZXldO1xyXG4gICAgICAgIC8vICAgICBjb25zdCBjYXBpdGFsaXplZEtleSA9IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTtcclxuICAgICAgICAvLyAgICAgZWxlbWVudFtjYXBpdGFsaXplZEtleV0gPSBpdGVtO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgdGhpcy5hZGRUcmVlT3B0aW9ucygpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICB0aGlzLmZvcm1Db25maWd1cmF0aW9uLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgLi4udGhpcy5fc2VsZWN0ZWQuZm9ybUNvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gdGhpcy5hZGRUcmVlT3B0aW9ucygpO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOW9k+mAieaLqemhueeahOaWh+acrOWPkeeUn+WPmOWMluaXtu+8jOabtOaWsOWvueW6lOeahOWAvFxyXG4gICAqIEBwYXJhbSBldmVudCDovpPlhaXkuovku7blr7nosaFcclxuICAgKiBAcGFyYW0gaW5kZXgg6YCJ5oup6aG555qE57Si5byV5L2N572uXHJcbiAgICogQGRlc2NyaXB0aW9uIOWmguaenOmAieaLqemhueW3suaciVZhbHVl5YC85YiZ5LiN5aSE55CG77yM5ZCm5YiZ5bCG5Lit5paH5paH5pys6L2s5o2i5Li65ou86Z+z5L2c5Li6VmFsdWXlgLxcclxuICAgKi9cclxuICAvLyB0ZXh0Q2hhbmdlKGV2ZW50LCBpbmRleCkge1xyXG4gIC8vICAgY29uc3QgVHJlZU9wdGlvbnNJdGVtID0gdGhpcy5UcmVlT3B0aW9ucy5hdChpbmRleCk7XHJcbiAgLy8gICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAvLyAgIGlmIChUcmVlT3B0aW9uc0l0ZW0uZ2V0KCdWYWx1ZScpPy52YWx1ZSkgcmV0dXJuO1xyXG4gIC8vICAgVHJlZU9wdGlvbnNJdGVtLnBhdGNoVmFsdWUoe1xyXG4gIC8vICAgICBWYWx1ZTogc3RydWN0dXJlZENsb25lKHZhbHVlKSxcclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuICAgLyoq5a2X5q615qCH562+aW5wdXTlpLHljrvmoIfngrnnlJ/miJDlrZfmrrXlkI3lrZcgKi9cclxuICBkaXNQbGF5TmFtZUlucHV0Qmx1cihldmVudCkge1xyXG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICBjb25zdCBwaW55aW4gPSB0aGlzLnRvUGlueWluU2VydmljZS5nZXQodmFsdWUpO1xyXG4gICAgY29uc3QgbmFtZUlucHV0ID0gdGhpcy5ub2RlRm9ybS5nZXQoJ2tleScpO1xyXG4gICAgaWYgKG5hbWVJbnB1dC52YWx1ZSkgcmV0dXJuO1xyXG4gICAgbmFtZUlucHV0LnBhdGNoVmFsdWUocGlueWluKTtcclxuICB9XHJcblxyXG4gIC8qKuiwg+aVtOihqOagvOS9jee9riAqL1xyXG4gIC8vIGRyb3AoZXZlbnQ6IGFueSkge1xyXG4gIC8vICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuVHJlZU9wdGlvbnMuY29udHJvbHMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XHJcbiAgLy8gICB0aGlzLlRyZWVPcHRpb25zLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAvLyB9XHJcblxyXG4gIC8qKnRyZWXmlbDmja4gKi9cclxuICBub2RlczogYW55W10gPSBbXTtcclxuXHJcbiAgLyoq5bey5bGV5byA55qE6IqC54K5ICovXHJcbiAgYW5FeHBhbmRlZE5vZGU6IGFueVtdID0gW107XHJcblxyXG4gIC8qKueCueWHu+WxleW8gOagkeiKgueCueWbvuagh+inpuWPkSAqL1xyXG4gIG56RXhwYW5kQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCBhbkV4cGFuZGVkTm9kZSA9IHRoaXMuYW5FeHBhbmRlZE5vZGU7XHJcbiAgICBpZiAoYW5FeHBhbmRlZE5vZGUuaW5jbHVkZXMoZXZlbnQubm9kZS5rZXkpKSB7XHJcbiAgICAgIGFuRXhwYW5kZWROb2RlID0gYW5FeHBhbmRlZE5vZGUuZmlsdGVyKGtleSA9PiBrZXkgIT09IGV2ZW50Lm5vZGUua2V5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFuRXhwYW5kZWROb2RlLnB1c2goZXZlbnQubm9kZS5rZXkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hbkV4cGFuZGVkTm9kZSA9IGFuRXhwYW5kZWROb2RlO1xyXG4gIH1cclxuICBsb2codikge1xyXG4gICAgY29uc29sZS5sb2codiwgJzExMTExMTExMScpO1xyXG4gIH1cclxuXHJcbiAgLyoq5q2j5Zyo5pON5L2c55qE6IqC54K56aG5ICovXHJcbiAgc2VsZWN0VHJlZTogYW55O1xyXG4gIC8qKuaYr+WQpuWIm+W7uuWtkOiKgueCuSAqL1xyXG4gIGlzQ3JlYXRlQ2hpbGQ6IGJvb2xlYW4gfCBhbnkgPSBmYWxzZTtcclxuICAvKirmqKHmgIHmoYbnirbmgIEgKi9cclxuICBpc1Zpc2libGU6IGJvb2xlYW4gfCBhbnkgPSBmYWxzZTtcclxuXHJcbiAgLyoq55So5LqO56Gu5a6a5qih5oCB55qE57mB5b+Z54q25oCB5piv5ZCm5Li655yfICovXHJcbiAgbW9kYWxCdXN5OiBib29sZWFuIHwgYW55ID0gZmFsc2U7XHJcbiAgLyoq5Yib5bu66KGo5Y2VICovXHJcbiAgbm9kZUZvcm06IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcclxuICAvKirooajmoLzlt7LpgInmi6nmlbDmja4gKi9cclxuICBfdGFibGVTZWxlY3RlZDogYW55O1xyXG5cclxuICAvKirooajljZXmjqfku7bmqKHmnb8t5Yqo5oCB6LWL5YC86KGo5Y2V5o6n5Lu2ICovXHJcbiAgQFZpZXdDaGlsZCgnbm9kZU1vZGFsU3VibWl0JywgeyBzdGF0aWM6IGZhbHNlIH0pIG5vZGVNb2RhbFN1Ym1pdDogRWxlbWVudFJlZjtcclxuXHJcbiAgLyoq55Sf5oiQR1VJRCAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVHdWlkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKVxyXG4gIH1cclxuXHJcbiAgLyoq5Yib5bu66IqC54K5ICovXHJcbiAgYWRkTm9kZUJ0bigpIHtcclxuICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDcmVhdGVDaGlsZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RUcmVlID0gbnVsbDtcclxuICAgIHRoaXMubm9kZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgdGl0bGU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGtleTogW3RoaXMuZ2VuZXJhdGVHdWlkKCksIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBpc0NoZWNrZWQ6IFtmYWxzZV0sXHJcbiAgICAgIGNoaWxkcmVuOiBuZXcgRm9ybUFycmF5KFtdKSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvKirnvJbovpHoioLngrkgKi9cclxuICBlZGl0SXRlbUJ0bihub2RlOiBhbnkpIHtcclxuICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDcmVhdGVDaGlsZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RUcmVlID0gbm9kZTtcclxuICAgIHRoaXMubm9kZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgdGl0bGU6IFtub2RlLnRpdGxlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAga2V5OiBbbm9kZS5rZXksIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBpc0NoZWNrZWQ6IFtub2RlLm9yaWdpbj8uaXNDaGVja2VkID8/IGZhbHNlXSxcclxuICAgICAgY2hpbGRyZW46IG5ldyBGb3JtQXJyYXkoW10pLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKuWIm+W7uuWtkOiKgueCuSAqL1xyXG4gIGNyZWF0ZUNoaWxkSXRlbUJ0bihub2RlOiBhbnkpIHtcclxuICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDcmVhdGVDaGlsZCA9IHRydWU7XHJcbiAgICB0aGlzLnNlbGVjdFRyZWUgPSBub2RlO1xyXG4gICAgdGhpcy5ub2RlRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICB0aXRsZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAga2V5OiBbdGhpcy5nZW5lcmF0ZUd1aWQoKSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGlzQ2hlY2tlZDogW2ZhbHNlXSxcclxuICAgICAgY2hpbGRyZW46IG5ldyBGb3JtQXJyYXkoW10pLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKumHjee9ruaooeaAgeahhiAqL1xyXG4gIHJlc2V0TW9kYWwoKSB7XHJcbiAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NyZWF0ZUNoaWxkID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdFRyZWUgPSBudWxsO1xyXG4gIH1cclxuICAvKirliJvlu7rnvJbovpHkv53lrZggKi9cclxuICBjcmVhdGVPckVkaXRTYXZlKCkge1xyXG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5ub2RlRm9ybTtcclxuICAgIGNvbnN0IHsgc2VsZWN0VHJlZSwgaXNDcmVhdGVDaGlsZCwgbm9kZXMsIGFuRXhwYW5kZWROb2RlIH0gPSB0aGlzO1xyXG5cclxuICAgIGlmIChzZWxlY3RUcmVlKSB7XHJcbiAgICAgIGlmIChpc0NyZWF0ZUNoaWxkKSB7XHJcbiAgICAgICAgLy8g5Yib5bu65a2Q6IqC54K5XHJcbiAgICAgICAgdGhpcy5hZGRDaGlsZE5vZGUobm9kZXMsIHNlbGVjdFRyZWUua2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgLy8g6Ieq5Yqo5bGV5byA54i26IqC54K5XHJcbiAgICAgICAgaWYgKCFhbkV4cGFuZGVkTm9kZS5pbmNsdWRlcyhzZWxlY3RUcmVlLmtleSkpIHtcclxuICAgICAgICAgIHRoaXMuYW5FeHBhbmRlZE5vZGUgPSBbLi4uYW5FeHBhbmRlZE5vZGUsIHNlbGVjdFRyZWUua2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8g57yW6L6R6IqC54K5XHJcbiAgICAgICAgdGhpcy51cGRhdGVOb2RlKG5vZGVzLCBzZWxlY3RUcmVlLmtleSwgdmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyDliJvlu7rmoLnoioLngrlcclxuICAgICAgbm9kZXMucHVzaCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ub2RlcyA9IFsuLi5ub2Rlc107XHJcbiAgICB0aGlzLnN5bmNUcmVlT3B0aW9uc0Zyb21Ob2RlcygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5yZXNldE1vZGFsKCk7XHJcbiAgfVxyXG5cclxuICAvKirpgJLlvZLmt7vliqDlrZDoioLngrkgKi9cclxuICBwcml2YXRlIGFkZENoaWxkTm9kZShub2RlczogYW55W10sIHBhcmVudEtleTogc3RyaW5nLCBuZXdOb2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHBhcmVudEtleSkge1xyXG4gICAgICAgIGlmICghbm9kZS5jaGlsZHJlbikgbm9kZS5jaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgIG5vZGUuY2hpbGRyZW4ucHVzaChuZXdOb2RlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoICYmIHRoaXMuYWRkQ2hpbGROb2RlKG5vZGUuY2hpbGRyZW4sIHBhcmVudEtleSwgbmV3Tm9kZSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoq6YCS5b2S5pu05paw6IqC54K5ICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVOb2RlKG5vZGVzOiBhbnlbXSwgdGFyZ2V0S2V5OiBzdHJpbmcsIHVwZGF0ZWREYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIG5vZGUudGl0bGUgPSB1cGRhdGVkRGF0YS50aXRsZTtcclxuICAgICAgICBub2RlLmtleSA9IHVwZGF0ZWREYXRhLmtleTtcclxuICAgICAgICBub2RlLmlzQ2hlY2tlZCA9IHVwZGF0ZWREYXRhLmlzQ2hlY2tlZDtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoICYmIHRoaXMudXBkYXRlTm9kZShub2RlLmNoaWxkcmVuLCB0YXJnZXRLZXksIHVwZGF0ZWREYXRhKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKirliKDpmaToioLngrkgKi9cclxuICBkZWxldGVNZW51SXRlbUJ0bihub2RlOiBhbnkpIHtcclxuICAgIHRoaXMuZGVsZXRlTm9kZSh0aGlzLm5vZGVzLCBub2RlLmtleSk7XHJcbiAgICB0aGlzLm5vZGVzID0gWy4uLnRoaXMubm9kZXNdO1xyXG4gICAgdGhpcy5zeW5jVHJlZU9wdGlvbnNGcm9tTm9kZXMoKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKumAkuW9kuWIoOmZpOiKgueCuSAqL1xyXG4gIHByaXZhdGUgZGVsZXRlTm9kZShub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChub2Rlc1tpXS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZXNbaV0uY2hpbGRyZW4/Lmxlbmd0aCAmJiB0aGlzLmRlbGV0ZU5vZGUobm9kZXNbaV0uY2hpbGRyZW4sIHRhcmdldEtleSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoq5ZCM5q2lIG5vZGVzIOWIsCBUcmVlT3B0aW9ucyAqL1xyXG4gIHByaXZhdGUgc3luY1RyZWVPcHRpb25zRnJvbU5vZGVzKCkge1xyXG4gICAgdGhpcy5UcmVlT3B0aW9ucy5jbGVhcigpO1xyXG4gICAgY29uc3QgY2xlYW5lZE5vZGVzID0gdGhpcy5ub2Rlcy5tYXAobm9kZSA9PiB0aGlzLmNsZWFuTm9kZShub2RlKSk7XHJcbiAgICBjbGVhbmVkTm9kZXMuZm9yRWFjaChub2RlID0+IHtcclxuICAgICAgdGhpcy5UcmVlT3B0aW9ucy5wdXNoKHRoaXMuY3JlYXRlVHJlZUZvcm1Hcm91cChub2RlKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKumAkuW9kuWIm+W7uuagkeihqOWNlee7hCAqL1xyXG4gIHByaXZhdGUgY3JlYXRlVHJlZUZvcm1Hcm91cChub2RlOiBhbnkpOiBGb3JtR3JvdXAge1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBuZXcgRm9ybUFycmF5KFtdKTtcclxuICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGgpIHtcclxuICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKHRoaXMuY3JlYXRlVHJlZUZvcm1Hcm91cChjaGlsZCkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgVGV4dDogW25vZGUudGl0bGUgfHwgJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBWYWx1ZTogW25vZGUua2V5IHx8ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgU2VsZWN0ZWQ6IFtub2RlLmlzQ2hlY2tlZCA/PyBmYWxzZV0sXHJcbiAgICAgIENoaWxkcmVuOiBjaGlsZHJlbixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoq5riF55CG6IqC54K55Lit55qEIG5nLXpvcnJvIOWGhemDqOWtl+autSAqL1xyXG4gIHByaXZhdGUgY2xlYW5Ob2RlKG5vZGU6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCB7IHRpdGxlLCBrZXksIGlzQ2hlY2tlZCwgY2hpbGRyZW4gfSA9IG5vZGU7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0aXRsZSxcclxuICAgICAga2V5LFxyXG4gICAgICBpc0NoZWNrZWQsXHJcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbj8ubGVuZ3RoID8gY2hpbGRyZW4ubWFwKGNoaWxkID0+IHRoaXMuY2xlYW5Ob2RlKGNoaWxkKSkgOiBbXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKirlsIYgVHJlZU9wdGlvbnMg5pWw5o2u57uT5p6E6L2s5o2i5Li6IG5vZGVzIOaVsOaNrue7k+aehCAqL1xyXG4gIHByaXZhdGUgY29udmVydFRyZWVPcHRpb25zVG9Ob2Rlcyh0cmVlT3B0aW9uczogYW55W10pOiBhbnlbXSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHRyZWVPcHRpb25zKSB7XHJcbiAgICAgIHJlc3VsdC5wdXNoKHtcclxuICAgICAgICB0aXRsZTogb3B0aW9uLlRleHQsXHJcbiAgICAgICAga2V5OiBvcHRpb24uVmFsdWUsXHJcbiAgICAgICAgaXNDaGVja2VkOiBvcHRpb24uU2VsZWN0ZWQgPz8gZmFsc2UsXHJcbiAgICAgICAgY2hpbGRyZW46IG9wdGlvbi5DaGlsZHJlbj8ubGVuZ3RoID8gdGhpcy5jb252ZXJ0VHJlZU9wdGlvbnNUb05vZGVzKG9wdGlvbi5DaGlsZHJlbikgOiBbXSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoq6K6+572uICovXHJcbiAgdG9nZ2xlTXVsdGlwbGUoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IHRoaXMuZm9ybUNvbmZpZ3VyYXRpb24uY29udHJvbHNbJ1RyZWVWaWV3Lk11bHRpcGxlJ10gYXMgRm9ybUNvbnRyb2w7XHJcbiAgICBpZighaXNNdWx0aXBsZS52YWx1ZSl7XHJcbiAgICAgICB0aGlzLmNsZWFyQWxsQ2hlY2tlZCh0aGlzLm5vZGVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKuWIh+aNouiKgueCuemAieS4reeKtuaAgSAqL1xyXG4gIHRvZ2dsZU5vZGVDaGVja2VkKGV2ZW50OiBhbnksIG5vZGU6IGFueSkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBjb25zdCBpc011bHRpcGxlID0gdGhpcy5mb3JtQ29uZmlndXJhdGlvbi5jb250cm9sc1snVHJlZVZpZXcuTXVsdGlwbGUnXSBhcyBGb3JtQ29udHJvbDtcclxuICAgIGNvbnN0IG5ld0NoZWNrZWQgPSAhbm9kZS5vcmlnaW4/LmlzQ2hlY2tlZDtcclxuICAgIFxyXG4gICAgaWYgKCFpc011bHRpcGxlLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJBbGxDaGVja2VkKHRoaXMubm9kZXMpO1xyXG4gICAgICBpZiAobmV3Q2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuc2V0Tm9kZUNoZWNrZWRPbmx5KHRoaXMubm9kZXMsIG5vZGUua2V5LCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXROb2RlQ2hlY2tlZCh0aGlzLm5vZGVzLCBub2RlLmtleSwgbmV3Q2hlY2tlZCk7XHJcbiAgICAgIGlmIChuZXdDaGVja2VkKSB7XHJcbiAgICAgICAgdGhpcy5zZXRQYXJlbnROb2Rlc0NoZWNrZWQodGhpcy5ub2Rlcywgbm9kZS5rZXkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMubm9kZXMgPSBbLi4udGhpcy5ub2Rlc107XHJcbiAgICB0aGlzLnN5bmNUcmVlT3B0aW9uc0Zyb21Ob2RlcygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoq5riF6Zmk5omA5pyJ6IqC54K555qE6YCJ5Lit54q25oCBICovXHJcbiAgcHJpdmF0ZSBjbGVhckFsbENoZWNrZWQobm9kZXM6IGFueVtdKSB7XHJcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgbm9kZS5pc0NoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJBbGxDaGVja2VkKG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKirorr7nva7mjIflrproioLngrnnmoTpgInkuK3nirbmgIEgKi9cclxuICBwcml2YXRlIHNldE5vZGVDaGVja2VkKG5vZGVzOiBhbnlbXSwgdGFyZ2V0S2V5OiBzdHJpbmcsIGNoZWNrZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIG5vZGUuaXNDaGVja2VkID0gY2hlY2tlZDtcclxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnNldENoaWxkcmVuQ2hlY2tlZChub2RlLmNoaWxkcmVuLCBjaGVja2VkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCAmJiB0aGlzLnNldE5vZGVDaGVja2VkKG5vZGUuY2hpbGRyZW4sIHRhcmdldEtleSwgY2hlY2tlZCkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoq6YCS5b2S6K6+572u5omA5pyJ5a2Q6IqC54K555qE6YCJ5Lit54q25oCBICovXHJcbiAgcHJpdmF0ZSBzZXRDaGlsZHJlbkNoZWNrZWQoY2hpbGRyZW46IGFueVtdLCBjaGVja2VkOiBib29sZWFuKSB7XHJcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XHJcbiAgICAgIGNoaWxkLmlzQ2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICAgIGlmIChjaGlsZC5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDaGlsZHJlbkNoZWNrZWQoY2hpbGQuY2hpbGRyZW4sIGNoZWNrZWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKirpgInkuK3miYDmnInniLboioLngrkgKi9cclxuICBwcml2YXRlIHNldFBhcmVudE5vZGVzQ2hlY2tlZChub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBwYXJlbnQ6IGFueSA9IG51bGwpOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICBpZiAobm9kZS5rZXkgPT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgIHBhcmVudC5pc0NoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZXRQYXJlbnROb2Rlc0NoZWNrZWQodGhpcy5ub2RlcywgcGFyZW50LmtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGggJiYgdGhpcy5zZXRQYXJlbnROb2Rlc0NoZWNrZWQobm9kZS5jaGlsZHJlbiwgdGFyZ2V0S2V5LCBub2RlKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKirku4Xorr7nva7mjIflrproioLngrnnmoTpgInkuK3nirbmgIHvvIzkuI3lvbHlk43lrZDoioLngrnlkozniLboioLngrkgKi9cclxuICBwcml2YXRlIHNldE5vZGVDaGVja2VkT25seShub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBjaGVja2VkOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgaWYgKG5vZGUua2V5ID09PSB0YXJnZXRLZXkpIHtcclxuICAgICAgICBub2RlLmlzQ2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCAmJiB0aGlzLnNldE5vZGVDaGVja2VkT25seShub2RlLmNoaWxkcmVuLCB0YXJnZXRLZXksIGNoZWNrZWQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gICAgLyoq5ouW5ou9ICovXHJcbiAgZHJvcE92ZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZHJhZ05vZGUgPSBldmVudC5kcmFnTm9kZTtcclxuICAgIGNvbnN0IHRhcmdldE5vZGUgPSBldmVudC5ub2RlO1xyXG4gICAgY29uc3QgcG9zID0gZXZlbnQucG9zO1xyXG5cclxuICAgIC8vIOenu+mZpOiiq+aLluaLveeahOiKgueCuVxyXG4gICAgY29uc3QgZHJhZ2dlZERhdGEgPSB0aGlzLnJlbW92ZU5vZGVCeUtleSh0aGlzLm5vZGVzLCBkcmFnTm9kZS5rZXkpO1xyXG4gICAgaWYgKCFkcmFnZ2VkRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIC8vIHBvczogMD3lhoXpg6gsIC0xPeS4iuaWuSwgMT3kuIvmlrlcclxuICAgIGlmIChwb3MgPT09IDApIHtcclxuICAgICAgLy8g5pS+5YWl55uu5qCH6IqC54K55YaF6YOo5L2c5Li65a2Q6IqC54K5XHJcbiAgICAgIHRoaXMuYWRkQ2hpbGROb2RlKHRoaXMubm9kZXMsIHRhcmdldE5vZGUua2V5LCBkcmFnZ2VkRGF0YSk7XHJcbiAgICAgIGlmICghdGhpcy5hbkV4cGFuZGVkTm9kZS5pbmNsdWRlcyh0YXJnZXROb2RlLmtleSkpIHtcclxuICAgICAgICB0aGlzLmFuRXhwYW5kZWROb2RlID0gWy4uLnRoaXMuYW5FeHBhbmRlZE5vZGUsIHRhcmdldE5vZGUua2V5XTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g5pS+5Zyo55uu5qCH6IqC54K55YmN5ZCOXHJcbiAgICAgIHRoaXMuaW5zZXJ0Tm9kZUJlc2lkZSh0aGlzLm5vZGVzLCB0YXJnZXROb2RlLmtleSwgZHJhZ2dlZERhdGEsIHBvcyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ub2RlcyA9IFsuLi50aGlzLm5vZGVzXTtcclxuICAgIHRoaXMuc3luY1RyZWVPcHRpb25zRnJvbU5vZGVzKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKirnp7vpmaTlubbov5Tlm57oioLngrkgKi9cclxuICBwcml2YXRlIHJlbW92ZU5vZGVCeUtleShub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBwYXJlbnQ6IGFueVtdID0gbnVsbCwgaW5kZXg6IG51bWJlciA9IC0xKTogYW55IHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKG5vZGVzW2ldLmtleSA9PT0gdGFyZ2V0S2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGVzLnNwbGljZShpLCAxKVswXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZXNbaV0uY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5yZW1vdmVOb2RlQnlLZXkobm9kZXNbaV0uY2hpbGRyZW4sIHRhcmdldEtleSwgbm9kZXNbaV0uY2hpbGRyZW4sIGkpO1xyXG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKuWcqOebruagh+iKgueCueaXgei+ueaPkuWFpeiKgueCuSAqL1xyXG4gIHByaXZhdGUgaW5zZXJ0Tm9kZUJlc2lkZShub2RlczogYW55W10sIHRhcmdldEtleTogc3RyaW5nLCBuZXdOb2RlOiBhbnksIHBvc2l0aW9uOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKG5vZGVzW2ldLmtleSA9PT0gdGFyZ2V0S2V5KSB7XHJcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBwb3NpdGlvbiA9PT0gLTEgPyBpIDogaSArIDE7XHJcbiAgICAgICAgbm9kZXMuc3BsaWNlKGluc2VydEluZGV4LCAwLCBuZXdOb2RlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobm9kZXNbaV0uY2hpbGRyZW4/Lmxlbmd0aCAmJiB0aGlzLmluc2VydE5vZGVCZXNpZGUobm9kZXNbaV0uY2hpbGRyZW4sIHRhcmdldEtleSwgbmV3Tm9kZSwgcG9zaXRpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKuWIpOaWreiKgueCueeahOWtkOiKgueCueaYr+WQpuacieiiq+mAieS4reeahCAqL1xyXG4gIGhhc0NoaWxkcmVuQ2hlY2tlZChub2RlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChub2RlLm9yaWdpbj8uaXNDaGVja2VkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9yaWdpbk5vZGUgPSB0aGlzLmZpbmROb2RlQnlLZXkodGhpcy5ub2Rlcywgbm9kZS5rZXkpO1xyXG4gICAgaWYgKCFvcmlnaW5Ob2RlPy5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmhhc0FueUNoaWxkQ2hlY2tlZChvcmlnaW5Ob2RlLmNoaWxkcmVuKTtcclxuICB9XHJcblxyXG4gIC8qKumAkuW9kuajgOafpeWtkOiKgueCueaYr+WQpuacieiiq+mAieS4reeahCAqL1xyXG4gIHByaXZhdGUgaGFzQW55Q2hpbGRDaGVja2VkKGNoaWxkcmVuOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xyXG4gICAgICBpZiAoY2hpbGQuaXNDaGVja2VkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuPy5sZW5ndGggJiYgdGhpcy5oYXNBbnlDaGlsZENoZWNrZWQoY2hpbGQuY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKuagueaNriBrZXkg5p+l5om+6IqC54K5ICovXHJcbiAgcHJpdmF0ZSBmaW5kTm9kZUJ5S2V5KG5vZGVzOiBhbnlbXSwga2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XHJcbiAgICAgIGlmIChub2RlLmtleSA9PT0ga2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kTm9kZUJ5S2V5KG5vZGUuY2hpbGRyZW4sIGtleSk7XHJcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgY29uc3QgY2hlY2tib3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXVtkYXRhLWluZGV0ZXJtaW5hdGVdJyk7XHJcbiAgICBjaGVja2JveGVzLmZvckVhY2goKGNoZWNrYm94OiBIVE1MSW5wdXRFbGVtZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IGluZGV0ZXJtaW5hdGUgPSBjaGVja2JveC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXRlcm1pbmF0ZScpID09PSAndHJ1ZSc7XHJcbiAgICAgIGNoZWNrYm94LmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUVudGl0eVwiPlxyXG4gICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwiZm9ybUNvbmZpZ3VyYXRpb25cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snQWJwRHluYW1pY0Zvcm06Ok5vZGVzJyB8IGFicExvY2FsaXphdGlvbn19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRhcmsgc29mdCBtcy0yIGZsb2F0LWVuZFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrLnN0b3ApPVwiYWRkTm9kZUJ0bigpXCI+e3snQWJwRHluYW1pY0Zvcm06OkFkZE5vZGUnIHxcclxuICAgICAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxhYnAtdHJlZSBbbm9kZXNdPVwibm9kZXNcIiBbY2hlY2thYmxlXT1cImZhbHNlXCIgKGRyb3BPdmVyKT1cImRyb3BPdmVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKG56RXhwYW5kQ2hhbmdlKT1cIm56RXhwYW5kQ2hhbmdlKCRldmVudClcIiBbZXhwYW5kZWRLZXlzXT1cImFuRXhwYW5kZWROb2RlXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI21lbnUgbGV0LW5vZGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiZWRpdEl0ZW1CdG4obm9kZSlcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1wZW5jaWxcIj48L2k+e3snQWJwVWk6OkVkaXQnIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2suc3RvcCk9XCJjcmVhdGVDaGlsZEl0ZW1CdG4obm9kZSlcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1wbHVzXCI+PC9pPnt7J0FicER5bmFtaWNGb3JtOjpBZGRTdWJOb2RlJyB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrLnN0b3ApPVwiZGVsZXRlTWVudUl0ZW1CdG4obm9kZSlcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgbWUtMSBmYSBmYS1yZW1vdmVcIj48L2k+e3snQWJwVWk6OkRlbGV0ZScgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhYnBMb2NhbGl6YXRpb259fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBhYnBUcmVlTm9kZVRlbXBsYXRlIGxldC1ub2RlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInRvZ2dsZU5vZGVDaGVja2VkKCRldmVudCwgbm9kZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cIm5vZGUub3JpZ2luPy5pc0NoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1pbmRldGVybWluYXRlXT1cImhhc0NoaWxkcmVuQ2hlY2tlZChub2RlKVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bm9kZS50aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGFicFRyZWVFeHBhbmRlZEljb25UZW1wbGF0ZSBsZXQtbm9kZSBsZXQtb3JpZ2luPVwib3JpZ2luXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJub2RlLmNoaWxkcmVuLmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub2RlLmlzRXhwYW5kZWQgPyBtaW51c0ljb24gOiBwbHVzSWNvblwiPjwvbmctY29udGFpbmVyPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNtaW51c0ljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjUgMGM2LjM0NyAwIDExLjUgNS4xNTMgMTEuNSAxMS41cy01LjE1MyAxMS41LTExLjUgMTEuNS0xMS41LTUuMTUzLTExLjUtMTEuNSA1LjE1My0xMS41IDExLjUtMTEuNXptMCAxYzUuNzk1IDAgMTAuNSA0LjcwNSAxMC41IDEwLjVzLTQuNzA1IDEwLjUtMTAuNSAxMC41LTEwLjUtNC43MDUtMTAuNS0xMC41IDQuNzA1LTEwLjUgMTAuNS0xMC41em0tNi41IDEwaDEzdjFoLTEzdi0xelwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGx1c0ljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjUgMGM2LjM0NyAwIDExLjUgNS4xNTMgMTEuNSAxMS41cy01LjE1MyAxMS41LTExLjUgMTEuNS0xMS41LTUuMTUzLTExLjUtMTEuNSA1LjE1My0xMS41IDExLjUtMTEuNXptMCAxYzUuNzk1IDAgMTAuNSA0LjcwNSAxMC41IDEwLjVzLTQuNzA1IDEwLjUtMTAuNSAxMC41LTEwLjUtNC43MDUtMTAuNS0xMC41IDQuNzA1LTEwLjUgMTAuNS0xMC41em0uNSAxMGg2djFoLTZ2NmgtMXYtNmgtNnYtMWg2di02aDF2NnpcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9hYnAtdHJlZT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm5vZGVzLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwidGV4dC1tdXRlZCBtdC0yXCI+e3snQWJwRHluYW1pY0Zvcm06OlBsZWFzZUFkZE5vZGUnIHxcclxuICAgICAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJUcmVlT3B0aW9ucz8uZXJyb3JzPy5yZXF1aXJlZFwiIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFjayBcIj5cclxuICAgICAgICAgICAgICAgIHt7J0FicFZhbGlkYXRpb246OlRoaXNGaWVsZElzUmVxdWlyZWQuJyB8IGFicExvY2FsaXphdGlvbjogJ05vZGVzJ319XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgKGNoYW5nZSk9XCJ0b2dnbGVNdWx0aXBsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJUcmVlVmlldy5NdWx0aXBsZVwiIGlkPVwiTXVsdGlwbGVcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJNdWx0aXBsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J0FicER5bmFtaWNGb3JtOjpNdWx0aXBsZScgfCBhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGFicEluaXQpPVwic3VibWl0Y2xpY2s/Lm5hdGl2ZUVsZW1lbnQ/LmNsaWNrKClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCJcclxuICAgICAgICAgICAgI3N1Ym1pdGNsaWNrPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZm9ybT5cclxuXHJcblxyXG48IS0tIFtvcHRpb25zXT1cInsgc2l6ZTogQ3VycmVudFNlbGVjdGlvblRhYmxlQ29udHJvbE5hbWU9PT0nTWF0cml4Jz8neGwnOicnICxzY3JvbGxhYmxlOmZhbHNlIH1cIiAodmlzaWJsZUNoYW5nZSk9XCJ0YWJsZVNlbGVjdFZpc2libGVDaGFuZ2UoJGV2ZW50KVwiLS0+XHJcbjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJpc1Zpc2libGVcIiBbYnVzeV09XCJtb2RhbEJ1c3lcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxyXG4gICAgICAgIDxoMz57e2lzQ3JlYXRlQ2hpbGQgPyAoJ0FicER5bmFtaWNGb3JtOjpBZGRTdWJOb2RlJyB8IGFicExvY2FsaXphdGlvbikgOiAoc2VsZWN0VHJlZSA/ICgnQWJwVWk6OkVkaXQnIHxcclxuICAgICAgICAgICAgYWJwTG9jYWxpemF0aW9uKSA6ICgnQ21zOjpOZXcnIHwgYWJwTG9jYWxpemF0aW9uKSl9fTwvaDM+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGVyUmVmPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj48aSBjbGFzcz1cImZhIGZhLXB1bHNlIGZhLXNwaW5uZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZUZvcm07IGVsc2UgbG9hZGVyUmVmXCI+XHJcbiAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwic2l0ZXMtbW9kYWwtZm9ybVwiICNteUZvcm09XCJuZ0Zvcm1cIiBbZm9ybUdyb3VwXT1cIm5vZGVGb3JtXCIgKHN1Ym1pdCk9XCJjcmVhdGVPckVkaXRTYXZlKClcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiICNub2RlTW9kYWxTdWJtaXQgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eyAnQWJwRHluYW1pY0Zvcm06Ok5vZGVJdGVtVGV4dCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiBbcGxhY2Vob2xkZXJdPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiZGlzUGxheU5hbWVJbnB1dEJsdXIoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0FicER5bmFtaWNGb3JtOjpTZWxlY3RMaXN0SXRlbVZhbHVlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJrZXlcIiBbcGxhY2Vob2xkZXJdPVwiXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIGZvcm1Db250cm9sTmFtZT1cImlzQ2hlY2tlZFwiIGlkPVwiaXNTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiaXNTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQWJwRHluYW1pY0Zvcm06OlNlbGVjdGVkJyB8IGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT57eydBYnBVaTo6Q2xvc2UnIHwgYWJwTG9jYWxpemF0aW9ufX08L2J1dHRvbj5cclxuICAgICAgICA8YWJwLWJ1dHRvbiBpY29uQ2xhc3M9XCJmYSBmYS1jaGVja1wiIFtkaXNhYmxlZF09XCIhbm9kZUZvcm0udmFsaWRcIlxyXG4gICAgICAgICAgICAoYWJwQ2xpY2spPVwibm9kZU1vZGFsU3VibWl0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKVwiPnt7J0FicFVpOjpTYXZlJyB8XHJcbiAgICAgICAgICAgIGFicExvY2FsaXphdGlvbn19PC9hYnAtYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9hYnAtbW9kYWw+Il19
|
|
@@ -1961,11 +1961,11 @@ class TreeConfigComponent {
|
|
|
1961
1961
|
});
|
|
1962
1962
|
}
|
|
1963
1963
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: TreeConfigComponent, deps: [{ token: i1.FormBuilder }, { token: i2$1.ToPinyinService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1964
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: TreeConfigComponent, selector: "df-tree-config", inputs: { type: "type", selected: "selected", Entity: "Entity" }, viewQueries: [{ propertyName: "submitclick", first: true, predicate: ["submitclick"], descendants: true, static: true }, { propertyName: "nodeModalSubmit", first: true, predicate: ["nodeModalSubmit"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"formEntity\">\r\n <div formGroupName=\"formConfiguration\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{'AbpDynamicForm::Nodes' | abpLocalization}}</label>\r\n <button class=\"btn btn-sm btn-dark soft ms-2 float-end\" type=\"button\"\r\n (click.stop)=\"addNodeBtn()\">{{'AbpDynamicForm::AddNode' |\r\n abpLocalization}}</button>\r\n <abp-tree [nodes]=\"nodes\" [checkable]=\"false\" (dropOver)=\"dropOver($event)\"\r\n (nzExpandChange)=\"nzExpandChange($event)\" [expandedKeys]=\"anExpandedNode\" [draggable]=\"true\">\r\n <ng-template #menu let-node>\r\n <button ngbDropdownItem (click.stop)=\"editItemBtn(node)\"><i\r\n class=\" me-1 fa fa-pencil\"></i>{{'AbpU::Edit' |\r\n abpLocalization}}</button>\r\n <button ngbDropdownItem (click.stop)=\"createChildItemBtn(node)\"><i\r\n class=\" me-1 fa fa-plus\"></i>{{'AbpDynamicForm::AddSubMenuItem' |\r\n abpLocalization}}</button>\r\n <button ngbDropdownItem (click.stop)=\"deleteMenuItemBtn(node)\"><i\r\n class=\" me-1 fa fa-remove\"></i>{{'AbpU::Delete' |\r\n abpLocalization}}</button>\r\n </ng-template>\r\n <ng-template abpTreeNodeTemplate let-node>\r\n <div (click)=\"toggleNodeChecked($event, node)\">\r\n <input type=\"checkbox\" [checked]=\"node.origin?.isChecked\"\r\n [attr.data-indeterminate]=\"hasChildrenChecked(node)\" class=\"form-check-input me-2\">\r\n {{node.title}}\r\n </div>\r\n </ng-template>\r\n <ng-template abpTreeExpandedIconTemplate let-node let-origin=\"origin\">\r\n <i aria-hidden=\"true\" *ngIf=\"node.children.length>0\">\r\n <ng-container *ngTemplateOutlet=\"node.isExpanded ? minusIcon : plusIcon\"></ng-container></i>\r\n </ng-template>\r\n\r\n <ng-template #minusIcon>\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"\r\n fill-rule=\"evenodd\" clip-rule=\"evenodd\">\r\n <path\r\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm-6.5 10h13v1h-13v-1z\" />\r\n </svg>\r\n </ng-template>\r\n\r\n <ng-template #plusIcon>\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"\r\n fill-rule=\"evenodd\" clip-rule=\"evenodd\">\r\n <path\r\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm.5 10h6v1h-6v6h-1v-6h-6v-1h6v-6h1v6z\" />\r\n </svg>\r\n </ng-template>\r\n </abp-tree>\r\n <div *ngIf=\"nodes.length === 0\" class=\"text-muted mt-2\">{{'AbpDynamicForm::PleaseAddNode' |\r\n abpLocalization}}</div>\r\n <div *ngIf=\"TreeOptions?.errors?.required\" class=\"invalid-feedback \">\r\n {{'AbpValidation::ThisFieldIsRequired.' | abpLocalization: 'Nodes'}}\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <div class=\"form-check form-check-inline\">\r\n <input class=\"form-check-input\" type=\"checkbox\" (change)=\"toggleMultiple($event)\"\r\n formControlName=\"TreeView.Multiple\" id=\"Multiple\">\r\n <label class=\"form-check-label\" for=\"Multiple\">\r\n {{'AbpDynamicForm::Multiple' | abpLocalization}}\r\n </label>\r\n </div>\r\n </div>\r\n <button type=\"submit\" (abpInit)=\"submitclick?.nativeElement?.click()\" style=\"display: none;\"\r\n #submitclick></button>\r\n </div>\r\n</form>\r\n\r\n\r\n<!-- [options]=\"{ size: CurrentSelectionTableControlName==='Matrix'?'xl':'' ,scrollable:false }\" (visibleChange)=\"tableSelectVisibleChange($event)\"-->\r\n<abp-modal [(visible)]=\"isVisible\" [busy]=\"modalBusy\">\r\n <ng-template #abpHeader>\r\n <h3>{{isCreateChild ? ('AbpDynamicForm::AddSubMenuItem' | abpLocalization) : (selectTree ? ('AbpUi::Edit' |\r\n abpLocalization) : ('Cms::New' | abpLocalization))}}</h3>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <ng-template #loaderRef>\r\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\r\n </ng-template>\r\n <ng-container *ngIf=\"nodeForm; else loaderRef\">\r\n <form class=\"sites-modal-form\" #myForm=\"ngForm\" [formGroup]=\"nodeForm\" (submit)=\"createOrEditSave()\">\r\n <button type=\"submit\" #nodeModalSubmit style=\"display: none\"></button>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{ 'AbpDynamicForm::SelectListItemText' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" [placeholder]=\"\"\r\n (blur)=\"disPlayNameInputBlur($event)\" />\r\n </div>\r\n <!-- <div class=\"mb-3\">\r\n <label class=\"form-label\">{{ 'AbpDynamicForm::SelectListItemValue' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"key\" [placeholder]=\"\" />\r\n </div> -->\r\n <div class=\"mb-3\">\r\n <div class=\"form-check form-check-inline\">\r\n <input class=\"form-check-input\" type=\"checkbox\" formControlName=\"isChecked\" id=\"isSelected\">\r\n <label class=\"form-check-label\" for=\"isSelected\">\r\n {{'AbpDynamicForm::Selected' | abpLocalization}}\r\n </label>\r\n </div>\r\n </div>\r\n </form>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\r\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!nodeForm.valid\"\r\n (abpClick)=\"nodeModalSubmit.nativeElement.click()\">{{'AbpUi::Save' |\r\n abpLocalization}}</abp-button>\r\n </ng-template>\r\n</abp-modal>", styles: ["input[type=checkbox]:indeterminate{opacity:.5}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i4.InitDirective, selector: "[abpInit]", outputs: ["abpInit"] }, { kind: "directive", type: i4.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "directive", type: i3.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i3.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i6$1.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i6$1.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i6$1.ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: i7.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i7.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { kind: "directive", type: i8.TreeNodeTemplateDirective, selector: "[abpTreeNodeTemplate],[abp-tree-node-template]" }, { kind: "directive", type: i8.ExpandedIconTemplateDirective, selector: "[abpTreeExpandedIconTemplate],[abp-tree-expanded-icon-template]" }, { kind: "component", type: i8.TreeComponent, selector: "abp-tree", inputs: ["noAnimation", "draggable", "checkable", "checkStrictly", "checkedKeys", "nodes", "expandedKeys", "selectedNode", "changeCheckboxWithNode", "isNodeSelected", "beforeDrop"], outputs: ["checkedKeysChange", "expandedKeysChange", "selectedNodeChange", "dropOver", "nzExpandChange"] }, { kind: "pipe", type: i4.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
1964
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: TreeConfigComponent, selector: "df-tree-config", inputs: { type: "type", selected: "selected", Entity: "Entity" }, viewQueries: [{ propertyName: "submitclick", first: true, predicate: ["submitclick"], descendants: true, static: true }, { propertyName: "nodeModalSubmit", first: true, predicate: ["nodeModalSubmit"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"formEntity\">\r\n <div formGroupName=\"formConfiguration\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{'AbpDynamicForm::Nodes' | abpLocalization}}</label>\r\n <button class=\"btn btn-sm btn-dark soft ms-2 float-end\" type=\"button\"\r\n (click.stop)=\"addNodeBtn()\">{{'AbpDynamicForm::AddNode' |\r\n abpLocalization}}</button>\r\n <abp-tree [nodes]=\"nodes\" [checkable]=\"false\" (dropOver)=\"dropOver($event)\"\r\n (nzExpandChange)=\"nzExpandChange($event)\" [expandedKeys]=\"anExpandedNode\" [draggable]=\"true\">\r\n <ng-template #menu let-node>\r\n <button ngbDropdownItem (click.stop)=\"editItemBtn(node)\"><i\r\n class=\" me-1 fa fa-pencil\"></i>{{'AbpUi::Edit' |\r\n abpLocalization}}</button>\r\n <button ngbDropdownItem (click.stop)=\"createChildItemBtn(node)\"><i\r\n class=\" me-1 fa fa-plus\"></i>{{'AbpDynamicForm::AddSubNode' |\r\n abpLocalization}}</button>\r\n <button ngbDropdownItem (click.stop)=\"deleteMenuItemBtn(node)\"><i\r\n class=\" me-1 fa fa-remove\"></i>{{'AbpUi::Delete' |\r\n abpLocalization}}</button>\r\n </ng-template>\r\n <ng-template abpTreeNodeTemplate let-node>\r\n <div (click)=\"toggleNodeChecked($event, node)\">\r\n <input type=\"checkbox\" [checked]=\"node.origin?.isChecked\"\r\n [attr.data-indeterminate]=\"hasChildrenChecked(node)\" class=\"form-check-input me-2\">\r\n {{node.title}}\r\n </div>\r\n </ng-template>\r\n <ng-template abpTreeExpandedIconTemplate let-node let-origin=\"origin\">\r\n <i aria-hidden=\"true\" *ngIf=\"node.children.length>0\">\r\n <ng-container *ngTemplateOutlet=\"node.isExpanded ? minusIcon : plusIcon\"></ng-container></i>\r\n </ng-template>\r\n\r\n <ng-template #minusIcon>\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"\r\n fill-rule=\"evenodd\" clip-rule=\"evenodd\">\r\n <path\r\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm-6.5 10h13v1h-13v-1z\" />\r\n </svg>\r\n </ng-template>\r\n\r\n <ng-template #plusIcon>\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"\r\n fill-rule=\"evenodd\" clip-rule=\"evenodd\">\r\n <path\r\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm.5 10h6v1h-6v6h-1v-6h-6v-1h6v-6h1v6z\" />\r\n </svg>\r\n </ng-template>\r\n </abp-tree>\r\n <div *ngIf=\"nodes.length === 0\" class=\"text-muted mt-2\">{{'AbpDynamicForm::PleaseAddNode' |\r\n abpLocalization}}</div>\r\n <div *ngIf=\"TreeOptions?.errors?.required\" class=\"invalid-feedback \">\r\n {{'AbpValidation::ThisFieldIsRequired.' | abpLocalization: 'Nodes'}}\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <div class=\"form-check form-check-inline\">\r\n <input class=\"form-check-input\" type=\"checkbox\" (change)=\"toggleMultiple($event)\"\r\n formControlName=\"TreeView.Multiple\" id=\"Multiple\">\r\n <label class=\"form-check-label\" for=\"Multiple\">\r\n {{'AbpDynamicForm::Multiple' | abpLocalization}}\r\n </label>\r\n </div>\r\n </div>\r\n <button type=\"submit\" (abpInit)=\"submitclick?.nativeElement?.click()\" style=\"display: none;\"\r\n #submitclick></button>\r\n </div>\r\n</form>\r\n\r\n\r\n<!-- [options]=\"{ size: CurrentSelectionTableControlName==='Matrix'?'xl':'' ,scrollable:false }\" (visibleChange)=\"tableSelectVisibleChange($event)\"-->\r\n<abp-modal [(visible)]=\"isVisible\" [busy]=\"modalBusy\">\r\n <ng-template #abpHeader>\r\n <h3>{{isCreateChild ? ('AbpDynamicForm::AddSubNode' | abpLocalization) : (selectTree ? ('AbpUi::Edit' |\r\n abpLocalization) : ('Cms::New' | abpLocalization))}}</h3>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <ng-template #loaderRef>\r\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\r\n </ng-template>\r\n <ng-container *ngIf=\"nodeForm; else loaderRef\">\r\n <form class=\"sites-modal-form\" #myForm=\"ngForm\" [formGroup]=\"nodeForm\" (submit)=\"createOrEditSave()\">\r\n <button type=\"submit\" #nodeModalSubmit style=\"display: none\"></button>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{ 'AbpDynamicForm::NodeItemText' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" [placeholder]=\"\"\r\n (blur)=\"disPlayNameInputBlur($event)\" />\r\n </div>\r\n <!-- <div class=\"mb-3\">\r\n <label class=\"form-label\">{{ 'AbpDynamicForm::SelectListItemValue' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"key\" [placeholder]=\"\" />\r\n </div> -->\r\n <div class=\"mb-3\">\r\n <div class=\"form-check form-check-inline\">\r\n <input class=\"form-check-input\" type=\"checkbox\" formControlName=\"isChecked\" id=\"isSelected\">\r\n <label class=\"form-check-label\" for=\"isSelected\">\r\n {{'AbpDynamicForm::Selected' | abpLocalization}}\r\n </label>\r\n </div>\r\n </div>\r\n </form>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\r\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!nodeForm.valid\"\r\n (abpClick)=\"nodeModalSubmit.nativeElement.click()\">{{'AbpUi::Save' |\r\n abpLocalization}}</abp-button>\r\n </ng-template>\r\n</abp-modal>", styles: ["input[type=checkbox]:indeterminate{opacity:.5}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i4.InitDirective, selector: "[abpInit]", outputs: ["abpInit"] }, { kind: "directive", type: i4.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "directive", type: i3.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i3.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i6$1.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i6$1.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i6$1.ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: i7.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i7.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { kind: "directive", type: i8.TreeNodeTemplateDirective, selector: "[abpTreeNodeTemplate],[abp-tree-node-template]" }, { kind: "directive", type: i8.ExpandedIconTemplateDirective, selector: "[abpTreeExpandedIconTemplate],[abp-tree-expanded-icon-template]" }, { kind: "component", type: i8.TreeComponent, selector: "abp-tree", inputs: ["noAnimation", "draggable", "checkable", "checkStrictly", "checkedKeys", "nodes", "expandedKeys", "selectedNode", "changeCheckboxWithNode", "isNodeSelected", "beforeDrop"], outputs: ["checkedKeysChange", "expandedKeysChange", "selectedNodeChange", "dropOver", "nzExpandChange"] }, { kind: "pipe", type: i4.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
1965
1965
|
}
|
|
1966
1966
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: TreeConfigComponent, decorators: [{
|
|
1967
1967
|
type: Component,
|
|
1968
|
-
args: [{ selector: 'df-tree-config', template: "<form [formGroup]=\"formEntity\">\r\n <div formGroupName=\"formConfiguration\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{'AbpDynamicForm::Nodes' | abpLocalization}}</label>\r\n <button class=\"btn btn-sm btn-dark soft ms-2 float-end\" type=\"button\"\r\n (click.stop)=\"addNodeBtn()\">{{'AbpDynamicForm::AddNode' |\r\n abpLocalization}}</button>\r\n <abp-tree [nodes]=\"nodes\" [checkable]=\"false\" (dropOver)=\"dropOver($event)\"\r\n (nzExpandChange)=\"nzExpandChange($event)\" [expandedKeys]=\"anExpandedNode\" [draggable]=\"true\">\r\n <ng-template #menu let-node>\r\n <button ngbDropdownItem (click.stop)=\"editItemBtn(node)\"><i\r\n class=\" me-1 fa fa-pencil\"></i>{{'
|
|
1968
|
+
args: [{ selector: 'df-tree-config', template: "<form [formGroup]=\"formEntity\">\r\n <div formGroupName=\"formConfiguration\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{'AbpDynamicForm::Nodes' | abpLocalization}}</label>\r\n <button class=\"btn btn-sm btn-dark soft ms-2 float-end\" type=\"button\"\r\n (click.stop)=\"addNodeBtn()\">{{'AbpDynamicForm::AddNode' |\r\n abpLocalization}}</button>\r\n <abp-tree [nodes]=\"nodes\" [checkable]=\"false\" (dropOver)=\"dropOver($event)\"\r\n (nzExpandChange)=\"nzExpandChange($event)\" [expandedKeys]=\"anExpandedNode\" [draggable]=\"true\">\r\n <ng-template #menu let-node>\r\n <button ngbDropdownItem (click.stop)=\"editItemBtn(node)\"><i\r\n class=\" me-1 fa fa-pencil\"></i>{{'AbpUi::Edit' |\r\n abpLocalization}}</button>\r\n <button ngbDropdownItem (click.stop)=\"createChildItemBtn(node)\"><i\r\n class=\" me-1 fa fa-plus\"></i>{{'AbpDynamicForm::AddSubNode' |\r\n abpLocalization}}</button>\r\n <button ngbDropdownItem (click.stop)=\"deleteMenuItemBtn(node)\"><i\r\n class=\" me-1 fa fa-remove\"></i>{{'AbpUi::Delete' |\r\n abpLocalization}}</button>\r\n </ng-template>\r\n <ng-template abpTreeNodeTemplate let-node>\r\n <div (click)=\"toggleNodeChecked($event, node)\">\r\n <input type=\"checkbox\" [checked]=\"node.origin?.isChecked\"\r\n [attr.data-indeterminate]=\"hasChildrenChecked(node)\" class=\"form-check-input me-2\">\r\n {{node.title}}\r\n </div>\r\n </ng-template>\r\n <ng-template abpTreeExpandedIconTemplate let-node let-origin=\"origin\">\r\n <i aria-hidden=\"true\" *ngIf=\"node.children.length>0\">\r\n <ng-container *ngTemplateOutlet=\"node.isExpanded ? minusIcon : plusIcon\"></ng-container></i>\r\n </ng-template>\r\n\r\n <ng-template #minusIcon>\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"\r\n fill-rule=\"evenodd\" clip-rule=\"evenodd\">\r\n <path\r\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm-6.5 10h13v1h-13v-1z\" />\r\n </svg>\r\n </ng-template>\r\n\r\n <ng-template #plusIcon>\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"\r\n fill-rule=\"evenodd\" clip-rule=\"evenodd\">\r\n <path\r\n d=\"M11.5 0c6.347 0 11.5 5.153 11.5 11.5s-5.153 11.5-11.5 11.5-11.5-5.153-11.5-11.5 5.153-11.5 11.5-11.5zm0 1c5.795 0 10.5 4.705 10.5 10.5s-4.705 10.5-10.5 10.5-10.5-4.705-10.5-10.5 4.705-10.5 10.5-10.5zm.5 10h6v1h-6v6h-1v-6h-6v-1h6v-6h1v6z\" />\r\n </svg>\r\n </ng-template>\r\n </abp-tree>\r\n <div *ngIf=\"nodes.length === 0\" class=\"text-muted mt-2\">{{'AbpDynamicForm::PleaseAddNode' |\r\n abpLocalization}}</div>\r\n <div *ngIf=\"TreeOptions?.errors?.required\" class=\"invalid-feedback \">\r\n {{'AbpValidation::ThisFieldIsRequired.' | abpLocalization: 'Nodes'}}\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <div class=\"form-check form-check-inline\">\r\n <input class=\"form-check-input\" type=\"checkbox\" (change)=\"toggleMultiple($event)\"\r\n formControlName=\"TreeView.Multiple\" id=\"Multiple\">\r\n <label class=\"form-check-label\" for=\"Multiple\">\r\n {{'AbpDynamicForm::Multiple' | abpLocalization}}\r\n </label>\r\n </div>\r\n </div>\r\n <button type=\"submit\" (abpInit)=\"submitclick?.nativeElement?.click()\" style=\"display: none;\"\r\n #submitclick></button>\r\n </div>\r\n</form>\r\n\r\n\r\n<!-- [options]=\"{ size: CurrentSelectionTableControlName==='Matrix'?'xl':'' ,scrollable:false }\" (visibleChange)=\"tableSelectVisibleChange($event)\"-->\r\n<abp-modal [(visible)]=\"isVisible\" [busy]=\"modalBusy\">\r\n <ng-template #abpHeader>\r\n <h3>{{isCreateChild ? ('AbpDynamicForm::AddSubNode' | abpLocalization) : (selectTree ? ('AbpUi::Edit' |\r\n abpLocalization) : ('Cms::New' | abpLocalization))}}</h3>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <ng-template #loaderRef>\r\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\r\n </ng-template>\r\n <ng-container *ngIf=\"nodeForm; else loaderRef\">\r\n <form class=\"sites-modal-form\" #myForm=\"ngForm\" [formGroup]=\"nodeForm\" (submit)=\"createOrEditSave()\">\r\n <button type=\"submit\" #nodeModalSubmit style=\"display: none\"></button>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">{{ 'AbpDynamicForm::NodeItemText' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"title\" [placeholder]=\"\"\r\n (blur)=\"disPlayNameInputBlur($event)\" />\r\n </div>\r\n <!-- <div class=\"mb-3\">\r\n <label class=\"form-label\">{{ 'AbpDynamicForm::SelectListItemValue' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"key\" [placeholder]=\"\" />\r\n </div> -->\r\n <div class=\"mb-3\">\r\n <div class=\"form-check form-check-inline\">\r\n <input class=\"form-check-input\" type=\"checkbox\" formControlName=\"isChecked\" id=\"isSelected\">\r\n <label class=\"form-check-label\" for=\"isSelected\">\r\n {{'AbpDynamicForm::Selected' | abpLocalization}}\r\n </label>\r\n </div>\r\n </div>\r\n </form>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\r\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!nodeForm.valid\"\r\n (abpClick)=\"nodeModalSubmit.nativeElement.click()\">{{'AbpUi::Save' |\r\n abpLocalization}}</abp-button>\r\n </ng-template>\r\n</abp-modal>", styles: ["input[type=checkbox]:indeterminate{opacity:.5}\n"] }]
|
|
1969
1969
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2$1.ToPinyinService }], propDecorators: { type: [{
|
|
1970
1970
|
type: Input
|
|
1971
1971
|
}], selected: [{
|