@alauda-fe/crd-form 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/crd-form/component.mjs +3 -2
- package/esm2022/lib/field-controls/form-item.component.mjs +95 -21
- package/esm2022/lib/field-controls/module.mjs +5 -3
- package/esm2022/lib/field-controls/operand-field-group.component.mjs +2 -3
- package/esm2022/lib/field-controls/operand-field.component.mjs +12 -14
- package/esm2022/lib/field-controls/widgets/resource-requirements/resource-requirements.component.mjs +2 -5
- package/esm2022/lib/types/index.mjs +48 -29
- package/esm2022/lib/utils/capability.mjs +33 -25
- package/esm2022/lib/utils/helper.mjs +2 -2
- package/esm2022/lib/utils/util.mjs +2 -5
- package/lib/field-controls/form-item.component.d.ts +6 -0
- package/lib/field-controls/module.d.ts +1 -1
- package/lib/field-controls/operand-field-group.component.d.ts +1 -1
- package/lib/field-controls/operand-field.component.d.ts +2 -2
- package/lib/field-controls/widgets/resource-requirements/resource-requirements.component.d.ts +0 -3
- package/lib/types/index.d.ts +46 -28
- package/lib/utils/capability.d.ts +10 -3
- package/lib/utils/util.d.ts +0 -4
- package/package.json +1 -1
|
@@ -11,7 +11,7 @@ import { get, identity, map as $map, template } from 'lodash-es';
|
|
|
11
11
|
import { combineLatest, map, filter, Observable, Subject, debounceTime, distinctUntilChanged, shareReplay, takeUntil, BehaviorSubject, switchMap, of, finalize, isObservable, take, tap, } from 'rxjs';
|
|
12
12
|
import { CrdFormComponent } from '../crd-form/component';
|
|
13
13
|
import { SpecCapability, Validations, } from '../types';
|
|
14
|
-
import { convertBooleanSwitchValue, convertValue, getDefaultValue,
|
|
14
|
+
import { convertBooleanSwitchValue, convertValue, getDefaultValue, getFieldDescription, getFieldDisplayName, getFieldPlaceholder, getFieldType, getFormData, getRadioOptions, normalizePath, } from '../utils';
|
|
15
15
|
import { isArrayField, isArrayFieldTable, isClearable, isCreatable, isGroupField, isMultiple, isAllowCreate, isRemoteField, isRequired, evalInContext, getOperandPath, } from '../utils/helper';
|
|
16
16
|
import { compareWithSubscribedPaths, PropsFieldExpression, } from './expressions/props-expression';
|
|
17
17
|
import { isLink } from './widgets/link/component';
|
|
@@ -25,7 +25,7 @@ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_
|
|
|
25
25
|
i0.ɵɵpipe(2, "translate");
|
|
26
26
|
} if (rf & 2) {
|
|
27
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,
|
|
28
|
+
i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled)("placeholder", i0.ɵɵpipeBind1(2, 7, i0.ɵɵpipeBind2(1, 4, ctx_r0.field, ctx_r0.getFieldPlaceholder)));
|
|
29
29
|
} }
|
|
30
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
31
|
i0.ɵɵtext(0);
|
|
@@ -214,7 +214,7 @@ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_
|
|
|
214
214
|
i0.ɵɵpipe(2, "translate");
|
|
215
215
|
} if (rf & 2) {
|
|
216
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,
|
|
217
|
+
i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled)("placeholder", i0.ɵɵpipeBind1(2, 7, i0.ɵɵpipeBind2(1, 4, ctx_r0.field, ctx_r0.getFieldPlaceholder)));
|
|
218
218
|
} }
|
|
219
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
220
|
i0.ɵɵelement(0, "aui-tags-input", 40);
|
|
@@ -222,7 +222,7 @@ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_
|
|
|
222
222
|
i0.ɵɵpipe(2, "translate");
|
|
223
223
|
} if (rf & 2) {
|
|
224
224
|
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
225
|
-
i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("placeholder", i0.ɵɵpipeBind1(2,
|
|
225
|
+
i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("placeholder", i0.ɵɵpipeBind1(2, 8, i0.ɵɵpipeBind2(1, 5, ctx_r0.field, ctx_r0.getFieldPlaceholder)))("aclReadonlyField", ctx_r0.isDisabled)("clearable", ctx_r0.isClearable);
|
|
226
226
|
} }
|
|
227
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
228
|
i0.ɵɵelement(0, "acl-crd-link", 42);
|
|
@@ -248,11 +248,11 @@ function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_
|
|
|
248
248
|
i0.ɵɵpipe(2, "translate");
|
|
249
249
|
} if (rf & 2) {
|
|
250
250
|
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
251
|
-
i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("placeholder", i0.ɵɵpipeBind1(2,
|
|
251
|
+
i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("placeholder", i0.ɵɵpipeBind1(2, 7, i0.ɵɵpipeBind2(1, 4, ctx_r0.field, ctx_r0.getFieldPlaceholder)))("aclReadonlyField", ctx_r0.isDisabled);
|
|
252
252
|
} }
|
|
253
253
|
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_Template(rf, ctx) { if (rf & 1) {
|
|
254
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,
|
|
255
|
+
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_input_1_Template, 3, 9, "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, 9, "textarea", 18)(10, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_tags_input_10_Template, 3, 10, "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, 9, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
|
|
256
256
|
i0.ɵɵelementEnd();
|
|
257
257
|
} if (rf & 2) {
|
|
258
258
|
const meta_r11 = i0.ɵɵnextContext(2).ngIf;
|
|
@@ -404,11 +404,11 @@ function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_co
|
|
|
404
404
|
} if (rf & 2) {
|
|
405
405
|
const meta_r11 = i0.ɵɵnextContext(3).ngIf;
|
|
406
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", 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,
|
|
407
|
+
i0.ɵɵproperty("initPassword", ctx_r0.control.value)("label", i0.ɵɵpipeBind1(2, 15, i0.ɵɵpipeBind2(1, 12, ctx_r0.field, ctx_r0.getFieldDisplayName)))("hint", 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, 29, i0.ɵɵpipeBind2(6, 26, ctx_r0.field, ctx_r0.getFieldPlaceholder)));
|
|
408
408
|
} }
|
|
409
409
|
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
410
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,
|
|
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, 31, "acl-password-input", 52);
|
|
412
412
|
i0.ɵɵelementContainerEnd();
|
|
413
413
|
} if (rf & 2) {
|
|
414
414
|
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
@@ -553,8 +553,8 @@ export class OperandFieldComponent {
|
|
|
553
553
|
this.SpecCapability = SpecCapability;
|
|
554
554
|
this.getFieldDisplayName = getFieldDisplayName;
|
|
555
555
|
this.getFieldDescription = getFieldDescription;
|
|
556
|
+
this.getFieldPlaceholder = getFieldPlaceholder;
|
|
556
557
|
this.getRadioOptions = getRadioOptions;
|
|
557
|
-
this.getDisplayByCapability = getDisplayByCapability;
|
|
558
558
|
this.editorOptions = yamlWriteOptions;
|
|
559
559
|
this.editorActions = createActions;
|
|
560
560
|
this.isGroupField = isGroupField;
|
|
@@ -604,9 +604,7 @@ export class OperandFieldComponent {
|
|
|
604
604
|
]).pipe(debounceTime(100), distinctUntilChanged((p, n) => compareWithSubscribedPaths(dynamicExpression, p, n)), tap(([formContext, formDataState]) => {
|
|
605
605
|
if (this.crdForm.debug) {
|
|
606
606
|
/* eslint-disable no-console */
|
|
607
|
-
console.log('field: ', field);
|
|
608
|
-
console.log('formContext: ', formContext);
|
|
609
|
-
console.log('formDataState: ', formDataState.toJS());
|
|
607
|
+
console.log('field: ', field, 'formContext: ', formContext, 'formDataState: ', formDataState.toJS());
|
|
610
608
|
}
|
|
611
609
|
}), switchMap(([formContext, formDataState]) => {
|
|
612
610
|
let result = [];
|
|
@@ -854,7 +852,7 @@ __decorate([
|
|
|
854
852
|
], OperandFieldComponent.prototype, "formDataState$", void 0);
|
|
855
853
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OperandFieldComponent, [{
|
|
856
854
|
type: Component,
|
|
857
|
-
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\n | pure: convertBooleanSwitchValue : field.capabilities\n | 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]=\"field | pure: getFieldDescription | translate\"\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"] }]
|
|
855
|
+
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]=\"field | pure: getFieldPlaceholder | translate\"\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\n | pure: convertBooleanSwitchValue : field.capabilities\n | 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]=\"field | pure: getFieldPlaceholder | translate\"\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]=\"field | pure: getFieldPlaceholder | translate\"\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]=\"field | pure: getFieldPlaceholder | translate\"\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]=\"field | pure: getFieldDescription | translate\"\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]=\"field | pure: getFieldPlaceholder | translate\"\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"] }]
|
|
858
856
|
}], () => [{ type: i1.CrdFormComponent }, { type: i0.Injector }, { type: i2.HttpClient }, { type: i0.ChangeDetectorRef }], { field: [{
|
|
859
857
|
type: Input
|
|
860
858
|
}], field$: [], remoteModuleDefinition: [{
|
|
@@ -876,4 +874,4 @@ __decorate([
|
|
|
876
874
|
args: ['hidden']
|
|
877
875
|
}] }); })();
|
|
878
876
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(OperandFieldComponent, { className: "OperandFieldComponent", filePath: "lib/field-controls/operand-field.component.ts", lineNumber: 115 }); })();
|
|
879
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmFuZC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyZC1mb3JtL3NyYy9saWIvZmllbGQtY29udHJvbHMvb3BlcmFuZC1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyZC1mb3JtL3NyYy9saWIvZmllbGQtY29udHJvbHMvb3BlcmFuZC1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxhQUFhLEVBRWIsT0FBTyxFQUVQLGVBQWUsRUFDZixVQUFVLEVBQ1YsU0FBUyxFQUNULGtCQUFrQixFQUdsQixXQUFXLEVBQ1gsZUFBZSxFQUNmLGdCQUFnQixHQUNqQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxRQUFRLEVBQ1IsS0FBSyxFQUlMLE1BQU07QUFFTiwyQkFBMkI7QUFDM0IsZUFBZSxJQUFJLGNBQWMsR0FDbEMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsR0FBRyxFQUNILE1BQU0sRUFDTixVQUFVLEVBQ1YsT0FBTyxFQUNQLFlBQVks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QkFDVCxVQUFVO3FEQUFlO0FBTWxDO0lBREMsZUFBZSxFQUFFOzhCQUNRLFVBQVU7c0VBQStCO0FBb0NuRTtJQURDLGVBQWUsRUFBRTs4QkFDRCxVQUFVOzZEQUFnQjtpRkFqRGhDLHFCQUFxQjtjQU5qQyxTQUFTOzJCQUNFLG1CQUFtQixtQkFHWix1QkFBdUIsQ0FBQyxNQUFNO2lJQU0vQyxLQUFLO2tCQURKLEtBQUs7WUFJTixNQUFNLE1BR04sc0JBQXNCO2tCQURyQixLQUFLO1lBSU4sdUJBQXVCLE1BR3ZCLFFBQVE7a0JBRFAsS0FBSztZQStCRyxNQUFNO2tCQUFkLEtBQUs7WUFDRyxhQUFhO2tCQUFyQixLQUFLO1lBRU4sY0FBYyxNQUVMLFVBQVU7a0JBQWxCLEtBQUs7WUFFSSxXQUFXO2tCQUFwQixNQUFNO1lBQ0csVUFBVTtrQkFBbkIsTUFBTTtZQUlILFFBQVE7a0JBRFgsV0FBVzttQkFBQyxRQUFROztrRkF6RFYscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQVBJX0dBVEVXQVksXG4gIGNyZWF0ZUFjdGlvbnMsXG4gIEVuY29kaW5nLFxuICBpc0VxdWFsLFxuICBLdWJlcm5ldGVzUmVzb3VyY2UsXG4gIE9ic2VydmFibGVJbnB1dCxcbiAgcHVibGlzaFJlZixcbiAgc2tpcEVycm9yLFxuICBzdGFydFdpdGhDb25kaXRpb24sXG4gIFN0cmluZ01hcCxcbiAgVHJhbnNsYXRpb24sXG4gIHZpZXdBY3Rpb25zLFxuICB5YW1sUmVhZE9wdGlvbnMsXG4gIHlhbWxXcml0ZU9wdGlvbnMsXG59IGZyb20gJ0BhbGF1ZGEtZmUvY29tbW9uJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIC8vIGNzcGVsbDpkaXNhYmxlLW5leHQtbGluZVxuICDJtWNyZWF0ZUluamVjdG9yIGFzIGNyZWF0ZUluamVjdG9yLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGRlY29kZSwgZW5jb2RlIH0gZnJvbSAnYWI2NCc7XG5pbXBvcnQgeyBpc0ltbXV0YWJsZSB9IGZyb20gJ2ltbXV0YWJsZSc7XG5pbXBvcnQgeyBnZXQsIGlkZW50aXR5LCBtYXAgYXMgJG1hcCwgdGVtcGxhdGUgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgY29tYmluZUxhdGVzdCxcbiAgbWFwLFxuICBmaWx0ZXIsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIHNoYXJlUmVwbGF5LFxuICB0YWtlVW50aWwsXG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgc3dpdGNoTWFwLFxuICBvZixcbiAgZmluYWxpemUsXG4gIGlzT2JzZXJ2YWJsZSxcbiAgdGFrZSxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ3JkRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2NyZC1mb3JtL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBSZW1vdGVXaWRnZXRNb2R1bGVEZWZpbml0aW9uIH0gZnJvbSAnLi4vcmVtb3RlLXdpZGdldHMnO1xuaW1wb3J0IHtcbiAgRmllbGRWYWx1ZUNoYW5nZUV2ZW50LFxuICBGb3JtRGF0YVN0YXRlLFxuICBGb3JtRXJyb3JzLFxuICBPcGVyYW5kRmllbGQsXG4gIFNwZWNDYXBhYmlsaXR5LFxuICBWYWxpZGF0aW9ucyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgY29udmVydEJvb2xlYW5Td2l0Y2hWYWx1ZSxcbiAgY29udmVydFZhbHVlLFxuICBnZXREZWZhdWx0VmFsdWUsXG4gIGdldERpc3BsYXlCeUNhcGFiaWxpdHksXG4gIGdldEZpZWxkRGVzY3JpcHRpb24sXG4gIGdldEZpZWxkRGlzcGxheU5hbWUsXG4gIGdldEZpZWxkVHlwZSxcbiAgZ2V0Rm9ybURhdGEsXG4gIGdldFJhZGlvT3B0aW9ucyxcbiAgbm9ybWFsaXplUGF0aCxcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgaXNBcnJheUZpZWxkLFxuICBpc0FycmF5RmllbGRUYWJsZSxcbiAgaXNDbGVhcmFibGUsXG4gIGlzQ3JlYXRhYmxlLFxuICBpc0dyb3VwRmllbGQsXG4gIGlzTXVsdGlwbGUsXG4gIGlzQWxsb3dDcmVhdGUsXG4gIGlzUmVtb3RlRmllbGQsXG4gIGlzUmVxdWlyZWQsXG4gIGV2YWxJbkNvbnRleHQsXG4gIGdldE9wZXJhbmRQYXRoLFxufSBmcm9tICcuLi91dGlscy9oZWxwZXInO1xuXG5pbXBvcnQge1xuICBjb21wYXJlV2l0aFN1YnNjcmliZWRQYXRocyxcbiAgUHJvcHNGaWVsZEV4cHJlc3Npb24sXG59IGZyb20gJy4vZXhwcmVzc2lvbnMvcHJvcHMtZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBpc0xpbmsgfSBmcm9tICcuL3dpZGdldHMvbGluay9jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgUEFTU1dPUkRfUkVWRUFMID0gJyoqKioqKic7XG5cbmNvbnN0IEVOQ09ESU5HX01BUFBFUjogUmVjb3JkPHN0cmluZywgRW5jb2Rpbmc+ID0ge1xuICBiYXNlNjQ6IHtcbiAgICBkZWNvZGUsXG4gICAgZW5jb2RlLFxuICB9LFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNsLW9wZXJhbmQtZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJ29wZXJhbmQtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnb3BlcmFuZC1maWVsZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgT3BlcmFuZEZpZWxkQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdFxue1xuICBASW5wdXQoKVxuICBmaWVsZDogT3BlcmFuZEZpZWxkO1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBmaWVsZCQhOiBPYnNlcnZhYmxlPE9wZXJhbmRGaWVsZD47XG5cbiAgQElucHV0KClcbiAgcmVtb3RlTW9kdWxlRGVmaW5pdGlvbjogUmVtb3RlV2lkZ2V0TW9kdWxlRGVmaW5pdGlvbjtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgcmVtb3RlTW9kdWxlRGVmaW5pdGlvbiQhOiBPYnNlcnZhYmxlPFJlbW90ZVdpZGdldE1vZHVsZURlZmluaXRpb24+O1xuXG4gIEBJbnB1dCgpXG4gIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgZ2V0IGlzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkgfHwgdGhpcy5maWVsZD8uZGlzYWJsZWQ7XG4gIH1cblxuICBnZXQgZWZmZWN0Q29udHJvbERlZmF1bHRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jcmRGb3JtLmVmZmVjdENvbnRyb2xEZWZhdWx0VmFsdWU7XG4gIH1cblxuICBnZXQgaXNSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gaXNSZXF1aXJlZCh0aGlzLmZpZWxkKTtcbiAgfVxuXG4gIGdldCBpc0NyZWF0YWJsZSgpIHtcbiAgICByZXR1cm4gaXNDcmVhdGFibGUodGhpcy5maWVsZCk7XG4gIH1cblxuICBnZXQgaXNNdWx0aXBsZSgpIHtcbiAgICByZXR1cm4gaXNNdWx0aXBsZSh0aGlzLmZpZWxkKTtcbiAgfVxuXG4gIGdldCBpc0FsbG93Q3JlYXRlKCkge1xuICAgIHJldHVybiBpc0FsbG93Q3JlYXRlKHRoaXMuZmllbGQpO1xuICB9XG5cbiAgZ2V0IGlzQ2xlYXJhYmxlKCkge1xuICAgIHJldHVybiBpc0NsZWFyYWJsZSh0aGlzLmZpZWxkKTtcbiAgfVxuXG4gIEBJbnB1dCgpIGZpZWxkczogT3BlcmFuZEZpZWxkW107XG4gIEBJbnB1dCgpIGZvcm1EYXRhU3RhdGU6IEZvcm1EYXRhU3RhdGU7XG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBmb3JtRGF0YVN0YXRlJCE6IE9ic2VydmFibGU8Rm9ybURhdGFTdGF0ZT47XG5cbiAgQElucHV0KCkgZm9ybUVycm9yczogRm9ybUVycm9ycztcblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZpZWxkVmFsdWVDaGFuZ2VFdmVudD4oKTtcbiAgQE91dHB1dCgpIGl0ZW1SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8g6YCa6L+HaGlkZGVu5bGe5oCn6ZqQ6JeP5LiN5b+F6KaB55qE5YWD57Sg77yM5ZKMIGFjbFNjcm9sbFRvRmlyc3RJbnZhbGlkIOaMh+S7pOi/h+a7pOmakOiXj+WFg+e0oOS/neaMgeS4gOiHtFxuICBASG9zdEJpbmRpbmcoJ2hpZGRlbicpXG4gIGdldCBpc0hpZGRlbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMuaGFzRmllbGREZXBlbmRlbmN5KCkgJiYgIXRoaXMuY2hlY2tGaWVsZERlcGVuZGVuY3kodGhpcy5maWVsZCkpIHx8XG4gICAgICB0aGlzLl9oaWRkZW5cbiAgICApO1xuICB9XG5cbiAgc2V0IGlzSGlkZGVuKGhpZGRlbikge1xuICAgIHRoaXMuX2hpZGRlbiA9IGhpZGRlbjtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hpZGRlbjogYm9vbGVhbjtcbiAgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBvbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBnZXRGaWVsZFR5cGUgPSBnZXRGaWVsZFR5cGU7XG4gIGlzTGluayA9IGlzTGluaztcblxuICBTcGVjQ2FwYWJpbGl0eSA9IFNwZWNDYXBhYmlsaXR5O1xuXG4gIGdldEZpZWxkRGlzcGxheU5hbWUgPSBnZXRGaWVsZERpc3BsYXlOYW1lO1xuICBnZXRGaWVsZERlc2NyaXB0aW9uID0gZ2V0RmllbGREZXNjcmlwdGlvbjtcbiAgZ2V0UmFkaW9PcHRpb25zID0gZ2V0UmFkaW9PcHRpb25zO1xuICBnZXREaXNwbGF5QnlDYXBhYmlsaXR5ID0gZ2V0RGlzcGxheUJ5Q2FwYWJpbGl0eTtcblxuICBlZGl0b3JPcHRpb25zID0geWFtbFdyaXRlT3B0aW9ucztcbiAgZWRpdG9yQWN0aW9ucyA9IGNyZWF0ZUFjdGlvbnM7XG5cbiAgaXNHcm91cEZpZWxkID0gaXNHcm91cEZpZWxkO1xuICBpc0FycmF5RmllbGQgPSBpc0FycmF5RmllbGQ7XG4gIGlzUmVtb3RlRmllbGQgPSBpc1JlbW90ZUZpZWxkO1xuICBpc0FycmF5RmllbGRUYWJsZSA9IGlzQXJyYXlGaWVsZFRhYmxlO1xuICBjb252ZXJ0Qm9vbGVhblN3aXRjaFZhbHVlID0gY29udmVydEJvb2xlYW5Td2l0Y2hWYWx1ZTtcbiAgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBnZXQgaXNDdXN0b21FcnJvcnNNYXBwZXIoKSB7XG4gICAgcmV0dXJuIGdldEZpZWxkVHlwZSh0aGlzLmZpZWxkKSA9PT0gU3BlY0NhcGFiaWxpdHkucmVzb3VyY2VSZXF1aXJlbWVudHM7XG4gIH1cblxuICBQQVNTV09SRF9SRVZFQUwgPSBQQVNTV09SRF9SRVZFQUw7XG5cbiAgaXNCYXNpY1R5cGVGaWVsZCA9IChmaWxlZDogT3BlcmFuZEZpZWxkKSA9PlxuICAgICFbXG4gICAgICBTcGVjQ2FwYWJpbGl0eS5vYmplY3QsXG4gICAgICBTcGVjQ2FwYWJpbGl0eS5hcnJheSxcbiAgICAgIFNwZWNDYXBhYmlsaXR5LnBhc3N3b3JkLFxuICAgICAgU3BlY0NhcGFiaWxpdHkuY29uZmlybVBhc3N3b3JkLFxuICAgICAgU3BlY0NhcGFiaWxpdHkuZXh0ZXJuYWxQYXNzd29yZCxcbiAgICBdLmluY2x1ZGVzKGdldEZpZWxkVHlwZShmaWxlZCkpO1xuXG4gIHZpZXdBY3Rpb25zID0gdmlld0FjdGlvbnM7XG4gIHZpZXdPcHRpb25zID0geWFtbFJlYWRPcHRpb25zO1xuXG4gIHByaXZhdGUgX3ZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW107XG5cbiAgcmVtb3RlTW9kdWxlJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZmllbGQkLFxuICAgIHRoaXMucmVtb3RlTW9kdWxlRGVmaW5pdGlvbiQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbZmllbGQsIHJlbW90ZU1vZHVsZURlZmluaXRpb25dKSA9PiB7XG4gICAgICBjb25zdCByZW1vdGVXaWRnZXQgPSB0aGlzLmdldFJlbW90ZVdpZGdldChmaWVsZCwgcmVtb3RlTW9kdWxlRGVmaW5pdGlvbik7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByZW1vdGVXaWRnZXQgJiYge1xuICAgICAgICAgIGluamVjdG9yOiBjcmVhdGVJbmplY3RvcihcbiAgICAgICAgICAgIHJlbW90ZU1vZHVsZURlZmluaXRpb24ubW9kdWxlLFxuICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICApLFxuICAgICAgICAgIG1vZHVsZTogcmVtb3RlTW9kdWxlRGVmaW5pdGlvbi5tb2R1bGUsXG4gICAgICAgICAgY29tcG9uZW50OiByZW1vdGVXaWRnZXQuY29tcG9uZW50LFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pLFxuICAgIGZpbHRlcihCb29sZWFuKSxcbiAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSxcbiAgICBzaGFyZVJlcGxheSgxKSxcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgY3JkRm9ybTogQ3JkRm9ybUNvbXBvbmVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgcmVnaXN0ZXJDb250cm9sKCkge1xuICAgIHRoaXMuY3JkRm9ybS5jb250cm9sTWFwLnNldChnZXRPcGVyYW5kUGF0aCh0aGlzLmZpZWxkKSwgdGhpcy5jb250cm9sKTtcbiAgfVxuXG4gIHVuUmVnaXN0ZXJDb250cm9sKCkge1xuICAgIHRoaXMuY3JkRm9ybS5jb250cm9sTWFwLmRlbGV0ZShnZXRPcGVyYW5kUGF0aCh0aGlzLmZpZWxkKSk7XG4gIH1cblxuICBnZXRXaWRnZXRzID0gKGNhcGFiaWxpdGllczogU3BlY0NhcGFiaWxpdHlbXSkgPT4ge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBjYXBhYmlsaXRpZXMuZmluZChjID0+XG4gICAgICBjLnN0YXJ0c1dpdGgoU3BlY0NhcGFiaWxpdHkud2lkZ2V0cyksXG4gICAgKTtcbiAgICByZXR1cm4gZGVzY3JpcHRvclxuICAgICAgPyB0aGlzLmNyZEZvcm0ud2lkZ2V0cz8uZmluZChcbiAgICAgICAgICB3ID0+IHcuZGVzY3JpcHRvciA9PT0gZGVzY3JpcHRvci5zcGxpdCgnPz0nKVswXSxcbiAgICAgICAgKVxuICAgICAgOiBudWxsO1xuICB9O1xuXG4gIGdldFJlbW90ZVdpZGdldChcbiAgICBmaWVsZDogT3BlcmFuZEZpZWxkLFxuICAgIHJlbW90ZURlZmluaXRpb246IFJlbW90ZVdpZGdldE1vZHVsZURlZmluaXRpb24sXG4gICkge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBmaWVsZC5jYXBhYmlsaXRpZXMuZmluZChjID0+XG4gICAgICBjLnN0YXJ0c1dpdGgoU3BlY0NhcGFiaWxpdHkucmVtb3RlKSxcbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICBkZXNjcmlwdG9yICYmXG4gICAgICByZW1vdGVEZWZpbml0aW9uPy5jb21wb25lbnRzPy5maW5kKFxuICAgICAgICB3ID0+IHcuZGVzY3JpcHRvciA9PT0gZGVzY3JpcHRvci5zcGxpdCgnPz0nKVswXSxcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5keW5hbWljSGlkZGVuVmFsdWUkLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLmlzSGlkZGVuID0gdmFsdWU7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckNvbnRyb2woKTtcbiAgICBpZiAodGhpcy5maWVsZC52YWxpZGF0aW9ucykge1xuICAgICAgY29uc3QgdmFsaWRhdG9ycyA9ICRtYXAodGhpcy5maWVsZC52YWxpZGF0aW9ucywgKHZhbCwgcnVsZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKHJ1bGUpIHtcbiAgICAgICAgICBjYXNlIFZhbGlkYXRpb25zLm1heGltdW06IHtcbiAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLm1heCh2YWwgYXMgbnVtYmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBWYWxpZGF0aW9ucy5taW5pbXVtOiB7XG4gICAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5taW4odmFsIGFzIG51bWJlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbnMucmVxdWlyZWQ6IHtcbiAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLnJlcXVpcmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFZhbGlkYXRpb25zLm1heExlbmd0aDoge1xuICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMubWF4TGVuZ3RoKHZhbCBhcyBudW1iZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFZhbGlkYXRpb25zLm1pbkxlbmd0aDoge1xuICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMubWluTGVuZ3RoKHZhbCBhcyBudW1iZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFZhbGlkYXRpb25zLnBhdHRlcm46IHtcbiAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLnBhdHRlcm4odmFsIGFzIHN0cmluZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkuZmlsdGVyKHYgPT4gISF2KTtcbiAgICAgIGlmICh2YWxpZGF0b3JzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmNvbnRyb2wuYWRkVmFsaWRhdG9ycygodGhpcy5fdmFsaWRhdG9ycyA9IHZhbGlkYXRvcnMpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyDlsIYgdmFsdWVDaGFuZ2VzIOeahOmAu+i+keenu+WKqOWIsCBuZ0FmdGVyVmlld0luaXQg5Lit77yM5Li76KaB5piv5Li65LqG6YG/5YWN5YWo5bGAIFZhbGlkYXRvcnNEaXJlY3RpdmXluKbmnaXnmoTlvbHlk43vvIzpnIDopoHnrYnliLBWYWxpZGF0b3JzRGlyZWN0aXZl55qEbmdBZnRlclZpZXdJbml05LmL5ZCO5YaN6K6i6ZiFY29udHJvbOeahHZhbHVlQ2hhbmdlc1xuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aENvbmRpdGlvbih0aGlzLmVmZmVjdENvbnRyb2xEZWZhdWx0VmFsdWUsIHRoaXMuY29udHJvbC52YWx1ZSksXG4gICAgICAgIGRlYm91bmNlVGltZSg1MCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLFxuICAgICAgICBmaWx0ZXIodiA9PlxuICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGhhY2suIHlhbWwgdmFsdWUgd2lsbCBvbmx5IGJlIG51bGwgaWYgZm9ybWF0IGVycm9yKGJlY2F1c2UgdHJ5LWNhdGNoKSwgdGhlIGRhdGEgZmxvdyBub3cgaXMgZnJvbSBjb250cm9sID0+IGZvcm1EYXRhU3RhdGUgPT4gY29udHJvbCh3aWxsIGp1ZGdlIGVxdWFsaXR5Ke+8jHRoaXMgd2lsbCBtYWtlIGNvbnRyb2wgYmUgZW1wdHlcbiAgICAgICAgICBnZXRGaWVsZFR5cGUodGhpcy5maWVsZCkgPT09IFNwZWNDYXBhYmlsaXR5LnlhbWwgPyB2ICE9PSBudWxsIDogdHJ1ZSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgIGZpZWxkOiB0aGlzLmZpZWxkLFxuICAgICAgICAgIGRhdGE6IHZhbHVlLFxuICAgICAgICAgIGVycm9yczogdGhpcy5jb250cm9sLmVycm9ycyxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMub25EZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy51blJlZ2lzdGVyQ29udHJvbCgpO1xuICAgIGlmICh0aGlzLl92YWxpZGF0b3JzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29udHJvbC5yZW1vdmVWYWxpZGF0b3JzKHRoaXMuX3ZhbGlkYXRvcnMpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKHsgZm9ybURhdGFTdGF0ZSB9OiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKHRoaXMuZmllbGQgJiYgZm9ybURhdGFTdGF0ZT8uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuc3RhdGljRGVmYXVsdFZhbHVlJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIGZpbHRlcigoeyB2YWx1ZSB9KSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCh7IHZhbHVlLCBpc0R5bmFtaWMgfSkgPT4ge1xuICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGlzRHluYW1pYyB9KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChmb3JtRGF0YVN0YXRlPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGdldEZvcm1EYXRhKFxuICAgICAgICBmb3JtRGF0YVN0YXRlLmN1cnJlbnRWYWx1ZSBhcyBGb3JtRGF0YVN0YXRlLFxuICAgICAgICB0aGlzLmZpZWxkLnBhdGgsXG4gICAgICAgIGZhbHNlLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHByZXZWYWx1ZSA9IGdldEZvcm1EYXRhKFxuICAgICAgICBmb3JtRGF0YVN0YXRlLnByZXZpb3VzVmFsdWUgYXMgRm9ybURhdGFTdGF0ZSxcbiAgICAgICAgdGhpcy5maWVsZC5wYXRoLFxuICAgICAgICBmYWxzZSxcbiAgICAgICk7XG4gICAgICBjb25zdCByYXdWYWx1ZSA9IGlzSW1tdXRhYmxlKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgPyBjdXJyZW50VmFsdWUudG9KUygpXG4gICAgICAgIDogY3VycmVudFZhbHVlO1xuICAgICAgaWYgKFxuICAgICAgICAhaXNFcXVhbChyYXdWYWx1ZSwgcHJldlZhbHVlKSAmJlxuICAgICAgICAhaXNFcXVhbChyYXdWYWx1ZSwgdGhpcy5jb250cm9sLnZhbHVlKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShyYXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGRDdXJyZW50VmFsdWUoKSB7XG4gICAgbGV0IHZhbHVlID0gZ2V0Rm9ybURhdGEodGhpcy5mb3JtRGF0YVN0YXRlLCB0aGlzLmZpZWxkLnBhdGgsIGZhbHNlKTtcblxuICAgIC8vIOWmguaenOWAvOaYryBJbW11dGFibGUgb2JqZWN0IOexu+Wei++8jOmcgOimgei9rOaIkOWOn+WniyBKUyBPYmplY3RcbiAgICBpZiAoaXNJbW11dGFibGUodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvSlMoKSBhcyBGb3JtRGF0YVN0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBnZXRGaWVsZFZhbHVlKHVzZURlZmF1bHQgPSB0cnVlKSB7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5nZXRGaWVsZEN1cnJlbnRWYWx1ZSgpO1xuXG4gICAgaWYgKGN1cnJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIHVzZURlZmF1bHQpIHtcbiAgICAgIHJldHVybiBnZXREZWZhdWx0VmFsdWUodGhpcy5maWVsZCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gIH1cblxuICBnZXRPcHRpb25EaXNwbGF5KFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQXJyYXk8eyB2YWx1ZTogc3RyaW5nOyBkaXNwbGF5OiBUcmFuc2xhdGlvbiB9PixcbiAgKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuZmluZChpdGVtID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKT8uZGlzcGxheTtcbiAgfVxuXG4gIGdldFNlbGVjdE9wdGlvbnMoZmllbGQ6IE9wZXJhbmRGaWVsZCkge1xuICAgIHJldHVybiBmaWVsZC5jYXBhYmlsaXRpZXNcbiAgICAgIC5maWx0ZXIoYyA9PiBjLnN0YXJ0c1dpdGgoU3BlY0NhcGFiaWxpdHkuc2VsZWN0KSlcbiAgICAgIC5tYXAoYyA9PiBjLnNwbGl0KFNwZWNDYXBhYmlsaXR5LnNlbGVjdCk/LlsxXSk7XG4gIH1cblxuICBnZXRFbmNvZGluZyhmaWVsZDogT3BlcmFuZEZpZWxkLCB0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwcmVmaXggPSBgdXJuOmFsbTpkZXNjcmlwdG9yOiR7dHlwZX06ZW5jb2Rpbmc6YDtcbiAgICBjb25zdCBjYXBhYmlsaXR5ID0gZmllbGQuY2FwYWJpbGl0aWVzLmZpbmQoaXQgPT4gaXQuc3RhcnRzV2l0aChwcmVmaXgpKTtcbiAgICBsZXQgZW5jb2Rpbmc6IEVuY29kaW5nO1xuICAgIGlmIChjYXBhYmlsaXR5KSB7XG4gICAgICBlbmNvZGluZyA9IEVOQ09ESU5HX01BUFBFUltjYXBhYmlsaXR5LnNsaWNlKHByZWZpeC5sZW5ndGgpXTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGVuY29kaW5nIHx8IHtcbiAgICAgICAgZW5jb2RlOiBpZGVudGl0eSxcbiAgICAgICAgZGVjb2RlOiBpZGVudGl0eSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNGaWVsZERlcGVuZGVuY3koKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQuY2FwYWJpbGl0aWVzLnNvbWUoYyA9PlxuICAgICAgYy5zdGFydHNXaXRoKFNwZWNDYXBhYmlsaXR5LmZpZWxkRGVwZW5kZW5jeSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tGaWVsZERlcGVuZGVuY3koZmllbGQ6IE9wZXJhbmRGaWVsZCk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBmaWVsZD8uY2FwYWJpbGl0aWVzXG4gICAgICAgIC5maWx0ZXIoYyA9PiBjLnN0YXJ0c1dpdGgoU3BlY0NhcGFiaWxpdHkuZmllbGREZXBlbmRlbmN5KSlcbiAgICAgICAgLm1hcChpID0+IGkuc3BsaXQoU3BlY0NhcGFiaWxpdHkuZmllbGREZXBlbmRlbmN5KVsxXSk7XG4gICAgICBpZiAoIWRlcGVuZGVuY2llcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFyZW50UGF0aHMgPSBkZXBlbmRlbmNpZXMubWFwKGQgPT4gZC5zcGxpdCgnOicpKTtcbiAgICAgIGNvbnN0IHN0YXRlID0gcGFyZW50UGF0aHMuZXZlcnkoKFtwYXRoLCAuLi52YWx1ZXNdKSA9PiB7XG4gICAgICAgIC8vIFN1cHBvcnQgZGVwZW5kIG9uZSBvZiB2YWx1ZXNcbiAgICAgICAgY29uc3QgZGVwZW5kZW5jeUZpZWxkID0gdGhpcy5maWVsZHMuZmluZChcbiAgICAgICAgICBmID0+IGYucGF0aCA9PT0gbm9ybWFsaXplUGF0aChwYXRoKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZGVwZW5kZW5jeURlZmF1bHRWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZShkZXBlbmRlbmN5RmllbGQpO1xuICAgICAgICBjb25zdCBmb3JtU3RhdGVWYWx1ZSA9IGdldEZvcm1EYXRhKHRoaXMuZm9ybURhdGFTdGF0ZSwgcGF0aCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9XG4gICAgICAgICAgZm9ybVN0YXRlVmFsdWUgPT09IG51bGwgfHwgZm9ybVN0YXRlVmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBkZXBlbmRlbmN5RGVmYXVsdFZhbHVlXG4gICAgICAgICAgICA6IGZvcm1TdGF0ZVZhbHVlO1xuICAgICAgICByZXR1cm4gdmFsdWVzLnNvbWUoXG4gICAgICAgICAgdmFsID0+IGNvbnZlcnRWYWx1ZSh2YWwsIGRlcGVuZGVuY3lGaWVsZC50eXBlKSA9PT0gY3VycmVudFZhbHVlLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICog54i2IGZpZWxkIGRlcGVuZGVuY3kg5LiN5ruh6Laz5pe277yM5Y2z6ZqQ6JeP5pe277yM5pysIGZpZWxkIOS5n+W6lOW9k+makOiXj+OAglxuICAgICAgICog5Zug5Li65Zyo5aSn6YOo5YiG5oOF5b2i5LiL77yMZmllbGREZXBlbmRlbmN5IOS4jiBvbmVPZiDmkK3phY3mnaXmj4/ov7DkuIDnu4TlhbPogZTlhbPns7vvvIzlvojlsJHlj6rmnIkgYiDku4Xkvp3otZbkuo4gYe+8jOW9kyBhIOmakOiXj+WQju+8jOi/mOimgeagueaNriBhIOeahOm7mOiupOWAvOimgeaxguaYvuekuiBiIOeahOaDheWGte+8jFxuICAgICAgICog5a+55LqO6K+l5oOF5Ya177yM5Y+v5Lul5aSa5Yqg5LiA5Liq6YWN5aSH5LqG6aKd5aSWIGZpZWxkRGVwZW5kZW5jeSDnmoQgRGVzY3JpcHRvciDmnaXmj4/ov7AgYlxuICAgICAgICovXG4gICAgICByZXR1cm4gKFxuICAgICAgICBwYXJlbnRQYXRocy5ldmVyeSgoW3BhdGhdKSA9PlxuICAgICAgICAgIHRoaXMuY2hlY2tGaWVsZERlcGVuZGVuY3kodGhpcy5maWVsZHMuZmluZChpID0+IGkucGF0aCA9PT0gcGF0aCkpLFxuICAgICAgICApICYmIHN0YXRlXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBkeW5hbWljT3B0aW9ucyQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuZmllbGQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKGZpZWxkID0+IHtcbiAgICAgIGNvbnN0IGR5bmFtaWNFeHByZXNzaW9uID0gbmV3IFByb3BzRmllbGRFeHByZXNzaW9uKGZpZWxkKS5leHByZXNzaW9ucztcbiAgICAgIGlmICghZHluYW1pY0V4cHJlc3Npb24ub3B0aW9ucykge1xuICAgICAgICByZXR1cm4gb2YoXG4gICAgICAgICAgdGhpcy5nZXRTZWxlY3RPcHRpb25zKGZpZWxkKS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgIGxhYmVsOiB2YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5jcmRGb3JtLmZvcm1Db250ZXh0JCxcbiAgICAgICAgdGhpcy5mb3JtRGF0YVN0YXRlJCxcbiAgICAgIF0pLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgbikgPT5cbiAgICAgICAgICBjb21wYXJlV2l0aFN1YnNjcmliZWRQYXRocyhkeW5hbWljRXhwcmVzc2lvbiwgcCwgbiksXG4gICAgICAgICksXG4gICAgICAgIHRhcCgoW2Zvcm1Db250ZXh0LCBmb3JtRGF0YVN0YXRlXSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmNyZEZvcm0uZGVidWcpIHtcbiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlICBuby1jb25zb2xlICovXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZmllbGQ6ICcsIGZpZWxkKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdmb3JtQ29udGV4dDogJywgZm9ybUNvbnRleHQpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Zvcm1EYXRhU3RhdGU6ICcsIGZvcm1EYXRhU3RhdGUudG9KUygpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKFtmb3JtQ29udGV4dCwgZm9ybURhdGFTdGF0ZV0pID0+IHtcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgICAgY29uc3QgeyBhcGksIGxhYmVsUGF0aCwgdmFsdWVQYXRoLCBleHByZXNzaW9uIH0gPVxuICAgICAgICAgICAgZHluYW1pY0V4cHJlc3Npb24ub3B0aW9ucztcbiAgICAgICAgICBjb25zdCBzdHJpbmdFeHByZXNzaW9uQ29udGV4dCA9IHRoaXMuZ2V0U3RyaW5nRXhwcmVzc2lvbkNvbnRleHQoXG4gICAgICAgICAgICBmb3JtQ29udGV4dCxcbiAgICAgICAgICAgIGZvcm1EYXRhU3RhdGUsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWFwaSAmJiBleHByZXNzaW9uKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBldmFsSW5Db250ZXh0KGV4cHJlc3Npb24sIHN0cmluZ0V4cHJlc3Npb25Db250ZXh0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0V4cHJlc3Npb25Db250ZXh0LmZldGNoUmVzb3VyY2VMaXN0KFxuICAgICAgICAgICAgICB0ZW1wbGF0ZShhcGkpKHN0cmluZ0V4cHJlc3Npb25Db250ZXh0KSxcbiAgICAgICAgICAgICAgKGl0ZW06IFN0cmluZ01hcCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0KGl0ZW0sIHZhbHVlUGF0aCwgJycpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogZ2V0KGl0ZW0sIGxhYmVsUGF0aCwgdmFsdWUpLFxuICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGlzT2JzZXJ2YWJsZShyZXN1bHQpID8gcmVzdWx0IDogb2YocmVzdWx0KTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0pLFxuICAgIHB1Ymxpc2hSZWYoKSxcbiAgKTtcblxuICBzdGF0aWNEZWZhdWx0VmFsdWUkID0gdGhpcy5maWVsZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoZmllbGQgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlRXhwcmVzc2lvbiA9IG5ldyBQcm9wc0ZpZWxkRXhwcmVzc2lvbihmaWVsZClcbiAgICAgICAgLmV4cHJlc3Npb25zO1xuICAgICAgaWYgKFxuICAgICAgICAhZGVmYXVsdFZhbHVlRXhwcmVzc2lvbi5kZWZhdWx0IHx8XG4gICAgICAgIHRoaXMuZ2V0RmllbGRDdXJyZW50VmFsdWUoKSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRGaWVsZFZhbHVlKCksXG4gICAgICAgICAgaXNEeW5hbWljOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuY3JkRm9ybS5mb3JtQ29udGV4dCQsXG4gICAgICAgIHRoaXMuZm9ybURhdGFTdGF0ZSQsXG4gICAgICBdKS5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgbikgPT5cbiAgICAgICAgICBjb21wYXJlV2l0aFN1YnNjcmliZWRQYXRocyhkZWZhdWx0VmFsdWVFeHByZXNzaW9uLCBwLCBuKSxcbiAgICAgICAgKSxcbiAgICAgICAgbWFwKChbZm9ybUNvbnRleHQsIGZvcm1EYXRhU3RhdGVdKSA9PlxuICAgICAgICAgIHRlbXBsYXRlKGRlZmF1bHRWYWx1ZUV4cHJlc3Npb24uZGVmYXVsdCkoXG4gICAgICAgICAgICB0aGlzLmdldFN0cmluZ0V4cHJlc3Npb25Db250ZXh0KGZvcm1Db250ZXh0LCBmb3JtRGF0YVN0YXRlKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgICBtYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBpc0R5bmFtaWM6IHRydWUsXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG4gICAgfSksXG4gICAgcHVibGlzaFJlZigpLFxuICApO1xuXG4gIGR5bmFtaWNIaWRkZW5WYWx1ZSQgPSB0aGlzLmZpZWxkJC5waXBlKFxuICAgIHN3aXRjaE1hcChmaWVsZCA9PiB7XG4gICAgICBjb25zdCB7IGV4cHJlc3Npb25zIH0gPSBuZXcgUHJvcHNGaWVsZEV4cHJlc3Npb24oZmllbGQpO1xuICAgICAgaWYgKCFleHByZXNzaW9ucy5oaWRkZW4pIHtcbiAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5jcmRGb3JtLmZvcm1Db250ZXh0JCxcbiAgICAgICAgdGhpcy5mb3JtRGF0YVN0YXRlJCxcbiAgICAgIF0pLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBuKSA9PlxuICAgICAgICAgIGNvbXBhcmVXaXRoU3Vic2NyaWJlZFBhdGhzKGV4cHJlc3Npb25zLCBwLCBuKSxcbiAgICAgICAgKSxcbiAgICAgICAgbWFwKFxuICAgICAgICAgIChbZm9ybUNvbnRleHQsIGZvcm1EYXRhU3RhdGVdKSA9PlxuICAgICAgICAgICAgdGVtcGxhdGUoZXhwcmVzc2lvbnMuaGlkZGVuKShcbiAgICAgICAgICAgICAgdGhpcy5nZXRTdHJpbmdFeHByZXNzaW9uQ29udGV4dChmb3JtQ29udGV4dCwgZm9ybURhdGFTdGF0ZSksXG4gICAgICAgICAgICApID09PSAndHJ1ZScsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0pLFxuICApO1xuXG4gIGdldFN0cmluZ0V4cHJlc3Npb25Db250ZXh0ID0gKFxuICAgIGZvcm1Db250ZXh0OiBhbnksXG4gICAgZm9ybURhdGFTdGF0ZTogRm9ybURhdGFTdGF0ZSxcbiAgKSA9PiAoe1xuICAgIGZldGNoUmVzb3VyY2VMaXN0OiB0aGlzLmZldGNoUmVzb3VyY2VMaXN0LFxuICAgIGNvbnRleHQ6IGZvcm1Db250ZXh0IHx8IHt9LFxuICAgIGZvcm1EYXRhOiBmb3JtRGF0YVN0YXRlLnRvSlMoKT8uc3BlYyB8fCB7fSxcbiAgfSk7XG5cbiAgZmV0Y2hSZXNvdXJjZUxpc3QgPSAoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6IChyZXNvdXJjZTogS3ViZXJuZXRlc1Jlc291cmNlKSA9PiB2b2lkLFxuICApID0+IHtcbiAgICAvLyDkvovlpoIgJy9rdWJlcm5ldGVzL2dsb2JhbC9hcGkvdjEvbmFtZXNwYWNlcy8vc2VjcmV0cycg6KGo56S6IGZvcm1EYXRhLm5hbWVzcGFjZSDmsqHmnInmj5LlgLxcbiAgICBpZiAodXJsLmluY2x1ZGVzKCcvLycpKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cbiAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDx7IGl0ZW1zOiBLdWJlcm5ldGVzUmVzb3VyY2VbXSB9PihgJHtBUElfR0FURVdBWX0ke3VybH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzLml0ZW1zLm1hcChpdGVtID0+IGNhbGxiYWNrLmNhbGwodGhpcywgaXRlbSkpKSxcbiAgICAgICAgc2tpcEVycm9yKFtdKSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfTtcbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZFwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJ7XG4gICAgICBmaWVsZFR5cGU6IGZpZWxkIHwgcHVyZTogZ2V0RmllbGRUeXBlLFxuICAgICAgaXNCYXNpY1R5cGVGaWVsZDogZmllbGQgfCBwdXJlOiBpc0Jhc2ljVHlwZUZpZWxkLFxuICAgIH0gYXMgbWV0YVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWV0YS5pc0Jhc2ljVHlwZUZpZWxkOyBlbHNlIGFkdmFuY2VkRmlsZWRcIj5cbiAgICAgIDxhY2wtY3JkLWZvcm0taXRlbVxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICEoZmllbGQuY2FwYWJpbGl0aWVzIHwgcHVyZTogZ2V0V2lkZ2V0cykgJiZcbiAgICAgICAgICAhKGZpZWxkIHwgcHVyZTogaXNSZW1vdGVGaWVsZClcbiAgICAgICAgXCJcbiAgICAgICAgW25nU3dpdGNoXT1cIm1ldGEuZmllbGRUeXBlXCJcbiAgICAgID5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIlNwZWNDYXBhYmlsaXR5Lm51bWJlclwiXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgYXVpLWlucHV0XG4gICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICBmaWVsZC5jYXBhYmlsaXRpZXNcbiAgICAgICAgICAgICAgfCBwdXJlOiBnZXREaXNwbGF5QnlDYXBhYmlsaXR5IDogU3BlY0NhcGFiaWxpdHkucGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICBcIlxuICAgICAgICAvPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS5ib29sZWFuU3dpdGNoXCI+XG4gICAgICAgICAgPGF1aS1zd2l0Y2hcbiAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZFRlbXBsYXRlXT1cInN3aXRjaFJlYWRvbmx5XCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICA+PC9hdWktc3dpdGNoPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc3dpdGNoUmVhZG9ubHk+e3tcbiAgICAgICAgICAgIGNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgICAgfCBwdXJlOiBjb252ZXJ0Qm9vbGVhblN3aXRjaFZhbHVlIDogZmllbGQuY2FwYWJpbGl0aWVzXG4gICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgfX08L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkuc2VsZWN0XCI+XG4gICAgICAgICAgPGF1aS1tdWx0aS1zZWxlY3RcbiAgICAgICAgICAgICpuZ0lmPVwiaXNNdWx0aXBsZVwiXG4gICAgICAgICAgICBbbWF4Um93Q291bnRdPVwiM1wiXG4gICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZyQgfCBhc3luY1wiXG4gICAgICAgICAgICBbYWxsb3dDcmVhdGVdPVwiaXNBbGxvd0NyZWF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGF1aS1vcHRpb25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBkeW5hbWljT3B0aW9ucyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwib3B0aW9uLmxhYmVsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICA8L2F1aS1vcHRpb24+XG4gICAgICAgICAgICA8YXVpLW9wdGlvbi1wbGFjZWhvbGRlcj57e1xuICAgICAgICAgICAgICAnbm9fZGF0YScgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH19PC9hdWktb3B0aW9uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgIDwvYXVpLW11bHRpLXNlbGVjdD5cblxuICAgICAgICAgIDxhdWktc2VsZWN0XG4gICAgICAgICAgICAqbmdJZj1cIiFpc011bHRpcGxlXCJcbiAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFthbGxvd0NyZWF0ZV09XCJpc0FsbG93Q3JlYXRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YXVpLW9wdGlvblxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGR5bmFtaWNPcHRpb25zJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJvcHRpb24ubGFiZWwgfCBhY2xQYXJzZUpzb25UcmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfCBhY2xQYXJzZUpzb25UcmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYXVpLW9wdGlvbj5cbiAgICAgICAgICAgIDxhdWktb3B0aW9uLXBsYWNlaG9sZGVyPnt7XG4gICAgICAgICAgICAgICdub19kYXRhJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfX08L2F1aS1vcHRpb24tcGxhY2Vob2xkZXI+XG4gICAgICAgICAgPC9hdWktc2VsZWN0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGF1aS1yYWRpby1ncm91cFxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS5yYWRpb1wiXG4gICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZFRlbXBsYXRlXT1cInJhZGlvTGFiZWxcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxhdWktcmFkaW8tYnV0dG9uXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmllbGQuY2FwYWJpbGl0aWVzIHwgcHVyZTogZ2V0UmFkaW9PcHRpb25zXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IG9wdGlvbi5kaXNwbGF5IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2F1aS1yYWRpby1idXR0b24+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JhZGlvTGFiZWw+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgY29udHJvbC52YWx1ZVxuICAgICAgICAgICAgICAgICAgfCBwdXJlXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0T3B0aW9uRGlzcGxheVxuICAgICAgICAgICAgICAgICAgICA6IChmaWVsZC5jYXBhYmlsaXRpZXMgfCBwdXJlOiBnZXRSYWRpb09wdGlvbnMpXG4gICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9hdWktcmFkaW8tZ3JvdXA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlNwZWNDYXBhYmlsaXR5LnJlc291cmNlUmVxdWlyZW1lbnRzXCI+XG4gICAgICAgICAgPGFjbC1jcmQtcmVzb3VyY2UtcmVxdWlyZW1lbnRzXG4gICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRUZW1wbGF0ZV09XCJyZXNvdXJjZVJlcXVpcmVtZW50c1JlYWRvbmx5XCJcbiAgICAgICAgICA+PC9hY2wtY3JkLXJlc291cmNlLXJlcXVpcmVtZW50cz5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3Jlc291cmNlUmVxdWlyZW1lbnRzUmVhZG9ubHk+XG4gICAgICAgICAgICA8YWNsLWNyZC1yZXNvdXJjZS1yZXF1aXJlbWVudHNcbiAgICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImNvbnRyb2wudmFsdWVcIlxuICAgICAgICAgICAgICBbcmVhZE9ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICA+PC9hY2wtY3JkLXJlc291cmNlLXJlcXVpcmVtZW50cz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkueWFtbFwiPlxuICAgICAgICAgIDxhY2wtY3JkLXlhbWwtZWRpdG9yXG4gICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICAgIFthY3Rpb25zQ29uZmlnXT1cImVkaXRvckFjdGlvbnNcIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwiZWRpdG9yT3B0aW9uc1wiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkVGVtcGxhdGVdPVwieWFtbFJlYWRvbmx5XCJcbiAgICAgICAgICA+PC9hY2wtY3JkLXlhbWwtZWRpdG9yPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjeWFtbFJlYWRvbmx5PlxuICAgICAgICAgICAgPGFjbC1jcmQteWFtbC1lZGl0b3JcbiAgICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImNvbnRyb2wudmFsdWVcIlxuICAgICAgICAgICAgICBbYWN0aW9uc0NvbmZpZ109XCJ2aWV3QWN0aW9uc1wiXG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cInZpZXdPcHRpb25zXCJcbiAgICAgICAgICAgID48L2FjbC1jcmQteWFtbC1lZGl0b3I+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlNwZWNDYXBhYmlsaXR5Lms4c1Jlc291cmNlUHJlZml4XCI+XG4gICAgICAgICAgPGFjbC1jcmQtcmVzb3VyY2UtcHJlZml4XG4gICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgIFtmb3JtRXJyb3JzXT1cImNvbnRyb2wuZXJyb3JzXCJcbiAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkVGVtcGxhdGVdPVwicmVzb3VyY2VQcmVmaXhSZWFkb25seVwiXG4gICAgICAgICAgPjwvYWNsLWNyZC1yZXNvdXJjZS1wcmVmaXg+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNyZXNvdXJjZVByZWZpeFJlYWRvbmx5PlxuICAgICAgICAgICAgPGFjbC1jcmQtcmVzb3VyY2UtcHJlZml4XG4gICAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJjb250cm9sLnZhbHVlXCJcbiAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgPjwvYWNsLWNyZC1yZXNvdXJjZS1wcmVmaXg+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlNwZWNDYXBhYmlsaXR5LmJhc2ljQXV0aFNlY3JldFwiPlxuICAgICAgICAgIDxhY2wtY3JkLWJhc2ljLWF1dGgtc2VjcmV0XG4gICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICA+PC9hY2wtY3JkLWJhc2ljLWF1dGgtc2VjcmV0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIlNwZWNDYXBhYmlsaXR5LnRleHRhcmVhXCJcbiAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICBhdWktaW5wdXRcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgIGZpZWxkLmNhcGFiaWxpdGllc1xuICAgICAgICAgICAgICB8IHB1cmU6IGdldERpc3BsYXlCeUNhcGFiaWxpdHkgOiBTcGVjQ2FwYWJpbGl0eS5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgIFwiXG4gICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICA8YXVpLXRhZ3MtaW5wdXRcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkudGFnc0lucHV0XCJcbiAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICBjbGFzcz1cInR3LWZsZXgtMVwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICBmaWVsZC5jYXBhYmlsaXRpZXNcbiAgICAgICAgICAgICAgfCBwdXJlOiBnZXREaXNwbGF5QnlDYXBhYmlsaXR5IDogU3BlY0NhcGFiaWxpdHkucGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICBcIlxuICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgIFtjbGVhcmFibGVdPVwiaXNDbGVhcmFibGVcIlxuICAgICAgICA+PC9hdWktdGFncy1pbnB1dD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgIDxhY2wtY3JkLWxpbmtcbiAgICAgICAgICAgICpuZ0lmPVwiKGZpZWxkIHwgcHVyZTogaXNMaW5rKSAmJiBpc0Rpc2FibGVkOyBlbHNlIHRleHRGaWVsZFwiXG4gICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgPjwvYWNsLWNyZC1saW5rPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICN0ZXh0RmllbGQ+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICAgIGF1aS1pbnB1dFxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICBmaWVsZC5jYXBhYmlsaXRpZXNcbiAgICAgICAgICAgICAgICB8IHB1cmU6IGdldERpc3BsYXlCeUNhcGFiaWxpdHkgOiBTcGVjQ2FwYWJpbGl0eS5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvYWNsLWNyZC1mb3JtLWl0ZW0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidHctZmxleCB0dy13LWZ1bGwgdHctZmxleC1jb2xcIlxuICAgICAgICAqbmdJZj1cImZpZWxkLmNhcGFiaWxpdGllcyB8IHB1cmU6IGdldFdpZGdldHMgYXMgd2lkZ2V0XCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJ3aWRnZXQuY29tcG9uZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZCB8IHB1cmU6IGlzUmVtb3RlRmllbGRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlbW90ZU1vZHVsZSQgfCBhc3luYyBhcyByZW1vdGVNb2R1bGVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cImZpZWxkIHwgcHVyZTogZ2V0RmllbGREaXNwbGF5TmFtZSBhcyBsYWJlbDsgZWxzZSBwdXJlUmVtb3RlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YXVpLWZvcm0taXRlbSBbZW1wdHlBZGRvbl09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBhdWlGb3JtSXRlbUxhYmVsXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZCB8IHB1cmU6IGdldEZpZWxkRGlzcGxheU5hbWUgYXMgbGFiZWxcIlxuICAgICAgICAgICAgICAgID57eyBsYWJlbCB8IHRyYW5zbGF0ZSB9fTwvbGFiZWxcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nQ29tcG9uZW50T3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICByZW1vdGVNb2R1bGUuY29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgaW5qZWN0b3I6IHJlbW90ZU1vZHVsZS5pbmplY3RvclxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGRpdiBhdWlGb3JtSXRlbUhpbnQ+XG4gICAgICAgICAgICAgICAge3sgZmllbGQgfCBwdXJlOiBnZXRGaWVsZERlc2NyaXB0aW9uIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9hdWktZm9ybS1pdGVtPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcHVyZVJlbW90ZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nQ29tcG9uZW50T3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgcmVtb3RlTW9kdWxlLmNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBpbmplY3RvcjogcmVtb3RlTW9kdWxlLmluamVjdG9yXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXJcbiAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2FkdmFuY2VkRmlsZWQ+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgbWV0YS5maWVsZFR5cGUgPT09IFNwZWNDYXBhYmlsaXR5LnBhc3N3b3JkIHx8XG4gICAgICAgICAgbWV0YS5maWVsZFR5cGUgPT09IFNwZWNDYXBhYmlsaXR5LmNvbmZpcm1QYXNzd29yZCB8fFxuICAgICAgICAgIG1ldGEuZmllbGRUeXBlID09PSBTcGVjQ2FwYWJpbGl0eS5leHRlcm5hbFBhc3N3b3JkXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxhY2wtY3JkLWZvcm0taXRlbVxuICAgICAgICAgICpuZ0lmPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgW3BsYWluXT1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhc3N3b3JkVmlld1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2FjbC1jcmQtZm9ybS1pdGVtPlxuICAgICAgICA8YWNsLXBhc3N3b3JkLWlucHV0XG4gICAgICAgICAgKm5nSWY9XCIhaXNEaXNhYmxlZFwiXG4gICAgICAgICAgW2luaXRQYXNzd29yZF09XCJjb250cm9sLnZhbHVlXCJcbiAgICAgICAgICBbbGFiZWxdPVwiZmllbGQgfCBwdXJlOiBnZXRGaWVsZERpc3BsYXlOYW1lIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbaGludF09XCJmaWVsZCB8IHB1cmU6IGdldEZpZWxkRGVzY3JpcHRpb24gfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cImNyZEZvcm0ucmVhZG9ubHlcIlxuICAgICAgICAgIFtpc1VwZGF0ZV09XCIhIWNvbnRyb2wudmFsdWUgJiYgIWNvbnRyb2wuZGlydHlcIlxuICAgICAgICAgIFtzdHJvbmdQYXNzd29yZF09XCJtZXRhLmZpZWxkVHlwZSAhPT0gU3BlY0NhcGFiaWxpdHkuZXh0ZXJuYWxQYXNzd29yZFwiXG4gICAgICAgICAgW2VuYWJsZUNvbmZpcm1dPVwibWV0YS5maWVsZFR5cGUgPT09IFNwZWNDYXBhYmlsaXR5LmNvbmZpcm1QYXNzd29yZFwiXG4gICAgICAgICAgd2lkdGg9XCJsYXJnZVwiXG4gICAgICAgICAgW2VuY29kaW5nXT1cImZpZWxkIHwgcHVyZTogZ2V0RW5jb2RpbmcgOiAncGFzc3dvcmQnXCJcbiAgICAgICAgICBbcGF0dGVybl09XCJmaWVsZC52YWxpZGF0aW9ucz8ucGF0dGVyblwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgZmllbGQuY2FwYWJpbGl0aWVzXG4gICAgICAgICAgICAgIHwgcHVyZTogZ2V0RGlzcGxheUJ5Q2FwYWJpbGl0eSA6IFNwZWNDYXBhYmlsaXR5LnBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvYWNsLXBhc3N3b3JkLWlucHV0PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8IS0tIGdyb3VwIGZpZWxkICAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0dyb3VwRmllbGQoZmllbGQpICYmIGZpZWxkLmZpZWxkTGlzdD8ubGVuZ3RoID4gMFwiPlxuICAgICAgICA8YWNsLW9wZXJhbmQtZmllbGQtZ3JvdXBcbiAgICAgICAgICBbZmllbGRzXT1cImZpZWxkc1wiXG4gICAgICAgICAgW2ZpZWxkR3JvdXBdPVwiZmllbGRcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICBbZm9ybURhdGFTdGF0ZV09XCJmb3JtRGF0YVN0YXRlXCJcbiAgICAgICAgICBbZm9ybUVycm9yc109XCJmb3JtRXJyb3JzXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwidmFsdWVDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2FjbC1vcGVyYW5kLWZpZWxkLWdyb3VwPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8IS0tIGFycmF5IGZpZWxkIGdyb3VwcyAtLT5cbiAgICAgIDwhLS0gYXJyYXkgZmllbGQgdGFibGUgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNBcnJheUZpZWxkKGZpZWxkKVwiPlxuICAgICAgICA8YWNsLWNyZC1hcnJheS10YWJsZVxuICAgICAgICAgICpuZ0lmPVwiZmllbGQgfCBwdXJlOiBpc0FycmF5RmllbGRUYWJsZTsgZWxzZSBkZWZhdWx0QXJyYXlGaWxlZFwiXG4gICAgICAgICAgW2FycmF5RmllbGRHcm91cF09XCJmaWVsZFwiXG4gICAgICAgICAgW2Zvcm1EYXRhU3RhdGVdPVwiZm9ybURhdGFTdGF0ZVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJ2YWx1ZUNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvYWNsLWNyZC1hcnJheS10YWJsZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0QXJyYXlGaWxlZD5cbiAgICAgICAgICA8YWNsLW9wZXJhbmQtYXJyYXktZmllbGQtZ3JvdXBcbiAgICAgICAgICAgIFthcnJheUZpZWxkR3JvdXBdPVwiZmllbGRcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2Zvcm1EYXRhU3RhdGVdPVwiZm9ybURhdGFTdGF0ZVwiXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwidmFsdWVDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9hY2wtb3BlcmFuZC1hcnJheS1maWVsZC1ncm91cD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjcGFzc3dvcmRWaWV3PlxuICB7eyBQQVNTV09SRF9SRVZFQUwgfX1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
877
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmFuZC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyZC1mb3JtL3NyYy9saWIvZmllbGQtY29udHJvbHMvb3BlcmFuZC1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyZC1mb3JtL3NyYy9saWIvZmllbGQtY29udHJvbHMvb3BlcmFuZC1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxhQUFhLEVBRWIsT0FBTyxFQUVQLGVBQWUsRUFDZixVQUFVLEVBQ1YsU0FBUyxFQUNULGtCQUFrQixFQUdsQixXQUFXLEVBQ1gsZUFBZSxFQUNmLGdCQUFnQixHQUNqQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxRQUFRLEVBQ1IsS0FBSyxFQUlMLE1BQU07QUFFTiwyQkFBMkI7QUFDM0IsZUFBZSxJQUFJLGNBQWMsR0FDbEMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsR0FBRyxFQUNILE1BQU0sRUFDTixVQUFVLEVBQ1YsT0FBTyxFQUNQLFlBQVks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SUFEQyxlQUFlLEVBQUU7OEJBQ0QsVUFBVTs2REFBZ0I7aUZBakRoQyxxQkFBcUI7Y0FOakMsU0FBUzsyQkFDRSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTTtpSUFNL0MsS0FBSztrQkFESixLQUFLO1lBSU4sTUFBTSxNQUdOLHNCQUFzQjtrQkFEckIsS0FBSztZQUlOLHVCQUF1QixNQUd2QixRQUFRO2tCQURQLEtBQUs7WUErQkcsTUFBTTtrQkFBZCxLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQUVOLGNBQWMsTUFFTCxVQUFVO2tCQUFsQixLQUFLO1lBRUksV0FBVztrQkFBcEIsTUFBTTtZQUNHLFVBQVU7a0JBQW5CLE1BQU07WUFJSCxRQUFRO2tCQURYLFdBQVc7bUJBQUMsUUFBUTs7a0ZBekRWLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFQSV9HQVRFV0FZLFxuICBjcmVhdGVBY3Rpb25zLFxuICBFbmNvZGluZyxcbiAgaXNFcXVhbCxcbiAgS3ViZXJuZXRlc1Jlc291cmNlLFxuICBPYnNlcnZhYmxlSW5wdXQsXG4gIHB1Ymxpc2hSZWYsXG4gIHNraXBFcnJvcixcbiAgc3RhcnRXaXRoQ29uZGl0aW9uLFxuICBTdHJpbmdNYXAsXG4gIFRyYW5zbGF0aW9uLFxuICB2aWV3QWN0aW9ucyxcbiAgeWFtbFJlYWRPcHRpb25zLFxuICB5YW1sV3JpdGVPcHRpb25zLFxufSBmcm9tICdAYWxhdWRhLWZlL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICAvLyBjc3BlbGw6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgybVjcmVhdGVJbmplY3RvciBhcyBjcmVhdGVJbmplY3Rvcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWNvZGUsIGVuY29kZSB9IGZyb20gJ2FiNjQnO1xuaW1wb3J0IHsgaXNJbW11dGFibGUgfSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHsgZ2V0LCBpZGVudGl0eSwgbWFwIGFzICRtYXAsIHRlbXBsYXRlIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgZmlsdGVyLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBzaGFyZVJlcGxheSxcbiAgdGFrZVVudGlsLFxuICBCZWhhdmlvclN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgb2YsXG4gIGZpbmFsaXplLFxuICBpc09ic2VydmFibGUsXG4gIHRha2UsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENyZEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9jcmQtZm9ybS9jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVtb3RlV2lkZ2V0TW9kdWxlRGVmaW5pdGlvbiB9IGZyb20gJy4uL3JlbW90ZS13aWRnZXRzJztcbmltcG9ydCB7XG4gIEZpZWxkVmFsdWVDaGFuZ2VFdmVudCxcbiAgRm9ybURhdGFTdGF0ZSxcbiAgRm9ybUVycm9ycyxcbiAgT3BlcmFuZEZpZWxkLFxuICBTcGVjQ2FwYWJpbGl0eSxcbiAgVmFsaWRhdGlvbnMsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7XG4gIGNvbnZlcnRCb29sZWFuU3dpdGNoVmFsdWUsXG4gIGNvbnZlcnRWYWx1ZSxcbiAgZ2V0RGVmYXVsdFZhbHVlLFxuICBnZXRGaWVsZERlc2NyaXB0aW9uLFxuICBnZXRGaWVsZERpc3BsYXlOYW1lLFxuICBnZXRGaWVsZFBsYWNlaG9sZGVyLFxuICBnZXRGaWVsZFR5cGUsXG4gIGdldEZvcm1EYXRhLFxuICBnZXRSYWRpb09wdGlvbnMsXG4gIG5vcm1hbGl6ZVBhdGgsXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7XG4gIGlzQXJyYXlGaWVsZCxcbiAgaXNBcnJheUZpZWxkVGFibGUsXG4gIGlzQ2xlYXJhYmxlLFxuICBpc0NyZWF0YWJsZSxcbiAgaXNHcm91cEZpZWxkLFxuICBpc011bHRpcGxlLFxuICBpc0FsbG93Q3JlYXRlLFxuICBpc1JlbW90ZUZpZWxkLFxuICBpc1JlcXVpcmVkLFxuICBldmFsSW5Db250ZXh0LFxuICBnZXRPcGVyYW5kUGF0aCxcbn0gZnJvbSAnLi4vdXRpbHMvaGVscGVyJztcblxuaW1wb3J0IHtcbiAgY29tcGFyZVdpdGhTdWJzY3JpYmVkUGF0aHMsXG4gIFByb3BzRmllbGRFeHByZXNzaW9uLFxufSBmcm9tICcuL2V4cHJlc3Npb25zL3Byb3BzLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgaXNMaW5rIH0gZnJvbSAnLi93aWRnZXRzL2xpbmsvY29tcG9uZW50JztcblxuZXhwb3J0IGNvbnN0IFBBU1NXT1JEX1JFVkVBTCA9ICcqKioqKionO1xuXG5jb25zdCBFTkNPRElOR19NQVBQRVI6IFJlY29yZDxzdHJpbmcsIEVuY29kaW5nPiA9IHtcbiAgYmFzZTY0OiB7XG4gICAgZGVjb2RlLFxuICAgIGVuY29kZSxcbiAgfSxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjbC1vcGVyYW5kLWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICdvcGVyYW5kLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ29wZXJhbmQtZmllbGQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE9wZXJhbmRGaWVsZENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXRcbntcbiAgQElucHV0KClcbiAgZmllbGQ6IE9wZXJhbmRGaWVsZDtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgZmllbGQkITogT2JzZXJ2YWJsZTxPcGVyYW5kRmllbGQ+O1xuXG4gIEBJbnB1dCgpXG4gIHJlbW90ZU1vZHVsZURlZmluaXRpb246IFJlbW90ZVdpZGdldE1vZHVsZURlZmluaXRpb247XG5cbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIHJlbW90ZU1vZHVsZURlZmluaXRpb24kITogT2JzZXJ2YWJsZTxSZW1vdGVXaWRnZXRNb2R1bGVEZWZpbml0aW9uPjtcblxuICBASW5wdXQoKVxuICByZWFkb25seSA9IGZhbHNlO1xuXG4gIGdldCBpc0Rpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZmllbGQ/LmRpc2FibGVkO1xuICB9XG5cbiAgZ2V0IGVmZmVjdENvbnRyb2xEZWZhdWx0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JkRm9ybS5lZmZlY3RDb250cm9sRGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgZ2V0IGlzUmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIGlzUmVxdWlyZWQodGhpcy5maWVsZCk7XG4gIH1cblxuICBnZXQgaXNDcmVhdGFibGUoKSB7XG4gICAgcmV0dXJuIGlzQ3JlYXRhYmxlKHRoaXMuZmllbGQpO1xuICB9XG5cbiAgZ2V0IGlzTXVsdGlwbGUoKSB7XG4gICAgcmV0dXJuIGlzTXVsdGlwbGUodGhpcy5maWVsZCk7XG4gIH1cblxuICBnZXQgaXNBbGxvd0NyZWF0ZSgpIHtcbiAgICByZXR1cm4gaXNBbGxvd0NyZWF0ZSh0aGlzLmZpZWxkKTtcbiAgfVxuXG4gIGdldCBpc0NsZWFyYWJsZSgpIHtcbiAgICByZXR1cm4gaXNDbGVhcmFibGUodGhpcy5maWVsZCk7XG4gIH1cblxuICBASW5wdXQoKSBmaWVsZHM6IE9wZXJhbmRGaWVsZFtdO1xuICBASW5wdXQoKSBmb3JtRGF0YVN0YXRlOiBGb3JtRGF0YVN0YXRlO1xuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgZm9ybURhdGFTdGF0ZSQhOiBPYnNlcnZhYmxlPEZvcm1EYXRhU3RhdGU+O1xuXG4gIEBJbnB1dCgpIGZvcm1FcnJvcnM6IEZvcm1FcnJvcnM7XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWVsZFZhbHVlQ2hhbmdlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBpdGVtUmVtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIOmAmui/h2hpZGRlbuWxnuaAp+makOiXj+S4jeW/heimgeeahOWFg+e0oO+8jOWSjCBhY2xTY3JvbGxUb0ZpcnN0SW52YWxpZCDmjIfku6Tov4fmu6TpmpDol4/lhYPntKDkv53mjIHkuIDoh7RcbiAgQEhvc3RCaW5kaW5nKCdoaWRkZW4nKVxuICBnZXQgaXNIaWRkZW4oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmhhc0ZpZWxkRGVwZW5kZW5jeSgpICYmICF0aGlzLmNoZWNrRmllbGREZXBlbmRlbmN5KHRoaXMuZmllbGQpKSB8fFxuICAgICAgdGhpcy5faGlkZGVuXG4gICAgKTtcbiAgfVxuXG4gIHNldCBpc0hpZGRlbihoaWRkZW4pIHtcbiAgICB0aGlzLl9oaWRkZW4gPSBoaWRkZW47XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIF9oaWRkZW46IGJvb2xlYW47XG4gIGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZ2V0RmllbGRUeXBlID0gZ2V0RmllbGRUeXBlO1xuICBpc0xpbmsgPSBpc0xpbms7XG5cbiAgU3BlY0NhcGFiaWxpdHkgPSBTcGVjQ2FwYWJpbGl0eTtcblxuICBnZXRGaWVsZERpc3BsYXlOYW1lID0gZ2V0RmllbGREaXNwbGF5TmFtZTtcbiAgZ2V0RmllbGREZXNjcmlwdGlvbiA9IGdldEZpZWxkRGVzY3JpcHRpb247XG4gIGdldEZpZWxkUGxhY2Vob2xkZXIgPSBnZXRGaWVsZFBsYWNlaG9sZGVyO1xuICBnZXRSYWRpb09wdGlvbnMgPSBnZXRSYWRpb09wdGlvbnM7XG5cbiAgZWRpdG9yT3B0aW9ucyA9IHlhbWxXcml0ZU9wdGlvbnM7XG4gIGVkaXRvckFjdGlvbnMgPSBjcmVhdGVBY3Rpb25zO1xuXG4gIGlzR3JvdXBGaWVsZCA9IGlzR3JvdXBGaWVsZDtcbiAgaXNBcnJheUZpZWxkID0gaXNBcnJheUZpZWxkO1xuICBpc1JlbW90ZUZpZWxkID0gaXNSZW1vdGVGaWVsZDtcbiAgaXNBcnJheUZpZWxkVGFibGUgPSBpc0FycmF5RmllbGRUYWJsZTtcbiAgY29udmVydEJvb2xlYW5Td2l0Y2hWYWx1ZSA9IGNvbnZlcnRCb29sZWFuU3dpdGNoVmFsdWU7XG4gIGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgZ2V0IGlzQ3VzdG9tRXJyb3JzTWFwcGVyKCkge1xuICAgIHJldHVybiBnZXRGaWVsZFR5cGUodGhpcy5maWVsZCkgPT09IFNwZWNDYXBhYmlsaXR5LnJlc291cmNlUmVxdWlyZW1lbnRzO1xuICB9XG5cbiAgUEFTU1dPUkRfUkVWRUFMID0gUEFTU1dPUkRfUkVWRUFMO1xuXG4gIGlzQmFzaWNUeXBlRmllbGQgPSAoZmlsZWQ6IE9wZXJhbmRGaWVsZCkgPT5cbiAgICAhW1xuICAgICAgU3BlY0NhcGFiaWxpdHkub2JqZWN0LFxuICAgICAgU3BlY0NhcGFiaWxpdHkuYXJyYXksXG4gICAgICBTcGVjQ2FwYWJpbGl0eS5wYXNzd29yZCxcbiAgICAgIFNwZWNDYXBhYmlsaXR5LmNvbmZpcm1QYXNzd29yZCxcbiAgICAgIFNwZWNDYXBhYmlsaXR5LmV4dGVybmFsUGFzc3dvcmQsXG4gICAgXS5pbmNsdWRlcyhnZXRGaWVsZFR5cGUoZmlsZWQpKTtcblxuICB2aWV3QWN0aW9ucyA9IHZpZXdBY3Rpb25zO1xuICB2aWV3T3B0aW9ucyA9IHlhbWxSZWFkT3B0aW9ucztcblxuICBwcml2YXRlIF92YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdO1xuXG4gIHJlbW90ZU1vZHVsZSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmZpZWxkJCxcbiAgICB0aGlzLnJlbW90ZU1vZHVsZURlZmluaXRpb24kLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2ZpZWxkLCByZW1vdGVNb2R1bGVEZWZpbml0aW9uXSkgPT4ge1xuICAgICAgY29uc3QgcmVtb3RlV2lkZ2V0ID0gdGhpcy5nZXRSZW1vdGVXaWRnZXQoZmllbGQsIHJlbW90ZU1vZHVsZURlZmluaXRpb24pO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcmVtb3RlV2lkZ2V0ICYmIHtcbiAgICAgICAgICBpbmplY3RvcjogY3JlYXRlSW5qZWN0b3IoXG4gICAgICAgICAgICByZW1vdGVNb2R1bGVEZWZpbml0aW9uLm1vZHVsZSxcbiAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBtb2R1bGU6IHJlbW90ZU1vZHVsZURlZmluaXRpb24ubW9kdWxlLFxuICAgICAgICAgIGNvbXBvbmVudDogcmVtb3RlV2lkZ2V0LmNvbXBvbmVudCxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KSxcbiAgICBmaWx0ZXIoQm9vbGVhbiksXG4gICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXG4gICAgc2hhcmVSZXBsYXkoMSksXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGNyZEZvcm06IENyZEZvcm1Db21wb25lbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuXG4gIHJlZ2lzdGVyQ29udHJvbCgpIHtcbiAgICB0aGlzLmNyZEZvcm0uY29udHJvbE1hcC5zZXQoZ2V0T3BlcmFuZFBhdGgodGhpcy5maWVsZCksIHRoaXMuY29udHJvbCk7XG4gIH1cblxuICB1blJlZ2lzdGVyQ29udHJvbCgpIHtcbiAgICB0aGlzLmNyZEZvcm0uY29udHJvbE1hcC5kZWxldGUoZ2V0T3BlcmFuZFBhdGgodGhpcy5maWVsZCkpO1xuICB9XG5cbiAgZ2V0V2lkZ2V0cyA9IChjYXBhYmlsaXRpZXM6IFNwZWNDYXBhYmlsaXR5W10pID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gY2FwYWJpbGl0aWVzLmZpbmQoYyA9PlxuICAgICAgYy5zdGFydHNXaXRoKFNwZWNDYXBhYmlsaXR5LndpZGdldHMpLFxuICAgICk7XG4gICAgcmV0dXJuIGRlc2NyaXB0b3JcbiAgICAgID8gdGhpcy5jcmRGb3JtLndpZGdldHM/LmZpbmQoXG4gICAgICAgICAgdyA9PiB3LmRlc2NyaXB0b3IgPT09IGRlc2NyaXB0b3Iuc3BsaXQoJz89JylbMF0sXG4gICAgICAgIClcbiAgICAgIDogbnVsbDtcbiAgfTtcblxuICBnZXRSZW1vdGVXaWRnZXQoXG4gICAgZmllbGQ6IE9wZXJhbmRGaWVsZCxcbiAgICByZW1vdGVEZWZpbml0aW9uOiBSZW1vdGVXaWRnZXRNb2R1bGVEZWZpbml0aW9uLFxuICApIHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gZmllbGQuY2FwYWJpbGl0aWVzLmZpbmQoYyA9PlxuICAgICAgYy5zdGFydHNXaXRoKFNwZWNDYXBhYmlsaXR5LnJlbW90ZSksXG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgZGVzY3JpcHRvciAmJlxuICAgICAgcmVtb3RlRGVmaW5pdGlvbj8uY29tcG9uZW50cz8uZmluZChcbiAgICAgICAgdyA9PiB3LmRlc2NyaXB0b3IgPT09IGRlc2NyaXB0b3Iuc3BsaXQoJz89JylbMF0sXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZHluYW1pY0hpZGRlblZhbHVlJC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5pc0hpZGRlbiA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJDb250cm9sKCk7XG4gICAgaWYgKHRoaXMuZmllbGQudmFsaWRhdGlvbnMpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSAkbWFwKHRoaXMuZmllbGQudmFsaWRhdGlvbnMsICh2YWwsIHJ1bGUpID0+IHtcbiAgICAgICAgc3dpdGNoIChydWxlKSB7XG4gICAgICAgICAgY2FzZSBWYWxpZGF0aW9ucy5tYXhpbXVtOiB7XG4gICAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5tYXgodmFsIGFzIG51bWJlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbnMubWluaW11bToge1xuICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMubWluKHZhbCBhcyBudW1iZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFZhbGlkYXRpb25zLnJlcXVpcmVkOiB7XG4gICAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5yZXF1aXJlZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBWYWxpZGF0aW9ucy5tYXhMZW5ndGg6IHtcbiAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLm1heExlbmd0aCh2YWwgYXMgbnVtYmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBWYWxpZGF0aW9ucy5taW5MZW5ndGg6IHtcbiAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLm1pbkxlbmd0aCh2YWwgYXMgbnVtYmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBWYWxpZGF0aW9ucy5wYXR0ZXJuOiB7XG4gICAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5wYXR0ZXJuKHZhbCBhcyBzdHJpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLmZpbHRlcih2ID0+ICEhdik7XG4gICAgICBpZiAodmFsaWRhdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5jb250cm9sLmFkZFZhbGlkYXRvcnMoKHRoaXMuX3ZhbGlkYXRvcnMgPSB2YWxpZGF0b3JzKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8g5bCGIHZhbHVlQ2hhbmdlcyDnmoTpgLvovpHnp7vliqjliLAgbmdBZnRlclZpZXdJbml0IOS4re+8jOS4u+imgeaYr+S4uuS6humBv+WFjeWFqOWxgCBWYWxpZGF0b3JzRGlyZWN0aXZl5bim5p2l55qE5b2x5ZON77yM6ZyA6KaB562J5YiwVmFsaWRhdG9yc0RpcmVjdGl2ZeeahG5nQWZ0ZXJWaWV3SW5pdOS5i+WQjuWGjeiuoumYhWNvbnRyb2znmoR2YWx1ZUNoYW5nZXNcbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGhDb25kaXRpb24odGhpcy5lZmZlY3RDb250cm9sRGVmYXVsdFZhbHVlLCB0aGlzLmNvbnRyb2wudmFsdWUpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSxcbiAgICAgICAgZmlsdGVyKHYgPT5cbiAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBoYWNrLiB5YW1sIHZhbHVlIHdpbGwgb25seSBiZSBudWxsIGlmIGZvcm1hdCBlcnJvcihiZWNhdXNlIHRyeS1jYXRjaCksIHRoZSBkYXRhIGZsb3cgbm93IGlzIGZyb20gY29udHJvbCA9PiBmb3JtRGF0YVN0YXRlID0+IGNvbnRyb2wod2lsbCBqdWRnZSBlcXVhbGl0eSnvvIx0aGlzIHdpbGwgbWFrZSBjb250cm9sIGJlIGVtcHR5XG4gICAgICAgICAgZ2V0RmllbGRUeXBlKHRoaXMuZmllbGQpID09PSBTcGVjQ2FwYWJpbGl0eS55YW1sID8gdiAhPT0gbnVsbCA6IHRydWUsXG4gICAgICAgICksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICBmaWVsZDogdGhpcy5maWVsZCxcbiAgICAgICAgICBkYXRhOiB2YWx1ZSxcbiAgICAgICAgICBlcnJvcnM6IHRoaXMuY29udHJvbC5lcnJvcnMsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9uRGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMudW5SZWdpc3RlckNvbnRyb2woKTtcbiAgICBpZiAodGhpcy5fdmFsaWRhdG9ycz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbnRyb2wucmVtb3ZlVmFsaWRhdG9ycyh0aGlzLl92YWxpZGF0b3JzKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyh7IGZvcm1EYXRhU3RhdGUgfTogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICh0aGlzLmZpZWxkICYmIGZvcm1EYXRhU3RhdGU/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnN0YXRpY0RlZmF1bHRWYWx1ZSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICBmaWx0ZXIoKHsgdmFsdWUgfSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoeyB2YWx1ZSwgaXNEeW5hbWljIH0pID0+IHtcbiAgICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBpc0R5bmFtaWMgfSk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZm9ybURhdGFTdGF0ZT8uY3VycmVudFZhbHVlKSB7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBnZXRGb3JtRGF0YShcbiAgICAgICAgZm9ybURhdGFTdGF0ZS5jdXJyZW50VmFsdWUgYXMgRm9ybURhdGFTdGF0ZSxcbiAgICAgICAgdGhpcy5maWVsZC5wYXRoLFxuICAgICAgICBmYWxzZSxcbiAgICAgICk7XG4gICAgICBjb25zdCBwcmV2VmFsdWUgPSBnZXRGb3JtRGF0YShcbiAgICAgICAgZm9ybURhdGFTdGF0ZS5wcmV2aW91c1ZhbHVlIGFzIEZvcm1EYXRhU3RhdGUsXG4gICAgICAgIHRoaXMuZmllbGQucGF0aCxcbiAgICAgICAgZmFsc2UsXG4gICAgICApO1xuICAgICAgY29uc3QgcmF3VmFsdWUgPSBpc0ltbXV0YWJsZShjdXJyZW50VmFsdWUpXG4gICAgICAgID8gY3VycmVudFZhbHVlLnRvSlMoKVxuICAgICAgICA6IGN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmIChcbiAgICAgICAgIWlzRXF1YWwocmF3VmFsdWUsIHByZXZWYWx1ZSkgJiZcbiAgICAgICAgIWlzRXF1YWwocmF3VmFsdWUsIHRoaXMuY29udHJvbC52YWx1ZSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUocmF3VmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEZpZWxkQ3VycmVudFZhbHVlKCkge1xuICAgIGxldCB2YWx1ZSA9IGdldEZvcm1EYXRhKHRoaXMuZm9ybURhdGFTdGF0ZSwgdGhpcy5maWVsZC5wYXRoLCBmYWxzZSk7XG5cbiAgICAvLyDlpoLmnpzlgLzmmK8gSW1tdXRhYmxlIG9iamVjdCDnsbvlnovvvIzpnIDopoHovazmiJDljp/lp4sgSlMgT2JqZWN0XG4gICAgaWYgKGlzSW1tdXRhYmxlKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b0pTKCkgYXMgRm9ybURhdGFTdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZ2V0RmllbGRWYWx1ZSh1c2VEZWZhdWx0ID0gdHJ1ZSkge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRDdXJyZW50VmFsdWUoKTtcblxuICAgIGlmIChjdXJyZW50VmFsdWUgPT09IHVuZGVmaW5lZCAmJiB1c2VEZWZhdWx0KSB7XG4gICAgICByZXR1cm4gZ2V0RGVmYXVsdFZhbHVlKHRoaXMuZmllbGQpO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICB9XG5cbiAgZ2V0T3B0aW9uRGlzcGxheShcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEFycmF5PHsgdmFsdWU6IHN0cmluZzsgZGlzcGxheTogVHJhbnNsYXRpb24gfT4sXG4gICkge1xuICAgIHJldHVybiBvcHRpb25zLmZpbmQoaXRlbSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSk/LmRpc3BsYXk7XG4gIH1cblxuICBnZXRTZWxlY3RPcHRpb25zKGZpZWxkOiBPcGVyYW5kRmllbGQpIHtcbiAgICByZXR1cm4gZmllbGQuY2FwYWJpbGl0aWVzXG4gICAgICAuZmlsdGVyKGMgPT4gYy5zdGFydHNXaXRoKFNwZWNDYXBhYmlsaXR5LnNlbGVjdCkpXG4gICAgICAubWFwKGMgPT4gYy5zcGxpdChTcGVjQ2FwYWJpbGl0eS5zZWxlY3QpPy5bMV0pO1xuICB9XG5cbiAgZ2V0RW5jb2RpbmcoZmllbGQ6IE9wZXJhbmRGaWVsZCwgdHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJlZml4ID0gYHVybjphbG06ZGVzY3JpcHRvcjoke3R5cGV9OmVuY29kaW5nOmA7XG4gICAgY29uc3QgY2FwYWJpbGl0eSA9IGZpZWxkLmNhcGFiaWxpdGllcy5maW5kKGl0ID0+IGl0LnN0YXJ0c1dpdGgocHJlZml4KSk7XG4gICAgbGV0IGVuY29kaW5nOiBFbmNvZGluZztcbiAgICBpZiAoY2FwYWJpbGl0eSkge1xuICAgICAgZW5jb2RpbmcgPSBFTkNPRElOR19NQVBQRVJbY2FwYWJpbGl0eS5zbGljZShwcmVmaXgubGVuZ3RoKV07XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBlbmNvZGluZyB8fCB7XG4gICAgICAgIGVuY29kZTogaWRlbnRpdHksXG4gICAgICAgIGRlY29kZTogaWRlbnRpdHksXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzRmllbGREZXBlbmRlbmN5KCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLmNhcGFiaWxpdGllcy5zb21lKGMgPT5cbiAgICAgIGMuc3RhcnRzV2l0aChTcGVjQ2FwYWJpbGl0eS5maWVsZERlcGVuZGVuY3kpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRmllbGREZXBlbmRlbmN5KGZpZWxkOiBPcGVyYW5kRmllbGQpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gZmllbGQ/LmNhcGFiaWxpdGllc1xuICAgICAgICAuZmlsdGVyKGMgPT4gYy5zdGFydHNXaXRoKFNwZWNDYXBhYmlsaXR5LmZpZWxkRGVwZW5kZW5jeSkpXG4gICAgICAgIC5tYXAoaSA9PiBpLnNwbGl0KFNwZWNDYXBhYmlsaXR5LmZpZWxkRGVwZW5kZW5jeSlbMV0pO1xuICAgICAgaWYgKCFkZXBlbmRlbmNpZXM/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcmVudFBhdGhzID0gZGVwZW5kZW5jaWVzLm1hcChkID0+IGQuc3BsaXQoJzonKSk7XG4gICAgICBjb25zdCBzdGF0ZSA9IHBhcmVudFBhdGhzLmV2ZXJ5KChbcGF0aCwgLi4udmFsdWVzXSkgPT4ge1xuICAgICAgICAvLyBTdXBwb3J0IGRlcGVuZCBvbmUgb2YgdmFsdWVzXG4gICAgICAgIGNvbnN0IGRlcGVuZGVuY3lGaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoXG4gICAgICAgICAgZiA9PiBmLnBhdGggPT09IG5vcm1hbGl6ZVBhdGgocGF0aCksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGRlcGVuZGVuY3lEZWZhdWx0VmFsdWUgPSBnZXREZWZhdWx0VmFsdWUoZGVwZW5kZW5jeUZpZWxkKTtcbiAgICAgICAgY29uc3QgZm9ybVN0YXRlVmFsdWUgPSBnZXRGb3JtRGF0YSh0aGlzLmZvcm1EYXRhU3RhdGUsIHBhdGgpO1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPVxuICAgICAgICAgIGZvcm1TdGF0ZVZhbHVlID09PSBudWxsIHx8IGZvcm1TdGF0ZVZhbHVlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZGVwZW5kZW5jeURlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgOiBmb3JtU3RhdGVWYWx1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5zb21lKFxuICAgICAgICAgIHZhbCA9PiBjb252ZXJ0VmFsdWUodmFsLCBkZXBlbmRlbmN5RmllbGQudHlwZSkgPT09IGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICAvKipcbiAgICAgICAqIOeItiBmaWVsZCBkZXBlbmRlbmN5IOS4jea7oei2s+aXtu+8jOWNs+makOiXj+aXtu+8jOacrCBmaWVsZCDkuZ/lupTlvZPpmpDol4/jgIJcbiAgICAgICAqIOWboOS4uuWcqOWkp+mDqOWIhuaDheW9ouS4i++8jGZpZWxkRGVwZW5kZW5jeSDkuI4gb25lT2Yg5pCt6YWN5p2l5o+P6L+w5LiA57uE5YWz6IGU5YWz57O777yM5b6I5bCR5Y+q5pyJIGIg5LuF5L6d6LWW5LqOIGHvvIzlvZMgYSDpmpDol4/lkI7vvIzov5jopoHmoLnmja4gYSDnmoTpu5jorqTlgLzopoHmsYLmmL7npLogYiDnmoTmg4XlhrXvvIxcbiAgICAgICAqIOWvueS6juivpeaDheWGte+8jOWPr+S7peWkmuWKoOS4gOS4qumFjeWkh+S6humineWkliBmaWVsZERlcGVuZGVuY3kg55qEIERlc2NyaXB0b3Ig5p2l5o+P6L+wIGJcbiAgICAgICAqL1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcGFyZW50UGF0aHMuZXZlcnkoKFtwYXRoXSkgPT5cbiAgICAgICAgICB0aGlzLmNoZWNrRmllbGREZXBlbmRlbmN5KHRoaXMuZmllbGRzLmZpbmQoaSA9PiBpLnBhdGggPT09IHBhdGgpKSxcbiAgICAgICAgKSAmJiBzdGF0ZVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZHluYW1pY09wdGlvbnMkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLmZpZWxkJC5waXBlKFxuICAgIHN3aXRjaE1hcChmaWVsZCA9PiB7XG4gICAgICBjb25zdCBkeW5hbWljRXhwcmVzc2lvbiA9IG5ldyBQcm9wc0ZpZWxkRXhwcmVzc2lvbihmaWVsZCkuZXhwcmVzc2lvbnM7XG4gICAgICBpZiAoIWR5bmFtaWNFeHByZXNzaW9uLm9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG9mKFxuICAgICAgICAgIHRoaXMuZ2V0U2VsZWN0T3B0aW9ucyhmaWVsZCkubWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgICBsYWJlbDogdmFsdWUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICB9KSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuY3JkRm9ybS5mb3JtQ29udGV4dCQsXG4gICAgICAgIHRoaXMuZm9ybURhdGFTdGF0ZSQsXG4gICAgICBdKS5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIG4pID0+XG4gICAgICAgICAgY29tcGFyZVdpdGhTdWJzY3JpYmVkUGF0aHMoZHluYW1pY0V4cHJlc3Npb24sIHAsIG4pLFxuICAgICAgICApLFxuICAgICAgICB0YXAoKFtmb3JtQ29udGV4dCwgZm9ybURhdGFTdGF0ZV0pID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jcmRGb3JtLmRlYnVnKSB7XG4gICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAgbm8tY29uc29sZSAqL1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICdmaWVsZDogJyxcbiAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICdmb3JtQ29udGV4dDogJyxcbiAgICAgICAgICAgICAgZm9ybUNvbnRleHQsXG4gICAgICAgICAgICAgICdmb3JtRGF0YVN0YXRlOiAnLFxuICAgICAgICAgICAgICBmb3JtRGF0YVN0YXRlLnRvSlMoKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKChbZm9ybUNvbnRleHQsIGZvcm1EYXRhU3RhdGVdKSA9PiB7XG4gICAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICAgIGNvbnN0IHsgYXBpLCBsYWJlbFBhdGgsIHZhbHVlUGF0aCwgZXhwcmVzc2lvbiB9ID1cbiAgICAgICAgICAgIGR5bmFtaWNFeHByZXNzaW9uLm9wdGlvbnM7XG4gICAgICAgICAgY29uc3Qgc3RyaW5nRXhwcmVzc2lvbkNvbnRleHQgPSB0aGlzLmdldFN0cmluZ0V4cHJlc3Npb25Db250ZXh0KFxuICAgICAgICAgICAgZm9ybUNvbnRleHQsXG4gICAgICAgICAgICBmb3JtRGF0YVN0YXRlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFhcGkgJiYgZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcmVzdWx0ID0gZXZhbEluQ29udGV4dChleHByZXNzaW9uLCBzdHJpbmdFeHByZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdFeHByZXNzaW9uQ29udGV4dC5mZXRjaFJlc291cmNlTGlzdChcbiAgICAgICAgICAgICAgdGVtcGxhdGUoYXBpKShzdHJpbmdFeHByZXNzaW9uQ29udGV4dCksXG4gICAgICAgICAgICAgIChpdGVtOiBTdHJpbmdNYXApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldChpdGVtLCB2YWx1ZVBhdGgsICcnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgbGFiZWw6IGdldChpdGVtLCBsYWJlbFBhdGgsIHZhbHVlKSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBpc09ic2VydmFibGUocmVzdWx0KSA/IHJlc3VsdCA6IG9mKHJlc3VsdCk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KSxcbiAgICBwdWJsaXNoUmVmKCksXG4gICk7XG5cbiAgc3RhdGljRGVmYXVsdFZhbHVlJCA9IHRoaXMuZmllbGQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKGZpZWxkID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZUV4cHJlc3Npb24gPSBuZXcgUHJvcHNGaWVsZEV4cHJlc3Npb24oZmllbGQpXG4gICAgICAgIC5leHByZXNzaW9ucztcbiAgICAgIGlmIChcbiAgICAgICAgIWRlZmF1bHRWYWx1ZUV4cHJlc3Npb24uZGVmYXVsdCB8fFxuICAgICAgICB0aGlzLmdldEZpZWxkQ3VycmVudFZhbHVlKCkgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBvZih7XG4gICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0RmllbGRWYWx1ZSgpLFxuICAgICAgICAgIGlzRHluYW1pYzogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmNyZEZvcm0uZm9ybUNvbnRleHQkLFxuICAgICAgICB0aGlzLmZvcm1EYXRhU3RhdGUkLFxuICAgICAgXSkucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIG4pID0+XG4gICAgICAgICAgY29tcGFyZVdpdGhTdWJzY3JpYmVkUGF0aHMoZGVmYXVsdFZhbHVlRXhwcmVzc2lvbiwgcCwgbiksXG4gICAgICAgICksXG4gICAgICAgIG1hcCgoW2Zvcm1Db250ZXh0LCBmb3JtRGF0YVN0YXRlXSkgPT5cbiAgICAgICAgICB0ZW1wbGF0ZShkZWZhdWx0VmFsdWVFeHByZXNzaW9uLmRlZmF1bHQpKFxuICAgICAgICAgICAgdGhpcy5nZXRTdHJpbmdFeHByZXNzaW9uQ29udGV4dChmb3JtQ29udGV4dCwgZm9ybURhdGFTdGF0ZSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICAgbWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgaXNEeW5hbWljOiB0cnVlLFxuICAgICAgICB9KSksXG4gICAgICApO1xuICAgIH0pLFxuICAgIHB1Ymxpc2hSZWYoKSxcbiAgKTtcblxuICBkeW5hbWljSGlkZGVuVmFsdWUkID0gdGhpcy5maWVsZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoZmllbGQgPT4ge1xuICAgICAgY29uc3QgeyBleHByZXNzaW9ucyB9ID0gbmV3IFByb3BzRmllbGRFeHByZXNzaW9uKGZpZWxkKTtcbiAgICAgIGlmICghZXhwcmVzc2lvbnMuaGlkZGVuKSB7XG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuY3JkRm9ybS5mb3JtQ29udGV4dCQsXG4gICAgICAgIHRoaXMuZm9ybURhdGFTdGF0ZSQsXG4gICAgICBdKS5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgbikgPT5cbiAgICAgICAgICBjb21wYXJlV2l0aFN1YnNjcmliZWRQYXRocyhleHByZXNzaW9ucywgcCwgbiksXG4gICAgICAgICksXG4gICAgICAgIG1hcChcbiAgICAgICAgICAoW2Zvcm1Db250ZXh0LCBmb3JtRGF0YVN0YXRlXSkgPT5cbiAgICAgICAgICAgIHRlbXBsYXRlKGV4cHJlc3Npb25zLmhpZGRlbikoXG4gICAgICAgICAgICAgIHRoaXMuZ2V0U3RyaW5nRXhwcmVzc2lvbkNvbnRleHQoZm9ybUNvbnRleHQsIGZvcm1EYXRhU3RhdGUpLFxuICAgICAgICAgICAgKSA9PT0gJ3RydWUnLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9KSxcbiAgKTtcblxuICBnZXRTdHJpbmdFeHByZXNzaW9uQ29udGV4dCA9IChcbiAgICBmb3JtQ29udGV4dDogYW55LFxuICAgIGZvcm1EYXRhU3RhdGU6IEZvcm1EYXRhU3RhdGUsXG4gICkgPT4gKHtcbiAgICBmZXRjaFJlc291cmNlTGlzdDogdGhpcy5mZXRjaFJlc291cmNlTGlzdCxcbiAgICBjb250ZXh0OiBmb3JtQ29udGV4dCB8fCB7fSxcbiAgICBmb3JtRGF0YTogZm9ybURhdGFTdGF0ZS50b0pTKCk/LnNwZWMgfHwge30sXG4gIH0pO1xuXG4gIGZldGNoUmVzb3VyY2VMaXN0ID0gKFxuICAgIHVybDogc3RyaW5nLFxuICAgIGNhbGxiYWNrOiAocmVzb3VyY2U6IEt1YmVybmV0ZXNSZXNvdXJjZSkgPT4gdm9pZCxcbiAgKSA9PiB7XG4gICAgLy8g5L6L5aaCICcva3ViZXJuZXRlcy9nbG9iYWwvYXBpL3YxL25hbWVzcGFjZXMvL3NlY3JldHMnIOihqOekuiBmb3JtRGF0YS5uYW1lc3BhY2Ug5rKh5pyJ5o+S5YC8XG4gICAgaWYgKHVybC5pbmNsdWRlcygnLy8nKSkge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8eyBpdGVtczogS3ViZXJuZXRlc1Jlc291cmNlW10gfT4oYCR7QVBJX0dBVEVXQVl9JHt1cmx9YClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocmVzID0+IHJlcy5pdGVtcy5tYXAoaXRlbSA9PiBjYWxsYmFjay5jYWxsKHRoaXMsIGl0ZW0pKSksXG4gICAgICAgIHNraXBFcnJvcihbXSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH07XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGRcIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwie1xuICAgICAgZmllbGRUeXBlOiBmaWVsZCB8IHB1cmU6IGdldEZpZWxkVHlwZSxcbiAgICAgIGlzQmFzaWNUeXBlRmllbGQ6IGZpZWxkIHwgcHVyZTogaXNCYXNpY1R5cGVGaWVsZCxcbiAgICB9IGFzIG1ldGFcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1ldGEuaXNCYXNpY1R5cGVGaWVsZDsgZWxzZSBhZHZhbmNlZEZpbGVkXCI+XG4gICAgICA8YWNsLWNyZC1mb3JtLWl0ZW1cbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAhKGZpZWxkLmNhcGFiaWxpdGllcyB8IHB1cmU6IGdldFdpZGdldHMpICYmXG4gICAgICAgICAgIShmaWVsZCB8IHB1cmU6IGlzUmVtb3RlRmllbGQpXG4gICAgICAgIFwiXG4gICAgICAgIFtuZ1N3aXRjaF09XCJtZXRhLmZpZWxkVHlwZVwiXG4gICAgICA+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS5udW1iZXJcIlxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIGF1aS1pbnB1dFxuICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkIHwgcHVyZTogZ2V0RmllbGRQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlNwZWNDYXBhYmlsaXR5LmJvb2xlYW5Td2l0Y2hcIj5cbiAgICAgICAgICA8YXVpLXN3aXRjaFxuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkVGVtcGxhdGVdPVwic3dpdGNoUmVhZG9ubHlcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgID48L2F1aS1zd2l0Y2g+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzd2l0Y2hSZWFkb25seT57e1xuICAgICAgICAgICAgY29udHJvbC52YWx1ZVxuICAgICAgICAgICAgICB8IHB1cmU6IGNvbnZlcnRCb29sZWFuU3dpdGNoVmFsdWUgOiBmaWVsZC5jYXBhYmlsaXRpZXNcbiAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS5zZWxlY3RcIj5cbiAgICAgICAgICA8YXVpLW11bHRpLXNlbGVjdFxuICAgICAgICAgICAgKm5nSWY9XCJpc011bHRpcGxlXCJcbiAgICAgICAgICAgIFttYXhSb3dDb3VudF09XCIzXCJcbiAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFthbGxvd0NyZWF0ZV09XCJpc0FsbG93Q3JlYXRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YXVpLW9wdGlvblxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGR5bmFtaWNPcHRpb25zJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJvcHRpb24ubGFiZWxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvYXVpLW9wdGlvbj5cbiAgICAgICAgICAgIDxhdWktb3B0aW9uLXBsYWNlaG9sZGVyPnt7XG4gICAgICAgICAgICAgICdub19kYXRhJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfX08L2F1aS1vcHRpb24tcGxhY2Vob2xkZXI+XG4gICAgICAgICAgPC9hdWktbXVsdGktc2VsZWN0PlxuXG4gICAgICAgICAgPGF1aS1zZWxlY3RcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzTXVsdGlwbGVcIlxuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmckIHwgYXN5bmNcIlxuICAgICAgICAgICAgW2FsbG93Q3JlYXRlXT1cImlzQWxsb3dDcmVhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxhdWktb3B0aW9uXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZHluYW1pY09wdGlvbnMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbCB8IGFjbFBhcnNlSnNvblRyYW5zbGF0ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB8IGFjbFBhcnNlSnNvblRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9hdWktb3B0aW9uPlxuICAgICAgICAgICAgPGF1aS1vcHRpb24tcGxhY2Vob2xkZXI+e3tcbiAgICAgICAgICAgICAgJ25vX2RhdGEnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fTwvYXVpLW9wdGlvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICA8L2F1aS1zZWxlY3Q+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8YXVpLXJhZGlvLWdyb3VwXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIlNwZWNDYXBhYmlsaXR5LnJhZGlvXCJcbiAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkVGVtcGxhdGVdPVwicmFkaW9MYWJlbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGF1aS1yYWRpby1idXR0b25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWVsZC5jYXBhYmlsaXRpZXMgfCBwdXJlOiBnZXRSYWRpb09wdGlvbnNcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgb3B0aW9uLmRpc3BsYXkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYXVpLXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmFkaW9MYWJlbD5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICBjb250cm9sLnZhbHVlXG4gICAgICAgICAgICAgICAgICB8IHB1cmVcbiAgICAgICAgICAgICAgICAgICAgOiBnZXRPcHRpb25EaXNwbGF5XG4gICAgICAgICAgICAgICAgICAgIDogKGZpZWxkLmNhcGFiaWxpdGllcyB8IHB1cmU6IGdldFJhZGlvT3B0aW9ucylcbiAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2F1aS1yYWRpby1ncm91cD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkucmVzb3VyY2VSZXF1aXJlbWVudHNcIj5cbiAgICAgICAgICA8YWNsLWNyZC1yZXNvdXJjZS1yZXF1aXJlbWVudHNcbiAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZFRlbXBsYXRlXT1cInJlc291cmNlUmVxdWlyZW1lbnRzUmVhZG9ubHlcIlxuICAgICAgICAgID48L2FjbC1jcmQtcmVzb3VyY2UtcmVxdWlyZW1lbnRzPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVzb3VyY2VSZXF1aXJlbWVudHNSZWFkb25seT5cbiAgICAgICAgICAgIDxhY2wtY3JkLXJlc291cmNlLXJlcXVpcmVtZW50c1xuICAgICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiY29udHJvbC52YWx1ZVwiXG4gICAgICAgICAgICAgIFtyZWFkT25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgID48L2FjbC1jcmQtcmVzb3VyY2UtcmVxdWlyZW1lbnRzPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS55YW1sXCI+XG4gICAgICAgICAgPGFjbC1jcmQteWFtbC1lZGl0b3JcbiAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgICAgW2FjdGlvbnNDb25maWddPVwiZWRpdG9yQWN0aW9uc1wiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJlZGl0b3JPcHRpb25zXCJcbiAgICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRUZW1wbGF0ZV09XCJ5YW1sUmVhZG9ubHlcIlxuICAgICAgICAgID48L2FjbC1jcmQteWFtbC1lZGl0b3I+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN5YW1sUmVhZG9ubHk+XG4gICAgICAgICAgICA8YWNsLWNyZC15YW1sLWVkaXRvclxuICAgICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiY29udHJvbC52YWx1ZVwiXG4gICAgICAgICAgICAgIFthY3Rpb25zQ29uZmlnXT1cInZpZXdBY3Rpb25zXCJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwidmlld09wdGlvbnNcIlxuICAgICAgICAgICAgPjwvYWNsLWNyZC15YW1sLWVkaXRvcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkuazhzUmVzb3VyY2VQcmVmaXhcIj5cbiAgICAgICAgICA8YWNsLWNyZC1yZXNvdXJjZS1wcmVmaXhcbiAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgW2Zvcm1FcnJvcnNdPVwiY29udHJvbC5lcnJvcnNcIlxuICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRUZW1wbGF0ZV09XCJyZXNvdXJjZVByZWZpeFJlYWRvbmx5XCJcbiAgICAgICAgICA+PC9hY2wtY3JkLXJlc291cmNlLXByZWZpeD5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3Jlc291cmNlUHJlZml4UmVhZG9ubHk+XG4gICAgICAgICAgICA8YWNsLWNyZC1yZXNvdXJjZS1wcmVmaXhcbiAgICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImNvbnRyb2wudmFsdWVcIlxuICAgICAgICAgICAgICBbcmVhZG9ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICA+PC9hY2wtY3JkLXJlc291cmNlLXByZWZpeD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkuYmFzaWNBdXRoU2VjcmV0XCI+XG4gICAgICAgICAgPGFjbC1jcmQtYmFzaWMtYXV0aC1zZWNyZXRcbiAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgID48L2FjbC1jcmQtYmFzaWMtYXV0aC1zZWNyZXQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkudGV4dGFyZWFcIlxuICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgIGF1aS1pbnB1dFxuICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkIHwgcHVyZTogZ2V0RmllbGRQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICA8YXVpLXRhZ3MtaW5wdXRcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkudGFnc0lucHV0XCJcbiAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICBjbGFzcz1cInR3LWZsZXgtMVwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQgfCBwdXJlOiBnZXRGaWVsZFBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICBbY2xlYXJhYmxlXT1cImlzQ2xlYXJhYmxlXCJcbiAgICAgICAgPjwvYXVpLXRhZ3MtaW5wdXQ+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICA8YWNsLWNyZC1saW5rXG4gICAgICAgICAgICAqbmdJZj1cIihmaWVsZCB8IHB1cmU6IGlzTGluaykgJiYgaXNEaXNhYmxlZDsgZWxzZSB0ZXh0RmllbGRcIlxuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgID48L2FjbC1jcmQtbGluaz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjdGV4dEZpZWxkPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgICBhdWktaW5wdXRcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZCB8IHB1cmU6IGdldEZpZWxkUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvYWNsLWNyZC1mb3JtLWl0ZW0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidHctZmxleCB0dy13LWZ1bGwgdHctZmxleC1jb2xcIlxuICAgICAgICAqbmdJZj1cImZpZWxkLmNhcGFiaWxpdGllcyB8IHB1cmU6IGdldFdpZGdldHMgYXMgd2lkZ2V0XCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJ3aWRnZXQuY29tcG9uZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZCB8IHB1cmU6IGlzUmVtb3RlRmllbGRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlbW90ZU1vZHVsZSQgfCBhc3luYyBhcyByZW1vdGVNb2R1bGVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cImZpZWxkIHwgcHVyZTogZ2V0RmllbGREaXNwbGF5TmFtZSBhcyBsYWJlbDsgZWxzZSBwdXJlUmVtb3RlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YXVpLWZvcm0taXRlbSBbZW1wdHlBZGRvbl09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBhdWlGb3JtSXRlbUxhYmVsXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZCB8IHB1cmU6IGdldEZpZWxkRGlzcGxheU5hbWUgYXMgbGFiZWxcIlxuICAgICAgICAgICAgICAgID57eyBsYWJlbCB8IHRyYW5zbGF0ZSB9fTwvbGFiZWxcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nQ29tcG9uZW50T3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICByZW1vdGVNb2R1bGUuY29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgaW5qZWN0b3I6IHJlbW90ZU1vZHVsZS5pbmplY3RvclxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGRpdiBhdWlGb3JtSXRlbUhpbnQ+XG4gICAgICAgICAgICAgICAge3sgZmllbGQgfCBwdXJlOiBnZXRGaWVsZERlc2NyaXB0aW9uIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9hdWktZm9ybS1pdGVtPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcHVyZVJlbW90ZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nQ29tcG9uZW50T3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgcmVtb3RlTW9kdWxlLmNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBpbmplY3RvcjogcmVtb3RlTW9kdWxlLmluamVjdG9yXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXJcbiAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2FkdmFuY2VkRmlsZWQ+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgbWV0YS5maWVsZFR5cGUgPT09IFNwZWNDYXBhYmlsaXR5LnBhc3N3b3JkIHx8XG4gICAgICAgICAgbWV0YS5maWVsZFR5cGUgPT09IFNwZWNDYXBhYmlsaXR5LmNvbmZpcm1QYXNzd29yZCB8fFxuICAgICAgICAgIG1ldGEuZmllbGRUeXBlID09PSBTcGVjQ2FwYWJpbGl0eS5leHRlcm5hbFBhc3N3b3JkXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxhY2wtY3JkLWZvcm0taXRlbVxuICAgICAgICAgICpuZ0lmPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgW3BsYWluXT1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhc3N3b3JkVmlld1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2FjbC1jcmQtZm9ybS1pdGVtPlxuICAgICAgICA8YWNsLXBhc3N3b3JkLWlucHV0XG4gICAgICAgICAgKm5nSWY9XCIhaXNEaXNhYmxlZFwiXG4gICAgICAgICAgW2luaXRQYXNzd29yZF09XCJjb250cm9sLnZhbHVlXCJcbiAgICAgICAgICBbbGFiZWxdPVwiZmllbGQgfCBwdXJlOiBnZXRGaWVsZERpc3BsYXlOYW1lIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbaGludF09XCJmaWVsZCB8IHB1cmU6IGdldEZpZWxkRGVzY3JpcHRpb24gfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cImNyZEZvcm0ucmVhZG9ubHlcIlxuICAgICAgICAgIFtpc1VwZGF0ZV09XCIhIWNvbnRyb2wudmFsdWUgJiYgIWNvbnRyb2wuZGlydHlcIlxuICAgICAgICAgIFtzdHJvbmdQYXNzd29yZF09XCJtZXRhLmZpZWxkVHlwZSAhPT0gU3BlY0NhcGFiaWxpdHkuZXh0ZXJuYWxQYXNzd29yZFwiXG4gICAgICAgICAgW2VuYWJsZUNvbmZpcm1dPVwibWV0YS5maWVsZFR5cGUgPT09IFNwZWNDYXBhYmlsaXR5LmNvbmZpcm1QYXNzd29yZFwiXG4gICAgICAgICAgd2lkdGg9XCJsYXJnZVwiXG4gICAgICAgICAgW2VuY29kaW5nXT1cImZpZWxkIHwgcHVyZTogZ2V0RW5jb2RpbmcgOiAncGFzc3dvcmQnXCJcbiAgICAgICAgICBbcGF0dGVybl09XCJmaWVsZC52YWxpZGF0aW9ucz8ucGF0dGVyblwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkIHwgcHVyZTogZ2V0RmllbGRQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID48L2FjbC1wYXNzd29yZC1pbnB1dD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPCEtLSBncm91cCBmaWVsZCAgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNHcm91cEZpZWxkKGZpZWxkKSAmJiBmaWVsZC5maWVsZExpc3Q/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGFjbC1vcGVyYW5kLWZpZWxkLWdyb3VwXG4gICAgICAgICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgICAgICAgIFtmaWVsZEdyb3VwXT1cImZpZWxkXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgW2Zvcm1EYXRhU3RhdGVdPVwiZm9ybURhdGFTdGF0ZVwiXG4gICAgICAgICAgW2Zvcm1FcnJvcnNdPVwiZm9ybUVycm9yc1wiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInZhbHVlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9hY2wtb3BlcmFuZC1maWVsZC1ncm91cD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPCEtLSBhcnJheSBmaWVsZCBncm91cHMgLS0+XG4gICAgICA8IS0tIGFycmF5IGZpZWxkIHRhYmxlIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQXJyYXlGaWVsZChmaWVsZClcIj5cbiAgICAgICAgPGFjbC1jcmQtYXJyYXktdGFibGVcbiAgICAgICAgICAqbmdJZj1cImZpZWxkIHwgcHVyZTogaXNBcnJheUZpZWxkVGFibGU7IGVsc2UgZGVmYXVsdEFycmF5RmlsZWRcIlxuICAgICAgICAgIFthcnJheUZpZWxkR3JvdXBdPVwiZmllbGRcIlxuICAgICAgICAgIFtmb3JtRGF0YVN0YXRlXT1cImZvcm1EYXRhU3RhdGVcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwidmFsdWVDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2FjbC1jcmQtYXJyYXktdGFibGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEFycmF5RmlsZWQ+XG4gICAgICAgICAgPGFjbC1vcGVyYW5kLWFycmF5LWZpZWxkLWdyb3VwXG4gICAgICAgICAgICBbYXJyYXlGaWVsZEdyb3VwXT1cImZpZWxkXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFtmb3JtRGF0YVN0YXRlXT1cImZvcm1EYXRhU3RhdGVcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInZhbHVlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvYWNsLW9wZXJhbmQtYXJyYXktZmllbGQtZ3JvdXA+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3Bhc3N3b3JkVmlldz5cbiAge3sgUEFTU1dPUkRfUkVWRUFMIH19XG48L25nLXRlbXBsYXRlPlxuIl19
|