@sd-angular/core 1.2.93 → 1.2.96

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.
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"SdEditorAction":{"__symbolic":"interface"},"SdEditorActionArgs":{"__symbolic":"interface"},"IEditorConfiguration":{"__symbolic":"interface"},"EDITOR_CONFIG":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":22,"character":33},"arguments":["editor.configuration"]},"SdEditorModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"SdEditor"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":13,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":14,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"ReactiveFormsModule","line":15,"character":4},{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"ngx-quill","name":"QuillModule","line":16,"character":4},"member":"forRoot"}},{"__symbolic":"reference","module":"@sd-angular/core/translate","name":"SdTranslateModule","line":17,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/button","name":"SdButtonModule","line":18,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/textarea","name":"SdTextareaModule","line":19,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/api","name":"SdApiModule","line":20,"character":4}],"exports":[{"__symbolic":"reference","name":"SdEditor"}],"providers":[]}]}],"members":{}},"Constants":{"ARE_YOU_WANT_TO_DELETE":"Are you sure you want to delete?","ACTIVE":"active","IN_ACTIVE":"inactive","APPROVE":"approve","UN_APPROVE":"unapprove","ACCEPT_SIZE_IMAGE":"Logo only accept image with size <= 2MB","ACCEPT_TYPE_IMAGE":"image/png, image/gif, image/jpeg, image/bmp, image/x-icon","PAGE_TYPE_NEW":"new","PAGE_TYPE_EDIT":"edit","SAVE":"saveOb","SAVE_AND_CONTINUE":"saveAndContOb","IMAGE_SIZE":2048000,"SUCCESS":"Success","IMPORT_SUCCESSFULLY":"Import successfully!","ERROR":"Error","FAILED":"fail","FILE":"file","NONE":"none","NOT_EXIST_ID_OR_LINK":"This ID/Link is not existing","FEATURE_IS_PENDING":"This feature is pending","NOT_SUPPORT_FILE_IMAGE":"File upload is not supported.","NOT_SUPPORT_FILE_IMPORT":"File import is not supported.","NETWORK_ERROR":"Network Error","SORT_BY":[{"value":0,"name":"Created Date"},{"value":1,"name":"Title"}],"DESC":[{"value":true,"name":"Descending"},{"value":false,"name":"Ascending"}],"FORM_ERRORS":{"Id":"","textSearch":"","ImportLogId":"","SortBy":"","Reverse":""},"VALIDATION_MESSAGES":{}},"PROMOTION_PERMISSIONS":["ListPromotion","AddNewPromotion","EditPromotion","ActiveOrInactivePromotion","RemovePromotion","ImportPromotion","ExportPromotion"],"ValidateMessageConstants":{"TITLE_REQUIRED":"Title is required","TITLE_MAXLENGTH":"Title is not more than 55 characters","TITLE_PATTERN":"Title is required","CREATED_AT_REQUIRED":"Created At is required","SHOW_ON_HOME_REQUIRED":"Show On Home is required","DISPLAY_NUMBER_REQUIRED":"Display Number is required","CONTENT_TYPE_REQUIRED":"Content Type is required","DISCOUNT_PERCENT_REQUIRED":"Discount percent is required","DISCOUNT_PERCENT_MAX":"Max discount percent is 100, cannot input greater","DISCOUNT_PERCENT_MIN":"Min discount percent is 0, cannot input lower"},"PROMOTION_FORM":{"FORM_ERRORS":{"title":"","createdAt":"","displayNumber":"","showOnHome":"","discountPercent":"","isActive":"","ctaLabelName":"","ctaDeepLink":"","tags":""},"VALIDATION_MESSAGES":{"title":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"TITLE_REQUIRED"},"maxlength":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"TITLE_MAXLENGTH"},"pattern":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"TITLE_PATTERN"}},"createdAt":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"CREATED_AT_REQUIRED"}},"showOnHome":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"SHOW_ON_HOME_REQUIRED"}},"displayNumber":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"DISPLAY_NUMBER_REQUIRED"}},"discountPercent":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"DISCOUNT_PERCENT_REQUIRED"},"max":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"DISCOUNT_PERCENT_MAX"},"min":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"DISCOUNT_PERCENT_MIN"}},"tags":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"CONTENT_TYPE_REQUIRED"}}}},"SdEditor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":28,"character":1},"arguments":[{"selector":"sd-editor","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":32,"character":19},"member":"OnPush"},"template":"<div id=\"box-{{id}}\">\r\n <label *ngIf=\"label && !sdLabelDef?.templateRef\" class=\"d-block T14M\">{{label}} <span class=\"text-danger mb-2\"\r\n *ngIf=\"required\">*</span></label>\r\n <ng-container *ngIf=\"sdLabelDef?.templateRef\" matSuffix>\r\n <ng-container *ngTemplateOutlet=\"sdLabelDef.templateRef\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!formControl.disabled && !showHtmlEditor\">\r\n <quill-editor #editor [styles]=\"styles\" (onEditorCreated)=\"editorInit($event)\" [ngModel]=\"formControl.value\"\r\n (onSelectionChanged)=\"onSelectionChanged($event)\"\r\n (onContentChanged)=\"onContentChanged($event)\"\r\n (ngModelChange)=\"onModelChange($event)\" [id]=\"id\" [modules]=\"quillConfig\" [placeholder]=\"placeholder\"\r\n [maxLength]=\"maxlength\">\r\n </quill-editor>\r\n <span class=\"d-block text-danger mt-5\" *ngIf=\"formControl.errors?.required\">\r\n {{'This field is required' | sdTranslate}}\r\n </span>\r\n <span class=\"d-block text-danger mt-5\" *ngIf=\"formControl.errors?.minlength\">\r\n {{'Max length' | sdTranslate}} <strong>{{minlength}}</strong>\r\n </span>\r\n <span class=\"d-block text-danger mt-5\" *ngIf=\"formControl.errors?.maxlength\">\r\n {{'Max length' | sdTranslate}} <strong>{{maxlength}}</strong>\r\n </span>\r\n </ng-container>\r\n <ng-container *ngIf=\"formControl.disabled\">\r\n <div [innerHtml]=\"formControl.value\"></div>\r\n </ng-container>\r\n <ng-container *ngIf=\"enableHTMLButton\">\r\n <sd-textarea [(model)]=\"modelHTML\" *ngIf=\"showHtmlEditor\" rows=\"20\"\r\n (modelChange)=\"onModelChange($event)\"></sd-textarea>\r\n <sd-button\r\n title=\"{{showHtmlEditor?'Ẩn':'Hiện'}} mã HTML\"\r\n class=\"mr-8\"\r\n fontSet=\"material-icons-outlined\"\r\n (action)=\"onClickShowHtmlEditor()\"\r\n type=\"light\"\r\n ></sd-button>\r\n </ng-container>\r\n</div>\r\n","styles":["::ng-deep img[alt=c-image-editor-quill]{max-width:80%}::ng-deep .ql-toolbar input.ql-customFile[type=file]{display:none}"]}]}],"members":{"editor":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":38,"character":3},"arguments":["editor"]}]}],"label":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":39,"character":3}}]}],"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":41,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"pRequired":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":61,"character":3}}]}],"_minlength":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":68,"character":3},"arguments":["minlength"]}]}],"_maxlength":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":75,"character":3},"arguments":["maxlength"]}]}],"modelChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":80,"character":3}}]}],"placeholder":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":82,"character":3}}]}],"styles":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":84,"character":3}}]}],"args":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":86,"character":3}}]}],"domain":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":90,"character":3}}]}],"form":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"toolbar":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":102,"character":3}}]}],"enableHTMLButton":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":103,"character":3}}]}],"mentionValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":108,"character":3}}]}],"hashTagValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":109,"character":3}}]}],"sdLabelDef":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":110,"character":3},"arguments":[{"__symbolic":"reference","module":"@sd-angular/core/common","name":"SdLabelDefDirective","line":110,"character":16}]}]}],"sdChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":178,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":185,"character":5},"arguments":[{"__symbolic":"reference","name":"EDITOR_CONFIG"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":185,"character":28}}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":181,"character":20},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":182,"character":17},{"__symbolic":"reference","module":"@sd-angular/core/api","name":"SdApiService","line":183,"character":26},{"__symbolic":"reference","module":"@sd-angular/core/loading","name":"SdLoadingService","line":184,"character":28},{"__symbolic":"reference","name":"IEditorConfiguration"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"onSelectionChanged":[{"__symbolic":"method"}],"onContentChanged":[{"__symbolic":"method"}]}}},"origins":{"SdEditorAction":"./src/lib/editor.model","SdEditorActionArgs":"./src/lib/editor.model","IEditorConfiguration":"./src/lib/editor.model","EDITOR_CONFIG":"./src/lib/editor.model","SdEditorModule":"./src/lib/editor.module","Constants":"./src/lib/constant","PROMOTION_PERMISSIONS":"./src/lib/constant","ValidateMessageConstants":"./src/lib/constant","PROMOTION_FORM":"./src/lib/constant","SdEditor":"./src/lib/editor.component"},"importAs":"@sd-angular/core/editor"}
1
+ {"__symbolic":"module","version":4,"metadata":{"SdEditorAction":{"__symbolic":"interface"},"SdEditorActionArgs":{"__symbolic":"interface"},"IEditorConfiguration":{"__symbolic":"interface"},"EDITOR_CONFIG":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":24,"character":33},"arguments":["editor.configuration"]},"SdEditorModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"SdEditor"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":13,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":14,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"ReactiveFormsModule","line":15,"character":4},{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"ngx-quill","name":"QuillModule","line":16,"character":4},"member":"forRoot"}},{"__symbolic":"reference","module":"@sd-angular/core/translate","name":"SdTranslateModule","line":17,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/button","name":"SdButtonModule","line":18,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/textarea","name":"SdTextareaModule","line":19,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/api","name":"SdApiModule","line":20,"character":4}],"exports":[{"__symbolic":"reference","name":"SdEditor"}],"providers":[]}]}],"members":{}},"Constants":{"ARE_YOU_WANT_TO_DELETE":"Are you sure you want to delete?","ACTIVE":"active","IN_ACTIVE":"inactive","APPROVE":"approve","UN_APPROVE":"unapprove","ACCEPT_SIZE_IMAGE":"Logo only accept image with size <= 2MB","ACCEPT_TYPE_IMAGE":"image/png, image/gif, image/jpeg, image/bmp, image/x-icon","PAGE_TYPE_NEW":"new","PAGE_TYPE_EDIT":"edit","SAVE":"saveOb","SAVE_AND_CONTINUE":"saveAndContOb","IMAGE_SIZE":2048000,"SUCCESS":"Success","IMPORT_SUCCESSFULLY":"Import successfully!","ERROR":"Error","FAILED":"fail","FILE":"file","NONE":"none","NOT_EXIST_ID_OR_LINK":"This ID/Link is not existing","FEATURE_IS_PENDING":"This feature is pending","NOT_SUPPORT_FILE_IMAGE":"File upload is not supported.","NOT_SUPPORT_FILE_IMPORT":"File import is not supported.","NETWORK_ERROR":"Network Error","SORT_BY":[{"value":0,"name":"Created Date"},{"value":1,"name":"Title"}],"DESC":[{"value":true,"name":"Descending"},{"value":false,"name":"Ascending"}],"FORM_ERRORS":{"Id":"","textSearch":"","ImportLogId":"","SortBy":"","Reverse":""},"VALIDATION_MESSAGES":{}},"PROMOTION_PERMISSIONS":["ListPromotion","AddNewPromotion","EditPromotion","ActiveOrInactivePromotion","RemovePromotion","ImportPromotion","ExportPromotion"],"ValidateMessageConstants":{"TITLE_REQUIRED":"Title is required","TITLE_MAXLENGTH":"Title is not more than 55 characters","TITLE_PATTERN":"Title is required","CREATED_AT_REQUIRED":"Created At is required","SHOW_ON_HOME_REQUIRED":"Show On Home is required","DISPLAY_NUMBER_REQUIRED":"Display Number is required","CONTENT_TYPE_REQUIRED":"Content Type is required","DISCOUNT_PERCENT_REQUIRED":"Discount percent is required","DISCOUNT_PERCENT_MAX":"Max discount percent is 100, cannot input greater","DISCOUNT_PERCENT_MIN":"Min discount percent is 0, cannot input lower"},"PROMOTION_FORM":{"FORM_ERRORS":{"title":"","createdAt":"","displayNumber":"","showOnHome":"","discountPercent":"","isActive":"","ctaLabelName":"","ctaDeepLink":"","tags":""},"VALIDATION_MESSAGES":{"title":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"TITLE_REQUIRED"},"maxlength":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"TITLE_MAXLENGTH"},"pattern":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"TITLE_PATTERN"}},"createdAt":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"CREATED_AT_REQUIRED"}},"showOnHome":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"SHOW_ON_HOME_REQUIRED"}},"displayNumber":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"DISPLAY_NUMBER_REQUIRED"}},"discountPercent":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"DISCOUNT_PERCENT_REQUIRED"},"max":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"DISCOUNT_PERCENT_MAX"},"min":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"DISCOUNT_PERCENT_MIN"}},"tags":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"CONTENT_TYPE_REQUIRED"}}}},"SdEditor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":28,"character":1},"arguments":[{"selector":"sd-editor","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":32,"character":19},"member":"OnPush"},"template":"<div id=\"box-{{id}}\">\r\n <label *ngIf=\"label && !sdLabelDef?.templateRef\" class=\"d-block T14M\">{{label}} <span class=\"text-danger mb-2\"\r\n *ngIf=\"required\">*</span></label>\r\n <ng-container *ngIf=\"sdLabelDef?.templateRef\" matSuffix>\r\n <ng-container *ngTemplateOutlet=\"sdLabelDef.templateRef\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!formControl.disabled && !showHtmlEditor\">\r\n <quill-editor #editor [styles]=\"styles\" (onEditorCreated)=\"editorInit($event)\" [ngModel]=\"formControl.value\"\r\n (onSelectionChanged)=\"onSelectionChanged($event)\"\r\n (onContentChanged)=\"onContentChanged($event)\"\r\n (ngModelChange)=\"onModelChange($event)\" [id]=\"id\" [modules]=\"quillConfig\" [placeholder]=\"placeholder\"\r\n [maxLength]=\"maxlength\">\r\n </quill-editor>\r\n <span class=\"d-block text-danger mt-5\" *ngIf=\"formControl.errors?.required\">\r\n {{'This field is required' | sdTranslate}}\r\n </span>\r\n <span class=\"d-block text-danger mt-5\" *ngIf=\"formControl.errors?.minlength\">\r\n {{'Max length' | sdTranslate}} <strong>{{minlength}}</strong>\r\n </span>\r\n <span class=\"d-block text-danger mt-5\" *ngIf=\"formControl.errors?.maxlength\">\r\n {{'Max length' | sdTranslate}} <strong>{{maxlength}}</strong>\r\n </span>\r\n </ng-container>\r\n <ng-container *ngIf=\"formControl.disabled\">\r\n <div [innerHtml]=\"formControl.value\"></div>\r\n </ng-container>\r\n <ng-container *ngIf=\"enableHTMLButton\">\r\n <sd-textarea [(model)]=\"modelHTML\" *ngIf=\"showHtmlEditor\" rows=\"20\"\r\n (modelChange)=\"onModelChange($event)\"></sd-textarea>\r\n <sd-button\r\n title=\"{{showHtmlEditor?'Ẩn':'Hiện'}} mã HTML\"\r\n class=\"mr-8\"\r\n fontSet=\"material-icons-outlined\"\r\n (action)=\"onClickShowHtmlEditor()\"\r\n type=\"light\"\r\n ></sd-button>\r\n </ng-container>\r\n</div>\r\n","styles":["::ng-deep img[alt=c-image-editor-quill]{max-width:80%}::ng-deep .ql-toolbar input.ql-customFile[type=file]{display:none}"]}]}],"members":{"editor":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":38,"character":3},"arguments":["editor"]}]}],"label":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":39,"character":3}}]}],"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":41,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"pRequired":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":61,"character":3}}]}],"_minlength":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":68,"character":3},"arguments":["minlength"]}]}],"_maxlength":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":75,"character":3},"arguments":["maxlength"]}]}],"modelChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":80,"character":3}}]}],"placeholder":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":82,"character":3}}]}],"styles":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":84,"character":3}}]}],"args":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":86,"character":3}}]}],"domain":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":90,"character":3}}]}],"form":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"toolbar":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":102,"character":3}}]}],"enableHTMLButton":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":103,"character":3}}]}],"mentionValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":108,"character":3}}]}],"hashTagValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":109,"character":3}}]}],"sdLabelDef":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":110,"character":3},"arguments":[{"__symbolic":"reference","module":"@sd-angular/core/common","name":"SdLabelDefDirective","line":110,"character":16}]}]}],"sdChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":177,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":183,"character":5},"arguments":[{"__symbolic":"reference","name":"EDITOR_CONFIG"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":183,"character":28}}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":181,"character":20},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":182,"character":17},{"__symbolic":"reference","name":"IEditorConfiguration"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"onSelectionChanged":[{"__symbolic":"method"}],"onContentChanged":[{"__symbolic":"method"}]}}},"origins":{"SdEditorAction":"./src/lib/editor.model","SdEditorActionArgs":"./src/lib/editor.model","IEditorConfiguration":"./src/lib/editor.model","EDITOR_CONFIG":"./src/lib/editor.model","SdEditorModule":"./src/lib/editor.module","Constants":"./src/lib/constant","PROMOTION_PERMISSIONS":"./src/lib/constant","ValidateMessageConstants":"./src/lib/constant","PROMOTION_FORM":"./src/lib/constant","SdEditor":"./src/lib/editor.component"},"importAs":"@sd-angular/core/editor"}
@@ -1,18 +1,14 @@
1
1
  import { AfterViewInit, ChangeDetectorRef, EventEmitter, NgZone, OnDestroy, OnInit } from '@angular/core';
2
2
  import { ContentChange, QuillEditorComponent, SelectionChange } from 'ngx-quill';
3
3
  import { FormControl, FormGroup, NgForm } from '@angular/forms';
4
- import { SdApiService } from '@sd-angular/core/api';
5
4
  import 'quill-mention';
6
5
  import { SdLabelDefDirective } from '@sd-angular/core/common';
7
- import { SdLoadingService } from "@sd-angular/core/loading";
8
6
  import { IEditorConfiguration } from './editor.model';
9
7
  import Quill from 'quill';
10
8
  export declare class SdEditor implements OnInit, AfterViewInit, OnDestroy {
11
9
  #private;
12
10
  private ngZone;
13
11
  private ref;
14
- private sdApiService;
15
- private loadingService;
16
12
  private configuration;
17
13
  id: string;
18
14
  editor: QuillEditorComponent;
@@ -90,10 +86,9 @@ export declare class SdEditor implements OnInit, AfterViewInit, OnDestroy {
90
86
  };
91
87
  };
92
88
  };
93
- customButtonFileSVG: string;
94
89
  sdChange: EventEmitter<string>;
95
90
  timerLoadQuillToolbar: any;
96
- constructor(ngZone: NgZone, ref: ChangeDetectorRef, sdApiService: SdApiService, loadingService: SdLoadingService, configuration: IEditorConfiguration);
91
+ constructor(ngZone: NgZone, ref: ChangeDetectorRef, configuration: IEditorConfiguration);
97
92
  ngOnInit(): void;
98
93
  ngAfterViewInit(): void;
99
94
  ngOnDestroy(): void;
@@ -1,13 +1,15 @@
1
- import { InjectionToken } from "@angular/core";
2
- import Quill from "quill";
1
+ import { InjectionToken } from '@angular/core';
2
+ import Quill from 'quill';
3
3
  export interface SdEditorAction {
4
4
  key: string;
5
5
  icon: string;
6
+ tooltip: string;
6
7
  click: (event: any, args: SdEditorActionArgs) => void | Promise<void>;
7
8
  }
8
9
  export interface SdEditorActionArgs {
9
10
  qlKey: string;
10
11
  element: HTMLElement;
12
+ loadingId: string;
11
13
  quill: Quill;
12
14
  cursorPosition: {
13
15
  index: number;
@@ -5,17 +5,13 @@ import * as uuid from 'uuid';
5
5
  import { FormControl, NgForm, Validators } from '@angular/forms';
6
6
  import { Constants } from './constant';
7
7
  import { Subscription } from 'rxjs';
8
- import { SdApiService } from '@sd-angular/core/api';
9
8
  import 'quill-mention';
10
9
  import { SdLabelDefDirective } from '@sd-angular/core/common';
11
- import { SdLoadingService } from "@sd-angular/core/loading";
12
10
  import { EDITOR_CONFIG } from './editor.model';
13
11
  export class SdEditor {
14
- constructor(ngZone, ref, sdApiService, loadingService, configuration) {
12
+ constructor(ngZone, ref, configuration) {
15
13
  this.ngZone = ngZone;
16
14
  this.ref = ref;
17
- this.sdApiService = sdApiService;
18
- this.loadingService = loadingService;
19
15
  this.configuration = configuration;
20
16
  _name.set(this, `N${uuid.v4()}`);
21
17
  this.id = `I${uuid.v4()}`;
@@ -93,7 +89,6 @@ export class SdEditor {
93
89
  }
94
90
  }
95
91
  };
96
- this.customButtonFileSVG = '<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><g><rect fill="none" height="24" width="24"/><path d="M20.41,8.41l-4.83-4.83C15.21,3.21,14.7,3,14.17,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V9.83 C21,9.3,20.79,8.79,20.41,8.41z M7,7h7v2H7V7z M17,17H7v-2h10V17z M17,13H7v-2h10V13z"/></g></svg>';
97
92
  this.sdChange = new EventEmitter();
98
93
  this.timerLoadQuillToolbar = null;
99
94
  _updateValidator.set(this, () => {
@@ -265,31 +260,27 @@ export class SdEditor {
265
260
  const interval = setInterval(() => {
266
261
  if (document.querySelector(qlKey)) {
267
262
  clearInterval(interval);
268
- document.querySelector(qlKey).innerHTML = this.customButtonFileSVG;
263
+ document.querySelector(qlKey).innerHTML = action.icon;
269
264
  const customAction = document.querySelector(qlKey);
270
265
  if (customAction.getAttribute('listener') !== '1') {
271
266
  customAction.setAttribute('listener', '1');
267
+ if (action.tooltip) {
268
+ customAction.setAttribute('title', action.tooltip);
269
+ }
272
270
  customAction.addEventListener('click', (e) => {
273
271
  const cursorPosition = localStorage.getItem('quillRange');
274
272
  const element = e.currentTarget; // Lấy element của action được click
275
273
  const toolbar = element.closest('.ql-formats').closest('.ql-toolbar'); // Lấy toolbar element
276
274
  const id = toolbar.closest('quill-editor').id; // Lấy id của editor để phục vụ loading
277
275
  const loadingId = `#box-${id}`; // id của editor;
278
- const func = action.click(e, {
276
+ action.click(e, {
279
277
  qlKey,
280
278
  element,
279
+ loadingId,
281
280
  cursorPosition: JSON.parse(cursorPosition),
282
281
  quill: __classPrivateFieldGet(this, _quill),
283
282
  args: this.args
284
283
  });
285
- if (func instanceof Promise) {
286
- __classPrivateFieldGet(this, _quill).enable(false);
287
- this.loadingService.start(loadingId);
288
- func.finally(() => {
289
- __classPrivateFieldGet(this, _quill).enable(true);
290
- this.loadingService.stop(loadingId);
291
- });
292
- }
293
284
  });
294
285
  }
295
286
  }
@@ -417,8 +408,6 @@ SdEditor.decorators = [
417
408
  SdEditor.ctorParameters = () => [
418
409
  { type: NgZone },
419
410
  { type: ChangeDetectorRef },
420
- { type: SdApiService },
421
- { type: SdLoadingService },
422
411
  { type: undefined, decorators: [{ type: Inject, args: [EDITOR_CONFIG,] }, { type: Optional }] }
423
412
  ];
424
413
  SdEditor.propDecorators = {
@@ -442,4 +431,4 @@ SdEditor.propDecorators = {
442
431
  sdLabelDef: [{ type: ContentChild, args: [SdLabelDefDirective,] }],
443
432
  sdChange: [{ type: Output }]
444
433
  };
445
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvZWRpdG9yLyIsInNvdXJjZXMiOlsic3JjL2xpYi9lZGl0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBR04sUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLFdBQVcsRUFBYSxNQUFNLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBU3JFLE1BQU0sT0FBTyxRQUFRO0lBa0puQixZQUNVLE1BQWMsRUFDZCxHQUFzQixFQUN0QixZQUEwQixFQUMxQixjQUFnQyxFQUNHLGFBQW1DO1FBSnRFLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxH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QkFPakIsS0FBSyxTQUFDLFdBQVc7MEJBS2pCLE1BQU07MEJBRU4sS0FBSztxQkFFTCxLQUFLO21CQUVMLEtBQUs7cUJBSUwsS0FBSzttQkFFTCxLQUFLO3NCQVVMLEtBQUs7K0JBQ0wsS0FBSzs0QkFLTCxLQUFLOzRCQUNMLEtBQUs7eUJBQ0wsWUFBWSxTQUFDLG1CQUFtQjt1QkFvRWhDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE5nWm9uZSxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udGVudENoYW5nZSwgUXVpbGxFZGl0b3JDb21wb25lbnQsIFNlbGVjdGlvbkNoYW5nZSB9IGZyb20gJ25neC1xdWlsbCc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIE5nRm9ybSwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4vY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2RBcGlTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9hcGknO1xyXG5pbXBvcnQgJ3F1aWxsLW1lbnRpb24nO1xyXG5pbXBvcnQgeyBTZExhYmVsRGVmRGlyZWN0aXZlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9jb21tb24nO1xyXG5pbXBvcnQgeyBTZExvYWRpbmdTZXJ2aWNlIH0gZnJvbSBcIkBzZC1hbmd1bGFyL2NvcmUvbG9hZGluZ1wiO1xyXG5pbXBvcnQgeyBFRElUT1JfQ09ORklHLCBJRWRpdG9yQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vZWRpdG9yLm1vZGVsJztcclxuaW1wb3J0IFF1aWxsIGZyb20gJ3F1aWxsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RFZGl0b3IgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgI25hbWUgPSBgTiR7dXVpZC52NCgpfWA7XHJcbiAgaWQ6IHN0cmluZyA9IGBJJHt1dWlkLnY0KCl9YDtcclxuICAjc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvcicpIGVkaXRvcjogUXVpbGxFZGl0b3JDb21wb25lbnQ7XHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcclxuICAjbW9kZWw6IHN0cmluZztcclxuICBASW5wdXQoKSBzZXQgbW9kZWwodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuI21vZGVsID0gdmFsO1xyXG4gICAgdGhpcy5tb2RlbEhUTUwgPSB2YWw7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuI21vZGVsLCB7XHJcbiAgICAgIGVtaXRFdmVudDogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IGRpc2FibGVkKHZhbDogYm9vbGVhbiB8ICcnKSB7XHJcbiAgICB2YWwgPSAodmFsID09PSAnJykgfHwgdmFsO1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXF1aXJlZCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBzZXQgcFJlcXVpcmVkKHZhbDogYm9vbGVhbiB8ICcnKSB7XHJcbiAgICB0aGlzLnJlcXVpcmVkID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICAgIHRoaXMuI3VwZGF0ZVZhbGlkYXRvcigpO1xyXG4gIH1cclxuXHJcbiAgbWlubGVuZ3RoOiBudW1iZXI7XHJcblxyXG4gIEBJbnB1dCgnbWlubGVuZ3RoJykgc2V0IF9taW5sZW5ndGgodmFsOiBudW1iZXIpIHtcclxuICAgIHRoaXMubWlubGVuZ3RoID0gK3ZhbDtcclxuICAgIHRoaXMuI3VwZGF0ZVZhbGlkYXRvcigpO1xyXG4gIH1cclxuXHJcbiAgbWF4bGVuZ3RoOiBudW1iZXI7XHJcblxyXG4gIEBJbnB1dCgnbWF4bGVuZ3RoJykgc2V0IF9tYXhsZW5ndGgodmFsOiBudW1iZXIpIHtcclxuICAgIHRoaXMubWF4bGVuZ3RoID0gK3ZhbDtcclxuICAgIHRoaXMuI3VwZGF0ZVZhbGlkYXRvcigpO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIG1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQElucHV0KCkgc3R5bGVzOiBhbnkgPSB7IGhlaWdodDogJzI1MHB4JyB9O1xyXG5cclxuICBASW5wdXQoKSBhcmdzOiBhbnk7XHJcblxyXG4gIGZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcblxyXG4gIEBJbnB1dCgpIGRvbWFpbiA9ICcnO1xyXG4gICNmb3JtOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgc2V0IGZvcm0odmFsOiBOZ0Zvcm0gfCBGb3JtR3JvdXApIHtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIE5nRm9ybSkge1xyXG4gICAgICAgIHRoaXMuI2Zvcm0gPSB2YWwuZm9ybTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLiNmb3JtID0gdmFsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSB0b29sYmFyOiBhbnk7XHJcbiAgQElucHV0KCkgZW5hYmxlSFRNTEJ1dHRvbiA9IGZhbHNlO1xyXG4gIHNob3dIdG1sRWRpdG9yID0gZmFsc2U7XHJcbiAgbW9kZWxIVE1MOiBzdHJpbmc7XHJcblxyXG4gIHF1aWxsRXZlbnQ6IGFueTtcclxuICBASW5wdXQoKSBtZW50aW9uVmFsdWVzOiB7IGlkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGxpbms/OiBzdHJpbmcgfVtdO1xyXG4gIEBJbnB1dCgpIGhhc2hUYWdWYWx1ZXM6IHsgaWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbGluaz86IHN0cmluZyB9W107XHJcbiAgQENvbnRlbnRDaGlsZChTZExhYmVsRGVmRGlyZWN0aXZlKSBzZExhYmVsRGVmOiBTZExhYmVsRGVmRGlyZWN0aXZlO1xyXG4gIHF1aWxsQ29uZmlnID0ge1xyXG4gICAgLy8gdG9vbGJhcjogJy50b29sYmFyJyxcclxuICAgIHRvb2xiYXI6IHtcclxuICAgICAgY29udGFpbmVyOiBbXHJcbiAgICAgICAgWydib2xkJywgJ2l0YWxpYycsICd1bmRlcmxpbmUnLCAnc3RyaWtlJ10sICAgICAgICAvLyB0b2dnbGVkIGJ1dHRvbnNcclxuICAgICAgICBbJ2Jsb2NrcXVvdGUnLCAnY29kZS1ibG9jayddLFxyXG5cclxuICAgICAgICBbeyAnaGVhZGVyJzogMSB9LCB7ICdoZWFkZXInOiAyIH1dLCAgICAgICAgICAgICAgIC8vIGN1c3RvbSBidXR0b24gdmFsdWVzXHJcbiAgICAgICAgW3sgJ2xpc3QnOiAnb3JkZXJlZCcgfSwgeyAnbGlzdCc6ICdidWxsZXQnIH1dLFxyXG4gICAgICAgIFt7ICdzY3JpcHQnOiAnc3ViJyB9LCB7ICdzY3JpcHQnOiAnc3VwZXInIH1dLCAgICAgIC8vIHN1cGVyc2NyaXB0L3N1YnNjcmlwdFxyXG4gICAgICAgIFt7ICdpbmRlbnQnOiAnLTEnIH0sIHsgJ2luZGVudCc6ICcrMScgfV0sICAgICAgICAgIC8vIG91dGRlbnQvaW5kZW50XHJcbiAgICAgICAgW3sgJ2RpcmVjdGlvbic6ICdydGwnIH1dLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZXh0IGRpcmVjdGlvblxyXG5cclxuICAgICAgICBbeyAnc2l6ZSc6IFsnc21hbGwnLCBmYWxzZSwgJ2xhcmdlJywgJ2h1Z2UnXSB9XSwgIC8vIGN1c3RvbSBkcm9wZG93blxyXG4gICAgICAgIFt7ICdoZWFkZXInOiBbMSwgMiwgMywgNCwgNSwgNiwgZmFsc2VdIH1dLFxyXG5cclxuICAgICAgICBbeyAnY29sb3InOiBbXSB9LCB7ICdiYWNrZ3JvdW5kJzogW10gfV0sICAgICAgICAgIC8vIGRyb3Bkb3duIHdpdGggZGVmYXVsdHMgZnJvbSB0aGVtZVxyXG4gICAgICAgIFt7ICdmb250JzogW10gfV0sXHJcbiAgICAgICAgW3sgJ2FsaWduJzogW10gfV0sXHJcblxyXG4gICAgICAgIFsnY2xlYW4nXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBmb3JtYXR0aW5nIGJ1dHRvblxyXG5cclxuICAgICAgICBbJ2xpbmsnLCAnaW1hZ2UnLCAndmlkZW8nXSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5rIGFuZCBpbWFnZSwgdmlkZW9cclxuICAgICAgXVxyXG4gICAgfSxcclxuICAgIG1lbnRpb246IHtcclxuICAgICAgYWxsb3dlZENoYXJzOiAvXltBLVphLXowLTlcXHPDhcOEw5bDpcOkw7YuXy1dKiQvLFxyXG4gICAgICBtZW50aW9uRGVub3RhdGlvbkNoYXJzOiBbJ0AnLCAnIyddLFxyXG4gICAgICBzb3VyY2U6IChzZWFyY2hUZXJtLCByZW5kZXJMaXN0LCBtZW50aW9uQ2hhcikgPT4ge1xyXG4gICAgICAgIGlmICgodGhpcy5tZW50aW9uVmFsdWVzICYmIG1lbnRpb25DaGFyID09PSAnQCcpIHx8ICh0aGlzLmhhc2hUYWdWYWx1ZXMgJiYgbWVudGlvbkNoYXIgPT09ICcjJykpIHtcclxuICAgICAgICAgIGxldCB2YWx1ZXM7XHJcbiAgICAgICAgICBpZiAobWVudGlvbkNoYXIgPT09ICdAJykge1xyXG4gICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLm1lbnRpb25WYWx1ZXM7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1lbnRpb25DaGFyID09PSAnIycpIHtcclxuICAgICAgICAgICAgdmFsdWVzID0gdGhpcy5oYXNoVGFnVmFsdWVzO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWVzID0gW107XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHNlYXJjaFRlcm0ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJlbmRlckxpc3QodmFsdWVzLCBzZWFyY2hUZXJtKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG4gICAgICAgICAgICAgIGlmICh+dmFsdWVzW2ldLnZhbHVlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2godmFsdWVzW2ldKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVuZGVyTGlzdChtYXRjaGVzLCBzZWFyY2hUZXJtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAga2V5Ym9hcmQ6IHtcclxuICAgICAgYmluZGluZ3M6IHtcclxuICAgICAgICBlbnRlcjoge1xyXG4gICAgICAgICAga2V5OiAxMyxcclxuICAgICAgICAgIGhhbmRsZXI6IChyYW5nZSwgY29udGV4dCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG4gIGN1c3RvbUJ1dHRvbkZpbGVTVkcgPSAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZW5hYmxlLWJhY2tncm91bmQ9XCJuZXcgMCAwIDI0IDI0XCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0cHhcIiBmaWxsPVwiIzAwMDAwMFwiPjxnPjxyZWN0IGZpbGw9XCJub25lXCIgaGVpZ2h0PVwiMjRcIiB3aWR0aD1cIjI0XCIvPjxwYXRoIGQ9XCJNMjAuNDEsOC40MWwtNC44My00LjgzQzE1LjIxLDMuMjEsMTQuNywzLDE0LjE3LDNINUMzLjksMywzLDMuOSwzLDV2MTRjMCwxLjEsMC45LDIsMiwyaDE0YzEuMSwwLDItMC45LDItMlY5LjgzIEMyMSw5LjMsMjAuNzksOC43OSwyMC40MSw4LjQxeiBNNyw3aDd2Mkg3Vjd6IE0xNywxN0g3di0yaDEwVjE3eiBNMTcsMTNIN3YtMmgxMFYxM3pcIi8+PC9nPjwvc3ZnPic7XHJcbiAgQE91dHB1dCgpIHNkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgdGltZXJMb2FkUXVpbGxUb29sYmFyID0gbnVsbDtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHNkQXBpU2VydmljZTogU2RBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsb2FkaW5nU2VydmljZTogU2RMb2FkaW5nU2VydmljZSxcclxuICAgIEBJbmplY3QoRURJVE9SX0NPTkZJRykgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBJRWRpdG9yQ29uZmlndXJhdGlvbixcclxuICApIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuI2Zvcm0/LmFkZENvbnRyb2wodGhpcy4jbmFtZSwgdGhpcy5mb3JtQ29udHJvbCk7XHJcblxyXG4gICAgaWYgKHRoaXMudG9vbGJhcikge1xyXG4gICAgICB0aGlzLnF1aWxsQ29uZmlnLnRvb2xiYXIuY29udGFpbmVyID0gdGhpcy50b29sYmFyO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgYWN0aW9uIG9mICh0aGlzLmNvbmZpZ3VyYXRpb24/LmFjdGlvbnMgfHwgW10pKSB7XHJcbiAgICAgIGlmICh0aGlzLnF1aWxsQ29uZmlnLnRvb2xiYXIuY29udGFpbmVyLnRvU3RyaW5nKCkuaW5jbHVkZXMoYWN0aW9uLmtleSkpIHtcclxuICAgICAgICBjb25zdCBxbEtleSA9IGBidXR0b24ucWwtJHthY3Rpb24ua2V5fWBcclxuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHFsS2V5KSkge1xyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihxbEtleSkuaW5uZXJIVE1MID0gdGhpcy5jdXN0b21CdXR0b25GaWxlU1ZHO1xyXG4gICAgICAgICAgICBjb25zdCBjdXN0b21BY3Rpb24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHFsS2V5KTtcclxuICAgICAgICAgICAgaWYgKGN1c3RvbUFjdGlvbi5nZXRBdHRyaWJ1dGUoJ2xpc3RlbmVyJykgIT09ICcxJykge1xyXG4gICAgICAgICAgICAgIGN1c3RvbUFjdGlvbi5zZXRBdHRyaWJ1dGUoJ2xpc3RlbmVyJywgJzEnKTtcclxuICAgICAgICAgICAgICBjdXN0b21BY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yUG9zaXRpb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncXVpbGxSYW5nZScpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGUuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDsgLy8gTOG6pXkgZWxlbWVudCBj4bunYSBhY3Rpb24gxJHGsOG7o2MgY2xpY2tcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRvb2xiYXIgPSBlbGVtZW50LmNsb3Nlc3QoJy5xbC1mb3JtYXRzJykuY2xvc2VzdCgnLnFsLXRvb2xiYXInKTsgLy8gTOG6pXkgdG9vbGJhciBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRvb2xiYXIuY2xvc2VzdCgncXVpbGwtZWRpdG9yJykuaWQ7IC8vIEzhuqV5IGlkIGPhu6dhIGVkaXRvciDEkeG7gyBwaOG7pWMgduG7pSBsb2FkaW5nXHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2FkaW5nSWQgPSBgI2JveC0ke2lkfWA7IC8vIGlkIGPhu6dhIGVkaXRvcjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmMgPSBhY3Rpb24uY2xpY2soZSwge1xyXG4gICAgICAgICAgICAgICAgICBxbEtleSxcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgY3Vyc29yUG9zaXRpb246IEpTT04ucGFyc2UoY3Vyc29yUG9zaXRpb24pLFxyXG4gICAgICAgICAgICAgICAgICBxdWlsbDogdGhpcy4jcXVpbGwsXHJcbiAgICAgICAgICAgICAgICAgIGFyZ3M6IHRoaXMuYXJnc1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKGZ1bmMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuI3F1aWxsLmVuYWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RhcnQobG9hZGluZ0lkKTtcclxuICAgICAgICAgICAgICAgICAgZnVuYy5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNxdWlsbC5lbmFibGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdG9wKGxvYWRpbmdJZCk7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy5xdWlsbENvbmZpZy50b29sYmFyLmNvbnRhaW5lci50b1N0cmluZygpLmluY2x1ZGVzKCdjdXN0b21GaWxlJykpIHtcclxuICAgIC8vICAgdGhpcy50aW1lckxvYWRRdWlsbFRvb2xiYXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAvLyAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbi5xbC1jdXN0b21GaWxlJykpIHtcclxuICAgIC8vICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lckxvYWRRdWlsbFRvb2xiYXIpO1xyXG4gICAgLy8gICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYnV0dG9uLnFsLWN1c3RvbUZpbGUnKS5pbm5lckhUTUwgPSB0aGlzLmN1c3RvbUJ1dHRvbkZpbGVTVkc7XHJcbiAgICAvLyAgICAgICBjb25zdCBjdXN0b21CdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdidXR0b24ucWwtY3VzdG9tRmlsZScpO1xyXG4gICAgLy8gICAgICAgaWYgKGN1c3RvbUJ1dHRvbi5nZXRBdHRyaWJ1dGUoJ2xpc3RlbmVyJykgIT09ICcxJykge1xyXG4gICAgLy8gICAgICAgICBjdXN0b21CdXR0b24uc2V0QXR0cmlidXRlKCdsaXN0ZW5lcicsICcxJyk7XHJcbiAgICAvLyAgICAgICAgIGN1c3RvbUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuY3VzdG9tRmlsZUhhbmRsZXIpO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSwgMTAwMCk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjdXN0b21GaWxlSGFuZGxlciA9IChlKSA9PiB7XHJcbiAgLy8gICBjb25zdCBjdXN0b21CdXR0b24gPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgLy8gICBjb25zdCBxdWlsbFRvb2xiYXIgPSBjdXN0b21CdXR0b24uY2xvc2VzdCgnLnFsLWZvcm1hdHMnKS5jbG9zZXN0KCcucWwtdG9vbGJhcicpO1xyXG4gIC8vICAgY29uc3QgcXVpbGxCb3ggPSBxdWlsbFRvb2xiYXIuY2xvc2VzdCgnLnFsLWZvcm1hdHMnKVxyXG4gIC8vICAgbGV0IGZpbGVJbnB1dDogSFRNTElucHV0RWxlbWVudCA9IHF1aWxsVG9vbGJhci5xdWVyeVNlbGVjdG9yKCdpbnB1dC5xbC1jdXN0b21GaWxlW3R5cGU9ZmlsZV0nKTtcclxuICAvLyAgIGlmIChmaWxlSW5wdXQgPT0gbnVsbCkge1xyXG4gIC8vICAgICBmaWxlSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gIC8vICAgICBmaWxlSW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgQ29uc3RhbnRzLkZJTEUpO1xyXG4gIC8vICAgICBmaWxlSW5wdXQuc2V0QXR0cmlidXRlKCdhY2NlcHQnLCAnKicpO1xyXG4gIC8vICAgICBmaWxlSW5wdXQuY2xhc3NMaXN0LmFkZCgncWwtY3VzdG9tRmlsZScpO1xyXG4gIC8vICAgICBmaWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xyXG4gIC8vICAgICAgIGNvbnN0IGZpbGVzID0gZmlsZUlucHV0LmZpbGVzO1xyXG4gIC8vICAgICAgIGlmICghZmlsZXMgfHwgIWZpbGVzLmxlbmd0aCkge1xyXG4gIC8vICAgICAgICAgcmV0dXJuO1xyXG4gIC8vICAgICAgIH1cclxuXHJcbiAgLy8gICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAvLyAgICAgICBmb3JtRGF0YS5hcHBlbmQoQ29uc3RhbnRzLkZJTEUsIGZpbGVzWzBdKTtcclxuICAvLyAgICAgICBsZXQgcmFuZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncXVpbGxSYW5nZScpO1xyXG4gIC8vICAgICAgIGlmIChyYW5nZSkge1xyXG4gIC8vICAgICAgICAgcmFuZ2UgPSBKU09OLnBhcnNlKHJhbmdlKTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICAgdGhpcy5xdWlsbEV2ZW50LmVuYWJsZShmYWxzZSk7XHJcbiAgLy8gICAgICAgdGhpcy4jdXBsb2FkRmlsZShmb3JtRGF0YSwgdGhpcy5xdWlsbEV2ZW50LCByYW5nZSwgZmlsZUlucHV0LCBxdWlsbFRvb2xiYXIuY2xvc2VzdCgncXVpbGwtZWRpdG9yJykuaWQpO1xyXG4gIC8vICAgICB9KTtcclxuICAvLyAgICAgcXVpbGxUb29sYmFyLmFwcGVuZENoaWxkKGZpbGVJbnB1dCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBmaWxlSW5wdXQuY2xpY2soKTtcclxuICAvLyB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQodGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWwpID0+IHtcclxuICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHZhbCk7XHJcbiAgICAgIHRoaXMuc2RDaGFuZ2UuZW1pdCh2YWwpO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLiNmb3JtPy5yZW1vdmVDb250cm9sKHRoaXMuI25hbWUpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAjdXBkYXRlVmFsaWRhdG9yID0gKCkgPT4ge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuY2xlYXJBc3luY1ZhbGlkYXRvcnMoKTtcclxuICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1pbmxlbmd0aCA+IDApIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKHRoaXMubWlubGVuZ3RoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tYXhsZW5ndGggPiAwKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLm1heGxlbmd0aCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcbiAgI3F1aWxsOiBRdWlsbDtcclxuICBlZGl0b3JJbml0ID0gKHF1aWxsOiBRdWlsbCkgPT4ge1xyXG4gICAgdGhpcy4jcXVpbGwgPSBxdWlsbDtcclxuICAgIHRoaXMucXVpbGxFdmVudCA9IHF1aWxsO1xyXG4gICAgLy8gY29uc3QgdHh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XHJcbiAgICAvLyB0eHRBcmVhLnN0eWxlLmNzc1RleHQgPVxyXG4gICAgLy8gICAnd2lkdGg6IDEwMCU7bWFyZ2luOiAwcHg7YmFja2dyb3VuZDogcmdiKDI5LCAyOSwgMjkpOycgK1xyXG4gICAgLy8gICAnYm94LXNpemluZzogYm9yZGVyLWJveDtjb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOycgK1xyXG4gICAgLy8gICAnZm9udC1zaXplOiAxNXB4O291dGxpbmU6IG5vbmU7cGFkZGluZzogMjBweDsnICtcclxuICAgIC8vICAgJ2xpbmUtaGVpZ2h0OiAyNHB4O2ZvbnQtZmFtaWx5OiBDb25zb2xhcywgTWVubG8sIE1vbmFjbywgJnF1b3Q7Q291cmllciBOZXcmcXVvdDssIG1vbm9zcGFjZTsnICtcclxuICAgIC8vICAgJ3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDA7Ym90dG9tOiAwO2JvcmRlcjogbm9uZTtkaXNwbGF5Om5vbmUnO1xyXG5cclxuICAgIC8vIGNvbnN0IGh0bWxFZGl0b3IgPSBxdWlsbC5hZGRDb250YWluZXIoJ3FsLWN1c3RvbScpO1xyXG4gICAgLy8gaHRtbEVkaXRvci5hcHBlbmRDaGlsZCh0eHRBcmVhKTtcclxuXHJcbiAgICAvLyBjb25zdCBteUVkaXRvciA9IHF1aWxsLmNvbnRhaW5lcjtcclxuICAgIC8vIHF1aWxsLm9uKCd0ZXh0LWNoYW5nZScsIChkZWx0YSwgb2xkRGVsdGEsIHNvdXJjZSkgPT4ge1xyXG4gICAgLy8gICBjb25zdCBodG1sID0gbXlFZGl0b3IuY2hpbGRyZW5bMF0uaW5uZXJIVE1MO1xyXG4gICAgLy8gICB0eHRBcmVhLnZhbHVlID0gaHRtbDtcclxuICAgIC8vICAgLy8gaWYgKHF1aWxsLmdldExlbmd0aCgpID4gdGhpcy5tYXhsZW5ndGgpIHtcclxuICAgIC8vICAgLy8gICBxdWlsbC5kZWxldGVUZXh0KHRoaXMubWF4bGVuZ3RoLCBxdWlsbC5nZXRMZW5ndGgoKSk7XHJcbiAgICAvLyAgIC8vIH1cclxuICAgIC8vICAgLy8gdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShodG1sKTtcclxuICAgIC8vIH0pO1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICB0aGlzLiNpbml0VXBsb2FkSW1hZ2UocXVpbGwpO1xyXG4gICAgLy8gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgLy8gICBxdWlsbC5nZXRNb2R1bGUoJ3Rvb2xiYXInKS5hZGRIYW5kbGVyKCdpbWFnZScsIGZ1bmN0aW9uICgpIHtcclxuICAgIC8vICAgICBsZXQgZmlsZUlucHV0ID0gdGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQucWwtaW1hZ2VbdHlwZT1maWxlXScpO1xyXG5cclxuICAgIC8vICAgICBpZiAoZmlsZUlucHV0ID09IG51bGwpIHtcclxuICAgIC8vICAgICAgIGZpbGVJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XHJcbiAgICAvLyAgICAgICBmaWxlSW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgQ29uc3RhbnRzLkZJTEUpO1xyXG4gICAgLy8gICAgICAgZmlsZUlucHV0LnNldEF0dHJpYnV0ZSgnYWNjZXB0JywgJ2ltYWdlL3BuZywgaW1hZ2UvZ2lmLCBpbWFnZS9qcGVnLCBpbWFnZS9ibXAsIGltYWdlL3gtaWNvbicpO1xyXG4gICAgLy8gICAgICAgZmlsZUlucHV0LmNsYXNzTGlzdC5hZGQoJ3FsLWltYWdlJyk7XHJcbiAgICAvLyAgICAgICBmaWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICBjb25zdCBmaWxlcyA9IGZpbGVJbnB1dC5maWxlcztcclxuICAgIC8vICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnF1aWxsLmdldFNlbGVjdGlvbih0cnVlKTtcclxuICAgIC8vICAgICAgICAgaWYgKCFmaWxlcyB8fCAhZmlsZXMubGVuZ3RoKSB7XHJcbiAgICAvLyAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgLy8gICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgLy8gICAgICAgICBmb3JtRGF0YS5hcHBlbmQoQ29uc3RhbnRzLkZJTEUsIGZpbGVzWzBdKTtcclxuXHJcbiAgICAvLyAgICAgICAgIHRoaXMucXVpbGwuZW5hYmxlKGZhbHNlKTtcclxuXHJcbiAgICAvLyAgICAgICAgIHNlbGYuI3VwbG9hZEltYWdlKGZvcm1EYXRhLCBxdWlsbCwgcmFuZ2UsIGZpbGVJbnB1dCk7XHJcbiAgICAvLyAgICAgICB9KTtcclxuICAgIC8vICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGZpbGVJbnB1dCk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGZpbGVJbnB1dC5jbGljaygpO1xyXG4gICAgLy8gICB9KTtcclxuXHJcbiAgICAvLyB9KTtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgI2luaXRVcGxvYWRJbWFnZSA9IChxdWlsbDogUXVpbGwpID0+IHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICBxdWlsbC5nZXRNb2R1bGUoJ3Rvb2xiYXInKS5hZGRIYW5kbGVyKCdpbWFnZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsZXQgZmlsZUlucHV0ID0gdGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQucWwtaW1hZ2VbdHlwZT1maWxlXScpO1xyXG4gICAgICAgIGlmIChmaWxlSW5wdXQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgZmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuICAgICAgICAgIGZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCBDb25zdGFudHMuRklMRSk7XHJcbiAgICAgICAgICBmaWxlSW5wdXQuc2V0QXR0cmlidXRlKCdhY2NlcHQnLCAnaW1hZ2UvcG5nLCBpbWFnZS9naWYsIGltYWdlL2pwZWcsIGltYWdlL2JtcCwgaW1hZ2UveC1pY29uJyk7XHJcbiAgICAgICAgICBmaWxlSW5wdXQuY2xhc3NMaXN0LmFkZCgncWwtaW1hZ2UnKTtcclxuICAgICAgICAgIGZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gZmlsZUlucHV0LmZpbGVzO1xyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMucXVpbGwuZ2V0U2VsZWN0aW9uKHRydWUpO1xyXG4gICAgICAgICAgICBpZiAoIWZpbGVzIHx8ICFmaWxlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKENvbnN0YW50cy5GSUxFLCBmaWxlc1swXSk7XHJcbiAgICAgICAgICAgIHRoaXMucXVpbGwuZW5hYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgLy8gc2VsZi4jdXBsb2FkSW1hZ2UoZm9ybURhdGEsIHF1aWxsLCByYW5nZSwgZmlsZUlucHV0KTtcclxuICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uPy51cGxvYWRJbWFnZShmb3JtRGF0YSwgc2VsZi5hcmdzKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgICAgc2VsZi5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcXVpbGwuZW5hYmxlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgLy8gcXVpbGwuZWRpdG9yLmluc2VydEVtYmVkKHJhbmdlLmluZGV4LCAnaW1hZ2UnLCByZXNwPy5kYXRhPy5pbWFnZVVybCB8fCByZXNwPy5kYXRhPy5wdWJsaXNoX3VybCB8fCByZXNwPy51cmwgfHwgJycpO1xyXG4gICAgICAgICAgICAgICAgcXVpbGwuZ2V0TW9kdWxlKCdjbGlwYm9hcmQnKS5kYW5nZXJvdXNseVBhc3RlSFRNTChyYW5nZS5pbmRleCwgJzxhIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCInICsgKHVybCB8fCAnJylcclxuICAgICAgICAgICAgICAgICAgKyAnXCI+PGltZyBzcmM9XCInICsgKHVybCB8fCAnJykgKyAnXCIgYWx0PVwiYy1pbWFnZS1lZGl0b3ItcXVpbGxcIj48L2E+JywgJ3VzZXInKTtcclxuICAgICAgICAgICAgICAgIC8vIHF1aWxsLmluc2VydFRleHQoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBxdWlsbC5nZXRDb250ZW50cygpO1xyXG4gICAgICAgICAgICAgICAgcXVpbGwuc2V0Q29udGVudHMoY29udGVudCk7XHJcbiAgICAgICAgICAgICAgICBxdWlsbC5zZXRTZWxlY3Rpb24ocmFuZ2UuaW5kZXggKyAxLCAndXNlcicpO1xyXG4gICAgICAgICAgICAgICAgZmlsZUlucHV0LnZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChmaWxlSW5wdXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbk1vZGVsQ2hhbmdlID0gKHZhbDogc3RyaW5nKSA9PiB7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbCk7XHJcbiAgICB0aGlzLm1vZGVsSFRNTCA9IHZhbDtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja1Nob3dIdG1sRWRpdG9yID0gKCkgPT4ge1xyXG4gICAgdGhpcy5zaG93SHRtbEVkaXRvciA9ICF0aGlzLnNob3dIdG1sRWRpdG9yO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAvLyAjdXBsb2FkSW1hZ2UgPSAoZm9ybURhdGEsIHF1aWxsLCByYW5nZSwgZmlsZUlucHV0KSA9PiB7XHJcbiAgLy8gICBpZiAoIXRoaXMudXJsVXBsb2FkSW1hZ2UpIHtcclxuICAvLyAgICAgdGhpcy51cmxVcGxvYWRJbWFnZSA9ICcvcGFydG5lci92Mi9tZXJjaGFuZGlzZS9maWxlL3VwbG9hZHVzZXJmaWxlJztcclxuICAvLyAgIH1cclxuICAvLyAgIC8vIHRoaXMuZG9tYWluID0gJ2h0dHBzOi8vYXBpLWNvbW1lcmNlLXFjLnZpbmlkLmRldic7XHJcbiAgLy8gICB0aGlzLnNkQXBpU2VydmljZS5wb3N0KHRoaXMudXJsVXBsb2FkSW1hZ2UsIGZvcm1EYXRhKS50aGVuKChyZXNwOiBhbnkpID0+IHtcclxuICAvLyAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gIC8vICAgICAgIHF1aWxsLmVuYWJsZSh0cnVlKTtcclxuICAvLyAgICAgICAvLyBxdWlsbC5lZGl0b3IuaW5zZXJ0RW1iZWQocmFuZ2UuaW5kZXgsICdpbWFnZScsIHJlc3A/LmRhdGE/LmltYWdlVXJsIHx8IHJlc3A/LmRhdGE/LnB1Ymxpc2hfdXJsIHx8IHJlc3A/LnVybCB8fCAnJyk7XHJcbiAgLy8gICAgICAgcXVpbGwuZ2V0TW9kdWxlKCdjbGlwYm9hcmQnKS5kYW5nZXJvdXNseVBhc3RlSFRNTChyYW5nZS5pbmRleCwgJzxhIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCInICsgKHJlc3A/LmRhdGE/LmltYWdlVXJsIHx8IHJlc3A/LmRhdGE/LnB1Ymxpc2hfdXJsIHx8IHJlc3A/LnVybCB8fCAnJylcclxuICAvLyAgICAgICAgICsgJ1wiPjxpbWcgc3JjPVwiJyArIChyZXNwPy5kYXRhPy5pbWFnZVVybCB8fCByZXNwPy5kYXRhPy5wdWJsaXNoX3VybCB8fCByZXNwPy51cmwgfHwgJycpICsgJ1wiIGFsdD1cImMtaW1hZ2UtZWRpdG9yLXF1aWxsXCI+PC9hPicsICd1c2VyJyk7XHJcbiAgLy8gICAgICAgLy8gcXVpbGwuaW5zZXJ0VGV4dCgpO1xyXG4gIC8vICAgICAgIGNvbnN0IGNvbnRlbnQgPSBxdWlsbC5nZXRDb250ZW50cygpO1xyXG4gIC8vICAgICAgIHF1aWxsLnNldENvbnRlbnRzKGNvbnRlbnQpO1xyXG4gIC8vICAgICAgIHF1aWxsLnNldFNlbGVjdGlvbihyYW5nZS5pbmRleCArIDEsICd1c2VyJyk7XHJcbiAgLy8gICAgICAgZmlsZUlucHV0LnZhbHVlID0gJyc7XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAvLyB9XHJcblxyXG4gIC8vICN1cGxvYWRGaWxlID0gKGZvcm1EYXRhLCBxdWlsbCwgcmFuZ2UsIGZpbGVJbnB1dCwgbG9hZGluZ0lEKSA9PiB7XHJcbiAgLy8gICBpZiAoIXRoaXMudXJsVXBsb2FkRmlsZSkge1xyXG4gIC8vICAgICB0aGlzLnVybFVwbG9hZEZpbGUgPSAnL3BhcnRuZXIvdjIvbWVyY2hhbmRpc2UvZmlsZS91cGxvYWR1c2VyZmlsZSc7XHJcbiAgLy8gICB9XHJcbiAgLy8gICAvLyB0aGlzLmRvbWFpbiA9ICdodHRwczovL2FwaS1jb21tZXJjZS1xYy52aW5pZC5kZXYnO1xyXG4gIC8vICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdGFydCgnI2JveC0nICsgbG9hZGluZ0lEKTtcclxuICAvLyAgIHRoaXMuc2RBcGlTZXJ2aWNlLnBvc3QodGhpcy51cmxVcGxvYWRGaWxlLCBmb3JtRGF0YSkudGhlbigocmVzcDogYW55KSA9PiB7XHJcbiAgLy8gICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAvLyAgICAgICBxdWlsbC5lbmFibGUodHJ1ZSk7XHJcbiAgLy8gICAgICAgLy8gcXVpbGwuZWRpdG9yLmluc2VydEVtYmVkKHJhbmdlLmluZGV4LCAnaW1hZ2UnLCByZXNwPy5kYXRhPy5pbWFnZVVybCB8fCByZXNwPy5kYXRhPy5wdWJsaXNoX3VybCB8fCByZXNwPy51cmwgfHwgJycpO1xyXG4gIC8vICAgICAgIHF1aWxsLmdldE1vZHVsZSgnY2xpcGJvYXJkJykuZGFuZ2Vyb3VzbHlQYXN0ZUhUTUwocmFuZ2UuaW5kZXgsICc8YSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiJyArIChyZXNwPy5kYXRhPy5pbWFnZVVybCB8fCByZXNwPy5kYXRhPy5wdWJsaXNoX3VybCB8fCByZXNwPy51cmwgfHwgJycpXHJcbiAgLy8gICAgICAgICArICdcIj4nICsgKHJlc3A/LmRhdGE/LmltYWdlVXJsIHx8IHJlc3A/LmRhdGE/LnB1Ymxpc2hfdXJsIHx8IHJlc3A/LnVybCB8fCAnJykgKyAnPC9hPicsICd1c2VyJyk7XHJcbiAgLy8gICAgICAgLy8gcXVpbGwuaW5zZXJ0VGV4dCgpO1xyXG4gIC8vICAgICAgIGNvbnN0IGNvbnRlbnQgPSBxdWlsbC5nZXRDb250ZW50cygpO1xyXG4gIC8vICAgICAgIHF1aWxsLnNldENvbnRlbnRzKGNvbnRlbnQpO1xyXG4gIC8vICAgICAgIHF1aWxsLnNldFNlbGVjdGlvbihyYW5nZS5pbmRleCArIDEsICd1c2VyJyk7XHJcbiAgLy8gICAgICAgZmlsZUlucHV0LnZhbHVlID0gJyc7XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3AoJyNib3gtJyArIGxvYWRpbmdJRCk7XHJcbiAgLy8gICB9KS5jYXRjaCgoZXIpID0+IHtcclxuICAvLyAgICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdG9wKCcjYm94LScgKyBsb2FkaW5nSUQpO1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAvLyB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlZChlOiBTZWxlY3Rpb25DaGFuZ2UpIHtcclxuICAgIC8vIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdxdWlsbFJhbmdlJywgZS5yYW5nZSA/IEpTT04uc3RyaW5naWZ5KGUucmFuZ2UpIDogKGUub2xkUmFuZ2UgPyBKU09OLnN0cmluZ2lmeShlLm9sZFJhbmdlKSA6IG51bGwpKTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdxdWlsbFJhbmdlJywgZS5lZGl0b3IuZ2V0U2VsZWN0aW9uKCkgPyBKU09OLnN0cmluZ2lmeShlLmVkaXRvci5nZXRTZWxlY3Rpb24oKSkgOiBudWxsKTtcclxuICB9XHJcblxyXG4gIG9uQ29udGVudENoYW5nZWQoZTogQ29udGVudENoYW5nZSkge1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3F1aWxsUmFuZ2UnLCBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgIGluZGV4OiAoZS5lZGl0b3IuZ2V0TGVuZ3RoKCkgPyBlLmVkaXRvci5nZXRMZW5ndGgoKSAtIDEgOiAwKSxcclxuICAgICAgbGVuZ3RoOiAwXHJcbiAgICB9KSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
434
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvZWRpdG9yLyIsInNvdXJjZXMiOlsic3JjL2xpYi9lZGl0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBR04sUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFDLFdBQVcsRUFBYSxNQUFNLEVBQWUsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNyQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE9BQU8sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRTVELE9BQU8sRUFBQyxhQUFhLEVBQXVCLE1BQU0sZ0JBQWdCLENBQUM7QUFTbkUsTUFBTSxPQUFPLFFBQVE7SUFrSm5CLFlBQ1UsTUFBYyxFQUNkLEdBQXNCLEVBQ2EsYUFBbUM7UUFGdEUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ2Esa0JBQWEsR0FBYixhQUFhLENBQXNCO1FBcEpoRixnQkFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFDO1FBQ3hCLE9BQUUsR0FBVyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQzdCLHdCQUFnQixJQUFJLFlBQVksRUFB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Q0FBQyxDQUFnQjtRQUMvQixZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2hELEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsTUFBTSxFQUFFLENBQUM7U0FDVixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7Ozs7WUE1YkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxXQUFXO2dCQUNyQiw0a0VBQXNDO2dCQUV0QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7OztZQXhCQyxNQUFNO1lBTk4saUJBQWlCOzRDQW9MZCxNQUFNLFNBQUMsYUFBYSxjQUFHLFFBQVE7OztxQkFqSmpDLFNBQVMsU0FBQyxRQUFRO29CQUNsQixLQUFLO29CQUVMLEtBQUs7dUJBU0wsS0FBSzt3QkFXTCxLQUFLO3lCQU9MLEtBQUssU0FBQyxXQUFXO3lCQU9qQixLQUFLLFNBQUMsV0FBVzswQkFLakIsTUFBTTswQkFFTixLQUFLO3FCQUVMLEtBQUs7bUJBRUwsS0FBSztxQkFJTCxLQUFLO21CQUVMLEtBQUs7c0JBVUwsS0FBSzsrQkFDTCxLQUFLOzRCQUtMLEtBQUs7NEJBQ0wsS0FBSzt5QkFDTCxZQUFZLFNBQUMsbUJBQW1CO3VCQW1FaEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgTmdab25lLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NvbnRlbnRDaGFuZ2UsIFF1aWxsRWRpdG9yQ29tcG9uZW50LCBTZWxlY3Rpb25DaGFuZ2V9IGZyb20gJ25neC1xdWlsbCc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7Rm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgTmdGb3JtLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0NvbnN0YW50c30gZnJvbSAnLi9jb25zdGFudCc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtTZEFwaVNlcnZpY2V9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvYXBpJztcclxuaW1wb3J0ICdxdWlsbC1tZW50aW9uJztcclxuaW1wb3J0IHtTZExhYmVsRGVmRGlyZWN0aXZlfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2NvbW1vbic7XHJcbmltcG9ydCB7U2RMb2FkaW5nU2VydmljZX0gZnJvbSBcIkBzZC1hbmd1bGFyL2NvcmUvbG9hZGluZ1wiO1xyXG5pbXBvcnQge0VESVRPUl9DT05GSUcsIElFZGl0b3JDb25maWd1cmF0aW9ufSBmcm9tICcuL2VkaXRvci5tb2RlbCc7XHJcbmltcG9ydCBRdWlsbCBmcm9tICdxdWlsbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NkLWVkaXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFNkRWRpdG9yIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gICNuYW1lID0gYE4ke3V1aWQudjQoKX1gO1xyXG4gIGlkOiBzdHJpbmcgPSBgSSR7dXVpZC52NCgpfWA7XHJcbiAgI3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICBAVmlld0NoaWxkKCdlZGl0b3InKSBlZGl0b3I6IFF1aWxsRWRpdG9yQ29tcG9uZW50O1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XHJcbiAgI21vZGVsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2V0IG1vZGVsKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLiNtb2RlbCA9IHZhbDtcclxuICAgIHRoaXMubW9kZWxIVE1MID0gdmFsO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLiNtb2RlbCwge1xyXG4gICAgICBlbWl0RXZlbnQ6IGZhbHNlXHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdmFsID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLmVuYWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVxdWlyZWQgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgc2V0IHBSZXF1aXJlZCh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdGhpcy5yZXF1aXJlZCA9ICh2YWwgPT09ICcnKSB8fCB2YWw7XHJcbiAgICB0aGlzLiN1cGRhdGVWYWxpZGF0b3IoKTtcclxuICB9XHJcblxyXG4gIG1pbmxlbmd0aDogbnVtYmVyO1xyXG5cclxuICBASW5wdXQoJ21pbmxlbmd0aCcpIHNldCBfbWlubGVuZ3RoKHZhbDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm1pbmxlbmd0aCA9ICt2YWw7XHJcbiAgICB0aGlzLiN1cGRhdGVWYWxpZGF0b3IoKTtcclxuICB9XHJcblxyXG4gIG1heGxlbmd0aDogbnVtYmVyO1xyXG5cclxuICBASW5wdXQoJ21heGxlbmd0aCcpIHNldCBfbWF4bGVuZ3RoKHZhbDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm1heGxlbmd0aCA9ICt2YWw7XHJcbiAgICB0aGlzLiN1cGRhdGVWYWxpZGF0b3IoKTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBtb2RlbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBJbnB1dCgpIHN0eWxlczogYW55ID0ge2hlaWdodDogJzI1MHB4J307XHJcblxyXG4gIEBJbnB1dCgpIGFyZ3M6IGFueTtcclxuXHJcbiAgZm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuXHJcbiAgQElucHV0KCkgZG9tYWluID0gJyc7XHJcbiAgI2Zvcm06IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBzZXQgZm9ybSh2YWw6IE5nRm9ybSB8IEZvcm1Hcm91cCkge1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICBpZiAodmFsIGluc3RhbmNlb2YgTmdGb3JtKSB7XHJcbiAgICAgICAgdGhpcy4jZm9ybSA9IHZhbC5mb3JtO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuI2Zvcm0gPSB2YWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHRvb2xiYXI6IGFueTtcclxuICBASW5wdXQoKSBlbmFibGVIVE1MQnV0dG9uID0gZmFsc2U7XHJcbiAgc2hvd0h0bWxFZGl0b3IgPSBmYWxzZTtcclxuICBtb2RlbEhUTUw6IHN0cmluZztcclxuXHJcbiAgcXVpbGxFdmVudDogYW55O1xyXG4gIEBJbnB1dCgpIG1lbnRpb25WYWx1ZXM6IHsgaWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbGluaz86IHN0cmluZyB9W107XHJcbiAgQElucHV0KCkgaGFzaFRhZ1ZhbHVlczogeyBpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBsaW5rPzogc3RyaW5nIH1bXTtcclxuICBAQ29udGVudENoaWxkKFNkTGFiZWxEZWZEaXJlY3RpdmUpIHNkTGFiZWxEZWY6IFNkTGFiZWxEZWZEaXJlY3RpdmU7XHJcbiAgcXVpbGxDb25maWcgPSB7XHJcbiAgICAvLyB0b29sYmFyOiAnLnRvb2xiYXInLFxyXG4gICAgdG9vbGJhcjoge1xyXG4gICAgICBjb250YWluZXI6IFtcclxuICAgICAgICBbJ2JvbGQnLCAnaXRhbGljJywgJ3VuZGVybGluZScsICdzdHJpa2UnXSwgICAgICAgIC8vIHRvZ2dsZWQgYnV0dG9uc1xyXG4gICAgICAgIFsnYmxvY2txdW90ZScsICdjb2RlLWJsb2NrJ10sXHJcblxyXG4gICAgICAgIFt7J2hlYWRlcic6IDF9LCB7J2hlYWRlcic6IDJ9XSwgICAgICAgICAgICAgICAvLyBjdXN0b20gYnV0dG9uIHZhbHVlc1xyXG4gICAgICAgIFt7J2xpc3QnOiAnb3JkZXJlZCd9LCB7J2xpc3QnOiAnYnVsbGV0J31dLFxyXG4gICAgICAgIFt7J3NjcmlwdCc6ICdzdWInfSwgeydzY3JpcHQnOiAnc3VwZXInfV0sICAgICAgLy8gc3VwZXJzY3JpcHQvc3Vic2NyaXB0XHJcbiAgICAgICAgW3snaW5kZW50JzogJy0xJ30sIHsnaW5kZW50JzogJysxJ31dLCAgICAgICAgICAvLyBvdXRkZW50L2luZGVudFxyXG4gICAgICAgIFt7J2RpcmVjdGlvbic6ICdydGwnfV0sICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRleHQgZGlyZWN0aW9uXHJcblxyXG4gICAgICAgIFt7J3NpemUnOiBbJ3NtYWxsJywgZmFsc2UsICdsYXJnZScsICdodWdlJ119XSwgIC8vIGN1c3RvbSBkcm9wZG93blxyXG4gICAgICAgIFt7J2hlYWRlcic6IFsxLCAyLCAzLCA0LCA1LCA2LCBmYWxzZV19XSxcclxuXHJcbiAgICAgICAgW3snY29sb3InOiBbXX0sIHsnYmFja2dyb3VuZCc6IFtdfV0sICAgICAgICAgIC8vIGRyb3Bkb3duIHdpdGggZGVmYXVsdHMgZnJvbSB0aGVtZVxyXG4gICAgICAgIFt7J2ZvbnQnOiBbXX1dLFxyXG4gICAgICAgIFt7J2FsaWduJzogW119XSxcclxuXHJcbiAgICAgICAgWydjbGVhbiddLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGZvcm1hdHRpbmcgYnV0dG9uXHJcblxyXG4gICAgICAgIFsnbGluaycsICdpbWFnZScsICd2aWRlbyddICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmsgYW5kIGltYWdlLCB2aWRlb1xyXG4gICAgICBdXHJcbiAgICB9LFxyXG4gICAgbWVudGlvbjoge1xyXG4gICAgICBhbGxvd2VkQ2hhcnM6IC9eW0EtWmEtejAtOVxcc8OFw4TDlsOlw6TDti5fLV0qJC8sXHJcbiAgICAgIG1lbnRpb25EZW5vdGF0aW9uQ2hhcnM6IFsnQCcsICcjJ10sXHJcbiAgICAgIHNvdXJjZTogKHNlYXJjaFRlcm0sIHJlbmRlckxpc3QsIG1lbnRpb25DaGFyKSA9PiB7XHJcbiAgICAgICAgaWYgKCh0aGlzLm1lbnRpb25WYWx1ZXMgJiYgbWVudGlvbkNoYXIgPT09ICdAJykgfHwgKHRoaXMuaGFzaFRhZ1ZhbHVlcyAmJiBtZW50aW9uQ2hhciA9PT0gJyMnKSkge1xyXG4gICAgICAgICAgbGV0IHZhbHVlcztcclxuICAgICAgICAgIGlmIChtZW50aW9uQ2hhciA9PT0gJ0AnKSB7XHJcbiAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMubWVudGlvblZhbHVlcztcclxuICAgICAgICAgIH0gZWxzZSBpZiAobWVudGlvbkNoYXIgPT09ICcjJykge1xyXG4gICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLmhhc2hUYWdWYWx1ZXM7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZXMgPSBbXTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoc2VhcmNoVGVybS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmVuZGVyTGlzdCh2YWx1ZXMsIHNlYXJjaFRlcm0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFtdO1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcbiAgICAgICAgICAgICAgaWYgKH52YWx1ZXNbaV0udmFsdWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaCh2YWx1ZXNbaV0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZW5kZXJMaXN0KG1hdGNoZXMsIHNlYXJjaFRlcm0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICBrZXlib2FyZDoge1xyXG4gICAgICBiaW5kaW5nczoge1xyXG4gICAgICAgIGVudGVyOiB7XHJcbiAgICAgICAgICBrZXk6IDEzLFxyXG4gICAgICAgICAgaGFuZGxlcjogKHJhbmdlLCBjb250ZXh0KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcbiAgQE91dHB1dCgpIHNkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgdGltZXJMb2FkUXVpbGxUb29sYmFyID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQEluamVjdChFRElUT1JfQ09ORklHKSBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbmZpZ3VyYXRpb246IElFZGl0b3JDb25maWd1cmF0aW9uLFxyXG4gICkge1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy4jZm9ybT8uYWRkQ29udHJvbCh0aGlzLiNuYW1lLCB0aGlzLmZvcm1Db250cm9sKTtcclxuXHJcbiAgICBpZiAodGhpcy50b29sYmFyKSB7XHJcbiAgICAgIHRoaXMucXVpbGxDb25maWcudG9vbGJhci5jb250YWluZXIgPSB0aGlzLnRvb2xiYXI7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBhY3Rpb24gb2YgKHRoaXMuY29uZmlndXJhdGlvbj8uYWN0aW9ucyB8fCBbXSkpIHtcclxuICAgICAgaWYgKHRoaXMucXVpbGxDb25maWcudG9vbGJhci5jb250YWluZXIudG9TdHJpbmcoKS5pbmNsdWRlcyhhY3Rpb24ua2V5KSkge1xyXG4gICAgICAgIGNvbnN0IHFsS2V5ID0gYGJ1dHRvbi5xbC0ke2FjdGlvbi5rZXl9YDtcclxuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHFsS2V5KSkge1xyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihxbEtleSkuaW5uZXJIVE1MID0gYWN0aW9uLmljb247XHJcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbUFjdGlvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocWxLZXkpO1xyXG4gICAgICAgICAgICBpZiAoY3VzdG9tQWN0aW9uLmdldEF0dHJpYnV0ZSgnbGlzdGVuZXInKSAhPT0gJzEnKSB7XHJcbiAgICAgICAgICAgICAgY3VzdG9tQWN0aW9uLnNldEF0dHJpYnV0ZSgnbGlzdGVuZXInLCAnMScpO1xyXG4gICAgICAgICAgICAgIGlmIChhY3Rpb24udG9vbHRpcCkge1xyXG4gICAgICAgICAgICAgICAgY3VzdG9tQWN0aW9uLnNldEF0dHJpYnV0ZSgndGl0bGUnLCBhY3Rpb24udG9vbHRpcCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGN1c3RvbUFjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdxdWlsbFJhbmdlJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZS5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50OyAvLyBM4bqleSBlbGVtZW50IGPhu6dhIGFjdGlvbiDEkcaw4bujYyBjbGlja1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG9vbGJhciA9IGVsZW1lbnQuY2xvc2VzdCgnLnFsLWZvcm1hdHMnKS5jbG9zZXN0KCcucWwtdG9vbGJhcicpOyAvLyBM4bqleSB0b29sYmFyIGVsZW1lbnRcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdG9vbGJhci5jbG9zZXN0KCdxdWlsbC1lZGl0b3InKS5pZDsgLy8gTOG6pXkgaWQgY+G7p2EgZWRpdG9yIMSR4buDIHBo4bulYyB24bulIGxvYWRpbmdcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvYWRpbmdJZCA9IGAjYm94LSR7aWR9YDsgLy8gaWQgY+G7p2EgZWRpdG9yO1xyXG4gICAgICAgICAgICAgICAgYWN0aW9uLmNsaWNrKGUsIHtcclxuICAgICAgICAgICAgICAgICAgcWxLZXksXHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgIGxvYWRpbmdJZCxcclxuICAgICAgICAgICAgICAgICAgY3Vyc29yUG9zaXRpb246IEpTT04ucGFyc2UoY3Vyc29yUG9zaXRpb24pLFxyXG4gICAgICAgICAgICAgICAgICBxdWlsbDogdGhpcy4jcXVpbGwsXHJcbiAgICAgICAgICAgICAgICAgIGFyZ3M6IHRoaXMuYXJnc1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmICh0aGlzLnF1aWxsQ29uZmlnLnRvb2xiYXIuY29udGFpbmVyLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ2N1c3RvbUZpbGUnKSkge1xyXG4gICAgLy8gICB0aGlzLnRpbWVyTG9hZFF1aWxsVG9vbGJhciA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgIC8vICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYnV0dG9uLnFsLWN1c3RvbUZpbGUnKSkge1xyXG4gICAgLy8gICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyTG9hZFF1aWxsVG9vbGJhcik7XHJcbiAgICAvLyAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdidXR0b24ucWwtY3VzdG9tRmlsZScpLmlubmVySFRNTCA9IHRoaXMuY3VzdG9tQnV0dG9uRmlsZVNWRztcclxuICAgIC8vICAgICAgIGNvbnN0IGN1c3RvbUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbi5xbC1jdXN0b21GaWxlJyk7XHJcbiAgICAvLyAgICAgICBpZiAoY3VzdG9tQnV0dG9uLmdldEF0dHJpYnV0ZSgnbGlzdGVuZXInKSAhPT0gJzEnKSB7XHJcbiAgICAvLyAgICAgICAgIGN1c3RvbUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2xpc3RlbmVyJywgJzEnKTtcclxuICAgIC8vICAgICAgICAgY3VzdG9tQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jdXN0b21GaWxlSGFuZGxlcik7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9LCAxMDAwKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIC8vIGN1c3RvbUZpbGVIYW5kbGVyID0gKGUpID0+IHtcclxuICAvLyAgIGNvbnN0IGN1c3RvbUJ1dHRvbiA9IGUuY3VycmVudFRhcmdldDtcclxuICAvLyAgIGNvbnN0IHF1aWxsVG9vbGJhciA9IGN1c3RvbUJ1dHRvbi5jbG9zZXN0KCcucWwtZm9ybWF0cycpLmNsb3Nlc3QoJy5xbC10b29sYmFyJyk7XHJcbiAgLy8gICBjb25zdCBxdWlsbEJveCA9IHF1aWxsVG9vbGJhci5jbG9zZXN0KCcucWwtZm9ybWF0cycpXHJcbiAgLy8gICBsZXQgZmlsZUlucHV0OiBIVE1MSW5wdXRFbGVtZW50ID0gcXVpbGxUb29sYmFyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LnFsLWN1c3RvbUZpbGVbdHlwZT1maWxlXScpO1xyXG4gIC8vICAgaWYgKGZpbGVJbnB1dCA9PSBudWxsKSB7XHJcbiAgLy8gICAgIGZpbGVJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XHJcbiAgLy8gICAgIGZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCBDb25zdGFudHMuRklMRSk7XHJcbiAgLy8gICAgIGZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FjY2VwdCcsICcqJyk7XHJcbiAgLy8gICAgIGZpbGVJbnB1dC5jbGFzc0xpc3QuYWRkKCdxbC1jdXN0b21GaWxlJyk7XHJcbiAgLy8gICAgIGZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XHJcbiAgLy8gICAgICAgY29uc3QgZmlsZXMgPSBmaWxlSW5wdXQuZmlsZXM7XHJcbiAgLy8gICAgICAgaWYgKCFmaWxlcyB8fCAhZmlsZXMubGVuZ3RoKSB7XHJcbiAgLy8gICAgICAgICByZXR1cm47XHJcbiAgLy8gICAgICAgfVxyXG5cclxuICAvLyAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gIC8vICAgICAgIGZvcm1EYXRhLmFwcGVuZChDb25zdGFudHMuRklMRSwgZmlsZXNbMF0pO1xyXG4gIC8vICAgICAgIGxldCByYW5nZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdxdWlsbFJhbmdlJyk7XHJcbiAgLy8gICAgICAgaWYgKHJhbmdlKSB7XHJcbiAgLy8gICAgICAgICByYW5nZSA9IEpTT04ucGFyc2UocmFuZ2UpO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICB0aGlzLnF1aWxsRXZlbnQuZW5hYmxlKGZhbHNlKTtcclxuICAvLyAgICAgICB0aGlzLiN1cGxvYWRGaWxlKGZvcm1EYXRhLCB0aGlzLnF1aWxsRXZlbnQsIHJhbmdlLCBmaWxlSW5wdXQsIHF1aWxsVG9vbGJhci5jbG9zZXN0KCdxdWlsbC1lZGl0b3InKS5pZCk7XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vICAgICBxdWlsbFRvb2xiYXIuYXBwZW5kQ2hpbGQoZmlsZUlucHV0KTtcclxuICAvLyAgIH1cclxuICAvLyAgIGZpbGVJbnB1dC5jbGljaygpO1xyXG4gIC8vIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodmFsKTtcclxuICAgICAgdGhpcy5zZENoYW5nZS5lbWl0KHZhbCk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuI2Zvcm0/LnJlbW92ZUNvbnRyb2wodGhpcy4jbmFtZSk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gICN1cGRhdGVWYWxpZGF0b3IgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5jbGVhckFzeW5jVmFsaWRhdG9ycygpO1xyXG4gICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubWlubGVuZ3RoID4gMCkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5taW5sZW5ndGgpKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1heGxlbmd0aCA+IDApIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4bGVuZ3RoKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuICAjcXVpbGw6IFF1aWxsO1xyXG4gIGVkaXRvckluaXQgPSAocXVpbGw6IFF1aWxsKSA9PiB7XHJcbiAgICB0aGlzLiNxdWlsbCA9IHF1aWxsO1xyXG4gICAgdGhpcy5xdWlsbEV2ZW50ID0gcXVpbGw7XHJcbiAgICAvLyBjb25zdCB0eHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgIC8vIHR4dEFyZWEuc3R5bGUuY3NzVGV4dCA9XHJcbiAgICAvLyAgICd3aWR0aDogMTAwJTttYXJnaW46IDBweDtiYWNrZ3JvdW5kOiByZ2IoMjksIDI5LCAyOSk7JyArXHJcbiAgICAvLyAgICdib3gtc2l6aW5nOiBib3JkZXItYm94O2NvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7JyArXHJcbiAgICAvLyAgICdmb250LXNpemU6IDE1cHg7b3V0bGluZTogbm9uZTtwYWRkaW5nOiAyMHB4OycgK1xyXG4gICAgLy8gICAnbGluZS1oZWlnaHQ6IDI0cHg7Zm9udC1mYW1pbHk6IENvbnNvbGFzLCBNZW5sbywgTW9uYWNvLCAmcXVvdDtDb3VyaWVyIE5ldyZxdW90OywgbW9ub3NwYWNlOycgK1xyXG4gICAgLy8gICAncG9zaXRpb246IGFic29sdXRlO3RvcDogMDtib3R0b206IDA7Ym9yZGVyOiBub25lO2Rpc3BsYXk6bm9uZSc7XHJcblxyXG4gICAgLy8gY29uc3QgaHRtbEVkaXRvciA9IHF1aWxsLmFkZENvbnRhaW5lcigncWwtY3VzdG9tJyk7XHJcbiAgICAvLyBodG1sRWRpdG9yLmFwcGVuZENoaWxkKHR4dEFyZWEpO1xyXG5cclxuICAgIC8vIGNvbnN0IG15RWRpdG9yID0gcXVpbGwuY29udGFpbmVyO1xyXG4gICAgLy8gcXVpbGwub24oJ3RleHQtY2hhbmdlJywgKGRlbHRhLCBvbGREZWx0YSwgc291cmNlKSA9PiB7XHJcbiAgICAvLyAgIGNvbnN0IGh0bWwgPSBteUVkaXRvci5jaGlsZHJlblswXS5pbm5lckhUTUw7XHJcbiAgICAvLyAgIHR4dEFyZWEudmFsdWUgPSBodG1sO1xyXG4gICAgLy8gICAvLyBpZiAocXVpbGwuZ2V0TGVuZ3RoKCkgPiB0aGlzLm1heGxlbmd0aCkge1xyXG4gICAgLy8gICAvLyAgIHF1aWxsLmRlbGV0ZVRleHQodGhpcy5tYXhsZW5ndGgsIHF1aWxsLmdldExlbmd0aCgpKTtcclxuICAgIC8vICAgLy8gfVxyXG4gICAgLy8gICAvLyB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGh0bWwpO1xyXG4gICAgLy8gfSk7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgIHRoaXMuI2luaXRVcGxvYWRJbWFnZShxdWlsbCk7XHJcbiAgICAvLyB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAvLyAgIHF1aWxsLmdldE1vZHVsZSgndG9vbGJhcicpLmFkZEhhbmRsZXIoJ2ltYWdlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gICAgIGxldCBmaWxlSW5wdXQgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dC5xbC1pbWFnZVt0eXBlPWZpbGVdJyk7XHJcblxyXG4gICAgLy8gICAgIGlmIChmaWxlSW5wdXQgPT0gbnVsbCkge1xyXG4gICAgLy8gICAgICAgZmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuICAgIC8vICAgICAgIGZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCBDb25zdGFudHMuRklMRSk7XHJcbiAgICAvLyAgICAgICBmaWxlSW5wdXQuc2V0QXR0cmlidXRlKCdhY2NlcHQnLCAnaW1hZ2UvcG5nLCBpbWFnZS9naWYsIGltYWdlL2pwZWcsIGltYWdlL2JtcCwgaW1hZ2UveC1pY29uJyk7XHJcbiAgICAvLyAgICAgICBmaWxlSW5wdXQuY2xhc3NMaXN0LmFkZCgncWwtaW1hZ2UnKTtcclxuICAgIC8vICAgICAgIGZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGZpbGVzID0gZmlsZUlucHV0LmZpbGVzO1xyXG4gICAgLy8gICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMucXVpbGwuZ2V0U2VsZWN0aW9uKHRydWUpO1xyXG4gICAgLy8gICAgICAgICBpZiAoIWZpbGVzIHx8ICFmaWxlcy5sZW5ndGgpIHtcclxuICAgIC8vICAgICAgICAgICByZXR1cm47XHJcbiAgICAvLyAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAvLyAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChDb25zdGFudHMuRklMRSwgZmlsZXNbMF0pO1xyXG5cclxuICAgIC8vICAgICAgICAgdGhpcy5xdWlsbC5lbmFibGUoZmFsc2UpO1xyXG5cclxuICAgIC8vICAgICAgICAgc2VsZi4jdXBsb2FkSW1hZ2UoZm9ybURhdGEsIHF1aWxsLCByYW5nZSwgZmlsZUlucHV0KTtcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoZmlsZUlucHV0KTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgZmlsZUlucHV0LmNsaWNrKCk7XHJcbiAgICAvLyAgIH0pO1xyXG5cclxuICAgIC8vIH0pO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAjaW5pdFVwbG9hZEltYWdlID0gKHF1aWxsOiBRdWlsbCkgPT4ge1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgIHF1aWxsLmdldE1vZHVsZSgndG9vbGJhcicpLmFkZEhhbmRsZXIoJ2ltYWdlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCBmaWxlSW5wdXQgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dC5xbC1pbWFnZVt0eXBlPWZpbGVdJyk7XHJcbiAgICAgICAgaWYgKGZpbGVJbnB1dCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBmaWxlSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gICAgICAgICAgZmlsZUlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsIENvbnN0YW50cy5GSUxFKTtcclxuICAgICAgICAgIGZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FjY2VwdCcsICdpbWFnZS9wbmcsIGltYWdlL2dpZiwgaW1hZ2UvanBlZywgaW1hZ2UvYm1wLCBpbWFnZS94LWljb24nKTtcclxuICAgICAgICAgIGZpbGVJbnB1dC5jbGFzc0xpc3QuYWRkKCdxbC1pbWFnZScpO1xyXG4gICAgICAgICAgZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBmaWxlSW5wdXQuZmlsZXM7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24odHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmICghZmlsZXMgfHwgIWZpbGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoQ29uc3RhbnRzLkZJTEUsIGZpbGVzWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5xdWlsbC5lbmFibGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAvLyBzZWxmLiN1cGxvYWRJbWFnZShmb3JtRGF0YSwgcXVpbGwsIHJhbmdlLCBmaWxlSW5wdXQpO1xyXG4gICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24/LnVwbG9hZEltYWdlKGZvcm1EYXRhLCBzZWxmLmFyZ3MpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgICBzZWxmLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBxdWlsbC5lbmFibGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBxdWlsbC5lZGl0b3IuaW5zZXJ0RW1iZWQocmFuZ2UuaW5kZXgsICdpbWFnZScsIHJlc3A/LmRhdGE/LmltYWdlVXJsIHx8IHJlc3A/LmRhdGE/LnB1Ymxpc2hfdXJsIHx8IHJlc3A/LnVybCB8fCAnJyk7XHJcbiAgICAgICAgICAgICAgICBxdWlsbC5nZXRNb2R1bGUoJ2NsaXBib2FyZCcpLmRhbmdlcm91c2x5UGFzdGVIVE1MKHJhbmdlLmluZGV4LCAnPGEgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIicgKyAodXJsIHx8ICcnKVxyXG4gICAgICAgICAgICAgICAgICArICdcIj48aW1nIHNyYz1cIicgKyAodXJsIHx8ICcnKSArICdcIiBhbHQ9XCJjLWltYWdlLWVkaXRvci1xdWlsbFwiPjwvYT4nLCAndXNlcicpO1xyXG4gICAgICAgICAgICAgICAgLy8gcXVpbGwuaW5zZXJ0VGV4dCgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHF1aWxsLmdldENvbnRlbnRzKCk7XHJcbiAgICAgICAgICAgICAgICBxdWlsbC5zZXRDb250ZW50cyhjb250ZW50KTtcclxuICAgICAgICAgICAgICAgIHF1aWxsLnNldFNlbGVjdGlvbihyYW5nZS5pbmRleCArIDEsICd1c2VyJyk7XHJcbiAgICAgICAgICAgICAgICBmaWxlSW5wdXQudmFsdWUgPSAnJztcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGZpbGVJbnB1dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbGVJbnB1dC5jbGljaygpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uTW9kZWxDaGFuZ2UgPSAodmFsOiBzdHJpbmcpID0+IHtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsKTtcclxuICAgIHRoaXMubW9kZWxIVE1MID0gdmFsO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrU2hvd0h0bWxFZGl0b3IgPSAoKSA9PiB7XHJcbiAgICB0aGlzLnNob3dIdG1sRWRpdG9yID0gIXRoaXMuc2hvd0h0bWxFZGl0b3I7XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIC8vICN1cGxvYWRJbWFnZSA9IChmb3JtRGF0YSwgcXVpbGwsIHJhbmdlLCBmaWxlSW5wdXQpID0+IHtcclxuICAvLyAgIGlmICghdGhpcy51cmxVcGxvYWRJbWFnZSkge1xyXG4gIC8vICAgICB0aGlzLnVybFVwbG9hZEltYWdlID0gJy9wYXJ0bmVyL3YyL21lcmNoYW5kaXNlL2ZpbGUvdXBsb2FkdXNlcmZpbGUnO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgLy8gdGhpcy5kb21haW4gPSAnaHR0cHM6Ly9hcGktY29tbWVyY2UtcWMudmluaWQuZGV2JztcclxuICAvLyAgIHRoaXMuc2RBcGlTZXJ2aWNlLnBvc3QodGhpcy51cmxVcGxvYWRJbWFnZSwgZm9ybURhdGEpLnRoZW4oKHJlc3A6IGFueSkgPT4ge1xyXG4gIC8vICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgLy8gICAgICAgcXVpbGwuZW5hYmxlKHRydWUpO1xyXG4gIC8vICAgICAgIC8vIHF1aWxsLmVkaXRvci5pbnNlcnRFbWJlZChyYW5nZS5pbmRleCwgJ2ltYWdlJywgcmVzcD8uZGF0YT8uaW1hZ2VVcmwgfHwgcmVzcD8uZGF0YT8ucHVibGlzaF91cmwgfHwgcmVzcD8udXJsIHx8ICcnKTtcclxuICAvLyAgICAgICBxdWlsbC5nZXRNb2R1bGUoJ2NsaXBib2FyZCcpLmRhbmdlcm91c2x5UGFzdGVIVE1MKHJhbmdlLmluZGV4LCAnPGEgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIicgKyAocmVzcD8uZGF0YT8uaW1hZ2VVcmwgfHwgcmVzcD8uZGF0YT8ucHVibGlzaF91cmwgfHwgcmVzcD8udXJsIHx8ICcnKVxyXG4gIC8vICAgICAgICAgKyAnXCI+PGltZyBzcmM9XCInICsgKHJlc3A/LmRhdGE/LmltYWdlVXJsIHx8IHJlc3A/LmRhdGE/LnB1Ymxpc2hfdXJsIHx8IHJlc3A/LnVybCB8fCAnJykgKyAnXCIgYWx0PVwiYy1pbWFnZS1lZGl0b3ItcXVpbGxcIj48L2E+JywgJ3VzZXInKTtcclxuICAvLyAgICAgICAvLyBxdWlsbC5pbnNlcnRUZXh0KCk7XHJcbiAgLy8gICAgICAgY29uc3QgY29udGVudCA9IHF1aWxsLmdldENvbnRlbnRzKCk7XHJcbiAgLy8gICAgICAgcXVpbGwuc2V0Q29udGVudHMoY29udGVudCk7XHJcbiAgLy8gICAgICAgcXVpbGwuc2V0U2VsZWN0aW9uKHJhbmdlLmluZGV4ICsgMSwgJ3VzZXInKTtcclxuICAvLyAgICAgICBmaWxlSW5wdXQudmFsdWUgPSAnJztcclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gI3VwbG9hZEZpbGUgPSAoZm9ybURhdGEsIHF1aWxsLCByYW5nZSwgZmlsZUlucHV0LCBsb2FkaW5nSUQpID0+IHtcclxuICAvLyAgIGlmICghdGhpcy51cmxVcGxvYWRGaWxlKSB7XHJcbiAgLy8gICAgIHRoaXMudXJsVXBsb2FkRmlsZSA9ICcvcGFydG5lci92Mi9tZXJjaGFuZGlzZS9maWxlL3VwbG9hZHVzZXJmaWxlJztcclxuICAvLyAgIH1cclxuICAvLyAgIC8vIHRoaXMuZG9tYWluID0gJ2h0dHBzOi8vYXBpLWNvbW1lcmNlLXFjLnZpbmlkLmRldic7XHJcbiAgLy8gICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0YXJ0KCcjYm94LScgKyBsb2FkaW5nSUQpO1xyXG4gIC8vICAgdGhpcy5zZEFwaVNlcnZpY2UucG9zdCh0aGlzLnVybFVwbG9hZEZpbGUsIGZvcm1EYXRhKS50aGVuKChyZXNwOiBhbnkpID0+IHtcclxuICAvLyAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gIC8vICAgICAgIHF1aWxsLmVuYWJsZSh0cnVlKTtcclxuICAvLyAgICAgICAvLyBxdWlsbC5lZGl0b3IuaW5zZXJ0RW1iZWQocmFuZ2UuaW5kZXgsICdpbWFnZScsIHJlc3A/LmRhdGE/LmltYWdlVXJsIHx8IHJlc3A/LmRhdGE/LnB1Ymxpc2hfdXJsIHx8IHJlc3A/LnVybCB8fCAnJyk7XHJcbiAgLy8gICAgICAgcXVpbGwuZ2V0TW9kdWxlKCdjbGlwYm9hcmQnKS5kYW5nZXJvdXNseVBhc3RlSFRNTChyYW5nZS5pbmRleCwgJzxhIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCInICsgKHJlc3A/LmRhdGE/LmltYWdlVXJsIHx8IHJlc3A/LmRhdGE/LnB1Ymxpc2hfdXJsIHx8IHJlc3A/LnVybCB8fCAnJylcclxuICAvLyAgICAgICAgICsgJ1wiPicgKyAocmVzcD8uZGF0YT8uaW1hZ2VVcmwgfHwgcmVzcD8uZGF0YT8ucHVibGlzaF91cmwgfHwgcmVzcD8udXJsIHx8ICcnKSArICc8L2E+JywgJ3VzZXInKTtcclxuICAvLyAgICAgICAvLyBxdWlsbC5pbnNlcnRUZXh0KCk7XHJcbiAgLy8gICAgICAgY29uc3QgY29udGVudCA9IHF1aWxsLmdldENvbnRlbnRzKCk7XHJcbiAgLy8gICAgICAgcXVpbGwuc2V0Q29udGVudHMoY29udGVudCk7XHJcbiAgLy8gICAgICAgcXVpbGwuc2V0U2VsZWN0aW9uKHJhbmdlLmluZGV4ICsgMSwgJ3VzZXInKTtcclxuICAvLyAgICAgICBmaWxlSW5wdXQudmFsdWUgPSAnJztcclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RvcCgnI2JveC0nICsgbG9hZGluZ0lEKTtcclxuICAvLyAgIH0pLmNhdGNoKChlcikgPT4ge1xyXG4gIC8vICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3AoJyNib3gtJyArIGxvYWRpbmdJRCk7XHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIC8vIH1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2VkKGU6IFNlbGVjdGlvbkNoYW5nZSkge1xyXG4gICAgLy8gbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3F1aWxsUmFuZ2UnLCBlLnJhbmdlID8gSlNPTi5zdHJpbmdpZnkoZS5yYW5nZSkgOiAoZS5vbGRSYW5nZSA/IEpTT04uc3RyaW5naWZ5KGUub2xkUmFuZ2UpIDogbnVsbCkpO1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3F1aWxsUmFuZ2UnLCBlLmVkaXRvci5nZXRTZWxlY3Rpb24oKSA/IEpTT04uc3RyaW5naWZ5KGUuZWRpdG9yLmdldFNlbGVjdGlvbigpKSA6IG51bGwpO1xyXG4gIH1cclxuXHJcbiAgb25Db250ZW50Q2hhbmdlZChlOiBDb250ZW50Q2hhbmdlKSB7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncXVpbGxSYW5nZScsIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgaW5kZXg6IChlLmVkaXRvci5nZXRMZW5ndGgoKSA/IGUuZWRpdG9yLmdldExlbmd0aCgpIC0gMSA6IDApLFxyXG4gICAgICBsZW5ndGg6IDBcclxuICAgIH0pKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,3 +1,3 @@
1
- import { InjectionToken } from "@angular/core";
1
+ import { InjectionToken } from '@angular/core';
2
2
  export const EDITOR_CONFIG = new InjectionToken('editor.configuration');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9lZGl0b3IvIiwic291cmNlcyI6WyJzcmMvbGliL2VkaXRvci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBc0IvQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxjQUFjLENBQXVCLHNCQUFzQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCBRdWlsbCBmcm9tIFwicXVpbGxcIjtcclxuZXhwb3J0IGludGVyZmFjZSBTZEVkaXRvckFjdGlvbiB7XHJcbiAga2V5OiBzdHJpbmc7XHJcbiAgaWNvbjogc3RyaW5nO1xyXG4gIGNsaWNrOiAoZXZlbnQ6IGFueSwgYXJnczogU2RFZGl0b3JBY3Rpb25BcmdzKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgU2RFZGl0b3JBY3Rpb25BcmdzIHtcclxuICBxbEtleTogc3RyaW5nO1xyXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xyXG4gIHF1aWxsOiBRdWlsbDtcclxuICBjdXJzb3JQb3NpdGlvbjoge1xyXG4gICAgaW5kZXg6IG51bWJlcjtcclxuICAgIGxlbmd0aDogbnVtYmVyO1xyXG4gIH0sXHJcbiAgYXJncz86IGFueVxyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSUVkaXRvckNvbmZpZ3VyYXRpb24ge1xyXG4gIHVwbG9hZEltYWdlPzogKGZvcm1EYXRhOiBGb3JtRGF0YSwgYXJncz86IGFueSkgPT4gUHJvbWlzZTxzdHJpbmc+O1xyXG4gIGFjdGlvbnM/OiBTZEVkaXRvckFjdGlvbltdO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgRURJVE9SX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJRWRpdG9yQ29uZmlndXJhdGlvbj4oJ2VkaXRvci5jb25maWd1cmF0aW9uJyk7Il19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9lZGl0b3IvIiwic291cmNlcyI6WyJzcmMvbGliL2VkaXRvci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBd0IvQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxjQUFjLENBQXVCLHNCQUFzQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgUXVpbGwgZnJvbSAncXVpbGwnO1xyXG5leHBvcnQgaW50ZXJmYWNlIFNkRWRpdG9yQWN0aW9uIHtcclxuICBrZXk6IHN0cmluZztcclxuICBpY29uOiBzdHJpbmc7XHJcbiAgdG9vbHRpcDogc3RyaW5nO1xyXG4gIGNsaWNrOiAoZXZlbnQ6IGFueSwgYXJnczogU2RFZGl0b3JBY3Rpb25BcmdzKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIFNkRWRpdG9yQWN0aW9uQXJncyB7XHJcbiAgcWxLZXk6IHN0cmluZztcclxuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICBsb2FkaW5nSWQ6IHN0cmluZztcclxuICBxdWlsbDogUXVpbGw7XHJcbiAgY3Vyc29yUG9zaXRpb246IHtcclxuICAgIGluZGV4OiBudW1iZXI7XHJcbiAgICBsZW5ndGg6IG51bWJlcjtcclxuICB9O1xyXG4gIGFyZ3M/OiBhbnk7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJRWRpdG9yQ29uZmlndXJhdGlvbiB7XHJcbiAgdXBsb2FkSW1hZ2U/OiAoZm9ybURhdGE6IEZvcm1EYXRhLCBhcmdzPzogYW55KSA9PiBQcm9taXNlPHN0cmluZz47XHJcbiAgYWN0aW9ucz86IFNkRWRpdG9yQWN0aW9uW107XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBFRElUT1JfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPElFZGl0b3JDb25maWd1cmF0aW9uPignZWRpdG9yLmNvbmZpZ3VyYXRpb24nKTtcclxuIl19
@@ -59,7 +59,7 @@ export class SdPopupExport {
59
59
  if (!column) {
60
60
  return first;
61
61
  }
62
- if (column.type !== 'children') {
62
+ if (column.type !== 'children' && column.type !== 'children-col') {
63
63
  return [...first, column];
64
64
  }
65
65
  const children = column.children.filter(e1 => e1.type !== 'image');
@@ -342,4 +342,4 @@ SdPopupExport.propDecorators = {
342
342
  _gridOption: [{ type: Input, args: ['gridOption',] }],
343
343
  configuration: [{ type: Input }]
344
344
  };
345
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXAtZXhwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvZ3JpZC1tYXRlcmlhbC8iLCJzb3VyY2VzIjpbInNyYy9saWIvY29tcG9uZW50cy9wb3B1cC1leHBvcnQvcG9wdXAtZXhwb3J0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXlCLFNBQVMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUlySixPQUFPLEVBQ0wsZUFBZSxFQUNoQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDakIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ25CLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBSS9CLE9BQU8sRUFBZ0IsZUFBZSxFQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBRXhGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVUzQyxNQUFNLE9BQU8sYUFBYTtJQTJGeEIsWUFDVSxHQUFzQixFQUN0QixjQUFnQyxFQUNoQyxhQUE4QixFQUM5QixhQUE4QixFQUM5QixnQkFBb0M7UUFKcEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsbUJBQWMsR0FBZCxjQUFjLENBQWtCO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFpQjtRQUM5QixrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQTlGOUMsWUFBTyxHQUFxQixFQUFFLENBQUM7UUFDL0IsV0FBTSxHQUFvQixFQUFFLENBQUM7UUFFN0IsbUJBQWMs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LFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVztZQUMxQixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7U0FDZixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUF3QkQsUUFBUTtJQUNSLENBQUM7SUFFRCxlQUFlO0lBQ2YsQ0FBQzs7OztZQTdHRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IseXpMQUE0QztnQkFFNUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2hEOzs7WUE5QmtGLGlCQUFpQjtZQVNsRyxnQkFBZ0I7WUFVSyxlQUFlO1lBZHBDLGVBQWU7WUFRZixrQkFBa0I7OztvQkF3QmpCLFNBQVMsU0FBQyxPQUFPO3lCQUNqQixTQUFTLFNBQUMsWUFBWTtxQkFRdEIsTUFBTTswQkFHTixLQUFLLFNBQUMsWUFBWTs0QkFLbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZE5vdGlmeVNlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL25vdGlmeSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkTG9hZGluZ1NlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2xvYWRpbmcnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZFRyYW5zbGF0ZVNlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL3RyYW5zbGF0ZSc7XHJcbmltcG9ydCBoYXNoIGZyb20gJ29iamVjdC1oYXNoJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0aW9uTGlzdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xyXG5pbXBvcnQgeyBTZEdyaWRNYXRlcmlhbE9wdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFNkTW9kYWwgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL21vZGFsJztcclxuaW1wb3J0IHsgU2RFeHBvcnRGaWxlLCBTZEV4cG9ydFNlcnZpY2UsIFNkRXhwb3J0Q29sdW1uIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9leHBvcnQnO1xyXG5pbXBvcnQgeyBTZEdyb3VwRXhwb3J0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtZXhwb3J0Lm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTZEdyaWRDb25maWd1cmF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgU2RHcmlkTWF0ZXJpYWxDb2x1bW4gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1jb2x1bW4ubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC1wb3B1cC1leHBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wb3B1cC1leHBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3BvcHVwLWV4cG9ydC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZFBvcHVwRXhwb3J0IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBncmlkT3B0aW9uOiBTZEdyaWRNYXRlcmlhbE9wdGlvbjtcclxuICBjb2x1bW5zOiBTZEV4cG9ydENvbHVtbltdID0gW107XHJcbiAgZ3JvdXBzOiBTZEdyb3VwRXhwb3J0W10gPSBbXTtcclxuICB0ZW1wbGF0ZU5hbWU6IHN0cmluZztcclxuICBlbmFibGVDcmVhdGluZyA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ21vZGFsJykgbW9kYWw6IFNkTW9kYWw7XHJcbiAgQFZpZXdDaGlsZCgnbGlzdEdyb3VwcycpIGxpc3RHcm91cHM6IE1hdFNlbGVjdGlvbkxpc3Q7XHJcblxyXG4gIHNlbGVjdGVkOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBib29sZWFuXHJcbiAgfSA9IHt9O1xyXG4gIGZpbGVzOiBTZEV4cG9ydEZpbGVbXSA9IFtdO1xyXG4gIHNlbGVjdGVkR3JvdXA6IFNkR3JvdXBFeHBvcnQ7XHJcblxyXG4gIEBPdXRwdXQoKSBleHBvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZmlsZTogU2RFeHBvcnRGaWxlLCBjb2x1bW5zOiBTZEV4cG9ydENvbHVtbltdLCBpc0NTVj86IGJvb2xlYW4sIGlzUmF3PzogYm9vbGVhbiB9PigpO1xyXG4gIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgQElucHV0KCdncmlkT3B0aW9uJykgc2V0IF9ncmlkT3B0aW9uKG9wdGlvbjogU2RHcmlkTWF0ZXJpYWxPcHRpb24pIHtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbiA9IG9wdGlvbjtcclxuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuI2dldEV4cG9ydGFibGVDb2x1bW5zKCk7XHJcbiAgICB0aGlzLmdyb3VwcyA9IHRoaXMuI2dldEV4cG9ydGFibGVHcm91cHMoKTtcclxuICB9XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbjogU2RHcmlkQ29uZmlndXJhdGlvblJlc3VsdDtcclxuICBwcml2YXRlIGdldCBrZXkoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHByZWZpeCA9ICc5Mzg4OWU3OC1mOTcxLTRhMWQtOGM3My1mZTIzMjFhZjkyMzMnO1xyXG4gICAgaWYgKCF0aGlzLmdyaWRPcHRpb24/LmV4cG9ydD8ua2V5KSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhhc2goe1xyXG4gICAgICBwcmVmaXgsXHJcbiAgICAgIGtleTogdGhpcy5ncmlkT3B0aW9uPy5leHBvcnQ/LmtleVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBncmlkQ29sdW1ucygpIHtcclxuICAgIGNvbnN0IGNvbHVtbnM6IFNkRXhwb3J0Q29sdW1uW10gPSBbXTtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbi5jb2x1bW5zLmZpbHRlcihlID0+ICFlLmV4cG9ydD8uZGlzYWJsZWQpLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuJykge1xyXG4gICAgICAgIGNvbHVtbi5jaGlsZHJlbj8uZmlsdGVyKGUgPT4gIWUuZXhwb3J0Py5kaXNhYmxlZCkuZm9yRWFjaChjaGlsZENvbHVtbiA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hpbGRDb2x1bW4udHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb2x1bW5zLnB1c2goY2hpbGRDb2x1bW4pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGlsZHJlbi1jb2wnKSB7XHJcbiAgICAgICAgY29sdW1uLmNoaWxkcmVuPy5maWx0ZXIoZSA9PiAhZS5leHBvcnQ/LmRpc2FibGVkKS5mb3JFYWNoKGNoaWxkQ29sdW1uID0+IHtcclxuICAgICAgICAgIGlmIChjaGlsZENvbHVtbi50eXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbHVtbnMucHVzaChjaGlsZENvbHVtbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY29sdW1ucy5tYXAoZSA9PiAoe1xyXG4gICAgICBmaWVsZDogZS5maWVsZCxcclxuICAgICAgdGl0bGU6IGUudGl0bGUsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBlLmRlc2NyaXB0aW9uLFxyXG4gICAgICB3aWR0aDogZS53aWR0aFxyXG4gICAgfSkpO1xyXG4gIH1cclxuICBwcml2YXRlIGdldCBhZGRpdGlvbmFsQ29sdW1ucygpIHtcclxuICAgIHJldHVybiAodGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8uY29sdW1ucz8uZmlsdGVyKGUgPT4gIWUuZXhwb3J0Py5kaXNhYmxlZCkgfHwgW10pLm1hcChlID0+ICh7XHJcbiAgICAgIGZpZWxkOiBlLmZpZWxkLFxyXG4gICAgICB0aXRsZTogZS50aXRsZSxcclxuICAgICAgZGVzY3JpcHRpb246IGUuZGVzY3JpcHRpb24sXHJcbiAgICAgIHdpZHRoOiBlLndpZHRoXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAjZ2V0RXhwb3J0YWJsZUNvbHVtbnMgPSAoKTogU2RFeHBvcnRDb2x1bW5bXSA9PiB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMuZ3JpZENvbHVtbnMsIC4uLnRoaXMuYWRkaXRpb25hbENvbHVtbnNdO1xyXG4gIH1cclxuXHJcbiAgI2dldEV4cG9ydGFibGVHcm91cHMgPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5ncmlkT3B0aW9uPy5leHBvcnQ/Lmdyb3Vwcz8uZmlsdGVyKGUgPT4ge1xyXG4gICAgICBjb25zdCBwZXJtaXNzaW9uID0gZS5wZXJtaXNzaW9uO1xyXG4gICAgICBpZiAodHlwZW9mIChwZXJtaXNzaW9uKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHBlcm1pc3Npb247XHJcbiAgICB9KSB8fCBbXTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBsb2FkaW5nU2VydmljZTogU2RMb2FkaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgZXhwb3J0U2VydmljZTogU2RFeHBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZnlTZXJ2aWNlOiBTZE5vdGlmeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFNkVHJhbnNsYXRlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gIH1cclxuXHJcbiAgb3BlbiA9IGFzeW5jICgpID0+IHtcclxuICAgIGlmICghdGhpcy5rZXkpIHtcclxuICAgICAgdGhpcy5leHBvcnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyb3Vwcy5sZW5ndGggPT09IDEgJiYgdGhpcy5ncmlkT3B0aW9uPy5leHBvcnQ/LmhpZGVNeVRlbXBsYXRlcykge1xyXG4gICAgICB0aGlzLmxvYWRGaWxlcyh0aGlzLmdyb3Vwc1swXS5jb2RlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubG9hZEZpbGVzKG51bGwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZCA9IHt9O1xyXG4gICAgdGhpcy5tb2RhbC5vcGVuKCk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAjZ2V0RXhwb3J0Q29sdW1ucyA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgY29uc3QgY29sdW1ucyA9IFsuLi50aGlzLmdyaWRDb2x1bW5zXTtcclxuICAgICAgY29uc3QgeyBmaXJzdENvbHVtbnMsIHNlY29uZENvbHVtbnMgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcclxuICAgICAgY29uc3QgZGlzcGxheUNvbHVtbnM6IFNkR3JpZE1hdGVyaWFsQ29sdW1uPGFueT5bXSA9IFsuLi5maXJzdENvbHVtbnMsIC4uLnNlY29uZENvbHVtbnNdLnJlZHVjZSgoZmlyc3QsIG5leHQpID0+IHtcclxuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdyaWRPcHRpb24uY29sdW1ucy5maW5kKGUgPT4gZS5maWVsZCA9PT0gbmV4dC5maWVsZCk7XHJcbiAgICAgICAgaWYgKCFjb2x1bW4pIHtcclxuICAgICAgICAgIHJldHVybiBmaXJzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlICE9PSAnY2hpbGRyZW4nKSB7XHJcbiAgICAgICAgICByZXR1cm4gWy4uLmZpcnN0LCBjb2x1bW5dO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGNvbHVtbi5jaGlsZHJlbi5maWx0ZXIoZTEgPT4gZTEudHlwZSAhPT0gJ2ltYWdlJyk7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5maXJzdCwgLi4uY2hpbGRyZW5dO1xyXG4gICAgICB9LCBbXSk7XHJcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBkaXNwbGF5Q29sdW1ucy5tYXAoZSA9PiAoe1xyXG4gICAgICAgIC4uLmUsXHJcbiAgICAgICAgZGF0YTogY29sdW1ucy5maW5kKGUxID0+IGUxLmZpZWxkID09PSBlLmZpZWxkKVxyXG4gICAgICB9KSkuZmlsdGVyKGUgPT4gISFlLmRhdGEpXHJcbiAgICAgICAgLm1hcChlID0+IGUuZGF0YSk7XHJcbiAgICAgIHJldHVybiBbLi4ucmVzdWx0cywgLi4udGhpcy5hZGRpdGlvbmFsQ29sdW1uc107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW5zO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0RGVmYXVsdCA9ICgpID0+IHtcclxuICAgIHRoaXMuZXhwb3J0LmVtaXQoe1xyXG4gICAgICBmaWxlOiBudWxsLFxyXG4gICAgICBjb2x1bW5zOiB0aGlzLiNnZXRFeHBvcnRDb2x1bW5zKCksXHJcbiAgICAgIGlzQ1NWOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRDU1YgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmV4cG9ydC5lbWl0KHtcclxuICAgICAgZmlsZTogbnVsbCxcclxuICAgICAgY29sdW1uczogdGhpcy4jZ2V0RXhwb3J0Q29sdW1ucygpLFxyXG4gICAgICBpc0NTVjogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRSYXcgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmV4cG9ydC5lbWl0KHtcclxuICAgICAgZmlsZTogbnVsbCxcclxuICAgICAgY29sdW1uczogdGhpcy4jZ2V0RXhwb3J0Q29sdW1ucygpLFxyXG4gICAgICBpc1JhdzogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkRmlsZXMgPSBhc3luYyAoZ3JvdXA6IHN0cmluZyA9IG51bGwpID0+IHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IHRoaXMuZ3JvdXBzLmZpbmQoZSA9PiBlLmNvZGUgPT09IGdyb3VwKTtcclxuICAgIHRoaXMuZmlsZXMgPSBhd2FpdCB0aGlzLmV4cG9ydFNlcnZpY2UuZmlsZXNJbkZvbGRlcih7XHJcbiAgICAgIGtleTogdGhpcy5rZXksXHJcbiAgICAgIGdyb3VwXHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgI2luaXRUZW1wbGF0ZSA9IGFzeW5jIChmaWxlTmFtZT86IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3Qgc2hlZXRzOiB7XHJcbiAgICAgIG5hbWU6IHN0cmluZyxcclxuICAgICAgaXRlbXM6IGFueVtdLFxyXG4gICAgICBmaWVsZHM6IHN0cmluZ1tdXHJcbiAgICB9W10gPSBbXTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZ3JpZE9wdGlvbj8uZXhwb3J0Py5zaGVldHMpKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgc2hlZXQgb2YgdGhpcy5ncmlkT3B0aW9uLmV4cG9ydC5zaGVldHMpIHtcclxuICAgICAgICBpZiAoc2hlZXQubmFtZSAmJiBzaGVldC5pdGVtcyAmJiBzaGVldC5maWVsZHMpIHtcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNoZWV0Lml0ZW1zKSkge1xyXG4gICAgICAgICAgICBzaGVldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgbmFtZTogc2hlZXQubmFtZSxcclxuICAgICAgICAgICAgICBpdGVtczogc2hlZXQuaXRlbXMsXHJcbiAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzaGVldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgbmFtZTogc2hlZXQubmFtZSxcclxuICAgICAgICAgICAgICBpdGVtczogYXdhaXQgc2hlZXQuaXRlbXMoKSxcclxuICAgICAgICAgICAgICBmaWVsZHM6IHNoZWV0LmZpZWxkc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVUZW1wbGF0ZSh7XHJcbiAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSB8fCB0aGlzLmdyaWRPcHRpb24/LmV4cG9ydD8uZmlsZU5hbWUsXHJcbiAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcclxuICAgICAgc2hlZXRzXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlVGVtcGxhdGUgPSBhc3luYyAoKSA9PiB7XHJcbiAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICBhd2FpdCB0aGlzLiNpbml0VGVtcGxhdGUoKS5maW5hbGx5KHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RvcCk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUFuZFVwbG9hZFRlbXBsYXRlID0gYXN5bmMgKGZpbGVOYW1lPzogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCBzaGVldHM6IHtcclxuICAgICAgbmFtZTogc3RyaW5nLFxyXG4gICAgICBpdGVtczogYW55W10sXHJcbiAgICAgIGZpZWxkczogc3RyaW5nW11cclxuICAgIH1bXSA9IFtdO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5ncmlkT3B0aW9uPy5leHBvcnQ/LnNoZWV0cykpIHtcclxuICAgICAgZm9yIChjb25zdCBzaGVldCBvZiB0aGlzLmdyaWRPcHRpb24/LmV4cG9ydD8uc2hlZXRzKSB7XHJcbiAgICAgICAgaWYgKHNoZWV0Lm5hbWUgJiYgc2hlZXQuaXRlbXMgJiYgc2hlZXQuZmllbGRzKSB7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzaGVldC5pdGVtcykpIHtcclxuICAgICAgICAgICAgc2hlZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgIG5hbWU6IHNoZWV0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgaXRlbXM6IHNoZWV0Lml0ZW1zLFxyXG4gICAgICAgICAgICAgIGZpZWxkczogc2hlZXQuZmllbGRzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2hlZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgIG5hbWU6IHNoZWV0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgaXRlbXM6IGF3YWl0IHNoZWV0Lml0ZW1zKCksXHJcbiAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmdlbmVyYXRlVXBsb2FkVGVtcGxhdGUoe1xyXG4gICAgICBrZXk6IHRoaXMua2V5LFxyXG4gICAgICB0ZW1wbGF0ZToge1xyXG4gICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSB8fCB0aGlzLmdyaWRPcHRpb24/LmV4cG9ydD8uZmlsZU5hbWUsXHJcbiAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zLmZpbHRlcihlID0+IHRoaXMuc2VsZWN0ZWRbZS5maWVsZF0pLFxyXG4gICAgICAgIHNoZWV0c1xyXG4gICAgICB9LFxyXG4gICAgICBncm91cDogdGhpcy5zZWxlY3RlZEdyb3VwPy5jb2RlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uRXhwb3J0ID0gKGZpbGU6IFNkRXhwb3J0RmlsZSkgPT4ge1xyXG4gICAgdGhpcy5leHBvcnQuZW1pdCh7XHJcbiAgICAgIGZpbGUsXHJcbiAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1uc1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRUZW1wbGF0ZSA9IGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IGZpbGUgPSBhd2FpdCB0aGlzLmV4cG9ydFNlcnZpY2UudXBsb2FkVGVtcGxhdGUoe1xyXG4gICAgICBrZXk6IHRoaXMua2V5LFxyXG4gICAgICBncm91cDogdGhpcy5zZWxlY3RlZEdyb3VwPy5jb2RlLFxyXG4gICAgICB2YWxpZGF0b3I6IHRoaXMuZ3JpZE9wdGlvbj8uZXhwb3J0Py52YWxpZGF0b3JzXHJcbiAgICB9KTtcclxuICAgIGlmIChmaWxlKSB7XHJcbiAgICAgIHRoaXMuZmlsZXMgPSBbLi4udGhpcy5maWxlcywgZmlsZV07XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUZpbGUgPSAoZmlsZTogU2RFeHBvcnRGaWxlKSA9PiB7XHJcbiAgICB0aGlzLm5vdGlmeVNlcnZpY2UuY29uZmlybSh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdSZW1vdmUgdGVtcGxhdGUnKSkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5yZW1vdmVGaWxlKHtcclxuICAgICAgICBrZXk6IHRoaXMua2V5LFxyXG4gICAgICAgIGZpbGVOYW1lOiBmaWxlLmZpbGVOYW1lLFxyXG4gICAgICAgIGdyb3VwOiB0aGlzLnNlbGVjdGVkR3JvdXA/LmNvZGUgfHwgbnVsbFxyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgaWR4ID0gdGhpcy5maWxlcy5pbmRleE9mKGZpbGUpO1xyXG4gICAgICB0aGlzLmZpbGVzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICB0aGlzLmZpbGVzID0gWy4uLnRoaXMuZmlsZXNdO1xyXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVRlbXBsYXRlID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgY29uc3QgeyB0cmFuc2xhdGUgfSA9IHRoaXMudHJhbnNsYXRlU2VydmljZTtcclxuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xyXG4gICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuY29sdW1ucy5zb21lKGUgPT4gdGhpcy5zZWxlY3RlZFtlLmZpZWxkXSkpIHtcclxuICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKHRyYW5zbGF0ZSgnUGxlYXNlIHNlbGVjdCBjb2x1bW5zJykpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9IHRoaXMudGVtcGxhdGVOYW1lICsgJy54bHN4JztcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRPcHRpb24/LmV4cG9ydD8udmFsaWRhdG9ycz8uKGZpbGVOYW1lKSkge1xyXG4gICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZyh0aGlzLmdyaWRPcHRpb24/LmV4cG9ydD8udmFsaWRhdG9ycyhmaWxlTmFtZSkpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdlbmVyYXRlQW5kVXBsb2FkVGVtcGxhdGUoZmlsZU5hbWUpO1xyXG4gICAgICBpZiAocmVzdWx0Py5maWxlUGF0aCkge1xyXG4gICAgICAgIGNvbnN0IGZpbGU6IFNkRXhwb3J0RmlsZSA9IHtcclxuICAgICAgICAgIGZpbGVQYXRoOiByZXN1bHQuZmlsZVBhdGgsXHJcbiAgICAgICAgICBmaWxlTmFtZTogcmVzdWx0LmZpbGVOYW1lXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9uRXhwb3J0KGZpbGUpO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVOYW1lID0gbnVsbDtcclxuICAgICAgICB0aGlzLmVuYWJsZUNyZWF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maWxlcyA9IFsuLi50aGlzLmZpbGVzLCBmaWxlXTtcclxuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RvcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VHcm91cCA9ICgpID0+IHtcclxuICAgIHRoaXMubG9hZEZpbGVzKHRoaXMubGlzdEdyb3Vwcz8uc2VsZWN0ZWRPcHRpb25zPy5zZWxlY3RlZFswXT8udmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdG9yVGVtcGxhdGVOYW1lID0gKHZhbDogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCB7IHRyYW5zbGF0ZSB9ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgY29uc3QgcmVnZXggPSAvXltBLVphLXowLTkgX10qW0EtWmEtejAtOV1bQS1aYS16MC05IF9dKiQvO1xyXG4gICAgaWYgKCF2YWwpIHtcclxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnUGxlYXNlIGVudGVyIHlvdXIgdGVtcGxhdGUgbmFtZScpO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbC5sZW5ndGggPiA1MCkge1xyXG4gICAgICByZXR1cm4gdHJhbnNsYXRlKCdUZW1wbGF0ZSBuYW1lIGlzIHRvbyBsb25nJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXJlZ2V4LnRlc3QodmFsKSkge1xyXG4gICAgICByZXR1cm4gdHJhbnNsYXRlKCdUZW1wbGF0ZSBuYW1lIG9ubHkgY29udGFpbnMgbGV0dGVycywgbnVtYmVycyBhbmQgc3BhY2VzJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn1cclxuIl19
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXAtZXhwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvZ3JpZC1tYXRlcmlhbC8iLCJzb3VyY2VzIjpbInNyYy9saWIvY29tcG9uZW50cy9wb3B1cC1leHBvcnQvcG9wdXAtZXhwb3J0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXlCLFNBQVMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUlySixPQUFPLEVBQ0wsZUFBZSxFQUNoQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDakIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ25CLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBSS9CLE9BQU8sRUFBZ0IsZUFBZSxFQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBRXhGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVUzQyxNQUFNLE9BQU8sYUFBYTtJQTJGeEIsWUFDVSxHQUFzQixFQUN0QixjQUFnQyxFQUNoQyxhQUE4QixFQUM5QixhQUE4QixFQUM5QixnQkFBb0M7UUFKcEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsbUJBQWMsR0FBZCxjQUFjLENBQWtCO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFpQjtRQUM5QixrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQTlGOUMsWUFBTyxHQUFxQixFQUFFLENBQUM7UUFDL0IsV0FBTSxHQUFvQixFQUFFLENBQUM7UUFFN0IsbUJBQWMs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LEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztZQUNkLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVztZQUMxQixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7U0FDZixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUF3QkQsUUFBUTtJQUNSLENBQUM7SUFFRCxlQUFlO0lBQ2YsQ0FBQzs7OztZQTdHRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IseXpMQUE0QztnQkFFNUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2hEOzs7WUE5QmtGLGlCQUFpQjtZQVNsRyxnQkFBZ0I7WUFVSyxlQUFlO1lBZHBDLGVBQWU7WUFRZixrQkFBa0I7OztvQkF3QmpCLFNBQVMsU0FBQyxPQUFPO3lCQUNqQixTQUFTLFNBQUMsWUFBWTtxQkFRdEIsTUFBTTswQkFHTixLQUFLLFNBQUMsWUFBWTs0QkFLbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZE5vdGlmeVNlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL25vdGlmeSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkTG9hZGluZ1NlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2xvYWRpbmcnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZFRyYW5zbGF0ZVNlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL3RyYW5zbGF0ZSc7XHJcbmltcG9ydCBoYXNoIGZyb20gJ29iamVjdC1oYXNoJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0aW9uTGlzdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xyXG5pbXBvcnQgeyBTZEdyaWRNYXRlcmlhbE9wdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFNkTW9kYWwgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL21vZGFsJztcclxuaW1wb3J0IHsgU2RFeHBvcnRGaWxlLCBTZEV4cG9ydFNlcnZpY2UsIFNkRXhwb3J0Q29sdW1uIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9leHBvcnQnO1xyXG5pbXBvcnQgeyBTZEdyb3VwRXhwb3J0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtZXhwb3J0Lm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTZEdyaWRDb25maWd1cmF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgU2RHcmlkTWF0ZXJpYWxDb2x1bW4gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1jb2x1bW4ubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC1wb3B1cC1leHBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wb3B1cC1leHBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3BvcHVwLWV4cG9ydC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZFBvcHVwRXhwb3J0IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBncmlkT3B0aW9uOiBTZEdyaWRNYXRlcmlhbE9wdGlvbjtcclxuICBjb2x1bW5zOiBTZEV4cG9ydENvbHVtbltdID0gW107XHJcbiAgZ3JvdXBzOiBTZEdyb3VwRXhwb3J0W10gPSBbXTtcclxuICB0ZW1wbGF0ZU5hbWU6IHN0cmluZztcclxuICBlbmFibGVDcmVhdGluZyA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ21vZGFsJykgbW9kYWw6IFNkTW9kYWw7XHJcbiAgQFZpZXdDaGlsZCgnbGlzdEdyb3VwcycpIGxpc3RHcm91cHM6IE1hdFNlbGVjdGlvbkxpc3Q7XHJcblxyXG4gIHNlbGVjdGVkOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBib29sZWFuXHJcbiAgfSA9IHt9O1xyXG4gIGZpbGVzOiBTZEV4cG9ydEZpbGVbXSA9IFtdO1xyXG4gIHNlbGVjdGVkR3JvdXA6IFNkR3JvdXBFeHBvcnQ7XHJcblxyXG4gIEBPdXRwdXQoKSBleHBvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZmlsZTogU2RFeHBvcnRGaWxlLCBjb2x1bW5zOiBTZEV4cG9ydENvbHVtbltdLCBpc0NTVj86IGJvb2xlYW4sIGlzUmF3PzogYm9vbGVhbiB9PigpO1xyXG4gIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgQElucHV0KCdncmlkT3B0aW9uJykgc2V0IF9ncmlkT3B0aW9uKG9wdGlvbjogU2RHcmlkTWF0ZXJpYWxPcHRpb24pIHtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbiA9IG9wdGlvbjtcclxuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuI2dldEV4cG9ydGFibGVDb2x1bW5zKCk7XHJcbiAgICB0aGlzLmdyb3VwcyA9IHRoaXMuI2dldEV4cG9ydGFibGVHcm91cHMoKTtcclxuICB9XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbjogU2RHcmlkQ29uZmlndXJhdGlvblJlc3VsdDtcclxuICBwcml2YXRlIGdldCBrZXkoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHByZWZpeCA9ICc5Mzg4OWU3OC1mOTcxLTRhMWQtOGM3My1mZTIzMjFhZjkyMzMnO1xyXG4gICAgaWYgKCF0aGlzLmdyaWRPcHRpb24/LmV4cG9ydD8ua2V5KSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhhc2goe1xyXG4gICAgICBwcmVmaXgsXHJcbiAgICAgIGtleTogdGhpcy5ncmlkT3B0aW9uPy5leHBvcnQ/LmtleVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBncmlkQ29sdW1ucygpIHtcclxuICAgIGNvbnN0IGNvbHVtbnM6IFNkRXhwb3J0Q29sdW1uW10gPSBbXTtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbi5jb2x1bW5zLmZpbHRlcihlID0+ICFlLmV4cG9ydD8uZGlzYWJsZWQpLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuJykge1xyXG4gICAgICAgIGNvbHVtbi5jaGlsZHJlbj8uZmlsdGVyKGUgPT4gIWUuZXhwb3J0Py5kaXNhYmxlZCkuZm9yRWFjaChjaGlsZENvbHVtbiA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hpbGRDb2x1bW4udHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb2x1bW5zLnB1c2goY2hpbGRDb2x1bW4pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGlsZHJlbi1jb2wnKSB7XHJcbiAgICAgICAgY29sdW1uLmNoaWxkcmVuPy5maWx0ZXIoZSA9PiAhZS5leHBvcnQ/LmRpc2FibGVkKS5mb3JFYWNoKGNoaWxkQ29sdW1uID0+IHtcclxuICAgICAgICAgIGlmIChjaGlsZENvbHVtbi50eXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbHVtbnMucHVzaChjaGlsZENvbHVtbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY29sdW1ucy5tYXAoZSA9PiAoe1xyXG4gICAgICBmaWVsZDogZS5maWVsZCxcclxuICAgICAgdGl0bGU6IGUudGl0bGUsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBlLmRlc2NyaXB0aW9uLFxyXG4gICAgICB3aWR0aDogZS53aWR0aFxyXG4gICAgfSkpO1xyXG4gIH1cclxuICBwcml2YXRlIGdldCBhZGRpdGlvbmFsQ29sdW1ucygpIHtcclxuICAgIHJldHVybiAodGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8uY29sdW1ucz8uZmlsdGVyKGUgPT4gIWUuZXhwb3J0Py5kaXNhYmxlZCkgfHwgW10pLm1hcChlID0+ICh7XHJcbiAgICAgIGZpZWxkOiBlLmZpZWxkLFxyXG4gICAgICB0aXRsZTogZS50aXRsZSxcclxuICAgICAgZGVzY3JpcHRpb246IGUuZGVzY3JpcHRpb24sXHJcbiAgICAgIHdpZHRoOiBlLndpZHRoXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAjZ2V0RXhwb3J0YWJsZUNvbHVtbnMgPSAoKTogU2RFeHBvcnRDb2x1bW5bXSA9PiB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMuZ3JpZENvbHVtbnMsIC4uLnRoaXMuYWRkaXRpb25hbENvbHVtbnNdO1xyXG4gIH1cclxuXHJcbiAgI2dldEV4cG9ydGFibGVHcm91cHMgPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5ncmlkT3B0aW9uPy5leHBvcnQ/Lmdyb3Vwcz8uZmlsdGVyKGUgPT4ge1xyXG4gICAgICBjb25zdCBwZXJtaXNzaW9uID0gZS5wZXJtaXNzaW9uO1xyXG4gICAgICBpZiAodHlwZW9mIChwZXJtaXNzaW9uKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHBlcm1pc3Npb247XHJcbiAgICB9KSB8fCBbXTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBsb2FkaW5nU2VydmljZTogU2RMb2FkaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgZXhwb3J0U2VydmljZTogU2RFeHBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZnlTZXJ2aWNlOiBTZE5vdGlmeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFNkVHJhbnNsYXRlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gIH1cclxuXHJcbiAgb3BlbiA9IGFzeW5jICgpID0+IHtcclxuICAgIGlmICghdGhpcy5rZXkpIHtcclxuICAgICAgdGhpcy5leHBvcnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyb3Vwcy5sZW5ndGggPT09IDEgJiYgdGhpcy5ncmlkT3B0aW9uPy5leHBvcnQ/LmhpZGVNeVRlbXBsYXRlcykge1xyXG4gICAgICB0aGlzLmxvYWRGaWxlcyh0aGlzLmdyb3Vwc1swXS5jb2RlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubG9hZEZpbGVzKG51bGwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZCA9IHt9O1xyXG4gICAgdGhpcy5tb2RhbC5vcGVuKCk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAjZ2V0RXhwb3J0Q29sdW1ucyA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgY29uc3QgY29sdW1ucyA9IFsuLi50aGlzLmdyaWRDb2x1bW5zXTtcclxuICAgICAgY29uc3QgeyBmaXJzdENvbHVtbnMsIHNlY29uZENvbHVtbnMgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcclxuICAgICAgY29uc3QgZGlzcGxheUNvbHVtbnM6IFNkR3JpZE1hdGVyaWFsQ29sdW1uPGFueT5bXSA9IFsuLi5maXJzdENvbHVtbnMsIC4uLnNlY29uZENvbHVtbnNdLnJlZHVjZSgoZmlyc3QsIG5leHQpID0+IHtcclxuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdyaWRPcHRpb24uY29sdW1ucy5maW5kKGUgPT4gZS5maWVsZCA9PT0gbmV4dC5maWVsZCk7XHJcbiAgICAgICAgaWYgKCFjb2x1bW4pIHtcclxuICAgICAgICAgIHJldHVybiBmaXJzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlICE9PSAnY2hpbGRyZW4nICYmIGNvbHVtbi50eXBlICE9PSAnY2hpbGRyZW4tY29sJykge1xyXG4gICAgICAgICAgcmV0dXJuIFsuLi5maXJzdCwgY29sdW1uXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBjb2x1bW4uY2hpbGRyZW4uZmlsdGVyKGUxID0+IGUxLnR5cGUgIT09ICdpbWFnZScpO1xyXG4gICAgICAgIHJldHVybiBbLi4uZmlyc3QsIC4uLmNoaWxkcmVuXTtcclxuICAgICAgfSwgW10pO1xyXG4gICAgICBjb25zdCByZXN1bHRzID0gZGlzcGxheUNvbHVtbnMubWFwKGUgPT4gKHtcclxuICAgICAgICAuLi5lLFxyXG4gICAgICAgIGRhdGE6IGNvbHVtbnMuZmluZChlMSA9PiBlMS5maWVsZCA9PT0gZS5maWVsZClcclxuICAgICAgfSkpLmZpbHRlcihlID0+ICEhZS5kYXRhKVxyXG4gICAgICAgIC5tYXAoZSA9PiBlLmRhdGEpO1xyXG4gICAgICByZXR1cm4gWy4uLnJlc3VsdHMsIC4uLnRoaXMuYWRkaXRpb25hbENvbHVtbnNdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydERlZmF1bHQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmV4cG9ydC5lbWl0KHtcclxuICAgICAgZmlsZTogbnVsbCxcclxuICAgICAgY29sdW1uczogdGhpcy4jZ2V0RXhwb3J0Q29sdW1ucygpLFxyXG4gICAgICBpc0NTVjogZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0Q1NWID0gKCkgPT4ge1xyXG4gICAgdGhpcy5leHBvcnQuZW1pdCh7XHJcbiAgICAgIGZpbGU6IG51bGwsXHJcbiAgICAgIGNvbHVtbnM6IHRoaXMuI2dldEV4cG9ydENvbHVtbnMoKSxcclxuICAgICAgaXNDU1Y6IHRydWVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0UmF3ID0gKCkgPT4ge1xyXG4gICAgdGhpcy5leHBvcnQuZW1pdCh7XHJcbiAgICAgIGZpbGU6IG51bGwsXHJcbiAgICAgIGNvbHVtbnM6IHRoaXMuI2dldEV4cG9ydENvbHVtbnMoKSxcclxuICAgICAgaXNSYXc6IHRydWVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZEZpbGVzID0gYXN5bmMgKGdyb3VwOiBzdHJpbmcgPSBudWxsKSA9PiB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKGUgPT4gZS5jb2RlID09PSBncm91cCk7XHJcbiAgICB0aGlzLmZpbGVzID0gYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmZpbGVzSW5Gb2xkZXIoe1xyXG4gICAgICBrZXk6IHRoaXMua2V5LFxyXG4gICAgICBncm91cFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gICNpbml0VGVtcGxhdGUgPSBhc3luYyAoZmlsZU5hbWU/OiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IHNoZWV0czoge1xyXG4gICAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICAgIGl0ZW1zOiBhbnlbXSxcclxuICAgICAgZmllbGRzOiBzdHJpbmdbXVxyXG4gICAgfVtdID0gW107XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmdyaWRPcHRpb24/LmV4cG9ydD8uc2hlZXRzKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IHNoZWV0IG9mIHRoaXMuZ3JpZE9wdGlvbi5leHBvcnQuc2hlZXRzKSB7XHJcbiAgICAgICAgaWYgKHNoZWV0Lm5hbWUgJiYgc2hlZXQuaXRlbXMgJiYgc2hlZXQuZmllbGRzKSB7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzaGVldC5pdGVtcykpIHtcclxuICAgICAgICAgICAgc2hlZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgIG5hbWU6IHNoZWV0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgaXRlbXM6IHNoZWV0Lml0ZW1zLFxyXG4gICAgICAgICAgICAgIGZpZWxkczogc2hlZXQuZmllbGRzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2hlZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgIG5hbWU6IHNoZWV0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgaXRlbXM6IGF3YWl0IHNoZWV0Lml0ZW1zKCksXHJcbiAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmdlbmVyYXRlVGVtcGxhdGUoe1xyXG4gICAgICBmaWxlTmFtZTogZmlsZU5hbWUgfHwgdGhpcy5ncmlkT3B0aW9uPy5leHBvcnQ/LmZpbGVOYW1lLFxyXG4gICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMsXHJcbiAgICAgIHNoZWV0c1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVRlbXBsYXRlID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdGFydCgpO1xyXG4gICAgYXdhaXQgdGhpcy4jaW5pdFRlbXBsYXRlKCkuZmluYWxseSh0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3ApO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVBbmRVcGxvYWRUZW1wbGF0ZSA9IGFzeW5jIChmaWxlTmFtZT86IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3Qgc2hlZXRzOiB7XHJcbiAgICAgIG5hbWU6IHN0cmluZyxcclxuICAgICAgaXRlbXM6IGFueVtdLFxyXG4gICAgICBmaWVsZHM6IHN0cmluZ1tdXHJcbiAgICB9W10gPSBbXTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZ3JpZE9wdGlvbj8uZXhwb3J0Py5zaGVldHMpKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgc2hlZXQgb2YgdGhpcy5ncmlkT3B0aW9uPy5leHBvcnQ/LnNoZWV0cykge1xyXG4gICAgICAgIGlmIChzaGVldC5uYW1lICYmIHNoZWV0Lml0ZW1zICYmIHNoZWV0LmZpZWxkcykge1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2hlZXQuaXRlbXMpKSB7XHJcbiAgICAgICAgICAgIHNoZWV0cy5wdXNoKHtcclxuICAgICAgICAgICAgICBuYW1lOiBzaGVldC5uYW1lLFxyXG4gICAgICAgICAgICAgIGl0ZW1zOiBzaGVldC5pdGVtcyxcclxuICAgICAgICAgICAgICBmaWVsZHM6IHNoZWV0LmZpZWxkc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNoZWV0cy5wdXNoKHtcclxuICAgICAgICAgICAgICBuYW1lOiBzaGVldC5uYW1lLFxyXG4gICAgICAgICAgICAgIGl0ZW1zOiBhd2FpdCBzaGVldC5pdGVtcygpLFxyXG4gICAgICAgICAgICAgIGZpZWxkczogc2hlZXQuZmllbGRzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhwb3J0U2VydmljZS5nZW5lcmF0ZVVwbG9hZFRlbXBsYXRlKHtcclxuICAgICAga2V5OiB0aGlzLmtleSxcclxuICAgICAgdGVtcGxhdGU6IHtcclxuICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUgfHwgdGhpcy5ncmlkT3B0aW9uPy5leHBvcnQ/LmZpbGVOYW1lLFxyXG4gICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucy5maWx0ZXIoZSA9PiB0aGlzLnNlbGVjdGVkW2UuZmllbGRdKSxcclxuICAgICAgICBzaGVldHNcclxuICAgICAgfSxcclxuICAgICAgZ3JvdXA6IHRoaXMuc2VsZWN0ZWRHcm91cD8uY29kZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkV4cG9ydCA9IChmaWxlOiBTZEV4cG9ydEZpbGUpID0+IHtcclxuICAgIHRoaXMuZXhwb3J0LmVtaXQoe1xyXG4gICAgICBmaWxlLFxyXG4gICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnNcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkVGVtcGxhdGUgPSBhc3luYyAoKSA9PiB7XHJcbiAgICBjb25zdCBmaWxlID0gYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLnVwbG9hZFRlbXBsYXRlKHtcclxuICAgICAga2V5OiB0aGlzLmtleSxcclxuICAgICAgZ3JvdXA6IHRoaXMuc2VsZWN0ZWRHcm91cD8uY29kZSxcclxuICAgICAgdmFsaWRhdG9yOiB0aGlzLmdyaWRPcHRpb24/LmV4cG9ydD8udmFsaWRhdG9yc1xyXG4gICAgfSk7XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICB0aGlzLmZpbGVzID0gWy4uLnRoaXMuZmlsZXMsIGZpbGVdO1xyXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVGaWxlID0gKGZpbGU6IFNkRXhwb3J0RmlsZSkgPT4ge1xyXG4gICAgdGhpcy5ub3RpZnlTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnUmVtb3ZlIHRlbXBsYXRlJykpLnRoZW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2UucmVtb3ZlRmlsZSh7XHJcbiAgICAgICAga2V5OiB0aGlzLmtleSxcclxuICAgICAgICBmaWxlTmFtZTogZmlsZS5maWxlTmFtZSxcclxuICAgICAgICBncm91cDogdGhpcy5zZWxlY3RlZEdyb3VwPy5jb2RlIHx8IG51bGxcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXMuZmlsZXMuaW5kZXhPZihmaWxlKTtcclxuICAgICAgdGhpcy5maWxlcy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgdGhpcy5maWxlcyA9IFsuLi50aGlzLmZpbGVzXTtcclxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVUZW1wbGF0ZSA9IGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IHsgdHJhbnNsYXRlIH0gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmNvbHVtbnMuc29tZShlID0+IHRoaXMuc2VsZWN0ZWRbZS5maWVsZF0pKSB7XHJcbiAgICAgIHRoaXMubm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZyh0cmFuc2xhdGUoJ1BsZWFzZSBzZWxlY3QgY29sdW1ucycpKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdGFydCgpO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLnRlbXBsYXRlTmFtZSArICcueGxzeCc7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5ncmlkT3B0aW9uPy5leHBvcnQ/LnZhbGlkYXRvcnM/LihmaWxlTmFtZSkpIHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcodGhpcy5ncmlkT3B0aW9uPy5leHBvcnQ/LnZhbGlkYXRvcnMoZmlsZU5hbWUpKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZW5lcmF0ZUFuZFVwbG9hZFRlbXBsYXRlKGZpbGVOYW1lKTtcclxuICAgICAgaWYgKHJlc3VsdD8uZmlsZVBhdGgpIHtcclxuICAgICAgICBjb25zdCBmaWxlOiBTZEV4cG9ydEZpbGUgPSB7XHJcbiAgICAgICAgICBmaWxlUGF0aDogcmVzdWx0LmZpbGVQYXRoLFxyXG4gICAgICAgICAgZmlsZU5hbWU6IHJlc3VsdC5maWxlTmFtZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vbkV4cG9ydChmaWxlKTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlTmFtZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lbmFibGVDcmVhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsZXMgPSBbLi4udGhpcy5maWxlcywgZmlsZV07XHJcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlR3JvdXAgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmxvYWRGaWxlcyh0aGlzLmxpc3RHcm91cHM/LnNlbGVjdGVkT3B0aW9ucz8uc2VsZWN0ZWRbMF0/LnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRvclRlbXBsYXRlTmFtZSA9ICh2YWw6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgeyB0cmFuc2xhdGUgfSA9IHRoaXMudHJhbnNsYXRlU2VydmljZTtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL15bQS1aYS16MC05IF9dKltBLVphLXowLTldW0EtWmEtejAtOSBfXSokLztcclxuICAgIGlmICghdmFsKSB7XHJcbiAgICAgIHJldHVybiB0cmFuc2xhdGUoJ1BsZWFzZSBlbnRlciB5b3VyIHRlbXBsYXRlIG5hbWUnKTtcclxuICAgIH1cclxuICAgIGlmICh2YWwubGVuZ3RoID4gNTApIHtcclxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnVGVtcGxhdGUgbmFtZSBpcyB0b28gbG9uZycpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFyZWdleC50ZXN0KHZhbCkpIHtcclxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnVGVtcGxhdGUgbmFtZSBvbmx5IGNvbnRhaW5zIGxldHRlcnMsIG51bWJlcnMgYW5kIHNwYWNlcycpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59XHJcbiJdfQ==