@alauda-fe/crd-form 0.0.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.
Files changed (95) hide show
  1. package/esm2022/alauda-fe-crd-form.mjs +5 -0
  2. package/esm2022/lib/abstract/base-array.mjs +117 -0
  3. package/esm2022/lib/crd-form/component.mjs +334 -0
  4. package/esm2022/lib/crd-form/helper.mjs +32 -0
  5. package/esm2022/lib/crd-form.module.mjs +117 -0
  6. package/esm2022/lib/field-controls/expressions/expression-core.mjs +2 -0
  7. package/esm2022/lib/field-controls/expressions/props-expression.mjs +58 -0
  8. package/esm2022/lib/field-controls/form-item.component.mjs +121 -0
  9. package/esm2022/lib/field-controls/index.mjs +8 -0
  10. package/esm2022/lib/field-controls/module.mjs +141 -0
  11. package/esm2022/lib/field-controls/operand-advanced-field-group.component.mjs +80 -0
  12. package/esm2022/lib/field-controls/operand-array-field-group.component.mjs +112 -0
  13. package/esm2022/lib/field-controls/operand-field-group.component.mjs +98 -0
  14. package/esm2022/lib/field-controls/operand-field.component.mjs +870 -0
  15. package/esm2022/lib/field-controls/widgets/array-table/component.mjs +109 -0
  16. package/esm2022/lib/field-controls/widgets/basic-auth-secret/component.mjs +116 -0
  17. package/esm2022/lib/field-controls/widgets/basic-auth-secret/create/component.mjs +211 -0
  18. package/esm2022/lib/field-controls/widgets/basic-auth-secret/type.mjs +2 -0
  19. package/esm2022/lib/field-controls/widgets/index.mjs +8 -0
  20. package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/component.mjs +169 -0
  21. package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/util.mjs +40 -0
  22. package/esm2022/lib/field-controls/widgets/link/component.mjs +68 -0
  23. package/esm2022/lib/field-controls/widgets/resource-requirements/resource-requirements.component.mjs +524 -0
  24. package/esm2022/lib/field-controls/widgets/utils.mjs +73 -0
  25. package/esm2022/lib/field-controls/widgets/yaml-editor/yaml-editor.component.mjs +94 -0
  26. package/esm2022/lib/field-widgets/htpasswd/component.mjs +35 -0
  27. package/esm2022/lib/field-widgets/htpasswd/form.mjs +171 -0
  28. package/esm2022/lib/field-widgets/htpasswd/index.mjs +4 -0
  29. package/esm2022/lib/field-widgets/htpasswd/module.mjs +54 -0
  30. package/esm2022/lib/field-widgets/index.mjs +2 -0
  31. package/esm2022/lib/remote-widgets/constants.mjs +4 -0
  32. package/esm2022/lib/remote-widgets/index.mjs +4 -0
  33. package/esm2022/lib/remote-widgets/remote-widget.service.mjs +42 -0
  34. package/esm2022/lib/remote-widgets/token.mjs +7 -0
  35. package/esm2022/lib/spec-descriptors/capability/capability.component.mjs +139 -0
  36. package/esm2022/lib/spec-descriptors/capability-list/capability-list.component.mjs +189 -0
  37. package/esm2022/lib/spec-descriptors/index.mjs +4 -0
  38. package/esm2022/lib/spec-descriptors/util.mjs +13 -0
  39. package/esm2022/lib/types/index.mjs +73 -0
  40. package/esm2022/lib/utils/capability.mjs +295 -0
  41. package/esm2022/lib/utils/constant.mjs +22 -0
  42. package/esm2022/lib/utils/directives.mjs +19 -0
  43. package/esm2022/lib/utils/helper.mjs +201 -0
  44. package/esm2022/lib/utils/index.mjs +7 -0
  45. package/esm2022/lib/utils/service-model.mjs +12 -0
  46. package/esm2022/lib/utils/util.mjs +310 -0
  47. package/esm2022/public-api.mjs +13 -0
  48. package/index.d.ts +5 -0
  49. package/lib/abstract/base-array.d.ts +31 -0
  50. package/lib/crd-form/component.d.ts +61 -0
  51. package/lib/crd-form/helper.d.ts +7 -0
  52. package/lib/crd-form.module.d.ts +16 -0
  53. package/lib/field-controls/expressions/expression-core.d.ts +6 -0
  54. package/lib/field-controls/expressions/props-expression.d.ts +36 -0
  55. package/lib/field-controls/form-item.component.d.ts +11 -0
  56. package/lib/field-controls/index.d.ts +7 -0
  57. package/lib/field-controls/module.d.ts +23 -0
  58. package/lib/field-controls/operand-advanced-field-group.component.d.ts +16 -0
  59. package/lib/field-controls/operand-array-field-group.component.d.ts +8 -0
  60. package/lib/field-controls/operand-field-group.component.d.ts +24 -0
  61. package/lib/field-controls/operand-field.component.d.ts +110 -0
  62. package/lib/field-controls/widgets/array-table/component.d.ts +8 -0
  63. package/lib/field-controls/widgets/basic-auth-secret/component.d.ts +26 -0
  64. package/lib/field-controls/widgets/basic-auth-secret/create/component.d.ts +45 -0
  65. package/lib/field-controls/widgets/basic-auth-secret/type.d.ts +11 -0
  66. package/lib/field-controls/widgets/index.d.ts +7 -0
  67. package/lib/field-controls/widgets/k8s-resource-prefix/component.d.ts +35 -0
  68. package/lib/field-controls/widgets/k8s-resource-prefix/util.d.ts +3 -0
  69. package/lib/field-controls/widgets/link/component.d.ts +20 -0
  70. package/lib/field-controls/widgets/resource-requirements/resource-requirements.component.d.ts +88 -0
  71. package/lib/field-controls/widgets/utils.d.ts +17 -0
  72. package/lib/field-controls/widgets/yaml-editor/yaml-editor.component.d.ts +36 -0
  73. package/lib/field-widgets/htpasswd/component.d.ts +9 -0
  74. package/lib/field-widgets/htpasswd/form.d.ts +32 -0
  75. package/lib/field-widgets/htpasswd/index.d.ts +3 -0
  76. package/lib/field-widgets/htpasswd/module.d.ts +13 -0
  77. package/lib/field-widgets/index.d.ts +1 -0
  78. package/lib/remote-widgets/constants.d.ts +3 -0
  79. package/lib/remote-widgets/index.d.ts +3 -0
  80. package/lib/remote-widgets/remote-widget.service.d.ts +28 -0
  81. package/lib/remote-widgets/token.d.ts +3 -0
  82. package/lib/spec-descriptors/capability/capability.component.d.ts +20 -0
  83. package/lib/spec-descriptors/capability-list/capability-list.component.d.ts +34 -0
  84. package/lib/spec-descriptors/index.d.ts +3 -0
  85. package/lib/spec-descriptors/util.d.ts +4 -0
  86. package/lib/types/index.d.ts +122 -0
  87. package/lib/utils/capability.d.ts +54 -0
  88. package/lib/utils/constant.d.ts +12 -0
  89. package/lib/utils/directives.d.ts +9 -0
  90. package/lib/utils/helper.d.ts +61 -0
  91. package/lib/utils/index.d.ts +6 -0
  92. package/lib/utils/service-model.d.ts +44 -0
  93. package/lib/utils/util.d.ts +48 -0
  94. package/package.json +30 -0
  95. package/public-api.d.ts +9 -0
@@ -0,0 +1,870 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { API_GATEWAY, createActions, isEqual, ObservableInput, publishRef, skipError, startWithCondition, viewActions, yamlReadOptions, yamlWriteOptions, } from '@alauda-fe/common';
3
+ import { HttpClient } from '@angular/common/http';
4
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Injector, Input, Output,
5
+ // cspell:disable-next-line
6
+ ɵcreateInjector as createInjector, } from '@angular/core';
7
+ import { FormControl, Validators } from '@angular/forms';
8
+ import { decode, encode } from 'ab64';
9
+ import { isImmutable } from 'immutable';
10
+ import { get, identity, map as $map, template } from 'lodash-es';
11
+ import { combineLatest, map, filter, Observable, Subject, debounceTime, distinctUntilChanged, shareReplay, takeUntil, BehaviorSubject, switchMap, of, finalize, isObservable, take, } from 'rxjs';
12
+ import { CrdFormComponent } from '../crd-form/component';
13
+ import { SpecCapability, Validations, } from '../types';
14
+ import { convertBooleanSwitchValue, convertValue, CrdFormCustomDescriptionDirective, getDefaultValue, getDisplayByCapability, getFieldDescription, getFieldDisplayName, getFieldType, getFormData, getRadioOptions, normalizePath, } from '../utils';
15
+ import { isArrayField, isArrayFieldTable, isClearable, isCreatable, isGroupField, isMultiple, isAllowCreate, isRemoteField, isRequired, evalInContext, getOperandPath, } from '../utils/helper';
16
+ import { compareWithSubscribedPaths, PropsFieldExpression, } from './expressions/props-expression';
17
+ import { isLink } from './widgets/link/component';
18
+ import * as i0 from "@angular/core";
19
+ import * as i1 from "../crd-form/component";
20
+ import * as i2 from "@angular/common/http";
21
+ const _c0 = (a0, a1) => ({ fieldType: a0, isBasicTypeField: a1 });
22
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_input_1_Template(rf, ctx) { if (rf & 1) {
23
+ i0.ɵɵelement(0, "input", 21);
24
+ i0.ɵɵpipe(1, "pure");
25
+ i0.ɵɵpipe(2, "translate");
26
+ } if (rf & 2) {
27
+ const ctx_r0 = i0.ɵɵnextContext(5);
28
+ i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled)("placeholder", i0.ɵɵpipeBind1(2, 8, i0.ɵɵpipeBind3(1, 4, ctx_r0.field.capabilities, ctx_r0.getDisplayByCapability, ctx_r0.SpecCapability.placeholder)));
29
+ } }
30
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_2_ng_template_2_Template(rf, ctx) { if (rf & 1) {
31
+ i0.ɵɵtext(0);
32
+ i0.ɵɵpipe(1, "pure");
33
+ i0.ɵɵpipe(2, "translate");
34
+ } if (rf & 2) {
35
+ const ctx_r0 = i0.ɵɵnextContext(6);
36
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 5, i0.ɵɵpipeBind3(1, 1, ctx_r0.control.value, ctx_r0.convertBooleanSwitchValue, ctx_r0.field.capabilities)));
37
+ } }
38
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_2_Template(rf, ctx) { if (rf & 1) {
39
+ i0.ɵɵelementContainerStart(0);
40
+ i0.ɵɵelement(1, "aui-switch", 22);
41
+ i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_2_ng_template_2_Template, 3, 7, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
42
+ i0.ɵɵelementContainerEnd();
43
+ } if (rf & 2) {
44
+ const switchReadonly_r2 = i0.ɵɵreference(3);
45
+ const ctx_r0 = i0.ɵɵnextContext(5);
46
+ i0.ɵɵadvance();
47
+ i0.ɵɵproperty("aclReadonlyField", ctx_r0.isDisabled)("aclReadonlyFieldTemplate", switchReadonly_r2)("formControl", ctx_r0.control);
48
+ } }
49
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_multi_select_1_aui_option_2_Template(rf, ctx) { if (rf & 1) {
50
+ i0.ɵɵelementStart(0, "aui-option", 27);
51
+ i0.ɵɵtext(1);
52
+ i0.ɵɵelementEnd();
53
+ } if (rf & 2) {
54
+ const option_r3 = ctx.$implicit;
55
+ i0.ɵɵproperty("value", option_r3.value)("label", option_r3.label);
56
+ i0.ɵɵadvance();
57
+ i0.ɵɵtextInterpolate1(" ", option_r3.label, " ");
58
+ } }
59
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_multi_select_1_Template(rf, ctx) { if (rf & 1) {
60
+ i0.ɵɵelementStart(0, "aui-multi-select", 25);
61
+ i0.ɵɵpipe(1, "async");
62
+ i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_multi_select_1_aui_option_2_Template, 2, 3, "aui-option", 26);
63
+ i0.ɵɵpipe(3, "async");
64
+ i0.ɵɵelementStart(4, "aui-option-placeholder");
65
+ i0.ɵɵtext(5);
66
+ i0.ɵɵpipe(6, "translate");
67
+ i0.ɵɵelementEnd()();
68
+ } if (rf & 2) {
69
+ const ctx_r0 = i0.ɵɵnextContext(6);
70
+ i0.ɵɵproperty("maxRowCount", 3)("clearable", true)("filterable", true)("formControl", ctx_r0.control)("required", ctx_r0.isRequired)("aclReadonlyField", ctx_r0.isDisabled)("loading", i0.ɵɵpipeBind1(1, 10, ctx_r0.loading$))("allowCreate", ctx_r0.isAllowCreate);
71
+ i0.ɵɵadvance(2);
72
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(3, 12, ctx_r0.dynamicOptions$));
73
+ i0.ɵɵadvance(3);
74
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 14, "no_data"));
75
+ } }
76
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_select_2_aui_option_2_Template(rf, ctx) { if (rf & 1) {
77
+ i0.ɵɵelementStart(0, "aui-option", 27);
78
+ i0.ɵɵpipe(1, "aclParseJsonTranslate");
79
+ i0.ɵɵtext(2);
80
+ i0.ɵɵpipe(3, "aclParseJsonTranslate");
81
+ i0.ɵɵelementEnd();
82
+ } if (rf & 2) {
83
+ const option_r4 = ctx.$implicit;
84
+ i0.ɵɵproperty("value", option_r4.value)("label", i0.ɵɵpipeBind1(1, 3, option_r4.label));
85
+ i0.ɵɵadvance(2);
86
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 5, option_r4.label), " ");
87
+ } }
88
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_select_2_Template(rf, ctx) { if (rf & 1) {
89
+ i0.ɵɵelementStart(0, "aui-select", 28);
90
+ i0.ɵɵpipe(1, "async");
91
+ i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_select_2_aui_option_2_Template, 4, 7, "aui-option", 26);
92
+ i0.ɵɵpipe(3, "async");
93
+ i0.ɵɵelementStart(4, "aui-option-placeholder");
94
+ i0.ɵɵtext(5);
95
+ i0.ɵɵpipe(6, "translate");
96
+ i0.ɵɵelementEnd()();
97
+ } if (rf & 2) {
98
+ const ctx_r0 = i0.ɵɵnextContext(6);
99
+ i0.ɵɵproperty("clearable", true)("filterable", true)("formControl", ctx_r0.control)("required", ctx_r0.isRequired)("aclReadonlyField", ctx_r0.isDisabled)("loading", i0.ɵɵpipeBind1(1, 9, ctx_r0.loading$))("allowCreate", ctx_r0.isAllowCreate);
100
+ i0.ɵɵadvance(2);
101
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(3, 11, ctx_r0.dynamicOptions$));
102
+ i0.ɵɵadvance(3);
103
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 13, "no_data"));
104
+ } }
105
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_Template(rf, ctx) { if (rf & 1) {
106
+ i0.ɵɵelementContainerStart(0);
107
+ i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_multi_select_1_Template, 7, 16, "aui-multi-select", 23)(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_select_2_Template, 7, 15, "aui-select", 24);
108
+ i0.ɵɵelementContainerEnd();
109
+ } if (rf & 2) {
110
+ const ctx_r0 = i0.ɵɵnextContext(5);
111
+ i0.ɵɵadvance();
112
+ i0.ɵɵproperty("ngIf", ctx_r0.isMultiple);
113
+ i0.ɵɵadvance();
114
+ i0.ɵɵproperty("ngIf", !ctx_r0.isMultiple);
115
+ } }
116
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_aui_radio_button_2_Template(rf, ctx) { if (rf & 1) {
117
+ i0.ɵɵelementStart(0, "aui-radio-button", 31);
118
+ i0.ɵɵtext(1);
119
+ i0.ɵɵpipe(2, "translate");
120
+ i0.ɵɵelementEnd();
121
+ } if (rf & 2) {
122
+ const option_r5 = ctx.$implicit;
123
+ i0.ɵɵproperty("value", option_r5.value);
124
+ i0.ɵɵadvance();
125
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, option_r5.display), " ");
126
+ } }
127
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_ng_template_4_Template(rf, ctx) { if (rf & 1) {
128
+ i0.ɵɵtext(0);
129
+ i0.ɵɵpipe(1, "pure");
130
+ i0.ɵɵpipe(2, "pure");
131
+ i0.ɵɵpipe(3, "translate");
132
+ } if (rf & 2) {
133
+ const ctx_r0 = i0.ɵɵnextContext(6);
134
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 8, i0.ɵɵpipeBind3(2, 4, ctx_r0.control.value, ctx_r0.getOptionDisplay, i0.ɵɵpipeBind2(1, 1, ctx_r0.field.capabilities, ctx_r0.getRadioOptions))), " ");
135
+ } }
136
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_Template(rf, ctx) { if (rf & 1) {
137
+ i0.ɵɵelementStart(0, "aui-radio-group", 29);
138
+ i0.ɵɵelementContainerStart(1);
139
+ i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_aui_radio_button_2_Template, 3, 4, "aui-radio-button", 30);
140
+ i0.ɵɵpipe(3, "pure");
141
+ i0.ɵɵtemplate(4, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_ng_template_4_Template, 4, 10, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor);
142
+ i0.ɵɵelementContainerEnd();
143
+ i0.ɵɵelementEnd();
144
+ } if (rf & 2) {
145
+ const radioLabel_r6 = i0.ɵɵreference(5);
146
+ const ctx_r0 = i0.ɵɵnextContext(5);
147
+ i0.ɵɵproperty("formControl", ctx_r0.control)("required", ctx_r0.isRequired)("aclReadonlyField", ctx_r0.isDisabled)("aclReadonlyFieldTemplate", radioLabel_r6);
148
+ i0.ɵɵadvance(2);
149
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(3, 5, ctx_r0.field.capabilities, ctx_r0.getRadioOptions));
150
+ } }
151
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_5_ng_template_2_Template(rf, ctx) { if (rf & 1) {
152
+ i0.ɵɵelement(0, "acl-crd-resource-requirements", 33);
153
+ } if (rf & 2) {
154
+ const ctx_r0 = i0.ɵɵnextContext(6);
155
+ i0.ɵɵproperty("ngModel", ctx_r0.control.value)("readOnly", true);
156
+ } }
157
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_5_Template(rf, ctx) { if (rf & 1) {
158
+ i0.ɵɵelementContainerStart(0);
159
+ i0.ɵɵelement(1, "acl-crd-resource-requirements", 32);
160
+ i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_5_ng_template_2_Template, 1, 2, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor);
161
+ i0.ɵɵelementContainerEnd();
162
+ } if (rf & 2) {
163
+ const resourceRequirementsReadonly_r7 = i0.ɵɵreference(3);
164
+ const ctx_r0 = i0.ɵɵnextContext(5);
165
+ i0.ɵɵadvance();
166
+ i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled)("aclReadonlyFieldTemplate", resourceRequirementsReadonly_r7);
167
+ } }
168
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_6_ng_template_2_Template(rf, ctx) { if (rf & 1) {
169
+ i0.ɵɵelement(0, "acl-crd-yaml-editor", 35);
170
+ } if (rf & 2) {
171
+ const ctx_r0 = i0.ɵɵnextContext(6);
172
+ i0.ɵɵproperty("ngModel", ctx_r0.control.value)("actionsConfig", ctx_r0.viewActions)("options", ctx_r0.viewOptions);
173
+ } }
174
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_6_Template(rf, ctx) { if (rf & 1) {
175
+ i0.ɵɵelementContainerStart(0);
176
+ i0.ɵɵelement(1, "acl-crd-yaml-editor", 34);
177
+ i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_6_ng_template_2_Template, 1, 3, "ng-template", null, 6, i0.ɵɵtemplateRefExtractor);
178
+ i0.ɵɵelementContainerEnd();
179
+ } if (rf & 2) {
180
+ const yamlReadonly_r8 = i0.ɵɵreference(3);
181
+ const ctx_r0 = i0.ɵɵnextContext(5);
182
+ i0.ɵɵadvance();
183
+ i0.ɵɵproperty("formControl", ctx_r0.control)("required", ctx_r0.isRequired)("actionsConfig", ctx_r0.editorActions)("options", ctx_r0.editorOptions)("aclReadonlyField", ctx_r0.isDisabled)("aclReadonlyFieldTemplate", yamlReadonly_r8);
184
+ } }
185
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_7_ng_template_2_Template(rf, ctx) { if (rf & 1) {
186
+ i0.ɵɵelement(0, "acl-crd-resource-prefix", 37);
187
+ } if (rf & 2) {
188
+ const ctx_r0 = i0.ɵɵnextContext(6);
189
+ i0.ɵɵproperty("field", ctx_r0.field)("ngModel", ctx_r0.control.value)("readonly", true);
190
+ } }
191
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_7_Template(rf, ctx) { if (rf & 1) {
192
+ i0.ɵɵelementContainerStart(0);
193
+ i0.ɵɵelement(1, "acl-crd-resource-prefix", 36);
194
+ i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_7_ng_template_2_Template, 1, 3, "ng-template", null, 7, i0.ɵɵtemplateRefExtractor);
195
+ i0.ɵɵelementContainerEnd();
196
+ } if (rf & 2) {
197
+ const resourcePrefixReadonly_r9 = i0.ɵɵreference(3);
198
+ const ctx_r0 = i0.ɵɵnextContext(5);
199
+ i0.ɵɵadvance();
200
+ i0.ɵɵproperty("formErrors", ctx_r0.control.errors)("field", ctx_r0.field)("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled)("aclReadonlyFieldTemplate", resourcePrefixReadonly_r9);
201
+ } }
202
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_8_Template(rf, ctx) { if (rf & 1) {
203
+ i0.ɵɵelementContainerStart(0);
204
+ i0.ɵɵelement(1, "acl-crd-basic-auth-secret", 38);
205
+ i0.ɵɵelementContainerEnd();
206
+ } if (rf & 2) {
207
+ const ctx_r0 = i0.ɵɵnextContext(5);
208
+ i0.ɵɵadvance();
209
+ i0.ɵɵproperty("field", ctx_r0.field)("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled);
210
+ } }
211
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_textarea_9_Template(rf, ctx) { if (rf & 1) {
212
+ i0.ɵɵelement(0, "textarea", 39);
213
+ i0.ɵɵpipe(1, "pure");
214
+ i0.ɵɵpipe(2, "translate");
215
+ } if (rf & 2) {
216
+ const ctx_r0 = i0.ɵɵnextContext(5);
217
+ i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled)("placeholder", i0.ɵɵpipeBind1(2, 8, i0.ɵɵpipeBind3(1, 4, ctx_r0.field.capabilities, ctx_r0.getDisplayByCapability, ctx_r0.SpecCapability.placeholder)));
218
+ } }
219
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_tags_input_10_Template(rf, ctx) { if (rf & 1) {
220
+ i0.ɵɵelement(0, "aui-tags-input", 40);
221
+ i0.ɵɵpipe(1, "pure");
222
+ i0.ɵɵpipe(2, "translate");
223
+ } if (rf & 2) {
224
+ const ctx_r0 = i0.ɵɵnextContext(5);
225
+ i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("placeholder", i0.ɵɵpipeBind1(2, 9, i0.ɵɵpipeBind3(1, 5, ctx_r0.field.capabilities, ctx_r0.getDisplayByCapability, ctx_r0.SpecCapability.placeholder)))("aclReadonlyField", ctx_r0.isDisabled)("clearable", ctx_r0.isClearable);
226
+ } }
227
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_11_acl_crd_link_1_Template(rf, ctx) { if (rf & 1) {
228
+ i0.ɵɵelement(0, "acl-crd-link", 42);
229
+ } if (rf & 2) {
230
+ const ctx_r0 = i0.ɵɵnextContext(6);
231
+ i0.ɵɵproperty("field", ctx_r0.field)("formControl", ctx_r0.control);
232
+ } }
233
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_11_Template(rf, ctx) { if (rf & 1) {
234
+ i0.ɵɵelementContainerStart(0);
235
+ i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_11_acl_crd_link_1_Template, 1, 2, "acl-crd-link", 41);
236
+ i0.ɵɵpipe(2, "pure");
237
+ i0.ɵɵelementContainerEnd();
238
+ } if (rf & 2) {
239
+ i0.ɵɵnextContext();
240
+ const textField_r10 = i0.ɵɵreference(13);
241
+ const ctx_r0 = i0.ɵɵnextContext(4);
242
+ i0.ɵɵadvance();
243
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(2, 2, ctx_r0.field, ctx_r0.isLink) && ctx_r0.isDisabled)("ngIfElse", textField_r10);
244
+ } }
245
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_template_12_Template(rf, ctx) { if (rf & 1) {
246
+ i0.ɵɵelement(0, "input", 43);
247
+ i0.ɵɵpipe(1, "pure");
248
+ i0.ɵɵpipe(2, "translate");
249
+ } if (rf & 2) {
250
+ const ctx_r0 = i0.ɵɵnextContext(5);
251
+ i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("placeholder", i0.ɵɵpipeBind1(2, 8, i0.ɵɵpipeBind3(1, 4, ctx_r0.field.capabilities, ctx_r0.getDisplayByCapability, ctx_r0.SpecCapability.placeholder)))("aclReadonlyField", ctx_r0.isDisabled);
252
+ } }
253
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_Template(rf, ctx) { if (rf & 1) {
254
+ i0.ɵɵelementStart(0, "acl-crd-form-item", 14);
255
+ i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_input_1_Template, 3, 10, "input", 15)(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_2_Template, 4, 3, "ng-container", 16)(3, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_Template, 3, 2, "ng-container", 16)(4, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_Template, 6, 8, "aui-radio-group", 17)(5, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_5_Template, 4, 4, "ng-container", 16)(6, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_6_Template, 4, 6, "ng-container", 16)(7, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_7_Template, 4, 6, "ng-container", 16)(8, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_8_Template, 2, 4, "ng-container", 16)(9, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_textarea_9_Template, 3, 10, "textarea", 18)(10, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_tags_input_10_Template, 3, 11, "aui-tags-input", 19)(11, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_11_Template, 3, 5, "ng-container", 20)(12, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_template_12_Template, 3, 10, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
256
+ i0.ɵɵelementEnd();
257
+ } if (rf & 2) {
258
+ const meta_r11 = i0.ɵɵnextContext(2).ngIf;
259
+ const ctx_r0 = i0.ɵɵnextContext(2);
260
+ i0.ɵɵproperty("ngSwitch", meta_r11.fieldType);
261
+ i0.ɵɵadvance();
262
+ i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.number);
263
+ i0.ɵɵadvance();
264
+ i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.booleanSwitch);
265
+ i0.ɵɵadvance();
266
+ i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.select);
267
+ i0.ɵɵadvance();
268
+ i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.radio);
269
+ i0.ɵɵadvance();
270
+ i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.resourceRequirements);
271
+ i0.ɵɵadvance();
272
+ i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.yaml);
273
+ i0.ɵɵadvance();
274
+ i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.k8sResourcePrefix);
275
+ i0.ɵɵadvance();
276
+ i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.basicAuthSecret);
277
+ i0.ɵɵadvance();
278
+ i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.textarea);
279
+ i0.ɵɵadvance();
280
+ i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.tagsInput);
281
+ } }
282
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_div_4_ng_container_1_Template(rf, ctx) { if (rf & 1) {
283
+ i0.ɵɵelementContainer(0);
284
+ } }
285
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_div_4_Template(rf, ctx) { if (rf & 1) {
286
+ i0.ɵɵelementStart(0, "div", 44);
287
+ i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_div_4_ng_container_1_Template, 1, 0, "ng-container", 45);
288
+ i0.ɵɵelementEnd();
289
+ } if (rf & 2) {
290
+ const widget_r12 = ctx.ngIf;
291
+ i0.ɵɵadvance();
292
+ i0.ɵɵproperty("ngComponentOutlet", widget_r12.component);
293
+ } }
294
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_label_2_Template(rf, ctx) { if (rf & 1) {
295
+ i0.ɵɵelementStart(0, "label", 50);
296
+ i0.ɵɵtext(1);
297
+ i0.ɵɵpipe(2, "translate");
298
+ i0.ɵɵelementEnd();
299
+ } if (rf & 2) {
300
+ const label_r13 = ctx.ngIf;
301
+ i0.ɵɵadvance();
302
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1, label_r13));
303
+ } }
304
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_ng_container_4_Template(rf, ctx) { if (rf & 1) {
305
+ i0.ɵɵelementContainer(0);
306
+ } }
307
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
308
+ i0.ɵɵelementContainerStart(0);
309
+ i0.ɵɵelementStart(1, "aui-form-item", 46);
310
+ i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_label_2_Template, 3, 3, "label", 47);
311
+ i0.ɵɵpipe(3, "pure");
312
+ i0.ɵɵtemplate(4, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_ng_container_4_Template, 1, 0, "ng-container", 48);
313
+ i0.ɵɵelementStart(5, "div", 49);
314
+ i0.ɵɵtext(6);
315
+ i0.ɵɵpipe(7, "pure");
316
+ i0.ɵɵpipe(8, "translate");
317
+ i0.ɵɵelementEnd()();
318
+ i0.ɵɵelementContainerEnd();
319
+ } if (rf & 2) {
320
+ const remoteModule_r14 = i0.ɵɵnextContext().ngIf;
321
+ const ctx_r0 = i0.ɵɵnextContext(5);
322
+ i0.ɵɵadvance();
323
+ i0.ɵɵproperty("emptyAddon", false);
324
+ i0.ɵɵadvance();
325
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(3, 5, ctx_r0.field, ctx_r0.getFieldDisplayName));
326
+ i0.ɵɵadvance(2);
327
+ i0.ɵɵproperty("ngComponentOutlet", remoteModule_r14.component)("ngComponentOutletInjector", remoteModule_r14.injector);
328
+ i0.ɵɵadvance(2);
329
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8, 11, i0.ɵɵpipeBind2(7, 8, ctx_r0.field, ctx_r0.getFieldDescription)), " ");
330
+ } }
331
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_template_3_ng_container_0_Template(rf, ctx) { if (rf & 1) {
332
+ i0.ɵɵelementContainer(0);
333
+ } }
334
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {
335
+ i0.ɵɵtemplate(0, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_template_3_ng_container_0_Template, 1, 0, "ng-container", 48);
336
+ } if (rf & 2) {
337
+ const remoteModule_r14 = i0.ɵɵnextContext().ngIf;
338
+ i0.ɵɵproperty("ngComponentOutlet", remoteModule_r14.component)("ngComponentOutletInjector", remoteModule_r14.injector);
339
+ } }
340
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_Template(rf, ctx) { if (rf & 1) {
341
+ i0.ɵɵelementContainerStart(0);
342
+ i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_Template, 9, 13, "ng-container", 11);
343
+ i0.ɵɵpipe(2, "pure");
344
+ i0.ɵɵtemplate(3, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_template_3_Template, 1, 2, "ng-template", null, 8, i0.ɵɵtemplateRefExtractor);
345
+ i0.ɵɵelementContainerEnd();
346
+ } if (rf & 2) {
347
+ const pureRemote_r15 = i0.ɵɵreference(4);
348
+ const ctx_r0 = i0.ɵɵnextContext(5);
349
+ i0.ɵɵadvance();
350
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(2, 2, ctx_r0.field, ctx_r0.getFieldDisplayName))("ngIfElse", pureRemote_r15);
351
+ } }
352
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_Template(rf, ctx) { if (rf & 1) {
353
+ i0.ɵɵelementContainerStart(0);
354
+ i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_Template, 5, 5, "ng-container", 10);
355
+ i0.ɵɵpipe(2, "async");
356
+ i0.ɵɵelementContainerEnd();
357
+ } if (rf & 2) {
358
+ const ctx_r0 = i0.ɵɵnextContext(4);
359
+ i0.ɵɵadvance();
360
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(2, 1, ctx_r0.remoteModule$));
361
+ } }
362
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
363
+ i0.ɵɵelementContainerStart(0);
364
+ i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_Template, 14, 11, "acl-crd-form-item", 12);
365
+ i0.ɵɵpipe(2, "pure");
366
+ i0.ɵɵpipe(3, "pure");
367
+ i0.ɵɵtemplate(4, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_div_4_Template, 2, 1, "div", 13);
368
+ i0.ɵɵpipe(5, "pure");
369
+ i0.ɵɵtemplate(6, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_Template, 3, 3, "ng-container", 10);
370
+ i0.ɵɵpipe(7, "pure");
371
+ i0.ɵɵelementContainerEnd();
372
+ } if (rf & 2) {
373
+ const ctx_r0 = i0.ɵɵnextContext(3);
374
+ i0.ɵɵadvance();
375
+ i0.ɵɵproperty("ngIf", !i0.ɵɵpipeBind2(2, 3, ctx_r0.field.capabilities, ctx_r0.getWidgets) && !i0.ɵɵpipeBind2(3, 6, ctx_r0.field, ctx_r0.isRemoteField));
376
+ i0.ɵɵadvance(3);
377
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(5, 9, ctx_r0.field.capabilities, ctx_r0.getWidgets));
378
+ i0.ɵɵadvance(2);
379
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(7, 12, ctx_r0.field, ctx_r0.isRemoteField));
380
+ } }
381
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_crd_form_item_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
382
+ i0.ɵɵelementContainer(0);
383
+ } }
384
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_crd_form_item_1_Template(rf, ctx) { if (rf & 1) {
385
+ i0.ɵɵelementStart(0, "acl-crd-form-item", 53);
386
+ i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_crd_form_item_1_ng_container_1_Template, 1, 0, "ng-container", 54);
387
+ i0.ɵɵelementEnd();
388
+ } if (rf & 2) {
389
+ i0.ɵɵnextContext(5);
390
+ const passwordView_r16 = i0.ɵɵreference(2);
391
+ i0.ɵɵproperty("plain", true);
392
+ i0.ɵɵadvance();
393
+ i0.ɵɵproperty("ngTemplateOutlet", passwordView_r16);
394
+ } }
395
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_password_input_2_Template(rf, ctx) { if (rf & 1) {
396
+ i0.ɵɵelement(0, "acl-password-input", 55);
397
+ i0.ɵɵpipe(1, "pure");
398
+ i0.ɵɵpipe(2, "translate");
399
+ i0.ɵɵpipe(3, "pure");
400
+ i0.ɵɵpipe(4, "translate");
401
+ i0.ɵɵpipe(5, "pure");
402
+ i0.ɵɵpipe(6, "pure");
403
+ i0.ɵɵpipe(7, "translate");
404
+ } if (rf & 2) {
405
+ const meta_r11 = i0.ɵɵnextContext(3).ngIf;
406
+ const ctx_r0 = i0.ɵɵnextContext(2);
407
+ i0.ɵɵproperty("initPassword", ctx_r0.control.value)("label", i0.ɵɵpipeBind1(2, 15, i0.ɵɵpipeBind2(1, 12, ctx_r0.field, ctx_r0.getFieldDisplayName)))("hint", (ctx_r0.customDescription == null ? null : ctx_r0.customDescription.templateRef) || i0.ɵɵpipeBind1(4, 20, i0.ɵɵpipeBind2(3, 17, ctx_r0.field, ctx_r0.getFieldDescription)))("formControl", ctx_r0.control)("required", ctx_r0.isRequired)("readonly", ctx_r0.crdForm.readonly)("isUpdate", !!ctx_r0.control.value && !ctx_r0.control.dirty)("strongPassword", meta_r11.fieldType !== ctx_r0.SpecCapability.externalPassword)("enableConfirm", meta_r11.fieldType === ctx_r0.SpecCapability.confirmPassword)("encoding", i0.ɵɵpipeBind3(5, 22, ctx_r0.field, ctx_r0.getEncoding, "password"))("pattern", ctx_r0.field.validations == null ? null : ctx_r0.field.validations.pattern)("placeholder", i0.ɵɵpipeBind1(7, 30, i0.ɵɵpipeBind3(6, 26, ctx_r0.field.capabilities, ctx_r0.getDisplayByCapability, ctx_r0.SpecCapability.placeholder)));
408
+ } }
409
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
410
+ i0.ɵɵelementContainerStart(0);
411
+ i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_crd_form_item_1_Template, 2, 2, "acl-crd-form-item", 51)(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_password_input_2_Template, 8, 32, "acl-password-input", 52);
412
+ i0.ɵɵelementContainerEnd();
413
+ } if (rf & 2) {
414
+ const ctx_r0 = i0.ɵɵnextContext(4);
415
+ i0.ɵɵadvance();
416
+ i0.ɵɵproperty("ngIf", ctx_r0.isDisabled);
417
+ i0.ɵɵadvance();
418
+ i0.ɵɵproperty("ngIf", !ctx_r0.isDisabled);
419
+ } }
420
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
421
+ const _r17 = i0.ɵɵgetCurrentView();
422
+ i0.ɵɵelementContainerStart(0);
423
+ i0.ɵɵelementStart(1, "acl-operand-field-group", 56);
424
+ i0.ɵɵlistener("valueChange", function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_1_Template_acl_operand_field_group_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.valueChange.emit($event)); });
425
+ i0.ɵɵelementEnd();
426
+ i0.ɵɵelementContainerEnd();
427
+ } if (rf & 2) {
428
+ const ctx_r0 = i0.ɵɵnextContext(4);
429
+ i0.ɵɵadvance();
430
+ i0.ɵɵproperty("fields", ctx_r0.fields)("fieldGroup", ctx_r0.field)("readonly", ctx_r0.isDisabled)("formDataState", ctx_r0.formDataState)("formErrors", ctx_r0.formErrors);
431
+ } }
432
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_acl_crd_array_table_1_Template(rf, ctx) { if (rf & 1) {
433
+ const _r18 = i0.ɵɵgetCurrentView();
434
+ i0.ɵɵelementStart(0, "acl-crd-array-table", 58);
435
+ i0.ɵɵlistener("valueChange", function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_acl_crd_array_table_1_Template_acl_crd_array_table_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r0 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r0.valueChange.emit($event)); });
436
+ i0.ɵɵelementEnd();
437
+ } if (rf & 2) {
438
+ const ctx_r0 = i0.ɵɵnextContext(5);
439
+ i0.ɵɵproperty("arrayFieldGroup", ctx_r0.field)("formDataState", ctx_r0.formDataState)("readonly", ctx_r0.isDisabled);
440
+ } }
441
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
442
+ const _r19 = i0.ɵɵgetCurrentView();
443
+ i0.ɵɵelementStart(0, "acl-operand-array-field-group", 59);
444
+ i0.ɵɵlistener("valueChange", function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_ng_template_3_Template_acl_operand_array_field_group_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r0 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r0.valueChange.emit($event)); });
445
+ i0.ɵɵelementEnd();
446
+ } if (rf & 2) {
447
+ const ctx_r0 = i0.ɵɵnextContext(5);
448
+ i0.ɵɵproperty("arrayFieldGroup", ctx_r0.field)("readonly", ctx_r0.isDisabled)("formDataState", ctx_r0.formDataState);
449
+ } }
450
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_Template(rf, ctx) { if (rf & 1) {
451
+ i0.ɵɵelementContainerStart(0);
452
+ i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_acl_crd_array_table_1_Template, 1, 3, "acl-crd-array-table", 57);
453
+ i0.ɵɵpipe(2, "pure");
454
+ i0.ɵɵtemplate(3, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_ng_template_3_Template, 1, 3, "ng-template", null, 9, i0.ɵɵtemplateRefExtractor);
455
+ i0.ɵɵelementContainerEnd();
456
+ } if (rf & 2) {
457
+ const defaultArrayFiled_r20 = i0.ɵɵreference(4);
458
+ const ctx_r0 = i0.ɵɵnextContext(4);
459
+ i0.ɵɵadvance();
460
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(2, 2, ctx_r0.field, ctx_r0.isArrayFieldTable))("ngIfElse", defaultArrayFiled_r20);
461
+ } }
462
+ function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
463
+ i0.ɵɵtemplate(0, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_Template, 3, 2, "ng-container", 10)(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_1_Template, 2, 5, "ng-container", 10)(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_Template, 5, 5, "ng-container", 10);
464
+ } if (rf & 2) {
465
+ const meta_r11 = i0.ɵɵnextContext().ngIf;
466
+ const ctx_r0 = i0.ɵɵnextContext(2);
467
+ i0.ɵɵproperty("ngIf", meta_r11.fieldType === ctx_r0.SpecCapability.password || meta_r11.fieldType === ctx_r0.SpecCapability.confirmPassword || meta_r11.fieldType === ctx_r0.SpecCapability.externalPassword);
468
+ i0.ɵɵadvance();
469
+ i0.ɵɵproperty("ngIf", ctx_r0.isGroupField(ctx_r0.field) && (ctx_r0.field.fieldList == null ? null : ctx_r0.field.fieldList.length) > 0);
470
+ i0.ɵɵadvance();
471
+ i0.ɵɵproperty("ngIf", ctx_r0.isArrayField(ctx_r0.field));
472
+ } }
473
+ function OperandFieldComponent_ng_container_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {
474
+ i0.ɵɵelementContainerStart(0);
475
+ i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_Template, 8, 15, "ng-container", 11)(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_Template, 3, 3, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
476
+ i0.ɵɵelementContainerEnd();
477
+ } if (rf & 2) {
478
+ const meta_r11 = ctx.ngIf;
479
+ const advancedFiled_r21 = i0.ɵɵreference(3);
480
+ i0.ɵɵadvance();
481
+ i0.ɵɵproperty("ngIf", meta_r11.isBasicTypeField)("ngIfElse", advancedFiled_r21);
482
+ } }
483
+ function OperandFieldComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
484
+ i0.ɵɵelementContainerStart(0);
485
+ i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_Template, 4, 2, "ng-container", 10);
486
+ i0.ɵɵpipe(2, "pure");
487
+ i0.ɵɵpipe(3, "pure");
488
+ i0.ɵɵelementContainerEnd();
489
+ } if (rf & 2) {
490
+ const ctx_r0 = i0.ɵɵnextContext();
491
+ i0.ɵɵadvance();
492
+ i0.ɵɵproperty("ngIf", i0.ɵɵpureFunction2(7, _c0, i0.ɵɵpipeBind2(2, 1, ctx_r0.field, ctx_r0.getFieldType), i0.ɵɵpipeBind2(3, 4, ctx_r0.field, ctx_r0.isBasicTypeField)));
493
+ } }
494
+ function OperandFieldComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
495
+ i0.ɵɵtext(0);
496
+ } if (rf & 2) {
497
+ const ctx_r0 = i0.ɵɵnextContext();
498
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.PASSWORD_REVEAL, "\n");
499
+ } }
500
+ export const PASSWORD_REVEAL = '******';
501
+ const ENCODING_MAPPER = {
502
+ base64: {
503
+ decode,
504
+ encode,
505
+ },
506
+ };
507
+ export class OperandFieldComponent {
508
+ get isDisabled() {
509
+ return this.readonly || this.field?.disabled;
510
+ }
511
+ get effectControlDefaultValue() {
512
+ return this.crdForm.effectControlDefaultValue;
513
+ }
514
+ get isRequired() {
515
+ return isRequired(this.field);
516
+ }
517
+ get isCreatable() {
518
+ return isCreatable(this.field);
519
+ }
520
+ get isMultiple() {
521
+ return isMultiple(this.field);
522
+ }
523
+ get isAllowCreate() {
524
+ return isAllowCreate(this.field);
525
+ }
526
+ get isClearable() {
527
+ return isClearable(this.field);
528
+ }
529
+ // 通过hidden属性隐藏不必要的元素,和 aclScrollToFirstInvalid 指令过滤隐藏元素保持一致
530
+ get isHidden() {
531
+ return ((this.hasFieldDependency() && !this.checkFieldDependency(this.field)) ||
532
+ this._hidden);
533
+ }
534
+ set isHidden(hidden) {
535
+ this._hidden = hidden;
536
+ this.cdr.markForCheck();
537
+ }
538
+ get isCustomErrorsMapper() {
539
+ return getFieldType(this.field) === SpecCapability.resourceRequirements;
540
+ }
541
+ constructor(crdForm, injector, http, cdr) {
542
+ this.crdForm = crdForm;
543
+ this.injector = injector;
544
+ this.http = http;
545
+ this.cdr = cdr;
546
+ this.readonly = false;
547
+ this.valueChange = new EventEmitter();
548
+ this.itemRemove = new EventEmitter();
549
+ this.control = new FormControl();
550
+ this.onDestroy$ = new Subject();
551
+ this.getFieldType = getFieldType;
552
+ this.isLink = isLink;
553
+ this.SpecCapability = SpecCapability;
554
+ this.getFieldDisplayName = getFieldDisplayName;
555
+ this.getFieldDescription = getFieldDescription;
556
+ this.getRadioOptions = getRadioOptions;
557
+ this.getDisplayByCapability = getDisplayByCapability;
558
+ this.editorOptions = yamlWriteOptions;
559
+ this.editorActions = createActions;
560
+ this.isGroupField = isGroupField;
561
+ this.isArrayField = isArrayField;
562
+ this.isRemoteField = isRemoteField;
563
+ this.isArrayFieldTable = isArrayFieldTable;
564
+ this.convertBooleanSwitchValue = convertBooleanSwitchValue;
565
+ this.loading$ = new BehaviorSubject(false);
566
+ this.PASSWORD_REVEAL = PASSWORD_REVEAL;
567
+ this.isBasicTypeField = (filed) => ![
568
+ SpecCapability.object,
569
+ SpecCapability.array,
570
+ SpecCapability.password,
571
+ SpecCapability.confirmPassword,
572
+ SpecCapability.externalPassword,
573
+ ].includes(getFieldType(filed));
574
+ this.viewActions = viewActions;
575
+ this.viewOptions = yamlReadOptions;
576
+ this.remoteModule$ = combineLatest([
577
+ this.field$,
578
+ this.remoteModuleDefinition$,
579
+ ]).pipe(map(([field, remoteModuleDefinition]) => {
580
+ const remoteWidget = this.getRemoteWidget(field, remoteModuleDefinition);
581
+ return (remoteWidget && {
582
+ injector: createInjector(remoteModuleDefinition.module, this.injector),
583
+ module: remoteModuleDefinition.module,
584
+ component: remoteWidget.component,
585
+ });
586
+ }), filter(Boolean), takeUntil(this.onDestroy$), shareReplay(1));
587
+ this.getWidgets = (capabilities) => {
588
+ const descriptor = capabilities.find(c => c.startsWith(SpecCapability.custom));
589
+ return descriptor
590
+ ? this.crdForm.widgets?.find(w => w.descriptor === descriptor.split('?=')[0])
591
+ : null;
592
+ };
593
+ this.dynamicOptions$ = this.field$.pipe(switchMap(field => {
594
+ const dynamicExpression = new PropsFieldExpression(field).expressions;
595
+ if (!dynamicExpression.options) {
596
+ return of(this.getSelectOptions(field).map(value => ({
597
+ label: value,
598
+ value,
599
+ })));
600
+ }
601
+ return combineLatest([
602
+ this.crdForm.formContext$,
603
+ this.formDataState$,
604
+ ]).pipe(debounceTime(100), distinctUntilChanged((p, n) => compareWithSubscribedPaths(dynamicExpression, p, n)), switchMap(([formContext, formDataState]) => {
605
+ let result = [];
606
+ const { api, labelPath, valuePath, expression } = dynamicExpression.options;
607
+ const stringExpressionContext = this.getStringExpressionContext(formContext, formDataState);
608
+ if (!api && expression) {
609
+ result = evalInContext(expression, stringExpressionContext);
610
+ }
611
+ else {
612
+ return stringExpressionContext.fetchResourceList(template(api)(stringExpressionContext), (item) => {
613
+ const value = get(item, valuePath, '');
614
+ return {
615
+ label: get(item, labelPath, value),
616
+ value,
617
+ };
618
+ });
619
+ }
620
+ return isObservable(result) ? result : of(result);
621
+ }));
622
+ }), publishRef());
623
+ this.dynamicDefaultValue$ = this.field$.pipe(switchMap(field => {
624
+ const defaultValueExpression = new PropsFieldExpression(field)
625
+ .expressions;
626
+ if (!defaultValueExpression.default ||
627
+ this.getFieldCurrentValue() !== undefined) {
628
+ return of({
629
+ value: this.getFieldValue(),
630
+ isDynamic: false,
631
+ });
632
+ }
633
+ return combineLatest([
634
+ this.crdForm.formContext$,
635
+ this.formDataState$,
636
+ ]).pipe(distinctUntilChanged((p, n) => compareWithSubscribedPaths(defaultValueExpression, p, n)), map(([formContext, formDataState]) => template(defaultValueExpression.default)(this.getStringExpressionContext(formContext, formDataState))), map(value => ({
637
+ value,
638
+ isDynamic: true,
639
+ })));
640
+ }), publishRef());
641
+ this.dynamicHiddenValue$ = this.field$.pipe(switchMap(field => {
642
+ const { expressions } = new PropsFieldExpression(field);
643
+ if (!expressions.hidden) {
644
+ return of(false);
645
+ }
646
+ return combineLatest([
647
+ this.crdForm.formContext$,
648
+ this.formDataState$,
649
+ ]).pipe(distinctUntilChanged((p, n) => compareWithSubscribedPaths(expressions, p, n)), map(([formContext, formDataState]) => template(expressions.hidden)(this.getStringExpressionContext(formContext, formDataState)) === 'true'));
650
+ }));
651
+ this.getStringExpressionContext = (formContext, formDataState) => ({
652
+ fetchResourceList: this.fetchResourceList,
653
+ context: formContext,
654
+ formData: formDataState.toJS()?.spec || {},
655
+ });
656
+ this.fetchResourceList = (url, callback) => {
657
+ this.loading$.next(true);
658
+ return this.http
659
+ .get(`${API_GATEWAY}${url}`)
660
+ .pipe(map(res => res.items.map(item => callback.call(this, item))), skipError([]), finalize(() => {
661
+ this.loading$.next(false);
662
+ }));
663
+ };
664
+ }
665
+ registerControl() {
666
+ this.crdForm.controlMap.set(getOperandPath(this.field), this.control);
667
+ }
668
+ unRegisterControl() {
669
+ this.crdForm.controlMap.delete(getOperandPath(this.field));
670
+ }
671
+ getRemoteWidget(field, remoteDefinition) {
672
+ const descriptor = field.capabilities.find(c => c.startsWith(SpecCapability.remote));
673
+ return (descriptor &&
674
+ remoteDefinition?.components?.find(w => w.descriptor === descriptor.split('?=')[0]));
675
+ }
676
+ ngOnInit() {
677
+ this.dynamicHiddenValue$.subscribe(value => {
678
+ this.isHidden = value;
679
+ });
680
+ this.registerControl();
681
+ if (this.field.validations) {
682
+ const validators = $map(this.field.validations, (val, rule) => {
683
+ switch (rule) {
684
+ case Validations.maximum: {
685
+ return Validators.max(val);
686
+ }
687
+ case Validations.minimum: {
688
+ return Validators.min(val);
689
+ }
690
+ case Validations.required: {
691
+ return Validators.required;
692
+ }
693
+ case Validations.maxLength: {
694
+ return Validators.maxLength(val);
695
+ }
696
+ case Validations.minLength: {
697
+ return Validators.minLength(val);
698
+ }
699
+ case Validations.pattern: {
700
+ return Validators.pattern(val);
701
+ }
702
+ default: {
703
+ return null;
704
+ }
705
+ }
706
+ }).filter(v => !!v);
707
+ if (validators.length) {
708
+ this.control.addValidators((this._validators = validators));
709
+ }
710
+ }
711
+ }
712
+ // 将 valueChanges 的逻辑移动到 ngAfterViewInit 中,主要是为了避免全局 ValidatorsDirective带来的影响,需要等到ValidatorsDirective的ngAfterViewInit之后再订阅control的valueChanges
713
+ ngAfterViewInit() {
714
+ this.control.valueChanges
715
+ .pipe(startWithCondition(this.effectControlDefaultValue, this.control.value), debounceTime(50), distinctUntilChanged(), takeUntil(this.onDestroy$), filter(v =>
716
+ // FIXME: This is hack. yaml value will only be null if format error(because try-catch), the data flow now is from control => formDataState => control(will judge equality),this will make control be empty
717
+ getFieldType(this.field) === SpecCapability.yaml ? v !== null : true))
718
+ .subscribe(value => {
719
+ this.valueChange.emit({
720
+ field: this.field,
721
+ data: value,
722
+ errors: this.control.errors,
723
+ });
724
+ });
725
+ }
726
+ ngOnDestroy() {
727
+ this.onDestroy$.next();
728
+ this.onDestroy$.complete();
729
+ this.unRegisterControl();
730
+ if (this._validators?.length) {
731
+ this.control.removeValidators(this._validators);
732
+ }
733
+ }
734
+ ngOnChanges({ formDataState }) {
735
+ if (this.field && formDataState?.firstChange) {
736
+ this.dynamicDefaultValue$
737
+ .pipe(take(1))
738
+ .subscribe(({ value, isDynamic }) => {
739
+ this.control.setValue(value, { emitEvent: isDynamic });
740
+ });
741
+ }
742
+ else if (formDataState?.currentValue) {
743
+ const currentValue = getFormData(formDataState.currentValue, this.field.path, false);
744
+ const prevValue = getFormData(formDataState.previousValue, this.field.path, false);
745
+ const rawValue = isImmutable(currentValue)
746
+ ? currentValue.toJS()
747
+ : currentValue;
748
+ if (!isEqual(rawValue, prevValue) &&
749
+ !isEqual(rawValue, this.control.value)) {
750
+ this.control.setValue(rawValue);
751
+ }
752
+ }
753
+ }
754
+ getFieldCurrentValue() {
755
+ let value = getFormData(this.formDataState, this.field.path, false);
756
+ // 如果值是 Immutable object 类型,需要转成原始 JS Object
757
+ if (isImmutable(value)) {
758
+ value = value.toJS();
759
+ }
760
+ return value;
761
+ }
762
+ getFieldValue(useDefault = true) {
763
+ const currentValue = this.getFieldCurrentValue();
764
+ if (currentValue === undefined && useDefault) {
765
+ return getDefaultValue(this.field);
766
+ }
767
+ return currentValue;
768
+ }
769
+ getOptionDisplay(value, options) {
770
+ return options.find(item => item.value === value)?.display;
771
+ }
772
+ getSelectOptions(field) {
773
+ return field.capabilities
774
+ .filter(c => c.startsWith(SpecCapability.select))
775
+ .map(c => c.split(SpecCapability.select)?.[1]);
776
+ }
777
+ getEncoding(field, type) {
778
+ const prefix = `urn:alm:descriptor:${type}:encoding:`;
779
+ const capability = field.capabilities.find(it => it.startsWith(prefix));
780
+ let encoding;
781
+ if (capability) {
782
+ encoding = ENCODING_MAPPER[capability.slice(prefix.length)];
783
+ }
784
+ return (encoding || {
785
+ encode: identity,
786
+ decode: identity,
787
+ });
788
+ }
789
+ hasFieldDependency() {
790
+ return this.field.capabilities.some(c => c.startsWith(SpecCapability.fieldDependency));
791
+ }
792
+ checkFieldDependency(field) {
793
+ try {
794
+ const dependencies = field?.capabilities
795
+ .filter(c => c.startsWith(SpecCapability.fieldDependency))
796
+ .map(i => i.split(SpecCapability.fieldDependency)[1]);
797
+ if (!dependencies?.length) {
798
+ return true;
799
+ }
800
+ const parentPaths = dependencies.map(d => d.split(':'));
801
+ const state = parentPaths.every(([path, ...values]) => {
802
+ // Support depend one of values
803
+ const dependencyField = this.fields.find(f => f.path === normalizePath(path));
804
+ const dependencyDefaultValue = getDefaultValue(dependencyField);
805
+ const formStateValue = getFormData(this.formDataState, path);
806
+ const currentValue = formStateValue === null || formStateValue === undefined
807
+ ? dependencyDefaultValue
808
+ : formStateValue;
809
+ return values.some(val => convertValue(val, dependencyField.type) === currentValue);
810
+ });
811
+ /**
812
+ * 父 field dependency 不满足时,即隐藏时,本 field 也应当隐藏。
813
+ * 因为在大部分情形下,fieldDependency 与 oneOf 搭配来描述一组关联关系,很少只有 b 仅依赖于 a,当 a 隐藏后,还要根据 a 的默认值要求显示 b 的情况,
814
+ * 对于该情况,可以多加一个配备了额外 fieldDependency 的 Descriptor 来描述 b
815
+ */
816
+ return (parentPaths.every(([path]) => this.checkFieldDependency(this.fields.find(i => i.path === path))) && state);
817
+ }
818
+ catch (error) {
819
+ console.error(error);
820
+ return false;
821
+ }
822
+ }
823
+ static { this.ɵfac = function OperandFieldComponent_Factory(t) { return new (t || OperandFieldComponent)(i0.ɵɵdirectiveInject(i1.CrdFormComponent), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i2.HttpClient), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
824
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OperandFieldComponent, selectors: [["acl-operand-field"]], hostVars: 1, hostBindings: function OperandFieldComponent_HostBindings(rf, ctx) { if (rf & 2) {
825
+ i0.ɵɵhostProperty("hidden", ctx.isHidden);
826
+ } }, inputs: { field: "field", remoteModuleDefinition: "remoteModuleDefinition", readonly: "readonly", fields: "fields", formDataState: "formDataState", formErrors: "formErrors", customDescription: "customDescription" }, outputs: { valueChange: "valueChange", itemRemove: "itemRemove" }, features: [i0.ɵɵNgOnChangesFeature], decls: 3, vars: 1, consts: [["passwordView", ""], ["advancedFiled", ""], ["textField", ""], ["switchReadonly", ""], ["radioLabel", ""], ["resourceRequirementsReadonly", ""], ["yamlReadonly", ""], ["resourcePrefixReadonly", ""], ["pureRemote", ""], ["defaultArrayFiled", ""], [4, "ngIf"], [4, "ngIf", "ngIfElse"], [3, "ngSwitch", 4, "ngIf"], ["class", "tw-flex tw-w-full tw-flex-col", 4, "ngIf"], [3, "ngSwitch"], ["type", "number", "aui-input", "", "auiFormItemControl", "", 3, "required", "formControl", "aclReadonlyField", "placeholder", 4, "ngSwitchCase"], [4, "ngSwitchCase"], ["auiFormItemControl", "", 3, "formControl", "required", "aclReadonlyField", "aclReadonlyFieldTemplate", 4, "ngSwitchCase"], ["auiFormItemControl", "", "aui-input", "", 3, "required", "formControl", "aclReadonlyField", "placeholder", 4, "ngSwitchCase"], ["auiFormItemControl", "", "class", "tw-flex-1", 3, "required", "formControl", "placeholder", "aclReadonlyField", "clearable", 4, "ngSwitchCase"], [4, "ngSwitchDefault"], ["type", "number", "aui-input", "", "auiFormItemControl", "", 3, "required", "formControl", "aclReadonlyField", "placeholder"], ["auiFormItemControl", "", 3, "aclReadonlyField", "aclReadonlyFieldTemplate", "formControl"], ["auiFormItemControl", "", 3, "maxRowCount", "clearable", "filterable", "formControl", "required", "aclReadonlyField", "loading", "allowCreate", 4, "ngIf"], ["auiFormItemControl", "", 3, "clearable", "filterable", "formControl", "required", "aclReadonlyField", "loading", "allowCreate", 4, "ngIf"], ["auiFormItemControl", "", 3, "maxRowCount", "clearable", "filterable", "formControl", "required", "aclReadonlyField", "loading", "allowCreate"], [3, "value", "label", 4, "ngFor", "ngForOf"], [3, "value", "label"], ["auiFormItemControl", "", 3, "clearable", "filterable", "formControl", "required", "aclReadonlyField", "loading", "allowCreate"], ["auiFormItemControl", "", 3, "formControl", "required", "aclReadonlyField", "aclReadonlyFieldTemplate"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], ["auiFormItemControl", "", 3, "required", "formControl", "aclReadonlyField", "aclReadonlyFieldTemplate"], ["auiFormItemControl", "", 3, "ngModel", "readOnly"], ["auiFormItemControl", "", 3, "formControl", "required", "actionsConfig", "options", "aclReadonlyField", "aclReadonlyFieldTemplate"], ["auiFormItemControl", "", 3, "ngModel", "actionsConfig", "options"], ["auiFormItemControl", "", 3, "formErrors", "field", "required", "formControl", "aclReadonlyField", "aclReadonlyFieldTemplate"], ["auiFormItemControl", "", 3, "field", "ngModel", "readonly"], ["auiFormItemControl", "", 3, "field", "required", "formControl", "aclReadonlyField"], ["auiFormItemControl", "", "aui-input", "", 3, "required", "formControl", "aclReadonlyField", "placeholder"], ["auiFormItemControl", "", 1, "tw-flex-1", 3, "required", "formControl", "placeholder", "aclReadonlyField", "clearable"], ["auiFormItemControl", "", 3, "field", "formControl", 4, "ngIf", "ngIfElse"], ["auiFormItemControl", "", 3, "field", "formControl"], ["type", "text", "auiFormItemControl", "", "aui-input", "", 3, "required", "formControl", "placeholder", "aclReadonlyField"], [1, "tw-flex", "tw-w-full", "tw-flex-col"], [4, "ngComponentOutlet"], [3, "emptyAddon"], ["auiFormItemLabel", "", 4, "ngIf"], [4, "ngComponentOutlet", "ngComponentOutletInjector"], ["auiFormItemHint", ""], ["auiFormItemLabel", ""], [3, "plain", 4, "ngIf"], ["width", "large", 3, "initPassword", "label", "hint", "formControl", "required", "readonly", "isUpdate", "strongPassword", "enableConfirm", "encoding", "pattern", "placeholder", 4, "ngIf"], [3, "plain"], [4, "ngTemplateOutlet"], ["width", "large", 3, "initPassword", "label", "hint", "formControl", "required", "readonly", "isUpdate", "strongPassword", "enableConfirm", "encoding", "pattern", "placeholder"], [3, "valueChange", "fields", "fieldGroup", "readonly", "formDataState", "formErrors"], [3, "arrayFieldGroup", "formDataState", "readonly", "valueChange", 4, "ngIf", "ngIfElse"], [3, "valueChange", "arrayFieldGroup", "formDataState", "readonly"], [3, "valueChange", "arrayFieldGroup", "readonly", "formDataState"]], template: function OperandFieldComponent_Template(rf, ctx) { if (rf & 1) {
827
+ i0.ɵɵtemplate(0, OperandFieldComponent_ng_container_0_Template, 4, 10, "ng-container", 10)(1, OperandFieldComponent_ng_template_1_Template, 1, 1, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
828
+ } if (rf & 2) {
829
+ i0.ɵɵproperty("ngIf", ctx.field);
830
+ } }, styles: ["[_nghost-%COMP%] .input-group[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .aui-form-item__label-wrapper:not(.hasLabel){display:none}"], changeDetection: 0 }); }
831
+ }
832
+ __decorate([
833
+ ObservableInput(),
834
+ __metadata("design:type", Observable)
835
+ ], OperandFieldComponent.prototype, "field$", void 0);
836
+ __decorate([
837
+ ObservableInput(),
838
+ __metadata("design:type", Observable)
839
+ ], OperandFieldComponent.prototype, "remoteModuleDefinition$", void 0);
840
+ __decorate([
841
+ ObservableInput(),
842
+ __metadata("design:type", Observable)
843
+ ], OperandFieldComponent.prototype, "formDataState$", void 0);
844
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OperandFieldComponent, [{
845
+ type: Component,
846
+ args: [{ selector: 'acl-operand-field', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"field\">\n <ng-container\n *ngIf=\"{\n fieldType: field | pure: getFieldType,\n isBasicTypeField: field | pure: isBasicTypeField\n } as meta\"\n >\n <ng-container *ngIf=\"meta.isBasicTypeField; else advancedFiled\">\n <acl-crd-form-item\n *ngIf=\"\n !(field.capabilities | pure: getWidgets) &&\n !(field | pure: isRemoteField)\n \"\n [ngSwitch]=\"meta.fieldType\"\n >\n <input\n *ngSwitchCase=\"SpecCapability.number\"\n type=\"number\"\n aui-input\n auiFormItemControl\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n [placeholder]=\"\n field.capabilities\n | pure: getDisplayByCapability:SpecCapability.placeholder\n | translate\n \"\n />\n <ng-container *ngSwitchCase=\"SpecCapability.booleanSwitch\">\n <aui-switch\n auiFormItemControl\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"switchReadonly\"\n [formControl]=\"control\"\n ></aui-switch>\n <ng-template #switchReadonly>{{\n (control.value | pure: convertBooleanSwitchValue: field.capabilities) | translate\n }}</ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"SpecCapability.select\">\n <aui-multi-select\n *ngIf=\"isMultiple\"\n [maxRowCount]=\"3\"\n auiFormItemControl\n [clearable]=\"true\"\n [filterable]=\"true\"\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [aclReadonlyField]=\"isDisabled\"\n [loading]=\"loading$ | async\"\n [allowCreate]=\"isAllowCreate\"\n >\n <aui-option\n *ngFor=\"let option of dynamicOptions$ | async\"\n [value]=\"option.value\"\n [label]=\"option.label\"\n >\n {{ option.label }}\n </aui-option>\n <aui-option-placeholder>{{\n 'no_data' | translate\n }}</aui-option-placeholder>\n </aui-multi-select>\n\n <aui-select\n *ngIf=\"!isMultiple\"\n auiFormItemControl\n [clearable]=\"true\"\n [filterable]=\"true\"\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [aclReadonlyField]=\"isDisabled\"\n [loading]=\"loading$ | async\"\n [allowCreate]=\"isAllowCreate\"\n >\n <aui-option\n *ngFor=\"let option of dynamicOptions$ | async\"\n [value]=\"option.value\"\n [label]=\"option.label | aclParseJsonTranslate\"\n >\n {{ option.label | aclParseJsonTranslate }}\n </aui-option>\n <aui-option-placeholder>{{\n 'no_data' | translate\n }}</aui-option-placeholder>\n </aui-select>\n </ng-container>\n <aui-radio-group\n *ngSwitchCase=\"SpecCapability.radio\"\n auiFormItemControl\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"radioLabel\"\n >\n <ng-container>\n <aui-radio-button\n *ngFor=\"let option of field.capabilities | pure: getRadioOptions\"\n [value]=\"option.value\"\n >\n {{ option.display | translate }}\n </aui-radio-button>\n <ng-template #radioLabel>\n {{\n control.value\n | pure\n : getOptionDisplay\n : (field.capabilities | pure: getRadioOptions)\n | translate\n }}\n </ng-template>\n </ng-container>\n </aui-radio-group>\n <ng-container *ngSwitchCase=\"SpecCapability.resourceRequirements\">\n <acl-crd-resource-requirements\n auiFormItemControl\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"resourceRequirementsReadonly\"\n ></acl-crd-resource-requirements>\n <ng-template #resourceRequirementsReadonly>\n <acl-crd-resource-requirements\n auiFormItemControl\n [ngModel]=\"control.value\"\n [readOnly]=\"true\"\n ></acl-crd-resource-requirements>\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"SpecCapability.yaml\">\n <acl-crd-yaml-editor\n auiFormItemControl\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [actionsConfig]=\"editorActions\"\n [options]=\"editorOptions\"\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"yamlReadonly\"\n ></acl-crd-yaml-editor>\n <ng-template #yamlReadonly>\n <acl-crd-yaml-editor\n auiFormItemControl\n [ngModel]=\"control.value\"\n [actionsConfig]=\"viewActions\"\n [options]=\"viewOptions\"\n ></acl-crd-yaml-editor>\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"SpecCapability.k8sResourcePrefix\">\n <acl-crd-resource-prefix\n auiFormItemControl\n [formErrors]=\"control.errors\"\n [field]=\"field\"\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"resourcePrefixReadonly\"\n ></acl-crd-resource-prefix>\n <ng-template #resourcePrefixReadonly>\n <acl-crd-resource-prefix\n auiFormItemControl\n [field]=\"field\"\n [ngModel]=\"control.value\"\n [readonly]=\"true\"\n ></acl-crd-resource-prefix>\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"SpecCapability.basicAuthSecret\">\n <acl-crd-basic-auth-secret\n auiFormItemControl\n [field]=\"field\"\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n ></acl-crd-basic-auth-secret>\n </ng-container>\n <textarea\n *ngSwitchCase=\"SpecCapability.textarea\"\n auiFormItemControl\n aui-input\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n [placeholder]=\"\n field.capabilities\n | pure: getDisplayByCapability:SpecCapability.placeholder\n | translate\n \"\n ></textarea>\n <aui-tags-input\n *ngSwitchCase=\"SpecCapability.tagsInput\"\n auiFormItemControl\n class=\"tw-flex-1\"\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [placeholder]=\"\n field.capabilities\n | pure: getDisplayByCapability:SpecCapability.placeholder\n | translate\n \"\n [aclReadonlyField]=\"isDisabled\"\n [clearable]=\"isClearable\"\n ></aui-tags-input>\n <ng-container *ngSwitchDefault>\n <acl-crd-link\n *ngIf=\"(field | pure: isLink) && isDisabled; else textField\"\n auiFormItemControl\n [field]=\"field\"\n [formControl]=\"control\"\n ></acl-crd-link>\n </ng-container>\n <ng-template #textField>\n <input\n type=\"text\"\n auiFormItemControl\n [required]=\"isRequired\"\n aui-input\n [formControl]=\"control\"\n [placeholder]=\"\n field.capabilities\n | pure: getDisplayByCapability:SpecCapability.placeholder\n | translate\n \"\n [aclReadonlyField]=\"isDisabled\"\n />\n </ng-template>\n </acl-crd-form-item>\n <div\n class=\"tw-flex tw-w-full tw-flex-col\"\n *ngIf=\"field.capabilities | pure: getWidgets as widget\"\n >\n <ng-container *ngComponentOutlet=\"widget.component\"></ng-container>\n </div>\n <ng-container *ngIf=\"field | pure: isRemoteField\">\n <ng-container *ngIf=\"remoteModule$ | async as remoteModule\">\n <ng-container\n *ngIf=\"field | pure: getFieldDisplayName as label; else pureRemote\"\n >\n <aui-form-item [emptyAddon]=\"false\">\n <label\n auiFormItemLabel\n *ngIf=\"field | pure: getFieldDisplayName as label\"\n >{{ label | translate }}</label\n >\n <ng-container\n *ngComponentOutlet=\"\n remoteModule.component;\n injector: remoteModule.injector\n \"\n ></ng-container>\n <div auiFormItemHint>\n {{ field | pure: getFieldDescription | translate }}\n </div>\n </aui-form-item>\n </ng-container>\n <ng-template #pureRemote>\n <ng-container\n *ngComponentOutlet=\"\n remoteModule.component;\n injector: remoteModule.injector\n \"\n ></ng-container\n ></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-template #advancedFiled>\n <ng-container\n *ngIf=\"\n meta.fieldType === SpecCapability.password ||\n meta.fieldType === SpecCapability.confirmPassword ||\n meta.fieldType === SpecCapability.externalPassword\n \"\n >\n <acl-crd-form-item\n *ngIf=\"isDisabled\"\n [plain]=\"true\"\n >\n <ng-container *ngTemplateOutlet=\"passwordView\"></ng-container>\n </acl-crd-form-item>\n <acl-password-input\n *ngIf=\"!isDisabled\"\n [initPassword]=\"control.value\"\n [label]=\"field | pure: getFieldDisplayName | translate\"\n [hint]=\"\n customDescription?.templateRef ||\n (field | pure: getFieldDescription | translate)\n \"\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [readonly]=\"crdForm.readonly\"\n [isUpdate]=\"!!control.value && !control.dirty\"\n [strongPassword]=\"meta.fieldType !== SpecCapability.externalPassword\"\n [enableConfirm]=\"meta.fieldType === SpecCapability.confirmPassword\"\n width=\"large\"\n [encoding]=\"field | pure: getEncoding:'password'\"\n [pattern]=\"field.validations?.pattern\"\n [placeholder]=\"\n field.capabilities\n | pure: getDisplayByCapability:SpecCapability.placeholder\n | translate\n \"\n ></acl-password-input>\n </ng-container>\n <!-- group field -->\n <ng-container *ngIf=\"isGroupField(field) && field.fieldList?.length > 0\">\n <acl-operand-field-group\n [fields]=\"fields\"\n [fieldGroup]=\"field\"\n [readonly]=\"isDisabled\"\n [formDataState]=\"formDataState\"\n [formErrors]=\"formErrors\"\n (valueChange)=\"valueChange.emit($event)\"\n >\n </acl-operand-field-group>\n </ng-container>\n <!-- array field groups -->\n <!-- array field table -->\n <ng-container *ngIf=\"isArrayField(field)\">\n <acl-crd-array-table\n *ngIf=\"field | pure: isArrayFieldTable; else defaultArrayFiled\"\n [arrayFieldGroup]=\"field\"\n [formDataState]=\"formDataState\"\n [readonly]=\"isDisabled\"\n (valueChange)=\"valueChange.emit($event)\"\n >\n </acl-crd-array-table>\n <ng-template #defaultArrayFiled>\n <acl-operand-array-field-group\n [arrayFieldGroup]=\"field\"\n [readonly]=\"isDisabled\"\n [formDataState]=\"formDataState\"\n (valueChange)=\"valueChange.emit($event)\"\n >\n </acl-operand-array-field-group>\n </ng-template>\n </ng-container>\n </ng-template>\n </ng-container>\n</ng-container>\n\n<ng-template #passwordView>\n {{ PASSWORD_REVEAL }}\n</ng-template>\n", styles: [":host .input-group{width:100%}:host ::ng-deep .aui-form-item__label-wrapper:not(.hasLabel){display:none}\n"] }]
847
+ }], () => [{ type: i1.CrdFormComponent }, { type: i0.Injector }, { type: i2.HttpClient }, { type: i0.ChangeDetectorRef }], { field: [{
848
+ type: Input
849
+ }], field$: [], remoteModuleDefinition: [{
850
+ type: Input
851
+ }], remoteModuleDefinition$: [], readonly: [{
852
+ type: Input
853
+ }], fields: [{
854
+ type: Input
855
+ }], formDataState: [{
856
+ type: Input
857
+ }], formDataState$: [], formErrors: [{
858
+ type: Input
859
+ }], customDescription: [{
860
+ type: Input
861
+ }], valueChange: [{
862
+ type: Output
863
+ }], itemRemove: [{
864
+ type: Output
865
+ }], isHidden: [{
866
+ type: HostBinding,
867
+ args: ['hidden']
868
+ }] }); })();
869
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(OperandFieldComponent, { className: "OperandFieldComponent", filePath: "lib/field-controls/operand-field.component.ts", lineNumber: 115 }); })();
870
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmFuZC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyZC1mb3JtL3NyYy9saWIvZmllbGQtY29udHJvbHMvb3BlcmFuZC1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyZC1mb3JtL3NyYy9saWIvZmllbGQtY29udHJvbHMvb3BlcmFuZC1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxhQUFhLEVBRWIsT0FBTyxFQUVQLGVBQWUsRUFDZixVQUFVLEVBQ1YsU0FBUyxFQUNULGtCQUFrQixFQUdsQixXQUFXLEVBQ1gsZUFBZSxFQUNmLGdCQUFnQixHQUNqQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxRQUFRLEVBQ1IsS0FBSyxFQUlMLE1BQU07QUFFTiwyQkFBMkI7QUFDM0IsZUFBZSxJQUFJLGNBQWMsR0FDbEMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsR0FBRyxFQUNILE1BQU0sRUFDTixVQUFVLEVBQ1YsT0FBTyxFQUNQLFlBQVks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IEVuY29kaW5nLFxuICBpc0VxdWFsLFxuICBLdWJlcm5ldGVzUmVzb3VyY2UsXG4gIE9ic2VydmFibGVJbnB1dCxcbiAgcHVibGlzaFJlZixcbiAgc2tpcEVycm9yLFxuICBzdGFydFdpdGhDb25kaXRpb24sXG4gIFN0cmluZ01hcCxcbiAgVHJhbnNsYXRpb24sXG4gIHZpZXdBY3Rpb25zLFxuICB5YW1sUmVhZE9wdGlvbnMsXG4gIHlhbWxXcml0ZU9wdGlvbnMsXG59IGZyb20gJ0BhbGF1ZGEtZmUvY29tbW9uJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIC8vIGNzcGVsbDpkaXNhYmxlLW5leHQtbGluZVxuICDJtWNyZWF0ZUluamVjdG9yIGFzIGNyZWF0ZUluamVjdG9yLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGRlY29kZSwgZW5jb2RlIH0gZnJvbSAnYWI2NCc7XG5pbXBvcnQgeyBpc0ltbXV0YWJsZSB9IGZyb20gJ2ltbXV0YWJsZSc7XG5pbXBvcnQgeyBnZXQsIGlkZW50aXR5LCBtYXAgYXMgJG1hcCwgdGVtcGxhdGUgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgY29tYmluZUxhdGVzdCxcbiAgbWFwLFxuICBmaWx0ZXIsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIHNoYXJlUmVwbGF5LFxuICB0YWtlVW50aWwsXG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgc3dpdGNoTWFwLFxuICBvZixcbiAgZmluYWxpemUsXG4gIGlzT2JzZXJ2YWJsZSxcbiAgdGFrZSxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENyZEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9jcmQtZm9ybS9jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVtb3RlV2lkZ2V0TW9kdWxlRGVmaW5pdGlvbiB9IGZyb20gJy4uL3JlbW90ZS13aWRnZXRzJztcbmltcG9ydCB7XG4gIEZpZWxkVmFsdWVDaGFuZ2VFdmVudCxcbiAgRm9ybURhdGFTdGF0ZSxcbiAgRm9ybUVycm9ycyxcbiAgT3BlcmFuZEZpZWxkLFxuICBTcGVjQ2FwYWJpbGl0eSxcbiAgVmFsaWRhdGlvbnMsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7XG4gIGNvbnZlcnRCb29sZWFuU3dpdGNoVmFsdWUsXG4gIGNvbnZlcnRWYWx1ZSxcbiAgQ3JkRm9ybUN1c3RvbURlc2NyaXB0aW9uRGlyZWN0aXZlLFxuICBnZXREZWZhdWx0VmFsdWUsXG4gIGdldERpc3BsYXlCeUNhcGFiaWxpdHksXG4gIGdldEZpZWxkRGVzY3JpcHRpb24sXG4gIGdldEZpZWxkRGlzcGxheU5hbWUsXG4gIGdldEZpZWxkVHlwZSxcbiAgZ2V0Rm9ybURhdGEsXG4gIGdldFJhZGlvT3B0aW9ucyxcbiAgbm9ybWFsaXplUGF0aCxcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgaXNBcnJheUZpZWxkLFxuICBpc0FycmF5RmllbGRUYWJsZSxcbiAgaXNDbGVhcmFibGUsXG4gIGlzQ3JlYXRhYmxlLFxuICBpc0dyb3VwRmllbGQsXG4gIGlzTXVsdGlwbGUsXG4gIGlzQWxsb3dDcmVhdGUsXG4gIGlzUmVtb3RlRmllbGQsXG4gIGlzUmVxdWlyZWQsXG4gIGV2YWxJbkNvbnRleHQsXG4gIGdldE9wZXJhbmRQYXRoLFxufSBmcm9tICcuLi91dGlscy9oZWxwZXInO1xuXG5pbXBvcnQge1xuICBjb21wYXJlV2l0aFN1YnNjcmliZWRQYXRocyxcbiAgUHJvcHNGaWVsZEV4cHJlc3Npb24sXG59IGZyb20gJy4vZXhwcmVzc2lvbnMvcHJvcHMtZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBpc0xpbmsgfSBmcm9tICcuL3dpZGdldHMvbGluay9jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgUEFTU1dPUkRfUkVWRUFMID0gJyoqKioqKic7XG5cbmNvbnN0IEVOQ09ESU5HX01BUFBFUjogUmVjb3JkPHN0cmluZywgRW5jb2Rpbmc+ID0ge1xuICBiYXNlNjQ6IHtcbiAgICBkZWNvZGUsXG4gICAgZW5jb2RlLFxuICB9LFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNsLW9wZXJhbmQtZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJ29wZXJhbmQtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnb3BlcmFuZC1maWVsZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgT3BlcmFuZEZpZWxkQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdFxue1xuICBASW5wdXQoKVxuICBmaWVsZDogT3BlcmFuZEZpZWxkO1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBmaWVsZCQhOiBPYnNlcnZhYmxlPE9wZXJhbmRGaWVsZD47XG5cbiAgQElucHV0KClcbiAgcmVtb3RlTW9kdWxlRGVmaW5pdGlvbjogUmVtb3RlV2lkZ2V0TW9kdWxlRGVmaW5pdGlvbjtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgcmVtb3RlTW9kdWxlRGVmaW5pdGlvbiQhOiBPYnNlcnZhYmxlPFJlbW90ZVdpZGdldE1vZHVsZURlZmluaXRpb24+O1xuXG4gIEBJbnB1dCgpXG4gIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgZ2V0IGlzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkgfHwgdGhpcy5maWVsZD8uZGlzYWJsZWQ7XG4gIH1cblxuICBnZXQgZWZmZWN0Q29udHJvbERlZmF1bHRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jcmRGb3JtLmVmZmVjdENvbnRyb2xEZWZhdWx0VmFsdWU7XG4gIH1cblxuICBnZXQgaXNSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gaXNSZXF1aXJlZCh0aGlzLmZpZWxkKTtcbiAgfVxuXG4gIGdldCBpc0NyZWF0YWJsZSgpIHtcbiAgICByZXR1cm4gaXNDcmVhdGFibGUodGhpcy5maWVsZCk7XG4gIH1cblxuICBnZXQgaXNNdWx0aXBsZSgpIHtcbiAgICByZXR1cm4gaXNNdWx0aXBsZSh0aGlzLmZpZWxkKTtcbiAgfVxuXG4gIGdldCBpc0FsbG93Q3JlYXRlKCkge1xuICAgIHJldHVybiBpc0FsbG93Q3JlYXRlKHRoaXMuZmllbGQpO1xuICB9XG5cbiAgZ2V0IGlzQ2xlYXJhYmxlKCkge1xuICAgIHJldHVybiBpc0NsZWFyYWJsZSh0aGlzLmZpZWxkKTtcbiAgfVxuXG4gIEBJbnB1dCgpIGZpZWxkczogT3BlcmFuZEZpZWxkW107XG4gIEBJbnB1dCgpIGZvcm1EYXRhU3RhdGU6IEZvcm1EYXRhU3RhdGU7XG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBmb3JtRGF0YVN0YXRlJCE6IE9ic2VydmFibGU8Rm9ybURhdGFTdGF0ZT47XG5cbiAgQElucHV0KCkgZm9ybUVycm9yczogRm9ybUVycm9ycztcbiAgQElucHV0KCkgY3VzdG9tRGVzY3JpcHRpb246IENyZEZvcm1DdXN0b21EZXNjcmlwdGlvbkRpcmVjdGl2ZTtcblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZpZWxkVmFsdWVDaGFuZ2VFdmVudD4oKTtcbiAgQE91dHB1dCgpIGl0ZW1SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8g6YCa6L+HaGlkZGVu5bGe5oCn6ZqQ6JeP5LiN5b+F6KaB55qE5YWD57Sg77yM5ZKMIGFjbFNjcm9sbFRvRmlyc3RJbnZhbGlkIOaMh+S7pOi/h+a7pOmakOiXj+WFg+e0oOS/neaMgeS4gOiHtFxuICBASG9zdEJpbmRpbmcoJ2hpZGRlbicpXG4gIGdldCBpc0hpZGRlbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMuaGFzRmllbGREZXBlbmRlbmN5KCkgJiYgIXRoaXMuY2hlY2tGaWVsZERlcGVuZGVuY3kodGhpcy5maWVsZCkpIHx8XG4gICAgICB0aGlzLl9oaWRkZW5cbiAgICApO1xuICB9XG5cbiAgc2V0IGlzSGlkZGVuKGhpZGRlbikge1xuICAgIHRoaXMuX2hpZGRlbiA9IGhpZGRlbjtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hpZGRlbjogYm9vbGVhbjtcbiAgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBvbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBnZXRGaWVsZFR5cGUgPSBnZXRGaWVsZFR5cGU7XG4gIGlzTGluayA9IGlzTGluaztcblxuICBTcGVjQ2FwYWJpbGl0eSA9IFNwZWNDYXBhYmlsaXR5O1xuXG4gIGdldEZpZWxkRGlzcGxheU5hbWUgPSBnZXRGaWVsZERpc3BsYXlOYW1lO1xuICBnZXRGaWVsZERlc2NyaXB0aW9uID0gZ2V0RmllbGREZXNjcmlwdGlvbjtcbiAgZ2V0UmFkaW9PcHRpb25zID0gZ2V0UmFkaW9PcHRpb25zO1xuICBnZXREaXNwbGF5QnlDYXBhYmlsaXR5ID0gZ2V0RGlzcGxheUJ5Q2FwYWJpbGl0eTtcblxuICBlZGl0b3JPcHRpb25zID0geWFtbFdyaXRlT3B0aW9ucztcbiAgZWRpdG9yQWN0aW9ucyA9IGNyZWF0ZUFjdGlvbnM7XG5cbiAgaXNHcm91cEZpZWxkID0gaXNHcm91cEZpZWxkO1xuICBpc0FycmF5RmllbGQgPSBpc0FycmF5RmllbGQ7XG4gIGlzUmVtb3RlRmllbGQgPSBpc1JlbW90ZUZpZWxkO1xuICBpc0FycmF5RmllbGRUYWJsZSA9IGlzQXJyYXlGaWVsZFRhYmxlO1xuICBjb252ZXJ0Qm9vbGVhblN3aXRjaFZhbHVlID0gY29udmVydEJvb2xlYW5Td2l0Y2hWYWx1ZTtcbiAgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBnZXQgaXNDdXN0b21FcnJvcnNNYXBwZXIoKSB7XG4gICAgcmV0dXJuIGdldEZpZWxkVHlwZSh0aGlzLmZpZWxkKSA9PT0gU3BlY0NhcGFiaWxpdHkucmVzb3VyY2VSZXF1aXJlbWVudHM7XG4gIH1cblxuICBQQVNTV09SRF9SRVZFQUwgPSBQQVNTV09SRF9SRVZFQUw7XG5cbiAgaXNCYXNpY1R5cGVGaWVsZCA9IChmaWxlZDogT3BlcmFuZEZpZWxkKSA9PlxuICAgICFbXG4gICAgICBTcGVjQ2FwYWJpbGl0eS5vYmplY3QsXG4gICAgICBTcGVjQ2FwYWJpbGl0eS5hcnJheSxcbiAgICAgIFNwZWNDYXBhYmlsaXR5LnBhc3N3b3JkLFxuICAgICAgU3BlY0NhcGFiaWxpdHkuY29uZmlybVBhc3N3b3JkLFxuICAgICAgU3BlY0NhcGFiaWxpdHkuZXh0ZXJuYWxQYXNzd29yZCxcbiAgICBdLmluY2x1ZGVzKGdldEZpZWxkVHlwZShmaWxlZCkpO1xuXG4gIHZpZXdBY3Rpb25zID0gdmlld0FjdGlvbnM7XG4gIHZpZXdPcHRpb25zID0geWFtbFJlYWRPcHRpb25zO1xuXG4gIHByaXZhdGUgX3ZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW107XG5cbiAgcmVtb3RlTW9kdWxlJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZmllbGQkLFxuICAgIHRoaXMucmVtb3RlTW9kdWxlRGVmaW5pdGlvbiQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbZmllbGQsIHJlbW90ZU1vZHVsZURlZmluaXRpb25dKSA9PiB7XG4gICAgICBjb25zdCByZW1vdGVXaWRnZXQgPSB0aGlzLmdldFJlbW90ZVdpZGdldChmaWVsZCwgcmVtb3RlTW9kdWxlRGVmaW5pdGlvbik7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByZW1vdGVXaWRnZXQgJiYge1xuICAgICAgICAgIGluamVjdG9yOiBjcmVhdGVJbmplY3RvcihcbiAgICAgICAgICAgIHJlbW90ZU1vZHVsZURlZmluaXRpb24ubW9kdWxlLFxuICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICApLFxuICAgICAgICAgIG1vZHVsZTogcmVtb3RlTW9kdWxlRGVmaW5pdGlvbi5tb2R1bGUsXG4gICAgICAgICAgY29tcG9uZW50OiByZW1vdGVXaWRnZXQuY29tcG9uZW50LFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pLFxuICAgIGZpbHRlcihCb29sZWFuKSxcbiAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSxcbiAgICBzaGFyZVJlcGxheSgxKSxcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgY3JkRm9ybTogQ3JkRm9ybUNvbXBvbmVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgcmVnaXN0ZXJDb250cm9sKCkge1xuICAgIHRoaXMuY3JkRm9ybS5jb250cm9sTWFwLnNldChnZXRPcGVyYW5kUGF0aCh0aGlzLmZpZWxkKSwgdGhpcy5jb250cm9sKTtcbiAgfVxuXG4gIHVuUmVnaXN0ZXJDb250cm9sKCkge1xuICAgIHRoaXMuY3JkRm9ybS5jb250cm9sTWFwLmRlbGV0ZShnZXRPcGVyYW5kUGF0aCh0aGlzLmZpZWxkKSk7XG4gIH1cblxuICBnZXRXaWRnZXRzID0gKGNhcGFiaWxpdGllczogU3BlY0NhcGFiaWxpdHlbXSkgPT4ge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBjYXBhYmlsaXRpZXMuZmluZChjID0+XG4gICAgICBjLnN0YXJ0c1dpdGgoU3BlY0NhcGFiaWxpdHkuY3VzdG9tKSxcbiAgICApO1xuICAgIHJldHVybiBkZXNjcmlwdG9yXG4gICAgICA/IHRoaXMuY3JkRm9ybS53aWRnZXRzPy5maW5kKFxuICAgICAgICAgIHcgPT4gdy5kZXNjcmlwdG9yID09PSBkZXNjcmlwdG9yLnNwbGl0KCc/PScpWzBdLFxuICAgICAgICApXG4gICAgICA6IG51bGw7XG4gIH07XG5cbiAgZ2V0UmVtb3RlV2lkZ2V0KFxuICAgIGZpZWxkOiBPcGVyYW5kRmllbGQsXG4gICAgcmVtb3RlRGVmaW5pdGlvbjogUmVtb3RlV2lkZ2V0TW9kdWxlRGVmaW5pdGlvbixcbiAgKSB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGZpZWxkLmNhcGFiaWxpdGllcy5maW5kKGMgPT5cbiAgICAgIGMuc3RhcnRzV2l0aChTcGVjQ2FwYWJpbGl0eS5yZW1vdGUpLFxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIGRlc2NyaXB0b3IgJiZcbiAgICAgIHJlbW90ZURlZmluaXRpb24/LmNvbXBvbmVudHM/LmZpbmQoXG4gICAgICAgIHcgPT4gdy5kZXNjcmlwdG9yID09PSBkZXNjcmlwdG9yLnNwbGl0KCc/PScpWzBdLFxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmR5bmFtaWNIaWRkZW5WYWx1ZSQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMuaXNIaWRkZW4gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyQ29udHJvbCgpO1xuICAgIGlmICh0aGlzLmZpZWxkLnZhbGlkYXRpb25zKSB7XG4gICAgICBjb25zdCB2YWxpZGF0b3JzID0gJG1hcCh0aGlzLmZpZWxkLnZhbGlkYXRpb25zLCAodmFsLCBydWxlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAocnVsZSkge1xuICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbnMubWF4aW11bToge1xuICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMubWF4KHZhbCBhcyBudW1iZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFZhbGlkYXRpb25zLm1pbmltdW06IHtcbiAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLm1pbih2YWwgYXMgbnVtYmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBWYWxpZGF0aW9ucy5yZXF1aXJlZDoge1xuICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucmVxdWlyZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbnMubWF4TGVuZ3RoOiB7XG4gICAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5tYXhMZW5ndGgodmFsIGFzIG51bWJlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbnMubWluTGVuZ3RoOiB7XG4gICAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5taW5MZW5ndGgodmFsIGFzIG51bWJlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbnMucGF0dGVybjoge1xuICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucGF0dGVybih2YWwgYXMgc3RyaW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KS5maWx0ZXIodiA9PiAhIXYpO1xuICAgICAgaWYgKHZhbGlkYXRvcnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuY29udHJvbC5hZGRWYWxpZGF0b3JzKCh0aGlzLl92YWxpZGF0b3JzID0gdmFsaWRhdG9ycykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIOWwhiB2YWx1ZUNoYW5nZXMg55qE6YC76L6R56e75Yqo5YiwIG5nQWZ0ZXJWaWV3SW5pdCDkuK3vvIzkuLvopoHmmK/kuLrkuobpgb/lhY3lhajlsYAgVmFsaWRhdG9yc0RpcmVjdGl2ZeW4puadpeeahOW9seWTje+8jOmcgOimgeetieWIsFZhbGlkYXRvcnNEaXJlY3RpdmXnmoRuZ0FmdGVyVmlld0luaXTkuYvlkI7lho3orqLpmIVjb250cm9s55qEdmFsdWVDaGFuZ2VzXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoQ29uZGl0aW9uKHRoaXMuZWZmZWN0Q29udHJvbERlZmF1bHRWYWx1ZSwgdGhpcy5jb250cm9sLnZhbHVlKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXG4gICAgICAgIGZpbHRlcih2ID0+XG4gICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgaGFjay4geWFtbCB2YWx1ZSB3aWxsIG9ubHkgYmUgbnVsbCBpZiBmb3JtYXQgZXJyb3IoYmVjYXVzZSB0cnktY2F0Y2gpLCB0aGUgZGF0YSBmbG93IG5vdyBpcyBmcm9tIGNvbnRyb2wgPT4gZm9ybURhdGFTdGF0ZSA9PiBjb250cm9sKHdpbGwganVkZ2UgZXF1YWxpdHkp77yMdGhpcyB3aWxsIG1ha2UgY29udHJvbCBiZSBlbXB0eVxuICAgICAgICAgIGdldEZpZWxkVHlwZSh0aGlzLmZpZWxkKSA9PT0gU3BlY0NhcGFiaWxpdHkueWFtbCA/IHYgIT09IG51bGwgOiB0cnVlLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXG4gICAgICAgICAgZGF0YTogdmFsdWUsXG4gICAgICAgICAgZXJyb3JzOiB0aGlzLmNvbnRyb2wuZXJyb3JzLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB0aGlzLnVuUmVnaXN0ZXJDb250cm9sKCk7XG4gICAgaWYgKHRoaXMuX3ZhbGlkYXRvcnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb250cm9sLnJlbW92ZVZhbGlkYXRvcnModGhpcy5fdmFsaWRhdG9ycyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoeyBmb3JtRGF0YVN0YXRlIH06IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAodGhpcy5maWVsZCAmJiBmb3JtRGF0YVN0YXRlPy5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy5keW5hbWljRGVmYXVsdFZhbHVlJFxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKCh7IHZhbHVlLCBpc0R5bmFtaWMgfSkgPT4ge1xuICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGlzRHluYW1pYyB9KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChmb3JtRGF0YVN0YXRlPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGdldEZvcm1EYXRhKFxuICAgICAgICBmb3JtRGF0YVN0YXRlLmN1cnJlbnRWYWx1ZSBhcyBGb3JtRGF0YVN0YXRlLFxuICAgICAgICB0aGlzLmZpZWxkLnBhdGgsXG4gICAgICAgIGZhbHNlLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHByZXZWYWx1ZSA9IGdldEZvcm1EYXRhKFxuICAgICAgICBmb3JtRGF0YVN0YXRlLnByZXZpb3VzVmFsdWUgYXMgRm9ybURhdGFTdGF0ZSxcbiAgICAgICAgdGhpcy5maWVsZC5wYXRoLFxuICAgICAgICBmYWxzZSxcbiAgICAgICk7XG4gICAgICBjb25zdCByYXdWYWx1ZSA9IGlzSW1tdXRhYmxlKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgPyBjdXJyZW50VmFsdWUudG9KUygpXG4gICAgICAgIDogY3VycmVudFZhbHVlO1xuICAgICAgaWYgKFxuICAgICAgICAhaXNFcXVhbChyYXdWYWx1ZSwgcHJldlZhbHVlKSAmJlxuICAgICAgICAhaXNFcXVhbChyYXdWYWx1ZSwgdGhpcy5jb250cm9sLnZhbHVlKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShyYXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGRDdXJyZW50VmFsdWUoKSB7XG4gICAgbGV0IHZhbHVlID0gZ2V0Rm9ybURhdGEodGhpcy5mb3JtRGF0YVN0YXRlLCB0aGlzLmZpZWxkLnBhdGgsIGZhbHNlKTtcblxuICAgIC8vIOWmguaenOWAvOaYryBJbW11dGFibGUgb2JqZWN0IOexu+Wei++8jOmcgOimgei9rOaIkOWOn+WniyBKUyBPYmplY3RcbiAgICBpZiAoaXNJbW11dGFibGUodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvSlMoKSBhcyBGb3JtRGF0YVN0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBnZXRGaWVsZFZhbHVlKHVzZURlZmF1bHQgPSB0cnVlKSB7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5nZXRGaWVsZEN1cnJlbnRWYWx1ZSgpO1xuXG4gICAgaWYgKGN1cnJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIHVzZURlZmF1bHQpIHtcbiAgICAgIHJldHVybiBnZXREZWZhdWx0VmFsdWUodGhpcy5maWVsZCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gIH1cblxuICBnZXRPcHRpb25EaXNwbGF5KFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQXJyYXk8eyB2YWx1ZTogc3RyaW5nOyBkaXNwbGF5OiBUcmFuc2xhdGlvbiB9PixcbiAgKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuZmluZChpdGVtID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKT8uZGlzcGxheTtcbiAgfVxuXG4gIGdldFNlbGVjdE9wdGlvbnMoZmllbGQ6IE9wZXJhbmRGaWVsZCkge1xuICAgIHJldHVybiBmaWVsZC5jYXBhYmlsaXRpZXNcbiAgICAgIC5maWx0ZXIoYyA9PiBjLnN0YXJ0c1dpdGgoU3BlY0NhcGFiaWxpdHkuc2VsZWN0KSlcbiAgICAgIC5tYXAoYyA9PiBjLnNwbGl0KFNwZWNDYXBhYmlsaXR5LnNlbGVjdCk/LlsxXSk7XG4gIH1cblxuICBnZXRFbmNvZGluZyhmaWVsZDogT3BlcmFuZEZpZWxkLCB0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwcmVmaXggPSBgdXJuOmFsbTpkZXNjcmlwdG9yOiR7dHlwZX06ZW5jb2Rpbmc6YDtcbiAgICBjb25zdCBjYXBhYmlsaXR5ID0gZmllbGQuY2FwYWJpbGl0aWVzLmZpbmQoaXQgPT4gaXQuc3RhcnRzV2l0aChwcmVmaXgpKTtcbiAgICBsZXQgZW5jb2Rpbmc6IEVuY29kaW5nO1xuICAgIGlmIChjYXBhYmlsaXR5KSB7XG4gICAgICBlbmNvZGluZyA9IEVOQ09ESU5HX01BUFBFUltjYXBhYmlsaXR5LnNsaWNlKHByZWZpeC5sZW5ndGgpXTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGVuY29kaW5nIHx8IHtcbiAgICAgICAgZW5jb2RlOiBpZGVudGl0eSxcbiAgICAgICAgZGVjb2RlOiBpZGVudGl0eSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNGaWVsZERlcGVuZGVuY3koKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQuY2FwYWJpbGl0aWVzLnNvbWUoYyA9PlxuICAgICAgYy5zdGFydHNXaXRoKFNwZWNDYXBhYmlsaXR5LmZpZWxkRGVwZW5kZW5jeSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tGaWVsZERlcGVuZGVuY3koZmllbGQ6IE9wZXJhbmRGaWVsZCk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBmaWVsZD8uY2FwYWJpbGl0aWVzXG4gICAgICAgIC5maWx0ZXIoYyA9PiBjLnN0YXJ0c1dpdGgoU3BlY0NhcGFiaWxpdHkuZmllbGREZXBlbmRlbmN5KSlcbiAgICAgICAgLm1hcChpID0+IGkuc3BsaXQoU3BlY0NhcGFiaWxpdHkuZmllbGREZXBlbmRlbmN5KVsxXSk7XG4gICAgICBpZiAoIWRlcGVuZGVuY2llcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFyZW50UGF0aHMgPSBkZXBlbmRlbmNpZXMubWFwKGQgPT4gZC5zcGxpdCgnOicpKTtcbiAgICAgIGNvbnN0IHN0YXRlID0gcGFyZW50UGF0aHMuZXZlcnkoKFtwYXRoLCAuLi52YWx1ZXNdKSA9PiB7XG4gICAgICAgIC8vIFN1cHBvcnQgZGVwZW5kIG9uZSBvZiB2YWx1ZXNcbiAgICAgICAgY29uc3QgZGVwZW5kZW5jeUZpZWxkID0gdGhpcy5maWVsZHMuZmluZChcbiAgICAgICAgICBmID0+IGYucGF0aCA9PT0gbm9ybWFsaXplUGF0aChwYXRoKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZGVwZW5kZW5jeURlZmF1bHRWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZShkZXBlbmRlbmN5RmllbGQpO1xuICAgICAgICBjb25zdCBmb3JtU3RhdGVWYWx1ZSA9IGdldEZvcm1EYXRhKHRoaXMuZm9ybURhdGFTdGF0ZSwgcGF0aCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9XG4gICAgICAgICAgZm9ybVN0YXRlVmFsdWUgPT09IG51bGwgfHwgZm9ybVN0YXRlVmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBkZXBlbmRlbmN5RGVmYXVsdFZhbHVlXG4gICAgICAgICAgICA6IGZvcm1TdGF0ZVZhbHVlO1xuICAgICAgICByZXR1cm4gdmFsdWVzLnNvbWUoXG4gICAgICAgICAgdmFsID0+IGNvbnZlcnRWYWx1ZSh2YWwsIGRlcGVuZGVuY3lGaWVsZC50eXBlKSA9PT0gY3VycmVudFZhbHVlLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICog54i2IGZpZWxkIGRlcGVuZGVuY3kg5LiN5ruh6Laz5pe277yM5Y2z6ZqQ6JeP5pe277yM5pysIGZpZWxkIOS5n+W6lOW9k+makOiXj+OAglxuICAgICAgICog5Zug5Li65Zyo5aSn6YOo5YiG5oOF5b2i5LiL77yMZmllbGREZXBlbmRlbmN5IOS4jiBvbmVPZiDmkK3phY3mnaXmj4/ov7DkuIDnu4TlhbPogZTlhbPns7vvvIzlvojlsJHlj6rmnIkgYiDku4Xkvp3otZbkuo4gYe+8jOW9kyBhIOmakOiXj+WQju+8jOi/mOimgeagueaNriBhIOeahOm7mOiupOWAvOimgeaxguaYvuekuiBiIOeahOaDheWGte+8jFxuICAgICAgICog5a+55LqO6K+l5oOF5Ya177yM5Y+v5Lul5aSa5Yqg5LiA5Liq6YWN5aSH5LqG6aKd5aSWIGZpZWxkRGVwZW5kZW5jeSDnmoQgRGVzY3JpcHRvciDmnaXmj4/ov7AgYlxuICAgICAgICovXG4gICAgICByZXR1cm4gKFxuICAgICAgICBwYXJlbnRQYXRocy5ldmVyeSgoW3BhdGhdKSA9PlxuICAgICAgICAgIHRoaXMuY2hlY2tGaWVsZERlcGVuZGVuY3kodGhpcy5maWVsZHMuZmluZChpID0+IGkucGF0aCA9PT0gcGF0aCkpLFxuICAgICAgICApICYmIHN0YXRlXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBkeW5hbWljT3B0aW9ucyQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuZmllbGQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKGZpZWxkID0+IHtcbiAgICAgIGNvbnN0IGR5bmFtaWNFeHByZXNzaW9uID0gbmV3IFByb3BzRmllbGRFeHByZXNzaW9uKGZpZWxkKS5leHByZXNzaW9ucztcbiAgICAgIGlmICghZHluYW1pY0V4cHJlc3Npb24ub3B0aW9ucykge1xuICAgICAgICByZXR1cm4gb2YoXG4gICAgICAgICAgdGhpcy5nZXRTZWxlY3RPcHRpb25zKGZpZWxkKS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgIGxhYmVsOiB2YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5jcmRGb3JtLmZvcm1Db250ZXh0JCxcbiAgICAgICAgdGhpcy5mb3JtRGF0YVN0YXRlJCxcbiAgICAgIF0pLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgbikgPT5cbiAgICAgICAgICBjb21wYXJlV2l0aFN1YnNjcmliZWRQYXRocyhkeW5hbWljRXhwcmVzc2lvbiwgcCwgbiksXG4gICAgICAgICksXG4gICAgICAgIHN3aXRjaE1hcCgoW2Zvcm1Db250ZXh0LCBmb3JtRGF0YVN0YXRlXSkgPT4ge1xuICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgICBjb25zdCB7IGFwaSwgbGFiZWxQYXRoLCB2YWx1ZVBhdGgsIGV4cHJlc3Npb24gfSA9XG4gICAgICAgICAgICBkeW5hbWljRXhwcmVzc2lvbi5vcHRpb25zO1xuICAgICAgICAgIGNvbnN0IHN0cmluZ0V4cHJlc3Npb25Db250ZXh0ID0gdGhpcy5nZXRTdHJpbmdFeHByZXNzaW9uQ29udGV4dChcbiAgICAgICAgICAgIGZvcm1Db250ZXh0LFxuICAgICAgICAgICAgZm9ybURhdGFTdGF0ZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghYXBpICYmIGV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGV2YWxJbkNvbnRleHQoZXhwcmVzc2lvbiwgc3RyaW5nRXhwcmVzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nRXhwcmVzc2lvbkNvbnRleHQuZmV0Y2hSZXNvdXJjZUxpc3QoXG4gICAgICAgICAgICAgIHRlbXBsYXRlKGFwaSkoc3RyaW5nRXhwcmVzc2lvbkNvbnRleHQpLFxuICAgICAgICAgICAgICAoaXRlbTogU3RyaW5nTWFwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXQoaXRlbSwgdmFsdWVQYXRoLCAnJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBnZXQoaXRlbSwgbGFiZWxQYXRoLCB2YWx1ZSksXG4gICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gaXNPYnNlcnZhYmxlKHJlc3VsdCkgPyByZXN1bHQgOiBvZihyZXN1bHQpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSksXG4gICAgcHVibGlzaFJlZigpLFxuICApO1xuXG4gIGR5bmFtaWNEZWZhdWx0VmFsdWUkID0gdGhpcy5maWVsZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoZmllbGQgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlRXhwcmVzc2lvbiA9IG5ldyBQcm9wc0ZpZWxkRXhwcmVzc2lvbihmaWVsZClcbiAgICAgICAgLmV4cHJlc3Npb25zO1xuICAgICAgaWYgKFxuICAgICAgICAhZGVmYXVsdFZhbHVlRXhwcmVzc2lvbi5kZWZhdWx0IHx8XG4gICAgICAgIHRoaXMuZ2V0RmllbGRDdXJyZW50VmFsdWUoKSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRGaWVsZFZhbHVlKCksXG4gICAgICAgICAgaXNEeW5hbWljOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuY3JkRm9ybS5mb3JtQ29udGV4dCQsXG4gICAgICAgIHRoaXMuZm9ybURhdGFTdGF0ZSQsXG4gICAgICBdKS5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgbikgPT5cbiAgICAgICAgICBjb21wYXJlV2l0aFN1YnNjcmliZWRQYXRocyhkZWZhdWx0VmFsdWVFeHByZXNzaW9uLCBwLCBuKSxcbiAgICAgICAgKSxcbiAgICAgICAgbWFwKChbZm9ybUNvbnRleHQsIGZvcm1EYXRhU3RhdGVdKSA9PlxuICAgICAgICAgIHRlbXBsYXRlKGRlZmF1bHRWYWx1ZUV4cHJlc3Npb24uZGVmYXVsdCkoXG4gICAgICAgICAgICB0aGlzLmdldFN0cmluZ0V4cHJlc3Npb25Db250ZXh0KGZvcm1Db250ZXh0LCBmb3JtRGF0YVN0YXRlKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgICBtYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBpc0R5bmFtaWM6IHRydWUsXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG4gICAgfSksXG4gICAgcHVibGlzaFJlZigpLFxuICApO1xuXG4gIGR5bmFtaWNIaWRkZW5WYWx1ZSQgPSB0aGlzLmZpZWxkJC5waXBlKFxuICAgIHN3aXRjaE1hcChmaWVsZCA9PiB7XG4gICAgICBjb25zdCB7IGV4cHJlc3Npb25zIH0gPSBuZXcgUHJvcHNGaWVsZEV4cHJlc3Npb24oZmllbGQpO1xuICAgICAgaWYgKCFleHByZXNzaW9ucy5oaWRkZW4pIHtcbiAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5jcmRGb3JtLmZvcm1Db250ZXh0JCxcbiAgICAgICAgdGhpcy5mb3JtRGF0YVN0YXRlJCxcbiAgICAgIF0pLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBuKSA9PlxuICAgICAgICAgIGNvbXBhcmVXaXRoU3Vic2NyaWJlZFBhdGhzKGV4cHJlc3Npb25zLCBwLCBuKSxcbiAgICAgICAgKSxcbiAgICAgICAgbWFwKFxuICAgICAgICAgIChbZm9ybUNvbnRleHQsIGZvcm1EYXRhU3RhdGVdKSA9PlxuICAgICAgICAgICAgdGVtcGxhdGUoZXhwcmVzc2lvbnMuaGlkZGVuKShcbiAgICAgICAgICAgICAgdGhpcy5nZXRTdHJpbmdFeHByZXNzaW9uQ29udGV4dChmb3JtQ29udGV4dCwgZm9ybURhdGFTdGF0ZSksXG4gICAgICAgICAgICApID09PSAndHJ1ZScsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0pLFxuICApO1xuXG4gIGdldFN0cmluZ0V4cHJlc3Npb25Db250ZXh0ID0gKFxuICAgIGZvcm1Db250ZXh0OiBhbnksXG4gICAgZm9ybURhdGFTdGF0ZTogRm9ybURhdGFTdGF0ZSxcbiAgKSA9PiAoe1xuICAgIGZldGNoUmVzb3VyY2VMaXN0OiB0aGlzLmZldGNoUmVzb3VyY2VMaXN0LFxuICAgIGNvbnRleHQ6IGZvcm1Db250ZXh0LFxuICAgIGZvcm1EYXRhOiBmb3JtRGF0YVN0YXRlLnRvSlMoKT8uc3BlYyB8fCB7fSxcbiAgfSk7XG5cbiAgZmV0Y2hSZXNvdXJjZUxpc3QgPSAoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6IChyZXNvdXJjZTogS3ViZXJuZXRlc1Jlc291cmNlKSA9PiB2b2lkLFxuICApID0+IHtcbiAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDx7IGl0ZW1zOiBLdWJlcm5ldGVzUmVzb3VyY2VbXSB9PihgJHtBUElfR0FURVdBWX0ke3VybH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzLml0ZW1zLm1hcChpdGVtID0+IGNhbGxiYWNrLmNhbGwodGhpcywgaXRlbSkpKSxcbiAgICAgICAgc2tpcEVycm9yKFtdKSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfTtcbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZFwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJ7XG4gICAgICBmaWVsZFR5cGU6IGZpZWxkIHwgcHVyZTogZ2V0RmllbGRUeXBlLFxuICAgICAgaXNCYXNpY1R5cGVGaWVsZDogZmllbGQgfCBwdXJlOiBpc0Jhc2ljVHlwZUZpZWxkXG4gICAgfSBhcyBtZXRhXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXRhLmlzQmFzaWNUeXBlRmllbGQ7IGVsc2UgYWR2YW5jZWRGaWxlZFwiPlxuICAgICAgPGFjbC1jcmQtZm9ybS1pdGVtXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgIShmaWVsZC5jYXBhYmlsaXRpZXMgfCBwdXJlOiBnZXRXaWRnZXRzKSAmJlxuICAgICAgICAgICEoZmllbGQgfCBwdXJlOiBpc1JlbW90ZUZpZWxkKVxuICAgICAgICBcIlxuICAgICAgICBbbmdTd2l0Y2hdPVwibWV0YS5maWVsZFR5cGVcIlxuICAgICAgPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkubnVtYmVyXCJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICBhdWktaW5wdXRcbiAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgIGZpZWxkLmNhcGFiaWxpdGllc1xuICAgICAgICAgICAgICB8IHB1cmU6IGdldERpc3BsYXlCeUNhcGFiaWxpdHk6U3BlY0NhcGFiaWxpdHkucGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICBcIlxuICAgICAgICAvPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS5ib29sZWFuU3dpdGNoXCI+XG4gICAgICAgICAgPGF1aS1zd2l0Y2hcbiAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZFRlbXBsYXRlXT1cInN3aXRjaFJlYWRvbmx5XCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICA+PC9hdWktc3dpdGNoPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc3dpdGNoUmVhZG9ubHk+e3tcbiAgICAgICAgICAgIChjb250cm9sLnZhbHVlIHwgcHVyZTogY29udmVydEJvb2xlYW5Td2l0Y2hWYWx1ZTogZmllbGQuY2FwYWJpbGl0aWVzKSB8IHRyYW5zbGF0ZVxuICAgICAgICAgIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlNwZWNDYXBhYmlsaXR5LnNlbGVjdFwiPlxuICAgICAgICAgIDxhdWktbXVsdGktc2VsZWN0XG4gICAgICAgICAgICAqbmdJZj1cImlzTXVsdGlwbGVcIlxuICAgICAgICAgICAgW21heFJvd0NvdW50XT1cIjNcIlxuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmckIHwgYXN5bmNcIlxuICAgICAgICAgICAgW2FsbG93Q3JlYXRlXT1cImlzQWxsb3dDcmVhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxhdWktb3B0aW9uXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZHluYW1pY09wdGlvbnMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgICAgPC9hdWktb3B0aW9uPlxuICAgICAgICAgICAgPGF1aS1vcHRpb24tcGxhY2Vob2xkZXI+e3tcbiAgICAgICAgICAgICAgJ25vX2RhdGEnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fTwvYXVpLW9wdGlvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICA8L2F1aS1tdWx0aS1zZWxlY3Q+XG5cbiAgICAgICAgICA8YXVpLXNlbGVjdFxuICAgICAgICAgICAgKm5nSWY9XCIhaXNNdWx0aXBsZVwiXG4gICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZyQgfCBhc3luY1wiXG4gICAgICAgICAgICBbYWxsb3dDcmVhdGVdPVwiaXNBbGxvd0NyZWF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGF1aS1vcHRpb25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBkeW5hbWljT3B0aW9ucyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwib3B0aW9uLmxhYmVsIHwgYWNsUGFyc2VKc29uVHJhbnNsYXRlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIHwgYWNsUGFyc2VKc29uVHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2F1aS1vcHRpb24+XG4gICAgICAgICAgICA8YXVpLW9wdGlvbi1wbGFjZWhvbGRlcj57e1xuICAgICAgICAgICAgICAnbm9fZGF0YScgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH19PC9hdWktb3B0aW9uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgIDwvYXVpLXNlbGVjdD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxhdWktcmFkaW8tZ3JvdXBcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkucmFkaW9cIlxuICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRUZW1wbGF0ZV09XCJyYWRpb0xhYmVsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICA8YXVpLXJhZGlvLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpZWxkLmNhcGFiaWxpdGllcyB8IHB1cmU6IGdldFJhZGlvT3B0aW9uc1wiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBvcHRpb24uZGlzcGxheSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9hdWktcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYWRpb0xhYmVsPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIGNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgICAgICAgIHwgcHVyZVxuICAgICAgICAgICAgICAgICAgICA6IGdldE9wdGlvbkRpc3BsYXlcbiAgICAgICAgICAgICAgICAgICAgOiAoZmllbGQuY2FwYWJpbGl0aWVzIHwgcHVyZTogZ2V0UmFkaW9PcHRpb25zKVxuICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYXVpLXJhZGlvLWdyb3VwPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS5yZXNvdXJjZVJlcXVpcmVtZW50c1wiPlxuICAgICAgICAgIDxhY2wtY3JkLXJlc291cmNlLXJlcXVpcmVtZW50c1xuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkVGVtcGxhdGVdPVwicmVzb3VyY2VSZXF1aXJlbWVudHNSZWFkb25seVwiXG4gICAgICAgICAgPjwvYWNsLWNyZC1yZXNvdXJjZS1yZXF1aXJlbWVudHM+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNyZXNvdXJjZVJlcXVpcmVtZW50c1JlYWRvbmx5PlxuICAgICAgICAgICAgPGFjbC1jcmQtcmVzb3VyY2UtcmVxdWlyZW1lbnRzXG4gICAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJjb250cm9sLnZhbHVlXCJcbiAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgPjwvYWNsLWNyZC1yZXNvdXJjZS1yZXF1aXJlbWVudHM+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlNwZWNDYXBhYmlsaXR5LnlhbWxcIj5cbiAgICAgICAgICA8YWNsLWNyZC15YW1sLWVkaXRvclxuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgICBbYWN0aW9uc0NvbmZpZ109XCJlZGl0b3JBY3Rpb25zXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cImVkaXRvck9wdGlvbnNcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZFRlbXBsYXRlXT1cInlhbWxSZWFkb25seVwiXG4gICAgICAgICAgPjwvYWNsLWNyZC15YW1sLWVkaXRvcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3lhbWxSZWFkb25seT5cbiAgICAgICAgICAgIDxhY2wtY3JkLXlhbWwtZWRpdG9yXG4gICAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJjb250cm9sLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2FjdGlvbnNDb25maWddPVwidmlld0FjdGlvbnNcIlxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJ2aWV3T3B0aW9uc1wiXG4gICAgICAgICAgICA+PC9hY2wtY3JkLXlhbWwtZWRpdG9yPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS5rOHNSZXNvdXJjZVByZWZpeFwiPlxuICAgICAgICAgIDxhY2wtY3JkLXJlc291cmNlLXByZWZpeFxuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbZm9ybUVycm9yc109XCJjb250cm9sLmVycm9yc1wiXG4gICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZFRlbXBsYXRlXT1cInJlc291cmNlUHJlZml4UmVhZG9ubHlcIlxuICAgICAgICAgID48L2FjbC1jcmQtcmVzb3VyY2UtcHJlZml4PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVzb3VyY2VQcmVmaXhSZWFkb25seT5cbiAgICAgICAgICAgIDxhY2wtY3JkLXJlc291cmNlLXByZWZpeFxuICAgICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiY29udHJvbC52YWx1ZVwiXG4gICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgID48L2FjbC1jcmQtcmVzb3VyY2UtcHJlZml4PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS5iYXNpY0F1dGhTZWNyZXRcIj5cbiAgICAgICAgICA8YWNsLWNyZC1iYXNpYy1hdXRoLXNlY3JldFxuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgPjwvYWNsLWNyZC1iYXNpYy1hdXRoLXNlY3JldD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS50ZXh0YXJlYVwiXG4gICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgYXVpLWlucHV0XG4gICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICBmaWVsZC5jYXBhYmlsaXRpZXNcbiAgICAgICAgICAgICAgfCBwdXJlOiBnZXREaXNwbGF5QnlDYXBhYmlsaXR5OlNwZWNDYXBhYmlsaXR5LnBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgIDxhdWktdGFncy1pbnB1dFxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS50YWdzSW5wdXRcIlxuICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgIGNsYXNzPVwidHctZmxleC0xXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgIGZpZWxkLmNhcGFiaWxpdGllc1xuICAgICAgICAgICAgICB8IHB1cmU6IGdldERpc3BsYXlCeUNhcGFiaWxpdHk6U3BlY0NhcGFiaWxpdHkucGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICBcIlxuICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgIFtjbGVhcmFibGVdPVwiaXNDbGVhcmFibGVcIlxuICAgICAgICA+PC9hdWktdGFncy1pbnB1dD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgIDxhY2wtY3JkLWxpbmtcbiAgICAgICAgICAgICpuZ0lmPVwiKGZpZWxkIHwgcHVyZTogaXNMaW5rKSAmJiBpc0Rpc2FibGVkOyBlbHNlIHRleHRGaWVsZFwiXG4gICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgPjwvYWNsLWNyZC1saW5rPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICN0ZXh0RmllbGQ+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICAgIGF1aS1pbnB1dFxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgZmllbGQuY2FwYWJpbGl0aWVzXG4gICAgICAgICAgICAgIHwgcHVyZTogZ2V0RGlzcGxheUJ5Q2FwYWJpbGl0eTpTcGVjQ2FwYWJpbGl0eS5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgIFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9hY2wtY3JkLWZvcm0taXRlbT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ0dy1mbGV4IHR3LXctZnVsbCB0dy1mbGV4LWNvbFwiXG4gICAgICAgICpuZ0lmPVwiZmllbGQuY2FwYWJpbGl0aWVzIHwgcHVyZTogZ2V0V2lkZ2V0cyBhcyB3aWRnZXRcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cIndpZGdldC5jb21wb25lbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkIHwgcHVyZTogaXNSZW1vdGVGaWVsZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVtb3RlTW9kdWxlJCB8IGFzeW5jIGFzIHJlbW90ZU1vZHVsZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiZmllbGQgfCBwdXJlOiBnZXRGaWVsZERpc3BsYXlOYW1lIGFzIGxhYmVsOyBlbHNlIHB1cmVSZW1vdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxhdWktZm9ybS1pdGVtIFtlbXB0eUFkZG9uXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgIGF1aUZvcm1JdGVtTGFiZWxcbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkIHwgcHVyZTogZ2V0RmllbGREaXNwbGF5TmFtZSBhcyBsYWJlbFwiXG4gICAgICAgICAgICAgICAgPnt7IGxhYmVsIHwgdHJhbnNsYXRlIH19PC9sYWJlbFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdDb21wb25lbnRPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgIHJlbW90ZU1vZHVsZS5jb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICBpbmplY3RvcjogcmVtb3RlTW9kdWxlLmluamVjdG9yXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8ZGl2IGF1aUZvcm1JdGVtSGludD5cbiAgICAgICAgICAgICAgICB7eyBmaWVsZCB8IHB1cmU6IGdldEZpZWxkRGVzY3JpcHRpb24gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2F1aS1mb3JtLWl0ZW0+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwdXJlUmVtb3RlPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdDb21wb25lbnRPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICByZW1vdGVNb2R1bGUuY29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGluamVjdG9yOiByZW1vdGVNb2R1bGUuaW5qZWN0b3JcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lclxuICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWR2YW5jZWRGaWxlZD5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBtZXRhLmZpZWxkVHlwZSA9PT0gU3BlY0NhcGFiaWxpdHkucGFzc3dvcmQgfHxcbiAgICAgICAgICBtZXRhLmZpZWxkVHlwZSA9PT0gU3BlY0NhcGFiaWxpdHkuY29uZmlybVBhc3N3b3JkIHx8XG4gICAgICAgICAgbWV0YS5maWVsZFR5cGUgPT09IFNwZWNDYXBhYmlsaXR5LmV4dGVybmFsUGFzc3dvcmRcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGFjbC1jcmQtZm9ybS1pdGVtXG4gICAgICAgICAgKm5nSWY9XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICBbcGxhaW5dPVwidHJ1ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFzc3dvcmRWaWV3XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYWNsLWNyZC1mb3JtLWl0ZW0+XG4gICAgICAgIDxhY2wtcGFzc3dvcmQtaW5wdXRcbiAgICAgICAgICAqbmdJZj1cIiFpc0Rpc2FibGVkXCJcbiAgICAgICAgICBbaW5pdFBhc3N3b3JkXT1cImNvbnRyb2wudmFsdWVcIlxuICAgICAgICAgIFtsYWJlbF09XCJmaWVsZCB8IHB1cmU6IGdldEZpZWxkRGlzcGxheU5hbWUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtoaW50XT1cIlxuICAgICAgICAgICAgY3VzdG9tRGVzY3JpcHRpb24/LnRlbXBsYXRlUmVmIHx8XG4gICAgICAgICAgICAoZmllbGQgfCBwdXJlOiBnZXRGaWVsZERlc2NyaXB0aW9uIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwiY3JkRm9ybS5yZWFkb25seVwiXG4gICAgICAgICAgW2lzVXBkYXRlXT1cIiEhY29udHJvbC52YWx1ZSAmJiAhY29udHJvbC5kaXJ0eVwiXG4gICAgICAgICAgW3N0cm9uZ1Bhc3N3b3JkXT1cIm1ldGEuZmllbGRUeXBlICE9PSBTcGVjQ2FwYWJpbGl0eS5leHRlcm5hbFBhc3N3b3JkXCJcbiAgICAgICAgICBbZW5hYmxlQ29uZmlybV09XCJtZXRhLmZpZWxkVHlwZSA9PT0gU3BlY0NhcGFiaWxpdHkuY29uZmlybVBhc3N3b3JkXCJcbiAgICAgICAgICB3aWR0aD1cImxhcmdlXCJcbiAgICAgICAgICBbZW5jb2RpbmddPVwiZmllbGQgfCBwdXJlOiBnZXRFbmNvZGluZzoncGFzc3dvcmQnXCJcbiAgICAgICAgICBbcGF0dGVybl09XCJmaWVsZC52YWxpZGF0aW9ucz8ucGF0dGVyblwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgZmllbGQuY2FwYWJpbGl0aWVzXG4gICAgICAgICAgICAgIHwgcHVyZTogZ2V0RGlzcGxheUJ5Q2FwYWJpbGl0eTpTcGVjQ2FwYWJpbGl0eS5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgIFwiXG4gICAgICAgID48L2FjbC1wYXNzd29yZC1pbnB1dD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPCEtLSBncm91cCBmaWVsZCAgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNHcm91cEZpZWxkKGZpZWxkKSAmJiBmaWVsZC5maWVsZExpc3Q/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGFjbC1vcGVyYW5kLWZpZWxkLWdyb3VwXG4gICAgICAgICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgICAgICAgIFtmaWVsZEdyb3VwXT1cImZpZWxkXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgW2Zvcm1EYXRhU3RhdGVdPVwiZm9ybURhdGFTdGF0ZVwiXG4gICAgICAgICAgW2Zvcm1FcnJvcnNdPVwiZm9ybUVycm9yc1wiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInZhbHVlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9hY2wtb3BlcmFuZC1maWVsZC1ncm91cD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPCEtLSBhcnJheSBmaWVsZCBncm91cHMgLS0+XG4gICAgICA8IS0tIGFycmF5IGZpZWxkIHRhYmxlIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQXJyYXlGaWVsZChmaWVsZClcIj5cbiAgICAgICAgPGFjbC1jcmQtYXJyYXktdGFibGVcbiAgICAgICAgICAqbmdJZj1cImZpZWxkIHwgcHVyZTogaXNBcnJheUZpZWxkVGFibGU7IGVsc2UgZGVmYXVsdEFycmF5RmlsZWRcIlxuICAgICAgICAgIFthcnJheUZpZWxkR3JvdXBdPVwiZmllbGRcIlxuICAgICAgICAgIFtmb3JtRGF0YVN0YXRlXT1cImZvcm1EYXRhU3RhdGVcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwidmFsdWVDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2FjbC1jcmQtYXJyYXktdGFibGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEFycmF5RmlsZWQ+XG4gICAgICAgICAgPGFjbC1vcGVyYW5kLWFycmF5LWZpZWxkLWdyb3VwXG4gICAgICAgICAgICBbYXJyYXlGaWVsZEdyb3VwXT1cImZpZWxkXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFtmb3JtRGF0YVN0YXRlXT1cImZvcm1EYXRhU3RhdGVcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInZhbHVlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvYWNsLW9wZXJhbmQtYXJyYXktZmllbGQtZ3JvdXA+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3Bhc3N3b3JkVmlldz5cbiAge3sgUEFTU1dPUkRfUkVWRUFMIH19XG48L25nLXRlbXBsYXRlPlxuIl19