@seniorsistemas/angular-components 19.9.3 → 19.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/checkbox/lib/checkbox/checkbox.component.d.ts +1 -6
- package/checkbox-list/lib/checkbox-list/checkbox-list.component.d.ts +8 -0
- package/content-generator/lib/content-generator/content-generator.component.d.ts +2 -2
- package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +2 -0
- package/drawer/README.md +9 -2
- package/drawer/lib/drawer/drawer.component.d.ts +12 -1
- package/editor/lib/editor/editor.component.d.ts +1 -1
- package/esm2022/button/lib/button/button.component.mjs +3 -3
- package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +3 -9
- package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +17 -5
- package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +9 -8
- package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +18 -3
- package/esm2022/drawer/lib/drawer/drawer.component.mjs +33 -11
- package/esm2022/drawer/lib/drawer/drawer.module.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/checkbox/checkbox-field.component.mjs +4 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +3 -3
- package/esm2022/editor/lib/editor/editor.component.mjs +8 -8
- package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +4 -4
- package/esm2022/global-search/lib/global-search/components/dropdown/global-search-dropdown-item.component.mjs +4 -4
- package/esm2022/global-search/lib/global-search/global-search.module.mjs +2 -2
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +3 -3
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.mjs +2 -3
- package/esm2022/paginator/lib/models/paginator.models.mjs +1 -1
- package/esm2022/paginator/lib/paginator/paginator.component.mjs +19 -13
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +19 -8
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.mjs +3 -4
- package/esm2022/select/lib/select/select.component.mjs +3 -3
- package/esm2022/side-sheet/lib/side-sheet/side-sheet.component.mjs +6 -5
- package/esm2022/slider/lib/slider/slider.component.mjs +3 -3
- package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +54 -8
- package/esm2022/star-rating/star-rating/star-rating.component.mjs +3 -3
- package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +14 -21
- package/esm2022/text-area/lib/text-area/text-area.component.mjs +3 -3
- package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +3 -2
- package/esm2022/utils/lib/utils/utils.mjs +49 -3
- package/fesm2022/seniorsistemas-angular-components-button.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +16 -4
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +2 -8
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +8 -6
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +17 -2
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs +32 -9
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +16 -16
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-editor.mjs +7 -7
- package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +3 -3
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs +3 -3
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +3 -4
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs +18 -12
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +20 -9
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs +5 -4
- package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-slider.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +53 -7
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs +13 -20
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +2 -1
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-utils.mjs +49 -3
- package/fesm2022/seniorsistemas-angular-components-utils.mjs.map +1 -1
- package/global-search/lib/global-search/global-search.module.d.ts +1 -1
- package/package.json +7 -9
- package/paginator/lib/models/paginator.models.d.ts +1 -0
- package/paginator/lib/paginator/paginator.component.d.ts +3 -1
- package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +3 -1
- package/side-sheet/README.md +4 -4
- package/side-sheet/lib/side-sheet/side-sheet.component.d.ts +1 -0
- package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +2 -1
- package/table-header/lib/table-header/table-header-checkbox.component.d.ts +1 -4
- package/utils/lib/utils/utils.d.ts +21 -0
|
@@ -75,10 +75,10 @@ export class EditorComponent {
|
|
|
75
75
|
* @description Emitido quando a seleção de texto no editor muda.
|
|
76
76
|
*/
|
|
77
77
|
selectionChange = output();
|
|
78
|
+
formDisabled = false;
|
|
78
79
|
editorContainer = viewChild.required('editorContainer');
|
|
79
80
|
imageInput = viewChild.required('imageInput');
|
|
80
81
|
editor;
|
|
81
|
-
_formDisabled = false;
|
|
82
82
|
_currentPlaceholder = '';
|
|
83
83
|
activeStates = {
|
|
84
84
|
isBold: false,
|
|
@@ -106,7 +106,7 @@ export class EditorComponent {
|
|
|
106
106
|
constructor() {
|
|
107
107
|
effect(() => {
|
|
108
108
|
if (this.editor) {
|
|
109
|
-
this.editor.setEditable(!this.readonly() && !this.
|
|
109
|
+
this.editor.setEditable(!this.readonly() && !this.formDisabled, false);
|
|
110
110
|
this.cdr.markForCheck();
|
|
111
111
|
}
|
|
112
112
|
});
|
|
@@ -135,8 +135,8 @@ export class EditorComponent {
|
|
|
135
135
|
this._onTouched = fn;
|
|
136
136
|
}
|
|
137
137
|
setDisabledState(isDisabled) {
|
|
138
|
-
this.
|
|
139
|
-
this.editor?.setEditable(!isDisabled && !this.readonly());
|
|
138
|
+
this.formDisabled = isDisabled;
|
|
139
|
+
this.editor?.setEditable(!isDisabled && !this.readonly(), false);
|
|
140
140
|
this.cdr.markForCheck();
|
|
141
141
|
}
|
|
142
142
|
isFormatAllowed(format) {
|
|
@@ -306,7 +306,7 @@ export class EditorComponent {
|
|
|
306
306
|
},
|
|
307
307
|
},
|
|
308
308
|
onUpdate: ({ editor }) => {
|
|
309
|
-
const html = editor.getHTML();
|
|
309
|
+
const html = editor.isEmpty ? '' : editor.getHTML();
|
|
310
310
|
const text = editor.getText();
|
|
311
311
|
this._value = html;
|
|
312
312
|
this._onChange(html);
|
|
@@ -360,7 +360,7 @@ export class EditorComponent {
|
|
|
360
360
|
useExisting: forwardRef(() => EditorComponent),
|
|
361
361
|
multi: true,
|
|
362
362
|
},
|
|
363
|
-
], viewQueries: [{ propertyName: "editorContainer", first: true, predicate: ["editorContainer"], descendants: true, isSignal: true }, { propertyName: "imageInput", first: true, predicate: ["imageInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"rounded bg-grayscale-0 flex flex-col border border-grayscale-30 transition-[border-color,box-shadow] duration-150 focus-within:border-[#5c5ce6] focus-within:shadow-[0_0_0_2px_rgba(92,92,230,0.15)]\"\n [ngClass]=\"styleClass()\"\n [ngStyle]=\"style()\"\n [class.s-editor--readonly]=\"readonly()\"\n>\n @if (!readonly()) {\n <div\n class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n role=\"toolbar\"\n [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n (keydown)=\"onToolbarKeydown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\"\n >\n @if (isFormatAllowed('header')) {\n <select\n class=\"rounded bg-grayscale-0 h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus:border-[#5c5ce6]\"\n (change)=\"onHeadingChange($event)\"\n [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n >\n <option\n [value]=\"0\"\n [selected]=\"activeStates.currentHeading === 0\"\n >\n {{ 'platform.angular_components.editor_heading_normal' | translate }}\n </option>\n <option\n [value]=\"1\"\n [selected]=\"activeStates.currentHeading === 1\"\n >\n {{ 'platform.angular_components.editor_heading_1' | translate }}\n </option>\n <option\n [value]=\"2\"\n [selected]=\"activeStates.currentHeading === 2\"\n >\n {{ 'platform.angular_components.editor_heading_2' | translate }}\n </option>\n <option\n [value]=\"3\"\n [selected]=\"activeStates.currentHeading === 3\"\n >\n {{ 'platform.angular_components.editor_heading_3' | translate }}\n </option>\n </select>\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n @if (isFormatAllowed('bold')) {\n <s-editor-toolbar-button\n icon=\"fa fa-bold\"\n [label]=\"'platform.angular_components.editor_bold' | translate\"\n [active]=\"activeStates.isBold\"\n (clicked)=\"toggleBold()\"\n />\n }\n\n @if (isFormatAllowed('italic')) {\n <s-editor-toolbar-button\n icon=\"fa fa-italic\"\n [label]=\"'platform.angular_components.editor_italic' | translate\"\n [active]=\"activeStates.isItalic\"\n (clicked)=\"toggleItalic()\"\n />\n }\n\n @if (isFormatAllowed('underline')) {\n <s-editor-toolbar-button\n icon=\"fa fa-underline\"\n [label]=\"'platform.angular_components.editor_underline' | translate\"\n [active]=\"activeStates.isUnderline\"\n (clicked)=\"toggleUnderline()\"\n />\n }\n\n @if (isFormatAllowed('strike')) {\n <s-editor-toolbar-button\n icon=\"fa fa-strikethrough\"\n [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n [active]=\"activeStates.isStrike\"\n (clicked)=\"toggleStrike()\"\n />\n }\n\n @if (isFormatAllowed('subscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-subscript\"\n [label]=\"'platform.angular_components.editor_subscript' | translate\"\n [active]=\"activeStates.isSubscript\"\n (clicked)=\"toggleSubscript()\"\n />\n }\n\n @if (isFormatAllowed('superscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-superscript\"\n [label]=\"'platform.angular_components.editor_superscript' | translate\"\n [active]=\"activeStates.isSuperscript\"\n (clicked)=\"toggleSuperscript()\"\n />\n }\n\n @if (isFormatAllowed('color')) {\n <label\n tabindex=\"0\"\n class=\"relative flex h-7 w-7 cursor-pointer items-center justify-center rounded bg-grayscale-0 transition-colors duration-150 hover:bg-[#f0f0f8]\"\n [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n (keydown.enter)=\"$event.preventDefault(); colorInput.click()\"\n (keydown.space)=\"$event.preventDefault(); colorInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentColor\"\n ></span>\n </span>\n <input\n #colorInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n [value]=\"activeStates.currentColor\"\n (input)=\"setColor($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('highlight')) {\n <label\n tabindex=\"0\"\n class=\"relative flex h-7 w-7 cursor-pointer items-center justify-center rounded bg-grayscale-0 transition-colors duration-150 hover:bg-[#f0f0f8]\"\n [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n (keydown.enter)=\"$event.preventDefault(); highlightInput.click()\"\n (keydown.space)=\"$event.preventDefault(); highlightInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n ></span>\n </span>\n <input\n #highlightInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n (input)=\"setHighlight($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('list')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-list-ul\"\n [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n [active]=\"activeStates.isBulletList\"\n (clicked)=\"toggleBulletList()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-list-ol\"\n [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n [active]=\"activeStates.isOrderedList\"\n (clicked)=\"toggleOrderedList()\"\n />\n }\n\n @if (isFormatAllowed('align')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-align-left\"\n [label]=\"'platform.angular_components.editor_align_left' | translate\"\n [active]=\"activeStates.isAlignLeft\"\n (clicked)=\"setTextAlign('left')\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-center\"\n [label]=\"'platform.angular_components.editor_align_center' | translate\"\n [active]=\"activeStates.isAlignCenter\"\n (clicked)=\"setTextAlign('center')\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-right\"\n [label]=\"'platform.angular_components.editor_align_right' | translate\"\n [active]=\"activeStates.isAlignRight\"\n (clicked)=\"setTextAlign('right')\"\n />\n }\n\n @if (isFormatAllowed('blockquote')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-quote-right\"\n [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n [active]=\"activeStates.isBlockquote\"\n (clicked)=\"toggleBlockquote()\"\n />\n }\n\n @if (isFormatAllowed('code-block')) {\n <s-editor-toolbar-button\n icon=\"fa fa-code\"\n [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n [active]=\"activeStates.isCode\"\n (clicked)=\"toggleCode()\"\n />\n }\n\n @if (isFormatAllowed('link')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-link\"\n [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n (clicked)=\"setLink()\"\n />\n }\n\n @if (isFormatAllowed('image')) {\n <s-editor-toolbar-button\n icon=\"fa fa-image\"\n [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n (clicked)=\"setImage()\"\n />\n }\n\n @if (hasAnyFormatBeforeUndoRedo()) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n <s-editor-toolbar-button\n icon=\"fa fa-undo\"\n [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n [disabled]=\"!activeStates.canUndo\"\n (clicked)=\"undo()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-redo\"\n [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n [disabled]=\"!activeStates.canRedo\"\n (clicked)=\"redo()\"\n />\n\n @if (isFormatAllowed('clean')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-remove-format\"\n [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n (clicked)=\"clearFormatting()\"\n />\n }\n </div>\n }\n\n <div\n #editorContainer\n class=\"s-editor-content flex-1\"\n ></div>\n <input\n #imageInput\n type=\"file\"\n accept=\"image/*\"\n style=\"display: none\"\n aria-hidden=\"true\"\n (change)=\"onImageFileSelected($event)\"\n />\n</div>\n", styles: [".s-editor--readonly ::ng-deep .ProseMirror{cursor:default}.s-editor-content ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:#9ca3af;pointer-events:none;float:left;height:0}.s-editor-content ::ng-deep .ProseMirror{padding:12px 16px;min-height:150px;outline:none!important;color:#1e1e2e;font-size:14px;line-height:1.6}.s-editor-content ::ng-deep .ProseMirror>*+*{margin-top:.5em}.s-editor-content ::ng-deep .ProseMirror p{margin:0}.s-editor-content ::ng-deep .ProseMirror h1{font-size:1.75em;font-weight:700;line-height:1.2;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h1:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h2{font-size:1.4em;font-weight:600;line-height:1.3;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h2:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h3{font-size:1.15em;font-weight:600;line-height:1.4;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h3:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror ul{list-style:disc;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror ol{list-style:decimal;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror li{margin:.2em 0}.s-editor-content ::ng-deep .ProseMirror li p{margin:0}.s-editor-content ::ng-deep .ProseMirror blockquote{border-left:3px solid #5c5ce6;padding-left:1em;margin:.75em 0;color:#6b6b80;font-style:italic}.s-editor-content ::ng-deep .ProseMirror code{background:#f0f0f8;border-radius:3px;padding:.15em .4em;font-family:Courier New,Courier,monospace;font-size:.875em;color:#c026d3}.s-editor-content ::ng-deep .ProseMirror pre{background:#1e1e2e;color:#cdd6f4;border-radius:6px;padding:1em 1.25em;overflow-x:auto;font-family:Courier New,Courier,monospace;font-size:.875em;line-height:1.5}.s-editor-content ::ng-deep .ProseMirror pre code{background:none;padding:0;color:inherit;font-size:inherit}.s-editor-content ::ng-deep .ProseMirror a{color:#5c5ce6;text-decoration:underline;cursor:pointer}.s-editor-content ::ng-deep .ProseMirror a:hover{color:#4040b0}.s-editor-content ::ng-deep .ProseMirror img{max-width:100%;height:auto;border-radius:4px;display:block}.s-editor-content ::ng-deep .ProseMirror hr{border:none;border-top:2px solid #e8e8f0;margin:1em 0}.s-editor-content ::ng-deep .ProseMirror sub{font-size:.75em;vertical-align:sub}.s-editor-content ::ng-deep .ProseMirror sup{font-size:.75em;vertical-align:super}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: EditorToolbarButtonComponent, selector: "s-editor-toolbar-button", inputs: ["icon", "label", "active", "disabled"], outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
363
|
+
], viewQueries: [{ propertyName: "editorContainer", first: true, predicate: ["editorContainer"], descendants: true, isSignal: true }, { propertyName: "imageInput", first: true, predicate: ["imageInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"rounded flex flex-col border transition-[border-color,box-shadow] duration-150 focus-within:border-[#5c5ce6] focus-within:shadow-[0_0_0_2px_rgba(92,92,230,0.15)]\"\n [ngClass]=\"styleClass()\"\n [ngStyle]=\"style()\"\n [class.s-editor--readonly]=\"readonly()\"\n [class.s-editor--disabled]=\"formDisabled\"\n [class.pointer-events-none]=\"formDisabled\"\n [class.border-grayscale-20]=\"formDisabled\"\n [class.bg-grayscale-5]=\"formDisabled\"\n [class.border-grayscale-30]=\"!formDisabled\"\n [class.bg-grayscale-0]=\"!formDisabled\"\n [attr.aria-disabled]=\"formDisabled\"\n>\n @if (!readonly()) {\n <div\n class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n role=\"toolbar\"\n [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n (keydown)=\"onToolbarKeydown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\"\n >\n @if (isFormatAllowed('header')) {\n <select\n class=\"rounded bg-grayscale-0 h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus:border-[#5c5ce6] disabled:cursor-not-allowed disabled:border-grayscale-20 disabled:bg-grayscale-5 disabled:text-grayscale-30\"\n (change)=\"onHeadingChange($event)\"\n [disabled]=\"formDisabled\"\n [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n >\n <option\n [value]=\"0\"\n [selected]=\"activeStates.currentHeading === 0\"\n >\n {{ 'platform.angular_components.editor_heading_normal' | translate }}\n </option>\n <option\n [value]=\"1\"\n [selected]=\"activeStates.currentHeading === 1\"\n >\n {{ 'platform.angular_components.editor_heading_1' | translate }}\n </option>\n <option\n [value]=\"2\"\n [selected]=\"activeStates.currentHeading === 2\"\n >\n {{ 'platform.angular_components.editor_heading_2' | translate }}\n </option>\n <option\n [value]=\"3\"\n [selected]=\"activeStates.currentHeading === 3\"\n >\n {{ 'platform.angular_components.editor_heading_3' | translate }}\n </option>\n </select>\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n @if (isFormatAllowed('bold')) {\n <s-editor-toolbar-button\n icon=\"fa fa-bold\"\n [label]=\"'platform.angular_components.editor_bold' | translate\"\n [active]=\"activeStates.isBold\"\n (clicked)=\"toggleBold()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('italic')) {\n <s-editor-toolbar-button\n icon=\"fa fa-italic\"\n [label]=\"'platform.angular_components.editor_italic' | translate\"\n [active]=\"activeStates.isItalic\"\n (clicked)=\"toggleItalic()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('underline')) {\n <s-editor-toolbar-button\n icon=\"fa fa-underline\"\n [label]=\"'platform.angular_components.editor_underline' | translate\"\n [active]=\"activeStates.isUnderline\"\n (clicked)=\"toggleUnderline()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('strike')) {\n <s-editor-toolbar-button\n icon=\"fa fa-strikethrough\"\n [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n [active]=\"activeStates.isStrike\"\n (clicked)=\"toggleStrike()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('subscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-subscript\"\n [label]=\"'platform.angular_components.editor_subscript' | translate\"\n [active]=\"activeStates.isSubscript\"\n (clicked)=\"toggleSubscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('superscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-superscript\"\n [label]=\"'platform.angular_components.editor_superscript' | translate\"\n [active]=\"activeStates.isSuperscript\"\n (clicked)=\"toggleSuperscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('color')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentColor\"\n ></span>\n </span>\n <input\n #colorInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentColor\"\n [disabled]=\"formDisabled\"\n (input)=\"setColor($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('highlight')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n ></span>\n </span>\n <input\n #highlightInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n [disabled]=\"formDisabled\"\n (input)=\"setHighlight($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('list')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-list-ul\"\n [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n [active]=\"activeStates.isBulletList\"\n (clicked)=\"toggleBulletList()\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-list-ol\"\n [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n [active]=\"activeStates.isOrderedList\"\n (clicked)=\"toggleOrderedList()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('align')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-align-left\"\n [label]=\"'platform.angular_components.editor_align_left' | translate\"\n [active]=\"activeStates.isAlignLeft\"\n (clicked)=\"setTextAlign('left')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-center\"\n [label]=\"'platform.angular_components.editor_align_center' | translate\"\n [active]=\"activeStates.isAlignCenter\"\n (clicked)=\"setTextAlign('center')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-right\"\n [label]=\"'platform.angular_components.editor_align_right' | translate\"\n [active]=\"activeStates.isAlignRight\"\n (clicked)=\"setTextAlign('right')\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('blockquote')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-quote-right\"\n [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n [active]=\"activeStates.isBlockquote\"\n (clicked)=\"toggleBlockquote()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('code-block')) {\n <s-editor-toolbar-button\n icon=\"fa fa-code\"\n [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n [active]=\"activeStates.isCode\"\n (clicked)=\"toggleCode()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('link')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-link\"\n [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n (clicked)=\"setLink()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('image')) {\n <s-editor-toolbar-button\n icon=\"fa fa-image\"\n [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n (clicked)=\"setImage()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (hasAnyFormatBeforeUndoRedo()) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n <s-editor-toolbar-button\n icon=\"fa fa-undo\"\n [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n [disabled]=\"formDisabled || !activeStates.canUndo\"\n (clicked)=\"undo()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-redo\"\n [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n [disabled]=\"formDisabled || !activeStates.canRedo\"\n (clicked)=\"redo()\"\n />\n\n @if (isFormatAllowed('clean')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-remove-format\"\n [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n (clicked)=\"clearFormatting()\"\n [disabled]=\"formDisabled\"\n />\n }\n </div>\n }\n\n <div\n #editorContainer\n class=\"s-editor-content flex-1\"\n ></div>\n <input\n #imageInput\n type=\"file\"\n accept=\"image/*\"\n style=\"display: none\"\n aria-hidden=\"true\"\n (change)=\"onImageFileSelected($event)\"\n />\n</div>\n", styles: [".s-editor--readonly ::ng-deep .ProseMirror{cursor:default}.s-editor--disabled ::ng-deep .ProseMirror{cursor:not-allowed;color:#c1c1cc}.s-editor--disabled ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{color:#c1c1cc}:host(.ng-dirty.ng-invalid)>div{border-color:#c13018!important;box-shadow:none!important}.s-editor-content ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:#9ca3af;pointer-events:none;float:left;height:0}.s-editor-content ::ng-deep .ProseMirror{padding:12px 16px;min-height:150px;outline:none!important;color:#1e1e2e;font-size:14px;line-height:1.6}.s-editor-content ::ng-deep .ProseMirror>*+*{margin-top:.5em}.s-editor-content ::ng-deep .ProseMirror p{margin:0}.s-editor-content ::ng-deep .ProseMirror h1{font-size:1.75em;font-weight:700;line-height:1.2;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h1:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h2{font-size:1.4em;font-weight:600;line-height:1.3;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h2:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h3{font-size:1.15em;font-weight:600;line-height:1.4;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h3:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror ul{list-style:disc;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror ol{list-style:decimal;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror li{margin:.2em 0}.s-editor-content ::ng-deep .ProseMirror li p{margin:0}.s-editor-content ::ng-deep .ProseMirror blockquote{border-left:3px solid #5c5ce6;padding-left:1em;margin:.75em 0;color:#6b6b80;font-style:italic}.s-editor-content ::ng-deep .ProseMirror code{background:#f0f0f8;border-radius:3px;padding:.15em .4em;font-family:Courier New,Courier,monospace;font-size:.875em;color:#c026d3}.s-editor-content ::ng-deep .ProseMirror pre{background:#1e1e2e;color:#cdd6f4;border-radius:6px;padding:1em 1.25em;overflow-x:auto;font-family:Courier New,Courier,monospace;font-size:.875em;line-height:1.5}.s-editor-content ::ng-deep .ProseMirror pre code{background:none;padding:0;color:inherit;font-size:inherit}.s-editor-content ::ng-deep .ProseMirror a{color:#5c5ce6;text-decoration:underline;cursor:pointer}.s-editor-content ::ng-deep .ProseMirror a:hover{color:#4040b0}.s-editor-content ::ng-deep .ProseMirror img{max-width:100%;height:auto;border-radius:4px;display:block}.s-editor-content ::ng-deep .ProseMirror hr{border:none;border-top:2px solid #e8e8f0;margin:1em 0}.s-editor-content ::ng-deep .ProseMirror sub{font-size:.75em;vertical-align:sub}.s-editor-content ::ng-deep .ProseMirror sup{font-size:.75em;vertical-align:super}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: EditorToolbarButtonComponent, selector: "s-editor-toolbar-button", inputs: ["icon", "label", "active", "disabled"], outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
364
364
|
}
|
|
365
365
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EditorComponent, decorators: [{
|
|
366
366
|
type: Component,
|
|
@@ -370,6 +370,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
370
370
|
useExisting: forwardRef(() => EditorComponent),
|
|
371
371
|
multi: true,
|
|
372
372
|
},
|
|
373
|
-
], template: "<div\n class=\"rounded bg-grayscale-0 flex flex-col border border-grayscale-30 transition-[border-color,box-shadow] duration-150 focus-within:border-[#5c5ce6] focus-within:shadow-[0_0_0_2px_rgba(92,92,230,0.15)]\"\n [ngClass]=\"styleClass()\"\n [ngStyle]=\"style()\"\n [class.s-editor--readonly]=\"readonly()\"\n>\n @if (!readonly()) {\n <div\n class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n role=\"toolbar\"\n [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n (keydown)=\"onToolbarKeydown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\"\n >\n @if (isFormatAllowed('header')) {\n <select\n class=\"rounded bg-grayscale-0 h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus:border-[#5c5ce6]\"\n (change)=\"onHeadingChange($event)\"\n [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n >\n <option\n [value]=\"0\"\n [selected]=\"activeStates.currentHeading === 0\"\n >\n {{ 'platform.angular_components.editor_heading_normal' | translate }}\n </option>\n <option\n [value]=\"1\"\n [selected]=\"activeStates.currentHeading === 1\"\n >\n {{ 'platform.angular_components.editor_heading_1' | translate }}\n </option>\n <option\n [value]=\"2\"\n [selected]=\"activeStates.currentHeading === 2\"\n >\n {{ 'platform.angular_components.editor_heading_2' | translate }}\n </option>\n <option\n [value]=\"3\"\n [selected]=\"activeStates.currentHeading === 3\"\n >\n {{ 'platform.angular_components.editor_heading_3' | translate }}\n </option>\n </select>\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n @if (isFormatAllowed('bold')) {\n <s-editor-toolbar-button\n icon=\"fa fa-bold\"\n [label]=\"'platform.angular_components.editor_bold' | translate\"\n [active]=\"activeStates.isBold\"\n (clicked)=\"toggleBold()\"\n />\n }\n\n @if (isFormatAllowed('italic')) {\n <s-editor-toolbar-button\n icon=\"fa fa-italic\"\n [label]=\"'platform.angular_components.editor_italic' | translate\"\n [active]=\"activeStates.isItalic\"\n (clicked)=\"toggleItalic()\"\n />\n }\n\n @if (isFormatAllowed('underline')) {\n <s-editor-toolbar-button\n icon=\"fa fa-underline\"\n [label]=\"'platform.angular_components.editor_underline' | translate\"\n [active]=\"activeStates.isUnderline\"\n (clicked)=\"toggleUnderline()\"\n />\n }\n\n @if (isFormatAllowed('strike')) {\n <s-editor-toolbar-button\n icon=\"fa fa-strikethrough\"\n [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n [active]=\"activeStates.isStrike\"\n (clicked)=\"toggleStrike()\"\n />\n }\n\n @if (isFormatAllowed('subscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-subscript\"\n [label]=\"'platform.angular_components.editor_subscript' | translate\"\n [active]=\"activeStates.isSubscript\"\n (clicked)=\"toggleSubscript()\"\n />\n }\n\n @if (isFormatAllowed('superscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-superscript\"\n [label]=\"'platform.angular_components.editor_superscript' | translate\"\n [active]=\"activeStates.isSuperscript\"\n (clicked)=\"toggleSuperscript()\"\n />\n }\n\n @if (isFormatAllowed('color')) {\n <label\n tabindex=\"0\"\n class=\"relative flex h-7 w-7 cursor-pointer items-center justify-center rounded bg-grayscale-0 transition-colors duration-150 hover:bg-[#f0f0f8]\"\n [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n (keydown.enter)=\"$event.preventDefault(); colorInput.click()\"\n (keydown.space)=\"$event.preventDefault(); colorInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentColor\"\n ></span>\n </span>\n <input\n #colorInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n [value]=\"activeStates.currentColor\"\n (input)=\"setColor($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('highlight')) {\n <label\n tabindex=\"0\"\n class=\"relative flex h-7 w-7 cursor-pointer items-center justify-center rounded bg-grayscale-0 transition-colors duration-150 hover:bg-[#f0f0f8]\"\n [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n (keydown.enter)=\"$event.preventDefault(); highlightInput.click()\"\n (keydown.space)=\"$event.preventDefault(); highlightInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n ></span>\n </span>\n <input\n #highlightInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n (input)=\"setHighlight($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('list')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-list-ul\"\n [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n [active]=\"activeStates.isBulletList\"\n (clicked)=\"toggleBulletList()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-list-ol\"\n [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n [active]=\"activeStates.isOrderedList\"\n (clicked)=\"toggleOrderedList()\"\n />\n }\n\n @if (isFormatAllowed('align')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-align-left\"\n [label]=\"'platform.angular_components.editor_align_left' | translate\"\n [active]=\"activeStates.isAlignLeft\"\n (clicked)=\"setTextAlign('left')\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-center\"\n [label]=\"'platform.angular_components.editor_align_center' | translate\"\n [active]=\"activeStates.isAlignCenter\"\n (clicked)=\"setTextAlign('center')\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-right\"\n [label]=\"'platform.angular_components.editor_align_right' | translate\"\n [active]=\"activeStates.isAlignRight\"\n (clicked)=\"setTextAlign('right')\"\n />\n }\n\n @if (isFormatAllowed('blockquote')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-quote-right\"\n [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n [active]=\"activeStates.isBlockquote\"\n (clicked)=\"toggleBlockquote()\"\n />\n }\n\n @if (isFormatAllowed('code-block')) {\n <s-editor-toolbar-button\n icon=\"fa fa-code\"\n [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n [active]=\"activeStates.isCode\"\n (clicked)=\"toggleCode()\"\n />\n }\n\n @if (isFormatAllowed('link')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-link\"\n [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n (clicked)=\"setLink()\"\n />\n }\n\n @if (isFormatAllowed('image')) {\n <s-editor-toolbar-button\n icon=\"fa fa-image\"\n [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n (clicked)=\"setImage()\"\n />\n }\n\n @if (hasAnyFormatBeforeUndoRedo()) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n <s-editor-toolbar-button\n icon=\"fa fa-undo\"\n [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n [disabled]=\"!activeStates.canUndo\"\n (clicked)=\"undo()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-redo\"\n [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n [disabled]=\"!activeStates.canRedo\"\n (clicked)=\"redo()\"\n />\n\n @if (isFormatAllowed('clean')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-remove-format\"\n [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n (clicked)=\"clearFormatting()\"\n />\n }\n </div>\n }\n\n <div\n #editorContainer\n class=\"s-editor-content flex-1\"\n ></div>\n <input\n #imageInput\n type=\"file\"\n accept=\"image/*\"\n style=\"display: none\"\n aria-hidden=\"true\"\n (change)=\"onImageFileSelected($event)\"\n />\n</div>\n", styles: [".s-editor--readonly ::ng-deep .ProseMirror{cursor:default}.s-editor-content ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:#9ca3af;pointer-events:none;float:left;height:0}.s-editor-content ::ng-deep .ProseMirror{padding:12px 16px;min-height:150px;outline:none!important;color:#1e1e2e;font-size:14px;line-height:1.6}.s-editor-content ::ng-deep .ProseMirror>*+*{margin-top:.5em}.s-editor-content ::ng-deep .ProseMirror p{margin:0}.s-editor-content ::ng-deep .ProseMirror h1{font-size:1.75em;font-weight:700;line-height:1.2;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h1:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h2{font-size:1.4em;font-weight:600;line-height:1.3;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h2:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h3{font-size:1.15em;font-weight:600;line-height:1.4;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h3:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror ul{list-style:disc;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror ol{list-style:decimal;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror li{margin:.2em 0}.s-editor-content ::ng-deep .ProseMirror li p{margin:0}.s-editor-content ::ng-deep .ProseMirror blockquote{border-left:3px solid #5c5ce6;padding-left:1em;margin:.75em 0;color:#6b6b80;font-style:italic}.s-editor-content ::ng-deep .ProseMirror code{background:#f0f0f8;border-radius:3px;padding:.15em .4em;font-family:Courier New,Courier,monospace;font-size:.875em;color:#c026d3}.s-editor-content ::ng-deep .ProseMirror pre{background:#1e1e2e;color:#cdd6f4;border-radius:6px;padding:1em 1.25em;overflow-x:auto;font-family:Courier New,Courier,monospace;font-size:.875em;line-height:1.5}.s-editor-content ::ng-deep .ProseMirror pre code{background:none;padding:0;color:inherit;font-size:inherit}.s-editor-content ::ng-deep .ProseMirror a{color:#5c5ce6;text-decoration:underline;cursor:pointer}.s-editor-content ::ng-deep .ProseMirror a:hover{color:#4040b0}.s-editor-content ::ng-deep .ProseMirror img{max-width:100%;height:auto;border-radius:4px;display:block}.s-editor-content ::ng-deep .ProseMirror hr{border:none;border-top:2px solid #e8e8f0;margin:1em 0}.s-editor-content ::ng-deep .ProseMirror sub{font-size:.75em;vertical-align:sub}.s-editor-content ::ng-deep .ProseMirror sup{font-size:.75em;vertical-align:super}\n"] }]
|
|
373
|
+
], template: "<div\n class=\"rounded flex flex-col border transition-[border-color,box-shadow] duration-150 focus-within:border-[#5c5ce6] focus-within:shadow-[0_0_0_2px_rgba(92,92,230,0.15)]\"\n [ngClass]=\"styleClass()\"\n [ngStyle]=\"style()\"\n [class.s-editor--readonly]=\"readonly()\"\n [class.s-editor--disabled]=\"formDisabled\"\n [class.pointer-events-none]=\"formDisabled\"\n [class.border-grayscale-20]=\"formDisabled\"\n [class.bg-grayscale-5]=\"formDisabled\"\n [class.border-grayscale-30]=\"!formDisabled\"\n [class.bg-grayscale-0]=\"!formDisabled\"\n [attr.aria-disabled]=\"formDisabled\"\n>\n @if (!readonly()) {\n <div\n class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n role=\"toolbar\"\n [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n (keydown)=\"onToolbarKeydown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\"\n >\n @if (isFormatAllowed('header')) {\n <select\n class=\"rounded bg-grayscale-0 h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus:border-[#5c5ce6] disabled:cursor-not-allowed disabled:border-grayscale-20 disabled:bg-grayscale-5 disabled:text-grayscale-30\"\n (change)=\"onHeadingChange($event)\"\n [disabled]=\"formDisabled\"\n [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n >\n <option\n [value]=\"0\"\n [selected]=\"activeStates.currentHeading === 0\"\n >\n {{ 'platform.angular_components.editor_heading_normal' | translate }}\n </option>\n <option\n [value]=\"1\"\n [selected]=\"activeStates.currentHeading === 1\"\n >\n {{ 'platform.angular_components.editor_heading_1' | translate }}\n </option>\n <option\n [value]=\"2\"\n [selected]=\"activeStates.currentHeading === 2\"\n >\n {{ 'platform.angular_components.editor_heading_2' | translate }}\n </option>\n <option\n [value]=\"3\"\n [selected]=\"activeStates.currentHeading === 3\"\n >\n {{ 'platform.angular_components.editor_heading_3' | translate }}\n </option>\n </select>\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n @if (isFormatAllowed('bold')) {\n <s-editor-toolbar-button\n icon=\"fa fa-bold\"\n [label]=\"'platform.angular_components.editor_bold' | translate\"\n [active]=\"activeStates.isBold\"\n (clicked)=\"toggleBold()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('italic')) {\n <s-editor-toolbar-button\n icon=\"fa fa-italic\"\n [label]=\"'platform.angular_components.editor_italic' | translate\"\n [active]=\"activeStates.isItalic\"\n (clicked)=\"toggleItalic()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('underline')) {\n <s-editor-toolbar-button\n icon=\"fa fa-underline\"\n [label]=\"'platform.angular_components.editor_underline' | translate\"\n [active]=\"activeStates.isUnderline\"\n (clicked)=\"toggleUnderline()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('strike')) {\n <s-editor-toolbar-button\n icon=\"fa fa-strikethrough\"\n [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n [active]=\"activeStates.isStrike\"\n (clicked)=\"toggleStrike()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('subscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-subscript\"\n [label]=\"'platform.angular_components.editor_subscript' | translate\"\n [active]=\"activeStates.isSubscript\"\n (clicked)=\"toggleSubscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('superscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-superscript\"\n [label]=\"'platform.angular_components.editor_superscript' | translate\"\n [active]=\"activeStates.isSuperscript\"\n (clicked)=\"toggleSuperscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('color')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentColor\"\n ></span>\n </span>\n <input\n #colorInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentColor\"\n [disabled]=\"formDisabled\"\n (input)=\"setColor($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('highlight')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n ></span>\n </span>\n <input\n #highlightInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n [disabled]=\"formDisabled\"\n (input)=\"setHighlight($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('list')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-list-ul\"\n [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n [active]=\"activeStates.isBulletList\"\n (clicked)=\"toggleBulletList()\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-list-ol\"\n [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n [active]=\"activeStates.isOrderedList\"\n (clicked)=\"toggleOrderedList()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('align')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-align-left\"\n [label]=\"'platform.angular_components.editor_align_left' | translate\"\n [active]=\"activeStates.isAlignLeft\"\n (clicked)=\"setTextAlign('left')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-center\"\n [label]=\"'platform.angular_components.editor_align_center' | translate\"\n [active]=\"activeStates.isAlignCenter\"\n (clicked)=\"setTextAlign('center')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-right\"\n [label]=\"'platform.angular_components.editor_align_right' | translate\"\n [active]=\"activeStates.isAlignRight\"\n (clicked)=\"setTextAlign('right')\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('blockquote')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-quote-right\"\n [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n [active]=\"activeStates.isBlockquote\"\n (clicked)=\"toggleBlockquote()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('code-block')) {\n <s-editor-toolbar-button\n icon=\"fa fa-code\"\n [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n [active]=\"activeStates.isCode\"\n (clicked)=\"toggleCode()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('link')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-link\"\n [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n (clicked)=\"setLink()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('image')) {\n <s-editor-toolbar-button\n icon=\"fa fa-image\"\n [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n (clicked)=\"setImage()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (hasAnyFormatBeforeUndoRedo()) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n <s-editor-toolbar-button\n icon=\"fa fa-undo\"\n [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n [disabled]=\"formDisabled || !activeStates.canUndo\"\n (clicked)=\"undo()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-redo\"\n [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n [disabled]=\"formDisabled || !activeStates.canRedo\"\n (clicked)=\"redo()\"\n />\n\n @if (isFormatAllowed('clean')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-remove-format\"\n [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n (clicked)=\"clearFormatting()\"\n [disabled]=\"formDisabled\"\n />\n }\n </div>\n }\n\n <div\n #editorContainer\n class=\"s-editor-content flex-1\"\n ></div>\n <input\n #imageInput\n type=\"file\"\n accept=\"image/*\"\n style=\"display: none\"\n aria-hidden=\"true\"\n (change)=\"onImageFileSelected($event)\"\n />\n</div>\n", styles: [".s-editor--readonly ::ng-deep .ProseMirror{cursor:default}.s-editor--disabled ::ng-deep .ProseMirror{cursor:not-allowed;color:#c1c1cc}.s-editor--disabled ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{color:#c1c1cc}:host(.ng-dirty.ng-invalid)>div{border-color:#c13018!important;box-shadow:none!important}.s-editor-content ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:#9ca3af;pointer-events:none;float:left;height:0}.s-editor-content ::ng-deep .ProseMirror{padding:12px 16px;min-height:150px;outline:none!important;color:#1e1e2e;font-size:14px;line-height:1.6}.s-editor-content ::ng-deep .ProseMirror>*+*{margin-top:.5em}.s-editor-content ::ng-deep .ProseMirror p{margin:0}.s-editor-content ::ng-deep .ProseMirror h1{font-size:1.75em;font-weight:700;line-height:1.2;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h1:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h2{font-size:1.4em;font-weight:600;line-height:1.3;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h2:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h3{font-size:1.15em;font-weight:600;line-height:1.4;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h3:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror ul{list-style:disc;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror ol{list-style:decimal;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror li{margin:.2em 0}.s-editor-content ::ng-deep .ProseMirror li p{margin:0}.s-editor-content ::ng-deep .ProseMirror blockquote{border-left:3px solid #5c5ce6;padding-left:1em;margin:.75em 0;color:#6b6b80;font-style:italic}.s-editor-content ::ng-deep .ProseMirror code{background:#f0f0f8;border-radius:3px;padding:.15em .4em;font-family:Courier New,Courier,monospace;font-size:.875em;color:#c026d3}.s-editor-content ::ng-deep .ProseMirror pre{background:#1e1e2e;color:#cdd6f4;border-radius:6px;padding:1em 1.25em;overflow-x:auto;font-family:Courier New,Courier,monospace;font-size:.875em;line-height:1.5}.s-editor-content ::ng-deep .ProseMirror pre code{background:none;padding:0;color:inherit;font-size:inherit}.s-editor-content ::ng-deep .ProseMirror a{color:#5c5ce6;text-decoration:underline;cursor:pointer}.s-editor-content ::ng-deep .ProseMirror a:hover{color:#4040b0}.s-editor-content ::ng-deep .ProseMirror img{max-width:100%;height:auto;border-radius:4px;display:block}.s-editor-content ::ng-deep .ProseMirror hr{border:none;border-top:2px solid #e8e8f0;margin:1em 0}.s-editor-content ::ng-deep .ProseMirror sub{font-size:.75em;vertical-align:sub}.s-editor-content ::ng-deep .ProseMirror sup{font-size:.75em;vertical-align:super}\n"] }]
|
|
374
374
|
}], ctorParameters: () => [] });
|
|
375
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9lZGl0b3Ivc3JjL2xpYi9lZGl0b3IvZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9lZGl0b3Ivc3JjL2xpYi9lZGl0b3IvZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFHVixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFDcEQsT0FBTyxLQUFLLE1BQU0seUJBQXlCLENBQUM7QUFDNUMsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxTQUFTLE1BQU0sNkJBQTZC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b21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgT25EZXN0cm95LFxuICAgIGVmZmVjdCxcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBvdXRwdXQsXG4gICAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvZGlhbG9nJztcbmltcG9ydCB7IEVkaXRvciB9IGZyb20gJ0B0aXB0YXAvY29yZSc7XG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvbG9yJztcbmltcG9ydCBIaWdobGlnaHQgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGlnaGxpZ2h0JztcbmltcG9ydCBJbWFnZSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pbWFnZSc7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tcGxhY2Vob2xkZXInO1xuaW1wb3J0IFN1YnNjcmlwdCBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1zdWJzY3JpcHQnO1xuaW1wb3J0IFN1cGVyc2NyaXB0IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXN1cGVyc2NyaXB0JztcbmltcG9ydCBUZXh0QWxpZ24gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGV4dC1hbGlnbic7XG5pbXBvcnQgeyBUZXh0U3R5bGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10ZXh0LXN0eWxlJztcbmltcG9ydCBVbmRlcmxpbmUgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdW5kZXJsaW5lJztcbmltcG9ydCBTdGFydGVyS2l0IGZyb20gJ0B0aXB0YXAvc3RhcnRlci1raXQnO1xuXG5pbXBvcnQgeyBMaW5rRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9saW5rLWRpYWxvZy9saW5rLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRWRpdG9yRm9ybWF0LCBFZGl0b3JTZWxlY3Rpb25DaGFuZ2VFdmVudCwgRWRpdG9yVGV4dENoYW5nZUV2ZW50LCBFeHRlbnNpb24gfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBFZGl0b3JUb29sYmFyQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi90b29sYmFyLWJ1dHRvbi9lZGl0b3ItdG9vbGJhci1idXR0b24uY29tcG9uZW50JztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZSBkZSBlZGl0b3IgZGUgdGV4dG8gcmljbyAoV1lTSVdZRykgY29uc3RydcOtZG8gc29icmUgbyBUaXB0YXAvUHJvc2VNaXJyb3IuXG4gKiBTdWJzdGl0dWkgbyBgcC1lZGl0b3JgIGRvIFByaW1lTkcgc2VtIGRlcGVuZMOqbmNpYSBleHRlcm5hIGRlIGxpY2Vuw6dhIGNvbWVyY2lhbC5cbiAqIEltcGxlbWVudGEge0BsaW5rIENvbnRyb2xWYWx1ZUFjY2Vzc29yfSBwYXJhIGludGVncmHDp8OjbyBjb20gQW5ndWxhciBGb3Jtcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHMtZWRpdG9yXG4gKiAgIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaWNhb1wiXG4gKiAgIFtyZWFkb25seV09XCJmYWxzZVwiXG4gKiAgICh0ZXh0Q2hhbmdlKT1cIm9uVGV4dENoYW5nZSgkZXZlbnQpXCIgLz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3MtZWRpdG9yJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0NsYXNzLCBOZ1N0eWxlLCBUcmFuc2xhdGVNb2R1bGUsIEVkaXRvclRvb2xiYXJCdXR0b25Db21wb25lbnRdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2VkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVkaXRvckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29sb2NhIG8gZWRpdG9yIGVtIG1vZG8gc29tZW50ZSBsZWl0dXJhLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcmVhZG9ubHkgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTGlzdGEgZGUgZm9ybWF0b3MgaGFiaWxpdGFkb3MgbmEgdG9vbGJhci4gUXVhbmRvIHZhemlvLCB0b2RvcyBvcyBmb3JtYXRvcyBzw6NvIGV4aWJpZG9zLlxuICAgICAqL1xuICAgIGZvcm1hdHMgPSBpbnB1dDxFZGl0b3JGb3JtYXRbXT4oKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUZXh0byBkZSBkaWNhIGV4aWJpZG8gcXVhbmRvIG8gZWRpdG9yIGVzdMOhIHZhemlvLlxuICAgICAqL1xuICAgIHBsYWNlaG9sZGVyID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVzdGlsb3MgaW5saW5lIGFwbGljYWRvcyBhbyBjb250YWluZXIgZG8gZWRpdG9yLlxuICAgICAqL1xuICAgIHN0eWxlID0gaW5wdXQ8eyBba2xhc3M6IHN0cmluZ106IHVua25vd24gfT4oKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDbGFzc2VzIENTUyBhZGljaW9uYWlzIGFwbGljYWRhcyBhbyBjb250YWluZXIgZG8gZWRpdG9yLlxuICAgICAqL1xuICAgIHN0eWxlQ2xhc3MgPSBpbnB1dDxzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXh0ZW5zw7VlcyBUaXB0YXAgYWRpY2lvbmFpcyBwYXJhIGVzdGVuZGVyIG8gY29tcG9ydGFtZW50byBwYWRyw6NvIGRvIGVkaXRvci5cbiAgICAgKi9cbiAgICBleHRlbnNpb25zID0gaW5wdXQ8RXh0ZW5zaW9uW10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBvIGVkaXRvciDDqSBpbmljaWFsaXphZG8gZSBlc3TDoSBwcm9udG8gcGFyYSB1c28uXG4gICAgICovXG4gICAgZWRpdG9ySW5pdCA9IG91dHB1dDxFZGl0b3I+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBzZW1wcmUgcXVlIG8gY29udGXDumRvIGRvIGVkaXRvciDDqSBhbHRlcmFkby5cbiAgICAgKi9cbiAgICB0ZXh0Q2hhbmdlID0gb3V0cHV0PEVkaXRvclRleHRDaGFuZ2VFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBhIHNlbGXDp8OjbyBkZSB0ZXh0byBubyBlZGl0b3IgbXVkYS5cbiAgICAgKi9cbiAgICBzZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8RWRpdG9yU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICBwcml2YXRlIGVkaXRvckNvbnRhaW5lciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2VkaXRvckNvbnRhaW5lcicpO1xuICAgIHByaXZhdGUgaW1hZ2VJbnB1dCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PignaW1hZ2VJbnB1dCcpO1xuXG4gICAgcHJpdmF0ZSBlZGl0b3I/OiBFZGl0b3I7XG4gICAgcHJpdmF0ZSBfZm9ybURpc2FibGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfY3VycmVudFBsYWNlaG9sZGVyID0gJyc7XG5cbiAgICBhY3RpdmVTdGF0ZXMgPSB7XG4gICAgICAgIGlzQm9sZDogZmFsc2UsXG4gICAgICAgIGlzSXRhbGljOiBmYWxzZSxcbiAgICAgICAgaXNVbmRlcmxpbmU6IGZhbHNlLFxuICAgICAgICBpc1N0cmlrZTogZmFsc2UsXG4gICAgICAgIGlzQnVsbGV0TGlzdDogZmFsc2UsXG4gICAgICAgIGlzT3JkZXJlZExpc3Q6IGZhbHNlLFxuICAgICAgICBpc0Jsb2NrcXVvdGU6IGZhbHNlLFxuICAgICAgICBpc0NvZGU6IGZhbHNlLFxuICAgICAgICBpc1N1YnNjcmlwdDogZmFsc2UsXG4gICAgICAgIGlzU3VwZXJzY3JpcHQ6IGZhbHNlLFxuICAgICAgICBpc0FsaWduTGVmdDogZmFsc2UsXG4gICAgICAgIGlzQWxpZ25DZW50ZXI6IGZhbHNlLFxuICAgICAgICBpc0FsaWduUmlnaHQ6IGZhbHNlLFxuICAgICAgICBjdXJyZW50SGVhZGluZzogMCxcbiAgICAgICAgY3VycmVudENvbG9yOiAnIzAwMDAwMCcsXG4gICAgICAgIGN1cnJlbnRIaWdobGlnaHQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIGNhblVuZG86IGZhbHNlLFxuICAgICAgICBjYW5SZWRvOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBfdmFsdWUgPSAnJztcbiAgICBwcml2YXRlIF9vbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2V0RWRpdGFibGUoIXRoaXMucmVhZG9ubHkoKSAmJiAhdGhpcy5fZm9ybURpc2FibGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRQbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXIoKSA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yPy52aWV3LmRpc3BhdGNoKHRoaXMuZWRpdG9yLnN0YXRlLnRyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRFZGl0b3IoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5jaGFpbigpLnNldE1ldGEoJ2FkZFRvSGlzdG9yeScsIGZhbHNlKS5zZXRDb250ZW50KHRoaXMuX3ZhbHVlLCB7IGVtaXRVcGRhdGU6IGZhbHNlIH0pLnJ1bigpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLmVkaXRvcj8uc2V0RWRpdGFibGUoIWlzRGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHkoKSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGlzRm9ybWF0QWxsb3dlZChmb3JtYXQ6IEVkaXRvckZvcm1hdCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBmb3JtYXRzID0gdGhpcy5mb3JtYXRzKCk7XG4gICAgICAgIHJldHVybiAhZm9ybWF0cz8ubGVuZ3RoIHx8IGZvcm1hdHMuaW5jbHVkZXMoZm9ybWF0KTtcbiAgICB9XG5cbiAgICBoYXNBbnlGb3JtYXRCZWZvcmVVbmRvUmVkbygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZm9ybWF0c0JlZm9yZVVuZG9SZWRvOiBFZGl0b3JGb3JtYXRbXSA9IFtcbiAgICAgICAgICAgICdoZWFkZXInLCAnYm9sZCcsICdpdGFsaWMnLCAndW5kZXJsaW5lJywgJ3N0cmlrZScsICdzdWJzY3JpcHQnLCAnc3VwZXJzY3JpcHQnLFxuICAgICAgICAgICAgJ2NvbG9yJywgJ2hpZ2hsaWdodCcsICdsaXN0JywgJ2FsaWduJywgJ2Jsb2NrcXVvdGUnLCAnY29kZS1ibG9jaycsICdsaW5rJywgJ2ltYWdlJyxcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHNCZWZvcmVVbmRvUmVkby5zb21lKGYgPT4gdGhpcy5pc0Zvcm1hdEFsbG93ZWQoZikpO1xuICAgIH1cblxuICAgIHRvZ2dsZUJvbGQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQm9sZCgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZUl0YWxpYygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVJdGFsaWMoKS5ydW4oKTtcbiAgICB9XG5cbiAgICB0b2dnbGVVbmRlcmxpbmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkudG9nZ2xlVW5kZXJsaW5lKCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU3RyaWtlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN0cmlrZSgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZUJ1bGxldExpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQnVsbGV0TGlzdCgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZU9yZGVyZWRMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZU9yZGVyZWRMaXN0KCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlQmxvY2txdW90ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVCbG9ja3F1b3RlKCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlQ29kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlKCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU3Vic2NyaXB0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN1YnNjcmlwdCgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZVN1cGVyc2NyaXB0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN1cGVyc2NyaXB0KCkucnVuKCk7XG4gICAgfVxuXG4gICAgc2V0VGV4dEFsaWduKGFsaWduOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRUZXh0QWxpZ24oYWxpZ24pLnJ1bigpO1xuICAgIH1cblxuICAgIHNldENvbG9yKGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRDb2xvcihjb2xvcikucnVuKCk7XG4gICAgfVxuXG4gICAgc2V0SGlnaGxpZ2h0KGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRIaWdobGlnaHQoeyBjb2xvciB9KS5ydW4oKTtcbiAgICB9XG5cbiAgICBjbGVhckZvcm1hdHRpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuY2xlYXJOb2RlcygpLnVuc2V0QWxsTWFya3MoKS5ydW4oKTtcbiAgICB9XG5cbiAgICBvbkhlYWRpbmdDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxldmVsID0gcGFyc2VJbnQoKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWUpIGFzIDAgfCAxIHwgMiB8IDM7XG4gICAgICAgIGlmIChpc05hTihsZXZlbCkgfHwgbGV2ZWwgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuc2V0UGFyYWdyYXBoKCkucnVuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnNldEhlYWRpbmcoeyBsZXZlbCB9KS5ydW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldExpbmsoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nVXJsID0gKHRoaXMuZWRpdG9yPy5nZXRBdHRyaWJ1dGVzKCdsaW5rJylbJ2hyZWYnXSBhcyBzdHJpbmcpID8/ICcnO1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihMaW5rRGlhbG9nQ29tcG9uZW50LCB7IHNpemU6ICdzbScgfSk7XG4gICAgICAgIHJlZi5jb21wb25lbnRJbnN0YW5jZS5pbml0aWFsVXJsID0gZXhpc3RpbmdVcmw7XG4gICAgICAgIHJlZi5jbG9zZWRcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodXJsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodXJsID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLmV4dGVuZE1hcmtSYW5nZSgnbGluaycpLnVuc2V0TGluaygpLnJ1bigpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuZXh0ZW5kTWFya1JhbmdlKCdsaW5rJykuc2V0TGluayh7IGhyZWY6IHVybCB9KS5ydW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRJbWFnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbWFnZUlucHV0KCkubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH1cblxuICAgIG9uSW1hZ2VGaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlcz8uWzBdO1xuICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcblxuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25sb2FkID0gKGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IGUudGFyZ2V0Py5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRJbWFnZSh7IHNyYyB9KS5ydW4oKTtcbiAgICAgICAgICAgIGlucHV0LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgfVxuXG4gICAgdW5kbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS51bmRvKCkucnVuKCk7XG4gICAgfVxuXG4gICAgcmVkbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5yZWRvKCkucnVuKCk7XG4gICAgfVxuXG4gICAgb25Ub29sYmFyS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIVsnQXJyb3dMZWZ0JywgJ0Fycm93UmlnaHQnLCAnSG9tZScsICdFbmQnXS5pbmNsdWRlcyhldmVudC5rZXkpKSByZXR1cm47XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgdG9vbGJhciA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZSA9IHRoaXMuZ2V0VG9vbGJhckZvY3VzYWJsZSh0b29sYmFyKTtcbiAgICAgICAgaWYgKCFmb2N1c2FibGUubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gZm9jdXNhYmxlLmZpbmRJbmRleChlbCA9PiBlbCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgICAgIGxldCBuZXh0SW5kZXg6IG51bWJlcjtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dSaWdodCc6IG5leHRJbmRleCA9IChjdXJyZW50SW5kZXggKyAxKSAlIGZvY3VzYWJsZS5sZW5ndGg7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzogbmV4dEluZGV4ID0gKGN1cnJlbnRJbmRleCAtIDEgKyBmb2N1c2FibGUubGVuZ3RoKSAlIGZvY3VzYWJsZS5sZW5ndGg7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnSG9tZSc6IG5leHRJbmRleCA9IDA7IGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDogbmV4dEluZGV4ID0gZm9jdXNhYmxlLmxlbmd0aCAtIDE7IGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9jdXNhYmxlLmZvckVhY2goKGVsLCBpKSA9PiBlbC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgaSA9PT0gbmV4dEluZGV4ID8gJzAnIDogJy0xJykpO1xuICAgICAgICBmb2N1c2FibGVbbmV4dEluZGV4XS5mb2N1cygpO1xuICAgIH1cblxuICAgIG9uVG9vbGJhckZvY3VzSW4oZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCB0b29sYmFyID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gdGhpcy5nZXRUb29sYmFyRm9jdXNhYmxlKHRvb2xiYXIpO1xuICAgICAgICBpZiAoZm9jdXNhYmxlLmluY2x1ZGVzKHRhcmdldCkpIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZS5mb3JFYWNoKGVsID0+IGVsLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCBlbCA9PT0gdGFyZ2V0ID8gJzAnIDogJy0xJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUb29sYmFyRm9jdXNhYmxlKHRvb2xiYXI6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgICAgICAgdG9vbGJhci5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignYnV0dG9uOm5vdChbZGlzYWJsZWRdKSwgc2VsZWN0LCBsYWJlbFt0YWJpbmRleF0nKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFZGl0b3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAgICAgICBlbGVtZW50OiB0aGlzLmVkaXRvckNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBleHRlbnNpb25zOiBbXG4gICAgICAgICAgICAgICAgU3RhcnRlcktpdC5jb25maWd1cmUoe1xuICAgICAgICAgICAgICAgICAgICBsaW5rOiB7IG9wZW5PbkNsaWNrOiBmYWxzZSB9LFxuICAgICAgICAgICAgICAgICAgICB1bmRlcmxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIFVuZGVybGluZSxcbiAgICAgICAgICAgICAgICBJbWFnZS5jb25maWd1cmUoeyBhbGxvd0Jhc2U2NDogdHJ1ZSB9KSxcbiAgICAgICAgICAgICAgICBUZXh0QWxpZ24uY29uZmlndXJlKHsgdHlwZXM6IFsnaGVhZGluZycsICdwYXJhZ3JhcGgnXSB9KSxcbiAgICAgICAgICAgICAgICBUZXh0U3R5bGUsXG4gICAgICAgICAgICAgICAgQ29sb3IsXG4gICAgICAgICAgICAgICAgSGlnaGxpZ2h0LmNvbmZpZ3VyZSh7IG11bHRpY29sb3I6IHRydWUgfSksXG4gICAgICAgICAgICAgICAgUGxhY2Vob2xkZXIuY29uZmlndXJlKHsgcGxhY2Vob2xkZXI6ICgpID0+IHRoaXMuX2N1cnJlbnRQbGFjZWhvbGRlciB9KSxcbiAgICAgICAgICAgICAgICBTdWJzY3JpcHQsXG4gICAgICAgICAgICAgICAgU3VwZXJzY3JpcHQsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5leHRlbnNpb25zKCksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgY29udGVudDogdGhpcy5fdmFsdWUsXG4gICAgICAgICAgICBlZGl0YWJsZTogIXRoaXMucmVhZG9ubHkoKSxcbiAgICAgICAgICAgIGVkaXRvclByb3BzOiB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICByb2xlOiAndGV4dGJveCcsXG4gICAgICAgICAgICAgICAgICAgICdhcmlhLW11bHRpbGluZSc6ICd0cnVlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2NvbnRlbnRfYXJlYScsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblVwZGF0ZTogKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gZWRpdG9yLmdldEhUTUwoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gZWRpdG9yLmdldFRleHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IGh0bWw7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UoaHRtbCk7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0Q2hhbmdlLmVtaXQoeyBodG1sVmFsdWU6IGh0bWwsIHRleHRWYWx1ZTogdGV4dCB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNBY3RpdmVTdGF0ZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkJsdXI6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblNlbGVjdGlvblVwZGF0ZTogKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNBY3RpdmVTdGF0ZXMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGZyb20sIHRvLCBlbXB0eSB9ID0gZWRpdG9yLnN0YXRlLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHsgZnJvbSwgdG8sIGVtcHR5IH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zeW5jQWN0aXZlU3RhdGVzKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLmVkaXRvckluaXQuZW1pdCh0aGlzLmVkaXRvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jQWN0aXZlU3RhdGVzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZWRpdG9yKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZSA9IHRoaXMuZWRpdG9yO1xuICAgICAgICB0aGlzLmFjdGl2ZVN0YXRlcyA9IHtcbiAgICAgICAgICAgIGlzQm9sZDogZS5pc0FjdGl2ZSgnYm9sZCcpLFxuICAgICAgICAgICAgaXNJdGFsaWM6IGUuaXNBY3RpdmUoJ2l0YWxpYycpLFxuICAgICAgICAgICAgaXNVbmRlcmxpbmU6IGUuaXNBY3RpdmUoJ3VuZGVybGluZScpLFxuICAgICAgICAgICAgaXNTdHJpa2U6IGUuaXNBY3RpdmUoJ3N0cmlrZScpLFxuICAgICAgICAgICAgaXNCdWxsZXRMaXN0OiBlLmlzQWN0aXZlKCdidWxsZXRMaXN0JyksXG4gICAgICAgICAgICBpc09yZGVyZWRMaXN0OiBlLmlzQWN0aXZlKCdvcmRlcmVkTGlzdCcpLFxuICAgICAgICAgICAgaXNCbG9ja3F1b3RlOiBlLmlzQWN0aXZlKCdibG9ja3F1b3RlJyksXG4gICAgICAgICAgICBpc0NvZGU6IGUuaXNBY3RpdmUoJ2NvZGUnKSxcbiAgICAgICAgICAgIGlzU3Vic2NyaXB0OiBlLmlzQWN0aXZlKCdzdWJzY3JpcHQnKSxcbiAgICAgICAgICAgIGlzU3VwZXJzY3JpcHQ6IGUuaXNBY3RpdmUoJ3N1cGVyc2NyaXB0JyksXG4gICAgICAgICAgICBpc0FsaWduTGVmdDogZS5pc0FjdGl2ZSh7IHRleHRBbGlnbjogJ2xlZnQnIH0pLFxuICAgICAgICAgICAgaXNBbGlnbkNlbnRlcjogZS5pc0FjdGl2ZSh7IHRleHRBbGlnbjogJ2NlbnRlcicgfSksXG4gICAgICAgICAgICBpc0FsaWduUmlnaHQ6IGUuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICdyaWdodCcgfSksXG4gICAgICAgICAgICBjdXJyZW50SGVhZGluZzogWzEsIDIsIDNdLmZpbmQoKGxldmVsKSA9PiBlLmlzQWN0aXZlKCdoZWFkaW5nJywgeyBsZXZlbCB9KSkgPz8gMCxcbiAgICAgICAgICAgIGN1cnJlbnRDb2xvcjogKGUuZ2V0QXR0cmlidXRlcygndGV4dFN0eWxlJylbJ2NvbG9yJ10gYXMgc3RyaW5nKSB8fCAnIzAwMDAwMCcsXG4gICAgICAgICAgICBjdXJyZW50SGlnaGxpZ2h0OiAoZS5nZXRBdHRyaWJ1dGVzKCdoaWdobGlnaHQnKVsnY29sb3InXSBhcyBzdHJpbmcpIHx8ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICBjYW5VbmRvOiBlLmNhbigpLnVuZG8oKSxcbiAgICAgICAgICAgIGNhblJlZG86IGUuY2FuKCkucmVkbygpLFxuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cInJvdW5kZWQgYmctZ3JheXNjYWxlLTAgZmxleCBmbGV4LWNvbCBib3JkZXIgYm9yZGVyLWdyYXlzY2FsZS0zMCB0cmFuc2l0aW9uLVtib3JkZXItY29sb3IsYm94LXNoYWRvd10gZHVyYXRpb24tMTUwIGZvY3VzLXdpdGhpbjpib3JkZXItWyM1YzVjZTZdIGZvY3VzLXdpdGhpbjpzaGFkb3ctWzBfMF8wXzJweF9yZ2JhKDkyLDkyLDIzMCwwLjE1KV1cIlxuICAgIFtuZ0NsYXNzXT1cInN0eWxlQ2xhc3MoKVwiXG4gICAgW25nU3R5bGVdPVwic3R5bGUoKVwiXG4gICAgW2NsYXNzLnMtZWRpdG9yLS1yZWFkb25seV09XCJyZWFkb25seSgpXCJcbj5cbiAgICBAaWYgKCFyZWFkb25seSgpKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicm91bmRlZC10IGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMC41IGJvcmRlci1iIGJvcmRlci1ncmF5c2NhbGUtMzAgYmctWyNmOWY5ZmJdIHB4LTIgcHktMS41XCJcbiAgICAgICAgICAgIHJvbGU9XCJ0b29sYmFyXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfdG9vbGJhcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25Ub29sYmFyS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChmb2N1c2luKT1cIm9uVG9vbGJhckZvY3VzSW4oJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdoZWFkZXInKSkge1xuICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkIGJnLWdyYXlzY2FsZS0wIGgtNyBjdXJzb3ItcG9pbnRlciBib3JkZXIgYm9yZGVyLWdyYXlzY2FsZS0zMCBweC0xLjUgdGV4dC1bMTNweF0gdGV4dC1bIzNkM2Q0ZF0gb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTE1MCBmb2N1czpib3JkZXItWyM1YzVjZTZdXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkhlYWRpbmdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfaGVhZGluZ19sZXZlbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImFjdGl2ZVN0YXRlcy5jdXJyZW50SGVhZGluZyA9PT0gMFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2hlYWRpbmdfbm9ybWFsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImFjdGl2ZVN0YXRlcy5jdXJyZW50SGVhZGluZyA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2hlYWRpbmdfMScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJhY3RpdmVTdGF0ZXMuY3VycmVudEhlYWRpbmcgPT09IDJcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9oZWFkaW5nXzInIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiYWN0aXZlU3RhdGVzLmN1cnJlbnRIZWFkaW5nID09PSAzXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfaGVhZGluZ18zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTEgaW5saW5lLWJsb2NrIGgtNSB3LXB4IHNocmluay0wIGJnLVsjZDFkMWRjXVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2JvbGQnKSkge1xuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtYm9sZFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9ib2xkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYWN0aXZlU3RhdGVzLmlzQm9sZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZUJvbGQoKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2l0YWxpYycpKSB7XG4gICAgICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1pdGFsaWNcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfaXRhbGljJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYWN0aXZlU3RhdGVzLmlzSXRhbGljXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwidG9nZ2xlSXRhbGljKClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCd1bmRlcmxpbmUnKSkge1xuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtdW5kZXJsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3VuZGVybGluZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc1VuZGVybGluZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZVVuZGVybGluZSgpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnc3RyaWtlJykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLXN0cmlrZXRocm91Z2hcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3Jfc3RyaWtldGhyb3VnaCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc1N0cmlrZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZVN0cmlrZSgpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnc3Vic2NyaXB0JykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLXN1YnNjcmlwdFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9zdWJzY3JpcHQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVTdGF0ZXMuaXNTdWJzY3JpcHRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVTdWJzY3JpcHQoKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ3N1cGVyc2NyaXB0JykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLXN1cGVyc2NyaXB0XCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3N1cGVyc2NyaXB0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYWN0aXZlU3RhdGVzLmlzU3VwZXJzY3JpcHRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVTdXBlcnNjcmlwdCgpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnY29sb3InKSkge1xuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGZsZXggaC03IHctNyBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZCBiZy1ncmF5c2NhbGUtMCB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0xNTAgaG92ZXI6YmctWyNmMGYwZjhdXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfdGV4dF9jb2xvcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3RleHRfY29sb3InIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGNvbG9ySW5wdXQuY2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBjb2xvcklucHV0LmNsaWNrKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtcHhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZm9udCB0ZXh0LVsxMXB4XSB0ZXh0LVsjM2QzZDRkXVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLVszcHhdIHctMy41IHJvdW5kZWQteHNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJhY3RpdmVTdGF0ZXMuY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAjY29sb3JJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBoLWZ1bGwgdy1mdWxsIGN1cnNvci1wb2ludGVyIG9wYWNpdHktMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYWN0aXZlU3RhdGVzLmN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwic2V0Q29sb3IoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdoaWdobGlnaHQnKSkge1xuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGZsZXggaC03IHctNyBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZCBiZy1ncmF5c2NhbGUtMCB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0xNTAgaG92ZXI6YmctWyNmMGYwZjhdXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfYmFja2dyb3VuZF9jb2xvcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2JhY2tncm91bmRfY29sb3InIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGhpZ2hsaWdodElucHV0LmNsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgaGlnaGxpZ2h0SW5wdXQuY2xpY2soKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC1weFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1oaWdobGlnaHRlciB0ZXh0LVsxMXB4XSB0ZXh0LVsjM2QzZDRkXVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLVszcHhdIHctMy41IHJvdW5kZWQteHNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJhY3RpdmVTdGF0ZXMuY3VycmVudEhpZ2hsaWdodCA9PT0gJ3RyYW5zcGFyZW50JyA/ICcjZmZmZjAwJyA6IGFjdGl2ZVN0YXRlcy5jdXJyZW50SGlnaGxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAjaGlnaGxpZ2h0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGluc2V0LTAgaC1mdWxsIHctZnVsbCBjdXJzb3ItcG9pbnRlciBvcGFjaXR5LTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImFjdGl2ZVN0YXRlcy5jdXJyZW50SGlnaGxpZ2h0ID09PSAndHJhbnNwYXJlbnQnID8gJyNmZmZmMDAnIDogYWN0aXZlU3RhdGVzLmN1cnJlbnRIaWdobGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInNldEhpZ2hsaWdodCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2xpc3QnKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMSBpbmxpbmUtYmxvY2sgaC01IHctcHggc2hyaW5rLTAgYmctWyNkMWQxZGNdXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtbGlzdC11bFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9idWxsZXRfbGlzdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc0J1bGxldExpc3RcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVCdWxsZXRMaXN0KClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1saXN0LW9sXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX29yZGVyZWRfbGlzdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc09yZGVyZWRMaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwidG9nZ2xlT3JkZXJlZExpc3QoKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2FsaWduJykpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTEgaW5saW5lLWJsb2NrIGgtNSB3LXB4IHNocmluay0wIGJnLVsjZDFkMWRjXVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLWFsaWduLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfYWxpZ25fbGVmdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc0FsaWduTGVmdFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInNldFRleHRBbGlnbignbGVmdCcpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2FsaWduX2NlbnRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc0FsaWduQ2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwic2V0VGV4dEFsaWduKCdjZW50ZXInKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLWFsaWduLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2FsaWduX3JpZ2h0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYWN0aXZlU3RhdGVzLmlzQWxpZ25SaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInNldFRleHRBbGlnbigncmlnaHQnKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2Jsb2NrcXVvdGUnKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMSBpbmxpbmUtYmxvY2sgaC01IHctcHggc2hyaW5rLTAgYmctWyNkMWQxZGNdXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtcXVvdGUtcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfYmxvY2txdW90ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc0Jsb2NrcXVvdGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVCbG9ja3F1b3RlKClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdjb2RlLWJsb2NrJykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLWNvZGVcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfaW5saW5lX2NvZGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVTdGF0ZXMuaXNDb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwidG9nZ2xlQ29kZSgpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnbGluaycpKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0xIGlubGluZS1ibG9jayBoLTUgdy1weCBzaHJpbmstMCBiZy1bI2QxZDFkY11cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2luc2VydF9saW5rJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInNldExpbmsoKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2ltYWdlJykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLWltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2luc2VydF9pbWFnZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJzZXRJbWFnZSgpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGhhc0FueUZvcm1hdEJlZm9yZVVuZG9SZWRvKCkpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTEgaW5saW5lLWJsb2NrIGgtNSB3LXB4IHNocmluay0wIGJnLVsjZDFkMWRjXVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLXVuZG9cIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCIoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfdW5kbycgfCB0cmFuc2xhdGUpICsgJyAoQ3RybCtaKSdcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhYWN0aXZlU3RhdGVzLmNhblVuZG9cIlxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInVuZG8oKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLXJlZG9cIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCIoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfcmVkbycgfCB0cmFuc2xhdGUpICsgJyAoQ3RybCtZKSdcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhYWN0aXZlU3RhdGVzLmNhblJlZG9cIlxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInJlZG8oKVwiXG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnY2xlYW4nKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMSBpbmxpbmUtYmxvY2sgaC01IHctcHggc2hyaW5rLTAgYmctWyNkMWQxZGNdXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtcmVtb3ZlLWZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9jbGVhcl9mb3JtYXR0aW5nJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cImNsZWFyRm9ybWF0dGluZygpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8ZGl2XG4gICAgICAgICNlZGl0b3JDb250YWluZXJcbiAgICAgICAgY2xhc3M9XCJzLWVkaXRvci1jb250ZW50IGZsZXgtMVwiXG4gICAgPjwvZGl2PlxuICAgIDxpbnB1dFxuICAgICAgICAjaW1hZ2VJbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uSW1hZ2VGaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgLz5cbjwvZGl2PlxuIl19
|
|
375
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9lZGl0b3Ivc3JjL2xpYi9lZGl0b3IvZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9lZGl0b3Ivc3JjL2xpYi9lZGl0b3IvZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFHVixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFDcEQsT0FBTyxLQUFLLE1BQU0seUJBQXlCLENBQUM7QUFDNUMsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxTQUFTLE1BQU0sNkJBQTZC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cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzLCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIE9uRGVzdHJveSxcbiAgICBlZmZlY3QsXG4gICAgZm9yd2FyZFJlZixcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgb3V0cHV0LFxuICAgIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2RpYWxvZyc7XG5pbXBvcnQgeyBFZGl0b3IgfSBmcm9tICdAdGlwdGFwL2NvcmUnO1xuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2xvcic7XG5pbXBvcnQgSGlnaGxpZ2h0IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhpZ2hsaWdodCc7XG5pbXBvcnQgSW1hZ2UgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taW1hZ2UnO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXBsYWNlaG9sZGVyJztcbmltcG9ydCBTdWJzY3JpcHQgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3Vic2NyaXB0JztcbmltcG9ydCBTdXBlcnNjcmlwdCBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1zdXBlcnNjcmlwdCc7XG5pbXBvcnQgVGV4dEFsaWduIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQtYWxpZ24nO1xuaW1wb3J0IHsgVGV4dFN0eWxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGV4dC1zdHlsZSc7XG5pbXBvcnQgVW5kZXJsaW5lIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXVuZGVybGluZSc7XG5pbXBvcnQgU3RhcnRlcktpdCBmcm9tICdAdGlwdGFwL3N0YXJ0ZXIta2l0JztcblxuaW1wb3J0IHsgTGlua0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vbGluay1kaWFsb2cvbGluay1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IEVkaXRvckZvcm1hdCwgRWRpdG9yU2VsZWN0aW9uQ2hhbmdlRXZlbnQsIEVkaXRvclRleHRDaGFuZ2VFdmVudCwgRXh0ZW5zaW9uIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgRWRpdG9yVG9vbGJhckJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vdG9vbGJhci1idXR0b24vZWRpdG9yLXRvb2xiYXItYnV0dG9uLmNvbXBvbmVudCc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGUgZGUgZWRpdG9yIGRlIHRleHRvIHJpY28gKFdZU0lXWUcpIGNvbnN0cnXDrWRvIHNvYnJlIG8gVGlwdGFwL1Byb3NlTWlycm9yLlxuICogU3Vic3RpdHVpIG8gYHAtZWRpdG9yYCBkbyBQcmltZU5HIHNlbSBkZXBlbmTDqm5jaWEgZXh0ZXJuYSBkZSBsaWNlbsOnYSBjb21lcmNpYWwuXG4gKiBJbXBsZW1lbnRhIHtAbGluayBDb250cm9sVmFsdWVBY2Nlc3Nvcn0gcGFyYSBpbnRlZ3Jhw6fDo28gY29tIEFuZ3VsYXIgRm9ybXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxzLWVkaXRvclxuICogICBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmljYW9cIlxuICogICBbcmVhZG9ubHldPVwiZmFsc2VcIlxuICogICAodGV4dENoYW5nZSk9XCJvblRleHRDaGFuZ2UoJGV2ZW50KVwiIC8+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzLWVkaXRvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdDbGFzcywgTmdTdHlsZSwgVHJhbnNsYXRlTW9kdWxlLCBFZGl0b3JUb29sYmFyQnV0dG9uQ29tcG9uZW50XSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFZGl0b3JDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbG9jYSBvIGVkaXRvciBlbSBtb2RvIHNvbWVudGUgbGVpdHVyYS5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExpc3RhIGRlIGZvcm1hdG9zIGhhYmlsaXRhZG9zIG5hIHRvb2xiYXIuIFF1YW5kbyB2YXppbywgdG9kb3Mgb3MgZm9ybWF0b3Mgc8OjbyBleGliaWRvcy5cbiAgICAgKi9cbiAgICBmb3JtYXRzID0gaW5wdXQ8RWRpdG9yRm9ybWF0W10+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dG8gZGUgZGljYSBleGliaWRvIHF1YW5kbyBvIGVkaXRvciBlc3TDoSB2YXppby5cbiAgICAgKi9cbiAgICBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFc3RpbG9zIGlubGluZSBhcGxpY2Fkb3MgYW8gY29udGFpbmVyIGRvIGVkaXRvci5cbiAgICAgKi9cbiAgICBzdHlsZSA9IGlucHV0PHsgW2tsYXNzOiBzdHJpbmddOiB1bmtub3duIH0+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2xhc3NlcyBDU1MgYWRpY2lvbmFpcyBhcGxpY2FkYXMgYW8gY29udGFpbmVyIGRvIGVkaXRvci5cbiAgICAgKi9cbiAgICBzdHlsZUNsYXNzID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEV4dGVuc8O1ZXMgVGlwdGFwIGFkaWNpb25haXMgcGFyYSBlc3RlbmRlciBvIGNvbXBvcnRhbWVudG8gcGFkcsOjbyBkbyBlZGl0b3IuXG4gICAgICovXG4gICAgZXh0ZW5zaW9ucyA9IGlucHV0PEV4dGVuc2lvbltdPihbXSk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyBlZGl0b3Igw6kgaW5pY2lhbGl6YWRvIGUgZXN0w6EgcHJvbnRvIHBhcmEgdXNvLlxuICAgICAqL1xuICAgIGVkaXRvckluaXQgPSBvdXRwdXQ8RWRpdG9yPigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVtaXRpZG8gc2VtcHJlIHF1ZSBvIGNvbnRlw7pkbyBkbyBlZGl0b3Igw6kgYWx0ZXJhZG8uXG4gICAgICovXG4gICAgdGV4dENoYW5nZSA9IG91dHB1dDxFZGl0b3JUZXh0Q2hhbmdlRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gYSBzZWxlw6fDo28gZGUgdGV4dG8gbm8gZWRpdG9yIG11ZGEuXG4gICAgICovXG4gICAgc2VsZWN0aW9uQ2hhbmdlID0gb3V0cHV0PEVkaXRvclNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuXG4gIHByb3RlY3RlZCBmb3JtRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgZWRpdG9yQ29udGFpbmVyID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PignZWRpdG9yQ29udGFpbmVyJyk7XG4gICAgcHJpdmF0ZSBpbWFnZUlucHV0ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+KCdpbWFnZUlucHV0Jyk7XG4gICAgcHJpdmF0ZSBlZGl0b3I/OiBFZGl0b3I7XG4gICAgcHJpdmF0ZSBfY3VycmVudFBsYWNlaG9sZGVyID0gJyc7XG5cbiAgICBhY3RpdmVTdGF0ZXMgPSB7XG4gICAgICAgIGlzQm9sZDogZmFsc2UsXG4gICAgICAgIGlzSXRhbGljOiBmYWxzZSxcbiAgICAgICAgaXNVbmRlcmxpbmU6IGZhbHNlLFxuICAgICAgICBpc1N0cmlrZTogZmFsc2UsXG4gICAgICAgIGlzQnVsbGV0TGlzdDogZmFsc2UsXG4gICAgICAgIGlzT3JkZXJlZExpc3Q6IGZhbHNlLFxuICAgICAgICBpc0Jsb2NrcXVvdGU6IGZhbHNlLFxuICAgICAgICBpc0NvZGU6IGZhbHNlLFxuICAgICAgICBpc1N1YnNjcmlwdDogZmFsc2UsXG4gICAgICAgIGlzU3VwZXJzY3JpcHQ6IGZhbHNlLFxuICAgICAgICBpc0FsaWduTGVmdDogZmFsc2UsXG4gICAgICAgIGlzQWxpZ25DZW50ZXI6IGZhbHNlLFxuICAgICAgICBpc0FsaWduUmlnaHQ6IGZhbHNlLFxuICAgICAgICBjdXJyZW50SGVhZGluZzogMCxcbiAgICAgICAgY3VycmVudENvbG9yOiAnIzAwMDAwMCcsXG4gICAgICAgIGN1cnJlbnRIaWdobGlnaHQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIGNhblVuZG86IGZhbHNlLFxuICAgICAgICBjYW5SZWRvOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBfdmFsdWUgPSAnJztcbiAgICBwcml2YXRlIF9vbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2V0RWRpdGFibGUoIXRoaXMucmVhZG9ubHkoKSAmJiAhdGhpcy5mb3JtRGlzYWJsZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRQbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXIoKSA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yPy52aWV3LmRpc3BhdGNoKHRoaXMuZWRpdG9yLnN0YXRlLnRyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRFZGl0b3IoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5jaGFpbigpLnNldE1ldGEoJ2FkZFRvSGlzdG9yeScsIGZhbHNlKS5zZXRDb250ZW50KHRoaXMuX3ZhbHVlLCB7IGVtaXRVcGRhdGU6IGZhbHNlIH0pLnJ1bigpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1EaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5zZXRFZGl0YWJsZSghaXNEaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seSgpLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGlzRm9ybWF0QWxsb3dlZChmb3JtYXQ6IEVkaXRvckZvcm1hdCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBmb3JtYXRzID0gdGhpcy5mb3JtYXRzKCk7XG4gICAgICAgIHJldHVybiAhZm9ybWF0cz8ubGVuZ3RoIHx8IGZvcm1hdHMuaW5jbHVkZXMoZm9ybWF0KTtcbiAgICB9XG5cbiAgICBoYXNBbnlGb3JtYXRCZWZvcmVVbmRvUmVkbygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZm9ybWF0c0JlZm9yZVVuZG9SZWRvOiBFZGl0b3JGb3JtYXRbXSA9IFtcbiAgICAgICAgICAgICdoZWFkZXInLCAnYm9sZCcsICdpdGFsaWMnLCAndW5kZXJsaW5lJywgJ3N0cmlrZScsICdzdWJzY3JpcHQnLCAnc3VwZXJzY3JpcHQnLFxuICAgICAgICAgICAgJ2NvbG9yJywgJ2hpZ2hsaWdodCcsICdsaXN0JywgJ2FsaWduJywgJ2Jsb2NrcXVvdGUnLCAnY29kZS1ibG9jaycsICdsaW5rJywgJ2ltYWdlJyxcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHNCZWZvcmVVbmRvUmVkby5zb21lKGYgPT4gdGhpcy5pc0Zvcm1hdEFsbG93ZWQoZikpO1xuICAgIH1cblxuICAgIHRvZ2dsZUJvbGQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQm9sZCgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZUl0YWxpYygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVJdGFsaWMoKS5ydW4oKTtcbiAgICB9XG5cbiAgICB0b2dnbGVVbmRlcmxpbmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkudG9nZ2xlVW5kZXJsaW5lKCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU3RyaWtlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN0cmlrZSgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZUJ1bGxldExpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQnVsbGV0TGlzdCgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZU9yZGVyZWRMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZU9yZGVyZWRMaXN0KCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlQmxvY2txdW90ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVCbG9ja3F1b3RlKCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlQ29kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlKCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU3Vic2NyaXB0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN1YnNjcmlwdCgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZVN1cGVyc2NyaXB0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN1cGVyc2NyaXB0KCkucnVuKCk7XG4gICAgfVxuXG4gICAgc2V0VGV4dEFsaWduKGFsaWduOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRUZXh0QWxpZ24oYWxpZ24pLnJ1bigpO1xuICAgIH1cblxuICAgIHNldENvbG9yKGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRDb2xvcihjb2xvcikucnVuKCk7XG4gICAgfVxuXG4gICAgc2V0SGlnaGxpZ2h0KGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRIaWdobGlnaHQoeyBjb2xvciB9KS5ydW4oKTtcbiAgICB9XG5cbiAgICBjbGVhckZvcm1hdHRpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuY2xlYXJOb2RlcygpLnVuc2V0QWxsTWFya3MoKS5ydW4oKTtcbiAgICB9XG5cbiAgICBvbkhlYWRpbmdDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxldmVsID0gcGFyc2VJbnQoKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWUpIGFzIDAgfCAxIHwgMiB8IDM7XG4gICAgICAgIGlmIChpc05hTihsZXZlbCkgfHwgbGV2ZWwgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuc2V0UGFyYWdyYXBoKCkucnVuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnNldEhlYWRpbmcoeyBsZXZlbCB9KS5ydW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldExpbmsoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nVXJsID0gKHRoaXMuZWRpdG9yPy5nZXRBdHRyaWJ1dGVzKCdsaW5rJylbJ2hyZWYnXSBhcyBzdHJpbmcpID8/ICcnO1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihMaW5rRGlhbG9nQ29tcG9uZW50LCB7IHNpemU6ICdzbScgfSk7XG4gICAgICAgIHJlZi5jb21wb25lbnRJbnN0YW5jZS5pbml0aWFsVXJsID0gZXhpc3RpbmdVcmw7XG4gICAgICAgIHJlZi5jbG9zZWRcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodXJsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodXJsID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLmV4dGVuZE1hcmtSYW5nZSgnbGluaycpLnVuc2V0TGluaygpLnJ1bigpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuZXh0ZW5kTWFya1JhbmdlKCdsaW5rJykuc2V0TGluayh7IGhyZWY6IHVybCB9KS5ydW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRJbWFnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbWFnZUlucHV0KCkubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH1cblxuICAgIG9uSW1hZ2VGaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlcz8uWzBdO1xuICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcblxuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25sb2FkID0gKGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IGUudGFyZ2V0Py5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRJbWFnZSh7IHNyYyB9KS5ydW4oKTtcbiAgICAgICAgICAgIGlucHV0LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgfVxuXG4gICAgdW5kbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS51bmRvKCkucnVuKCk7XG4gICAgfVxuXG4gICAgcmVkbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5yZWRvKCkucnVuKCk7XG4gICAgfVxuXG4gICAgb25Ub29sYmFyS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIVsnQXJyb3dMZWZ0JywgJ0Fycm93UmlnaHQnLCAnSG9tZScsICdFbmQnXS5pbmNsdWRlcyhldmVudC5rZXkpKSByZXR1cm47XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgdG9vbGJhciA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZSA9IHRoaXMuZ2V0VG9vbGJhckZvY3VzYWJsZSh0b29sYmFyKTtcbiAgICAgICAgaWYgKCFmb2N1c2FibGUubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gZm9jdXNhYmxlLmZpbmRJbmRleChlbCA9PiBlbCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgICAgIGxldCBuZXh0SW5kZXg6IG51bWJlcjtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dSaWdodCc6IG5leHRJbmRleCA9IChjdXJyZW50SW5kZXggKyAxKSAlIGZvY3VzYWJsZS5sZW5ndGg7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzogbmV4dEluZGV4ID0gKGN1cnJlbnRJbmRleCAtIDEgKyBmb2N1c2FibGUubGVuZ3RoKSAlIGZvY3VzYWJsZS5sZW5ndGg7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnSG9tZSc6IG5leHRJbmRleCA9IDA7IGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDogbmV4dEluZGV4ID0gZm9jdXNhYmxlLmxlbmd0aCAtIDE7IGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9jdXNhYmxlLmZvckVhY2goKGVsLCBpKSA9PiBlbC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgaSA9PT0gbmV4dEluZGV4ID8gJzAnIDogJy0xJykpO1xuICAgICAgICBmb2N1c2FibGVbbmV4dEluZGV4XS5mb2N1cygpO1xuICAgIH1cblxuICAgIG9uVG9vbGJhckZvY3VzSW4oZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCB0b29sYmFyID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gdGhpcy5nZXRUb29sYmFyRm9jdXNhYmxlKHRvb2xiYXIpO1xuICAgICAgICBpZiAoZm9jdXNhYmxlLmluY2x1ZGVzKHRhcmdldCkpIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZS5mb3JFYWNoKGVsID0+IGVsLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCBlbCA9PT0gdGFyZ2V0ID8gJzAnIDogJy0xJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUb29sYmFyRm9jdXNhYmxlKHRvb2xiYXI6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgICAgICAgdG9vbGJhci5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignYnV0dG9uOm5vdChbZGlzYWJsZWRdKSwgc2VsZWN0LCBsYWJlbFt0YWJpbmRleF0nKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFZGl0b3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAgICAgICBlbGVtZW50OiB0aGlzLmVkaXRvckNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBleHRlbnNpb25zOiBbXG4gICAgICAgICAgICAgICAgU3RhcnRlcktpdC5jb25maWd1cmUoe1xuICAgICAgICAgICAgICAgICAgICBsaW5rOiB7IG9wZW5PbkNsaWNrOiBmYWxzZSB9LFxuICAgICAgICAgICAgICAgICAgICB1bmRlcmxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIFVuZGVybGluZSxcbiAgICAgICAgICAgICAgICBJbWFnZS5jb25maWd1cmUoeyBhbGxvd0Jhc2U2NDogdHJ1ZSB9KSxcbiAgICAgICAgICAgICAgICBUZXh0QWxpZ24uY29uZmlndXJlKHsgdHlwZXM6IFsnaGVhZGluZycsICdwYXJhZ3JhcGgnXSB9KSxcbiAgICAgICAgICAgICAgICBUZXh0U3R5bGUsXG4gICAgICAgICAgICAgICAgQ29sb3IsXG4gICAgICAgICAgICAgICAgSGlnaGxpZ2h0LmNvbmZpZ3VyZSh7IG11bHRpY29sb3I6IHRydWUgfSksXG4gICAgICAgICAgICAgICAgUGxhY2Vob2xkZXIuY29uZmlndXJlKHsgcGxhY2Vob2xkZXI6ICgpID0+IHRoaXMuX2N1cnJlbnRQbGFjZWhvbGRlciB9KSxcbiAgICAgICAgICAgICAgICBTdWJzY3JpcHQsXG4gICAgICAgICAgICAgICAgU3VwZXJzY3JpcHQsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5leHRlbnNpb25zKCksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgY29udGVudDogdGhpcy5fdmFsdWUsXG4gICAgICAgICAgICBlZGl0YWJsZTogIXRoaXMucmVhZG9ubHkoKSxcbiAgICAgICAgICAgIGVkaXRvclByb3BzOiB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICByb2xlOiAndGV4dGJveCcsXG4gICAgICAgICAgICAgICAgICAgICdhcmlhLW11bHRpbGluZSc6ICd0cnVlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2NvbnRlbnRfYXJlYScsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblVwZGF0ZTogKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gZWRpdG9yLmlzRW1wdHkgPyAnJyA6IGVkaXRvci5nZXRIVE1MKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGVkaXRvci5nZXRUZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBodG1sO1xuICAgICAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKGh0bWwpO1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dENoYW5nZS5lbWl0KHsgaHRtbFZhbHVlOiBodG1sLCB0ZXh0VmFsdWU6IHRleHQgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jQWN0aXZlU3RhdGVzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25TZWxlY3Rpb25VcGRhdGU6ICh7IGVkaXRvciB9KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jQWN0aXZlU3RhdGVzKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBmcm9tLCB0bywgZW1wdHkgfSA9IGVkaXRvci5zdGF0ZS5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7IGZyb20sIHRvLCBlbXB0eSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc3luY0FjdGl2ZVN0YXRlcygpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5lZGl0b3JJbml0LmVtaXQodGhpcy5lZGl0b3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3luY0FjdGl2ZVN0YXRlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVkaXRvcikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGUgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgdGhpcy5hY3RpdmVTdGF0ZXMgPSB7XG4gICAgICAgICAgICBpc0JvbGQ6IGUuaXNBY3RpdmUoJ2JvbGQnKSxcbiAgICAgICAgICAgIGlzSXRhbGljOiBlLmlzQWN0aXZlKCdpdGFsaWMnKSxcbiAgICAgICAgICAgIGlzVW5kZXJsaW5lOiBlLmlzQWN0aXZlKCd1bmRlcmxpbmUnKSxcbiAgICAgICAgICAgIGlzU3RyaWtlOiBlLmlzQWN0aXZlKCdzdHJpa2UnKSxcbiAgICAgICAgICAgIGlzQnVsbGV0TGlzdDogZS5pc0FjdGl2ZSgnYnVsbGV0TGlzdCcpLFxuICAgICAgICAgICAgaXNPcmRlcmVkTGlzdDogZS5pc0FjdGl2ZSgnb3JkZXJlZExpc3QnKSxcbiAgICAgICAgICAgIGlzQmxvY2txdW90ZTogZS5pc0FjdGl2ZSgnYmxvY2txdW90ZScpLFxuICAgICAgICAgICAgaXNDb2RlOiBlLmlzQWN0aXZlKCdjb2RlJyksXG4gICAgICAgICAgICBpc1N1YnNjcmlwdDogZS5pc0FjdGl2ZSgnc3Vic2NyaXB0JyksXG4gICAgICAgICAgICBpc1N1cGVyc2NyaXB0OiBlLmlzQWN0aXZlKCdzdXBlcnNjcmlwdCcpLFxuICAgICAgICAgICAgaXNBbGlnbkxlZnQ6IGUuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICdsZWZ0JyB9KSxcbiAgICAgICAgICAgIGlzQWxpZ25DZW50ZXI6IGUuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICdjZW50ZXInIH0pLFxuICAgICAgICAgICAgaXNBbGlnblJpZ2h0OiBlLmlzQWN0aXZlKHsgdGV4dEFsaWduOiAncmlnaHQnIH0pLFxuICAgICAgICAgICAgY3VycmVudEhlYWRpbmc6IFsxLCAyLCAzXS5maW5kKChsZXZlbCkgPT4gZS5pc0FjdGl2ZSgnaGVhZGluZycsIHsgbGV2ZWwgfSkpID8/IDAsXG4gICAgICAgICAgICBjdXJyZW50Q29sb3I6IChlLmdldEF0dHJpYnV0ZXMoJ3RleHRTdHlsZScpWydjb2xvciddIGFzIHN0cmluZykgfHwgJyMwMDAwMDAnLFxuICAgICAgICAgICAgY3VycmVudEhpZ2hsaWdodDogKGUuZ2V0QXR0cmlidXRlcygnaGlnaGxpZ2h0JylbJ2NvbG9yJ10gYXMgc3RyaW5nKSB8fCAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgY2FuVW5kbzogZS5jYW4oKS51bmRvKCksXG4gICAgICAgICAgICBjYW5SZWRvOiBlLmNhbigpLnJlZG8oKSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJyb3VuZGVkIGZsZXggZmxleC1jb2wgYm9yZGVyIHRyYW5zaXRpb24tW2JvcmRlci1jb2xvcixib3gtc2hhZG93XSBkdXJhdGlvbi0xNTAgZm9jdXMtd2l0aGluOmJvcmRlci1bIzVjNWNlNl0gZm9jdXMtd2l0aGluOnNoYWRvdy1bMF8wXzBfMnB4X3JnYmEoOTIsOTIsMjMwLDAuMTUpXVwiXG4gICAgW25nQ2xhc3NdPVwic3R5bGVDbGFzcygpXCJcbiAgICBbbmdTdHlsZV09XCJzdHlsZSgpXCJcbiAgICBbY2xhc3Mucy1lZGl0b3ItLXJlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgIFtjbGFzcy5zLWVkaXRvci0tZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJmb3JtRGlzYWJsZWRcIlxuICAgIFtjbGFzcy5ib3JkZXItZ3JheXNjYWxlLTIwXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgW2NsYXNzLmJnLWdyYXlzY2FsZS01XT1cImZvcm1EaXNhYmxlZFwiXG4gICAgW2NsYXNzLmJvcmRlci1ncmF5c2NhbGUtMzBdPVwiIWZvcm1EaXNhYmxlZFwiXG4gICAgW2NsYXNzLmJnLWdyYXlzY2FsZS0wXT1cIiFmb3JtRGlzYWJsZWRcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbj5cbiAgICBAaWYgKCFyZWFkb25seSgpKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicm91bmRlZC10IGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMC41IGJvcmRlci1iIGJvcmRlci1ncmF5c2NhbGUtMzAgYmctWyNmOWY5ZmJdIHB4LTIgcHktMS41XCJcbiAgICAgICAgICAgIHJvbGU9XCJ0b29sYmFyXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfdG9vbGJhcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25Ub29sYmFyS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChmb2N1c2luKT1cIm9uVG9vbGJhckZvY3VzSW4oJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdoZWFkZXInKSkge1xuICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkIGJnLWdyYXlzY2FsZS0wIGgtNyBjdXJzb3ItcG9pbnRlciBib3JkZXIgYm9yZGVyLWdyYXlzY2FsZS0zMCBweC0xLjUgdGV4dC1bMTNweF0gdGV4dC1bIzNkM2Q0ZF0gb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTE1MCBmb2N1czpib3JkZXItWyM1YzVjZTZdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpib3JkZXItZ3JheXNjYWxlLTIwIGRpc2FibGVkOmJnLWdyYXlzY2FsZS01IGRpc2FibGVkOnRleHQtZ3JheXNjYWxlLTMwXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkhlYWRpbmdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2hlYWRpbmdfbGV2ZWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJhY3RpdmVTdGF0ZXMuY3VycmVudEhlYWRpbmcgPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9oZWFkaW5nX25vcm1hbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJhY3RpdmVTdGF0ZXMuY3VycmVudEhlYWRpbmcgPT09IDFcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9oZWFkaW5nXzEnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiYWN0aXZlU3RhdGVzLmN1cnJlbnRIZWFkaW5nID09PSAyXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfaGVhZGluZ18yJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImFjdGl2ZVN0YXRlcy5jdXJyZW50SGVhZGluZyA9PT0gM1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2hlYWRpbmdfMycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0xIGlubGluZS1ibG9jayBoLTUgdy1weCBzaHJpbmstMCBiZy1bI2QxZDFkY11cIj48L3NwYW4+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdib2xkJykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLWJvbGRcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfYm9sZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc0JvbGRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVCb2xkKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnaXRhbGljJykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLWl0YWxpY1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9pdGFsaWMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVTdGF0ZXMuaXNJdGFsaWNcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVJdGFsaWMoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCd1bmRlcmxpbmUnKSkge1xuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtdW5kZXJsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3VuZGVybGluZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc1VuZGVybGluZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZVVuZGVybGluZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ3N0cmlrZScpKSB7XG4gICAgICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1zdHJpa2V0aHJvdWdoXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3N0cmlrZXRocm91Z2gnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVTdGF0ZXMuaXNTdHJpa2VcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVTdHJpa2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdzdWJzY3JpcHQnKSkge1xuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtc3Vic2NyaXB0XCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3N1YnNjcmlwdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc1N1YnNjcmlwdFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZVN1YnNjcmlwdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ3N1cGVyc2NyaXB0JykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLXN1cGVyc2NyaXB0XCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3N1cGVyc2NyaXB0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYWN0aXZlU3RhdGVzLmlzU3VwZXJzY3JpcHRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVTdXBlcnNjcmlwdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2NvbG9yJykpIHtcbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZm9ybURpc2FibGVkID8gbnVsbCA6IDBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGZsZXggaC03IHctNyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZCBiZy1ncmF5c2NhbGUtMCB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0xNTBcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJmb3JtRGlzYWJsZWQgPyAnb3BhY2l0eS1bLjM1XSBjdXJzb3Itbm90LWFsbG93ZWQnIDogJ2N1cnNvci1wb2ludGVyIGhvdmVyOmJnLVsjZjBmMGY4XSdcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl90ZXh0X2NvbG9yJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfdGV4dF9jb2xvcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAhZm9ybURpc2FibGVkICYmIGNvbG9ySW5wdXQuY2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAhZm9ybURpc2FibGVkICYmIGNvbG9ySW5wdXQuY2xpY2soKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC1weFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1mb250IHRleHQtWzExcHhdIHRleHQtWyMzZDNkNGRdXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtWzNweF0gdy0zLjUgcm91bmRlZC14c21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImFjdGl2ZVN0YXRlcy5jdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICNjb2xvcklucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIGgtZnVsbCB3LWZ1bGwgb3BhY2l0eS0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZvcm1EaXNhYmxlZCA/ICdjdXJzb3Itbm90LWFsbG93ZWQnIDogJ2N1cnNvci1wb2ludGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYWN0aXZlU3RhdGVzLmN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJzZXRDb2xvcigkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2hpZ2hsaWdodCcpKSB7XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImZvcm1EaXNhYmxlZCA/IG51bGwgOiAwXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4IGgtNyB3LTcgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQgYmctZ3JheXNjYWxlLTAgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMTUwXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZm9ybURpc2FibGVkID8gJ29wYWNpdHktWy4zNV0gY3Vyc29yLW5vdC1hbGxvd2VkJyA6ICdjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1bI2YwZjBmOF0nXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfYmFja2dyb3VuZF9jb2xvcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2JhY2tncm91bmRfY29sb3InIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgIWZvcm1EaXNhYmxlZCAmJiBoaWdobGlnaHRJbnB1dC5jbGljaygpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICFmb3JtRGlzYWJsZWQgJiYgaGlnaGxpZ2h0SW5wdXQuY2xpY2soKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC1weFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1oaWdobGlnaHRlciB0ZXh0LVsxMXB4XSB0ZXh0LVsjM2QzZDRkXVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLVszcHhdIHctMy41IHJvdW5kZWQteHNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJhY3RpdmVTdGF0ZXMuY3VycmVudEhpZ2hsaWdodCA9PT0gJ3RyYW5zcGFyZW50JyA/ICcjZmZmZjAwJyA6IGFjdGl2ZVN0YXRlcy5jdXJyZW50SGlnaGxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAjaGlnaGxpZ2h0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGluc2V0LTAgaC1mdWxsIHctZnVsbCBvcGFjaXR5LTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZm9ybURpc2FibGVkID8gJ2N1cnNvci1ub3QtYWxsb3dlZCcgOiAnY3Vyc29yLXBvaW50ZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJhY3RpdmVTdGF0ZXMuY3VycmVudEhpZ2hsaWdodCA9PT0gJ3RyYW5zcGFyZW50JyA/ICcjZmZmZjAwJyA6IGFjdGl2ZVN0YXRlcy5jdXJyZW50SGlnaGxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInNldEhpZ2hsaWdodCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2xpc3QnKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMSBpbmxpbmUtYmxvY2sgaC01IHctcHggc2hyaW5rLTAgYmctWyNkMWQxZGNdXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtbGlzdC11bFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9idWxsZXRfbGlzdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc0J1bGxldExpc3RcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVCdWxsZXRMaXN0KClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtbGlzdC1vbFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9vcmRlcmVkX2xpc3QnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVTdGF0ZXMuaXNPcmRlcmVkTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZU9yZGVyZWRMaXN0KClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnYWxpZ24nKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMSBpbmxpbmUtYmxvY2sgaC01IHctcHggc2hyaW5rLTAgYmctWyNkMWQxZGNdXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtYWxpZ24tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9hbGlnbl9sZWZ0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYWN0aXZlU3RhdGVzLmlzQWxpZ25MZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwic2V0VGV4dEFsaWduKCdsZWZ0JylcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2FsaWduX2NlbnRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc0FsaWduQ2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwic2V0VGV4dEFsaWduKCdjZW50ZXInKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1hbGlnbi1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9hbGlnbl9yaWdodCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc0FsaWduUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJzZXRUZXh0QWxpZ24oJ3JpZ2h0JylcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnYmxvY2txdW90ZScpKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0xIGlubGluZS1ibG9jayBoLTUgdy1weCBzaHJpbmstMCBiZy1bI2QxZDFkY11cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1xdW90ZS1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9ibG9ja3F1b3RlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYWN0aXZlU3RhdGVzLmlzQmxvY2txdW90ZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZUJsb2NrcXVvdGUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdjb2RlLWJsb2NrJykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLWNvZGVcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfaW5saW5lX2NvZGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVTdGF0ZXMuaXNDb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwidG9nZ2xlQ29kZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2xpbmsnKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMSBpbmxpbmUtYmxvY2sgaC01IHctcHggc2hyaW5rLTAgYmctWyNkMWQxZGNdXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9pbnNlcnRfbGluaycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJzZXRMaW5rKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnaW1hZ2UnKSkge1xuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfaW5zZXJ0X2ltYWdlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInNldEltYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGhhc0FueUZvcm1hdEJlZm9yZVVuZG9SZWRvKCkpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTEgaW5saW5lLWJsb2NrIGgtNSB3LXB4IHNocmluay0wIGJnLVsjZDFkMWRjXVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLXVuZG9cIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCIoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfdW5kbycgfCB0cmFuc2xhdGUpICsgJyAoQ3RybCtaKSdcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWQgfHwgIWFjdGl2ZVN0YXRlcy5jYW5VbmRvXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ1bmRvKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1yZWRvXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiKCdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3JlZG8nIHwgdHJhbnNsYXRlKSArICcgKEN0cmwrWSknXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkIHx8ICFhY3RpdmVTdGF0ZXMuY2FuUmVkb1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVkbygpXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdjbGVhbicpKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0xIGlubGluZS1ibG9jayBoLTUgdy1weCBzaHJpbmstMCBiZy1bI2QxZDFkY11cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1yZW1vdmUtZm9ybWF0XCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2NsZWFyX2Zvcm1hdHRpbmcnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiY2xlYXJGb3JtYXR0aW5nKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8ZGl2XG4gICAgICAgICNlZGl0b3JDb250YWluZXJcbiAgICAgICAgY2xhc3M9XCJzLWVkaXRvci1jb250ZW50IGZsZXgtMVwiXG4gICAgPjwvZGl2PlxuICAgIDxpbnB1dFxuICAgICAgICAjaW1hZ2VJbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uSW1hZ2VGaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgLz5cbjwvZGl2PlxuIl19
|