myrta-ui 1.1.19 → 1.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/esm2020/lib/components/form/formula-editor/formula-editor.component.mjs +164 -0
  2. package/esm2020/lib/components/form/formula-editor/formula-editor.module.mjs +50 -0
  3. package/esm2020/lib/components/form/input-tel/input-tel.component.mjs +2 -1
  4. package/esm2020/lib/services/mrx-form-validator/mrx-form-validator.mjs +7 -2
  5. package/esm2020/lib/services/mrx-form-validator/validations/callback.validation.mjs +2 -2
  6. package/esm2020/lib/services/mrx-form-validator/validations/email.validation.mjs +2 -2
  7. package/esm2020/lib/services/mrx-form-validator/validations/max-length.validation.mjs +2 -2
  8. package/esm2020/lib/services/mrx-form-validator/validations/max-value.validation.mjs +2 -2
  9. package/esm2020/lib/services/mrx-form-validator/validations/min-length.validation.mjs +2 -2
  10. package/esm2020/lib/services/mrx-form-validator/validations/min-value.validation.mjs +2 -2
  11. package/esm2020/lib/services/mrx-form-validator/validations/pattern.validation.mjs +2 -2
  12. package/esm2020/lib/services/mrx-form-validator/validations/required.validation.mjs +2 -2
  13. package/esm2020/public-api.mjs +4 -1
  14. package/fesm2015/myrta-ui.mjs +218 -11
  15. package/fesm2015/myrta-ui.mjs.map +1 -1
  16. package/fesm2020/myrta-ui.mjs +214 -11
  17. package/fesm2020/myrta-ui.mjs.map +1 -1
  18. package/lib/components/form/formula-editor/formula-editor.component.d.ts +32 -0
  19. package/lib/components/form/formula-editor/formula-editor.module.d.ts +14 -0
  20. package/lib/services/mrx-form-validator/validations/callback.validation.d.ts +1 -1
  21. package/lib/services/mrx-form-validator/validations/email.validation.d.ts +1 -1
  22. package/lib/services/mrx-form-validator/validations/max-length.validation.d.ts +1 -1
  23. package/lib/services/mrx-form-validator/validations/max-value.validation.d.ts +1 -1
  24. package/lib/services/mrx-form-validator/validations/min-length.validation.d.ts +1 -1
  25. package/lib/services/mrx-form-validator/validations/min-value.validation.d.ts +1 -1
  26. package/lib/services/mrx-form-validator/validations/pattern.validation.d.ts +1 -1
  27. package/lib/services/mrx-form-validator/validations/required.validation.d.ts +1 -1
  28. package/package.json +4 -2
  29. package/public-api.d.ts +3 -0
@@ -0,0 +1,164 @@
1
+ import { Component, forwardRef, Inject, ViewChild, } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import Tagify from '@yaireo/tagify';
4
+ import { DOCUMENT } from '@angular/common';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/platform-browser";
7
+ import * as i2 from "@angular/common";
8
+ import * as i3 from "../../../pipes/safe/safe.pipe";
9
+ const whitelist_2 = ['Homer simpson', 'Marge simpson', 'Bart', 'Lisa', 'Maggie', 'Mr. Burns', 'Ned', 'Milhouse', 'Moe'];
10
+ export class FormulaEditorComponent {
11
+ constructor(document, sanitizer) {
12
+ this.document = document;
13
+ this.sanitizer = sanitizer;
14
+ this._whitelist = ['Angular', 'React', 'Vue'];
15
+ this.value = '';
16
+ this.isFocused = false;
17
+ }
18
+ getSanitizedValue() {
19
+ return this.value;
20
+ }
21
+ ngAfterViewInit() {
22
+ if (!this.inputElement?.nativeElement)
23
+ return;
24
+ this._tagify = new Tagify(this.inputElement.nativeElement, {
25
+ mode: 'mix',
26
+ editTags: false,
27
+ enforceWhitelist: false,
28
+ pattern: /@|#/,
29
+ whitelist: ['firstname', 'lastname', 'email', 'company'],
30
+ callbacks: {
31
+ add: (e) => {
32
+ console.log(1);
33
+ console.log(e);
34
+ //
35
+ // let ranges = [];
36
+ // let sel = window.getSelection();
37
+ // if (sel) {
38
+ // for (let i = 0; i < sel.rangeCount; i++) {
39
+ // ranges[i] = sel.getRangeAt(i);
40
+ // }
41
+ // }
42
+ //
43
+ // const textNode = e.detail.tag.nextSibling
44
+ // e.detail.tag.insertAdjacentText('afterend', '\u00A0')
45
+ // document.getSelection()?.getRangeAt(0).setStart(textNode, 0)
46
+ console.log(e.detail.tagify.value);
47
+ console.log(e.detail.tagify.getCleanValue());
48
+ },
49
+ change: (e) => {
50
+ console.log(2);
51
+ console.log(e);
52
+ // const textNode = e.detail.tag.nextSibling
53
+ },
54
+ 'dropdown:select': (e) => {
55
+ console.log(3);
56
+ console.log(e);
57
+ e.detail.tagify.DOM.input.focus();
58
+ }
59
+ },
60
+ });
61
+ this._tagify.on('input', (e) => {
62
+ if (e.detail.textContent.length > 1) {
63
+ this._tagify.dropdown.show(e.detail.value);
64
+ }
65
+ });
66
+ this._tagify.on('add', (e) => {
67
+ e.detail.tagify.DOM.input.focus();
68
+ const textNode = e.detail.tag.nextSibling;
69
+ if (document.getSelection()?.getRangeAt(0)) {
70
+ document.getSelection()?.getRangeAt(0).setStart(textNode, 1);
71
+ }
72
+ });
73
+ // this._tagify.on('focus', (e: any) => {
74
+ // this._tagify.dropdown.show(e.detail.value);
75
+ // })
76
+ }
77
+ ngOnDestroy() {
78
+ }
79
+ registerOnChange(fn) {
80
+ }
81
+ registerOnTouched(fn) {
82
+ }
83
+ writeValue(obj) {
84
+ }
85
+ onInput(event) {
86
+ const target = event.target;
87
+ const content = target.textContent || '';
88
+ const valueArray = content.split(/[ &nbsp;]+/);
89
+ }
90
+ onBlur(event) {
91
+ const target = event.target;
92
+ const content = target.textContent || '';
93
+ const visibleValueArray = content.split(/[\s\u00A0]+/);
94
+ const originalValueArray = [];
95
+ visibleValueArray.forEach((item, index, array) => {
96
+ if (this._whitelist.find(v => v === item)) {
97
+ visibleValueArray[index] = `<div class="tag" title="Eric Cartman" contenteditable="false" tabindex="-1"><div>${item}</div><div></div></div>&nbsp;`;
98
+ originalValueArray.push(`{${item}}`);
99
+ }
100
+ else {
101
+ originalValueArray.push(item);
102
+ }
103
+ });
104
+ this.transformValue(visibleValueArray);
105
+ this.updateValue(originalValueArray);
106
+ // this.isFocused = false
107
+ this.updateSelection(event);
108
+ }
109
+ transformValue(array) {
110
+ this.value = array.join(' ');
111
+ }
112
+ updateValue(array) {
113
+ console.log(array.join(' '));
114
+ }
115
+ updateSelection(event) {
116
+ const selections = window.getSelection();
117
+ console.log(selections);
118
+ const start = selections?.anchorOffset || 0;
119
+ const end = selections?.focusOffset || 0;
120
+ if (start > end) {
121
+ this.selectionStart = end;
122
+ this.selectionEnd = start;
123
+ }
124
+ else {
125
+ this.selectionStart = start;
126
+ this.selectionEnd = end;
127
+ }
128
+ }
129
+ onFocus(event) {
130
+ // this.updateSelection(event)
131
+ this.isFocused = true;
132
+ }
133
+ insertTag(row) {
134
+ if ((this.selectionStart || this.selectionStart === 0) && (this.selectionEnd || this.selectionEnd === 0)) {
135
+ const firstText = this.value.slice(0, this.selectionStart);
136
+ const secondText = this.value.slice(this.selectionEnd);
137
+ this.value = firstText + row + secondText;
138
+ }
139
+ }
140
+ onSelectionChange(event) {
141
+ console.log('asd');
142
+ }
143
+ }
144
+ FormulaEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FormulaEditorComponent, deps: [{ token: DOCUMENT }, { token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
145
+ FormulaEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: FormulaEditorComponent, selector: "mrx-formula-editor", providers: [{
146
+ provide: NG_VALUE_ACCESSOR,
147
+ useExisting: forwardRef(() => FormulaEditorComponent),
148
+ multi: true
149
+ }], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true, static: true }], ngImport: i0, template: "<div\n class=\"mrx-formula-editor\"\n>\n <div class=\"mrx-formula-editor__wrapper\">\n <div\n [innerHTML]=\"value | safe\"\n class=\"mrx-formula-editor__box\"\n contenteditable=\"true\"\n tabindex=\"0\" data-placeholder=\"&ZeroWidthSpace;\" aria-placeholder=\"\" role=\"textbox\" autocapitalize=\"false\"\n autocorrect=\"off\" spellcheck=\"false\" aria-autocomplete=\"both\" aria-multiline=\"true\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (selectionchange)=\"onSelectionChange($event)\"\n ></div>\n <!-- <textarea #inputElement name='mix' contenteditable=\"false\">asd[[{\"value\":\"firstname\"}]] [[{\"value\":\"email\"}]] asdasdasd asd[[{\"value\":\"company\"}]]</textarea>-->\n <!-- <input-->\n <!-- autocomplete=\"nope\"-->\n <!-- #inputElement-->\n <!-- [type]=\"'text'\"-->\n <!-- [id]=\"uuid\"-->\n <!-- [ngModel]=\"value\"-->\n <!-- [title]=\"placeholder || ''\"-->\n <!-- [disabled]=\"disabled\"-->\n <!-- [readOnly]=\"readonly\"-->\n <!-- [placeholder]=\"!disabled && placeholder ? placeholder : ''\"-->\n <!-- [mask]=\"mask\"-->\n <!-- [prefix]=\"maskPrefix\"-->\n <!-- [showMaskTyped]=\"showMaskTyped\"-->\n <!-- [dropSpecialCharacters]=\"maskDropSpecialCharacters\"-->\n <!-- [minlength]=\"minlength > 0 && restrictInput ? minlength : null\"-->\n <!-- [maxlength]=\"maxlength > 0 && restrictInput ? maxlength : null\"-->\n <!-- (ngModelChange)=\"updateValue($event)\"-->\n <!-- (blur)=\"onBlur($event)\"-->\n <!-- />-->\n\n <!-- <mrx-chars-left-->\n <!-- *ngIf=\"!disabled && maxlength\"-->\n <!-- [value]=\"value\"-->\n <!-- [maxlength]=\"maxlength\"-->\n <!-- ></mrx-chars-left>-->\n\n <div class=\"mrx-formula-editor__popup\" *ngIf=\"isFocused\">\n <div\n class=\"mrx-formula-editor__popup--row\"\n *ngFor=\"let row of _whitelist\"\n (click)=\"insertTag(row)\"\n >\n {{ row }}\n </div>\n </div>\n </div>\n\n <!-- <mrx-error-message-->\n <!-- *ngIf=\"getInvalid && getInvalidMessage\"-->\n <!-- [invalidMessage]=\"getInvalidMessage\"-->\n <!-- ></mrx-error-message>-->\n\n <!-- <mrx-save-state [id]=\"uuid\" [fields]=\"fields\"></mrx-save-state>-->\n</div>\n", styles: [".mrx-formula-editor{position:relative}.mrx-formula-editor__box{font-family:var(--body-md-font-family);font-size:var(--body-md-font-size);font-weight:var(--body-md-font-weight);line-height:var(--body-md-line-height);padding:calc(var(--spacing-3) + var(--spacing-half) - var(--border-width-default)) var(--spacing-4);border:var(--border-width-default) solid var(--neutral-bg-stroke-default);border-radius:var(--border-radius-1);outline:none;color:var(--neutral-text-primary, #262626);transition:outline-width .2s,border .2s;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space}.mrx-formula-editor__box:focus,.mrx-formula-editor__box:active{outline:var(--neutral-bg-island-default) solid var(--border-width-focused)}.mrx-formula-editor__box:hover{border:var(--border-width-default) solid var(--neutral-bg-stroke-hover)}.mrx-formula-editor__box ::ng-deep .tag{display:inline-flex;padding:2px 4px;background-color:#8ad5f4;border-radius:var(--border-radius-1);margin:0 2px;position:relative;z-index:1;cursor:default;-webkit-user-modify:read-only}.mrx-formula-editor__wrapper{position:relative}.mrx-formula-editor__popup{position:absolute;top:52px;width:100%;border:var(--border-width-default) solid var(--neutral-bg-stroke-default);border-radius:var(--border-radius-1);background-color:#fff;max-height:240px;overflow-x:hidden;overflow-y:auto}.mrx-formula-editor__popup--row{min-height:var(--sizing-10);transition:.2s;display:flex;align-items:center;padding:var(--spacing-1) var(--spacing-4);white-space:normal}.mrx-formula-editor__popup--row:hover{cursor:pointer;background-color:var(--Bg2)!important}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "safe": i3.SafePipe } });
150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FormulaEditorComponent, decorators: [{
151
+ type: Component,
152
+ args: [{ selector: 'mrx-formula-editor', providers: [{
153
+ provide: NG_VALUE_ACCESSOR,
154
+ useExisting: forwardRef(() => FormulaEditorComponent),
155
+ multi: true
156
+ }], template: "<div\n class=\"mrx-formula-editor\"\n>\n <div class=\"mrx-formula-editor__wrapper\">\n <div\n [innerHTML]=\"value | safe\"\n class=\"mrx-formula-editor__box\"\n contenteditable=\"true\"\n tabindex=\"0\" data-placeholder=\"&ZeroWidthSpace;\" aria-placeholder=\"\" role=\"textbox\" autocapitalize=\"false\"\n autocorrect=\"off\" spellcheck=\"false\" aria-autocomplete=\"both\" aria-multiline=\"true\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (selectionchange)=\"onSelectionChange($event)\"\n ></div>\n <!-- <textarea #inputElement name='mix' contenteditable=\"false\">asd[[{\"value\":\"firstname\"}]] [[{\"value\":\"email\"}]] asdasdasd asd[[{\"value\":\"company\"}]]</textarea>-->\n <!-- <input-->\n <!-- autocomplete=\"nope\"-->\n <!-- #inputElement-->\n <!-- [type]=\"'text'\"-->\n <!-- [id]=\"uuid\"-->\n <!-- [ngModel]=\"value\"-->\n <!-- [title]=\"placeholder || ''\"-->\n <!-- [disabled]=\"disabled\"-->\n <!-- [readOnly]=\"readonly\"-->\n <!-- [placeholder]=\"!disabled && placeholder ? placeholder : ''\"-->\n <!-- [mask]=\"mask\"-->\n <!-- [prefix]=\"maskPrefix\"-->\n <!-- [showMaskTyped]=\"showMaskTyped\"-->\n <!-- [dropSpecialCharacters]=\"maskDropSpecialCharacters\"-->\n <!-- [minlength]=\"minlength > 0 && restrictInput ? minlength : null\"-->\n <!-- [maxlength]=\"maxlength > 0 && restrictInput ? maxlength : null\"-->\n <!-- (ngModelChange)=\"updateValue($event)\"-->\n <!-- (blur)=\"onBlur($event)\"-->\n <!-- />-->\n\n <!-- <mrx-chars-left-->\n <!-- *ngIf=\"!disabled && maxlength\"-->\n <!-- [value]=\"value\"-->\n <!-- [maxlength]=\"maxlength\"-->\n <!-- ></mrx-chars-left>-->\n\n <div class=\"mrx-formula-editor__popup\" *ngIf=\"isFocused\">\n <div\n class=\"mrx-formula-editor__popup--row\"\n *ngFor=\"let row of _whitelist\"\n (click)=\"insertTag(row)\"\n >\n {{ row }}\n </div>\n </div>\n </div>\n\n <!-- <mrx-error-message-->\n <!-- *ngIf=\"getInvalid && getInvalidMessage\"-->\n <!-- [invalidMessage]=\"getInvalidMessage\"-->\n <!-- ></mrx-error-message>-->\n\n <!-- <mrx-save-state [id]=\"uuid\" [fields]=\"fields\"></mrx-save-state>-->\n</div>\n", styles: [".mrx-formula-editor{position:relative}.mrx-formula-editor__box{font-family:var(--body-md-font-family);font-size:var(--body-md-font-size);font-weight:var(--body-md-font-weight);line-height:var(--body-md-line-height);padding:calc(var(--spacing-3) + var(--spacing-half) - var(--border-width-default)) var(--spacing-4);border:var(--border-width-default) solid var(--neutral-bg-stroke-default);border-radius:var(--border-radius-1);outline:none;color:var(--neutral-text-primary, #262626);transition:outline-width .2s,border .2s;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space}.mrx-formula-editor__box:focus,.mrx-formula-editor__box:active{outline:var(--neutral-bg-island-default) solid var(--border-width-focused)}.mrx-formula-editor__box:hover{border:var(--border-width-default) solid var(--neutral-bg-stroke-hover)}.mrx-formula-editor__box ::ng-deep .tag{display:inline-flex;padding:2px 4px;background-color:#8ad5f4;border-radius:var(--border-radius-1);margin:0 2px;position:relative;z-index:1;cursor:default;-webkit-user-modify:read-only}.mrx-formula-editor__wrapper{position:relative}.mrx-formula-editor__popup{position:absolute;top:52px;width:100%;border:var(--border-width-default) solid var(--neutral-bg-stroke-default);border-radius:var(--border-radius-1);background-color:#fff;max-height:240px;overflow-x:hidden;overflow-y:auto}.mrx-formula-editor__popup--row{min-height:var(--sizing-10);transition:.2s;display:flex;align-items:center;padding:var(--spacing-1) var(--spacing-4);white-space:normal}.mrx-formula-editor__popup--row:hover{cursor:pointer;background-color:var(--Bg2)!important}\n"] }]
157
+ }], ctorParameters: function () { return [{ type: Document, decorators: [{
158
+ type: Inject,
159
+ args: [DOCUMENT]
160
+ }] }, { type: i1.DomSanitizer }]; }, propDecorators: { inputElement: [{
161
+ type: ViewChild,
162
+ args: ['inputElement', { static: true }]
163
+ }] } });
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXVsYS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vZm9ybXVsYS1lZGl0b3IvZm9ybXVsYS1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vZm9ybXVsYS1lZGl0b3IvZm9ybXVsYS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQUUsTUFBTSxFQUNQLFNBQVMsR0FDckIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sTUFBTSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFHM0MsTUFBTSxXQUFXLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBWXhILE1BQU0sT0FBTyxzQkFBc0I7SUFjakMsWUFDNEIsUUFBa0IsRUFDcEMsU0FBdUI7UUFETCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3BDLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFmMUIsZUFBVSxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUd4QyxVQUFLLEdBQUcsRUFBRSxDQUFBO1FBQ1YsY0FBUyxHQUFHLEtBQUssQ0FBQTtJQWF4QixDQUFDO0lBVE0saUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FB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LFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQzFELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUV0RCxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxHQUFHLEdBQUcsVUFBVSxDQUFDO1NBQzNDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQVk7UUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDOzttSEEvSlUsc0JBQXNCLGtCQWV2QixRQUFRO3VHQWZQLHNCQUFzQiw2Q0FOdEIsQ0FBQztZQUNWLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztZQUNyRCxLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUMsc0pDckJKLGk0RUE0REE7MkZEckNhLHNCQUFzQjtrQkFWbEMsU0FBUzsrQkFDRSxvQkFBb0IsYUFHbkIsQ0FBQzs0QkFDVixPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQzs0QkFDckQsS0FBSyxFQUFFLElBQUk7eUJBQ1osQ0FBQzswREFpQm9DLFFBQVE7MEJBQTNDLE1BQU07MkJBQUMsUUFBUTt1RUFGeUIsWUFBWTtzQkFBdEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LCBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLCBJbmplY3QsXG4gIE9uRGVzdHJveSwgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCBUYWdpZnkgZnJvbSAnQHlhaXJlby90YWdpZnknO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbmNvbnN0IHdoaXRlbGlzdF8yID0gWydIb21lciBzaW1wc29uJywgJ01hcmdlIHNpbXBzb24nLCAnQmFydCcsICdMaXNhJywgJ01hZ2dpZScsICdNci4gQnVybnMnLCAnTmVkJywgJ01pbGhvdXNlJywgJ01vZSddO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtcngtZm9ybXVsYS1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybXVsYS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtdWxhLWVkaXRvci5jb21wb25lbnQubGVzcyddLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRm9ybXVsYUVkaXRvckNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbiAgfV1cbn0pXG5leHBvcnQgY2xhc3MgRm9ybXVsYUVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkRlc3Ryb3kge1xuICBwdWJsaWMgX3doaXRlbGlzdCA9IFsnQW5ndWxhcicsICdSZWFjdCcsICdWdWUnXVxuICBwcml2YXRlIF90YWdpZnkhOiBUYWdpZnlcblxuICBwdWJsaWMgdmFsdWUgPSAnJ1xuICBwdWJsaWMgaXNGb2N1c2VkID0gZmFsc2VcbiAgcHVibGljIHNlbGVjdGlvblN0YXJ0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBzZWxlY3Rpb25FbmQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgZ2V0U2FuaXRpemVkVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0RWxlbWVudCcsIHtzdGF0aWM6IHRydWV9KSBpbnB1dEVsZW1lbnQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyXG4gICkge1xuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50KSByZXR1cm5cblxuICAgIHRoaXMuX3RhZ2lmeSA9IG5ldyBUYWdpZnkodGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudCwge1xuICAgICAgbW9kZTogJ21peCcsXG4gICAgICBlZGl0VGFnczogZmFsc2UsXG4gICAgICBlbmZvcmNlV2hpdGVsaXN0OiBmYWxzZSxcbiAgICAgIHBhdHRlcm46IC9AfCMvLFxuICAgICAgd2hpdGVsaXN0OiBbJ2ZpcnN0bmFtZScsICdsYXN0bmFtZScsICdlbWFpbCcsICdjb21wYW55J10sXG4gICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgYWRkOiAoZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coMSk7XG4gICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBsZXQgcmFuZ2VzID0gW107XG4gICAgICAgICAgLy8gbGV0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAvLyBpZiAoc2VsKSB7XG4gICAgICAgICAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbC5yYW5nZUNvdW50OyBpKyspIHtcbiAgICAgICAgICAvLyAgICAgcmFuZ2VzW2ldID0gc2VsLmdldFJhbmdlQXQoaSk7XG4gICAgICAgICAgLy8gICB9XG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gY29uc3QgdGV4dE5vZGUgPSBlLmRldGFpbC50YWcubmV4dFNpYmxpbmdcbiAgICAgICAgICAvLyBlLmRldGFpbC50YWcuaW5zZXJ0QWRqYWNlbnRUZXh0KCdhZnRlcmVuZCcsICdcXHUwMEEwJylcbiAgICAgICAgICAvLyBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKS5zZXRTdGFydCh0ZXh0Tm9kZSwgMClcbiAgICAgICAgICBjb25zb2xlLmxvZyhlLmRldGFpbC50YWdpZnkudmFsdWUpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGUuZGV0YWlsLnRhZ2lmeS5nZXRDbGVhblZhbHVlKCkpO1xuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2U6IChlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAvLyBjb25zdCB0ZXh0Tm9kZSA9IGUuZGV0YWlsLnRhZy5uZXh0U2libGluZ1xuICAgICAgICB9LFxuICAgICAgICAnZHJvcGRvd246c2VsZWN0JzogKGU6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKDMpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgIGUuZGV0YWlsLnRhZ2lmeS5ET00uaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgdGhpcy5fdGFnaWZ5Lm9uKCdpbnB1dCcsIChlOiBhbnkpID0+IHtcbiAgICAgIGlmKGUuZGV0YWlsLnRleHRDb250ZW50Lmxlbmd0aCA+IDEgKSB7XG4gICAgICAgIHRoaXMuX3RhZ2lmeS5kcm9wZG93bi5zaG93KGUuZGV0YWlsLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5fdGFnaWZ5Lm9uKCdhZGQnLCAoZTogYW55KSA9PiB7XG4gICAgICBlLmRldGFpbC50YWdpZnkuRE9NLmlucHV0LmZvY3VzKCk7XG4gICAgICBjb25zdCB0ZXh0Tm9kZSA9IGUuZGV0YWlsLnRhZy5uZXh0U2libGluZztcbiAgICAgIGlmIChkb2N1bWVudC5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKSkge1xuICAgICAgICBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKS5zZXRTdGFydCh0ZXh0Tm9kZSwgMSk7XG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIHRoaXMuX3RhZ2lmeS5vbignZm9jdXMnLCAoZTogYW55KSA9PiB7XG4gICAgLy8gICB0aGlzLl90YWdpZnkuZHJvcGRvd24uc2hvdyhlLmRldGFpbC52YWx1ZSk7XG4gICAgLy8gfSlcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gIH1cblxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XG4gIH1cblxuICBvbklucHV0KGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldDogSFRNTElucHV0RWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50XG4gICAgY29uc3QgY29udGVudCA9IHRhcmdldC50ZXh0Q29udGVudCB8fCAnJ1xuICAgIGNvbnN0IHZhbHVlQXJyYXkgPSBjb250ZW50LnNwbGl0KC9bICZuYnNwO10rLylcbiAgfVxuXG4gIG9uQmx1cihldmVudDogRm9jdXNFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldDogSFRNTElucHV0RWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50XG4gICAgY29uc3QgY29udGVudCA9IHRhcmdldC50ZXh0Q29udGVudCB8fCAnJ1xuICAgIGNvbnN0IHZpc2libGVWYWx1ZUFycmF5ID0gY29udGVudC5zcGxpdCgvW1xcc1xcdTAwQTBdKy8pXG4gICAgY29uc3Qgb3JpZ2luYWxWYWx1ZUFycmF5OiBzdHJpbmdbXSA9IFtdXG5cbiAgICB2aXNpYmxlVmFsdWVBcnJheS5mb3JFYWNoKChpdGVtLCBpbmRleCwgYXJyYXkpID0+IHtcbiAgICAgIGlmICh0aGlzLl93aGl0ZWxpc3QuZmluZCh2ID0+IHYgPT09IGl0ZW0pKSB7XG4gICAgICAgIHZpc2libGVWYWx1ZUFycmF5W2luZGV4XSA9IGA8ZGl2IGNsYXNzPVwidGFnXCIgdGl0bGU9XCJFcmljIENhcnRtYW5cIiBjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiIHRhYmluZGV4PVwiLTFcIj48ZGl2PiR7aXRlbX08L2Rpdj48ZGl2PjwvZGl2PjwvZGl2PiZuYnNwO2BcbiAgICAgICAgb3JpZ2luYWxWYWx1ZUFycmF5LnB1c2goYHske2l0ZW19fWApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcmlnaW5hbFZhbHVlQXJyYXkucHVzaChpdGVtKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLnRyYW5zZm9ybVZhbHVlKHZpc2libGVWYWx1ZUFycmF5KVxuICAgIHRoaXMudXBkYXRlVmFsdWUob3JpZ2luYWxWYWx1ZUFycmF5KVxuXG4gICAgLy8gdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZVxuXG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZXZlbnQpXG4gIH1cblxuICB0cmFuc2Zvcm1WYWx1ZShhcnJheTogc3RyaW5nW10pIHtcbiAgICB0aGlzLnZhbHVlID0gYXJyYXkuam9pbignICcpXG4gIH1cblxuICB1cGRhdGVWYWx1ZShhcnJheTogc3RyaW5nW10pIHtcbiAgICBjb25zb2xlLmxvZyhhcnJheS5qb2luKCcgJykpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVNlbGVjdGlvbihldmVudDogYW55KSB7XG4gICAgY29uc3Qgc2VsZWN0aW9ucyA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgIGNvbnNvbGUubG9nKHNlbGVjdGlvbnMpO1xuICAgIGNvbnN0IHN0YXJ0ID0gc2VsZWN0aW9ucz8uYW5jaG9yT2Zmc2V0IHx8IDA7XG4gICAgY29uc3QgZW5kID0gc2VsZWN0aW9ucz8uZm9jdXNPZmZzZXQgfHwgMDtcblxuICAgIGlmIChzdGFydCA+IGVuZCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25TdGFydCA9IGVuZDtcbiAgICAgIHRoaXMuc2VsZWN0aW9uRW5kID0gc3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnQgPSBzdGFydDtcbiAgICAgIHRoaXMuc2VsZWN0aW9uRW5kID0gZW5kO1xuICAgIH1cbiAgfVxuXG4gIG9uRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICAvLyB0aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVudClcbiAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWVcbiAgfVxuXG4gIGluc2VydFRhZyhyb3c6IHN0cmluZykge1xuICAgIGlmICgodGhpcy5zZWxlY3Rpb25TdGFydCB8fCB0aGlzLnNlbGVjdGlvblN0YXJ0ID09PSAwKSAmJiAodGhpcy5zZWxlY3Rpb25FbmQgfHwgdGhpcy5zZWxlY3Rpb25FbmQgPT09IDApKSB7XG4gICAgICBjb25zdCBmaXJzdFRleHQgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMuc2VsZWN0aW9uU3RhcnQpXG4gICAgICBjb25zdCBzZWNvbmRUZXh0ID0gdGhpcy52YWx1ZS5zbGljZSh0aGlzLnNlbGVjdGlvbkVuZClcblxuICAgICAgdGhpcy52YWx1ZSA9IGZpcnN0VGV4dCArIHJvdyArIHNlY29uZFRleHQ7XG4gICAgfVxuICB9XG5cbiAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc29sZS5sb2coJ2FzZCcpO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwibXJ4LWZvcm11bGEtZWRpdG9yXCJcbj5cbiAgPGRpdiBjbGFzcz1cIm1yeC1mb3JtdWxhLWVkaXRvcl9fd3JhcHBlclwiPlxuICAgIDxkaXZcbiAgICAgIFtpbm5lckhUTUxdPVwidmFsdWUgfCBzYWZlXCJcbiAgICAgIGNsYXNzPVwibXJ4LWZvcm11bGEtZWRpdG9yX19ib3hcIlxuICAgICAgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXG4gICAgICB0YWJpbmRleD1cIjBcIiBkYXRhLXBsYWNlaG9sZGVyPVwiJlplcm9XaWR0aFNwYWNlO1wiIGFyaWEtcGxhY2Vob2xkZXI9XCJcIiByb2xlPVwidGV4dGJveFwiIGF1dG9jYXBpdGFsaXplPVwiZmFsc2VcIlxuICAgICAgYXV0b2NvcnJlY3Q9XCJvZmZcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBhcmlhLWF1dG9jb21wbGV0ZT1cImJvdGhcIiBhcmlhLW11bHRpbGluZT1cInRydWVcIlxuICAgICAgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50KVwiXG4gICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAgIChzZWxlY3Rpb25jaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgPjwvZGl2PlxuICAgIDwhLS0gICAgPHRleHRhcmVhICNpbnB1dEVsZW1lbnQgbmFtZT0nbWl4JyBjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiPmFzZFtbe1widmFsdWVcIjpcImZpcnN0bmFtZVwifV1dICBbW3tcInZhbHVlXCI6XCJlbWFpbFwifV1dIGFzZGFzZGFzZCBhc2RbW3tcInZhbHVlXCI6XCJjb21wYW55XCJ9XV08L3RleHRhcmVhPi0tPlxuICAgIDwhLS0gICAgPGlucHV0LS0+XG4gICAgPCEtLSAgICAgIGF1dG9jb21wbGV0ZT1cIm5vcGVcIi0tPlxuICAgIDwhLS0gICAgICAjaW5wdXRFbGVtZW50LS0+XG4gICAgPCEtLSAgICAgIFt0eXBlXT1cIid0ZXh0J1wiLS0+XG4gICAgPCEtLSAgICAgIFtpZF09XCJ1dWlkXCItLT5cbiAgICA8IS0tICAgICAgW25nTW9kZWxdPVwidmFsdWVcIi0tPlxuICAgIDwhLS0gICAgICBbdGl0bGVdPVwicGxhY2Vob2xkZXIgfHwgJydcIi0tPlxuICAgIDwhLS0gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIi0tPlxuICAgIDwhLS0gICAgICBbcmVhZE9ubHldPVwicmVhZG9ubHlcIi0tPlxuICAgIDwhLS0gICAgICBbcGxhY2Vob2xkZXJdPVwiIWRpc2FibGVkICYmIHBsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiAnJ1wiLS0+XG4gICAgPCEtLSAgICAgIFttYXNrXT1cIm1hc2tcIi0tPlxuICAgIDwhLS0gICAgICBbcHJlZml4XT1cIm1hc2tQcmVmaXhcIi0tPlxuICAgIDwhLS0gICAgICBbc2hvd01hc2tUeXBlZF09XCJzaG93TWFza1R5cGVkXCItLT5cbiAgICA8IS0tICAgICAgW2Ryb3BTcGVjaWFsQ2hhcmFjdGVyc109XCJtYXNrRHJvcFNwZWNpYWxDaGFyYWN0ZXJzXCItLT5cbiAgICA8IS0tICAgICAgW21pbmxlbmd0aF09XCJtaW5sZW5ndGggPiAwICYmIHJlc3RyaWN0SW5wdXQgPyBtaW5sZW5ndGggOiBudWxsXCItLT5cbiAgICA8IS0tICAgICAgW21heGxlbmd0aF09XCJtYXhsZW5ndGggPiAwICYmIHJlc3RyaWN0SW5wdXQgPyBtYXhsZW5ndGggOiBudWxsXCItLT5cbiAgICA8IS0tICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlVmFsdWUoJGV2ZW50KVwiLS0+XG4gICAgPCEtLSAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCItLT5cbiAgICA8IS0tICAgIC8+LS0+XG5cbiAgICA8IS0tICAgIDxtcngtY2hhcnMtbGVmdC0tPlxuICAgIDwhLS0gICAgICAqbmdJZj1cIiFkaXNhYmxlZCAmJiBtYXhsZW5ndGhcIi0tPlxuICAgIDwhLS0gICAgICBbdmFsdWVdPVwidmFsdWVcIi0tPlxuICAgIDwhLS0gICAgICBbbWF4bGVuZ3RoXT1cIm1heGxlbmd0aFwiLS0+XG4gICAgPCEtLSAgICA+PC9tcngtY2hhcnMtbGVmdD4tLT5cblxuICAgIDxkaXYgY2xhc3M9XCJtcngtZm9ybXVsYS1lZGl0b3JfX3BvcHVwXCIgKm5nSWY9XCJpc0ZvY3VzZWRcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtcngtZm9ybXVsYS1lZGl0b3JfX3BvcHVwLS1yb3dcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgcm93IG9mIF93aGl0ZWxpc3RcIlxuICAgICAgICAoY2xpY2spPVwiaW5zZXJ0VGFnKHJvdylcIlxuICAgICAgPlxuICAgICAgICB7eyByb3cgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tICA8bXJ4LWVycm9yLW1lc3NhZ2UtLT5cbiAgPCEtLSAgICAqbmdJZj1cImdldEludmFsaWQgJiYgZ2V0SW52YWxpZE1lc3NhZ2VcIi0tPlxuICA8IS0tICAgIFtpbnZhbGlkTWVzc2FnZV09XCJnZXRJbnZhbGlkTWVzc2FnZVwiLS0+XG4gIDwhLS0gID48L21yeC1lcnJvci1tZXNzYWdlPi0tPlxuXG4gIDwhLS0gIDxtcngtc2F2ZS1zdGF0ZSBbaWRdPVwidXVpZFwiIFtmaWVsZHNdPVwiZmllbGRzXCI+PC9tcngtc2F2ZS1zdGF0ZT4tLT5cbjwvZGl2PlxuIl19
@@ -0,0 +1,50 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormulaEditorComponent } from './formula-editor.component';
4
+ import { CharsLeftModule } from '../../chars-left/chars-left.module';
5
+ import { ErrorMessageModule } from '../../error-message/error-message.module';
6
+ import { FormsModule } from '@angular/forms';
7
+ import { NgxMaskModule } from 'ngx-mask';
8
+ import { SaveStateModule } from '../../save-state/save-state.module';
9
+ import { SafeModule } from '../../../pipes/safe/safe.module';
10
+ import * as i0 from "@angular/core";
11
+ export class FormulaEditorModule {
12
+ }
13
+ FormulaEditorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FormulaEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
+ FormulaEditorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FormulaEditorModule, declarations: [FormulaEditorComponent], imports: [CommonModule,
15
+ CharsLeftModule,
16
+ ErrorMessageModule,
17
+ FormsModule,
18
+ NgxMaskModule,
19
+ SaveStateModule,
20
+ SafeModule], exports: [FormulaEditorComponent] });
21
+ FormulaEditorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FormulaEditorModule, imports: [[
22
+ CommonModule,
23
+ CharsLeftModule,
24
+ ErrorMessageModule,
25
+ FormsModule,
26
+ NgxMaskModule,
27
+ SaveStateModule,
28
+ SafeModule
29
+ ]] });
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FormulaEditorModule, decorators: [{
31
+ type: NgModule,
32
+ args: [{
33
+ declarations: [
34
+ FormulaEditorComponent
35
+ ],
36
+ imports: [
37
+ CommonModule,
38
+ CharsLeftModule,
39
+ ErrorMessageModule,
40
+ FormsModule,
41
+ NgxMaskModule,
42
+ SaveStateModule,
43
+ SafeModule
44
+ ],
45
+ exports: [
46
+ FormulaEditorComponent
47
+ ]
48
+ }]
49
+ }] });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXVsYS1lZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vZm9ybXVsYS1lZGl0b3IvZm9ybXVsYS1lZGl0b3IubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQXFCN0QsTUFBTSxPQUFPLG1CQUFtQjs7Z0hBQW5CLG1CQUFtQjtpSEFBbkIsbUJBQW1CLGlCQWY1QixzQkFBc0IsYUFHdEIsWUFBWTtRQUNaLGVBQWU7UUFDZixrQkFBa0I7UUFDbEIsV0FBVztRQUNYLGFBQWE7UUFDYixlQUFlO1FBQ2YsVUFBVSxhQUdWLHNCQUFzQjtpSEFHYixtQkFBbUIsWUFickI7WUFDUCxZQUFZO1lBQ1osZUFBZTtZQUNmLGtCQUFrQjtZQUNsQixXQUFXO1lBQ1gsYUFBYTtZQUNiLGVBQWU7WUFDZixVQUFVO1NBQ1g7MkZBS1UsbUJBQW1CO2tCQWpCL0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osc0JBQXNCO3FCQUN2QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsVUFBVTtxQkFDWDtvQkFDRCxPQUFPLEVBQUU7d0JBQ1Asc0JBQXNCO3FCQUN2QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXVsYUVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vZm9ybXVsYS1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IENoYXJzTGVmdE1vZHVsZSB9IGZyb20gJy4uLy4uL2NoYXJzLWxlZnQvY2hhcnMtbGVmdC5tb2R1bGUnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlTW9kdWxlIH0gZnJvbSAnLi4vLi4vZXJyb3ItbWVzc2FnZS9lcnJvci1tZXNzYWdlLm1vZHVsZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5neE1hc2tNb2R1bGUgfSBmcm9tICduZ3gtbWFzayc7XG5pbXBvcnQgeyBTYXZlU3RhdGVNb2R1bGUgfSBmcm9tICcuLi8uLi9zYXZlLXN0YXRlL3NhdmUtc3RhdGUubW9kdWxlJztcbmltcG9ydCB7IFNhZmVNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9zYWZlL3NhZmUubW9kdWxlJztcblxuXG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEZvcm11bGFFZGl0b3JDb21wb25lbnRcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBDaGFyc0xlZnRNb2R1bGUsXG4gICAgRXJyb3JNZXNzYWdlTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5neE1hc2tNb2R1bGUsXG4gICAgU2F2ZVN0YXRlTW9kdWxlLFxuICAgIFNhZmVNb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEZvcm11bGFFZGl0b3JDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtdWxhRWRpdG9yTW9kdWxlIHsgfVxuIl19
@@ -67,6 +67,7 @@ export class InputTelComponent {
67
67
  }
68
68
  set onlyCountries(val) {
69
69
  this._onlyCountries = val;
70
+ this._detector.detectChanges();
70
71
  this._initData();
71
72
  }
72
73
  writeValue(outsideValue) {
@@ -402,4 +403,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
402
403
  }], modelChange: [{
403
404
  type: Output
404
405
  }] } });
405
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdGVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2lucHV0LXRlbC9pbnB1dC10ZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vaW5wdXQtdGVsL2lucHV0LXRlbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFVBQVUsRUFDVix1QkFBdUIsRUFDdkIsU0FBUyxFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUNoRCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBcUIsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUd0RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0UsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxpQkFBaUIsRUFBc0IsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7QUFrQmpGLE1BQU0sT0FBTyxpQkFBaUI7SUE4RDVCLFlBQ1UsU0FBNEIsRUFDakIsTUFBYztRQUR6QixjQUFTLEdBQVQsU0FBUyxDQUFtQjtRQTlEOUIsbUJBQWMsR0FBcUIsRUFBRSxDQUFDO1FBRzlDLGFBQWE7UUFDTixT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XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiwgTE9DQUxFX0lELCBJbmplY3RcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZ2V0QXNZb3VUeXBlLCBnZXRFeGFtcGxlLCBQYXJzZWRQaG9uZU51bWJlciB9IGZyb20gJ2F3ZXNvbWUtcGhvbmVudW1iZXInO1xyXG5pbXBvcnQgeyBDb3VudHJpZXNJU08gfSBmcm9tICcuL2RhdGEvY291bnRyeS1pc28uZW51bSc7XHJcbmltcG9ydCB7IFNlYXJjaENvdW50cnlGaWVsZCB9IGZyb20gJy4vZGF0YS9zZWFyY2gtY291bnRyeS1maWVsZC5lbnVtJztcclxuaW1wb3J0IHsgUGhvbmVOdW1iZXJGb3JtYXRUeXBlIH0gZnJvbSAnLi9kYXRhL3Bob25lLW51bWJlci1mb3JtYXQuZW51bSc7XHJcbmltcG9ydCB7IENvdW50cnksIElucHV0VmFsdWUgfSBmcm9tICcuL21vZGVscy9jb3VudHJ5Lm1vZGVsJztcclxuaW1wb3J0IHsgY291bnRyeURhdGEgfSBmcm9tICcuL2RhdGEvYWxsLWNvdW50cmllcyc7XHJcbmltcG9ydCB7IGRyb3Bkb3duT3BlbiwgZHJvcGRvd25DbG9zZSwgZmxhZ1BsYWNlaG9sZGVyIH0gZnJvbSAnLi9hc3NldHMvYmFzZTY0JztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcclxuaW1wb3J0IHsgRmllbGQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IElucHV0VGVsU2l6ZXNFbnVtLCBJbnB1dFRlbFNpemVzVHlwZXMgfSBmcm9tICcuL2VudW1zL2lucHV0LXBob25lLmVudW0nO1xyXG5pbXBvcnQgeyBJbnB1dFBob25lVmFsdWVXaXRoSWQgfSBmcm9tICcuLi9pbnB1dC1waG9uZS9lbnVtcy9pbnB1dC1waG9uZS5lbnVtJztcclxuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3VudHJpZXNSdXNMYWJlbCB9IGZyb20gJy4vZGF0YS9jb3VudHJpZXMtcnVzLWxhYmVsLmVudW0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtcngtaW5wdXQtdGVsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtdGVsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC10ZWwuY29tcG9uZW50Lmxlc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0VGVsQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIElucHV0VGVsQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XHJcbiAgcHJpdmF0ZSBfb25seUNvdW50cmllczogKENvdW50cmllc0lTTylbXSA9IFtdO1xyXG4gIHByaXZhdGUgX2xvY2FsZTogc3RyaW5nXHJcblxyXG4gIC8vIFNBVkUgU1RBVEVcclxuICBwdWJsaWMgdXVpZDogc3RyaW5nID0gdXVpZHY0KCk7XHJcbiAgQElucHV0KCkgcHVibGljIGZpZWxkczogRmllbGRbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgcmVhZG9ubHkgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgbWF4TGVuZ3RoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tQ2xhc3NlcyA9ICcnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzaXplOiBJbnB1dFRlbFNpemVzVHlwZXMgPSAnbGFyZ2UnO1xyXG5cclxuICBASW5wdXQoKSBjc3NDbGFzczogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgcHJlZmVycmVkQ291bnRyaWVzOiAoQ291bnRyaWVzSVNPKVtdID0gW107XHJcbiAgQElucHV0KCkgZW5hYmxlQXV0b0NvdW50cnlTZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGVuYWJsZVBsYWNlaG9sZGVyOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjdXN0b21QbGFjZWhvbGRlcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgbnVtYmVyRm9ybWF0OiBQaG9uZU51bWJlckZvcm1hdFR5cGUgPSAnaW50ZXJuYXRpb25hbCc7XHJcbiAgQElucHV0KCkgc2VhcmNoQ291bnRyeUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWFyY2hDb3VudHJ5RmllbGQ6IFNlYXJjaENvdW50cnlGaWVsZCA9IFNlYXJjaENvdW50cnlGaWVsZC5BbGw7XHJcbiAgQElucHV0KCkgc2VhcmNoQ291bnRyeVBsYWNlaG9sZGVyOiBzdHJpbmcgPSAn0J/QvtC40YHQuiDQv9C+INGB0YLRgNCw0L3QsNC8JztcclxuICBASW5wdXQoKSBzZWxlY3RGaXJzdENvdW50cnk6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHBob25lVmFsaWRhdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgaW5wdXRJZDogc3RyaW5nID0gJ3Bob25lJztcclxuICBASW5wdXQoKSBzZWxlY3RlZENvdW50cnlJU086IENvdW50cmllc0lTTyB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHNlcGFyYXRlRGlhbENvZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBhdXRvRGVhbENvZGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBhdXRvQ2xvc2VEcm9wZG93biA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoJ29ubHlDb3VudHJpZXMnKVxyXG4gIHB1YmxpYyBzZXQgb25seUNvdW50cmllcyh2YWw6IChDb3VudHJpZXNJU08pW10pIHtcclxuICAgIHRoaXMuX29ubHlDb3VudHJpZXMgPSB2YWxcclxuICAgIHRoaXMuX2luaXREYXRhKClcclxuICB9XHJcblxyXG4gIC8vIFZBTElEQVRJT05cclxuICBASW5wdXQoKSBwdWJsaWMgaW52YWxpZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpbnZhbGlkTWVzc2FnZTogc3RyaW5nIHwgc3RyaW5nW10gPSAnJztcclxuICBASW5wdXQoKSBwdWJsaWMgaW52YWxpZFBob25lTWVzc2FnZTogc3RyaW5nID0gJ9Cd0LXQutC+0YDRgNC10LrRgtC90L7QtSDQt9C90LDRh9C10L3QuNC1JztcclxuICBASW5wdXQoKSBwdWJsaWMgY2hlY2tJbnZhbGlkOiB0cnVlIHwgZmFsc2UgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25Db21wb25lbnQnKSBkcm9wZG93bkNvbXBvbmVudCE6IERyb3Bkb3duQ29tcG9uZW50O1xyXG5cclxuICBAT3V0cHV0KCkgY2hhbmdlZDogRXZlbnRFbWl0dGVyPElucHV0VmFsdWU+ID0gbmV3IEV2ZW50RW1pdHRlcjxJbnB1dFZhbHVlPigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgbW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJbnB1dFBob25lVmFsdWVXaXRoSWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJbnB1dFBob25lVmFsdWVXaXRoSWQ+KCk7XHJcblxyXG4gIHB1YmxpYyBhbGxDb3VudHJpZXM6IChDb3VudHJ5KVtdO1xyXG4gIHB1YmxpYyBzZWxlY3RlZENvdW50cnk6IENvdW50cnk7XHJcbiAgcHVibGljIGNvdW50cmllc1RvU2hvdzogKENvdW50cnkpW107XHJcbiAgcHVibGljIHByZWZlcnJlZENvdW50cmllc0xpc3Q6IChDb3VudHJ5KVtdO1xyXG4gIHB1YmxpYyBzZWFyY2hGaWx0ZXI6IHN0cmluZztcclxuICBwdWJsaWMgc2Nyb2xsVGltZW91dDogYW55O1xyXG4gIHB1YmxpYyBwaG9uZU51bWJlcjogYW55O1xyXG4gIHB1YmxpYyBpc0ZvY3VzZWQ6IGJvb2xlYW47XHJcbiAgcHVibGljIGlzSW5wdXRWYWxpZDogYm9vbGVhbjtcclxuICBwdWJsaWMgaXNEcm9wZG93bk9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcGFyc2VkUGhvbmVOdW1iZXI/OiBQYXJzZWRQaG9uZU51bWJlcjtcclxuICBwdWJsaWMgaW5uZXJJbnZhbGlkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlubmVySW52YWxpZE1lc3NhZ2U6IHN0cmluZyA9ICcnXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfZGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZTogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICB0aGlzLmFsbENvdW50cmllcyA9IFtdO1xyXG4gICAgdGhpcy5jb3VudHJpZXNUb1Nob3cgPSB0aGlzLmFsbENvdW50cmllcztcclxuICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gdGhpcy5nZXREZWZhdWx0Q291bnRyeSgpO1xyXG4gICAgdGhpcy5wcmVmZXJyZWRDb3VudHJpZXNMaXN0ID0gW107XHJcbiAgICB0aGlzLnNlYXJjaEZpbHRlciA9ICcnO1xyXG4gICAgdGhpcy5waG9uZU51bWJlciA9IG51bGw7XHJcbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0lucHV0VmFsaWQgPSB0cnVlO1xyXG4gICAgdGhpcy5fbG9jYWxlID0gbG9jYWxlO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZShvdXRzaWRlVmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKG91dHNpZGVWYWx1ZSkge1xyXG4gICAgICB0aGlzLnBob25lTnVtYmVyID0gb3V0c2lkZVZhbHVlO1xyXG4gICAgICB0aGlzLmZvcm1hdFBob25lTnVtYmVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2hhbmdlID0gKHZhbHVlOiBhbnkpID0+IHtcclxuICB9O1xyXG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4ge1xyXG4gIH07XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5faW5pdERhdGEoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdERhdGEoKSB7XHJcbiAgICB0aGlzLmdlbmVyYXRlQ291bnRyeURhdGEoKTtcclxuICAgIHRoaXMuc2V0Q291bnRyaWVzVG9TaG93KCk7XHJcbiAgICB0aGlzLnNldFByZWZlcnJlZENvdW50cmllcygpO1xyXG4gICAgdGhpcy5zZXREZWZhdWx0U2VsZWN0ZWRDb3VudHJ5KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF92YWxpZGF0aW9uKHBhcnNlZE51bWJlcjogUGFyc2VkUGhvbmVOdW1iZXIpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3RlZENvdW50cnkpIHJldHVybiBmYWxzZVxyXG4gICAgY29uc3Qgc2VsZWN0ZWRDb3VudHJ5ID0gdGhpcy5maW5kQ291bnRyeUJ5SXNvMih0aGlzLnNlbGVjdGVkQ291bnRyeS5pc28yKTtcclxuXHJcbiAgICBpZiAocGFyc2VkTnVtYmVyLm51bWJlcj8uaW50ZXJuYXRpb25hbCB8fCBwYXJzZWROdW1iZXIubnVtYmVyPy5uYXRpb25hbCkge1xyXG4gICAgICBpZiAocGFyc2VkTnVtYmVyLm51bWJlci5pbnRlcm5hdGlvbmFsKSB7XHJcbiAgICAgICAgY29uc3QgcGhvbmUgPSBwYXJzZWROdW1iZXIubnVtYmVyLmludGVybmF0aW9uYWwudHJpbSgpXHJcbiAgICAgICAgY29uc3QgYSA9IHBob25lLnN0YXJ0c1dpdGgoJysnKSA/IHBob25lLnN1YnN0cmluZygxKS50cmltKCkgOiBwaG9uZTtcclxuICAgICAgICBjb25zdCBiID0gYS5zdGFydHNXaXRoKHNlbGVjdGVkQ291bnRyeS5kaWFsQ29kZSkgPyBhLnN1YnN0cmluZyhzZWxlY3RlZENvdW50cnkuZGlhbENvZGUubGVuZ3RoKS50cmltKCkgOiBhO1xyXG5cclxuICAgICAgICByZXR1cm4gQm9vbGVhbihzZWxlY3RlZENvdW50cnk/LmFyZWFDb2Rlcz8uZmlsdGVyKChjb2RlOiBzdHJpbmcpID0+ICBiLnN0YXJ0c1dpdGgoY29kZSkpLmxlbmd0aCk7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VkTnVtYmVyLm51bWJlci5uYXRpb25hbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZ2V0Q2xhc3NlcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke0lucHV0VGVsU2l6ZXNFbnVtW3RoaXMuc2l6ZV19ICR7dGhpcy5jdXN0b21DbGFzc2VzfSAke3RoaXMuY2hlY2tWYWxpZENsYXNzZXN9YDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNWYWxpZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc0ludmFsaWRNZXNzYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5pbnZhbGlkTWVzc2FnZSB8fCAhIXRoaXMuaW52YWxpZE1lc3NhZ2UubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjaGVja1ZhbGlkQ2xhc3NlcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tJbnZhbGlkID09PSBmYWxzZSA/XHJcbiAgICAgICdtcngtaW5wdXQtY2hlY2tlZC1zdWNjZXNzJyA6XHJcbiAgICAgIHRoaXMuY2hlY2tJbnZhbGlkID09PSB0cnVlID8gJ21yeC1pbnB1dC1jaGVja2VkLWVycm9yJyA6ICcnO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyB0b2dnbGVEcm9wZG93bigpIHtcclxuICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSAhdGhpcy5pc0Ryb3Bkb3duT3BlbjtcclxuICAgIHRoaXMuZHJvcGRvd25Db21wb25lbnQuaGlkZSgpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2VuZXJhdGVDb3VudHJ5RGF0YSgpIHtcclxuICAgIHRoaXMuYWxsQ291bnRyaWVzID0gY291bnRyeURhdGEubWFwKGNvbiA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbmFtZTogdGhpcy5fbG9jYWxlID09PSAncnUnID8gY29uWzVdLnRvU3RyaW5nKCkgOiBjb25bMF0udG9TdHJpbmcoKSxcclxuICAgICAgICBpc28yOiBjb25bMV0udG9TdHJpbmcoKSxcclxuICAgICAgICBkaWFsQ29kZTogY29uWzJdLnRvU3RyaW5nKCksXHJcbiAgICAgICAgcHJpb3JpdHk6ICtjb25bM10gfHwgMCxcclxuICAgICAgICBhcmVhQ29kZXM6IChjb25bNF0gYXMgc3RyaW5nW10pIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICBodG1sSWQ6IGAke3RoaXMudXVpZH0tJHtjb25bMV0udG9TdHJpbmcoKX1gLFxyXG4gICAgICAgIGZsYWdDbGFzczogYGZsYWdfXyR7Y29uWzFdLnRvU3RyaW5nKCl9YCxcclxuICAgICAgICBwbGFjZUhvbGRlcjogJycsXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNvdW50cmllc1RvU2hvdyA9IHRoaXMuYWxsQ291bnRyaWVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERlZmF1bHRDb3VudHJ5KCk6IENvdW50cnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJ25hbWUnOiAnJyxcclxuICAgICAgJ2lzbzInOiAnJyxcclxuICAgICAgJ2RpYWxDb2RlJzogJycsXHJcbiAgICAgICdwcmlvcml0eSc6IDAsXHJcbiAgICAgICdodG1sSWQnOiAnJyxcclxuICAgICAgJ2ZsYWdDbGFzcyc6IGZsYWdQbGFjZWhvbGRlcixcclxuICAgICAgJ3BsYWNlSG9sZGVyJzogJycsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRJbnRlbE51bWJlcihudW1iZXI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5hdXRvRGVhbENvZGUpIHtcclxuICAgICAgcmV0dXJuIG51bWJlclxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXhUb1NwbGl0ID0gbnVtYmVyLmluZGV4T2YoJyAnKSArIDE7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlcGFyYXRlRGlhbENvZGUgPyBudW1iZXIuc3Vic3RyaW5nKGluZGV4VG9TcGxpdCkgOiBudW1iZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZm9ybWF0UGhvbmVOdW1iZXIoKSB7XHJcbiAgICBjb25zdCBheXQgPSBnZXRBc1lvdVR5cGUodGhpcy5zZWxlY3RlZENvdW50cnk/LmlzbzIudG9VcHBlckNhc2UoKSk7XHJcbiAgICBheXQucmVzZXQodGhpcy5waG9uZU51bWJlcik7XHJcbiAgICBjb25zdCByZXM6IFBhcnNlZFBob25lTnVtYmVyID0gYXl0LmdldFBob25lTnVtYmVyKCk7XHJcblxyXG4gICAgdGhpcy5wYXJzZWRQaG9uZU51bWJlciA9IHJlc1xyXG5cclxuICAgIGlmICh0aGlzLm51bWJlckZvcm1hdCA9PT0gJ2ludGVybmF0aW9uYWwnKSB7XHJcbiAgICAgIHRoaXMucGhvbmVOdW1iZXIgPSByZXMubnVtYmVyPy5pbnRlcm5hdGlvbmFsID8gdGhpcy5mb3JtYXRJbnRlbE51bWJlcihyZXMubnVtYmVyLmludGVybmF0aW9uYWwpIDogdGhpcy5waG9uZU51bWJlcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGhvbmVOdW1iZXIgPSByZXMubnVtYmVyPy5uYXRpb25hbCA/IHJlcy5udW1iZXIubmF0aW9uYWwgOiB0aGlzLnBob25lTnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm51bWJlckZvcm1hdCA9PT0gJ2ludGVybmF0aW9uYWwnKSB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZUF1dG9Db3VudHJ5U2VsZWN0ICYmIHJlcy5yZWdpb25Db2RlICE9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5Py5pc28yLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICByZXMucmVnaW9uQ29kZSAmJiAodGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmZpbmRDb3VudHJ5QnlJc28yKHJlcy5yZWdpb25Db2RlKSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZUF1dG9Db3VudHJ5U2VsZWN0ICYmIHJlcy5yZWdpb25Db2RlICE9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5Py5pc28yLnRvVXBwZXJDYXNlKCkpIHtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXJlcy52YWxpZCB8fCByZXMucmVnaW9uQ29kZSAhPSB0aGlzLnNlbGVjdGVkQ291bnRyeT8uaXNvMi50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgIHRoaXMuaXNJbnB1dFZhbGlkID0gdGhpcy5fdmFsaWRhdGlvbihyZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc0lucHV0VmFsaWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlYXJjaEZpbHRlckNoYW5nZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc2Nyb2xsVGltZW91dCkgY2xlYXJUaW1lb3V0KHRoaXMuc2Nyb2xsVGltZW91dCk7XHJcblxyXG4gICAgbGV0IGZpbHRlcmVkOiBDb3VudHJ5W107XHJcbiAgICBpZiAodGhpcy5zZWFyY2hDb3VudHJ5RmllbGQgPT0gJ25hbWUnKSB7XHJcbiAgICAgIGZpbHRlcmVkID0gdGhpcy5jb3VudHJpZXNUb1Nob3cuZmlsdGVyKGNvbiA9PiBjb24ubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodGhpcy5zZWFyY2hGaWx0ZXIudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaENvdW50cnlGaWVsZCA9PSAnaXNvMicpIHtcclxuICAgICAgZmlsdGVyZWQgPSB0aGlzLmNvdW50cmllc1RvU2hvdy5maWx0ZXIoY29uID0+IGNvbi5pc28yLnN0YXJ0c1dpdGgodGhpcy5zZWFyY2hGaWx0ZXIudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaENvdW50cnlGaWVsZCA9PSAnZGlhbENvZGUnKSB7XHJcbiAgICAgIGZpbHRlcmVkID0gdGhpcy5jb3VudHJpZXNUb1Nob3cuZmlsdGVyKGNvbiA9PiBjb24uZGlhbENvZGUuc3RhcnRzV2l0aCh0aGlzLnNlYXJjaEZpbHRlcikpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZmlsdGVyZWQgPSB0aGlzLmNvdW50cmllc1RvU2hvdy5maWx0ZXIoY29uID0+IGNvbi5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCh0aGlzLnNlYXJjaEZpbHRlci50b0xvd2VyQ2FzZSgpKSB8fCBjb24uZGlhbENvZGUuc3RhcnRzV2l0aCh0aGlzLnNlYXJjaEZpbHRlcikgfHwgY29uLmlzbzIuc3RhcnRzV2l0aCh0aGlzLnNlYXJjaEZpbHRlci50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmaWx0ZXJlZC5sZW5ndGgpIHJldHVybjtcclxuICAgIHRoaXMuc2Nyb2xsVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBlbDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmlsdGVyZWRbMF0uaHRtbElkKTtcclxuICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgIH0sIDEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kQ291bnRyeUJ5SXNvMihpc28yOiBzdHJpbmcpOiBDb3VudHJ5IHwgYW55IHtcclxuICAgIHJldHVybiB0aGlzLmNvdW50cmllc1RvU2hvdy5maW5kKGNvbiA9PiBjb24uaXNvMiA9PSBpc28yLnRvTG93ZXJDYXNlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERlZmF1bHRTZWxlY3RlZENvdW50cnkoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZENvdW50cnlJU08pIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmZpbmRDb3VudHJ5QnlJc28yKHRoaXMuc2VsZWN0ZWRDb3VudHJ5SVNPKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RGaXJzdENvdW50cnkpIHtcclxuICAgICAgaWYgKHRoaXMucHJlZmVycmVkQ291bnRyaWVzTGlzdC5sZW5ndGgpIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gdGhpcy5wcmVmZXJyZWRDb3VudHJpZXNMaXN0WzBdO1xyXG4gICAgICBlbHNlIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gdGhpcy5jb3VudHJpZXNUb1Nob3dbMF07XHJcbiAgICB9IGVsc2UgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmdldERlZmF1bHRDb3VudHJ5KCk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvdW50cnkucGxhY2VIb2xkZXIgPSB0aGlzLmdldFBsYWNlSG9sZGVyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q291bnRyaWVzVG9TaG93KCkge1xyXG4gICAgaWYgKHRoaXMuX29ubHlDb3VudHJpZXMubGVuZ3RoID09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB0ZW1wOiBhbnkgPSBbXTtcclxuICAgIGZvciAobGV0IGNvdW50cnkgb2YgdGhpcy5fb25seUNvdW50cmllcykge1xyXG4gICAgICB0ZW1wLnB1c2godGhpcy5hbGxDb3VudHJpZXMuZmluZChjb24gPT4gY29uLmlzbzIgPT0gY291bnRyeSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY291bnRyaWVzVG9TaG93ID0gdGVtcDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRQcmVmZXJyZWRDb3VudHJpZXMoKSB7XHJcbiAgICBmb3IgKGxldCBjb3VudHJ5IG9mIHRoaXMucHJlZmVycmVkQ291bnRyaWVzKSB7XHJcbiAgICAgIGNvbnN0IHRlbXAgPSB0aGlzLmNvdW50cmllc1RvU2hvdy5maW5kKGNvbiA9PiBjb24uaXNvMiA9PSBjb3VudHJ5KTtcclxuICAgICAgaWYgKHRlbXApIHRoaXMucHJlZmVycmVkQ291bnRyaWVzTGlzdC5wdXNoKHRlbXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ291bnRyeVNlbGVjdChjb3VudHJ5OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm5cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IGNvdW50cnk7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ291bnRyeS5wbGFjZUhvbGRlciA9IHRoaXMuZ2V0UGxhY2VIb2xkZXIoKTtcclxuICAgIHRoaXMuc2VhcmNoRmlsdGVyID0gJyc7XHJcbiAgICB0aGlzLnBob25lTnVtYmVyID0gJyc7XHJcbiAgICB0aGlzLmlzSW5wdXRWYWxpZCA9IHRydWU7XHJcbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmF1dG9DbG9zZURyb3Bkb3duKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlRHJvcGRvd24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TnVtYmVyRXhhbXBsZSgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZm9ybWF0RXhhbXBsZU51bWJlciA9IChudW1iZXI6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgICAgIHJldHVybiBudW1iZXJcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZXhhbXBsZU51bWJlciA9IHRoaXMubnVtYmVyRm9ybWF0ID09PSAnaW50ZXJuYXRpb25hbCcgP1xyXG4gICAgICB0aGlzLmZvcm1hdEludGVsTnVtYmVyKGdldEV4YW1wbGUodGhpcy5zZWxlY3RlZENvdW50cnkuaXNvMi50b1VwcGVyQ2FzZSgpLCAnbW9iaWxlJykubnVtYmVyPy5pbnRlcm5hdGlvbmFsIHx8ICcnKSA6XHJcbiAgICAgIHRoaXMuZm9ybWF0SW50ZWxOdW1iZXIoZ2V0RXhhbXBsZSh0aGlzLnNlbGVjdGVkQ291bnRyeS5pc28yLnRvVXBwZXJDYXNlKCksICdtb2JpbGUnKS5udW1iZXI/Lm5hdGlvbmFsIHx8ICcnKTtcclxuXHJcbiAgICByZXR1cm4gZm9ybWF0RXhhbXBsZU51bWJlcihleGFtcGxlTnVtYmVyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQbGFjZUhvbGRlcigpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLmVuYWJsZVBsYWNlaG9sZGVyKSByZXR1cm4gJyc7XHJcbiAgICBpZiAodGhpcy5jdXN0b21QbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuY3VzdG9tUGxhY2Vob2xkZXI7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZENvdW50cnkuaXNvMiA9PSAnJykgcmV0dXJuICcnO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmdldE51bWJlckV4YW1wbGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREcm9wZG93bkljb25QYXRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0Ryb3Bkb3duT3BlbiA/IGRyb3Bkb3duQ2xvc2UgOiBkcm9wZG93bk9wZW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25QaG9uZUlucHV0Rm9jdXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXV0b0RlYWxDb2RlKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0ZvY3VzZWQgfHwgKHRoaXMuc2VwYXJhdGVEaWFsQ29kZSAmJiB0aGlzLm51bWJlckZvcm1hdCA9PT0gJ2ludGVybmF0aW9uYWwnKSB8fCB0aGlzLm51bWJlckZvcm1hdCA9PT0gJ25hdGlvbmFsJyB8fCB0aGlzLnBob25lTnVtYmVyKSByZXR1cm47XHJcbiAgICB0aGlzLnBob25lTnVtYmVyID0gJysnICsgdGhpcy5zZWxlY3RlZENvdW50cnkuZGlhbENvZGUgKyAnICc7XHJcbiAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25QaG9uZUlucHV0Qmx1cigpIHtcclxuICAgIGlmICghdGhpcy5pc0lucHV0VmFsaWQgJiYgdGhpcy5waG9uZU51bWJlciAhPT0gJycpIHtcclxuICAgICAgdGhpcy5pbm5lckludmFsaWQgPSB0cnVlXHJcbiAgICAgIHRoaXMuaW5uZXJJbnZhbGlkTWVzc2FnZSA9IHRoaXMuaW52YWxpZFBob25lTWVzc2FnZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVzZXRWYWxpZGF0ZSgpIHtcclxuICAgIHRoaXMuaW5uZXJJbnZhbGlkID0gZmFsc2VcclxuICAgIHRoaXMuaW5uZXJJbnZhbGlkTWVzc2FnZSA9ICcnXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlVmFsdWUoKSB7XHJcbiAgICB0aGlzLl9yZXNldFZhbGlkYXRlKClcclxuICAgIHRoaXMuZm9ybWF0UGhvbmVOdW1iZXIoKTtcclxuXHJcbiAgICBjb25zdCBvdXRzaWRlVmFsdWUgPSB7XHJcbiAgICAgIHBob25lTnVtYmVyOiB0aGlzLnBob25lTnVtYmVyLFxyXG4gICAgICB1bkZvcm1hdHRlZE51bWJlcjogdGhpcy5waG9uZU51bWJlci5yZXBsYWNlKC9bXFxzLSgpXS9nLCAnJyksXHJcbiAgICAgIHNlbGVjdGVkQ291bnRyeTogdGhpcy5zZWxlY3RlZENvdW50cnk/Lm5hbWUgfHwgJycsXHJcbiAgICAgIGlzbzJDb2RlOiB0aGlzLnNlbGVjdGVkQ291bnRyeT8uaXNvMiB8fCAnJyxcclxuICAgICAgZGlhbENvZGU6IHRoaXMuc2VsZWN0ZWRDb3VudHJ5Py5kaWFsQ29kZSB8fCAnJyxcclxuICAgICAgbnVtYmVyRm9ybWF0OiB0aGlzLm51bWJlckZvcm1hdCxcclxuICAgICAgaXNOdW1iZXJWYWxpZDogdGhpcy5pc0lucHV0VmFsaWQsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuY2hhbmdlZC5lbWl0KG91dHNpZGVWYWx1ZSk7XHJcbiAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQoe3ZhbHVlOiBvdXRzaWRlVmFsdWUsIGlkOiB0aGlzLnV1aWR9KVxyXG4gICAgdGhpcy5vbkNoYW5nZShvdXRzaWRlVmFsdWUpO1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gIGNsYXNzPVwibXJ4LWlucHV0LXRlbFwiXHJcbiAgW2NsYXNzXT1cImdldENsYXNzZXNcIlxyXG4gIFtjbGFzcy5tcngtaW5wdXQtZXJyb3JdPVwiaW52YWxpZFwiXHJcbiAgW2NsYXNzLi1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgW2NsYXNzLi1yZWFkb25seV09XCJyZWFkb25seVwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwibXJ4LWlucHV0LXRlbF9fd3JhcHBlclwiPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBmb3JtYXR0ZXJQaG9uZVxyXG4gICAgICAgIFtpZF09XCJpbnB1dElkXCJcclxuICAgICAgICB0eXBlPVwidGVsXCJcclxuICAgICAgICBjbGFzcz1cInBob25lSW5wdXQge3tjc3NDbGFzc319XCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInBob25lTnVtYmVyXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgIFtyZWFkT25seV09XCJyZWFkb25seVwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdGVkQ291bnRyeT8ucGxhY2VIb2xkZXIgfHwgJydcIlxyXG4gICAgICAgIFtjbGFzcy5pblZhbGlkXT1cInBob25lVmFsaWRhdGlvbiAmJiAhaXNJbnB1dFZhbGlkXCJcclxuICAgICAgICBbY3VzdG9tTWF4TGVuZ3RoXT1cIm1heExlbmd0aFwiXHJcbiAgICAgICAgW3BhcnNlZFBob25lTnVtYmVyXT1cInBhcnNlZFBob25lTnVtYmVyXCJcclxuICAgICAgICAoZm9jdXMpPVwib25QaG9uZUlucHV0Rm9jdXMoKVwiXHJcbiAgICAgICAgKGJsdXIpPVwib25QaG9uZUlucHV0Qmx1cigpXCJcclxuICAgICAgICAoY2hhbmdlTW9kZWwpPVwidXBkYXRlVmFsdWUoKVwiXHJcbiAgICAgIC8+XHJcbiAgICA8ZGl2IGNsYXNzPVwibXJ4LWlucHV0LXRlbF9fZmxhZy1jb250YWluZXJcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICAgICAgPG1yeC1kcm9wZG93blxyXG4gICAgICAgICNkcm9wZG93bkNvbXBvbmVudFxyXG4gICAgICAgIGN1c3RvbUNsYXNzZXM9XCJoLTEwMFwiXHJcbiAgICAgICAgW21haW5QbGFjZW1lbnRdPVwiJ2JvdHRvbS1zdGFydCdcIlxyXG4gICAgICAgIFtmYWxsYmFja1BsYWNlbWVudHNdPVwiWyd0b3Atc3RhcnQnXVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2Ryb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1yeC1pbnB1dC10ZWxfX3NlbGVjdGVkLWZsYWcgZHJvcGRvd24tdG9nZ2xlXCI+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cIm1yeC1pbnB1dC10ZWxfX2ZsYWdcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkQ291bnRyeT8uZmxhZ0NsYXNzIHx8ICcnXCJcclxuICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VwYXJhdGVEaWFsQ29kZVwiIGNsYXNzPVwic2VsZWN0ZWQtZGlhbC1jb2RlXCI+K3t7c2VsZWN0ZWRDb3VudHJ5Py5kaWFsQ29kZX19PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcngtaW5wdXQtdGVsX19hcnJvdyBtdC0xXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaWNvbiBpY29uLWNoZXZyb24tZG93blwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2Ryb3Bkb3duTWVudT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyXCIgKm5nSWY9XCJzZWFyY2hDb3VudHJ5RmxhZyAmJiBzZWFyY2hDb3VudHJ5RmllbGRcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoRmlsdGVyXCJcclxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWFyY2hGaWx0ZXJDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgc2VhcmNoQ291bnRyeVBsYWNlaG9sZGVyIH19XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaENvdW50cnlfX2lucHV0XCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDx1bCBjbGFzcz1cIm1yeC1pbnB1dC10ZWxfX2NvdW50cnktbGlzdFwiICNjb3VudHJ5TGlzdD5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibXJ4LWlucHV0LXRlbF9fY291bnRyeSBpdGlfX3ByZWZlcnJlZFwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJlZmVycmVkQ291bnRyeSBvZiBwcmVmZXJyZWRDb3VudHJpZXNMaXN0XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNvdW50cnlTZWxlY3QocHJlZmVycmVkQ291bnRyeSlcIlxyXG4gICAgICAgICAgICAgICAgW2lkXT1cInByZWZlcnJlZENvdW50cnkuaHRtbElkKyctcHJlZmVycmVkJ1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXJ4LWlucHV0LXRlbF9fZmxhZy1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcngtaW5wdXQtdGVsX19mbGFnXCIgW25nQ2xhc3NdPVwicHJlZmVycmVkQ291bnRyeS5mbGFnQ2xhc3NcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pbnB1dC10ZWxfX2NvdW50cnktbmFtZVwiPnt7cHJlZmVycmVkQ291bnRyeS5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaW5wdXQtdGVsX19kaWFsLWNvZGVcIj4re3twcmVmZXJyZWRDb3VudHJ5LmRpYWxDb2RlfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJtcngtaW5wdXQtdGVsX19kaXZpZGVyXCIgKm5nSWY9XCJwcmVmZXJyZWRDb3VudHJpZXNMaXN0Py5sZW5ndGhcIj48L2xpPlxyXG5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibXJ4LWlucHV0LXRlbF9fY291bnRyeSBpdGlfX3N0YW5kYXJkXCJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb3VudHJ5IG9mIGNvdW50cmllc1RvU2hvd1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Db3VudHJ5U2VsZWN0KGNvdW50cnkpXCJcclxuICAgICAgICAgICAgICAgIFtpZF09XCJjb3VudHJ5Lmh0bWxJZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcngtaW5wdXQtdGVsX19mbGFnLWJveFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yeC1pbnB1dC10ZWxfX2ZsYWdcIiBbbmdDbGFzc109XCJjb3VudHJ5LmZsYWdDbGFzc1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWlucHV0LXRlbF9fY291bnRyeS1uYW1lXCI+e3tjb3VudHJ5Lm5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pbnB1dC10ZWxfX2RpYWwtY29kZVwiPit7e2NvdW50cnkuZGlhbENvZGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9saT5cclxuXHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvbXJ4LWRyb3Bkb3duPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtcngtZXJyb3ItbWVzc2FnZVxyXG4gICAgKm5nSWY9XCIoIWlzVmFsaWQgfHwgaW5uZXJJbnZhbGlkIHx8IGludmFsaWQpICYmIGlzSW52YWxpZE1lc3NhZ2VcIlxyXG4gICAgW2ludmFsaWRNZXNzYWdlXT1cImlubmVySW52YWxpZE1lc3NhZ2UgfHwgaW52YWxpZE1lc3NhZ2VcIlxyXG4gID48L21yeC1lcnJvci1tZXNzYWdlPlxyXG5cclxuICA8bXJ4LXNhdmUtc3RhdGUgW2lkXT1cInV1aWRcIiBbZmllbGRzXT1cImZpZWxkc1wiPjwvbXJ4LXNhdmUtc3RhdGU+XHJcbjwvZGl2PlxyXG5cclxuIl19
406
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdGVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2lucHV0LXRlbC9pbnB1dC10ZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vaW5wdXQtdGVsL2lucHV0LXRlbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFVBQVUsRUFDVix1QkFBdUIsRUFDdkIsU0FBUyxFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUNoRCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBcUIsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUd0RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0UsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxpQkFBaUIsRUFBc0IsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7QUFrQmpGLE1BQU0sT0FBTyxpQkFBaUI7SUErRDVCLFlBQ1UsU0FBNEIsRUFDakIsTUFBYztRQUR6QixjQUFTLEdBQVQsU0FBUyxDQUFtQjtRQS9EOUIsbUJBQWMsR0FBcUIsRUFBRSxDQUFDO1FBRzlDLGFBQWE7UUFDTixT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O3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBWaWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmLCBMT0NBTEVfSUQsIEluamVjdFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBnZXRBc1lvdVR5cGUsIGdldEV4YW1wbGUsIFBhcnNlZFBob25lTnVtYmVyIH0gZnJvbSAnYXdlc29tZS1waG9uZW51bWJlcic7XHJcbmltcG9ydCB7IENvdW50cmllc0lTTyB9IGZyb20gJy4vZGF0YS9jb3VudHJ5LWlzby5lbnVtJztcclxuaW1wb3J0IHsgU2VhcmNoQ291bnRyeUZpZWxkIH0gZnJvbSAnLi9kYXRhL3NlYXJjaC1jb3VudHJ5LWZpZWxkLmVudW0nO1xyXG5pbXBvcnQgeyBQaG9uZU51bWJlckZvcm1hdFR5cGUgfSBmcm9tICcuL2RhdGEvcGhvbmUtbnVtYmVyLWZvcm1hdC5lbnVtJztcclxuaW1wb3J0IHsgQ291bnRyeSwgSW5wdXRWYWx1ZSB9IGZyb20gJy4vbW9kZWxzL2NvdW50cnkubW9kZWwnO1xyXG5pbXBvcnQgeyBjb3VudHJ5RGF0YSB9IGZyb20gJy4vZGF0YS9hbGwtY291bnRyaWVzJztcclxuaW1wb3J0IHsgZHJvcGRvd25PcGVuLCBkcm9wZG93bkNsb3NlLCBmbGFnUGxhY2Vob2xkZXIgfSBmcm9tICcuL2Fzc2V0cy9iYXNlNjQnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgSW5wdXRUZWxTaXplc0VudW0sIElucHV0VGVsU2l6ZXNUeXBlcyB9IGZyb20gJy4vZW51bXMvaW5wdXQtcGhvbmUuZW51bSc7XHJcbmltcG9ydCB7IElucHV0UGhvbmVWYWx1ZVdpdGhJZCB9IGZyb20gJy4uL2lucHV0LXBob25lL2VudW1zL2lucHV0LXBob25lLmVudW0nO1xyXG5pbXBvcnQgeyBEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvdW50cmllc1J1c0xhYmVsIH0gZnJvbSAnLi9kYXRhL2NvdW50cmllcy1ydXMtbGFiZWwuZW51bSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ21yeC1pbnB1dC10ZWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC10ZWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2lucHV0LXRlbC5jb21wb25lbnQubGVzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW5wdXRUZWxDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXRUZWxDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcclxuICBwcml2YXRlIF9vbmx5Q291bnRyaWVzOiAoQ291bnRyaWVzSVNPKVtdID0gW107XHJcbiAgcHJpdmF0ZSBfbG9jYWxlOiBzdHJpbmdcclxuXHJcbiAgLy8gU0FWRSBTVEFURVxyXG4gIHB1YmxpYyB1dWlkOiBzdHJpbmcgPSB1dWlkdjQoKTtcclxuICBASW5wdXQoKSBwdWJsaWMgZmllbGRzOiBGaWVsZFtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyByZWFkb25seSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtYXhMZW5ndGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21DbGFzc2VzID0gJyc7XHJcbiAgQElucHV0KCkgcHVibGljIHNpemU6IElucHV0VGVsU2l6ZXNUeXBlcyA9ICdsYXJnZSc7XHJcblxyXG4gIEBJbnB1dCgpIGNzc0NsYXNzOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBwcmVmZXJyZWRDb3VudHJpZXM6IChDb3VudHJpZXNJU08pW10gPSBbXTtcclxuICBASW5wdXQoKSBlbmFibGVBdXRvQ291bnRyeVNlbGVjdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZW5hYmxlUGxhY2Vob2xkZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGN1c3RvbVBsYWNlaG9sZGVyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKSBudW1iZXJGb3JtYXQ6IFBob25lTnVtYmVyRm9ybWF0VHlwZSA9ICdpbnRlcm5hdGlvbmFsJztcclxuICBASW5wdXQoKSBzZWFyY2hDb3VudHJ5RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlYXJjaENvdW50cnlGaWVsZDogU2VhcmNoQ291bnRyeUZpZWxkID0gU2VhcmNoQ291bnRyeUZpZWxkLkFsbDtcclxuICBASW5wdXQoKSBzZWFyY2hDb3VudHJ5UGxhY2Vob2xkZXI6IHN0cmluZyA9ICfQn9C+0LjRgdC6INC/0L4g0YHRgtGA0LDQvdCw0LwnO1xyXG4gIEBJbnB1dCgpIHNlbGVjdEZpcnN0Q291bnRyeTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcGhvbmVWYWxpZGF0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpbnB1dElkOiBzdHJpbmcgPSAncGhvbmUnO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkQ291bnRyeUlTTzogQ291bnRyaWVzSVNPIHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgc2VwYXJhdGVEaWFsQ29kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGF1dG9EZWFsQ29kZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGF1dG9DbG9zZURyb3Bkb3duID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgnb25seUNvdW50cmllcycpXHJcbiAgcHVibGljIHNldCBvbmx5Q291bnRyaWVzKHZhbDogKENvdW50cmllc0lTTylbXSkge1xyXG4gICAgdGhpcy5fb25seUNvdW50cmllcyA9IHZhbFxyXG4gICAgdGhpcy5fZGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICB0aGlzLl9pbml0RGF0YSgpXHJcbiAgfVxyXG5cclxuICAvLyBWQUxJREFUSU9OXHJcbiAgQElucHV0KCkgcHVibGljIGludmFsaWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgaW52YWxpZE1lc3NhZ2U6IHN0cmluZyB8IHN0cmluZ1tdID0gJyc7XHJcbiAgQElucHV0KCkgcHVibGljIGludmFsaWRQaG9uZU1lc3NhZ2U6IHN0cmluZyA9ICfQndC10LrQvtGA0YDQtdC60YLQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSc7XHJcbiAgQElucHV0KCkgcHVibGljIGNoZWNrSW52YWxpZDogdHJ1ZSB8IGZhbHNlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duQ29tcG9uZW50JykgZHJvcGRvd25Db21wb25lbnQhOiBEcm9wZG93bkNvbXBvbmVudDtcclxuXHJcbiAgQE91dHB1dCgpIGNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxJbnB1dFZhbHVlPiA9IG5ldyBFdmVudEVtaXR0ZXI8SW5wdXRWYWx1ZT4oKTtcclxuICBAT3V0cHV0KCkgcHVibGljIG1vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SW5wdXRQaG9uZVZhbHVlV2l0aElkPiA9IG5ldyBFdmVudEVtaXR0ZXI8SW5wdXRQaG9uZVZhbHVlV2l0aElkPigpO1xyXG5cclxuICBwdWJsaWMgYWxsQ291bnRyaWVzOiAoQ291bnRyeSlbXTtcclxuICBwdWJsaWMgc2VsZWN0ZWRDb3VudHJ5OiBDb3VudHJ5O1xyXG4gIHB1YmxpYyBjb3VudHJpZXNUb1Nob3c6IChDb3VudHJ5KVtdO1xyXG4gIHB1YmxpYyBwcmVmZXJyZWRDb3VudHJpZXNMaXN0OiAoQ291bnRyeSlbXTtcclxuICBwdWJsaWMgc2VhcmNoRmlsdGVyOiBzdHJpbmc7XHJcbiAgcHVibGljIHNjcm9sbFRpbWVvdXQ6IGFueTtcclxuICBwdWJsaWMgcGhvbmVOdW1iZXI6IGFueTtcclxuICBwdWJsaWMgaXNGb2N1c2VkOiBib29sZWFuO1xyXG4gIHB1YmxpYyBpc0lucHV0VmFsaWQ6IGJvb2xlYW47XHJcbiAgcHVibGljIGlzRHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHBhcnNlZFBob25lTnVtYmVyPzogUGFyc2VkUGhvbmVOdW1iZXI7XHJcbiAgcHVibGljIGlubmVySW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbm5lckludmFsaWRNZXNzYWdlOiBzdHJpbmcgPSAnJ1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2RldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIEBJbmplY3QoTE9DQUxFX0lEKSBsb2NhbGU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgdGhpcy5hbGxDb3VudHJpZXMgPSBbXTtcclxuICAgIHRoaXMuY291bnRyaWVzVG9TaG93ID0gdGhpcy5hbGxDb3VudHJpZXM7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuZ2V0RGVmYXVsdENvdW50cnkoKTtcclxuICAgIHRoaXMucHJlZmVycmVkQ291bnRyaWVzTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5zZWFyY2hGaWx0ZXIgPSAnJztcclxuICAgIHRoaXMucGhvbmVOdW1iZXIgPSBudWxsO1xyXG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNJbnB1dFZhbGlkID0gdHJ1ZTtcclxuICAgIHRoaXMuX2xvY2FsZSA9IGxvY2FsZTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUob3V0c2lkZVZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChvdXRzaWRlVmFsdWUpIHtcclxuICAgICAgdGhpcy5waG9uZU51bWJlciA9IG91dHNpZGVWYWx1ZTtcclxuICAgICAgdGhpcy5mb3JtYXRQaG9uZU51bWJlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZSA9ICh2YWx1ZTogYW55KSA9PiB7XHJcbiAgfTtcclxuICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHtcclxuICB9O1xyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2luaXREYXRhKClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXREYXRhKCkge1xyXG4gICAgdGhpcy5nZW5lcmF0ZUNvdW50cnlEYXRhKCk7XHJcbiAgICB0aGlzLnNldENvdW50cmllc1RvU2hvdygpO1xyXG4gICAgdGhpcy5zZXRQcmVmZXJyZWRDb3VudHJpZXMoKTtcclxuICAgIHRoaXMuc2V0RGVmYXVsdFNlbGVjdGVkQ291bnRyeSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdmFsaWRhdGlvbihwYXJzZWROdW1iZXI6IFBhcnNlZFBob25lTnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDb3VudHJ5KSByZXR1cm4gZmFsc2VcclxuICAgIGNvbnN0IHNlbGVjdGVkQ291bnRyeSA9IHRoaXMuZmluZENvdW50cnlCeUlzbzIodGhpcy5zZWxlY3RlZENvdW50cnkuaXNvMik7XHJcblxyXG4gICAgaWYgKHBhcnNlZE51bWJlci5udW1iZXI/LmludGVybmF0aW9uYWwgfHwgcGFyc2VkTnVtYmVyLm51bWJlcj8ubmF0aW9uYWwpIHtcclxuICAgICAgaWYgKHBhcnNlZE51bWJlci5udW1iZXIuaW50ZXJuYXRpb25hbCkge1xyXG4gICAgICAgIGNvbnN0IHBob25lID0gcGFyc2VkTnVtYmVyLm51bWJlci5pbnRlcm5hdGlvbmFsLnRyaW0oKVxyXG4gICAgICAgIGNvbnN0IGEgPSBwaG9uZS5zdGFydHNXaXRoKCcrJykgPyBwaG9uZS5zdWJzdHJpbmcoMSkudHJpbSgpIDogcGhvbmU7XHJcbiAgICAgICAgY29uc3QgYiA9IGEuc3RhcnRzV2l0aChzZWxlY3RlZENvdW50cnkuZGlhbENvZGUpID8gYS5zdWJzdHJpbmcoc2VsZWN0ZWRDb3VudHJ5LmRpYWxDb2RlLmxlbmd0aCkudHJpbSgpIDogYTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oc2VsZWN0ZWRDb3VudHJ5Py5hcmVhQ29kZXM/LmZpbHRlcigoY29kZTogc3RyaW5nKSA9PiAgYi5zdGFydHNXaXRoKGNvZGUpKS5sZW5ndGgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlZE51bWJlci5udW1iZXIubmF0aW9uYWwpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGdldENsYXNzZXMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHtJbnB1dFRlbFNpemVzRW51bVt0aGlzLnNpemVdfSAke3RoaXMuY3VzdG9tQ2xhc3Nlc30gJHt0aGlzLmNoZWNrVmFsaWRDbGFzc2VzfWA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNJbnZhbGlkTWVzc2FnZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMuaW52YWxpZE1lc3NhZ2UgfHwgISF0aGlzLmludmFsaWRNZXNzYWdlLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2hlY2tWYWxpZENsYXNzZXMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrSW52YWxpZCA9PT0gZmFsc2UgP1xyXG4gICAgICAnbXJ4LWlucHV0LWNoZWNrZWQtc3VjY2VzcycgOlxyXG4gICAgICB0aGlzLmNoZWNrSW52YWxpZCA9PT0gdHJ1ZSA/ICdtcngtaW5wdXQtY2hlY2tlZC1lcnJvcicgOiAnJztcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgdG9nZ2xlRHJvcGRvd24oKSB7XHJcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuID0gIXRoaXMuaXNEcm9wZG93bk9wZW47XHJcbiAgICB0aGlzLmRyb3Bkb3duQ29tcG9uZW50LmhpZGUoKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdlbmVyYXRlQ291bnRyeURhdGEoKSB7XHJcbiAgICB0aGlzLmFsbENvdW50cmllcyA9IGNvdW50cnlEYXRhLm1hcChjb24gPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWU6IHRoaXMuX2xvY2FsZSA9PT0gJ3J1JyA/IGNvbls1XS50b1N0cmluZygpIDogY29uWzBdLnRvU3RyaW5nKCksXHJcbiAgICAgICAgaXNvMjogY29uWzFdLnRvU3RyaW5nKCksXHJcbiAgICAgICAgZGlhbENvZGU6IGNvblsyXS50b1N0cmluZygpLFxyXG4gICAgICAgIHByaW9yaXR5OiArY29uWzNdIHx8IDAsXHJcbiAgICAgICAgYXJlYUNvZGVzOiAoY29uWzRdIGFzIHN0cmluZ1tdKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgaHRtbElkOiBgJHt0aGlzLnV1aWR9LSR7Y29uWzFdLnRvU3RyaW5nKCl9YCxcclxuICAgICAgICBmbGFnQ2xhc3M6IGBmbGFnX18ke2NvblsxXS50b1N0cmluZygpfWAsXHJcbiAgICAgICAgcGxhY2VIb2xkZXI6ICcnLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb3VudHJpZXNUb1Nob3cgPSB0aGlzLmFsbENvdW50cmllcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREZWZhdWx0Q291bnRyeSgpOiBDb3VudHJ5IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICduYW1lJzogJycsXHJcbiAgICAgICdpc28yJzogJycsXHJcbiAgICAgICdkaWFsQ29kZSc6ICcnLFxyXG4gICAgICAncHJpb3JpdHknOiAwLFxyXG4gICAgICAnaHRtbElkJzogJycsXHJcbiAgICAgICdmbGFnQ2xhc3MnOiBmbGFnUGxhY2Vob2xkZXIsXHJcbiAgICAgICdwbGFjZUhvbGRlcic6ICcnLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0SW50ZWxOdW1iZXIobnVtYmVyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuYXV0b0RlYWxDb2RlKSB7XHJcbiAgICAgIHJldHVybiBudW1iZXJcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4VG9TcGxpdCA9IG51bWJlci5pbmRleE9mKCcgJykgKyAxO1xyXG4gICAgICByZXR1cm4gdGhpcy5zZXBhcmF0ZURpYWxDb2RlID8gbnVtYmVyLnN1YnN0cmluZyhpbmRleFRvU3BsaXQpIDogbnVtYmVyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZvcm1hdFBob25lTnVtYmVyKCkge1xyXG4gICAgY29uc3QgYXl0ID0gZ2V0QXNZb3VUeXBlKHRoaXMuc2VsZWN0ZWRDb3VudHJ5Py5pc28yLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgYXl0LnJlc2V0KHRoaXMucGhvbmVOdW1iZXIpO1xyXG4gICAgY29uc3QgcmVzOiBQYXJzZWRQaG9uZU51bWJlciA9IGF5dC5nZXRQaG9uZU51bWJlcigpO1xyXG5cclxuICAgIHRoaXMucGFyc2VkUGhvbmVOdW1iZXIgPSByZXNcclxuXHJcbiAgICBpZiAodGhpcy5udW1iZXJGb3JtYXQgPT09ICdpbnRlcm5hdGlvbmFsJykge1xyXG4gICAgICB0aGlzLnBob25lTnVtYmVyID0gcmVzLm51bWJlcj8uaW50ZXJuYXRpb25hbCA/IHRoaXMuZm9ybWF0SW50ZWxOdW1iZXIocmVzLm51bWJlci5pbnRlcm5hdGlvbmFsKSA6IHRoaXMucGhvbmVOdW1iZXI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBob25lTnVtYmVyID0gcmVzLm51bWJlcj8ubmF0aW9uYWwgPyByZXMubnVtYmVyLm5hdGlvbmFsIDogdGhpcy5waG9uZU51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5udW1iZXJGb3JtYXQgPT09ICdpbnRlcm5hdGlvbmFsJykge1xyXG4gICAgICBpZiAodGhpcy5lbmFibGVBdXRvQ291bnRyeVNlbGVjdCAmJiByZXMucmVnaW9uQ29kZSAhPSB0aGlzLnNlbGVjdGVkQ291bnRyeT8uaXNvMi50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgcmVzLnJlZ2lvbkNvZGUgJiYgKHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gdGhpcy5maW5kQ291bnRyeUJ5SXNvMihyZXMucmVnaW9uQ29kZSkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5lbmFibGVBdXRvQ291bnRyeVNlbGVjdCAmJiByZXMucmVnaW9uQ29kZSAhPSB0aGlzLnNlbGVjdGVkQ291bnRyeT8uaXNvMi50b1VwcGVyQ2FzZSgpKSB7XHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFyZXMudmFsaWQgfHwgcmVzLnJlZ2lvbkNvZGUgIT0gdGhpcy5zZWxlY3RlZENvdW50cnk/LmlzbzIudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICB0aGlzLmlzSW5wdXRWYWxpZCA9IHRoaXMuX3ZhbGlkYXRpb24ocmVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNJbnB1dFZhbGlkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hGaWx0ZXJDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNjcm9sbFRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRpbWVvdXQpO1xyXG5cclxuICAgIGxldCBmaWx0ZXJlZDogQ291bnRyeVtdO1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoQ291bnRyeUZpZWxkID09ICduYW1lJykge1xyXG4gICAgICBmaWx0ZXJlZCA9IHRoaXMuY291bnRyaWVzVG9TaG93LmZpbHRlcihjb24gPT4gY29uLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHRoaXMuc2VhcmNoRmlsdGVyLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hDb3VudHJ5RmllbGQgPT0gJ2lzbzInKSB7XHJcbiAgICAgIGZpbHRlcmVkID0gdGhpcy5jb3VudHJpZXNUb1Nob3cuZmlsdGVyKGNvbiA9PiBjb24uaXNvMi5zdGFydHNXaXRoKHRoaXMuc2VhcmNoRmlsdGVyLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hDb3VudHJ5RmllbGQgPT0gJ2RpYWxDb2RlJykge1xyXG4gICAgICBmaWx0ZXJlZCA9IHRoaXMuY291bnRyaWVzVG9TaG93LmZpbHRlcihjb24gPT4gY29uLmRpYWxDb2RlLnN0YXJ0c1dpdGgodGhpcy5zZWFyY2hGaWx0ZXIpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpbHRlcmVkID0gdGhpcy5jb3VudHJpZXNUb1Nob3cuZmlsdGVyKGNvbiA9PiBjb24ubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodGhpcy5zZWFyY2hGaWx0ZXIudG9Mb3dlckNhc2UoKSkgfHwgY29uLmRpYWxDb2RlLnN0YXJ0c1dpdGgodGhpcy5zZWFyY2hGaWx0ZXIpIHx8IGNvbi5pc28yLnN0YXJ0c1dpdGgodGhpcy5zZWFyY2hGaWx0ZXIudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZmlsdGVyZWQubGVuZ3RoKSByZXR1cm47XHJcbiAgICB0aGlzLnNjcm9sbFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgZWw6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpbHRlcmVkWzBdLmh0bWxJZCk7XHJcbiAgICAgIGVsLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICB9LCAxKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZENvdW50cnlCeUlzbzIoaXNvMjogc3RyaW5nKTogQ291bnRyeSB8IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb3VudHJpZXNUb1Nob3cuZmluZChjb24gPT4gY29uLmlzbzIgPT0gaXNvMi50b0xvd2VyQ2FzZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREZWZhdWx0U2VsZWN0ZWRDb3VudHJ5KCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb3VudHJ5SVNPKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gdGhpcy5maW5kQ291bnRyeUJ5SXNvMih0aGlzLnNlbGVjdGVkQ291bnRyeUlTTyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0Rmlyc3RDb3VudHJ5KSB7XHJcbiAgICAgIGlmICh0aGlzLnByZWZlcnJlZENvdW50cmllc0xpc3QubGVuZ3RoKSB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMucHJlZmVycmVkQ291bnRyaWVzTGlzdFswXTtcclxuICAgICAgZWxzZSB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuY291bnRyaWVzVG9TaG93WzBdO1xyXG4gICAgfSBlbHNlIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gdGhpcy5nZXREZWZhdWx0Q291bnRyeSgpO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5LnBsYWNlSG9sZGVyID0gdGhpcy5nZXRQbGFjZUhvbGRlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENvdW50cmllc1RvU2hvdygpIHtcclxuICAgIGlmICh0aGlzLl9vbmx5Q291bnRyaWVzLmxlbmd0aCA9PSAwKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGVtcDogYW55ID0gW107XHJcbiAgICBmb3IgKGxldCBjb3VudHJ5IG9mIHRoaXMuX29ubHlDb3VudHJpZXMpIHtcclxuICAgICAgdGVtcC5wdXNoKHRoaXMuYWxsQ291bnRyaWVzLmZpbmQoY29uID0+IGNvbi5pc28yID09IGNvdW50cnkpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNvdW50cmllc1RvU2hvdyA9IHRlbXA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0UHJlZmVycmVkQ291bnRyaWVzKCkge1xyXG4gICAgZm9yIChsZXQgY291bnRyeSBvZiB0aGlzLnByZWZlcnJlZENvdW50cmllcykge1xyXG4gICAgICBjb25zdCB0ZW1wID0gdGhpcy5jb3VudHJpZXNUb1Nob3cuZmluZChjb24gPT4gY29uLmlzbzIgPT0gY291bnRyeSk7XHJcbiAgICAgIGlmICh0ZW1wKSB0aGlzLnByZWZlcnJlZENvdW50cmllc0xpc3QucHVzaCh0ZW1wKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNvdW50cnlTZWxlY3QoY291bnRyeTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuXHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSBjb3VudHJ5O1xyXG4gICAgdGhpcy5zZWxlY3RlZENvdW50cnkucGxhY2VIb2xkZXIgPSB0aGlzLmdldFBsYWNlSG9sZGVyKCk7XHJcbiAgICB0aGlzLnNlYXJjaEZpbHRlciA9ICcnO1xyXG4gICAgdGhpcy5waG9uZU51bWJlciA9ICcnO1xyXG4gICAgdGhpcy5pc0lucHV0VmFsaWQgPSB0cnVlO1xyXG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5hdXRvQ2xvc2VEcm9wZG93bikge1xyXG4gICAgICB0aGlzLnRvZ2dsZURyb3Bkb3duKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVWYWx1ZSgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE51bWJlckV4YW1wbGUoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZvcm1hdEV4YW1wbGVOdW1iZXIgPSAobnVtYmVyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gICAgICByZXR1cm4gbnVtYmVyXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGV4YW1wbGVOdW1iZXIgPSB0aGlzLm51bWJlckZvcm1hdCA9PT0gJ2ludGVybmF0aW9uYWwnID9cclxuICAgICAgdGhpcy5mb3JtYXRJbnRlbE51bWJlcihnZXRFeGFtcGxlKHRoaXMuc2VsZWN0ZWRDb3VudHJ5LmlzbzIudG9VcHBlckNhc2UoKSwgJ21vYmlsZScpLm51bWJlcj8uaW50ZXJuYXRpb25hbCB8fCAnJykgOlxyXG4gICAgICB0aGlzLmZvcm1hdEludGVsTnVtYmVyKGdldEV4YW1wbGUodGhpcy5zZWxlY3RlZENvdW50cnkuaXNvMi50b1VwcGVyQ2FzZSgpLCAnbW9iaWxlJykubnVtYmVyPy5uYXRpb25hbCB8fCAnJyk7XHJcblxyXG4gICAgcmV0dXJuIGZvcm1hdEV4YW1wbGVOdW1iZXIoZXhhbXBsZU51bWJlcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UGxhY2VIb2xkZXIoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5lbmFibGVQbGFjZWhvbGRlcikgcmV0dXJuICcnO1xyXG4gICAgaWYgKHRoaXMuY3VzdG9tUGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmN1c3RvbVBsYWNlaG9sZGVyO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb3VudHJ5LmlzbzIgPT0gJycpIHJldHVybiAnJztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJFeGFtcGxlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RHJvcGRvd25JY29uUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNEcm9wZG93bk9wZW4gPyBkcm9wZG93bkNsb3NlIDogZHJvcGRvd25PcGVuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uUGhvbmVJbnB1dEZvY3VzKCkge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9EZWFsQ29kZSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNGb2N1c2VkIHx8ICh0aGlzLnNlcGFyYXRlRGlhbENvZGUgJiYgdGhpcy5udW1iZXJGb3JtYXQgPT09ICdpbnRlcm5hdGlvbmFsJykgfHwgdGhpcy5udW1iZXJGb3JtYXQgPT09ICduYXRpb25hbCcgfHwgdGhpcy5waG9uZU51bWJlcikgcmV0dXJuO1xyXG4gICAgdGhpcy5waG9uZU51bWJlciA9ICcrJyArIHRoaXMuc2VsZWN0ZWRDb3VudHJ5LmRpYWxDb2RlICsgJyAnO1xyXG4gICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uUGhvbmVJbnB1dEJsdXIoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNJbnB1dFZhbGlkICYmIHRoaXMucGhvbmVOdW1iZXIgIT09ICcnKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJJbnZhbGlkID0gdHJ1ZVxyXG4gICAgICB0aGlzLmlubmVySW52YWxpZE1lc3NhZ2UgPSB0aGlzLmludmFsaWRQaG9uZU1lc3NhZ2VcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Jlc2V0VmFsaWRhdGUoKSB7XHJcbiAgICB0aGlzLmlubmVySW52YWxpZCA9IGZhbHNlXHJcbiAgICB0aGlzLmlubmVySW52YWxpZE1lc3NhZ2UgPSAnJ1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZVZhbHVlKCkge1xyXG4gICAgdGhpcy5fcmVzZXRWYWxpZGF0ZSgpXHJcbiAgICB0aGlzLmZvcm1hdFBob25lTnVtYmVyKCk7XHJcblxyXG4gICAgY29uc3Qgb3V0c2lkZVZhbHVlID0ge1xyXG4gICAgICBwaG9uZU51bWJlcjogdGhpcy5waG9uZU51bWJlcixcclxuICAgICAgdW5Gb3JtYXR0ZWROdW1iZXI6IHRoaXMucGhvbmVOdW1iZXIucmVwbGFjZSgvW1xccy0oKV0vZywgJycpLFxyXG4gICAgICBzZWxlY3RlZENvdW50cnk6IHRoaXMuc2VsZWN0ZWRDb3VudHJ5Py5uYW1lIHx8ICcnLFxyXG4gICAgICBpc28yQ29kZTogdGhpcy5zZWxlY3RlZENvdW50cnk/LmlzbzIgfHwgJycsXHJcbiAgICAgIGRpYWxDb2RlOiB0aGlzLnNlbGVjdGVkQ291bnRyeT8uZGlhbENvZGUgfHwgJycsXHJcbiAgICAgIG51bWJlckZvcm1hdDogdGhpcy5udW1iZXJGb3JtYXQsXHJcbiAgICAgIGlzTnVtYmVyVmFsaWQ6IHRoaXMuaXNJbnB1dFZhbGlkLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNoYW5nZWQuZW1pdChvdXRzaWRlVmFsdWUpO1xyXG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHt2YWx1ZTogb3V0c2lkZVZhbHVlLCBpZDogdGhpcy51dWlkfSlcclxuICAgIHRoaXMub25DaGFuZ2Uob3V0c2lkZVZhbHVlKTtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBjbGFzcz1cIm1yeC1pbnB1dC10ZWxcIlxyXG4gIFtjbGFzc109XCJnZXRDbGFzc2VzXCJcclxuICBbY2xhc3MubXJ4LWlucHV0LWVycm9yXT1cImludmFsaWRcIlxyXG4gIFtjbGFzcy4tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gIFtjbGFzcy4tcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cIm1yeC1pbnB1dC10ZWxfX3dyYXBwZXJcIj5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgZm9ybWF0dGVyUGhvbmVcclxuICAgICAgICBbaWRdPVwiaW5wdXRJZFwiXHJcbiAgICAgICAgdHlwZT1cInRlbFwiXHJcbiAgICAgICAgY2xhc3M9XCJwaG9uZUlucHV0IHt7Y3NzQ2xhc3N9fVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJwaG9uZU51bWJlclwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICBbcmVhZE9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWxlY3RlZENvdW50cnk/LnBsYWNlSG9sZGVyIHx8ICcnXCJcclxuICAgICAgICBbY2xhc3MuaW5WYWxpZF09XCJwaG9uZVZhbGlkYXRpb24gJiYgIWlzSW5wdXRWYWxpZFwiXHJcbiAgICAgICAgW2N1c3RvbU1heExlbmd0aF09XCJtYXhMZW5ndGhcIlxyXG4gICAgICAgIFtwYXJzZWRQaG9uZU51bWJlcl09XCJwYXJzZWRQaG9uZU51bWJlclwiXHJcbiAgICAgICAgKGZvY3VzKT1cIm9uUGhvbmVJbnB1dEZvY3VzKClcIlxyXG4gICAgICAgIChibHVyKT1cIm9uUGhvbmVJbnB1dEJsdXIoKVwiXHJcbiAgICAgICAgKGNoYW5nZU1vZGVsKT1cInVwZGF0ZVZhbHVlKClcIlxyXG4gICAgICAvPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1yeC1pbnB1dC10ZWxfX2ZsYWctY29udGFpbmVyXCIgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcbiAgICAgIDxtcngtZHJvcGRvd25cclxuICAgICAgICAjZHJvcGRvd25Db21wb25lbnRcclxuICAgICAgICBjdXN0b21DbGFzc2VzPVwiaC0xMDBcIlxyXG4gICAgICAgIFttYWluUGxhY2VtZW50XT1cIidib3R0b20tc3RhcnQnXCJcclxuICAgICAgICBbZmFsbGJhY2tQbGFjZW1lbnRzXT1cIlsndG9wLXN0YXJ0J11cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNkcm9wZG93blRvZ2dsZT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcngtaW5wdXQtdGVsX19zZWxlY3RlZC1mbGFnIGRyb3Bkb3duLXRvZ2dsZVwiPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtcngtaW5wdXQtdGVsX19mbGFnXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RlZENvdW50cnk/LmZsYWdDbGFzcyB8fCAnJ1wiXHJcbiAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlcGFyYXRlRGlhbENvZGVcIiBjbGFzcz1cInNlbGVjdGVkLWRpYWwtY29kZVwiPit7e3NlbGVjdGVkQ291bnRyeT8uZGlhbENvZGV9fTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXJ4LWlucHV0LXRlbF9fYXJyb3cgbXQtMVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWljb24gaWNvbi1jaGV2cm9uLWRvd25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNkcm9wZG93bk1lbnU+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lclwiICpuZ0lmPVwic2VhcmNoQ291bnRyeUZsYWcgJiYgc2VhcmNoQ291bnRyeUZpZWxkXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaEZpbHRlclwiXHJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoRmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHNlYXJjaENvdW50cnlQbGFjZWhvbGRlciB9fVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2hDb3VudHJ5X19pbnB1dFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8dWwgY2xhc3M9XCJtcngtaW5wdXQtdGVsX19jb3VudHJ5LWxpc3RcIiAjY291bnRyeUxpc3Q+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm1yeC1pbnB1dC10ZWxfX2NvdW50cnkgaXRpX19wcmVmZXJyZWRcIlxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHByZWZlcnJlZENvdW50cnkgb2YgcHJlZmVycmVkQ291bnRyaWVzTGlzdFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Db3VudHJ5U2VsZWN0KHByZWZlcnJlZENvdW50cnkpXCJcclxuICAgICAgICAgICAgICAgIFtpZF09XCJwcmVmZXJyZWRDb3VudHJ5Lmh0bWxJZCsnLXByZWZlcnJlZCdcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yeC1pbnB1dC10ZWxfX2ZsYWctYm94XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXJ4LWlucHV0LXRlbF9fZmxhZ1wiIFtuZ0NsYXNzXT1cInByZWZlcnJlZENvdW50cnkuZmxhZ0NsYXNzXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaW5wdXQtdGVsX19jb3VudHJ5LW5hbWVcIj57e3ByZWZlcnJlZENvdW50cnkubmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWlucHV0LXRlbF9fZGlhbC1jb2RlXCI+K3t7cHJlZmVycmVkQ291bnRyeS5kaWFsQ29kZX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibXJ4LWlucHV0LXRlbF9fZGl2aWRlclwiICpuZ0lmPVwicHJlZmVycmVkQ291bnRyaWVzTGlzdD8ubGVuZ3RoXCI+PC9saT5cclxuXHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm1yeC1pbnB1dC10ZWxfX2NvdW50cnkgaXRpX19zdGFuZGFyZFwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY291bnRyeSBvZiBjb3VudHJpZXNUb1Nob3dcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ291bnRyeVNlbGVjdChjb3VudHJ5KVwiXHJcbiAgICAgICAgICAgICAgICBbaWRdPVwiY291bnRyeS5odG1sSWRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXJ4LWlucHV0LXRlbF9fZmxhZy1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcngtaW5wdXQtdGVsX19mbGFnXCIgW25nQ2xhc3NdPVwiY291bnRyeS5mbGFnQ2xhc3NcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pbnB1dC10ZWxfX2NvdW50cnktbmFtZVwiPnt7Y291bnRyeS5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaW5wdXQtdGVsX19kaWFsLWNvZGVcIj4re3tjb3VudHJ5LmRpYWxDb2RlfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L21yeC1kcm9wZG93bj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bXJ4LWVycm9yLW1lc3NhZ2VcclxuICAgICpuZ0lmPVwiKCFpc1ZhbGlkIHx8IGlubmVySW52YWxpZCB8fCBpbnZhbGlkKSAmJiBpc0ludmFsaWRNZXNzYWdlXCJcclxuICAgIFtpbnZhbGlkTWVzc2FnZV09XCJpbm5lckludmFsaWRNZXNzYWdlIHx8IGludmFsaWRNZXNzYWdlXCJcclxuICA+PC9tcngtZXJyb3ItbWVzc2FnZT5cclxuXHJcbiAgPG1yeC1zYXZlLXN0YXRlIFtpZF09XCJ1dWlkXCIgW2ZpZWxkc109XCJmaWVsZHNcIj48L21yeC1zYXZlLXN0YXRlPlxyXG48L2Rpdj5cclxuXHJcbiJdfQ==
@@ -55,6 +55,9 @@ export class MrxFormValidator {
55
55
  if (!validateEmptyValue && (value.length === 0)) {
56
56
  return;
57
57
  }
58
+ if (!this._isValid) {
59
+ return;
60
+ }
58
61
  for (let key in validations) {
59
62
  switch (key) {
60
63
  case ValidationTypesEnum.Required:
@@ -175,10 +178,12 @@ export class MrxFormValidator {
175
178
  }
176
179
  isValid() {
177
180
  for (let key in this._validations) {
181
+ if (!this._isValid) {
182
+ return this._isValid;
183
+ }
178
184
  this.errors[key] = null;
179
185
  this.validateField(this._fields[key], key, this._validations[key], true);
180
186
  }
181
- console.log(1, this._isValid);
182
187
  return this._isValid;
183
188
  }
184
189
  // TODO Вырезать в будущем
@@ -204,4 +209,4 @@ export class MrxFormValidator {
204
209
  return this._isValid;
205
210
  }
206
211
  }
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXJ4LWZvcm0tdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9zZXJ2aWNlcy9tcngtZm9ybS12YWxpZGF0b3IvbXJ4LWZvcm0tdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHdEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRXZGLE1BQU0sT0FBTyxnQkFBZ0I7SUFXM0IsWUFBWSxPQUE4QjtRQVZsQyxZQUFPLEdBQVEsRUFBRSxDQUFBO1FBQ2pCLGlCQUFZLEdBQWlCLEVBQUUsQ0FBQTtRQUMvQixZQUFPLEdBQVEsRUFBRSxDQUFBO1FBQ2pCLGFBQVEsR0FBRyxJQUFJLENBQUE7UUFDZixZQUFPLEdBQUcsS0FB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Q0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7aUJBQ2hGO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDtRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsMEJBQTBCO0lBQ25CLGFBQWE7UUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7UUFFcEIsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7U0FDL0U7UUFFRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDdEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcclxuaW1wb3J0IHsgSUZpZWxkcywgSU1lc3NhZ2VzLCBJVmFsaWRhdGlvbnMsIFZhbGlkYXRpb25zVHlwZSB9IGZyb20gJy4vbW9kZWxzL3ZhbGlkYXRpb25zLW9wdGlvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtVmFsaWRhdG9yT3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzL3ZhbGlkYXRpb25zLXNldHRpbmdzLm1vZGVsJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbk1ldGhvZHNFbnVtLCBWYWxpZGF0aW9uVHlwZXNFbnVtIH0gZnJvbSAnLi9tb2RlbHMvdmFsaWRhdGlvbnMtdHlwZXMubW9kZWwnO1xyXG5pbXBvcnQgeyByZXF1aXJlZFZhbGlkYXRpb24gfSBmcm9tICcuL3ZhbGlkYXRpb25zL3JlcXVpcmVkLnZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBlbWFpbFZhbGlkYXRpb24gfSBmcm9tICcuL3ZhbGlkYXRpb25zL2VtYWlsLnZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBwYXR0ZXJuVmFsaWRhdGlvbiB9IGZyb20gJy4vdmFsaWRhdGlvbnMvcGF0dGVybi52YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgbWF4TGVuZ3RoVmFsaWRhdGlvbiB9IGZyb20gJy4vdmFsaWRhdGlvbnMvbWF4LWxlbmd0aC52YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgbWluTGVuZ3RoVmFsaWRhdGlvbiB9IGZyb20gJy4vdmFsaWRhdGlvbnMvbWluLWxlbmd0aC52YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgbWluVmFsdWVWYWxpZGF0aW9uIH0gZnJvbSAnLi92YWxpZGF0aW9ucy9taW4tdmFsdWUudmFsaWRhdGlvbic7XHJcbmltcG9ydCB7IG1heFZhbHVlVmFsaWRhdGlvbiB9IGZyb20gJy4vdmFsaWRhdGlvbnMvbWF4LXZhbHVlLnZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBjYWxsYmFja1ZhbGlkYXRpb24gfSBmcm9tICcuL3ZhbGlkYXRpb25zL2NhbGxiYWNrLnZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBJTlZBTElEX01FU1NBR0VTIH0gZnJvbSAnLi9jb25zdGFudHMvaW52YWxpZC1tZXNzYWdlcyc7XHJcbmltcG9ydCB7IGdldFNvcnRpbmdWYWxpZGF0aW9uc0hlbHBlciB9IGZyb20gJy4vaGVscGVycy9nZXQtc29ydGluZy12YWxpZGF0aW9ucy5oZWxwZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1yeEZvcm1WYWxpZGF0b3Ige1xyXG4gIHByaXZhdGUgX2ZpZWxkczogYW55ID0gW11cclxuICBwcml2YXRlIF92YWxpZGF0aW9uczogSVZhbGlkYXRpb25zID0ge31cclxuICBwcml2YXRlIF9lcnJvcnM6IGFueSA9IHt9XHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCA9IHRydWVcclxuICBwcml2YXRlIF9pc0luaXQgPSBmYWxzZVxyXG4gIHByaXZhdGUgX21vZGVsQ2xvbmU6IElGaWVsZHMgPSB7fVxyXG5cclxuICBwcml2YXRlIF9tZXRob2QgPSAnc3VibWl0J1xyXG4gIHByaXZhdGUgX2ludmFsaWRNZXNzYWdlczogSU1lc3NhZ2VzID0gSU5WQUxJRF9NRVNTQUdFU1xyXG5cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogRm9ybVZhbGlkYXRvck9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zPy5tZXRob2QpIHtcclxuICAgICAgdGhpcy5fbWV0aG9kID0gb3B0aW9ucy5tZXRob2RcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucz8ubWVzc2FnZXMpIHtcclxuICAgICAgdGhpcy5faW52YWxpZE1lc3NhZ2VzID0gey4uLnRoaXMuX2ludmFsaWRNZXNzYWdlcywgLi4ub3B0aW9ucy5tZXNzYWdlc31cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZXJyb3JzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Vycm9yc1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXQgZmllbGRzKGZpZWxkczogYW55KSB7XHJcbiAgICB0aGlzLl9maWVsZHMgPSBPYmplY3QuYXNzaWduKHt9LCBmaWVsZHMpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE5hbWVzVXBkYXRlZFByb3BlcnRpZXMob2xkTW9kZWw6IGFueSwgbmV3TW9kZWw6IGFueSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IG5hbWVzVXBkYXRlZFByb3BlcnRpZXMgPSBbXVxyXG5cclxuICAgIGZvciAobGV0IGtleSBpbiBuZXdNb2RlbCkge1xyXG4gICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICBjYXNlIEFycmF5LmlzQXJyYXkobmV3TW9kZWxba2V5XSk6XHJcbiAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkobmV3TW9kZWxba2V5XSkgIT09IEpTT04uc3RyaW5naWZ5KG9sZE1vZGVsW2tleV0pKSB7XHJcbiAgICAgICAgICAgIG5hbWVzVXBkYXRlZFByb3BlcnRpZXMucHVzaChrZXkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpZiAobmV3TW9kZWxba2V5XSAhPT0gb2xkTW9kZWxba2V5XSkge1xyXG4gICAgICAgICAgICBuYW1lc1VwZGF0ZWRQcm9wZXJ0aWVzLnB1c2goa2V5KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuYW1lc1VwZGF0ZWRQcm9wZXJ0aWVzXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlRmllbGQoXHJcbiAgICB2YWx1ZTogc3RyaW5nLFxyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgdmFsaWRhdGlvbnM6IFZhbGlkYXRpb25zVHlwZSxcclxuICAgIHZhbGlkYXRlRW1wdHlWYWx1ZTogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgc2lsZW50OiBib29sZWFuID0gZmFsc2VcclxuICApOiB2b2lkIHtcclxuICAgIGlmICghdmFsaWRhdGVFbXB0eVZhbHVlICYmICh2YWx1ZS5sZW5ndGggPT09IDApKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGtleSBpbiB2YWxpZGF0aW9ucykge1xyXG4gICAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICAgIGNhc2UgVmFsaWRhdGlvblR5cGVzRW51bS5SZXF1aXJlZDpcclxuICAgICAgICAgIGNvbnN0IHJlcXVpcmVkUmVzID0gcmVxdWlyZWRWYWxpZGF0aW9uKFxyXG4gICAgICAgICAgICB2YWx1ZSwgdmFsaWRhdGlvbnMsIGtleSwgdGhpcy5faW52YWxpZE1lc3NhZ2VzXHJcbiAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCA9IHJlcXVpcmVkUmVzLmlzVmFsaWRcclxuXHJcbiAgICAgICAgICBpZiAoIXNpbGVudCAmJiAhdGhpcy5fZXJyb3JzW25hbWVdKSB7XHJcbiAgICAgICAgICAgICB0aGlzLl9lcnJvcnNbbmFtZV0gPSByZXF1aXJlZFJlcy5tZXNzYWdlXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgVmFsaWRhdGlvblR5cGVzRW51bS5FbWFpbDpcclxuICAgICAgICAgIGNvbnN0IGVtYWlsUmVzID0gZW1haWxWYWxpZGF0aW9uKFxyXG4gICAgICAgICAgICB2YWx1ZSwgdmFsaWRhdGlvbnMsIGtleSwgdGhpcy5faW52YWxpZE1lc3NhZ2VzXHJcbiAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCA9IGVtYWlsUmVzLmlzVmFsaWRcclxuXHJcbiAgICAgICAgICBpZiAoIXNpbGVudCAmJiAhdGhpcy5fZXJyb3JzW25hbWVdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yc1tuYW1lXSA9IGVtYWlsUmVzLm1lc3NhZ2VcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoIXRoaXMuX2lzVmFsaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZXNFbnVtLlBhdHRlcm46XHJcbiAgICAgICAgICBjb25zdCBwYXR0ZXJuUmVzID0gcGF0dGVyblZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIHZhbHVlLCB2YWxpZGF0aW9ucywga2V5LCB0aGlzLl9pbnZhbGlkTWVzc2FnZXNcclxuICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkID0gcGF0dGVyblJlcy5pc1ZhbGlkXHJcblxyXG4gICAgICAgICAgaWYgKCFzaWxlbnQgJiYgIXRoaXMuX2Vycm9yc1tuYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcnNbbmFtZV0gPSBwYXR0ZXJuUmVzLm1lc3NhZ2VcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoIXRoaXMuX2lzVmFsaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZXNFbnVtLk1pbkxlbmd0aDpcclxuICAgICAgICAgIGNvbnN0IG1pbkxlbmd0aFJlcyA9IG1pbkxlbmd0aFZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIHZhbHVlLCB2YWxpZGF0aW9ucywga2V5LCB0aGlzLl9pbnZhbGlkTWVzc2FnZXNcclxuICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkID0gbWluTGVuZ3RoUmVzLmlzVmFsaWRcclxuXHJcbiAgICAgICAgICBpZiAoIXNpbGVudCAmJiAhdGhpcy5fZXJyb3JzW25hbWVdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yc1tuYW1lXSA9IG1pbkxlbmd0aFJlcy5tZXNzYWdlXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgVmFsaWRhdGlvblR5cGVzRW51bS5NYXhMZW5ndGg6XHJcbiAgICAgICAgICBjb25zdCBtYXhMZW5ndGhSZXMgPSBtYXhMZW5ndGhWYWxpZGF0aW9uKFxyXG4gICAgICAgICAgICB2YWx1ZSwgdmFsaWRhdGlvbnMsIGtleSwgdGhpcy5faW52YWxpZE1lc3NhZ2VzXHJcbiAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCA9IG1heExlbmd0aFJlcy5pc1ZhbGlkXHJcblxyXG4gICAgICAgICAgaWYgKCFzaWxlbnQgJiYgIXRoaXMuX2Vycm9yc1tuYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcnNbbmFtZV0gPSBtYXhMZW5ndGhSZXMubWVzc2FnZVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghdGhpcy5faXNWYWxpZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlIFZhbGlkYXRpb25UeXBlc0VudW0uTWluVmFsdWU6XHJcbiAgICAgICAgICBjb25zdCBtaW5WYWx1ZVJlcyA9IG1pblZhbHVlVmFsaWRhdGlvbihcclxuICAgICAgICAgICAgdmFsdWUsIHZhbGlkYXRpb25zLCBrZXksIHRoaXMuX2ludmFsaWRNZXNzYWdlc1xyXG4gICAgICAgICAgKVxyXG5cclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQgPSBtaW5WYWx1ZVJlcy5pc1ZhbGlkXHJcblxyXG4gICAgICAgICAgaWYgKCFzaWxlbnQgJiYgIXRoaXMuX2Vycm9yc1tuYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcnNbbmFtZV0gPSBtaW5WYWx1ZVJlcy5tZXNzYWdlXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgVmFsaWRhdGlvblR5cGVzRW51bS5NYXhWYWx1ZTpcclxuICAgICAgICAgIGNvbnN0IG1heFZhbHVlUmVzID0gbWF4VmFsdWVWYWxpZGF0aW9uKFxyXG4gICAgICAgICAgICB2YWx1ZSwgdmFsaWRhdGlvbnMsIGtleSwgdGhpcy5faW52YWxpZE1lc3NhZ2VzXHJcbiAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCA9IG1heFZhbHVlUmVzLmlzVmFsaWRcclxuXHJcbiAgICAgICAgICBpZiAoIXNpbGVudCAmJiAhdGhpcy5fZXJyb3JzW25hbWVdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yc1tuYW1lXSA9IG1heFZhbHVlUmVzLm1lc3NhZ2VcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoIXRoaXMuX2lzVmFsaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZXNFbnVtLkNhbGxiYWNrOlxyXG4gICAgICAgICAgY29uc3QgY2FsbGJhY2tSZXMgPSBjYWxsYmFja1ZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIHZhbHVlLCB2YWxpZGF0aW9ucywga2V5LCB0aGlzLl9pbnZhbGlkTWVzc2FnZXNcclxuICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkID0gY2FsbGJhY2tSZXMuaXNWYWxpZFxyXG5cclxuICAgICAgICAgIGlmICghc2lsZW50ICYmICF0aGlzLl9lcnJvcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JzW25hbWVdID0gY2FsbGJhY2tSZXMubWVzc2FnZVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghdGhpcy5faXNWYWxpZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGluaXRGaWVsZHMoZmllbGRzOiBJRmllbGRzLCB2YWxpZGF0aW9uczogSVZhbGlkYXRpb25zKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpZWxkcyA9IGNsb25lRGVlcChmaWVsZHMpXHJcbiAgICB0aGlzLl92YWxpZGF0aW9ucyA9IHZhbGlkYXRpb25zXHJcbiAgICB0aGlzLl9tb2RlbENsb25lID0gY2xvbmVEZWVwKGZpZWxkcylcclxuXHJcbiAgICBmb3IgKGxldCBrZXkgaW4gdmFsaWRhdGlvbnMpIHtcclxuICAgICAgdGhpcy5fdmFsaWRhdGlvbnNba2V5XSA9IGdldFNvcnRpbmdWYWxpZGF0aW9uc0hlbHBlcih2YWxpZGF0aW9uc1trZXldKVxyXG4gICAgICB0aGlzLmVycm9yc1trZXldID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzSW5pdCA9IHRydWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0TW9kZWxDaGFuZ2VkKGZpZWxkczogSUZpZWxkcyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2lzSW5pdCkge1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkID0gdHJ1ZVxyXG4gICAgICB0aGlzLl9tb2RlbENsb25lID0gY2xvbmVEZWVwKGZpZWxkcylcclxuXHJcbiAgICAgIHRoaXMuZ2V0TmFtZXNVcGRhdGVkUHJvcGVydGllcyh0aGlzLl9maWVsZHMsIGZpZWxkcykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fZXJyb3JzW25hbWVdID0gbnVsbFxyXG5cclxuICAgICAgICBpZiAodGhpcy5fbWV0aG9kID09PSBWYWxpZGF0aW9uTWV0aG9kc0VudW0uSW5wdXQpIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGVGaWVsZChmaWVsZHNbbmFtZV0sIG5hbWUsIHRoaXMuX3ZhbGlkYXRpb25zW25hbWVdLCB0cnVlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpZWxkcyA9IGNsb25lRGVlcChmaWVsZHMpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5pdEZpZWxkQ2hhbmdlZChmaWVsZHM6IElGaWVsZHMsIGZpZWxkTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNJbml0KSB7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQgPSB0cnVlXHJcblxyXG4gICAgICBpZiAoZmllbGRzLmhhc093blByb3BlcnR5KGZpZWxkTmFtZSkpIHtcclxuICAgICAgICB0aGlzLl9tb2RlbENsb25lW2ZpZWxkTmFtZV0gPSBmaWVsZHNbZmllbGROYW1lXVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9lcnJvcnNbZmllbGROYW1lXSA9IG51bGxcclxuICAgICAgdGhpcy52YWxpZGF0ZUZpZWxkKHRoaXMuX21vZGVsQ2xvbmVbZmllbGROYW1lXSwgZmllbGROYW1lLCB0aGlzLl92YWxpZGF0aW9uc1tmaWVsZE5hbWVdLCBmYWxzZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChsZXQga2V5IGluIHRoaXMuX3ZhbGlkYXRpb25zKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JzW2tleV0gPSBudWxsXHJcbiAgICAgIHRoaXMudmFsaWRhdGVGaWVsZCh0aGlzLl9maWVsZHNba2V5XSwga2V5LCB0aGlzLl92YWxpZGF0aW9uc1trZXldLCB0cnVlKVxyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coMSwgdGhpcy5faXNWYWxpZCk7XHJcbiAgICByZXR1cm4gdGhpcy5faXNWYWxpZFxyXG4gIH1cclxuXHJcbiAgLy8gVE9ETyDQktGL0YDQtdC30LDRgtGMINCyINCx0YPQtNGD0YnQtdC8XHJcbiAgcHVibGljIGluaXRNb2RlbENoYW5nZWRGcm9tRmllbGQoZmllbGQ6IGFueSwgZmllbGROYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pc0luaXQpIHtcclxuICAgICAgdGhpcy5faXNWYWxpZCA9IHRydWVcclxuICAgICAgdGhpcy5fbW9kZWxDbG9uZVtmaWVsZE5hbWVdID0gZmllbGRcclxuXHJcbiAgICAgIHRoaXMuZ2V0TmFtZXNVcGRhdGVkUHJvcGVydGllcyh0aGlzLl9maWVsZHMsIHRoaXMuX21vZGVsQ2xvbmUpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuX2Vycm9yc1tuYW1lXSA9IG51bGxcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX21ldGhvZCA9PT0gVmFsaWRhdGlvbk1ldGhvZHNFbnVtLklucHV0KSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlRmllbGQodGhpcy5fbW9kZWxDbG9uZVtuYW1lXSwgbmFtZSwgdGhpcy5fdmFsaWRhdGlvbnNbbmFtZV0sIHRydWUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmllbGRzID0gdGhpcy5fbW9kZWxDbG9uZVxyXG4gIH1cclxuXHJcbiAgLy8gVE9ETyDQktGL0YDQtdC30LDRgtGMINCyINCx0YPQtNGD0YnQtdC8XHJcbiAgcHVibGljIGlzSGlkZGVuVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLl9pc1ZhbGlkID0gdHJ1ZVxyXG5cclxuICAgIGZvciAobGV0IGtleSBpbiB0aGlzLl92YWxpZGF0aW9ucykge1xyXG4gICAgICB0aGlzLnZhbGlkYXRlRmllbGQodGhpcy5fZmllbGRzW2tleV0sIGtleSwgdGhpcy5fdmFsaWRhdGlvbnNba2V5XSwgdHJ1ZSwgdHJ1ZSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5faXNWYWxpZFxyXG4gIH1cclxufVxyXG4iXX0=
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXJ4LWZvcm0tdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9zZXJ2aWNlcy9tcngtZm9ybS12YWxpZGF0b3IvbXJ4LWZvcm0tdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHdEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRXZGLE1BQU0sT0FBTyxnQkFBZ0I7SUFXM0IsWUFBWSxPQUE4QjtRQVZsQyxZQUFPLEdBQVEsRUFBRSxDQUFBO1FBQ2pCLGlCQUFZLEdBQWlCLEVBQUUsQ0FBQTtRQUMvQixZQUFPLEdBQVEsRUFBRSxDQUFBO1FBQ2pCLGFBQVEsR0FBRyxJQUFJLENBQUE7UUFDZixZQUFPLEdBQUcsS0FB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QUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7aUJBQ2hGO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDtRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsMEJBQTBCO0lBQ25CLGFBQWE7UUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7UUFFcEIsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7U0FDL0U7UUFFRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDdEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcclxuaW1wb3J0IHsgSUZpZWxkcywgSU1lc3NhZ2VzLCBJVmFsaWRhdGlvbnMsIFZhbGlkYXRpb25zVHlwZSB9IGZyb20gJy4vbW9kZWxzL3ZhbGlkYXRpb25zLW9wdGlvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtVmFsaWRhdG9yT3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzL3ZhbGlkYXRpb25zLXNldHRpbmdzLm1vZGVsJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbk1ldGhvZHNFbnVtLCBWYWxpZGF0aW9uVHlwZXNFbnVtIH0gZnJvbSAnLi9tb2RlbHMvdmFsaWRhdGlvbnMtdHlwZXMubW9kZWwnO1xyXG5pbXBvcnQgeyByZXF1aXJlZFZhbGlkYXRpb24gfSBmcm9tICcuL3ZhbGlkYXRpb25zL3JlcXVpcmVkLnZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBlbWFpbFZhbGlkYXRpb24gfSBmcm9tICcuL3ZhbGlkYXRpb25zL2VtYWlsLnZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBwYXR0ZXJuVmFsaWRhdGlvbiB9IGZyb20gJy4vdmFsaWRhdGlvbnMvcGF0dGVybi52YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgbWF4TGVuZ3RoVmFsaWRhdGlvbiB9IGZyb20gJy4vdmFsaWRhdGlvbnMvbWF4LWxlbmd0aC52YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgbWluTGVuZ3RoVmFsaWRhdGlvbiB9IGZyb20gJy4vdmFsaWRhdGlvbnMvbWluLWxlbmd0aC52YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgbWluVmFsdWVWYWxpZGF0aW9uIH0gZnJvbSAnLi92YWxpZGF0aW9ucy9taW4tdmFsdWUudmFsaWRhdGlvbic7XHJcbmltcG9ydCB7IG1heFZhbHVlVmFsaWRhdGlvbiB9IGZyb20gJy4vdmFsaWRhdGlvbnMvbWF4LXZhbHVlLnZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBjYWxsYmFja1ZhbGlkYXRpb24gfSBmcm9tICcuL3ZhbGlkYXRpb25zL2NhbGxiYWNrLnZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBJTlZBTElEX01FU1NBR0VTIH0gZnJvbSAnLi9jb25zdGFudHMvaW52YWxpZC1tZXNzYWdlcyc7XHJcbmltcG9ydCB7IGdldFNvcnRpbmdWYWxpZGF0aW9uc0hlbHBlciB9IGZyb20gJy4vaGVscGVycy9nZXQtc29ydGluZy12YWxpZGF0aW9ucy5oZWxwZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1yeEZvcm1WYWxpZGF0b3Ige1xyXG4gIHByaXZhdGUgX2ZpZWxkczogYW55ID0gW11cclxuICBwcml2YXRlIF92YWxpZGF0aW9uczogSVZhbGlkYXRpb25zID0ge31cclxuICBwcml2YXRlIF9lcnJvcnM6IGFueSA9IHt9XHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCA9IHRydWVcclxuICBwcml2YXRlIF9pc0luaXQgPSBmYWxzZVxyXG4gIHByaXZhdGUgX21vZGVsQ2xvbmU6IElGaWVsZHMgPSB7fVxyXG5cclxuICBwcml2YXRlIF9tZXRob2QgPSAnc3VibWl0J1xyXG4gIHByaXZhdGUgX2ludmFsaWRNZXNzYWdlczogSU1lc3NhZ2VzID0gSU5WQUxJRF9NRVNTQUdFU1xyXG5cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogRm9ybVZhbGlkYXRvck9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zPy5tZXRob2QpIHtcclxuICAgICAgdGhpcy5fbWV0aG9kID0gb3B0aW9ucy5tZXRob2RcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucz8ubWVzc2FnZXMpIHtcclxuICAgICAgdGhpcy5faW52YWxpZE1lc3NhZ2VzID0gey4uLnRoaXMuX2ludmFsaWRNZXNzYWdlcywgLi4ub3B0aW9ucy5tZXNzYWdlc31cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZXJyb3JzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Vycm9yc1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXQgZmllbGRzKGZpZWxkczogYW55KSB7XHJcbiAgICB0aGlzLl9maWVsZHMgPSBPYmplY3QuYXNzaWduKHt9LCBmaWVsZHMpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE5hbWVzVXBkYXRlZFByb3BlcnRpZXMob2xkTW9kZWw6IGFueSwgbmV3TW9kZWw6IGFueSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IG5hbWVzVXBkYXRlZFByb3BlcnRpZXMgPSBbXVxyXG5cclxuICAgIGZvciAobGV0IGtleSBpbiBuZXdNb2RlbCkge1xyXG4gICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICBjYXNlIEFycmF5LmlzQXJyYXkobmV3TW9kZWxba2V5XSk6XHJcbiAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkobmV3TW9kZWxba2V5XSkgIT09IEpTT04uc3RyaW5naWZ5KG9sZE1vZGVsW2tleV0pKSB7XHJcbiAgICAgICAgICAgIG5hbWVzVXBkYXRlZFByb3BlcnRpZXMucHVzaChrZXkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpZiAobmV3TW9kZWxba2V5XSAhPT0gb2xkTW9kZWxba2V5XSkge1xyXG4gICAgICAgICAgICBuYW1lc1VwZGF0ZWRQcm9wZXJ0aWVzLnB1c2goa2V5KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuYW1lc1VwZGF0ZWRQcm9wZXJ0aWVzXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlRmllbGQoXHJcbiAgICB2YWx1ZTogc3RyaW5nLFxyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgdmFsaWRhdGlvbnM6IFZhbGlkYXRpb25zVHlwZSxcclxuICAgIHZhbGlkYXRlRW1wdHlWYWx1ZTogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgc2lsZW50OiBib29sZWFuID0gZmFsc2VcclxuICApOiB2b2lkIHtcclxuICAgIGlmICghdmFsaWRhdGVFbXB0eVZhbHVlICYmICh2YWx1ZS5sZW5ndGggPT09IDApKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5faXNWYWxpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQga2V5IGluIHZhbGlkYXRpb25zKSB7XHJcbiAgICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZXNFbnVtLlJlcXVpcmVkOlxyXG4gICAgICAgICAgY29uc3QgcmVxdWlyZWRSZXMgPSByZXF1aXJlZFZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIHZhbHVlLCB2YWxpZGF0aW9ucywga2V5LCB0aGlzLl9pbnZhbGlkTWVzc2FnZXNcclxuICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkID0gcmVxdWlyZWRSZXMuaXNWYWxpZFxyXG5cclxuICAgICAgICAgIGlmICghc2lsZW50ICYmICF0aGlzLl9lcnJvcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgIHRoaXMuX2Vycm9yc1tuYW1lXSA9IHJlcXVpcmVkUmVzLm1lc3NhZ2VcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoIXRoaXMuX2lzVmFsaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZXNFbnVtLkVtYWlsOlxyXG4gICAgICAgICAgY29uc3QgZW1haWxSZXMgPSBlbWFpbFZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIHZhbHVlLCB2YWxpZGF0aW9ucywga2V5LCB0aGlzLl9pbnZhbGlkTWVzc2FnZXNcclxuICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkID0gZW1haWxSZXMuaXNWYWxpZFxyXG5cclxuICAgICAgICAgIGlmICghc2lsZW50ICYmICF0aGlzLl9lcnJvcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JzW25hbWVdID0gZW1haWxSZXMubWVzc2FnZVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghdGhpcy5faXNWYWxpZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlIFZhbGlkYXRpb25UeXBlc0VudW0uUGF0dGVybjpcclxuICAgICAgICAgIGNvbnN0IHBhdHRlcm5SZXMgPSBwYXR0ZXJuVmFsaWRhdGlvbihcclxuICAgICAgICAgICAgdmFsdWUsIHZhbGlkYXRpb25zLCBrZXksIHRoaXMuX2ludmFsaWRNZXNzYWdlc1xyXG4gICAgICAgICAgKVxyXG5cclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQgPSBwYXR0ZXJuUmVzLmlzVmFsaWRcclxuXHJcbiAgICAgICAgICBpZiAoIXNpbGVudCAmJiAhdGhpcy5fZXJyb3JzW25hbWVdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yc1tuYW1lXSA9IHBhdHRlcm5SZXMubWVzc2FnZVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghdGhpcy5faXNWYWxpZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlIFZhbGlkYXRpb25UeXBlc0VudW0uTWluTGVuZ3RoOlxyXG4gICAgICAgICAgY29uc3QgbWluTGVuZ3RoUmVzID0gbWluTGVuZ3RoVmFsaWRhdGlvbihcclxuICAgICAgICAgICAgdmFsdWUsIHZhbGlkYXRpb25zLCBrZXksIHRoaXMuX2ludmFsaWRNZXNzYWdlc1xyXG4gICAgICAgICAgKVxyXG5cclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQgPSBtaW5MZW5ndGhSZXMuaXNWYWxpZFxyXG5cclxuICAgICAgICAgIGlmICghc2lsZW50ICYmICF0aGlzLl9lcnJvcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JzW25hbWVdID0gbWluTGVuZ3RoUmVzLm1lc3NhZ2VcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoIXRoaXMuX2lzVmFsaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZXNFbnVtLk1heExlbmd0aDpcclxuICAgICAgICAgIGNvbnN0IG1heExlbmd0aFJlcyA9IG1heExlbmd0aFZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIHZhbHVlLCB2YWxpZGF0aW9ucywga2V5LCB0aGlzLl9pbnZhbGlkTWVzc2FnZXNcclxuICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkID0gbWF4TGVuZ3RoUmVzLmlzVmFsaWRcclxuXHJcbiAgICAgICAgICBpZiAoIXNpbGVudCAmJiAhdGhpcy5fZXJyb3JzW25hbWVdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yc1tuYW1lXSA9IG1heExlbmd0aFJlcy5tZXNzYWdlXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgVmFsaWRhdGlvblR5cGVzRW51bS5NaW5WYWx1ZTpcclxuICAgICAgICAgIGNvbnN0IG1pblZhbHVlUmVzID0gbWluVmFsdWVWYWxpZGF0aW9uKFxyXG4gICAgICAgICAgICB2YWx1ZSwgdmFsaWRhdGlvbnMsIGtleSwgdGhpcy5faW52YWxpZE1lc3NhZ2VzXHJcbiAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCA9IG1pblZhbHVlUmVzLmlzVmFsaWRcclxuXHJcbiAgICAgICAgICBpZiAoIXNpbGVudCAmJiAhdGhpcy5fZXJyb3JzW25hbWVdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yc1tuYW1lXSA9IG1pblZhbHVlUmVzLm1lc3NhZ2VcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoIXRoaXMuX2lzVmFsaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZXNFbnVtLk1heFZhbHVlOlxyXG4gICAgICAgICAgY29uc3QgbWF4VmFsdWVSZXMgPSBtYXhWYWx1ZVZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIHZhbHVlLCB2YWxpZGF0aW9ucywga2V5LCB0aGlzLl9pbnZhbGlkTWVzc2FnZXNcclxuICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkID0gbWF4VmFsdWVSZXMuaXNWYWxpZFxyXG5cclxuICAgICAgICAgIGlmICghc2lsZW50ICYmICF0aGlzLl9lcnJvcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JzW25hbWVdID0gbWF4VmFsdWVSZXMubWVzc2FnZVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghdGhpcy5faXNWYWxpZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlIFZhbGlkYXRpb25UeXBlc0VudW0uQ2FsbGJhY2s6XHJcbiAgICAgICAgICBjb25zdCBjYWxsYmFja1JlcyA9IGNhbGxiYWNrVmFsaWRhdGlvbihcclxuICAgICAgICAgICAgdmFsdWUsIHZhbGlkYXRpb25zLCBrZXksIHRoaXMuX2ludmFsaWRNZXNzYWdlc1xyXG4gICAgICAgICAgKVxyXG5cclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQgPSBjYWxsYmFja1Jlcy5pc1ZhbGlkXHJcblxyXG4gICAgICAgICAgaWYgKCFzaWxlbnQgJiYgIXRoaXMuX2Vycm9yc1tuYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcnNbbmFtZV0gPSBjYWxsYmFja1Jlcy5tZXNzYWdlXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5pdEZpZWxkcyhmaWVsZHM6IElGaWVsZHMsIHZhbGlkYXRpb25zOiBJVmFsaWRhdGlvbnMpOiB2b2lkIHtcclxuICAgIHRoaXMuZmllbGRzID0gY2xvbmVEZWVwKGZpZWxkcylcclxuICAgIHRoaXMuX3ZhbGlkYXRpb25zID0gdmFsaWRhdGlvbnNcclxuICAgIHRoaXMuX21vZGVsQ2xvbmUgPSBjbG9uZURlZXAoZmllbGRzKVxyXG5cclxuICAgIGZvciAobGV0IGtleSBpbiB2YWxpZGF0aW9ucykge1xyXG4gICAgICB0aGlzLl92YWxpZGF0aW9uc1trZXldID0gZ2V0U29ydGluZ1ZhbGlkYXRpb25zSGVscGVyKHZhbGlkYXRpb25zW2tleV0pXHJcbiAgICAgIHRoaXMuZXJyb3JzW2tleV0gPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNJbml0ID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGluaXRNb2RlbENoYW5nZWQoZmllbGRzOiBJRmllbGRzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNJbml0KSB7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQgPSB0cnVlXHJcbiAgICAgIHRoaXMuX21vZGVsQ2xvbmUgPSBjbG9uZURlZXAoZmllbGRzKVxyXG5cclxuICAgICAgdGhpcy5nZXROYW1lc1VwZGF0ZWRQcm9wZXJ0aWVzKHRoaXMuX2ZpZWxkcywgZmllbGRzKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLl9lcnJvcnNbbmFtZV0gPSBudWxsXHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9tZXRob2QgPT09IFZhbGlkYXRpb25NZXRob2RzRW51bS5JbnB1dCkge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0ZUZpZWxkKGZpZWxkc1tuYW1lXSwgbmFtZSwgdGhpcy5fdmFsaWRhdGlvbnNbbmFtZV0sIHRydWUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmllbGRzID0gY2xvbmVEZWVwKGZpZWxkcylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0RmllbGRDaGFuZ2VkKGZpZWxkczogSUZpZWxkcywgZmllbGROYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pc0luaXQpIHtcclxuICAgICAgdGhpcy5faXNWYWxpZCA9IHRydWVcclxuXHJcbiAgICAgIGlmIChmaWVsZHMuaGFzT3duUHJvcGVydHkoZmllbGROYW1lKSkge1xyXG4gICAgICAgIHRoaXMuX21vZGVsQ2xvbmVbZmllbGROYW1lXSA9IGZpZWxkc1tmaWVsZE5hbWVdXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX2Vycm9yc1tmaWVsZE5hbWVdID0gbnVsbFxyXG4gICAgICB0aGlzLnZhbGlkYXRlRmllbGQodGhpcy5fbW9kZWxDbG9uZVtmaWVsZE5hbWVdLCBmaWVsZE5hbWUsIHRoaXMuX3ZhbGlkYXRpb25zW2ZpZWxkTmFtZV0sIGZhbHNlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5fdmFsaWRhdGlvbnMpIHtcclxuICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmFsaWRcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5lcnJvcnNba2V5XSA9IG51bGxcclxuICAgICAgdGhpcy52YWxpZGF0ZUZpZWxkKHRoaXMuX2ZpZWxkc1trZXldLCBrZXksIHRoaXMuX3ZhbGlkYXRpb25zW2tleV0sIHRydWUpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2lzVmFsaWRcclxuICB9XHJcblxyXG4gIC8vIFRPRE8g0JLRi9GA0LXQt9Cw0YLRjCDQsiDQsdGD0LTRg9GJ0LXQvFxyXG4gIHB1YmxpYyBpbml0TW9kZWxDaGFuZ2VkRnJvbUZpZWxkKGZpZWxkOiBhbnksIGZpZWxkTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNJbml0KSB7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQgPSB0cnVlXHJcbiAgICAgIHRoaXMuX21vZGVsQ2xvbmVbZmllbGROYW1lXSA9IGZpZWxkXHJcblxyXG4gICAgICB0aGlzLmdldE5hbWVzVXBkYXRlZFByb3BlcnRpZXModGhpcy5fZmllbGRzLCB0aGlzLl9tb2RlbENsb25lKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLl9lcnJvcnNbbmFtZV0gPSBudWxsXHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9tZXRob2QgPT09IFZhbGlkYXRpb25NZXRob2RzRW51bS5JbnB1dCkge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0ZUZpZWxkKHRoaXMuX21vZGVsQ2xvbmVbbmFtZV0sIG5hbWUsIHRoaXMuX3ZhbGlkYXRpb25zW25hbWVdLCB0cnVlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpZWxkcyA9IHRoaXMuX21vZGVsQ2xvbmVcclxuICB9XHJcblxyXG4gIC8vIFRPRE8g0JLRi9GA0LXQt9Cw0YLRjCDQsiDQsdGD0LTRg9GJ0LXQvFxyXG4gIHB1YmxpYyBpc0hpZGRlblZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5faXNWYWxpZCA9IHRydWVcclxuXHJcbiAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5fdmFsaWRhdGlvbnMpIHtcclxuICAgICAgdGhpcy52YWxpZGF0ZUZpZWxkKHRoaXMuX2ZpZWxkc1trZXldLCBrZXksIHRoaXMuX3ZhbGlkYXRpb25zW2tleV0sIHRydWUsIHRydWUpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2lzVmFsaWRcclxuICB9XHJcbn1cclxuIl19